summaryrefslogtreecommitdiff
path: root/macros/generic/diagrams
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 /macros/generic/diagrams
Initial commit
Diffstat (limited to 'macros/generic/diagrams')
-rw-r--r--macros/generic/diagrams/borceux/README23
-rw-r--r--macros/generic/diagrams/borceux/compatibility/OldDiagram291
-rw-r--r--macros/generic/diagrams/borceux/compatibility/OldMaxiDiagram209
-rw-r--r--macros/generic/diagrams/borceux/compatibility/OldMicroDiagram90
-rw-r--r--macros/generic/diagrams/borceux/compatibility/OldMiniDiagram107
-rw-r--r--macros/generic/diagrams/borceux/compatibility/OldMultipleArrows49
-rw-r--r--macros/generic/diagrams/borceux/diagram/Diagram8973
-rw-r--r--macros/generic/diagrams/borceux/diagram/MaxiDiagram10213
-rw-r--r--macros/generic/diagrams/borceux/diagram/MicroDiagram1917
-rw-r--r--macros/generic/diagrams/borceux/diagram/MiniDiagram3164
-rw-r--r--macros/generic/diagrams/borceux/diagram/MultipleArrows1313
-rw-r--r--macros/generic/diagrams/borceux/user-guides/Diagram_Mode_d_Emploi588
-rw-r--r--macros/generic/diagrams/borceux/user-guides/Diagram_Read_Me579
-rw-r--r--macros/generic/diagrams/circ/COPYING340
-rw-r--r--macros/generic/diagrams/circ/Makefile115
-rw-r--r--macros/generic/diagrams/circ/README22
-rw-r--r--macros/generic/diagrams/circ/circ.dtx6053
-rw-r--r--macros/generic/diagrams/circ/circ.ins19
-rw-r--r--macros/generic/diagrams/circ/circ.pdfbin0 -> 273283 bytes
-rw-r--r--macros/generic/diagrams/circ/circ.txt11
l---------macros/generic/diagrams/circuit1
-rw-r--r--macros/generic/diagrams/dcpic/README9
-rw-r--r--macros/generic/diagrams/dcpic/dcpic.sty1412
-rw-r--r--macros/generic/diagrams/dcpic/europroc.cls332
-rw-r--r--macros/generic/diagrams/dcpic/eurotex2001.pdfbin0 -> 197271 bytes
-rw-r--r--macros/generic/diagrams/dcpic/eurotex2001.tex916
-rw-r--r--macros/generic/diagrams/dcpic/examples.pdfbin0 -> 221190 bytes
-rw-r--r--macros/generic/diagrams/dcpic/examples.tex776
-rw-r--r--macros/generic/diagrams/dcpic/manDCPiC.pdfbin0 -> 287676 bytes
-rw-r--r--macros/generic/diagrams/dcpic/manDCPiC.tex723
-rw-r--r--macros/generic/diagrams/dcpic/manDCPiCpt.pdfbin0 -> 297287 bytes
-rw-r--r--macros/generic/diagrams/dcpic/manDCPiCpt.tex846
-rw-r--r--macros/generic/diagrams/diagxy/README8
-rw-r--r--macros/generic/diagrams/diagxy/diagxy.tex1259
-rw-r--r--macros/generic/diagrams/diagxy/diaxydoc.pdfbin0 -> 398133 bytes
-rw-r--r--macros/generic/diagrams/diagxy/diaxydoc.tex1797
-rw-r--r--macros/generic/diagrams/kuvio/COPYRIGHT17
-rw-r--r--macros/generic/diagrams/kuvio/README45
-rw-r--r--macros/generic/diagrams/kuvio/README257
-rw-r--r--macros/generic/diagrams/kuvio/arrsy/Makefile-dist50
-rw-r--r--macros/generic/diagrams/kuvio/arrsy/README40
-rw-r--r--macros/generic/diagrams/kuvio/arrsy/Uarrsy.fd8
-rw-r--r--macros/generic/diagrams/kuvio/arrsy/arrsy.mf116
-rw-r--r--macros/generic/diagrams/kuvio/arrsy/arrsy.sty137
-rw-r--r--macros/generic/diagrams/kuvio/arrsy/arrsy.tex133
-rw-r--r--macros/generic/diagrams/kuvio/arrsy/arrsy10.mf45
-rw-r--r--macros/generic/diagrams/kuvio/arrsy/arrsym.mf477
-rw-r--r--macros/generic/diagrams/kuvio/arrsy/patchlevel_191
-rw-r--r--macros/generic/diagrams/kuvio/arrsy/symbols.ps264
-rw-r--r--macros/generic/diagrams/kuvio/arrsy/symbols.tex43
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/README55
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg01b.tex15
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg02.tex23
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg02A4.tex24
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg03.tex30
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg04.tex7
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg05.tex22
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg06a.tex15
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg09.tex28
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg12.tex13
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg13.tex15
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg15.tex10
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg16.tex7
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg17.tex14
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg18.tex10
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg19.tex20
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg20.tex13
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg20A4.tex13
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eg/eg21.tex12
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eps/face.eps211
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eps/harebra.eps414
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/eps/plot.eps11784
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/auxfile.cd22
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/carrot.tex283
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/cite.cd24
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/contents.cd88
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/counter.cd75
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/environ.cd101
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/equation.cd332
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/index.cd42
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/label.cd18
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/patchlevel_101
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/section.cd223
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/state.cd185
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/theorem.cd13
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/toc.cd21
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/xr.cd45
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/misc/biblio.cd86
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/misc/rcs.cd73
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/arrsy.fs25
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/bbm.fs49
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/bbold.fs20
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/cm.fs108
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/rsfs.fs20
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/sfss.cd206
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/sfss.df41
l---------macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/sfss.fs1
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/misc/calc.tex70
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/misc/listing.tex67
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/macros/misc/verbatim.tex96
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/revision_2.5.121
l---------macros/generic/diagrams/kuvio/doc-src/tdwk-A4.cd1
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/tdwk-A4.tex5
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/tdwk-e.tex101
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/tdwk-r.tex1
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/tdwk-s.tex2123
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/tdwk.cd161
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/tdwk.ist10
-rw-r--r--macros/generic/diagrams/kuvio/doc-src/tdwk.tex1743
-rw-r--r--macros/generic/diagrams/kuvio/doc/README10
-rw-r--r--macros/generic/diagrams/kuvio/examples-A4.ps5171
-rw-r--r--macros/generic/diagrams/kuvio/examples.ps5423
-rw-r--r--macros/generic/diagrams/kuvio/kuvio.sty28
-rw-r--r--macros/generic/diagrams/kuvio/kuvio.tex1891
-rw-r--r--macros/generic/diagrams/kuvio/patchlevel_2161
-rw-r--r--macros/generic/diagrams/taylor/Borceux-to-Taylor.tex796
-rw-r--r--macros/generic/diagrams/taylor/V3,90.tex1908
-rw-r--r--macros/generic/diagrams/taylor/V3,91.tex1917
-rw-r--r--macros/generic/diagrams/taylor/V3,93.tex1912
l---------macros/generic/diagrams/taylor/diagrams.sty1
l---------macros/generic/diagrams/taylor/diagrams.tex1
-rw-r--r--macros/generic/diagrams/taylor/index.html599
-rw-r--r--macros/generic/diagrams/taylor/manual.bklt.gzbin0 -> 259169 bytes
-rw-r--r--macros/generic/diagrams/taylor/manual.dvibin0 -> 151084 bytes
-rw-r--r--macros/generic/diagrams/taylor/manual.pdfbin0 -> 344003 bytes
-rw-r--r--macros/generic/diagrams/taylor/manual.ps.gzbin0 -> 258884 bytes
-rw-r--r--macros/generic/diagrams/taylor/manual.tex2695
-rw-r--r--macros/generic/diagrams/taylor/msg1992.html236
-rw-r--r--macros/generic/diagrams/xypic/CATALOG21
-rw-r--r--macros/generic/diagrams/xypic/COPYING339
-rw-r--r--macros/generic/diagrams/xypic/FONTCOPYING94
-rw-r--r--macros/generic/diagrams/xypic/INSTALL233
-rw-r--r--macros/generic/diagrams/xypic/MANIFEST232
-rw-r--r--macros/generic/diagrams/xypic/README107
-rw-r--r--macros/generic/diagrams/xypic/TRAILER117
-rw-r--r--macros/generic/diagrams/xypic/VERSIONS115
-rw-r--r--macros/generic/diagrams/xypic/Xy-logo.pngbin0 -> 711 bytes
-rw-r--r--macros/generic/diagrams/xypic/Xy-pic.html377
-rw-r--r--macros/generic/diagrams/xypic/afm/xyatip10.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xybsql10.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xybtip10.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xycirc10.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xycmat10.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xycmat11.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xycmat12.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xycmbt10.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xycmbt11.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xycmbt12.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xydash10.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xyeuat10.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xyeuat11.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xyeuat12.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xyeubt10.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xyeubt11.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xyeubt12.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xyluat10.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xyluat11.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xyluat12.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xylubt10.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xylubt11.afm146
-rw-r--r--macros/generic/diagrams/xypic/afm/xylubt12.afm146
-rw-r--r--macros/generic/diagrams/xypic/doc/barrdoc.pdfbin0 -> 290585 bytes
-rw-r--r--macros/generic/diagrams/xypic/doc/xyguide.pdfbin0 -> 192189 bytes
-rw-r--r--macros/generic/diagrams/xypic/doc/xypdf.pdfbin0 -> 279816 bytes
-rw-r--r--macros/generic/diagrams/xypic/doc/xyrefer.pdfbin0 -> 1175021 bytes
-rw-r--r--macros/generic/diagrams/xypic/doc/xysource.pdfbin0 -> 1695863 bytes
-rw-r--r--macros/generic/diagrams/xypic/enc/xycirc.enc281
-rw-r--r--macros/generic/diagrams/xypic/enc/xyd.enc281
-rw-r--r--macros/generic/diagrams/xypic/enc/xyd2.enc281
-rw-r--r--macros/generic/diagrams/xypic/map/xypic.map64
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyatip.mf71
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyatip10.mf59
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyatri.mf58
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xybsql10.mf95
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xybtip.mf71
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xybtip10.mf59
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xybtri.mf58
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xycirc10.mf177
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xycm.mf42
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xycmat10.mf58
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xycmat11.mf41
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xycmat12.mf41
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xycmbt10.mf58
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xycmbt11.mf41
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xycmbt12.mf41
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyd.mf79
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyd2.mf81
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xydash10.mf89
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyeuat10.mf41
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyeuat11.mf41
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyeuat12.mf41
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyeubt10.mf41
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyeubt11.mf41
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyeubt12.mf41
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyeuler.mf42
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyline10.mf119
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xylu.mf47
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyluat10.mf45
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyluat11.mf45
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyluat12.mf45
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xylubt10.mf45
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xylubt11.mf45
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xylubt12.mf45
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xymisc10.mf143
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xyqc10.mf96
-rw-r--r--macros/generic/diagrams/xypic/mfinputs/xytech.mf42
-rw-r--r--macros/generic/diagrams/xypic/pfm/xyatip10.pfmbin0 -> 23456 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xybsql10.pfmbin0 -> 25295 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xybtip10.pfmbin0 -> 23299 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xycirc10.pfmbin0 -> 19852 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xycmat10.pfmbin0 -> 23792 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xycmat11.pfmbin0 -> 24448 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xycmat12.pfmbin0 -> 23014 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xycmbt10.pfmbin0 -> 23767 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xycmbt11.pfmbin0 -> 24414 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xycmbt12.pfmbin0 -> 23057 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xydash10.pfmbin0 -> 16609 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xyeuat10.pfmbin0 -> 22107 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xyeuat11.pfmbin0 -> 22229 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xyeuat12.pfmbin0 -> 16437 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xyeubt10.pfmbin0 -> 22006 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xyeubt11.pfmbin0 -> 22177 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xyeubt12.pfmbin0 -> 16516 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xyluat10.pfmbin0 -> 17726 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xyluat11.pfmbin0 -> 17316 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xyluat12.pfmbin0 -> 17503 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xylubt10.pfmbin0 -> 17637 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xylubt11.pfmbin0 -> 17360 bytes
-rw-r--r--macros/generic/diagrams/xypic/pfm/xylubt12.pfmbin0 -> 17359 bytes
-rw-r--r--macros/generic/diagrams/xypic/ps/xy389dict.pro380
-rw-r--r--macros/generic/diagrams/xypic/support/dvitogif89a215
-rw-r--r--macros/generic/diagrams/xypic/support/install-tds174
-rw-r--r--macros/generic/diagrams/xypic/support/pnmrawtopcropwhite.c183
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xyatip10.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xybsql10.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xybtip10.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xycirc10.tfmbin0 -> 844 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xycmat10.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xycmat11.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xycmat12.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xycmbt10.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xycmbt11.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xycmbt12.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xydash10.tfmbin0 -> 984 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xyeuat10.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xyeuat11.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xyeuat12.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xyeubt10.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xyeubt11.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xyeubt12.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xyline10.tfmbin0 -> 844 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xyluat10.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xyluat11.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xyluat12.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xylubt10.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xylubt11.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xylubt12.tfmbin0 -> 608 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xymisc10.tfmbin0 -> 720 bytes
-rw-r--r--macros/generic/diagrams/xypic/texfonts/xyqc10.tfmbin0 -> 724 bytes
-rw-r--r--macros/generic/diagrams/xypic/texinputs/movie.cls333
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xy.sty137
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xy.tex2694
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xy16textures.tex122
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xy17oztex.tex121
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xy2cell.tex668
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyall.tex36
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyarc.tex683
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyarrow.tex538
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xybarr.tex1016
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xycmactex.tex28
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xycmtip.tex29
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xycolor.tex112
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xycrayon.tex32
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xycurve.tex2702
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xydummy.tex30
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xydvidrv.tex36
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xydvips.tex154
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xydvitops.tex179
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyemtex.tex101
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyframe.tex537
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xygraph.tex219
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyidioms.tex72
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyimport.tex68
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyknot.tex901
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyline.tex237
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xymacpat.xyp60
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xymatrix.tex500
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xymovie.tex75
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xynecula.tex330
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyoztex.tex130
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xypdf-co.tex129
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xypdf-cu.tex1187
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xypdf-fr.tex438
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xypdf-li.tex69
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xypdf-ro.tex133
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xypdf.tex522
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xypic.sty32
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xypic.tex24
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xypicture.tex55
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xypoly.tex609
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyps-c.tex69
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyps-col.tex97
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyps-f.tex127
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyps-l.tex68
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyps-pro.tex173
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyps-ps.tex280
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyps-r.tex61
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyps-s.tex51
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyps-t.tex64
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyps.tex367
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xypsdict.tex241
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xypspatt.tex104
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyrecat.tex36
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyrotate.tex161
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xysmart.tex320
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xytextures.tex123
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xytile.tex125
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xytips.tex81
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xytp-f.tex174
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xytpic.tex228
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyv2.tex277
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyweb.tex94
-rw-r--r--macros/generic/diagrams/xypic/texinputs/xyxdvi.tex138
-rw-r--r--macros/generic/diagrams/xypic/type1/xyatip10.pfbbin0 -> 17164 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xybsql10.pfbbin0 -> 15471 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xybtip10.pfbbin0 -> 16979 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xycirc10.pfbbin0 -> 15405 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xycmat10.pfbbin0 -> 17442 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xycmat11.pfbbin0 -> 16692 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xycmat12.pfbbin0 -> 17701 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xycmbt10.pfbbin0 -> 17084 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xycmbt11.pfbbin0 -> 17318 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xycmbt12.pfbbin0 -> 17284 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xydash10.pfbbin0 -> 16202 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xyeuat10.pfbbin0 -> 17093 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xyeuat11.pfbbin0 -> 16780 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xyeuat12.pfbbin0 -> 16859 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xyeubt10.pfbbin0 -> 16794 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xyeubt11.pfbbin0 -> 17000 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xyeubt12.pfbbin0 -> 16813 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xyluat10.pfbbin0 -> 10111 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xyluat11.pfbbin0 -> 10114 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xyluat12.pfbbin0 -> 10113 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xylubt10.pfbbin0 -> 10171 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xylubt11.pfbbin0 -> 10174 bytes
-rw-r--r--macros/generic/diagrams/xypic/type1/xylubt12.pfbbin0 -> 10173 bytes
346 files changed, 114026 insertions, 0 deletions
diff --git a/macros/generic/diagrams/borceux/README b/macros/generic/diagrams/borceux/README
new file mode 100644
index 0000000000..8a606dfd9e
--- /dev/null
+++ b/macros/generic/diagrams/borceux/README
@@ -0,0 +1,23 @@
+This is the borceux package of diagram macros.
+
+Copyright 1993 Francis Borceux
+You may freely use, modify, and/or distribute each of the files in this
+package without limitation. The package consists of the following files:
+
+ README
+ compatibility/OldDiagram
+ compatibility/OldMaxiDiagram
+ compatibility/OldMicroDiagram
+ compatibility/OldMiniDiagram
+ compatibility/OldMultipleArrows
+ diagram/Diagram
+ diagram/MaxiDiagram
+ diagram/MicroDiagram
+ diagram/MiniDiagram
+ diagram/MultipleArrows
+ user-guides/Diagram_Mode_d_Emploi
+ user-guides/Diagram_Read_Me
+
+Of course no support is guaranteed, but the author will attempt to
+assist with problems. Current email address:
+francis dot borceux at uclouvain dot be.
diff --git a/macros/generic/diagrams/borceux/compatibility/OldDiagram b/macros/generic/diagrams/borceux/compatibility/OldDiagram
new file mode 100644
index 0000000000..5b10a593c3
--- /dev/null
+++ b/macros/generic/diagrams/borceux/compatibility/OldDiagram
@@ -0,0 +1,291 @@
+\catcode`\@=11
+
+\newcommand{\earv}[1]{\ear[#1]}
+\newcommand{\Earv}[2]{\Ear[#2]{#1}}
+\newcommand{\eaRv}[2]{\eaR[#2]{#1}}
+\newcommand{\edotarv}[1]{\edotar[#1]}
+\newcommand{\Edotarv}[2]{\Edotar[#2]{#1}}
+\newcommand{\edotaRv}[2]{\edotaR[#2]{#1}}
+\newcommand{\emonov}[1]{\emono[#1]}
+\newcommand{\Emonov}[2]{\Emono[#2]{#1}}
+\newcommand{\emonOv}[2]{\emonO[#2]{#1}}
+\newcommand{\eepiv}[1]{\eepi[#1]}
+\newcommand{\Eepiv}[2]{\Eepi[#2]{#1}}
+\newcommand{\eepIv}[2]{\eepI[#2]{#1}}
+\newcommand{\ebimov}[1]{\ebimo[#1]}
+\newcommand{\Ebimov}[2]{\Ebimo[#2]{#1}}
+\newcommand{\ebimOv}[2]{\ebimO[#2]{#1}}
+\newcommand{\eisov}[1]{\eiso[#1]}
+\newcommand{\Eisov}[2]{\Eiso[#2]{#1}}
+\newcommand{\eisOv}[2]{\eisO[#2]{#1}}
+\newcommand{\eeqlrv}[1]{\eeql[#1]}
+\newcommand{\ebiarv}[1]{\ebiar[#1]}
+\newcommand{\Ebiarv}[3]{\Ear[#3]{#1}{#2}}
+\newcommand{\eadjarv}[1]{\eadjar[#1]}
+\newcommand{\Eadjarv}[3]{\Ear[#3]{#1}{#2}}
+
+\newcommand{\warv}[1]{\war[#1]}
+\newcommand{\Warv}[2]{\War[#2]{#1}}
+\newcommand{\waRv}[2]{\waR[#2]{#1}}
+\newcommand{\wdotarv}[1]{\wdotar[#1]}
+\newcommand{\Wdotarv}[2]{\Wdotar[#2]{#1}}
+\newcommand{\wdotaRv}[2]{\wdotaR[#2]{#1}}
+\newcommand{\wmonov}[1]{\wmono[#1]}
+\newcommand{\Wmonov}[2]{\Wmono[#2]{#1}}
+\newcommand{\wmonOv}[2]{\wmonO[#2]{#1}}
+\newcommand{\wepiv}[1]{\wepi[#1]}
+\newcommand{\Wepiv}[2]{\Wepi[#2]{#1}}
+\newcommand{\wepIv}[2]{\wepI[#2]{#1}}
+\newcommand{\wbimov}[1]{\wbimo[#1]}
+\newcommand{\Wbimov}[2]{\Wbimo[#2]{#1}}
+\newcommand{\wbimOv}[2]{\wbimO[#2]{#1}}
+\newcommand{\wisov}[1]{\wiso[#1]}
+\newcommand{\Wisov}[2]{\Wiso[#2]{#1}}
+\newcommand{\wisOv}[2]{\wisO[#2]{#1}}
+\newcommand{\weqlrv}[1]{\weql[#1]}
+\newcommand{\wbiarv}[1]{\wbiar[#1]}
+\newcommand{\Wbiarv}[3]{\War[#3]{#1}{#2}}
+\newcommand{\wadjarv}[1]{\wadjar[#1]}
+\newcommand{\Wadjarv}[3]{\War[#3]{#1}{#2}}
+
+\newcommand{\narv}[1]{\nar[#1]}
+\newcommand{\Narv}[2]{\Nar[#2]{#1}}
+\newcommand{\naRv}[2]{\naR[#2]{#1}}
+\newcommand{\ndotarv}[1]{\ndotar[#1]}
+\newcommand{\Ndotarv}[2]{\Ndotar[#2]{#1}}
+\newcommand{\ndotaRv}[2]{\ndotaR[#2]{#1}}
+\newcommand{\nmonov}[1]{\nmono[#1]}
+\newcommand{\Nmonov}[2]{\Nmono[#2]{#1}}
+\newcommand{\nmonOv}[2]{\nmonO[#2]{#1}}
+\newcommand{\nepiv}[1]{\nepi[#1]}
+\newcommand{\Nepiv}[2]{\Nepi[#2]{#1}}
+\newcommand{\nepIv}[2]{\nepI[#2]{#1}}
+\newcommand{\nbimov}[1]{\nbimo[#1]}
+\newcommand{\Nbimov}[2]{\Nbimo[#2]{#1}}
+\newcommand{\nbimOv}[2]{\nbimO[#2]{#1}}
+\newcommand{\nisov}[1]{\niso[#1]}
+\newcommand{\Nisov}[2]{\Niso[#2]{#1}}
+\newcommand{\nisOv}[2]{\nisO[#2]{#1}}
+\newcommand{\neqlrv}[1]{\neql[#1]}
+\newcommand{\nbiarv}[1]{\nbiar[#1]}
+\newcommand{\Nbiarv}[3]{\Nar[#3]{#1}{#2}}
+\newcommand{\nadjarv}[1]{\nadjar[#1]}
+\newcommand{\Nadjarv}[3]{\Nar[#3]{#1}{#2}}
+
+\newcommand{\sarv}[1]{\sar[#1]}
+\newcommand{\Sarv}[2]{\Sar[#2]{#1}}
+\newcommand{\saRv}[2]{\saR[#2]{#1}}
+\newcommand{\sdotarv}[1]{\sdotar[#1]}
+\newcommand{\Sdotarv}[2]{\Sdotar[#2]{#1}}
+\newcommand{\sdotaRv}[2]{\sdotaR[#2]{#1}}
+\newcommand{\smonov}[1]{\smono[#1]}
+\newcommand{\Smonov}[2]{\Smono[#2]{#1}}
+\newcommand{\smonOv}[2]{\smonO[#2]{#1}}
+\newcommand{\sepiv}[1]{\sepi[#1]}
+\newcommand{\Sepiv}[2]{\Sepi[#2]{#1}}
+\newcommand{\sepIv}[2]{\sepI[#2]{#1}}
+\newcommand{\sbimov}[1]{\sbimo[#1]}
+\newcommand{\Sbimov}[2]{\Sbimo[#2]{#1}}
+\newcommand{\sbimOv}[2]{\sbimO[#2]{#1}}
+\newcommand{\sisov}[1]{\siso[#1]}
+\newcommand{\Sisov}[2]{\Siso[#2]{#1}}
+\newcommand{\sisOv}[2]{\sisO[#2]{#1}}
+\newcommand{\seqlrv}[1]{\seql[#1]}
+\newcommand{\sbiarv}[1]{\sbiar[#1]}
+\newcommand{\Sbiarv}[3]{\Sar[#3]{#1}{#2}}
+\newcommand{\sadjarv}[1]{\sadjar[#1]}
+\newcommand{\Sadjarv}[3]{\Sar[#3]{#1}{#2}}
+
+\newcommand{\searv}[1]{\sear[#1]}
+\newcommand{\Searv}[2]{\Sear[#2]{#1}}
+\newcommand{\seaRv}[2]{\seaR[#2]{#1}}
+
+\newcommand{\nearv}[1]{\near[#1]}
+\newcommand{\Nearv}[2]{\Near[#2]{#1}}
+\newcommand{\neaRv}[2]{\neaR[#2]{#1}}
+
+\newcommand{\swarv}[1]{\swar[#1]}
+\newcommand{\Swarv}[2]{\Swar[#2]{#1}}
+\newcommand{\swaRv}[2]{\swaR[#2]{#1}}
+
+\newcommand{\nwarv}[1]{\nwar[#1]}
+\newcommand{\Nwarv}[2]{\Nwar[#2]{#1}}
+\newcommand{\nwaRv}[2]{\nwaR[#2]{#1}}
+
+\newcommand{\necurve}[1]{\necurvar[#1]}
+\newcommand{\nwcurve}[1]{\nwcurvar[#1]}
+\newcommand{\securve}[1]{\securvar[#1]}
+\newcommand{\swcurve}[1]{\swcurvar[#1]}
+\newcommand{\encurve}[1]{\encurvar[#1]}
+\newcommand{\escurve}[1]{\escurvar[#1]}
+\newcommand{\wncurve}[1]{\wncurvar[#1]}
+\newcommand{\wscurve}[1]{\wscurvar[#1]}
+
+\newcommand{\Freear}[8]{\begin{picture}(0,0)%
+\put(#400,#500){\vector(#6,#7){#800}}%
+\truex{#200}\truey{#300}%
+\put(\value{x},\value{y}){$#1$}\end{picture}}%
+\newcommand{\freear}[5]{\Freear{}{0}{0}{#1}{#2}{#3}{#4}{#5}}%
+
+\newcommand{\DIAG}[1]{%
+\diagramtrue%
+\SCALE=\defaultscale%
+\setlength{\unitlength}{655sp}%
+\initialize{\mbox{$#1$}}}%
+
+\newcommand{\N}[1]%
+{\raisebox{0pt}[7pt][0pt]{$#1$}}%
+
+\let\B=\bold
+
+\def\newmovename(#1,#2)#3{\hspace{#1pt}%
+\raisebox{#2pt}[5pt][2pt]{\raisebox{#2pt}{$#3$}}%
+\hspace{-#1pt}}%
+\def\newmovearrow(#1,#2)#3{\makebox[0pt]{%
+\hspace{#1pt}\hspace{#1pt}%
+\raisebox{#2pt}[0pt][0pt]{\raisebox{#2pt}{$#3$}}}}%
+\def\newmovevertex(#1,#2)#3{%
+\mbox{\hspace{#1pt}%
+\raisebox{#2pt}{\raisebox{#2pt}{$#3$}}%
+\hspace{-#1pt}}}%
+\newcommand{\oldmovename}[3]{\newmovename(#2,#3){#1}}
+\newcommand{\oldmovearrow}[3]{\newmovearrow(#2,#3){#1}}
+\newcommand{\oldmovevertex}[3]{\newmovevertex(#2,#3){#1}}
+\renewcommand{\movename}{\@ifnextchar({\newmovename}{\oldmovename}}
+\renewcommand{\movearrow}{\@ifnextchar({\newmovearrow}{\oldmovearrow}}
+\renewcommand{\movevertex}{\@ifnextchar({\newmovevertex}{\oldmovevertex}}
+
+\newcount\A\newcount\B
+\newcommand{\Diag}[2]{\A=0\B=0\DIAG{#2}}
+\newcommand{\Diagv}[4]{\A=#2\B=#3\DIAG{#4}}
+\newcommand{\diaGv}[2]{\advance\B by -#1\diagv{\A}{\B}{#2}}
+\newcommand{\diaG}{\diagv{\A}{\B}{0}}
+\newcommand{\move}[3]{\movename(#2,#3){#1}}
+
+% SPECIAL SYMBOLS
+
+% adjoint symbol
+\newcommand{\adj}{\begin{picture}(9,6)%
+\put(1,3){\line(1,0){6}}\put(7,0){\line(0,1){6}}%
+\end{picture}}%
+
+% commutative diagram symbol
+\newcommand{\com}{\begin{picture}(12,8)%
+\put(6,4){\oval(8,8)[b]}\put(6,4){\oval(8,8)[r]}%
+\put(6,8){\line(-1,0){2}}\end{picture}}%
+
+% natural transformation with names [1],[2],[3]
+\newcommand{\Nat}[3]{\raisebox{-2pt}%
+{\begin{picture}(34,15)%
+\put(2,10){\line(1,0){30}}%
+\put(32,10){\ehead}%
+\put(2,0){\line(1,0){30}}%
+\put(32,0){\ehead}%
+\put(13,2){$\Downarrow$}%
+\put(20,3){$\scriptstyle{#2}$}%
+\put(4,11){$\scriptstyle{#1}$}%
+\put(4,1){$\scriptstyle{#3}$}%
+\end{picture}}}%
+
+% natural transformation
+\newcommand{\nat}{\raisebox{-2pt}%
+{\begin{picture}(34,10)%
+\put(2,10){\line(1,0){30}}%
+\put(32,10){\ehead}%
+\put(2,0){\line(1,0){30}}%
+\put(32,0){\ehead}%
+\put(13,2){$\Downarrow$}%
+\end{picture}}}%
+
+% pair of natural transformations with names [1],[2],[3],[4],[5]
+\newcommand{\Binat}[5]{\raisebox{-7.5pt}%
+{\begin{picture}(34,25)%
+\put(2,20){\line(1,0){30}}%
+\put(32,20){\ehead}%
+\put(2,10){\line(1,0){30}}%
+\put(32,10){\ehead}%
+\put(2,0){\line(1,0){30}}%
+\put(32,0){\ehead}%
+\put(13,12){$\Downarrow$}%
+\put(13,2){$\Downarrow$}%
+\put(20,13){$\scriptstyle{#2}$}%
+\put(20,3){$\scriptstyle{#4}$}%
+\put(4,21){$\scriptstyle{#1}$}%
+\put(4,11){$\scriptstyle{#3}$}%
+\put(4,1){$\scriptstyle{#5}$}%
+\end{picture}}}%
+
+% pair of natural transformations
+\newcommand{\binat}{\raisebox{-7.5pt}%
+{\begin{picture}(34,20)%
+\put(2,20){\line(1,0){30}}%
+\put(32,20){\ehead}%
+\put(2,10){\line(1,0){30}}%
+\put(32,10){\ehead}%
+\put(2,0){\line(1,0){30}}%
+\put(32,0){\ehead}%
+\put(13,12){$\Downarrow$}%
+\put(13,2){$\Downarrow$}%
+\end{picture}}}%
+
+% display natural transformation with names [1],[2],[3]
+\newcommand{\Dnat}[3]{\raisebox{-2pt}%
+{\begin{picture}(54,15)%
+\put(2,10){\line(1,0){50}}%
+\put(52,10){\ehead}%
+\put(2,0){\line(1,0){50}}%
+\put(52,0){\ehead}%
+\put(23,2){$\Downarrow$}%
+\put(30,1){$\textstyle{#2}$}%
+\put(4,11){$\textstyle{#1}$}%
+\put(4,1){$\textstyle{#3}$}%
+\end{picture}}}%
+
+% display natural transformation
+\newcommand{\dnat}{\raisebox{-2pt}%
+{\begin{picture}(54,10)%
+\put(2,10){\line(1,0){50}}%
+\put(52,10){\ehead}%
+\put(2,0){\line(1,0){50}}%
+\put(52,0){\ehead}%
+\put(23,2){$\Downarrow$}%
+\end{picture}}}%
+
+% display pair of natural transformations with names [1],[2],[3],[4],[5]
+\newcommand{\Dbinat}[5]{\raisebox{-7.5pt}%
+{\begin{picture}(54,25)%
+\put(2,20){\line(1,0){50}}%
+\put(52,20){\ehead}%
+\put(2,10){\line(1,0){50}}%
+\put(52,10){\ehead}%
+\put(2,0){\line(1,0){50}}%
+\put(52,0){\ehead}%
+\put(23,12){$\Downarrow$}%
+\put(23,2){$\Downarrow$}%
+\put(30,11){$\textstyle{#2}$}%
+\put(30,1){$\textstyle{#4}$}%
+\put(4,21){$\textstyle{#1}$}%
+\put(4,11){$\textstyle{#3}$}%
+\put(4,1){$\textstyle{#5}$}%
+\end{picture}}}%
+
+% display pair of natural transformations
+\newcommand{\dbinat}{\raisebox{-7.5pt}%
+{\begin{picture}(54,20)%
+\put(2,20){\line(1,0){50}}%
+\put(52,20){\ehead}%
+\put(2,10){\line(1,0){50}}%
+\put(52,10){\ehead}%
+\put(2,0){\line(1,0){50}}%
+\put(52,0){\ehead}%
+\put(23,12){$\Downarrow$}%
+\put(23,2){$\Downarrow$}%
+\end{picture}}}%
+
+\setdisplayarrowlength{20}
+
+\typeout{\string\displayarrowlength has been put to value 20
+by the file OldDiagram}
+
+
+\catcode`\@=12 \ No newline at end of file
diff --git a/macros/generic/diagrams/borceux/compatibility/OldMaxiDiagram b/macros/generic/diagrams/borceux/compatibility/OldMaxiDiagram
new file mode 100644
index 0000000000..a1fc33b66a
--- /dev/null
+++ b/macros/generic/diagrams/borceux/compatibility/OldMaxiDiagram
@@ -0,0 +1,209 @@
+\catcode`\@=11
+
+\newcommand{\earv}[1]{\ear[#1]}
+\newcommand{\Earv}[2]{\Ear[#2]{#1}}
+\newcommand{\eaRv}[2]{\eaR[#2]{#1}}
+\newcommand{\edotarv}[1]{\edotar[#1]}
+\newcommand{\Edotarv}[2]{\Edotar[#2]{#1}}
+\newcommand{\edotaRv}[2]{\edotaR[#2]{#1}}
+\newcommand{\emonov}[1]{\emono[#1]}
+\newcommand{\Emonov}[2]{\Emono[#2]{#1}}
+\newcommand{\emonOv}[2]{\emonO[#2]{#1}}
+\newcommand{\eepiv}[1]{\eepi[#1]}
+\newcommand{\Eepiv}[2]{\Eepi[#2]{#1}}
+\newcommand{\eepIv}[2]{\eepI[#2]{#1}}
+\newcommand{\ebimov}[1]{\ebimo[#1]}
+\newcommand{\Ebimov}[2]{\Ebimo[#2]{#1}}
+\newcommand{\ebimOv}[2]{\ebimO[#2]{#1}}
+\newcommand{\eisov}[1]{\eiso[#1]}
+\newcommand{\Eisov}[2]{\Eiso[#2]{#1}}
+\newcommand{\eisOv}[2]{\eisO[#2]{#1}}
+\newcommand{\eeqlrv}[1]{\eeql[#1]}
+\newcommand{\ebiarv}[1]{\ebiar[#1]}
+\newcommand{\Ebiarv}[3]{\Ear[#3]{#1}{#2}}
+\newcommand{\eadjarv}[1]{\eadjar[#1]}
+\newcommand{\Eadjarv}[3]{\Ear[#3]{#1}{#2}}
+\newcommand{\etriarv}[1]{\etriar[#1]}
+\newcommand{\Etriarv}[4]{\Etriar[#4]{#1}{#2}{#3}}
+\newcommand{\etriaRv}[4]{\etriaR[#4]{#1}{#2}{#3}}
+\newcommand{\etriadjarv}[1]{\etriadjar[#1]}
+\newcommand{\Etriadjarv}[4]{\Etriadjar[#4]{#1}{#2}{#3}}
+\newcommand{\etriadjaRv}[4]{\etriadjaR[#4]{#1}{#2}{#3}}
+\newcommand{\equadriarv}[1]{\equadriar[#1]}
+\newcommand{\equadriadjarv}[1]{\equadriadjar[#1]}
+\newcommand{\equintiarv}[1]{\equintiar[#1]}
+\newcommand{\equintiadjarv}[1]{\equintiadjar[#1]}
+
+\newcommand{\warv}[1]{\war[#1]}
+\newcommand{\Warv}[2]{\War[#2]{#1}}
+\newcommand{\waRv}[2]{\waR[#2]{#1}}
+\newcommand{\wdotarv}[1]{\wdotar[#1]}
+\newcommand{\Wdotarv}[2]{\Wdotar[#2]{#1}}
+\newcommand{\wdotaRv}[2]{\wdotaR[#2]{#1}}
+\newcommand{\wmonov}[1]{\wmono[#1]}
+\newcommand{\Wmonov}[2]{\Wmono[#2]{#1}}
+\newcommand{\wmonOv}[2]{\wmonO[#2]{#1}}
+\newcommand{\wepiv}[1]{\wepi[#1]}
+\newcommand{\Wepiv}[2]{\Wepi[#2]{#1}}
+\newcommand{\wepIv}[2]{\wepI[#2]{#1}}
+\newcommand{\wbimov}[1]{\wbimo[#1]}
+\newcommand{\Wbimov}[2]{\Wbimo[#2]{#1}}
+\newcommand{\wbimOv}[2]{\wbimO[#2]{#1}}
+\newcommand{\wisov}[1]{\wiso[#1]}
+\newcommand{\Wisov}[2]{\Wiso[#2]{#1}}
+\newcommand{\wisOv}[2]{\wisO[#2]{#1}}
+\newcommand{\weqlrv}[1]{\weql[#1]}
+\newcommand{\wbiarv}[1]{\wbiar[#1]}
+\newcommand{\Wbiarv}[3]{\War[#3]{#1}{#2}}
+\newcommand{\wadjarv}[1]{\wadjar[#1]}
+\newcommand{\Wadjarv}[3]{\War[#3]{#1}{#2}}
+\newcommand{\wtriarv}[1]{\wtriar[#1]}
+\newcommand{\Wtriarv}[4]{\Wtriar[#4]{#1}{#2}{#3}}
+\newcommand{\wtriaRv}[4]{\wtriaR[#4]{#1}{#2}{#3}}
+\newcommand{\wtriadjarv}[1]{\wtriadjar[#1]}
+\newcommand{\Wtriadjarv}[4]{\Wtriadjar[#4]{#1}{#2}{#3}}
+\newcommand{\wtriadjaRv}[4]{\wtriadjaR[#4]{#1}{#2}{#3}}
+\newcommand{\wquadriarv}[1]{\wquadriar[#1]}
+\newcommand{\wquadriadjarv}[1]{\wquadriadjar[#1]}
+\newcommand{\wquintiarv}[1]{\wquintiar[#1]}
+\newcommand{\wquintiadjarv}[1]{\wquintiadjar[#1]}
+
+\newcommand{\narv}[1]{\nar[#1]}
+\newcommand{\Narv}[2]{\Nar[#2]{#1}}
+\newcommand{\naRv}[2]{\naR[#2]{#1}}
+\newcommand{\ndotarv}[1]{\ndotar[#1]}
+\newcommand{\Ndotarv}[2]{\Ndotar[#2]{#1}}
+\newcommand{\ndotaRv}[2]{\ndotaR[#2]{#1}}
+\newcommand{\nmonov}[1]{\nmono[#1]}
+\newcommand{\Nmonov}[2]{\Nmono[#2]{#1}}
+\newcommand{\nmonOv}[2]{\nmonO[#2]{#1}}
+\newcommand{\nepiv}[1]{\nepi[#1]}
+\newcommand{\Nepiv}[2]{\Nepi[#2]{#1}}
+\newcommand{\nepIv}[2]{\nepI[#2]{#1}}
+\newcommand{\nbimov}[1]{\nbimo[#1]}
+\newcommand{\Nbimov}[2]{\Nbimo[#2]{#1}}
+\newcommand{\nbimOv}[2]{\nbimO[#2]{#1}}
+\newcommand{\nisov}[1]{\niso[#1]}
+\newcommand{\Nisov}[2]{\Niso[#2]{#1}}
+\newcommand{\nisOv}[2]{\nisO[#2]{#1}}
+\newcommand{\neqlrv}[1]{\neql[#1]}
+\newcommand{\nbiarv}[1]{\nbiar[#1]}
+\newcommand{\Nbiarv}[3]{\Nar[#3]{#1}{#2}}
+\newcommand{\nadjarv}[1]{\nadjar[#1]}
+\newcommand{\Nadjarv}[3]{\Nar[#3]{#1}{#2}}
+\newcommand{\ntriarv}[1]{\ntriar[#1]}
+\newcommand{\Ntriarv}[4]{\Ntriar[#4]{#1}{#2}{#3}}
+\newcommand{\ntriaRv}[4]{\ntriaR[#4]{#1}{#2}{#3}}
+\newcommand{\ntriadjarv}[1]{\ntriadjar[#1]}
+\newcommand{\Ntriadjarv}[4]{\Ntriadjar[#4]{#1}{#2}{#3}}
+\newcommand{\ntriadjaRv}[4]{\ntriadjaR[#4]{#1}{#2}{#3}}
+\newcommand{\nquadriarv}[1]{\nquadriar[#1]}
+\newcommand{\nquadriadjarv}[1]{\nquadriadjar[#1]}
+\newcommand{\nquintiarv}[1]{\nquintiar[#1]}
+\newcommand{\nquintiadjarv}[1]{\nquintiadjar[#1]}
+
+\newcommand{\sarv}[1]{\sar[#1]}
+\newcommand{\Sarv}[2]{\Sar[#2]{#1}}
+\newcommand{\saRv}[2]{\saR[#2]{#1}}
+\newcommand{\sdotarv}[1]{\sdotar[#1]}
+\newcommand{\Sdotarv}[2]{\Sdotar[#2]{#1}}
+\newcommand{\sdotaRv}[2]{\sdotaR[#2]{#1}}
+\newcommand{\smonov}[1]{\smono[#1]}
+\newcommand{\Smonov}[2]{\Smono[#2]{#1}}
+\newcommand{\smonOv}[2]{\smonO[#2]{#1}}
+\newcommand{\sepiv}[1]{\sepi[#1]}
+\newcommand{\Sepiv}[2]{\Sepi[#2]{#1}}
+\newcommand{\sepIv}[2]{\sepI[#2]{#1}}
+\newcommand{\sbimov}[1]{\sbimo[#1]}
+\newcommand{\Sbimov}[2]{\Sbimo[#2]{#1}}
+\newcommand{\sbimOv}[2]{\sbimO[#2]{#1}}
+\newcommand{\sisov}[1]{\siso[#1]}
+\newcommand{\Sisov}[2]{\Siso[#2]{#1}}
+\newcommand{\sisOv}[2]{\sisO[#2]{#1}}
+\newcommand{\seqlrv}[1]{\seql[#1]}
+\newcommand{\sbiarv}[1]{\sbiar[#1]}
+\newcommand{\Sbiarv}[3]{\Sar[#3]{#1}{#2}}
+\newcommand{\sadjarv}[1]{\sadjar[#1]}
+\newcommand{\Sadjarv}[3]{\Sar[#3]{#1}{#2}}
+\newcommand{\Striarv}[4]{\Striar[#4]{#1}{#2}{#3}}
+\newcommand{\striaRv}[4]{\striaR[#4]{#1}{#2}{#3}}
+\newcommand{\striadjarv}[1]{\striadjar[#1]}
+\newcommand{\Striadjarv}[4]{\Striadjar[#4]{#1}{#2}{#3}}
+\newcommand{\striadjaRv}[4]{\striadjaR[#4]{#1}{#2}{#3}}
+\newcommand{\squadriarv}[1]{\squadriar[#1]}
+\newcommand{\squadriadjarv}[1]{\squadriadjar[#1]}
+\newcommand{\squintiarv}[1]{\squintiar[#1]}
+\newcommand{\squintiadjarv}[1]{\nquintiadjar[#1]}
+
+\newcommand{\searv}[1]{\sear[#1]}
+\newcommand{\Searv}[2]{\Sear[#2]{#1}}
+\newcommand{\seaRv}[2]{\seaR[#2]{#1}}
+
+\newcommand{\nearv}[1]{\near[#1]}
+\newcommand{\Nearv}[2]{\Near[#2]{#1}}
+\newcommand{\neaRv}[2]{\neaR[#2]{#1}}
+
+\newcommand{\swarv}[1]{\swar[#1]}
+\newcommand{\Swarv}[2]{\Swar[#2]{#1}}
+\newcommand{\swaRv}[2]{\swaR[#2]{#1}}
+
+\newcommand{\nwarv}[1]{\nwar[#1]}
+\newcommand{\Nwarv}[2]{\Nwar[#2]{#1}}
+\newcommand{\nwaRv}[2]{\nwaR[#2]{#1}}
+
+\newcommand{\necurve}[1]{\necurvar[#1]}
+\newcommand{\nwcurve}[1]{\nwcurvar[#1]}
+\newcommand{\securve}[1]{\securvar[#1]}
+\newcommand{\swcurve}[1]{\swcurvar[#1]}
+\newcommand{\encurve}[1]{\encurvar[#1]}
+\newcommand{\escurve}[1]{\escurvar[#1]}
+\newcommand{\wncurve}[1]{\wncurvar[#1]}
+\newcommand{\wscurve}[1]{\wscurvar[#1]}
+
+\newcommand{\Freear}[8]{\begin{picture}(0,0)%
+\put(#400,#500){\vector(#6,#7){#800}}%
+\truex{#200}\truey{#300}%
+\put(\value{x},\value{y}){$#1$}\end{picture}}%
+\newcommand{\freear}[5]{\Freear{}{0}{0}{#1}{#2}{#3}{#4}{#5}}%
+
+\newcommand{\DIAG}[1]{%
+\diagramtrue%
+\SCALE=\defaultscale%
+\setlength{\unitlength}{655sp}%
+\initialize{\mbox{$#1$}}}%
+
+\newcommand{\N}[1]%
+{\raisebox{0pt}[7pt][0pt]{$#1$}}%
+
+\let\B=\bold
+
+\def\newmovename(#1,#2)#3{\hspace{#1pt}%
+\raisebox{#2pt}[5pt][2pt]{\raisebox{#2pt}{$#3$}}%
+\hspace{-#1pt}}%
+\def\newmovearrow(#1,#2)#3{\makebox[0pt]{%
+\hspace{#1pt}\hspace{#1pt}%
+\raisebox{#2pt}[0pt][0pt]{\raisebox{#2pt}{$#3$}}}}%
+\def\newmovevertex(#1,#2)#3{%
+\mbox{\hspace{#1pt}%
+\raisebox{#2pt}{\raisebox{#2pt}{$#3$}}%
+\hspace{-#1pt}}}%
+\newcommand{\oldmovename}[3]{\newmovename(#2,#3){#1}}
+\newcommand{\oldmovearrow}[3]{\newmovearrow(#2,#3){#1}}
+\newcommand{\oldmovevertex}[3]{\newmovevertex(#2,#3){#1}}
+\renewcommand{\movename}{\@ifnextchar({\newmovename}{\oldmovename}}
+\renewcommand{\movearrow}{\@ifnextchar({\newmovearrow}{\oldmovearrow}}
+\renewcommand{\movevertex}{\@ifnextchar({\newmovevertex}{\oldmovevertex}}
+
+\newcount\A\newcount\B
+\newcommand{\Diag}[2]{\A=0\B=0\DIAG{#2}}
+\newcommand{\Diagv}[4]{\A=#2\B=#3\DIAG{#4}}
+\newcommand{\diaGv}[2]{\advance\B by -#1\diagv{\A}{\B}{#2}}
+\newcommand{\diaG}{\diagv{\A}{\B}{0}}
+\newcommand{\move}[3]{\movename(#2,#3){#1}}
+
+\setdisplayarrowlength{20}
+
+\typeout{\string\displayarrowlength has been put to value 20
+by the file OldMaxiDiagram}
+
+\catcode`\@=12 \ No newline at end of file
diff --git a/macros/generic/diagrams/borceux/compatibility/OldMicroDiagram b/macros/generic/diagrams/borceux/compatibility/OldMicroDiagram
new file mode 100644
index 0000000000..26bd21b692
--- /dev/null
+++ b/macros/generic/diagrams/borceux/compatibility/OldMicroDiagram
@@ -0,0 +1,90 @@
+\catcode`\@=11
+
+\newcommand{\earv}[1]{\ear[#1]}
+\newcommand{\Earv}[2]{\Ear[#2]{#1}}
+\newcommand{\eaRv}[2]{\eaR[#2]{#1}}
+
+\newcommand{\warv}[1]{\war[#1]}
+\newcommand{\Warv}[2]{\War[#2]{#1}}
+\newcommand{\waRv}[2]{\waR[#2]{#1}}
+
+\newcommand{\narv}[1]{\nar[#1]}
+\newcommand{\Narv}[2]{\Nar[#2]{#1}}
+\newcommand{\naRv}[2]{\naR[#2]{#1}}
+
+\newcommand{\sarv}[1]{\sar[#1]}
+\newcommand{\Sarv}[2]{\Sar[#2]{#1}}
+\newcommand{\saRv}[2]{\saR[#2]{#1}}
+
+\newcommand{\searv}[1]{\sear[#1]}
+\newcommand{\Searv}[2]{\Sear[#2]{#1}}
+\newcommand{\seaRv}[2]{\seaR[#2]{#1}}
+
+\newcommand{\nearv}[1]{\near[#1]}
+\newcommand{\Nearv}[2]{\Near[#2]{#1}}
+\newcommand{\neaRv}[2]{\neaR[#2]{#1}}
+
+\newcommand{\swarv}[1]{\swar[#1]}
+\newcommand{\Swarv}[2]{\Swar[#2]{#1}}
+\newcommand{\swaRv}[2]{\swaR[#2]{#1}}
+
+\newcommand{\nwarv}[1]{\nwar[#1]}
+\newcommand{\Nwarv}[2]{\Nwar[#2]{#1}}
+\newcommand{\nwaRv}[2]{\nwaR[#2]{#1}}
+
+\newcommand{\necurve}[1]{\necurvar[#1]}
+\newcommand{\nwcurve}[1]{\nwcurvar[#1]}
+\newcommand{\securve}[1]{\securvar[#1]}
+\newcommand{\swcurve}[1]{\swcurvar[#1]}
+\newcommand{\encurve}[1]{\encurvar[#1]}
+\newcommand{\escurve}[1]{\escurvar[#1]}
+\newcommand{\wncurve}[1]{\wncurvar[#1]}
+\newcommand{\wscurve}[1]{\wscurvar[#1]}
+
+\newcommand{\Freear}[8]{\begin{picture}(0,0)%
+\put(#400,#500){\vector(#6,#7){#800}}%
+\truex{#200}\truey{#300}%
+\put(\value{x},\value{y}){$#1$}\end{picture}}%
+\newcommand{\freear}[5]{\Freear{}{0}{0}{#1}{#2}{#3}{#4}{#5}}%
+
+\newcommand{\DIAG}[1]{%
+\diagramtrue%
+\SCALE=\defaultscale%
+\setlength{\unitlength}{655sp}%
+\initialize{\mbox{$#1$}}}%
+
+\newcommand{\N}[1]%
+{\raisebox{0pt}[7pt][0pt]{$#1$}}%
+
+\let\B=\bold
+
+\def\newmovename(#1,#2)#3{\hspace{#1pt}%
+\raisebox{#2pt}[5pt][2pt]{\raisebox{#2pt}{$#3$}}%
+\hspace{-#1pt}}%
+\def\newmovearrow(#1,#2)#3{\makebox[0pt]{%
+\hspace{#1pt}\hspace{#1pt}%
+\raisebox{#2pt}[0pt][0pt]{\raisebox{#2pt}{$#3$}}}}%
+\def\newmovevertex(#1,#2)#3{%
+\mbox{\hspace{#1pt}%
+\raisebox{#2pt}{\raisebox{#2pt}{$#3$}}%
+\hspace{-#1pt}}}%
+\newcommand{\oldmovename}[3]{\newmovename(#2,#3){#1}}
+\newcommand{\oldmovearrow}[3]{\newmovearrow(#2,#3){#1}}
+\newcommand{\oldmovevertex}[3]{\newmovevertex(#2,#3){#1}}
+\renewcommand{\movename}{\@ifnextchar({\newmovename}{\oldmovename}}
+\renewcommand{\movearrow}{\@ifnextchar({\newmovearrow}{\oldmovearrow}}
+\renewcommand{\movevertex}{\@ifnextchar({\newmovevertex}{\oldmovevertex}}
+
+\newcount\A\newcount\B
+\newcommand{\Diag}[2]{\A=0\B=0\DIAG{#2}}
+\newcommand{\Diagv}[4]{\A=#2\B=#3\DIAG{#4}}
+\newcommand{\diaGv}[2]{\advance\B by -#1\diagv{\A}{\B}{#2}}
+\newcommand{\diaG}{\diagv{\A}{\B}{0}}
+\newcommand{\move}[3]{\movename(#2,#3){#1}}
+
+\setdisplayarrowlength{20}
+
+\typeout{\string\displayarrowlength has been put to value 20
+by the file OldMicroDiagram}
+
+\catcode`\@=12 \ No newline at end of file
diff --git a/macros/generic/diagrams/borceux/compatibility/OldMiniDiagram b/macros/generic/diagrams/borceux/compatibility/OldMiniDiagram
new file mode 100644
index 0000000000..af15140718
--- /dev/null
+++ b/macros/generic/diagrams/borceux/compatibility/OldMiniDiagram
@@ -0,0 +1,107 @@
+\catcode`\@=11
+
+\newcommand{\earv}[1]{\ear[#1]}
+\newcommand{\Earv}[2]{\Ear[#2]{#1}}
+\newcommand{\eaRv}[2]{\eaR[#2]{#1}}
+\newcommand{\ebiarv}[1]{\ebiar[#1]}
+\newcommand{\Ebiarv}[3]{\Ear[#3]{#1}{#2}}
+\newcommand{\eadjarv}[1]{\eadjar[#1]}
+\newcommand{\Eadjarv}[3]{\Ear[#3]{#1}{#2}}
+
+\newcommand{\warv}[1]{\war[#1]}
+\newcommand{\Warv}[2]{\War[#2]{#1}}
+\newcommand{\waRv}[2]{\waR[#2]{#1}}
+\newcommand{\wbiarv}[1]{\wbiar[#1]}
+\newcommand{\Wbiarv}[3]{\War[#3]{#1}{#2}}
+\newcommand{\wadjarv}[1]{\wadjar[#1]}
+\newcommand{\Wadjarv}[3]{\War[#3]{#1}{#2}}
+
+\newcommand{\narv}[1]{\nar[#1]}
+\newcommand{\Narv}[2]{\Nar[#2]{#1}}
+\newcommand{\naRv}[2]{\naR[#2]{#1}}
+\newcommand{\nbiarv}[1]{\nbiar[#1]}
+\newcommand{\Nbiarv}[3]{\Nar[#3]{#1}{#2}}
+\newcommand{\nadjarv}[1]{\nadjar[#1]}
+\newcommand{\Nadjarv}[3]{\Nar[#3]{#1}{#2}}
+
+\newcommand{\sarv}[1]{\sar[#1]}
+\newcommand{\Sarv}[2]{\Sar[#2]{#1}}
+\newcommand{\saRv}[2]{\saR[#2]{#1}}
+\newcommand{\sbiarv}[1]{\sbiar[#1]}
+\newcommand{\Sbiarv}[3]{\Sar[#3]{#1}{#2}}
+\newcommand{\sadjarv}[1]{\sadjar[#1]}
+\newcommand{\Sadjarv}[3]{\Sar[#3]{#1}{#2}}
+
+\newcommand{\searv}[1]{\sear[#1]}
+\newcommand{\Searv}[2]{\Sear[#2]{#1}}
+\newcommand{\seaRv}[2]{\seaR[#2]{#1}}
+
+\newcommand{\nearv}[1]{\near[#1]}
+\newcommand{\Nearv}[2]{\Near[#2]{#1}}
+\newcommand{\neaRv}[2]{\neaR[#2]{#1}}
+
+\newcommand{\swarv}[1]{\swar[#1]}
+\newcommand{\Swarv}[2]{\Swar[#2]{#1}}
+\newcommand{\swaRv}[2]{\swaR[#2]{#1}}
+
+\newcommand{\nwarv}[1]{\nwar[#1]}
+\newcommand{\Nwarv}[2]{\Nwar[#2]{#1}}
+\newcommand{\nwaRv}[2]{\nwaR[#2]{#1}}
+
+\newcommand{\necurve}[1]{\necurvar[#1]}
+\newcommand{\nwcurve}[1]{\nwcurvar[#1]}
+\newcommand{\securve}[1]{\securvar[#1]}
+\newcommand{\swcurve}[1]{\swcurvar[#1]}
+\newcommand{\encurve}[1]{\encurvar[#1]}
+\newcommand{\escurve}[1]{\escurvar[#1]}
+\newcommand{\wncurve}[1]{\wncurvar[#1]}
+\newcommand{\wscurve}[1]{\wscurvar[#1]}
+
+\newcommand{\Freear}[8]{\begin{picture}(0,0)%
+\put(#400,#500){\vector(#6,#7){#800}}%
+\truex{#200}\truey{#300}%
+\put(\value{x},\value{y}){$#1$}\end{picture}}%
+\newcommand{\freear}[5]{\Freear{}{0}{0}{#1}{#2}{#3}{#4}{#5}}%
+
+\newcommand{\DIAG}[1]{%
+\diagramtrue%
+\SCALE=\defaultscale%
+\setlength{\unitlength}{655sp}%
+\initialize{\mbox{$#1$}}}%
+
+\newcommand{\N}[1]%
+{\raisebox{0pt}[7pt][0pt]{$#1$}}%
+
+\let\B=\bold
+
+\def\newmovename(#1,#2)#3{\hspace{#1pt}%
+\raisebox{#2pt}[5pt][2pt]{\raisebox{#2pt}{$#3$}}%
+\hspace{-#1pt}}%
+\def\newmovearrow(#1,#2)#3{\makebox[0pt]{%
+\hspace{#1pt}\hspace{#1pt}%
+\raisebox{#2pt}[0pt][0pt]{\raisebox{#2pt}{$#3$}}}}%
+\def\newmovevertex(#1,#2)#3{%
+\mbox{\hspace{#1pt}%
+\raisebox{#2pt}{\raisebox{#2pt}{$#3$}}%
+\hspace{-#1pt}}}%
+\newcommand{\oldmovename}[3]{\newmovename(#2,#3){#1}}
+\newcommand{\oldmovearrow}[3]{\newmovearrow(#2,#3){#1}}
+\newcommand{\oldmovevertex}[3]{\newmovevertex(#2,#3){#1}}
+\renewcommand{\movename}{\@ifnextchar({\newmovename}{\oldmovename}}
+\renewcommand{\movearrow}{\@ifnextchar({\newmovearrow}{\oldmovearrow}}
+\renewcommand{\movevertex}{\@ifnextchar({\newmovevertex}{\oldmovevertex}}
+
+\newcount\A\newcount\B
+\newcommand{\Diag}[2]{\A=0\B=0\DIAG{#2}}
+\newcommand{\Diagv}[4]{\A=#2\B=#3\DIAG{#4}}
+\newcommand{\diaGv}[2]{\advance\B by -#1\diagv{\A}{\B}{#2}}
+\newcommand{\diaG}{\diagv{\A}{\B}{0}}
+\newcommand{\move}[3]{\movename(#2,#3){#1}}
+
+\setdisplayarrowlength{20}
+
+\typeout{\string\displayarrowlength has been put to value 20
+by the file OldMiniDiagram}
+
+
+\catcode`\@=12 \ No newline at end of file
diff --git a/macros/generic/diagrams/borceux/compatibility/OldMultipleArrows b/macros/generic/diagrams/borceux/compatibility/OldMultipleArrows
new file mode 100644
index 0000000000..1b97736a06
--- /dev/null
+++ b/macros/generic/diagrams/borceux/compatibility/OldMultipleArrows
@@ -0,0 +1,49 @@
+ % COMPATIBILITY WITH OLDER VERSIONS
+
+\newcommand{\etriarv}[1]{\etriar[#1]}
+\newcommand{\Etriarv}[4]{\Etriar[#4]{#1}{#2}{#3}}
+\newcommand{\etriaRv}[4]{\etriaR[#4]{#1}{#2}{#3}}
+\newcommand{\etriadjarv}[1]{\etriadjar[#1]}
+\newcommand{\Etriadjarv}[4]{\Etriadjar[#4]{#1}{#2}{#3}}
+\newcommand{\etriadjaRv}[4]{\etriadjaR[#4]{#1}{#2}{#3}}
+\newcommand{\equadriarv}[1]{\equadriar[#1]}
+\newcommand{\equadriadjarv}[1]{\equadriadjar[#1]}
+\newcommand{\equintiarv}[1]{\equintiar[#1]}
+\newcommand{\equintiadjarv}[1]{\equintiadjar[#1]}
+
+\newcommand{\wtriarv}[1]{\wtriar[#1]}
+\newcommand{\Wtriarv}[4]{\Wtriar[#4]{#1}{#2}{#3}}
+\newcommand{\wtriaRv}[4]{\wtriaR[#4]{#1}{#2}{#3}}
+\newcommand{\wtriadjarv}[1]{\wtriadjar[#1]}
+\newcommand{\Wtriadjarv}[4]{\Wtriadjar[#4]{#1}{#2}{#3}}
+\newcommand{\wtriadjaRv}[4]{\wtriadjaR[#4]{#1}{#2}{#3}}
+\newcommand{\wquadriarv}[1]{\wquadriar[#1]}
+\newcommand{\wquadriadjarv}[1]{\wquadriadjar[#1]}
+\newcommand{\wquintiarv}[1]{\wquintiar[#1]}
+\newcommand{\wquintiadjarv}[1]{\wquintiadjar[#1]}
+
+\newcommand{\ntriarv}[1]{\ntriar[#1]}
+\newcommand{\Ntriarv}[4]{\Ntriar[#4]{#1}{#2}{#3}}
+\newcommand{\ntriaRv}[4]{\ntriaR[#4]{#1}{#2}{#3}}
+\newcommand{\ntriadjarv}[1]{\ntriadjar[#1]}
+\newcommand{\Ntriadjarv}[4]{\Ntriadjar[#4]{#1}{#2}{#3}}
+\newcommand{\ntriadjaRv}[4]{\ntriadjaR[#4]{#1}{#2}{#3}}
+\newcommand{\nquadriarv}[1]{\nquadriar[#1]}
+\newcommand{\nquadriadjarv}[1]{\nquadriadjar[#1]}
+\newcommand{\nquintiarv}[1]{\nquintiar[#1]}
+\newcommand{\nquintiadjarv}[1]{\nquintiadjar[#1]}
+
+\newcommand{\Striarv}[4]{\Striar[#4]{#1}{#2}{#3}}
+\newcommand{\striaRv}[4]{\striaR[#4]{#1}{#2}{#3}}
+\newcommand{\striadjarv}[1]{\striadjar[#1]}
+\newcommand{\Striadjarv}[4]{\Striadjar[#4]{#1}{#2}{#3}}
+\newcommand{\striadjaRv}[4]{\striadjaR[#4]{#1}{#2}{#3}}
+\newcommand{\squadriarv}[1]{\squadriar[#1]}
+\newcommand{\squadriadjarv}[1]{\squadriadjar[#1]}
+\newcommand{\squintiarv}[1]{\squintiar[#1]}
+\newcommand{\squintiadjarv}[1]{\nquintiadjar[#1]}
+
+\setdisplayarrowlength{20}
+
+\typeout{\string\displayarrowlength has been put to value 20
+by the file OldMultipleArrows}
diff --git a/macros/generic/diagrams/borceux/diagram/Diagram b/macros/generic/diagrams/borceux/diagram/Diagram
new file mode 100644
index 0000000000..0aeae85b10
--- /dev/null
+++ b/macros/generic/diagrams/borceux/diagram/Diagram
@@ -0,0 +1,8973 @@
+% DIAGRAM MACROS (version 3.1)
+
+\catcode`\@=11
+
+%%%%% FIXING SOME PARAMETERS
+
+%%% Fixing the printerresolution
+%%% unit = 1 dpi
+\newcount\printerresolution
+\global\printerresolution=300
+
+%%% Fixing the length of a segment in an arrowhead
+%%% unit = 0.01pt
+\newcount\headsize
+\global\headsize=450
+
+%%% Fixing the thickness of an arrowhead
+%%% value = 1/5 of the font size
+\font\dotfont = lcircle10 at 3pt
+
+%%% Fixing the distance between the two heads of an epimorphism
+%%% unit = 0.01pt
+\newcount\epihead
+\global\epihead=200
+
+%%% Fixing the default scaling factor for diagrams
+\newcount\defaultscale
+\def\setdefaultscale#1{\global\defaultscale=#1}
+\setdefaultscale{100}
+
+\newcount\actualtextarrowspace
+\newcount\actualtextarrowlength
+
+% \computetextparameters computes the parameters
+% required to design a text arrow
+\newcommand{\computetextparameters}%
+{\global\actualtextarrowspace=\textarrowlength%
+\global\advance\actualtextarrowspace by 3%
+\global\actualtextarrowlength=\textarrowlength%
+\global\multiply\actualtextarrowlength by 100}
+
+%%% Fixing the default length of text arrows
+\newcount\textarrowlength
+\def\settextarrowlength#1{\global\textarrowlength=#1%
+\computetextparameters}
+\settextarrowlength{20}
+
+\newcount\actualdisplayarrowspace
+\newcount\actualdisplayarrowlength
+
+% \computedisplayparameters computes the parameters
+% required to design a displayed arrow
+\newcommand{\computedisplayparameters}%
+{\global\actualdisplayarrowspace=\displayarrowlength%
+\global\advance\actualdisplayarrowspace by 3%
+\global\actualdisplayarrowlength=\displayarrowlength%
+\global\multiply\actualdisplayarrowlength by 100}
+
+%%% Fixing the default length of displayed arrows
+\newcount\displayarrowlength
+\def\setdisplayarrowlength#1{\global\displayarrowlength=#1%
+\computedisplayparameters}
+\setdisplayarrowlength{30}
+
+
+% ERROR MESSAGES
+
+% Checking the next token without gobbling blanks
+\def\@ifnexttok#1#2#3{\let\@tempe #1\def\@tempa{#2}\def\@tempb{#3}%
+\futurelet\@tempc\@ifntok}
+\def\@ifntok{\ifx \@tempc \@tempe\let\@tempd\@tempa\else\let\@tempd\@tempb\fi%
+\@tempd}
+
+% \@diagramerror{MSG}{HLP}: Types a Diagram error message MSG and gives an error
+% halt with error help message HLP.
+\def\@diagramerror#1#2{%
+\edef\@@tempc{#2}\expandafter\errhelp\expandafter{\@@tempc}%
+\typeout{Diagram error. \space See User's guide for explanation.^^J
+ \space\@spaces\@spaces\@spaces Type \space H <return> \space for
+ immediate help.}\errmessage{#1}}
+
+\newif\ifdiagram
+
+% error test and message for text arrows
+\def\testtextmode{%
+\ifdiagram\@diagramerror{Text arrows are not allowed in diagrams}{Here you
+should use east or west diagram arrows, not forward or backward text arrows.
+Try proceeding now, typeset could succeed but with unpredictable output.}
+\else\ifmmode\relax\else%
+\@diagramerror{Missing \string$}{Text arrows should be introduced in math mode.
+Try proceeding now, typeset could succeed but output could not be what you expected.}\fi\fi}
+
+% error test and message for diagram arrows
+\def\testdiagrammode{\ifdiagram\relax\else
+\@diagramerror{Diagram arrows are not allowed in formulas}{Here you
+should use forward or backward text arrows, not diagram arrows. Proceeding
+could work with unpredictable output, but overflow arithmetic
+could also occur.}\fi}
+
+% error test and message for diagrams in math mode
+\def\checkmode{\ifmmode\@diagramerror{Wrong mode: no diagrams
+allowed in math mode.}{You should leave math mode before
+introducing your diagram. All items in the diagram will automatically be
+processed in math mode.}\else\relax\fi\global\diagramtrue}
+
+\global\diagramfalse
+
+%%%%% DESIGING THE ARROW HEADS
+
+%%% Customizing the unitlength for the sake of precision
+\setlength{\unitlength}{0.01pt}
+
+%%% Printing one dot at the required scale
+\def\DOT{{\dotfont q}}
+
+%%% Computing the distance between two dots in an arrowhead
+\newcount\basicstep
+\basicstep=7227
+\global\divide\basicstep by \printerresolution
+
+%%% Computing the number of dots in an arrowhead
+\newcount\numberofsteps
+\numberofsteps=\headsize
+\global\divide\numberofsteps by \basicstep
+
+%%% Producing an arrow head
+\newcommand{\makehead}[3]{%
+\begin{picture}(0,0)%
+\multiput(0,0)(#1,#2){#3}{\DOT}%
+\multiput(0,0)(-#2,#1){#3}{\DOT}%
+\end{picture}}
+
+%%% Creating bitmap images of the arrowheads
+\newcount\xstep
+\newcount\ystep
+
+\newsavebox{\northhead}
+\savebox{\northhead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 7071%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nhead}{\usebox{\northhead}}
+
+\newsavebox{\easthead}
+\savebox{\easthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 7071%
+\divide\xstep by 10000%
+\ystep=-\xstep%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\ehead}{\usebox{\easthead}}
+
+\newsavebox{\southhead}
+\savebox{\southhead}{%
+\xstep=\basicstep%
+\multiply\xstep by 7071%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\shead}{\usebox{\southhead}}
+
+\newsavebox{\westhead}
+\savebox{\westhead}{%
+\xstep=\basicstep%
+\multiply\xstep by 7071%
+\divide\xstep by 10000%
+\ystep=-\xstep%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\whead}{\usebox{\westhead}}
+
+\newsavebox{\northwesthead}
+\savebox{\northwesthead}{%
+\makehead{0}{-\basicstep}{\numberofsteps}}
+\newcommand{\nwhead}{\usebox{\northwesthead}}
+
+\newsavebox{\northeasthead}
+\savebox{\northeasthead}{%
+\makehead{-\basicstep}{0}{\numberofsteps}}
+\newcommand{\nehead}{\usebox{\northeasthead}}
+
+\newsavebox{\southwesthead}
+\savebox{\southwesthead}{%
+\makehead{\basicstep}{0}{\numberofsteps}}
+\newcommand{\swhead}{\usebox{\southwesthead}}
+
+\newsavebox{\southeasthead}
+\savebox{\southeasthead}{%
+\makehead{0}{\basicstep}{\numberofsteps}}
+\newcommand{\sehead}{\usebox{\southeasthead}}
+
+\newsavebox{\eastnortheasthead}
+\savebox{\eastnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 9486%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\enehead}{\usebox{\eastnortheasthead}}
+
+\newsavebox{\northnortheasthead}
+\savebox{\northnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 9486%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nnehead}{\usebox{\northnortheasthead}}
+
+\newsavebox{\southsouthwesthead}
+\savebox{\southsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 9486%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\sswhead}{\usebox{\southsouthwesthead}}
+
+\newsavebox{\westsouthwesthead}
+\savebox{\westsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 9486%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\wswhead}{\usebox{\westsouthwesthead}}
+
+\newsavebox{\westnorthwesthead}
+\savebox{\westnorthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 3162%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\wnwhead}{\usebox{\westnorthwesthead}}
+
+\newsavebox{\eastsoutheasthead}
+\savebox{\eastsoutheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 3162%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\esehead}{\usebox{\eastsoutheasthead}}
+
+\newsavebox{\northnorthwesthead}
+\savebox{\northnorthwesthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 3162%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nnwhead}{\usebox{\northnorthwesthead}}
+
+\newsavebox{\southsoutheasthead}
+\savebox{\southsoutheasthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 3162%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\ssehead}{\usebox{\southsoutheasthead}}
+
+\newsavebox{\easteastnortheasthead}
+\savebox{\easteastnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 8944%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\eenehead}{\usebox{\easteastnortheasthead}}
+
+\newsavebox{\northnorthnortheasthead}
+\savebox{\northnorthnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 8944%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nnnehead}{\usebox{\northnorthnortheasthead}}
+
+\newsavebox{\southsouthsouthwesthead}
+\savebox{\southsouthsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 8944%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\ssswhead}{\usebox{\southsouthsouthwesthead}}
+
+\newsavebox{\westwestsouthwesthead}
+\savebox{\westwestsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 8944%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\wwswhead}{\usebox{\westwestsouthwesthead}}
+
+\newsavebox{\westwestnorthwesthead}
+\savebox{\westwestnorthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 4472%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\wwnwhead}{\usebox{\westwestnorthwesthead}}
+
+\newsavebox{\easteastsoutheasthead}
+\savebox{\easteastsoutheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 4472%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\eesehead}{\usebox{\easteastsoutheasthead}}
+
+\newsavebox{\northnorthnorthwesthead}
+\savebox{\northnorthnorthwesthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 4472%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nnnwhead}{\usebox{\northnorthnorthwesthead}}
+
+\newsavebox{\southsouthsoutheasthead}
+\savebox{\southsouthsoutheasthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 4472%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\sssehead}{\usebox{\southsouthsoutheasthead}}
+
+\newsavebox{\northeasteastnortheasthead}
+\savebox{\northeasteastnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 9806%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\neenehead}{\usebox{\northeasteastnortheasthead}}
+
+\newsavebox{\northeastnorthnortheasthead}
+\savebox{\northeastnorthnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 9806%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nennehead}{\usebox{\northeastnorthnortheasthead}}
+
+\newsavebox{\southwestsouthsouthwesthead}
+\savebox{\southwestsouthsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 9806%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\swsswhead}{\usebox{\southwestsouthsouthwesthead}}
+
+\newsavebox{\southwestwestsouthwesthead}
+\savebox{\southwestwestsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 9806%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\swwswhead}{\usebox{\southwestwestsouthwesthead}}
+
+\newsavebox{\northwestwestnorthwesthead}
+\savebox{\northwestwestnorthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 1961%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nwwnwhead}{\usebox{\northwestwestnorthwesthead}}
+
+\newsavebox{\southeasteastsoutheasthead}
+\savebox{\southeasteastsoutheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 1961%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\seesehead}{\usebox{\southeasteastsoutheasthead}}
+
+\newsavebox{\northwestnorthnorthwesthead}
+\savebox{\northwestnorthnorthwesthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 1961%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nwnnwhead}{\usebox{\northwestnorthnorthwesthead}}
+
+\newsavebox{\southeastsouthsoutheasthead}
+\savebox{\southeastsouthsoutheasthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 1961%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\sessehead}{\usebox{\southeastsouthsoutheasthead}}
+
+%%% Restoring the standard unitlength
+\setlength{\unitlength}{1pt}
+
+
+% MACROS FOR MARKED ARROWS
+
+\newsavebox{\isomorphismmark}
+\newcommand{\isomark}[1]{\savebox{\isomorphismmark}{#1}}
+\isomark{$\cong$}
+\newcommand{\isosign}{\usebox{\isomorphismmark}}
+
+\newif\ifuserdist
+\newsavebox{\distributormark}
+\newcommand{\distmark}[1]{\ifx#1\distcircle\userdistfalse\else%
+\userdisttrue\savebox{\distributormark}{#1}\fi}
+\newsavebox{\distributorcircle}
+\savebox{\distributorcircle}{\begin{picture}(0,0)%
+\put(0,0){\circle{4}}\end{picture}}
+\newcommand{\distsign}{\ifuserdist\usebox{\distributormark}\else%
+\usebox{\distributorcircle}\fi}
+\userdistfalse
+
+
+
+% MACROS FOR ADJUSTING THE LENGTH OF MONOMORPHISMS AND EPIMORPHISMS
+
+\newcount\monolength
+\newcount\epilength
+\newcount\bimolength
+\newcount\secondmonolength
+\newcount\secondepilength
+
+\newcount\monotail%
+\global\monotail=\headsize%
+\global\multiply\monotail by 7070%
+\global\divide\monotail by 10000%
+
+\newcount\truemonotail%
+\newcount\trueepihead%
+
+\def\truetail{\truemonotail=\monotail%
+\multiply\truemonotail by 100%
+\divide\truemonotail by \SCALE}
+
+\def\truehead{\trueepihead=\epihead%
+\multiply\trueepihead by 100%
+\divide\trueepihead by \SCALE}
+
+\newcount\Monotail%
+\global\Monotail=\headsize%
+\global\divide\Monotail by 2%
+
+\newcount\Epihead%
+\global\Epihead=\epihead%
+\global\multiply\Epihead by 7070%
+\global\divide\Epihead by 10000%
+
+\newcount\Truemonotail%
+\newcount\Trueepihead%
+
+\def\Truetail{\Truemonotail=\Monotail%
+\multiply\Truemonotail by 100%
+\divide\Truemonotail by \SCALE}%
+
+\def\Truehead{\Trueepihead=\Epihead%
+\multiply\Trueepihead by 100%
+\divide\Trueepihead by \SCALE}
+
+\newcount\MonoTail%
+\global\MonoTail=\headsize%
+\global\multiply\MonoTail by 6324%
+\global\divide\MonoTail by 10000%
+
+\newcount\EpiHead%
+\global\EpiHead=\epihead%
+\global\multiply\EpiHead by 8944%
+\global\divide\EpiHead by 10000%
+
+\newcount\TrueMonoTail%
+\newcount\TrueEpiHead%
+
+\def\TrueTail{\TrueMonoTail=\MonoTail%
+\multiply\TrueMonoTail by 100%
+\divide\TrueMonoTail by \SCALE}%
+
+\def\TrueHead{\TrueEpiHead=\EpiHead%
+\multiply\TrueEpiHead by 100%
+\divide\TrueEpiHead by \SCALE}
+
+\newcount\monotaiL%
+\global\monotaiL=\headsize%
+\global\multiply\monotaiL by 3162%
+\global\divide\monotaiL by 10000%
+
+\newcount\epiheaD%
+\global\epiheaD=\epihead%
+\global\multiply\epiheaD by 4472%
+\global\divide\epiheaD by 10000%
+
+\newcount\truemonotaiL%
+\newcount\trueepiheaD%
+
+\def\truetaiL{\truemonotaiL=\monotaiL%
+\multiply\truemonotaiL by 100%
+\divide\truemonotaiL by \SCALE}%
+
+\def\trueheaD{\trueepiheaD=\epiheaD%
+\multiply\trueepiheaD by 100%
+\divide\trueepiheaD by \SCALE}
+
+
+% INITIALIZATION
+
+\newcount\SCALE%
+
+\newcount\NUMBER%
+
+\newcount\LINE%
+
+\newcount\COLUMN%
+
+\newcount\WIDTH%
+
+\newcount\SOURCE%
+
+\newcount\ARROW%
+
+\newcount\TARGET%
+
+\newcount\ARROWLENGTH%
+
+\newcount\NUMBEROFDOTS%
+
+\newcounter{x}%
+
+\newcounter{y}%
+
+\newcounter{z}%
+
+\newcounter{horizontal}%
+
+\newcounter{vertical}%
+
+\newskip\itemlength%
+
+\newskip\firstitem%
+
+\newskip\seconditem%
+
+\newcommand{\printarrow}{}%
+
+\newcount\X%
+
+\newcount\Y%
+
+\newcount\Z%
+
+
+% MACROS FOR DESIGNING DIAGRAMS
+
+
+% \truex{n} divides n x 100 by the scaling factor and puts the result
+% in counter x
+\newcommand{\truex}[1]{%
+\NUMBER=#1%
+\multiply\NUMBER by 100%
+\divide\NUMBER by \SCALE%
+\setcounter{x}{\NUMBER}}%
+
+% \truey{n} divides n x 100 by the scaling factor and puts the result
+% in counter y
+\newcommand{\truey}[1]{%
+\NUMBER=#1%
+\multiply\NUMBER by 100%
+\divide\NUMBER by \SCALE%
+\setcounter{y}{\NUMBER}}%
+
+% \truez{n} divides n x 100 by the scaling factor and puts the result
+% in counter z
+\newcommand{\truez}[1]{%
+\NUMBER=#1%
+\multiply\NUMBER by 100%
+\divide\NUMBER by \SCALE%
+\setcounter{z}{\NUMBER}}%
+
+
+% \changecounters computes the values of the various parameters required
+% to design an arrow with adjusted length.
+\newcommand{\changecounters}[1]{%
+\SOURCE=\ARROW%
+\ARROW=\TARGET%
+\settowidth{\itemlength}{#1}%
+\ifdim \itemlength > 2800\unitlength%
+\addtolength{\itemlength}{-2800\unitlength}%
+\TARGET=\itemlength%
+\divide\TARGET by 1310%
+\multiply\TARGET by 100%
+\divide\TARGET by \SCALE%
+\else%
+\TARGET=0%
+\fi%
+\ARROWLENGTH=5000%
+\advance\ARROWLENGTH by -\SOURCE%
+\advance\ARROWLENGTH by -\TARGET%
+\divide\ARROWLENGTH by 100%
+\advance\SOURCE by -\TARGET}%
+
+% \initialize initializes the counters required to produce the diagram
+% and defines the formal dimensions of the diagram to be (0,0).
+\newcommand{\initialize}[1]{%
+\LINE=0%
+\COLUMN=0%
+\WIDTH=0%
+\ARROW=0%
+\TARGET=0%
+\changecounters{#1}%
+\renewcommand{\printarrow}{#1}%
+\begin{center}%
+\vspace{2pt}%
+\begin{picture}(0,0)}%
+
+% \DIAGV{n} starts the construction of a diagram scaled by a factor
+% n percent, computes the scaled unit length and the unscaling factor.
+\newcommand{\DIAGV}[2]{%
+\checkmode%
+\SCALE=#1%
+\setlength{\unitlength}{655sp}%
+\multiply\unitlength by \SCALE%
+\divide\unitlength by 100%
+\initialize{\mbox{$#2$}}}%
+
+% \n introduces the next item of the diagram, computes its parameters
+% and prints the previous item.
+\newcommand{\n}[1]{%
+\changecounters{\mbox{$#1$}}%
+\put(\COLUMN,\LINE){\makebox(0,0){\printarrow}}%
+\thinlines%
+\renewcommand{\printarrow}{\mbox{$#1$}}%
+\advance\COLUMN by 4000}%
+
+% \nn prints the last item of a line and starts a new line.
+\newcommand{\nn}[1]{%
+\put(\COLUMN,\LINE){\makebox(0,0){\printarrow}}%
+\thinlines%
+\ifnum \WIDTH < \COLUMN%
+\WIDTH=\COLUMN%
+\else%
+\fi%
+\advance\LINE by -4000%
+\COLUMN=0%
+\ARROW=0%
+\TARGET=0%
+\changecounters{\mbox{$#1$}}%
+\renewcommand{\printarrow}{\mbox{$#1$}}}%
+
+% \conclude prints the last item of the diagram and sets the
+% dimensions of the diagram;
+\newcommand{\conclude}{%
+\put(\COLUMN,\LINE){\makebox(0,0){\printarrow}}%
+\thinlines%
+\ifnum \WIDTH < \COLUMN%
+\WIDTH=\COLUMN%
+\else%
+\fi%
+\setcounter{horizontal}{\WIDTH}%
+\setcounter{vertical}{-\LINE}%
+\end{picture}}%
+
+% \diag prints the last item of the diagram and takes care of the spacing
+\newcommand{\diag}{%
+\conclude%
+\raisebox{0pt}[0pt][\value{vertical}\unitlength]{}%
+\hspace*{\value{horizontal}\unitlength}%
+\vspace{12pt}%
+\end{center}%
+\setlength{\unitlength}{1pt}%
+\global\diagramfalse}%
+
+% \diagv{t}{l}{b} prints the last item of the diagram and
+% adds a t points extra space at the top of the diagram
+% adds a l points extra space at the left of the diagram
+% adds a b points extra space at the bottom of the diagram
+\newcommand{\diagv}[3]{%
+\conclude%
+\NUMBER=#1%
+\rule{0pt}{\NUMBER pt}%
+\hspace*{-#2pt}%
+\raisebox{0pt}[0pt][\value{vertical}\unitlength]{}%
+\hspace*{\value{horizontal}\unitlength}%6
+\NUMBER=#3%
+\advance\NUMBER by 12%
+\vspace*{\NUMBER pt}%
+\end{center}%
+\setlength{\unitlength}{1pt}%
+\global\diagramfalse}%
+
+% \movename(n,m){f} moves the name f of the arrow n points right
+% and m points up.
+\def\movename(#1,#2)#3{%
+\hspace{#1pt}%
+\raisebox{#2pt}[5pt][2pt]{\raisebox{#2pt}{$#3$}}%
+\hspace{-#1pt}}%
+
+% \movearrow(n,m){\...} moves arrow \... n points right
+% and m points up.
+\def\movearrow(#1,#2)#3{%
+\makebox[0pt]{%
+\hspace{#1pt}\hspace{#1pt}%
+\raisebox{#2pt}[0pt][0pt]{\raisebox{#2pt}{$#3$}}}}%
+
+% \movevertex(n,m){A} moves vertex A n points right and m points up
+\def\movevertex(#1,#2)#3{%
+\mbox{\hspace{#1pt}%
+\raisebox{#2pt}{\raisebox{#2pt}{$#3$}}%
+\hspace{-#1pt}}}%
+
+% \movevertexleft{XXX} moves vertex XXX left
+\newcommand{\movevertexleft}[1]{\makebox[2800\unitlength][r]{$#1$}}
+
+% \movevertexright{XXX} moves vertex XXX right
+\newcommand{\movevertexright}[1]{\makebox[2800\unitlength][l]{$#1$}}
+
+% \crosslength{P}{Q} computes the formal dimensions of the
+% superposition of pictures P and Q
+\newcommand{\crosslength}[2]{%
+\settowidth{\firstitem}{#1}%
+\settowidth{\seconditem}{#2}%
+\ifdim\firstitem < \seconditem%
+\itemlength=\seconditem%
+\else%
+\itemlength=\firstitem%
+\fi%
+\divide\itemlength by 2%
+\hspace{\itemlength}}%
+
+% \cross{P}{Q} superposes pictures P and Q
+\newcommand{\cross}[2]{%
+\crosslength{\mbox{$#1$}}{\mbox{$#2$}}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0){$#1$}}%
+\thinlines%
+\put(0,0){\makebox(0,0){$#2$}}%
+\thinlines%
+\end{picture}%
+\crosslength{\mbox{$#1$}}{\mbox{$#2$}}}%
+
+% \bold prints the next arrow in bold-face type
+\newcommand{\bold}{\ifdiagram\thicklines\else\typeout{Sorry: command
+\string\bold does not apply to text arrows; I am ignoring it.}\fi}
+
+% \unbold switches back to normal arrows
+\newcommand{\unbold}{\thinlines}
+
+% SHORTENING THE TYPING OF DIAGRAMS
+
+\def\basicDIAG#1¤{\DIAGV{\defaultscale}{#1}\@ifnexttok¤{\finishline}{\basicn}}
+\def\basicDIAGV[#1]#2¤{\DIAGV{#1}{#2}\@ifnexttok¤{\finishline}{\basicn}}
+\def\basicn#1¤{\n{#1}\@ifnexttok¤{\finishline}{\basicn}}
+\def\basicnn#1¤{\nn{#1}\@ifnexttok¤{\finishline}{\basicn}}
+\def\finishline#1{\@ifnextchar\end{\diag}%
+{\@ifnextchar\spacing{\relax}{\basicnn}}}
+\def\spacing(#1,#2,#3){\diagv{#1}{#2}{#3}}
+
+\newif\ifcaption%
+
+\newenvironment{diagram}{%
+\iffloatdiag\relax\else
+\global\def\diagramcaption##1{%
+\global\captiontrue%
+\global\def\@diagcaption{##1}}%
+\global\def\@diagcaption{}\fi%
+\@ifnextchar[{\basicDIAGV}{\basicDIAG}}%
+{\iffloatdiag\relax\else%
+\ifcaption
+\begin{center}\mbox{}\@diagcaption\end{center}%
+\else\relax\fi\fi\global\captionfalse}
+
+\global\captionfalse
+
+
+% MACROS FOR FLOATING DIAGRAMS
+
+\gdef\@diaglabel{Diagram}
+\gdef\diagramlabel#1{\gdef\@diaglabel{#1}}
+
+\newcounter{Diagram}
+\setcounter{Diagram}{0}
+\def\theDiagram{\@arabic\c@Diagram}
+\def\fps@Diagram{tbp}
+\def\ftype@Diagram{1}
+\def\ext@Diagram{lof}
+\def\fnum@Diagram{\@diaglabel\ \theDiagram}
+\def\Diagram{\@float{Diagram}}
+\let\endDiagram\end@float
+\@namedef{Diagram*}{\@dblfloat{Diagram}}
+\@namedef{endDiagram*}{\end@dblfloat}
+
+\def\setdiagramcounter#1{\@addtoreset{Diagram}{#1}%
+\def\theDiagram{\arabic{#1}.\@arabic\c@Diagram}}
+
+\newif\iffloatdiag
+
+\newenvironment{floatingdiagram}{%
+\global\floatdiagtrue%
+\long\def\@makecaption##1##2{
+ \vskip 0pt
+ \setbox\@tempboxa\hbox{##1##2}
+ \ifdim \wd\@tempboxa >\hsize \unhbox\@tempboxa\par \else \hbox
+to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}%
+\global\def\diagramcaption##1{\global\def\@diagcaption{: ##1}}%
+\global\def\@diagcaption{}%
+\begin{Diagram}[tbp]\begin{diagram}}%
+{\end{diagram}\caption{\@diagcaption}\end{Diagram}%
+\global\floatdiagfalse}
+
+\global\floatdiagfalse
+
+
+% MACROS FOR DRAWING TEXT PICTURES
+
+% moving a name up
+\newcommand{\TUP}[1]{\raisebox{0pt}[0pt][3pt]{}#1}
+
+% moving a name down
+\newcommand{\TDOWN}[1]{\raisebox{0pt}[6pt][0pt]{}#1}
+
+% \tlowername{P}{f} puts the name f under the picture P
+\newcommand{\tlowername}[2]%
+{$\stackrel{\makebox[1pt]{#1}}%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,6)[t]{\makebox[1pt]{$\scriptstyle#2$}}}%
+\end{picture}}$}%
+
+% \tcase{P} draws the picture P with length \textarrowlength pt.
+\newcommand{\tcase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{2.5pt}{#1{\actualtextarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Tcase{P}{f} draws the picture P with upper name f
+% and length \textarrowlength pt.
+\newcommand{\Tcase}[2]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{2.5pt}{$\stackrel{\scriptstyle #2}{#1{\actualtextarrowlength}}$}}%
+\setlength{\unitlength}{1pt}}%
+
+% \tbicase{P} draws the bi-picture P
+% with length \textarrowlength pt.
+\newcommand{\tbicase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{1pt}{#1{\actualtextarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Tbicase{P}{f}{g} draws the bi-picture P with names f, g
+% and length \textarrowlength pt.
+\newcommand{\Tbicase}[3]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{-1pt}%
+{$\stackrel{\scriptstyle #2}%
+{\mbox{\tlowername{#1{\actualtextarrowlength}}%
+{\scriptstyle #3}}}$}}%
+\setlength{\unitlength}{1pt}}%
+
+% MACROS FOR DRAWING DISPLAYED PICTURES
+
+% moving a name up
+\newcommand{\DUP}[1]{\raisebox{0pt}[0pt][4pt]{}#1}
+
+% moving a name down
+\newcommand{\DDOWN}[1]{\raisebox{0pt}[9pt][0pt]{}#1}
+
+% \dlowername{P}{f} puts the name f under the picture P
+\newcommand{\dlowername}[2]%
+{$\stackrel{\makebox[1pt]{#1}}%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,6)[t]{\makebox[1pt]{$\textstyle#2$}}}%
+\end{picture}}$}%
+
+% \dcase{P} draws the picture P with length \displayarrowlength pt.
+\newcommand{\dcase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{2.5pt}{#1{\actualdisplayarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Dcase{P}{f} draws the picture P with upper name f
+% and length \displayarrowlength pt.
+\newcommand{\Dcase}[2]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{2.5pt}{$\stackrel{\textstyle #2}{#1{\actualdisplayarrowlength}}$}}%
+\setlength{\unitlength}{1pt}}%
+
+% \dbicase{P} draws the bi-picture P
+% with length \displayarrowlength pt.
+\newcommand{\dbicase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{1pt}{#1{\actualdisplayarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Dbicase{P}{f}{g} draws the bi-picture P with names f, g
+% and length \displayarrowlength pt.
+\newcommand{\Dbicase}[3]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{-1pt}%
+{$\stackrel{\textstyle #2}%
+{\mbox{\tlowername{#1{\actualdisplayarrowlength}}%
+{\textstyle #3}}}$}}%
+\setlength{\unitlength}{1pt}}%
+
+
+% IN-TEXT ARROWS
+
+% \AR{n} draws an arrow of length n units
+\newcommand{\AR}[1]%
+{\begin{picture}(#1,0)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\end{picture}}%
+
+% \DIST{n} draws a distributor of length n units
+\newcommand{\DIST}[1]%
+{\begin{picture}(#1,0)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{400}}%
+\end{picture}}%
+
+% \DOTAR{n} draws a dotted arrow of length n units
+\newcommand{\DOTAR}[1]%
+{\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by 300%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(#1,0)%
+\multiput(0,0)(300,0){\NUMBEROFDOTS}{\circle*{100}}%
+\put(#1,0){\ehead}%
+\end{picture}}%
+
+% \MONO{n} draws a monomorphism of length n units
+\newcommand{\MONO}[1]%
+{\monolength=#1%
+\advance\monolength by -\monotail%
+\begin{picture}(#1,0)%
+\put(\monotail,0){\line(1,0){\monolength}}%
+\put(#1,0){\ehead}%
+\put(\monotail,0){\ehead}%
+\end{picture}}%
+
+% \EPI{n} draws an epimorphism of length n units
+\newcommand{\EPI}[1]%
+{\epilength=#1%
+\advance\epilength by -\epihead%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-#1,0){\line(1,0){\epilength}}%
+\put(-\epihead,0){\ehead}%
+\put(0,0){\ehead}%
+\end{picture}}%
+
+% \BIMO{n} draws a bimorphism of length n units
+\newcommand{\BIMO}[1]%
+{\monolength=#1%
+\advance\monolength by -\monotail%
+\epilength=\monolength%
+\advance\epilength by -\epihead%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-\monolength,0){\line(1,0){\epilength}}%
+\put(-\monolength,0){\ehead}%
+\put(-\epihead,0){\ehead}%
+\put(0,0){\ehead}%
+\end{picture}}%
+
+% \BIAR{n} draws a pair of arrows of length n units
+\newcommand{\BIAR}[1]%
+{\begin{picture}(#1,700)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,700){\line(1,0){#1}}%
+\put(#1,700){\ehead}%
+\end{picture}}%
+
+% \BIDIST{n} draws a pair of distributors of length n units
+\newcommand{\BIDIST}[1]%
+{\begin{picture}(#1,700)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,700){\line(1,0){#1}}%
+\put(#1,700){\ehead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{400}}%
+\put(\NUMBER,700){\circle{400}}%
+\end{picture}}%
+
+% \EQL{n} draws an equality of length n units
+\newcommand{\EQL}[1]%
+{\begin{picture}(#1,0)%
+\put(0,100){\line(1,0){#1}}%
+\put(0,-100){\line(1,0){#1}}%
+\end{picture}}%
+
+% \ADJAR{n} draws a pair of adjoint arrows of length n units
+\newcommand{\ADJAR}[1]%
+{\begin{picture}(#1,700)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,700){\line(-1,0){#1}}%
+\put(0,700){\whead}
+\end{picture}}%
+
+% \ADJDIST{n} draws a pair of adjoint distibutors of length n units
+\newcommand{\ADJDIST}[1]%
+{\begin{picture}(#1,700)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,700){\line(-1,0){#1}}%
+\put(0,700){\whead}
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{400}}%
+\put(\NUMBER,700){\circle{400}}%
+\end{picture}}%
+
+
+% All the following commands produce arrows with length 20pt
+% and scriptstyle names in math mode but arrows with length
+% \displayarrowlength pt and textstyle names in display math mode.
+
+% arrow
+\newcommand{\ar}{\ifinner\tcase{\AR}\else\dcase{\AR}\fi}%
+
+% arrow with upper name [1]
+\newcommand{\Ar}[1]{\ifinner\Tcase{\AR}{#1}\else\Dcase{\AR}{#1}\fi}%
+
+% distributor
+\newcommand{\dist}{\ifinner\tcase{\DIST}\else\dcase{\DIST}\fi}%
+
+% distributor with upper name [1]
+\newcommand{\Dist}[1]{\ifinner\Tcase{\DIST}{\TUP{#1}}%
+\else\Dcase{\DIST}{\TUP{#1}}\fi}%
+
+% dotted arrow
+\newcommand{\dotar}{\ifinner\tcase{\DOTAR}\else\dcase{\DOTAR}\fi}%
+
+% dotted arrow with upper name [1]
+\newcommand{\Dotar}[1]{\ifinner\Tcase{\DOTAR}{#1}%
+\else\Dcase{\DOTAR}{#1}\fi}%
+
+% monomorphism
+\newcommand{\mono}{\ifinner\tcase{\MONO}\else\dcase{\MONO}\fi}%
+
+% monomorphism with upper name [1]
+\newcommand{\Mono}[1]{\ifinner\Tcase{\MONO}{#1}\else\Dcase{\MONO}{#1}\fi}%
+
+% epimorphism
+\newcommand{\epi}{\ifinner\tcase{\EPI}\else\dcase{\EPI}\fi}%
+
+% epimorphism with upper name [1]
+\newcommand{\Epi}[1]{\ifinner\Tcase{\EPI}{#1}\else\Dcase{\EPI}{#1}\fi}%
+
+% bimorphism
+\newcommand{\bimo}{\ifinner\tcase{\BIMO}\else\dcase{\BIMO}\fi}%
+
+% bimorphism with upper name [1]
+\newcommand{\Bimo}[1]{\ifinner\Tcase{\BIMO}{#1}%
+\else\Dcase{\BIMO}{#1}\fi}%
+
+% isomorphism
+\newcommand{\iso}{\ifinner\Tcase{\AR}{\cong}\else\Dcase{\AR}{\cong}\fi}%
+
+% isomorphism with upper name [1]
+\newcommand{\Iso}[1]{\ifinner\Tcase{\AR}{\cong{#1}}%
+\else\Dcase{\AR}{\cong{#1}}\fi}%
+
+% pair of arrows
+\newcommand{\biar}{\ifinner\tbicase{\BIAR}\else\dbicase{\BIAR}\fi}%
+
+% pair of arrows with names [1],[2]
+\newcommand{\Biar}[2]{\ifinner\Tbicase{\BIAR}{#1}{#2}%
+\else\Dbicase{\BIAR}{#1}{#2}\fi}%
+
+% pair of distributors
+\newcommand{\bidist}{\ifinner\tbicase{\BIDIST}\else\dbicase{\BIDIST}\fi}%
+
+% pair of distributors with names [1],[2]
+\newcommand{\Bidist}[2]{\ifinner\Tbicase{\BIDIST}{\TUP{#1}}{\TDOWN{#2}}%
+\else\Dbicase{\BIDIST}{\DUP{#1}}{\DDOWN{#2}}\fi}%
+
+% equality
+\newcommand{\eql}{\ifinner\tcase{\EQL}\else\dcase{\EQL}\fi}%
+
+% equality with name [1]
+\newcommand{\Eql}[1]{\ifinner\Tcase{\EQL}{\TUP{#1}}%
+\else\Dcase{\EQL}{\DUP{#1}}\fi}%
+
+% pair of adjoint arrows
+\newcommand{\adjar}{\ifinner\tbicase{\ADJAR}\else\dbicase{\ADJAR}\fi}%
+
+% pair of adjoint arrows with names [1],[2]
+\newcommand{\Adjar}[2]{\ifinner\Tbicase{\ADJAR}{#1}{#2}%
+\else\Dbicase{\ADJAR}{#1}{#2}\fi}%
+
+% pair of adjoint distributors
+\newcommand{\adjdist}{\ifinner\tbicase{\ADJDIST}\else\dbicase{\ADJDIST}\fi}%
+
+% pair of adjoint distributors with names [1],[2]
+\newcommand{\Adjdist}[2]{\ifinner\Tbicase{\ADJDIST}{\TUP{#1}}{\TDOWN{#2}}%
+\else\Dbicase{\ADJDIST}{\DUP{#1}}{\DDOWN{#2}}\fi}%
+
+
+% IN-TEXT BACK ARROWS
+
+% \BKAR{n} draws a pointing back arrow of length n units
+\newcommand{\BKAR}[1]%
+{\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \BKDIST{n} draws a pointing back distributor of length n units
+\newcommand{\BKDIST}[1]%
+{\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{400}}%
+\end{picture}}%
+
+% \BKDOTAR{n} draws a backward dotted arrow
+% of length n units
+\newcommand{\BKDOTAR}[1]%
+{\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by 300%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(#1,0)%
+\multiput(#1,0)(-300,0){\NUMBEROFDOTS}{\circle*{100}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \BKMONO{n} draws a pointing back monomorphism of length n units
+\newcommand{\BKMONO}[1]%
+{\monolength=#1%
+\advance\monolength by -\monotail%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-\monotail,0){\line(-1,0){\monolength}}%
+\put(-\monotail,0){\whead}%
+\put(-#1,0){\whead}%
+\end{picture}}%
+
+% \BKEPI{n} draws a pointing back epimorphism of length n units
+\newcommand{\BKEPI}[1]%
+{\epilength=#1%
+\advance\epilength by -\epihead%
+\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){\epilength}}%
+\put(\epihead,0){\whead}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \BKBIMO{n} draws a pointing back bimorphism of length n units
+\newcommand{\BKBIMO}[1]%
+{\monolength=#1%
+\advance\monolength by -\monotail%
+\epilength=\monolength%
+\advance\epilength by -\epihead%
+\begin{picture}(#1,0)%
+\put(\monolength,0){\line(-1,0){\epilength}}%
+\put(\monolength,0){\whead}%
+\put(\epihead,0){\whead}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \BKBIAR{n} draws a pair of pointing back arrows of length n units
+\newcommand{\BKBIAR}[1]%
+{\begin{picture}(#1,700)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,700){\line(-1,0){#1}}%
+\put(0,700){\whead}%
+\end{picture}}%
+
+% \BKBIDIST{n} draws a pair of pointing back distributors of length n units
+\newcommand{\BKBIDIST}[1]%
+{\begin{picture}(#1,700)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,700){\line(-1,0){#1}}%
+\put(0,700){\whead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{400}}%
+\put(\NUMBER,700){\circle{400}}%
+\end{picture}}%
+
+% \BKADJAR{n} draws a pair of adjoint arrows of length n units
+\newcommand{\BKADJAR}[1]%
+{\begin{picture}(#1,700)%
+\put(0,700){\line(1,0){#1}}%
+\put(#1,700){\ehead}%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \BKADJDIST{n} draws a pair of adjoint distributors of length n units
+\newcommand{\BKADJDIST}[1]%
+{\begin{picture}(#1,700)%
+\put(0,700){\line(1,0){#1}}%
+\put(#1,700){\ehead}%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{400}}%
+\put(\NUMBER,700){\circle{400}}%
+\end{picture}}%
+
+% All the following commands produce back arrows with length 20pt
+% and scriptstyle names in math mode but arrows with length
+% \displayarrowlength and textstyle names in display math mode.
+
+% back arrow
+\newcommand{\bkar}{\ifinner\tcase{\BKAR}\else\dcase{\BKAR}\fi}%
+
+% back arrow with upper name [1]
+\newcommand{\Bkar}[1]{\ifinner\Tcase{\BKAR}{#1}\else\Dcase{\BKAR}{#1}\fi}%
+
+% back distributor
+\newcommand{\bkdist}{\ifinner\tcase{\BKDIST}\else\dcase{\BKDIST}\fi}%
+
+% back distributor with upper name [1]
+\newcommand{\Bkdist}[1]{\ifinner\Tcase{\BKDIST}{\TUP{#1}}%
+\else\Dcase{\BKDIST}{\TUP{#1}}\fi}%
+
+% backward dotted arrow
+\newcommand{\bkdotar}{\ifinner\tcase{\BKDOTAR}\else\dcase{\BKDOTAR}\fi}%
+
+% backward dotted arrow with upper name [1]
+\newcommand{\Bkdotar}[1]{\ifinner\Tcase{\BKDOTAR}{#1}%
+\else\Dcase{\BKDOTAR}{#1}\fi}%
+
+% back monomorphism
+\newcommand{\bkmono}{\ifinner\tcase{\BKMONO}\else\dcase{\BKMONO}\fi}%
+
+% back monomorphism with upper name [1]
+\newcommand{\Bkmono}[1]{\ifinner\Tcase{\BKMONO}{#1}%
+\else\Dcase{\BKMONO}{#1}\fi}%
+
+% back epimorphism
+\newcommand{\bkepi}{\ifinner\tcase{\BKEPI}\else\dcase{\BKEPI}\fi}%
+
+% back epimorphism with upper name [1]
+\newcommand{\Bkepi}[1]{\ifinner\Tcase{\BKEPI}{#1}%
+\else\Dcase{\BKEPI}{#1}\fi}%
+
+% back bimorphism
+\newcommand{\bkbimo}{\ifinner\tcase{\BKBIMO}\else\dcase{\BKBIMO}\fi}%
+
+% back bimorphism with upper name [1]
+\newcommand{\Bkbimo}[1]{\ifinner\Tcase{\BKBIMO}{\hspace{9pt}#1}%
+\else\Dcase{\BKBIMO}{\hspace{9pt}#1}\fi}%
+
+% back isomorphism
+\newcommand{\bkiso}{\ifinner\Tcase{\BKAR}{\cong}%
+\else\Dcase{\BKAR}{\cong}\fi}%
+
+% back isomorphism with upper name [1]
+\newcommand{\Bkiso}[1]{\ifinner\Tcase{\BKAR}{\cong{#1}}%
+\else\Dcase{\BKAR}{\cong{#1}}\fi}%
+
+% pair of back arrows
+\newcommand{\bkbiar}{\ifinner\tbicase{\BKBIAR}\else\dbicase{\BKBIAR}\fi}%
+
+% pair of back arrows with names [1],[2]
+\newcommand{\Bkbiar}[2]{\ifinner\Tbicase{\BKBIAR}{#1}{#2}%
+\else\Dbicase{\BKBIAR}{#1}{#2}\fi}%
+
+% pair of back distributors
+\newcommand{\bkbidist}{\ifinner\tbicase{\BKBIDIST}%
+\else\dbicase{\BKBIDIST}\fi}%
+
+% pair of back distributors with names [1],[2]
+\newcommand{\Bkbidist}[2]{\ifinner\Tbicase{\BKBIDIST}{\TUP{#1}}{\TDOWN{#2}}%
+\else\Tbicase{\BKBIDIST}{\DUP{#1}}{\DDOWN{#2}}\fi}%
+
+% back equality
+\let\bkeql=\eql%
+
+% back equality with name [1]
+\let\Bkeql=\Eql%
+
+% back pair of adjoint arrows
+\newcommand{\bkadjar}{\ifinner\tbicase{\BKADJAR}%
+\else\dbicase{\BKADJAR}\fi}%
+
+% back pair of adjoint arrows with names [1],[2]
+\newcommand{\Bkadjar}[2]{\ifinner\Tbicase{\BKADJAR}{#1}{#2}%
+\else\Dbicase{\BKADJAR}{#1}{#2}\fi}%
+
+% back pair of adjoint distributors
+\newcommand{\bkadjdist}{\ifinner\tbicase{\BKADJDIST}%
+\else\dbicase{\BKADJDIST}\fi}%
+
+% back pair of adjoint distributors with names [1],[2]
+\newcommand{\Bkadjdist}[2]{\ifinner\Tbicase{\BKADJDIST}{\TUP{#1}}{\TDOWN{#2}}%
+\else\Dbicase{\BKADJDIST}{\TUP{#1}}{\TDOWN{#2}}\fi}%
+
+
+% MACROS FOR DRAWING HORIZONTAL PICTURES
+
+% \lowername{P}{f} puts the name f under the picture P
+\newcommand{\lowername}[2]%
+{$\stackrel{\makebox[1pt]{#1}}%
+{\begin{picture}(0,0)%
+\truex{600}%
+\put(0,0){\makebox(0,\value{x})[t]{\makebox[1pt]{$#2$}}}%
+\end{picture}}$}%
+
+% \hcase{P}{n} draws the picture P with length n units
+\newcommand{\hcase}[2]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{0pt}[0pt][0pt]{#1{#2}}}}%
+
+% \Hcase{P}{f}{n} draws the picture P with upper name f
+% and length n units.
+\newcommand{\Hcase}[3]%
+{\testdiagrammode\makebox[0pt]
+{\raisebox{0pt}[0pt][0pt]%
+{$\stackrel{\makebox[0pt]{$\textstyle{#2}$}}{#1{#3}}$}}}%
+
+% \hcasE{P}{f}{n} draws the picture P with lower name f
+% and length n units.
+\newcommand{\hcasE}[3]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{-8pt}[0pt][0pt]%
+{\lowername{#1{#3}}{#2}}}}%
+
+% \Hisocase{P}{f}{g}{n} draws an arrow P with names f, g
+% and length n units.
+\newcommand{\Hisocase}[4]%
+{\testdiagrammode\makebox[0pt]
+{\raisebox{-8pt}[0pt][0pt]%
+{$\stackrel{\makebox[0pt]{$\textstyle{#2}$}}%
+{\mbox{\lowername{#1{#4}}{#3}}}$}}}%
+
+% \hbicase{P}{n} draws the bi-picture P with length n units.
+\newcommand{\hbicase}[2]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{-2.4pt}[0pt][0pt]{#1{#2}}}}%
+
+% \Hbicase{P}{f}{g}{n} draws the bi-picture P with names f, g
+% and length n units.
+\newcommand{\Hbicase}[4]%
+{\testdiagrammode\makebox[0pt]
+{\raisebox{-10.4pt}[0pt][0pt]%
+{$\stackrel{\makebox[0pt]{$\textstyle{#2}$}}%
+{\mbox{\lowername{#1{#4}}{#3}}}$}}}%
+
+% EAST ARROWS
+
+% \EAR{n} draws an east arrow of length n units
+\newcommand{\EAR}[1]%
+{\begin{picture}(#1,0)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\end{picture}}%
+
+% \EDIST{n} draws an east distributor of length n units
+\newcommand{\EDIST}[1]%
+{\begin{picture}(#1,0)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\truex{400}
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{\value{x}}}
+\end{picture}}%
+
+% \EDOTAR draws a dotted arrow of length n units
+\newcommand{\EDOTAR}[1]%
+{\truex{100}\truey{300}%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(#1,0)%
+\multiput(0,0)(\value{y},0){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(#1,0){\ehead}%
+\end{picture}}%
+
+
+% \EMONO{n} draws an east monomorphism of length n units
+\newcommand{\EMONO}[1]%
+{\truetail
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\begin{picture}(#1,0)%
+\put(\truemonotail,0){\line(1,0){\monolength}}%
+\put(#1,0){\ehead}%
+\put(\truemonotail,0){\ehead}%
+\end{picture}}%
+
+
+% \EEPI{n} draws an east epimorphism of length n units
+\newcommand{\EEPI}[1]%
+{\truehead%
+\epilength=#1%
+\advance\epilength by -\trueepihead%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-#1,0){\line(1,0){\epilength}}%
+\put(-\trueepihead,0){\ehead}%
+\put(0,0){\ehead}%
+\end{picture}}%
+
+
+% \EBIMO{n} draws an east bimorphism of length n units
+\newcommand{\EBIMO}[1]%
+{\truehead\truetail%
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\epilength=\monolength%
+\advance\epilength by -\trueepihead%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-\monolength,0){\line(1,0){\epilength}}%
+\put(-\monolength,0){\ehead}%
+\put(-\trueepihead,0){\ehead}%
+\put(0,0){\ehead}%
+\end{picture}}%
+
+
+% \EBIAR{n} draws an east pair of arrows of length n units
+\newcommand{\EBIAR}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\end{picture}}%
+
+% \EBIDIST{n} draws an east pair of distributors of length n units
+\newcommand{\EBIDIST}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\truey{400}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{\value{y}}}
+\put(\NUMBER,\value{x}){\circle{\value{y}}}%
+\end{picture}}%
+
+% \EEQL{n} draws an east equality of length n units
+\newcommand{\EEQL}[1]%
+{\begin{picture}(#1,0)%
+\truex{200}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(0,0){\line(1,0){#1}}%
+\end{picture}}%
+
+% \EADJAR{n} draws an east pair of adjoint arrows of length n
+% units
+\newcommand{\EADJAR}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\end{picture}}%
+
+% \EADJDIST{n} draws an east pair of adjoint distributors of length n
+% units
+\newcommand{\EADJDIST}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\truey{400}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{\value{y}}}
+\put(\NUMBER,\value{x}){\circle{\value{y}}}%
+\end{picture}}%
+
+
+% All the following commands produce east arrows
+
+% basic east arrow
+\def\basicear[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EAR}{\Z}}%
+
+% east arrow
+\newcommand{\ear}{\@ifnextchar[{\basicear}%
+{\hspace{\SOURCE\unitlength}\basicear[\ARROWLENGTH]}}%
+
+% basic east arrow with upper name
+\def\basicEar[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EAR}{#2}{\Z}}%
+
+% east arrow with upper name
+\newcommand{\Ear}{\@ifnextchar[{\basicEar}%
+{\hspace{\SOURCE\unitlength}\basicEar[\ARROWLENGTH]}}%
+
+% basic east arrow with lower name
+\def\basiceaR[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EAR}{#2}{\Z}}%
+
+% east arrow with lower name
+\newcommand{\eaR}{\@ifnextchar[{\basiceaR}%
+{\hspace{\SOURCE\unitlength}\basiceaR[\ARROWLENGTH]}}%
+
+% basic east distributor
+\def\basicedist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EDIST}{\Z}}%
+
+% east distributor
+\newcommand{\edist}{\@ifnextchar[{\basicedist}%
+{\hspace{\SOURCE\unitlength}\basicedist[\ARROWLENGTH]}}%
+
+% basic east distributor with upper name
+\def\basicEdist[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EDIST}{\DUP{#2}}{\Z}}%
+
+% east distributor with upper name
+\newcommand{\Edist}{\@ifnextchar[{\basicEdist}%
+{\hspace{\SOURCE\unitlength}\basicEdist[\ARROWLENGTH]}}%
+
+% basic east distributor with lower name
+\def\basicedisT[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EDIST}{\DDOWN{#2}}{\Z}}%
+
+% east distributor with lower name
+\newcommand{\edisT}{\@ifnextchar[{\basicedisT}%
+{\hspace{\SOURCE\unitlength}\basicedisT[\ARROWLENGTH]}}%
+
+% basic east dotted arrow
+\def\basicedotar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EDOTAR}{\Z}}%
+
+% east dotted arrow
+\newcommand{\edotar}{\@ifnextchar[{\basicedotar}%
+{\hspace{\SOURCE\unitlength}\basicedotar[\ARROWLENGTH]}}%
+
+% basic east dotted arrow with upper name
+\def\basicEdotar[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EDOTAR}{#2}{\Z}}%
+
+% east dotted arrow with upper name
+\newcommand{\Edotar}{\@ifnextchar[{\basicEdotar}%
+{\hspace{\SOURCE\unitlength}\basicEdotar[\ARROWLENGTH]}}%
+
+% basic east dotted arrow with lower name
+\def\basicedotaR[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EDOTAR}{#2}{\Z}}%
+
+% east dotted arrow with lower name
+\newcommand{\edotaR}{\@ifnextchar[{\basicedotaR}%
+{\hspace{\SOURCE\unitlength}\basicedotaR[\ARROWLENGTH]}}%
+
+% basic east monomorphism
+\def\basicemono[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EMONO}{\Z}}%
+
+% east arrow
+\newcommand{\emono}{\@ifnextchar[{\basicemono}%
+{\hspace{\SOURCE\unitlength}\basicemono[\ARROWLENGTH]}}%
+
+% basic east monomorphism with upper name
+\def\basicEmono[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EMONO}{#2}{\Z}}%
+
+% east monomorphism with upper name
+\newcommand{\Emono}{\@ifnextchar[{\basicEmono}%
+{\hspace{\SOURCE\unitlength}\basicEmono[\ARROWLENGTH]}}%
+
+% basic east monomorphism with lower name
+\def\basicemonO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EMONO}{#2}{\Z}}%
+
+% east monomorphism with lower name
+\newcommand{\emonO}{\@ifnextchar[{\basicemonO}%
+{\hspace{\SOURCE\unitlength}\basicemonO[\ARROWLENGTH]}}%
+
+% basic east epimorphism
+\def\basiceepi[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EEPI}{\Z}}%
+
+% east epimorphism
+\newcommand{\eepi}{\@ifnextchar[{\basiceepi}%
+{\hspace{\SOURCE\unitlength}\basiceepi[\ARROWLENGTH]}}%
+
+% basic east epimorphism with upper name
+\def\basicEepi[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EEPI}{#2}{\Z}}%
+
+% east epimorphism with upper name
+\newcommand{\Eepi}{\@ifnextchar[{\basicEepi}%
+{\hspace{\SOURCE\unitlength}\basicEepi[\ARROWLENGTH]}}%
+
+% basic east epimorphism with lower name
+\def\basiceepI[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EEPI}{#2}{\Z}}%
+
+% east epimorphism with lower name
+\newcommand{\eepI}{\@ifnextchar[{\basiceepI}%
+{\hspace{\SOURCE\unitlength}\basiceepI[\ARROWLENGTH]}}%
+
+% basic east bimorphism
+\def\basicebimo[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EBIMO}{\Z}}%
+
+% east bimorphism
+\newcommand{\ebimo}{\@ifnextchar[{\basicebimo}%
+{\hspace{\SOURCE\unitlength}\basicebimo[\ARROWLENGTH]}}%
+
+% basic east bimorphism with upper name
+\def\basicEbimo[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EBIMO}{#2}{\Z}}%
+
+% east bimorphism with upper name
+\newcommand{\Ebimo}{\@ifnextchar[{\basicEbimo}%
+{\hspace{\SOURCE\unitlength}\basicEbimo[\ARROWLENGTH]}}%
+
+% basic east bimorphism with lower name
+\def\basicebimO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EBIMO}{#2}{\Z}}%
+
+% east bimorphism with lower name
+\newcommand{\ebimO}{\@ifnextchar[{\basicebimO}%
+{\hspace{\SOURCE\unitlength}\basicebimO[\ARROWLENGTH]}}%
+
+% basic east isomorphism
+\def\basiceiso[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\EAR}{\cong}{}{\Z}}%
+
+% east isomorphism
+\newcommand{\eiso}{\@ifnextchar[{\basiceiso}%
+{\hspace{\SOURCE\unitlength}\basiceiso[\ARROWLENGTH]}}%
+
+% basic east isomorphism with upper name
+\def\basicEiso[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\EAR}{#2}{\cong}{\Z}}%
+
+% east isomorphism with upper name
+\newcommand{\Eiso}{\@ifnextchar[{\basicEiso}%
+{\hspace{\SOURCE\unitlength}\basicEiso[\ARROWLENGTH]}}%
+
+% basic east isomorphism with lower name
+\def\basiceisO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\EAR}{\cong}{#2}{\Z}}%
+
+% east isomorphism with lower name
+\newcommand{\eisO}{\@ifnextchar[{\basiceisO}%
+{\hspace{\SOURCE\unitlength}\basiceisO[\ARROWLENGTH]}}%
+
+% basic east equality
+\def\basiceeql[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EEQL}{\Z}}%
+
+% east equality
+\newcommand{\eeql}{\@ifnextchar[{\basiceeql}%
+{\hspace{\SOURCE\unitlength}\basiceeql[\ARROWLENGTH]}}%
+
+% basic east equality with upper name
+\def\basicEeql[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EEQL}{\DUP{#2}}{\Z}}%
+
+% east equality with upper name
+\newcommand{\Eeql}{\@ifnextchar[{\basicEeql}%
+{\hspace{\SOURCE\unitlength}\basicEeql[\ARROWLENGTH]}}%
+
+% basic east equality with lower name
+\def\basiceeqL[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EEQL}{#2}{\Z}}%
+
+% east equality with lower name
+\newcommand{\eeqL}{\@ifnextchar[{\basiceeqL}%
+{\hspace{\SOURCE\unitlength}\basiceeqL[\ARROWLENGTH]}}%
+
+% basic pair of east arrows
+\def\basicebiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\EBIAR}{\Z}}%
+
+% pair of east arrows
+\newcommand{\ebiar}{\@ifnextchar[{\basicebiar}%
+{\hspace{\SOURCE\unitlength}\basicebiar[\ARROWLENGTH]}}%
+
+% basic pair of east arrows with names
+\def\basicEbiar[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\EBIAR}{#2}{#3}{\Z}}%
+
+% pair of east arrows with names
+\newcommand{\Ebiar}{\@ifnextchar[{\basicEbiar}%
+{\hspace{\SOURCE\unitlength}\basicEbiar[\ARROWLENGTH]}}%
+\let\ebiaR=\Ebiar
+
+% basic pair of east distributors
+\def\basicebidist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\EBIDIST}{\Z}}%
+
+% pair of east distributors
+\newcommand{\ebidist}{\@ifnextchar[{\basicebidist}%
+{\hspace{\SOURCE\unitlength}\basicebidist[\ARROWLENGTH]}}%
+
+% basic pair of east distributors with names
+\def\basicEbidist[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\EBIDIST}{\DUP{#2}}{\DDOWN{#3}}{\Z}}%
+
+% pair of east distributors with names
+\newcommand{\Ebidist}{\@ifnextchar[{\basicEbidist}%
+{\hspace{\SOURCE\unitlength}\basicEbidist[\ARROWLENGTH]}}%
+\let\ebidisT=\Ebidist
+
+% basic pair of east adjoint arrows
+\def\basiceadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\EADJAR}{\Z}}%
+
+% pair of east adjoint arrows
+\newcommand{\eadjar}{\@ifnextchar[{\basiceadjar}%
+{\hspace{\SOURCE\unitlength}\basiceadjar[\ARROWLENGTH]}}%
+
+% basic pair of east adjoint arrows with names
+\def\basicEadjar[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\EADJAR}{#2}{#3}{\Z}}%
+
+% pair of east adjoint arrows with names
+\newcommand{\Eadjar}{\@ifnextchar[{\basicEadjar}%
+{\hspace{\SOURCE\unitlength}\basicEadjar[\ARROWLENGTH]}}%
+\let\eadjaR=\Eadjar
+
+% basic pair of east adjoint distributors
+\def\basiceadjdist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\EADJDIST}{\Z}}%
+
+% pair of east adjoint distributors
+\newcommand{\eadjdist}{\@ifnextchar[{\basiceadjdist}%
+{\hspace{\SOURCE\unitlength}\basiceadjdist[\ARROWLENGTH]}}%
+
+% basic pair of east adjoint distributors with names
+\def\basicEadjdist[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\EADJDIST}{\DUP{#2}}{\DDOWN{#3}}{\Z}}%
+
+% pair of east adjoint distributors with names
+\newcommand{\Eadjdist}{\@ifnextchar[{\basicEadjdist}%
+{\hspace{\SOURCE\unitlength}\basicEadjdist[\ARROWLENGTH]}}%
+\let\eadjdisT=\Eadjdist
+
+% WEST ARROWS
+
+% \WAR{n} draws a pointing back arrow of length n units
+\newcommand{\WAR}[1]%
+{\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \WDIST{n} draws a pointing back distributor of length n units
+\newcommand{\WDIST}[1]%
+{\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\truex{400}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{\value{x}}}%
+\end{picture}}%
+
+% \WDOTAR draws a dotted arrow of length n units
+\newcommand{\WDOTAR}[1]%
+{\truex{100}\truey{300}%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(#1,0)%
+\multiput(#1,0)(-\value{y},0){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \WMONO{n} draws a pointing back monomorphism of length n units
+\newcommand{\WMONO}[1]%
+{\truetail%
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-\truemonotail,0){\line(-1,0){\monolength}}%
+\put(-\truemonotail,0){\whead}%
+\put(-#1,0){\whead}%
+\end{picture}}%
+
+
+% \WEPI{n} draws a pointing back epimorphism of length n units
+\newcommand{\WEPI}[1]%
+{\truehead%
+\epilength=#1%
+\advance\epilength by -\trueepihead%
+\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){\epilength}}%
+\put(\trueepihead,0){\whead}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \WBIMO{n} draws a pointing back bimorphism of length n units
+\newcommand{\WBIMO}[1]%
+{\truehead\truetail%
+\monolength=#1
+\advance\monolength by -\truemonotail%
+\epilength=\monolength%
+\advance\epilength by -\trueepihead%
+\begin{picture}(#1,0)%
+\put(\monolength,0){\line(-1,0){\epilength}}%
+\put(\monolength,0){\whead}%
+\put(\trueepihead,0){\whead}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \WBIAR{n} draws a pair of pointing back arrows of length n units
+\newcommand{\WBIAR}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\end{picture}}%
+
+% \WBIDIST{n} draws a pair of pointing back distributors of length n units
+\newcommand{\WBIDIST}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\truey{400}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{\value{y}}}%
+\put(\NUMBER,\value{x}){\circle{\value{y}}}%
+\end{picture}}%
+
+% \WADJAR{n} draws a pair of adjoint arrows of length n units
+\newcommand{\WADJAR}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \WADJDIST{n} draws a pair of adjoint distributors of length n units
+\newcommand{\WADJDIST}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\truey{400}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{\value{y}}}%
+\put(\NUMBER,\value{x}){\circle{\value{y}}}%
+\end{picture}}%
+
+
+% All the following commands produce west arrows
+
+% basic west arrow
+\def\basicwar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WAR}{\Z}}%
+
+% west arrow
+\newcommand{\war}{\@ifnextchar[{\basicwar}%
+{\hspace{\SOURCE\unitlength}\basicwar[\ARROWLENGTH]}}%
+
+% basic west arrow with upper name
+\def\basicWar[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WAR}{#2}{\Z}}%
+
+% west arrow with upper name
+\newcommand{\War}{\@ifnextchar[{\basicWar}%
+{\hspace{\SOURCE\unitlength}\basicWar[\ARROWLENGTH]}}%
+
+% basic west arrow with lower name
+\def\basicwaR[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WAR}{#2}{\Z}}%
+
+% west arrow with lower name
+\newcommand{\waR}{\@ifnextchar[{\basicwaR}%
+{\hspace{\SOURCE\unitlength}\basicwaR[\ARROWLENGTH]}}%
+
+% basic west distributor
+\def\basicwdist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WDIST}{\Z}}%
+
+% west distributor
+\newcommand{\wdist}{\@ifnextchar[{\basicwdist}%
+{\hspace{\SOURCE\unitlength}\basicwdist[\ARROWLENGTH]}}%
+
+% basic west distributor with upper name
+\def\basicWdist[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WDIST}{\DUP{#2}}{\Z}}%
+
+% west distributor with upper name
+\newcommand{\Wdist}{\@ifnextchar[{\basicWdist}%
+{\hspace{\SOURCE\unitlength}\basicWdist[\ARROWLENGTH]}}%
+
+% basic west distributor with lower name
+\def\basicwdisT[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WDIST}{\DDOWN{#2}}{\Z}}%
+
+% west distributor with lower name
+\newcommand{\wdisT}{\@ifnextchar[{\basicwdisT}%
+{\hspace{\SOURCE\unitlength}\basicwdisT[\ARROWLENGTH]}}%
+
+% basic west dotted arrow
+\def\basicwdotar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WDOTAR}{\Z}}%
+
+% west dotted arrow
+\newcommand{\wdotar}{\@ifnextchar[{\basicwdotar}%
+{\hspace{\SOURCE\unitlength}\basicwdotar[\ARROWLENGTH]}}%
+
+% basic west dotted arrow with upper name
+\def\basicWdotar[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WDOTAR}{#2}{\Z}}%
+
+% west dotted arrow with upper name
+\newcommand{\Wdotar}{\@ifnextchar[{\basicWdotar}%
+{\hspace{\SOURCE\unitlength}\basicWdotar[\ARROWLENGTH]}}%
+
+% basic west dotted arrow with lower name
+\def\basicwdotaR[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WDOTAR}{#2}{\Z}}%
+
+% west dotted arrow with lower name
+\newcommand{\wdotaR}{\@ifnextchar[{\basicwdotaR}%
+{\hspace{\SOURCE\unitlength}\basicwdotaR[\ARROWLENGTH]}}%
+
+% basic west monomorphism
+\def\basicwmono[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WMONO}{\Z}}%
+
+% west arrow
+\newcommand{\wmono}{\@ifnextchar[{\basicwmono}%
+{\hspace{\SOURCE\unitlength}\basicwmono[\ARROWLENGTH]}}%
+
+% basic west monomorphism with upper name
+\def\basicWmono[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WMONO}{#2}{\Z}}%
+
+% west monomorphism with upper name
+\newcommand{\Wmono}{\@ifnextchar[{\basicWmono}%
+{\hspace{\SOURCE\unitlength}\basicWmono[\ARROWLENGTH]}}%
+
+% basic west monomorphism with lower name
+\def\basicwmonO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WMONO}{#2}{\Z}}%
+
+% west monomorphism with lower name
+\newcommand{\wmonO}{\@ifnextchar[{\basicwmonO}%
+{\hspace{\SOURCE\unitlength}\basicwmonO[\ARROWLENGTH]}}%
+
+% basic west epimorphism
+\def\basicwepi[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WEPI}{\Z}}%
+
+% west epimorphism
+\newcommand{\wepi}{\@ifnextchar[{\basicwepi}%
+{\hspace{\SOURCE\unitlength}\basicwepi[\ARROWLENGTH]}}%
+
+% basic west epimorphism with upper name
+\def\basicWepi[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WEPI}{#2}{\Z}}%
+
+% west epimorphism with upper name
+\newcommand{\Wepi}{\@ifnextchar[{\basicWepi}%
+{\hspace{\SOURCE\unitlength}\basicWepi[\ARROWLENGTH]}}%
+
+% basic west epimorphism with lower name
+\def\basicwepI[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WEPI}{#2}{\Z}}%
+
+% west epimorphism with lower name
+\newcommand{\wepI}{\@ifnextchar[{\basicwepI}%
+{\hspace{\SOURCE\unitlength}\basicwepI[\ARROWLENGTH]}}%
+
+% basic west bimorphism
+\def\basicwbimo[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WBIMO}{\Z}}%
+
+% west bimorphism
+\newcommand{\wbimo}{\@ifnextchar[{\basicwbimo}%
+{\hspace{\SOURCE\unitlength}\basicwbimo[\ARROWLENGTH]}}%
+
+% basic west bimorphism with upper name
+\def\basicWbimo[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WBIMO}{#2}{\Z}}%
+
+% west bimorphism with upper name
+\newcommand{\Wbimo}{\@ifnextchar[{\basicWbimo}%
+{\hspace{\SOURCE\unitlength}\basicWbimo[\ARROWLENGTH]}}%
+
+% basic west bimorphism with lower name
+\def\basicwbimO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WBIMO}{#2}{\Z}}%
+
+% west bimorphism with lower name
+\newcommand{\wbimO}{\@ifnextchar[{\basicwbimO}%
+{\hspace{\SOURCE\unitlength}\basicwbimO[\ARROWLENGTH]}}%
+
+% basic west isomorphism
+\def\basicwiso[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\WAR}{\cong}{}{\Z}}%
+
+% west isomorphism
+\newcommand{\wiso}{\@ifnextchar[{\basicwiso}%
+{\hspace{\SOURCE\unitlength}\basicwiso[\ARROWLENGTH]}}%
+
+% basic west isomorphism with upper name
+\def\basicWiso[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\WAR}{#2}{\cong}{\Z}}%
+
+% west isomorphism with upper name
+\newcommand{\Wiso}{\@ifnextchar[{\basicWiso}%
+{\hspace{\SOURCE\unitlength}\basicWiso[\ARROWLENGTH]}}%
+
+% basic west isomorphism with lower name
+\def\basicwisO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\WAR}{\cong}{#2}{\Z}}%
+
+% west isomorphism with lower name
+\newcommand{\wisO}{\@ifnextchar[{\basicwisO}%
+{\hspace{\SOURCE\unitlength}\basicwisO[\ARROWLENGTH]}}%
+
+% west equality
+\let\weql=\eeql%
+
+% west equality with upper name
+\let\Weql=\Eeql%
+
+% west equality with lower name
+\let\weqL=\eeqL%
+
+% basic pair of west arrows
+\def\basicwbiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\WBIAR}{\Z}}%
+
+% pair of west arrows
+\newcommand{\wbiar}{\@ifnextchar[{\basicwbiar}%
+{\hspace{\SOURCE\unitlength}\basicwbiar[\ARROWLENGTH]}}%
+
+% basic pair of west arrows with names
+\def\basicWbiar[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\WBIAR}{#2}{#3}{\Z}}%
+
+% pair of west arrows with names
+\newcommand{\Wbiar}{\@ifnextchar[{\basicWbiar}%
+{\hspace{\SOURCE\unitlength}\basicWbiar[\ARROWLENGTH]}}%
+\let\wbiaR=\Wbiar
+
+% basic pair of west distributors
+\def\basicwbidist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\WBIDIST}{\Z}}%
+
+% pair of west distributors
+\newcommand{\wbidist}{\@ifnextchar[{\basicwbidist}%
+{\hspace{\SOURCE\unitlength}\basicwbidist[\ARROWLENGTH]}}%
+
+% basic pair of west distributors with names
+\def\basicWbidist[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\WBIDIST}{\DUP{#2}}{\DDOWN{#3}}{\Z}}%
+
+% pair of west distributors with names
+\newcommand{\Wbidist}{\@ifnextchar[{\basicWbidist}%
+{\hspace{\SOURCE\unitlength}\basicWbidist[\ARROWLENGTH]}}%
+\let\wbidisT=\Wbidist
+
+% basic pair of west adjoint arrows
+\def\basicwadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\WADJAR}{\Z}}%
+
+% pair of west adjoint arrows
+\newcommand{\wadjar}{\@ifnextchar[{\basicwadjar}%
+{\hspace{\SOURCE\unitlength}\basicwadjar[\ARROWLENGTH]}}%
+
+% basic pair of west adjoint arrows with names
+\def\basicWadjar[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\WADJAR}{#2}{#3}{\Z}}%
+
+% pair of west adjoint arrows with names
+\newcommand{\Wadjar}{\@ifnextchar[{\basicWadjar}%
+{\hspace{\SOURCE\unitlength}\basicWadjar[\ARROWLENGTH]}}%
+\let\wadjaR=\Wadjar
+
+% basic pair of west adjoint distributors
+\def\basicwadjdist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\WADJDIST}{\Z}}%
+
+% pair of west adjoint distributors
+\newcommand{\wadjdist}{\@ifnextchar[{\basicwadjdist}%
+{\hspace{\SOURCE\unitlength}\basicwadjdist[\ARROWLENGTH]}}%
+
+% basic pair of west adjoint distributors with names
+\def\basicWadjdist[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\WADJDIST}{\DUP{#2}}{\DDOWN{#3}}{\Z}}%
+
+% pair of west adjoint distributors with names
+\newcommand{\Wadjdist}{\@ifnextchar[{\basicWadjdist}%
+{\hspace{\SOURCE\unitlength}\basicWadjdist[\ARROWLENGTH]}}%
+\let\wadjdisT=\Wadjdist
+
+
+% MACROS FOR DRAWING VERTICAL PICTURES
+
+% \vcase{P}{n} draws the vertical picture P with length n units.
+\newcommand{\vcase}[2]{\testdiagrammode#1{#2}}%
+
+% \Vcase{P}{f}{n} draws the vertical picture P
+% with left name f and length n units.
+\newcommand{\Vcase}[3]{\testdiagrammode\makebox[0pt]%
+{\makebox[0pt][r]{\raisebox{0pt}[0pt][0pt]{${#2}\hspace{2pt}$}}}#1{#3}}%
+
+% \vcasE{P}{f}{n} draws the vertical picture P
+% with right name f and length n units.
+\newcommand{\vcasE}[3]{\testdiagrammode\makebox[0pt]%
+{#1{#3}\makebox[0pt][l]{\raisebox{0pt}[0pt][0pt]{\hspace{2pt}$#2$}}}}%
+
+% \Visocase{P}{f}{g}{n} draws the vertical picture P
+% with names f, g and length n units.
+\newcommand{\Visocase}[4]{\testdiagrammode\makebox[0pt]%
+{\makebox[0pt][r]{\raisebox{0pt}[0pt][0pt]{$#2$\hspace{2pt}}}#1{#4}%
+\makebox[0pt][l]{\raisebox{0pt}[0pt][0pt]{\hspace{2pt}$#3$}}}}%
+
+% \vbicase{P}{n} draws the vertical bi-picture P with length n units.
+\newcommand{\vbicase}[2]{\testdiagrammode\makebox[0pt]{{#1{#2}}}}%
+
+% \Vbicase{P}{f}{g}{n} draws the vertical bi-picture P
+% with names f, g and length n units.
+\newcommand{\Vbicase}[4]{\testdiagrammode\makebox[0pt]%
+{\makebox[0pt][r]{\raisebox{0pt}[0pt][0pt]{$#2$\hspace{5.5pt}}}#1{#4}%
+\makebox[0pt][l]{\raisebox{0pt}[0pt][0pt]{\hspace{6.5pt}$#3$}}}}%
+
+
+
+% SOUTH ARROWS
+
+% \SAR{n} draws a south arrow of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SAR}[1]%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,#1){\line(0,-1){#1}}%
+\put(0,0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SDIST{n} draws a south distributor of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SDIST}[1]%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,#1){\line(0,-1){#1}}%
+\put(0,0){\shead}%
+\end{picture}}}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\end{picture}}%
+
+% \SDOTAR{n} draws a south dotted arrow of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SDOTAR}[1]%
+{\truex{100}\truey{300}%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\multiput(0,#1)(0,-\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(0,0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SMONO{n} draws a south monomorphism of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SMONO}[1]%
+{\truetail%
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,\monolength){\line(0,-1){\monolength}}%
+\put(0,\monolength){\shead}%
+\put(0,0){\shead}%
+\end{picture}}}\end{picture}}%
+
+
+% \SEPI{n} draws a south epimorphism of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SEPI}[1]%
+{\truehead%
+\epilength=#1%
+\advance\epilength by -\trueepihead%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,#1){\line(0,-1){\epilength}}%
+\put(0,\trueepihead){\shead}%
+\put(0,0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SBIMO{n} draws a south bimorphism of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SBIMO}[1]%
+{\truehead\truetail%
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\epilength=\monolength%
+\advance\epilength by -\trueepihead%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,\monolength){\line(0,-1){\epilength}}%
+\put(0,\monolength){\shead}%
+\put(0,\trueepihead){\shead}%
+\put(0,0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SBIAR{n} draws a pair of south arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SBIAR}[1]%
+{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SBIDIST{n} draws a pair of south distributors of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SBIDIST}[1]%
+{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\end{picture}}}%
+\truey{400}%
+\put(-\value{x},0){\circle{\value{y}}}%
+\put(\value{x},0){\circle{\value{y}}}%
+\end{picture}}%
+
+% \SEQL{n} draws a vertical equality of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SEQL}[1]%
+{\begin{picture}(0,0)%
+\truex{100}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\end{picture}}}\end{picture}}%
+
+% \SADJAR{n} draws a pair of vertical adjoint arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SADJAR}[1]{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \SADJDIST{n} draws a pair of vertical adjoint distributors of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SADJDIST}[1]{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\end{picture}}}%
+\truey{400}%
+\put(-\value{x},0){\circle{\value{y}}}%
+\put(\value{x},0){\circle{\value{y}}}%
+\end{picture}}%
+
+
+% All the following commands produce south arrows
+
+% basic south arrow
+\def\basicsar[#1]{\vcase{\SAR}{#100}}%
+
+% south arrow
+\newcommand{\sar}{\@ifnextchar[{\basicsar}{\basicsar[50]}}%
+
+% basic south arrow with left name
+\def\basicSar[#1]#2{\Vcase{\SAR}{#2}{#100}}%
+
+% south arrow with left name
+\newcommand{\Sar}{\@ifnextchar[{\basicSar}{\basicSar[50]}}%
+
+% basic south arrow with right name
+\def\basicsaR[#1]#2{\vcasE{\SAR}{#2}{#100}}%
+
+% south arrow with right name
+\newcommand{\saR}{\@ifnextchar[{\basicsaR}{\basicsaR[50]}}%
+
+% basic south distributor
+\def\basicsdist[#1]{\vcase{\SDIST}{#100}}%
+
+% south distributor
+\newcommand{\sdist}{\@ifnextchar[{\basicsdist}{\basicsdist[50]}}%
+
+% basic south distributor with left name
+\def\basicSdist[#1]#2{\Vcase{\SDIST}{#2\hspace*{2pt}}{#100}}%
+
+% south distributor with left name
+\newcommand{\Sdist}{\@ifnextchar[{\basicSdist}{\basicSdist[50]}}%
+
+% basic south distributor with right name
+\def\basicsdisT[#1]#2{\vcasE{\SDIST}{\hspace*{2pt}#2}{#100}}%
+
+% south distributor with right name
+\newcommand{\sdisT}{\@ifnextchar[{\basicsdisT}{\basicsdisT[50]}}%
+
+% basic south dotted arrow
+\def\basicsdotar[#1]{\vcase{\SDOTAR}{#100}}%
+
+% south dotted arrow
+\newcommand{\sdotar}{\@ifnextchar[{\basicsdotar}{\basicsdotar[50]}}%
+
+% basic south dotted arrow with left name
+\def\basicSdotar[#1]#2{\Vcase{\SDOTAR}{#2}{#100}}%
+
+% south dotted arrow with left name
+\newcommand{\Sdotar}{\@ifnextchar[{\basicSdotar}{\basicSdotar[50]}}%
+
+% basic south dotted arrow with right name
+\def\basicsdotaR[#1]#2{\vcasE{\SDOTAR}{#2}{#100}}%
+
+% south dotted arrow with right name
+\newcommand{\sdotaR}{\@ifnextchar[{\basicsdotaR}{\basicsdotaR[50]}}%
+
+% basic south monomorphism
+\def\basicsmono[#1]{\vcase{\SMONO}{#100}}%
+
+% south arrow
+\newcommand{\smono}{\@ifnextchar[{\basicsmono}{\basicsmono[50]}}%
+
+% basic south monomorphism with left name
+\def\basicSmono[#1]#2{\Vcase{\SMONO}{#2}{#100}}%
+
+% south monomorphism with left name
+\newcommand{\Smono}{\@ifnextchar[{\basicSmono}{\basicSmono[50]}}%
+
+% basic south monomorphism with right name
+\def\basicsmonO[#1]#2{\vcasE{\SMONO}{#2}{#100}}%
+
+% south monomorphism with right name
+\newcommand{\smonO}{\@ifnextchar[{\basicsmonO}{\basicsmonO[50]}}%
+
+% basic south epimorphism
+\def\basicsepi[#1]{\vcase{\SEPI}{#100}}%
+
+% south epimorphism
+\newcommand{\sepi}{\@ifnextchar[{\basicsepi}{\basicsepi[50]}}%
+
+% basic south epimorphism with left name
+\def\basicSepi[#1]#2{\Vcase{\SEPI}{#2}{#100}}%
+
+% south epimorphism with left name
+\newcommand{\Sepi}{\@ifnextchar[{\basicSepi}{\basicSepi[50]}}%
+
+% basic south epimorphism with right name
+\def\basicsepI[#1]#2{\vcasE{\SEPI}{#2}{#100}}%
+
+% south epimorphism with right name
+\newcommand{\sepI}{\@ifnextchar[{\basicsepI}{\basicsepI[50]}}%
+
+% basic south bimorphism
+\def\basicsbimo[#1]{\vcase{\SBIMO}{#100}}%
+
+% south bimorphism
+\newcommand{\sbimo}{\@ifnextchar[{\basicsbimo}{\basicsbimo[50]}}%
+
+% basic south bimorphism with left name
+\def\basicSbimo[#1]#2{\Vcase{\SBIMO}{#2}{#100}}%
+
+% south bimorphism with left name
+\newcommand{\Sbimo}{\@ifnextchar[{\basicSbimo}{\basicSbimo[50]}}%
+
+% basic south bimorphism with right name
+\def\basicsbimO[#1]#2{\vcasE{\SBIMO}{#2}{#100}}%
+
+% south bimorphism with right name
+\newcommand{\sbimO}{\@ifnextchar[{\basicsbimO}{\basicsbimO[50]}}%
+
+% basic south isomorphism
+\def\basicsiso[#1]{\Visocase{\SAR}{\cong}{}{#100}}%
+
+% south isomorphism
+\newcommand{\siso}{\@ifnextchar[{\basicsiso}{\basicsiso[50]}}%
+
+% basic south isomorphism with left name
+\def\basicSiso[#1]#2{\Visocase{\SAR}{#2}{\cong}{#100}}%
+
+% south isomorphism with left name
+\newcommand{\Siso}{\@ifnextchar[{\basicSiso}{\basicSiso[50]}}%
+
+% basic south isomorphism with right name
+\def\basicsisO[#1]#2{\Visocase{\SAR}{\cong}{#2}{#100}}%
+
+% south isomorphism with right name
+\newcommand{\sisO}{\@ifnextchar[{\basicsisO}{\basicsisO[50]}}%
+
+% basic south equality
+\def\basicseql[#1]{\vcase{\SEQL}{#100}}%
+
+% south equality
+\newcommand{\seql}{\@ifnextchar[{\basicseql}{\basicseql[50]}}%
+
+% basic south equality with left name
+\def\basicSeql[#1]#2{\Vcase{\SEQL}{#2\hspace*{2pt}}{#100}}%
+
+% south equality with left name
+\newcommand{\Seql}{\@ifnextchar[{\basicSeql}{\basicSeql[50]}}%
+
+% basic south equality with right name
+\def\basicseqL[#1]#2{\vcasE{\SEQL}{\hspace*{2pt}#2}{#100}}%
+
+% south equality with right name
+\newcommand{\seqL}{\@ifnextchar[{\basicseqL}{\basicseqL[50]}}%
+
+% basic pair of south arrows
+\def\basicsbiar[#1]{\vbicase{\SBIAR}{#100}}%
+
+% pair of south arrows
+\newcommand{\sbiar}{\@ifnextchar[{\basicsbiar}{\basicsbiar[50]}}%
+
+% basic pair of south arrows with names
+\def\basicSbiar[#1]#2#3{\Vbicase{\SBIAR}{#2}{#3}{#100}}%
+
+% pair of south arrows with names
+\newcommand{\Sbiar}{\@ifnextchar[{\basicSbiar}{\basicSbiar[50]}}%
+\let\sbiaR=\Sbiar
+
+% basic pair of south distributors
+\def\basicsbidist[#1]{\vbicase{\SBIDIST}{#100}}%
+
+% pair of south distributors
+\newcommand{\sbidist}{\@ifnextchar[{\basicsbidist}{\basicsbidist[50]}}%
+
+% basic pair of south distributors with names
+\def\basicSbidist[#1]#2#3%
+{\Vbicase{\SBIDIST}{#2\hspace*{2pt}}{\hspace*{2pt}#3}{#100}}%
+
+% pair of south distributors with names
+\newcommand{\Sbidist}{\@ifnextchar[{\basicSbidist}{\basicSbidist[50]}}%
+\let\sbidisT=\Sbidist
+
+% basic pair of south adjoint arrows
+\def\basicsadjar[#1]{\vbicase{\SADJAR}{#100}}%
+
+% pair of south adjoint arrows
+\newcommand{\sadjar}{\@ifnextchar[{\basicsadjar}{\basicsadjar[50]}}%
+
+% basic pair of south adjoint arrows with names
+\def\basicSadjar[#1]#2#3{\Vbicase{\SADJAR}{#2}{#3}{#100}}%
+
+% pair of south adjoint arrows with names
+\newcommand{\Sadjar}{\@ifnextchar[{\basicSadjar}{\basicSadjar[50]}}%
+\let\sadjaR=\Sadjar
+
+% basic pair of south adjoint distributors
+\def\basicsadjdist[#1]{\vbicase{\SADJDIST}{#100}}%
+
+% pair of south adjoint distributors
+\newcommand{\sadjdist}{\@ifnextchar[{\basicsadjdist}{\basicsadjdist[50]}}%
+
+% basic pair of south adjoint distributors with names
+\def\basicSadjdist[#1]#2#3%
+{\Vbicase{\SADJDIST}{#2\hspace*{2pt}}{\hspace*{2pt}#3}{#100}}%
+
+% pair of south adjoint distributors with names
+\newcommand{\Sadjdist}{\@ifnextchar[{\basicSadjdist}{\basicSadjdist[50]}}%
+\let\sadjdisT=\Sadjdist
+
+
+% NORTH ARROWS
+
+% \NAR{n} draws a north arrow of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NAR}[1]%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,0){\line(0,1){#1}}%
+\put(0,#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NDIST{n} draws a north distributor of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NDIST}[1]%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,0){\line(0,1){#1}}%
+\put(0,#1){\nhead}%
+\end{picture}}}
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\end{picture}}%
+
+% \NDOTAR{n} draws a north dotted arrow of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NDOTAR}[1]%
+{\truex{100}\truey{300}%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\multiput(0,0)(0,\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(0,#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+
+% \NMONO{n} draws a north monomorphism of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NMONO}[1]%
+{\truetail%
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,\truemonotail){\line(0,1){\monolength}}%
+\put(0,#1){\nhead}%
+\put(0,\truemonotail){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NEPI{n} draws a north epimorphism of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NEPI}[1]%
+{\truehead%
+\epilength=#1%
+\advance\epilength by -\trueepihead%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,0){\line(0,1){\epilength}}%
+\put(0,#1){\nhead}%
+\put(0,\epilength){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NBIMO{n} draws a north bimorphism of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NBIMO}[1]%
+{\truehead\truetail%
+\epilength=#1%
+\advance\epilength by -\trueepihead%
+\monolength=\epilength%
+\advance\monolength by -\truemonotail%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,\truemonotail){\line(0,1){\monolength}}%
+\put(0,#1){\nhead}%
+\put(0,\truemonotail){\nhead}%
+\put(0,\epilength){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NBIAR{n} draws a pair of north arrows of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NBIAR}[1]%
+{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NBIDIST{n} draws a pair of north distributors of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NBIDIST}[1]%
+{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\end{picture}}}
+\truey{400}%
+\put(-\value{x},0){\circle{\value{y}}}%
+\put(\value{x},0){\circle{\value{y}}}%
+\end{picture}}%
+
+% \NADJAR{n} draws a pair of vertical adjoint arrows of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NADJAR}[1]{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NADJDIST{n} draws a pair of vertical adjoint distributors of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NADJDIST}[1]{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\end{picture}}}
+\truey{400}%
+\put(-\value{x},0){\circle{\value{y}}}%
+\put(\value{x},0){\circle{\value{y}}}%
+\end{picture}}%
+
+
+% All the following commands produce north arrows
+
+% basic north arrow
+\def\basicnar[#1]{\vcase{\NAR}{#100}}%
+
+% north arrow
+\newcommand{\nar}{\@ifnextchar[{\basicnar}{\basicnar[50]}}%
+
+% basic north arrow with left name
+\def\basicNar[#1]#2{\Vcase{\NAR}{#2}{#100}}%
+
+% north arrow with left name
+\newcommand{\Nar}{\@ifnextchar[{\basicNar}{\basicNar[50]}}%
+
+% basic north arrow with right name
+\def\basicnaR[#1]#2{\vcasE{\NAR}{#2}{#100}}%
+
+% north arrow with right name
+\newcommand{\naR}{\@ifnextchar[{\basicnaR}{\basicnaR[50]}}%
+
+% basic north distributor
+\def\basicndist[#1]{\vcase{\NDIST}{#100}}%
+
+% north distributor
+\newcommand{\ndist}{\@ifnextchar[{\basicndist}{\basicndist[50]}}%
+
+% basic north distributor with left name
+\def\basicNdist[#1]#2{\Vcase{\NDIST}{#2\hspace*{2pt}}{#100}}%
+
+% north distributor with left name
+\newcommand{\Ndist}{\@ifnextchar[{\basicNdist}{\basicNdist[50]}}%
+
+% basic north distributor with right name
+\def\basicndisT[#1]#2{\vcasE{\NDIST}{\hspace*{2pt}#2}{#100}}%
+
+% north distributor with right name
+\newcommand{\ndisT}{\@ifnextchar[{\basicndisT}{\basicndisT[50]}}%
+
+% basic north dotted arrow
+\def\basicndotar[#1]{\vcase{\NDOTAR}{#100}}%
+
+% north dotted arrow
+\newcommand{\ndotar}{\@ifnextchar[{\basicndotar}{\basicndotar[50]}}%
+
+% basic north dotted arrow with left name
+\def\basicNdotar[#1]#2{\Vcase{\NDOTAR}{#2}{#100}}%
+
+% north dotted arrow with left name
+\newcommand{\Ndotar}{\@ifnextchar[{\basicNdotar}{\basicNdotar[50]}}%
+
+% basic north dotted arrow with right name
+\def\basicndotaR[#1]#2{\vcasE{\NDOTAR}{#2}{#100}}%
+
+% north dotted arrow with right name
+\newcommand{\ndotaR}{\@ifnextchar[{\basicndotaR}{\basicndotaR[50]}}%
+
+% basic north monomorphism
+\def\basicnmono[#1]{\vcase{\NMONO}{#100}}%
+
+% north arrow
+\newcommand{\nmono}{\@ifnextchar[{\basicnmono}%
+{\basicnmono[50]}}%
+
+% basic north monomorphism with left name
+\def\basicNmono[#1]#2{\Vcase{\NMONO}{#2}{#100}}%
+
+% north monomorphism with left name
+\newcommand{\Nmono}{\@ifnextchar[{\basicNmono}{\basicNmono[50]}}%
+
+% basic north monomorphism with right name
+\def\basicnmonO[#1]#2{\vcasE{\NMONO}{#2}{#100}}%
+
+% north monomorphism with right name
+\newcommand{\nmonO}{\@ifnextchar[{\basicnmonO}{\basicnmonO[50]}}%
+
+% basic north epimorphism
+\def\basicnepi[#1]{\vcase{\NEPI}{#100}}%
+
+% north epimorphism
+\newcommand{\nepi}{\@ifnextchar[{\basicnepi}{\basicnepi[50]}}%
+
+% basic north epimorphism with left name
+\def\basicNepi[#1]#2{\Vcase{\NEPI}{#2}{#100}}%
+
+% north epimorphism with left name
+\newcommand{\Nepi}{\@ifnextchar[{\basicNepi}{\basicNepi[50]}}%
+
+% basic north epimorphism with right name
+\def\basicnepI[#1]#2{\vcasE{\NEPI}{#2}{#100}}%
+
+% north epimorphism with right name
+\newcommand{\nepI}{\@ifnextchar[{\basicnepI}{\basicnepI[50]}}%
+
+% basic north bimorphism
+\def\basicnbimo[#1]{\vcase{\NBIMO}{#100}}%
+
+% north bimorphism
+\newcommand{\nbimo}{\@ifnextchar[{\basicnbimo}{\basicnbimo[50]}}%
+
+% basic north bimorphism with left name
+\def\basicNbimo[#1]#2{\Vcase{\NBIMO}{#2}{#100}}%
+
+% north bimorphism with left name
+\newcommand{\Nbimo}{\@ifnextchar[{\basicNbimo}{\basicNbimo[50]}}%
+
+% basic north bimorphism with right name
+\def\basicnbimO[#1]#2{\vcasE{\NBIMO}{#2}{#100}}%
+
+% north bimorphism with right name
+\newcommand{\nbimO}{\@ifnextchar[{\basicnbimO}{\basicnbimO[50]}}%
+
+% basic north isomorphism
+\def\basicniso[#1]{\Visocase{\NAR}{\cong}{}{#100}}%
+
+% north isomorphism
+\newcommand{\niso}{\@ifnextchar[{\basicniso}{\basicniso[50]}}%
+
+% basic north isomorphism with left name
+\def\basicNiso[#1]#2{\Visocase{\NAR}{#2}{\cong}{#100}}%
+
+% north isomorphism with left name
+\newcommand{\Niso}{\@ifnextchar[{\basicNiso}{\basicNiso[50]}}%
+
+% basic north isomorphism with right name
+\def\basicnisO[#1]#2{\Visocase{\NAR}{\cong}{#2}{#100}}%
+
+% north isomorphism with right name
+\newcommand{\nisO}{\@ifnextchar[{\basicnisO}{\basicnisO[50]}}%
+
+% north equality
+\let\neql=\seql%
+
+% north equality with left name
+\let\Neql=\Seql%
+
+% north equality with right name
+\let\neqL=\seqL%
+
+% basic pair of north arrows
+\def\basicnbiar[#1]{\vbicase{\NBIAR}{#100}}%
+
+% pair of north arrows
+\newcommand{\nbiar}{\@ifnextchar[{\basicnbiar}{\basicnbiar[50]}}%
+
+% basic pair of north arrows with names
+\def\basicNbiar[#1]#2#3{\Vbicase{\NBIAR}{#2}{#3}{#100}}%
+
+% pair of north arrows with names
+\newcommand{\Nbiar}{\@ifnextchar[{\basicNbiar}{\basicNbiar[50]}}%
+\let\nbiaR=\Nbiar
+
+% basic pair of north distributors
+\def\basicnbidist[#1]{\vbicase{\NBIDIST}{#100}}%
+
+% pair of north distributors
+\newcommand{\nbidist}{\@ifnextchar[{\basicnbidist}{\basicnbidist[50]}}%
+
+% basic pair of north distributors with names
+\def\basicNbidist[#1]#2#3%
+{\Vbicase{\NBIDIST}{#2\hspace*{2pt}}{\hspace*{2pt}#3}{#100}}%
+
+% pair of north distributors with names
+\newcommand{\Nbidist}{\@ifnextchar[{\basicNbidist}{\basicNbidist[50]}}%
+\let\nbidisT=\Nbidist
+
+% basic pair of north adjoint arrows
+\def\basicnadjar[#1]{\vbicase{\NADJAR}{#100}}%
+
+% pair of north adjoint arrows
+\newcommand{\nadjar}{\@ifnextchar[{\basicnadjar}{\basicnadjar[50]}}%
+
+% basic pair of north adjoint arrows with names
+\def\basicNadjar[#1]#2#3{\Vbicase{\NADJAR}{#2}{#3}{#100}}%
+
+% pair of north adjoint arrows with names
+\newcommand{\Nadjar}{\@ifnextchar[{\basicNadjar}{\basicNadjar[50]}}%
+\let\nadjaR=\Nadjar
+
+% basic pair of north adjoint distributors
+\def\basicnadjdist[#1]{\vbicase{\NADJDIST}{#100}}%
+
+% pair of north adjoint distributors
+\newcommand{\nadjdist}{\@ifnextchar[{\basicnadjdist}{\basicnadjdist[50]}}%
+
+% basic pair of north adjoint distributors with names
+\def\basicNadjdist[#1]#2#3%
+{\Vbicase{\NADJDIST}{#2\hspace*{2pt}}{\hspace*{2pt}#3}{#100}}%
+
+% pair of north adjoint distributors with names
+\newcommand{\Nadjdist}{\@ifnextchar[{\basicNadjdist}{\basicNadjdist[50]}}%
+\let\nadjdisT=\Nadjdist
+
+
+
+% MACROS FOR FIRST DIAGONAL PICTURES
+
+
+% \fdcase{P}{f}{g}{n} draws the picture P with names f, g
+% and length n units
+\newcommand{\fdcase}[4]{\testdiagrammode\begin{picture}(0,0)%
+\put(0,0){#1{#4}}%
+\truex{200}\truey{600}\truez{600}%
+\put(-\value{x},-\value{x}){\makebox(0,\value{z})[r]{${#2}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#3}$}}%
+\end{picture}}%
+
+% \fdbicase{P}{f}{g}{n} draws the bipicture P with names f, g
+% and length n units
+\newcommand{\fdbicase}[4]{\testdiagrammode\begin{picture}(0,0)%
+\put(0,0){#1{#4}}%
+\truex{900}\truey{150}%
+\put(-\value{x},\value{y}){${#2}$}%
+\truex{300}\truey{1050}%
+\put(\value{x},-\value{y}){${#3}$}%
+\end{picture}}%
+
+
+% NORTH-EAST ARROWS
+
+% \NEAR{n} draws a north-east arrow of length nx100 units
+\newcommand{\NEAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\line(1,1){#1}}%
+\put(\Y,\Y){\nehead}%
+\end{picture}}%
+
+% \NEDIST{n} draws a north-east distributor of length n units
+\newcommand{\NEDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\line(1,1){#1}}%
+\put(\Y,\Y){\nehead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\end{picture}}%
+
+% \NEDOTAR{n} draws a north-east dotted arrow of length n units
+\newcommand{\NEDOTAR}[1]%
+{\truex{100}\truey{212}%
+\Y=#1%
+\divide\Y by 2%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Y,-\Y)(\value{y},\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Y,\Y){\nehead}%
+\end{picture}}%
+
+% \NEMONO{n} draws a north-east monomorphism of length n units
+\newcommand{\NEMONO}[1]{%
+\Y=#1%
+\divide \Y by 2%
+\Truetail%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\begin{picture}(0,0)%
+\put(-\monolength,-\monolength){\line(1,1){\bimolength}}%
+\put(-\monolength,-\monolength){\nehead}%
+\put(\Y,\Y){\nehead}%
+\end{picture}}%
+
+% \NEEPI{n} draws a north-east epimorphism of length n units
+\newcommand{\NEEPI}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\line(1,1){\bimolength}}%
+\put(\epilength,\epilength){\nehead}%
+\put(\Y,\Y){\nehead}%
+\end{picture}}%
+
+% \NEBIMO{n} draws a north-east bimorphism of length n units
+\newcommand{\NEBIMO}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truetail\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\begin{picture}(0,0)%
+\put(-\monolength,-\monolength){\line(1,1){\bimolength}}%
+\put(-\monolength,-\monolength){\nehead}%
+\put(\epilength,\epilength){\nehead}%
+\put(\Y,\Y){\nehead}%
+\end{picture}}%
+
+% \NEBIAR{n} draws a pair of north-east arrows of length n units
+\newcommand{\NEBIAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\put(-\value{x},\value{x}){\line(1,1){#1}}%
+\put(\value{x},-\value{x}){\line(1,1){#1}}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\monolength,\epilength){\nehead}%
+\put(\epilength,\monolength){\nehead}%
+\end{picture}}\end{picture}}%
+
+% \NEBIDIST{n} draws a pair of north-east distributors of length n units
+\newcommand{\NEBIDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\truey{400}%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},-\value{x}){\line(1,1){#1}}%
+\put(\epilength,\monolength){\nehead}%
+\end{picture}}%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by \value{x}%
+\epilength=#1%
+\advance\epilength by -\value{x}%
+\put(-\value{x},\value{x}){\line(1,1){#1}}%
+\put(\epilength,\monolength){\nehead}%
+\end{picture}}%
+\put(-\value{x},\value{x}){\circle{\value{y}}}%
+\put(\value{x},-\value{x}){\circle{\value{y}}}%
+\end{picture}}%
+
+% \NEEQL{n} draws a north-east equality of length n units
+\newcommand{\NEEQL}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{70}%
+\put(-\value{x},\value{x}){\line(1,1){#1}}%
+\put(\value{x},-\value{x}){\line(1,1){#1}}%
+\end{picture}}\end{picture}}%
+
+% \NEADJAR{n} draws a north-east pair of adjoint arrows of length n units
+\newcommand{\NEADJAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},-\value{x}){\line(1,1){#1}}%
+\put(\epilength,\monolength){\nehead}%
+\end{picture}}%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},\value{x}){\line(-1,-1){#1}}%
+\put(-\epilength,-\monolength){\swhead}%
+\end{picture}}\end{picture}}%
+
+% \NEADJDIST{n} draws a north-east pair of adjoint distributors of length n units
+\newcommand{\NEADJDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\truey{400}%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},-\value{x}){\line(1,1){#1}}%
+\put(\epilength,\monolength){\nehead}%
+\end{picture}}%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},\value{x}){\line(-1,-1){#1}}%
+\put(-\epilength,-\monolength){\swhead}%
+\end{picture}}%
+\put(-\value{x},\value{x}){\circle{\value{y}}}%
+\put(\value{x},-\value{x}){\circle{\value{y}}}%
+\end{picture}}%
+
+
+% All the following commands draw north-east arrows
+
+% north-east arrow of length nx100 units
+\def\basicnear[#1]{\fdcase{\NEAR}{}{}{#100}}%
+
+% north-east arrow
+\newcommand{\near}{\@ifnextchar[{\basicnear}{\basicnear[59]}}%
+
+% north-east arrow with upper name [1] and length nx100 units
+\def\basicNear[#1]#2{\fdcase{\NEAR}{#2}{}{#100}}%
+
+% north-east arrow with upper name
+\newcommand{\Near}{\@ifnextchar[{\basicNear}{\basicNear[59]}}%
+
+% north-east arrow with lower name [1] and length nx100 units
+\def\basicneaR[#1]#2{\fdcase{\NEAR}{}{#2}{#100}}%
+
+% north-east arrow with lower name [1]
+\newcommand{\neaR}{\@ifnextchar[{\basicneaR}{\basicneaR[59]}}%
+
+% north-east distributor of length nx100 units
+\def\basicnedist[#1]{\fdcase{\NEDIST}{}{}{#100}}%
+
+% north-east distributor
+\newcommand{\nedist}{\@ifnextchar[{\basicnedist}{\basicnedist[59]}}%
+
+% north-east distributor with upper name [1] and length nx100 units
+\def\basicNedist[#1]#2{\fdcase{\NEDIST}{#2}{}{#100}}%
+
+% north-east distributor with upper name
+\newcommand{\Nedist}{\@ifnextchar[{\basicNedist}{\basicNedist[59]}}%
+
+% north-east distributor with lower name [1] and length nx100 units
+\def\basicnedisT[#1]#2{\fdcase{\NEDIST}{}{#2}{#100}}%
+
+% north-east distributor with lower name [1]
+\newcommand{\nedisT}{\@ifnextchar[{\basicnedisT}{\basicnedisT[59]}}%
+
+% north-east dotted arrow of length nx100 units
+\def\basicnedotar[#1]{\fdcase{\NEDOTAR}{}{}{#100}}%
+
+% north-east dotted arrow
+\newcommand{\nedotar}{\@ifnextchar[{\basicnedotar}{\basicnedotar[59]}}%
+
+% north-east dotted arrow with upper name [1] and length nx100 units
+\def\basicNedotar[#1]#2{\fdcase{\NEDOTAR}{#2}{}{#100}}%
+
+% north-east dotted arrow with upper name
+\newcommand{\Nedotar}{\@ifnextchar[{\basicNedotar}{\basicNedotar[59]}}%
+
+% north-east dotted arrow with lower name [1] and length nx100 units
+\def\basicnedotaR[#1]#2{\fdcase{\NEDOTAR}{}{#2}{#100}}%
+
+% north-east dotted arrow with lower name [1]
+\newcommand{\nedotaR}{\@ifnextchar[{\basicnedotaR}{\basicnedotaR[59]}}%
+
+% north-east monomorphism of length nx100 units
+\def\basicnemono[#1]{\fdcase{\NEMONO}{}{}{#100}}%
+
+% north-east monomorphism
+\newcommand{\nemono}{\@ifnextchar[{\basicnemono}{\basicnemono[59]}}%
+
+% north-east monomorphism with upper name [1] and length nx100 units
+\def\basicNemono[#1]#2{\fdcase{\NEMONO}{#2}{}{#100}}%
+
+% north-east monomophism with upper name
+\newcommand{\Nemono}{\@ifnextchar[{\basicNemono}{\basicNemono[59]}}%
+
+% north-east monomorphism with lower name [1] and length nx100 units
+\def\basicnemonO[#1]#2{\fdcase{\NEMONO}{}{#2}{#100}}%
+
+% north-east monomorphism with lower name [1]
+\newcommand{\nemonO}{\@ifnextchar[{\basicnemonO}{\basicnemonO[59]}}%
+
+% north-east epimorphism of length nx100 units
+\def\basicneepi[#1]{\fdcase{\NEEPI}{}{}{#100}}%
+
+% north-east epimorphism
+\newcommand{\neepi}{\@ifnextchar[{\basicneepi}{\basicneepi[59]}}%
+
+% north-east epimorphism with upper name [1] and length nx100 units
+\def\basicNeepi[#1]#2{\fdcase{\NEEPI}{#2}{}{#100}}%
+
+% north-east epimorphism with upper name
+\newcommand{\Neepi}{\@ifnextchar[{\basicNeepi}{\basicNeepi[59]}}%
+
+% north-east epimorphism with lower name [1] and length nx100 units
+\def\basicneepI[#1]#2{\fdcase{\NEEPI}{}{#2}{#100}}%
+
+% north-east epimorphism with lower name [1]
+\newcommand{\neepI}{\@ifnextchar[{\basicneepI}{\basicneepI[59]}}%
+
+% north-east bimorphism of length nx100 units
+\def\basicnebimo[#1]{\fdcase{\NEBIMO}{}{}{#100}}%
+
+% north-east bimorphism
+\newcommand{\nebimo}{\@ifnextchar[{\basicnebimo}{\basicnebimo[59]}}%
+
+% north-east bimorphism with upper name [1] and length nx100 units
+\def\basicNebimo[#1]#2{\fdcase{\NEBIMO}{#2}{}{#100}}%
+
+% north-east bimorphism with upper name
+\newcommand{\Nebimo}{\@ifnextchar[{\basicNebimo}{\basicNebimo[59]}}%
+
+% north-east bimorphism with lower name [1] and length nx100 units
+\def\basicnebimO[#1]#2{\fdcase{\NEBIMO}{}{#2}{#100}}%
+
+% north-east bimorphism with lower name [1]
+\newcommand{\nebimO}{\@ifnextchar[{\basicnebimO}{\basicnebimO[59]}}%
+
+% north-east isomorphism of length nx100 units
+\def\basicneiso[#1]{\fdcase{\NEAR}{\hspace{-2pt}\cong}{}{#100}}%
+
+% north-east isomorphism
+\newcommand{\neiso}{\@ifnextchar[{\basicneiso}{\basicneiso[59]}}%
+
+% north-east isomorphism with upper name [1] and length nx100 units
+\def\basicNeiso[#1]#2{\fdcase{\NEAR}{#2}{\cong}{#100}}%
+
+% north-east isomorphism with upper name
+\newcommand{\Neiso}{\@ifnextchar[{\basicNeiso}{\basicNeiso[59]}}%
+
+% north-east isomorphism with lower name [1] and length nx100 units
+\def\basicneisO[#1]#2{\fdcase{\NEAR}{\hspace{-2pt}\cong}{#2}{#100}}%
+
+% north-east isomorphism with lower name [1]
+\newcommand{\neisO}{\@ifnextchar[{\basicneisO}{\basicneisO[59]}}%
+
+% north-east equality of length nx100 units
+\def\basicneeql[#1]{\fdcase{\NEEQL}{}{}{#100}}%
+
+% north-east equality
+\newcommand{\neeql}{\@ifnextchar[{\basicneeql}{\basicneeql[59]}}%
+
+% north-east equality with upper name [1] and length nx100 units
+\def\basicNeeql[#1]#2{\fdcase{\NEEQL}{#2}{}{#100}}%
+
+% north-east equality with upper name
+\newcommand{\Neeql}{\@ifnextchar[{\basicNeeql}{\basicNeeql[59]}}%
+
+% north-east equality with lower name [1] and length nx100 units
+\def\basicneeqL[#1]#2{\fdcase{\NEEQL}{}{#2}{#100}}%
+
+% north-east equality with lower name [1]
+\newcommand{\neeqL}{\@ifnextchar[{\basicneeqL}{\basicneeqL[59]}}%
+
+% pair of north-east arrows of length nx100 units
+\def\basicnebiar[#1]{\fdbicase{\NEBIAR}{}{}{#100}}%
+
+% pair of north-east arrows
+\newcommand{\nebiar}{\@ifnextchar[{\basicnebiar}{\basicnebiar[59]}}%
+
+% pair of north-east arrows with names [1][2] and length nx100 units
+\def\basicNebiar[#1]#2#3{\fdbicase{\NEBIAR}{#2}{#3}{#100}}%
+
+% pair of north-east arrows with names
+\newcommand{\Nebiar}{\@ifnextchar[{\basicNebiar}{\basicNebiar[59]}}%
+\let\nebiaR=\Nebiar
+
+% pair of north-east adjoint arrows of length nx100 units
+\def\basicneadjar[#1]{\fdbicase{\NEADJAR}{}{}{#100}}%
+
+% pair of north-east adjoint arrows
+\newcommand{\neadjar}{\@ifnextchar[{\basicneadjar}{\basicneadjar[59]}}%
+
+% pair of north-east adjoint arrows with names [1][2] and length nx100 units
+\def\basicNeadjar[#1]#2#3{\fdbicase{\NEADJAR}{#2}{#3}{#100}}%
+
+% pair of north-east adjoint arrows with names
+\newcommand{\Neadjar}{\@ifnextchar[{\basicNeadjar}{\basicNeadjar[59]}}%
+\let\neadjaR=\Neadjar
+
+% pair of north-east distributors of length nx100 units
+\def\basicnebidist[#1]{\fdbicase{\NEBIDIST}{}{}{#100}}%
+
+% pair of north-east distributors
+\newcommand{\nebidist}{\@ifnextchar[{\basicnebidist}{\basicnebidist[59]}}%
+
+% pair of north-east distributors with names [1][2] and length nx100 units
+\def\basicNebidist[#1]#2#3{\fdbicase{\NEBIDIST}{#2}{#3}{#100}}%
+
+% pair of north-east distributors with names
+\newcommand{\Nebidist}{\@ifnextchar[{\basicNebidist}{\basicNebidist[59]}}%
+\let\nebidisT=\Nebidist
+
+% pair of north-east adjoint distributors of length nx100 units
+\def\basicneadjdist[#1]{\fdbicase{\NEADJDIST}{}{}{#100}}%
+
+% pair of north-east adjoint distributors
+\newcommand{\neadjdist}{\@ifnextchar[{\basicneadjdist}{\basicneadjdist[59]}}%
+
+% pair of north-east adjoint distributors with names [1][2] and length nx100 units
+\def\basicNeadjdist[#1]#2#3{\fdbicase{\NEADJDIST}{#2}{#3}{#100}}%
+
+% pair of north-east adjoint distributors with names
+\newcommand{\Neadjdist}{\@ifnextchar[{\basicNeadjdist}{\basicNeadjdist[59]}}%
+\let\neadjdisT=\Neadjdist
+
+
+
+% SOUT-WEST ARROWS
+
+% \SWAR{n} draws a south-west arrow of length nx100 units
+\newcommand{\SWAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\line(-1,-1){#1}}%
+\put(-\Y,-\Y){\swhead}%
+\end{picture}}%
+
+% \SWDIST{n} draws a south-west distributor of length n units
+\newcommand{\SWDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\line(-1,-1){#1}}%
+\put(-\Y,-\Y){\swhead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\end{picture}}%
+
+% \SWDOTAR{n} draws a south-west dotted arrow of length n units
+\newcommand{\SWDOTAR}[1]%
+{\truex{100}\truey{212}%
+\Y=#1%
+\divide\Y by 2%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Y,\Y)(-\value{y},-\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Y,-\Y){\swhead}%
+\end{picture}}%
+
+% \SWMONO{n} draws a south-west monomorphism of length n units
+\newcommand{\SWMONO}[1]{%
+\Y=#1%
+\divide \Y by 2%
+\Truetail%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\begin{picture}(0,0)%
+\put(\monolength,\monolength){\line(-1,-1){\bimolength}}%
+\put(\monolength,\monolength){\swhead}%
+\put(-\Y,-\Y){\swhead}%
+\end{picture}}%
+
+% \SWEPI{n} draws a south-west epimorphism of length n units
+\newcommand{\SWEPI}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\line(-1,-1){\bimolength}}%
+\put(-\epilength,-\epilength){\swhead}%
+\put(-\Y,-\Y){\swhead}%
+\end{picture}}%
+
+% \SWBIMO{n} draws a south-west bimorphism of length n units
+\newcommand{\SWBIMO}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truetail\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\begin{picture}(0,0)%
+\put(\monolength,\monolength){\line(-1,-1){\bimolength}}%
+\put(\monolength,\monolength){\swhead}%
+\put(-\epilength,-\epilength){\swhead}%
+\put(-\Y,-\Y){\swhead}%
+\end{picture}}%
+
+% \SWBIAR{n} draws a pair of south-west arrows of length n units
+\newcommand{\SWBIAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\put(\value{x},-\value{x}){\line(-1,-1){#1}}%
+\put(-\value{x},\value{x}){\line(-1,-1){#1}}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\monolength,-\epilength){\swhead}%
+\put(-\epilength,-\monolength){\swhead}%
+\end{picture}}\end{picture}}%
+
+% \SWBIDIST{n} draws a pair of south-west distributors of length n units
+\newcommand{\SWBIDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\truey{400}%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},\value{x}){\line(-1,-1){#1}}%
+\put(-\epilength,-\monolength){\swhead}%
+\end{picture}}%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by \value{x}%
+\epilength=#1%
+\advance\epilength by -\value{x}%
+\put(\value{x},-\value{x}){\line(-1,-1){#1}}%
+\put(-\epilength,-\monolength){\swhead}%
+\end{picture}}%
+\put(\value{x},-\value{x}){\circle{\value{y}}}%
+\put(-\value{x},\value{x}){\circle{\value{y}}}%
+\end{picture}}%
+
+% \SWADJAR{n} draws a south-west pair of adjoint arrows of length n units
+\newcommand{\SWADJAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},-\value{x}){\line(-1,-1){#1}}%
+\put(-\monolength,-\epilength){\swhead}%
+\end{picture}}%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},\value{x}){\line(1,1){#1}}%
+\put(\monolength,\epilength){\nehead}%
+\end{picture}}\end{picture}}%
+
+% \SWADJDIST{n} draws a south-west pair of adjoint distributors of length n units
+\newcommand{\SWADJDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\truey{400}%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},-\value{x}){\line(-1,-1){#1}}%
+\put(-\monolength,-\epilength){\swhead}%
+\end{picture}}%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},\value{x}){\line(1,1){#1}}%
+\put(\monolength,\epilength){\nehead}%
+\end{picture}}%
+\put(-\value{x},\value{x}){\circle{\value{y}}}%
+\put(\value{x},-\value{x}){\circle{\value{y}}}%
+\end{picture}}%
+
+
+% All the following commands draw south-west arrows
+
+% south-west arrow of length nx100 units
+\def\basicswar[#1]{\fdcase{\SWAR}{}{}{#100}}%
+
+% south-west arrow
+\newcommand{\swar}{\@ifnextchar[{\basicswar}{\basicswar[59]}}%
+
+% south-west arrow with upper name [1] and length nx100 units
+\def\basicSwar[#1]#2{\fdcase{\SWAR}{#2}{}{#100}}%
+
+% south-west arrow with upper name
+\newcommand{\Swar}{\@ifnextchar[{\basicSwar}{\basicSwar[59]}}%
+
+% south-west arrow with lower name [1] and length nx100 units
+\def\basicswaR[#1]#2{\fdcase{\SWAR}{}{#2}{#100}}%
+
+% south-west arrow with lower name [1]
+\newcommand{\swaR}{\@ifnextchar[{\basicswaR}{\basicswaR[59]}}%
+
+% south-west distributor of length nx100 units
+\def\basicswdist[#1]{\fdcase{\SWDIST}{}{}{#100}}%
+
+% south-west distributor
+\newcommand{\swdist}{\@ifnextchar[{\basicswdist}{\basicswdist[59]}}%
+
+% south-west distributor with upper name [1] and length nx100 units
+\def\basicSwdist[#1]#2{\fdcase{\SWDIST}{#2}{}{#100}}%
+
+% south-west distributor with upper name
+\newcommand{\Swdist}{\@ifnextchar[{\basicSwdist}{\basicSwdist[59]}}%
+
+% south-west distributor with lower name [1] and length nx100 units
+\def\basicswdisT[#1]#2{\fdcase{\SWDIST}{}{#2}{#100}}%
+
+% south-west distributor with lower name [1]
+\newcommand{\swdisT}{\@ifnextchar[{\basicswdisT}{\basicswdisT[59]}}%
+
+% south-west dotted arrow of length nx100 units
+\def\basicswdotar[#1]{\fdcase{\SWDOTAR}{}{}{#100}}%
+
+% south-west dotted arrow
+\newcommand{\swdotar}{\@ifnextchar[{\basicswdotar}{\basicswdotar[59]}}%
+
+% south-west dotted arrow with upper name [1] and length nx100 units
+\def\basicSwdotar[#1]#2{\fdcase{\SWDOTAR}{#2}{}{#100}}%
+
+% south-west dotted arrow with upper name
+\newcommand{\Swdotar}{\@ifnextchar[{\basicSwdotar}{\basicSwdotar[59]}}%
+
+% south-west dotted arrow with lower name [1] and length nx100 units
+\def\basicswdotaR[#1]#2{\fdcase{\SWDOTAR}{}{#2}{#100}}%
+
+% south-west dotted arrow with lower name [1]
+\newcommand{\swdotaR}{\@ifnextchar[{\basicswdotaR}{\basicswdotaR[59]}}%
+
+% south-west monomorphism of length nx100 units
+\def\basicswmono[#1]{\fdcase{\SWMONO}{}{}{#100}}%
+
+% south-west monomorphism
+\newcommand{\swmono}{\@ifnextchar[{\basicswmono}{\basicswmono[59]}}%
+
+% south-west monomorphism with upper name [1] and length nx100 units
+\def\basicSwmono[#1]#2{\fdcase{\SWMONO}{#2}{}{#100}}%
+
+% south-west monomophism with upper name
+\newcommand{\Swmono}{\@ifnextchar[{\basicSwmono}{\basicSwmono[59]}}%
+
+% south-west monomorphism with lower name [1] and length nx100 units
+\def\basicswmonO[#1]#2{\fdcase{\SWMONO}{}{#2}{#100}}%
+
+% south-west monomorphism with lower name [1]
+\newcommand{\swmonO}{\@ifnextchar[{\basicswmonO}{\basicswmonO[59]}}%
+
+% south-west epimorphism of length nx100 units
+\def\basicswepi[#1]{\fdcase{\SWEPI}{}{}{#100}}%
+
+% south-west epimorphism
+\newcommand{\swepi}{\@ifnextchar[{\basicswepi}{\basicswepi[59]}}%
+
+% south-west epimorphism with upper name [1] and length nx100 units
+\def\basicSwepi[#1]#2{\fdcase{\SWEPI}{#2}{}{#100}}%
+
+% south-west epimorphism with upper name
+\newcommand{\Swepi}{\@ifnextchar[{\basicSwepi}{\basicSwepi[59]}}%
+
+% south-west epimorphism with lower name [1] and length nx100 units
+\def\basicswepI[#1]#2{\fdcase{\SWEPI}{}{#2}{#100}}%
+
+% south-west epimorphism with lower name [1]
+\newcommand{\swepI}{\@ifnextchar[{\basicswepI}{\basicswepI[59]}}%
+
+% south-west bimorphism of length nx100 units
+\def\basicswbimo[#1]{\fdcase{\SWBIMO}{}{}{#100}}%
+
+% south-west bimorphism
+\newcommand{\swbimo}{\@ifnextchar[{\basicswbimo}{\basicswbimo[59]}}%
+
+% south-west bimorphism with upper name [1] and length nx100 units
+\def\basicSwbimo[#1]#2{\fdcase{\SWBIMO}{#2}{}{#100}}%
+
+% south-west bimorphism with upper name
+\newcommand{\Swbimo}{\@ifnextchar[{\basicSwbimo}{\basicSwbimo[59]}}%
+
+% south-west bimorphism with lower name [1] and length nx100 units
+\def\basicswbimO[#1]#2{\fdcase{\SWBIMO}{}{#2}{#100}}%
+
+% south-west bimorphism with lower name [1]
+\newcommand{\swbimO}{\@ifnextchar[{\basicswbimO}{\basicswbimO[59]}}%
+
+% south-west isomorphism of length nx100 units
+\def\basicswiso[#1]{\fdcase{\SWAR}{\hspace{-2pt}\cong}{}{#100}}%
+
+% south-west isomorphism
+\newcommand{\swiso}{\@ifnextchar[{\basicswiso}{\basicswiso[59]}}%
+
+% south-west isomorphism with upper name [1] and length nx100 units
+\def\basicSwiso[#1]#2{\fdcase{\SWAR}{#2}{\cong}{#100}}%
+
+% south-west isomorphism with upper name
+\newcommand{\Swiso}{\@ifnextchar[{\basicSwiso}{\basicSwiso[59]}}%
+
+% south-west isomorphism with lower name [1] and length nx100 units
+\def\basicswisO[#1]#2{\fdcase{\SWAR}{\hspace{-2pt}\cong}{#2}{#100}}%
+
+% south-west isomorphism with lower name [1]
+\newcommand{\swisO}{\@ifnextchar[{\basicswisO}{\basicswisO[59]}}%
+
+% south-west equality
+\let\sweql\neeql%
+
+% south-west equality with upper name [1]
+\let\Sweql=\Neeql%
+
+% south-west equality with lower name [1]
+\let\sweqL=\neeqL%
+
+% pair of south-west arrows of length nx100 units
+\def\basicswbiar[#1]{\fdbicase{\SWBIAR}{}{}{#100}}%
+
+% pair of south-west arrows
+\newcommand{\swbiar}{\@ifnextchar[{\basicswbiar}{\basicswbiar[59]}}%
+
+% pair of south-west arrows with names [1][2] and length nx100 units
+\def\basicSwbiar[#1]#2#3{\fdbicase{\SWBIAR}{#2}{#3}{#100}}%
+
+% pair of south-west arrows with names
+\newcommand{\Swbiar}{\@ifnextchar[{\basicSwbiar}{\basicSwbiar[59]}}%
+\let\swbiaR=\Swbiar
+
+% pair of south-west adjoint arrows of length nx100 units
+\def\basicswadjar[#1]{\fdbicase{\SWADJAR}{}{}{#100}}%
+
+% pair of south-west adjoint arrows
+\newcommand{\swadjar}{\@ifnextchar[{\basicswadjar}{\basicswadjar[59]}}%
+
+% pair of south-west adjoint arrows with names [1][2] and length nx100 units
+\def\basicSwadjar[#1]#2#3{\fdbicase{\SWADJAR}{#2}{#3}{#100}}%
+
+% pair of south-west adjoint arrows with names
+\newcommand{\Swadjar}{\@ifnextchar[{\basicSwadjar}{\basicSwadjar[59]}}%
+\let\swadjaR=\Swadjar
+
+% pair of south-west distributors of length nx100 units
+\def\basicswbidist[#1]{\fdbicase{\SWBIDIST}{}{}{#100}}%
+
+% pair of south-west distributors
+\newcommand{\swbidist}{\@ifnextchar[{\basicswbidist}{\basicswbidist[59]}}%
+
+% pair of south-west distributors with names [1][2] and length nx100 units
+\def\basicSwbidist[#1]#2#3{\fdbicase{\SWBIDIST}{#2}{#3}{#100}}%
+
+% pair of south-west distributors with names
+\newcommand{\Swbidist}{\@ifnextchar[{\basicSwbidist}{\basicSwbidist[59]}}%
+\let\swbidisT=\Swbidist
+
+% pair of south-west adjoint distributors of length nx100 units
+\def\basicswadjdist[#1]{\fdbicase{\SWADJDIST}{}{}{#100}}%
+
+% pair of south-west adjoint distributors
+\newcommand{\swadjdist}{\@ifnextchar[{\basicswadjdist}{\basicswadjdist[59]}}%
+
+% pair of south-west adjoint distributors with names [1][2] and length nx100 units
+\def\basicSwadjdist[#1]#2#3{\fdbicase{\SWADJDIST}{#2}{#3}{#100}}%
+
+% pair of south-west adjoint distributors with names
+\newcommand{\Swadjdist}{\@ifnextchar[{\basicSwadjdist}{\basicSwadjdist[59]}}%
+\let\swadjdisT=\Swadjdist
+
+
+
+% MACROS FOR SECOND DIAGONAL PICTURES
+
+% \sdcase{P}{f}{g}{n} draws the picture P with names f, g
+% and length n units
+\newcommand{\sdcase}[4]{\testdiagrammode\begin{picture}(0,0)%
+\put(0,0){#1{#4}}%
+\truex{100}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#2}$}}%
+\truex{300}\truey{800}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#3}$}}%
+\end{picture}}%
+
+% \sdbicase{P}{f}{g}{n} draws the bipicture P with names f, g
+% and length n units
+\newcommand{\sdbicase}[4]{\testdiagrammode\begin{picture}(0,0)%
+\put(0,0){#1{#4}}%
+\truex{350}\truey{600}\truez{950}%
+\put(\value{x},\value{x}){\makebox(0,\value{y})[l]{${#2}$}}%
+\truex{450}\truey{600}\truez{1050}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{y})[r]{${#3}$}}%
+\end{picture}}%
+
+
+% SOUTH-EAST ARROWS
+
+% \SEAR{n} draws a south-east arrow of length nx100 units
+\newcommand{\SEAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\line(1,-1){#1}}%
+\put(\Y,-\Y){\sehead}%
+\end{picture}}%
+
+% \SEDIST{n} draws a south-east distributor of length n units
+\newcommand{\SEDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\line(1,-1){#1}}%
+\put(\Y,-\Y){\sehead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\end{picture}}%
+
+% \SEDOTAR{n} draws a south-east dotted arrow of length n units
+\newcommand{\SEDOTAR}[1]%
+{\truex{100}\truey{212}%
+\Y=#1%
+\divide\Y by 2%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Y,\Y)(\value{y},-\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Y,-\Y){\sehead}%
+\end{picture}}%
+
+% \SEMONO{n} draws a south-east monomorphism of length n units
+\newcommand{\SEMONO}[1]{%
+\Y=#1%
+\divide \Y by 2%
+\Truetail%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\begin{picture}(0,0)%
+\put(-\monolength,\monolength){\line(1,-1){\bimolength}}%
+\put(-\monolength,\monolength){\sehead}%
+\put(\Y,-\Y){\sehead}%
+\end{picture}}%
+
+% \SEEPI{n} draws a south-east epimorphism of length n units
+\newcommand{\SEEPI}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\line(1,-1){\bimolength}}%
+\put(\epilength,-\epilength){\sehead}%
+\put(\Y,-\Y){\sehead}%
+\end{picture}}%
+
+% \SEBIMO{n} draws a south-east bimorphism of length n units
+\newcommand{\SEBIMO}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truetail\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\begin{picture}(0,0)%
+\put(-\monolength,\monolength){\line(1,-1){\bimolength}}%
+\put(-\monolength,\monolength){\sehead}%
+\put(\epilength,-\epilength){\sehead}%
+\put(\Y,-\Y){\sehead}%
+\end{picture}}%
+
+% \SEBIAR{n} draws a pair of south-east arrows of length n units
+\newcommand{\SEBIAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\put(-\value{x},-\value{x}){\line(1,-1){#1}}%
+\put(\value{x},\value{x}){\line(1,-1){#1}}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\monolength,-\epilength){\sehead}%
+\put(\epilength,-\monolength){\sehead}%
+\end{picture}}\end{picture}}%
+
+% \SEBIDIST{n} draws a pair of south-east distributors of length n units
+\newcommand{\SEBIDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\truey{400}%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},\value{x}){\line(1,-1){#1}}%
+\put(\epilength,-\monolength){\sehead}%
+\end{picture}}%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by \value{x}%
+\epilength=#1%
+\advance\epilength by -\value{x}%
+\put(-\value{x},-\value{x}){\line(1,-1){#1}}%
+\put(\epilength,-\monolength){\sehead}%
+\end{picture}}%
+\put(-\value{x},-\value{x}){\circle{\value{y}}}%
+\put(\value{x},\value{x}){\circle{\value{y}}}%
+\end{picture}}%
+
+% \SEEQL{n} draws a south-east equality of length n units
+\newcommand{\SEEQL}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{70}%
+\put(-\value{x},-\value{x}){\line(1,-1){#1}}%
+\put(\value{x},\value{x}){\line(1,-1){#1}}%
+\end{picture}}\end{picture}}%
+
+% \SEADJAR{n} draws a south-east pair of adjoint arrows of length n units
+\newcommand{\SEADJAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},-\value{x}){\line(1,-1){#1}}%
+\put(\monolength,-\epilength){\sehead}%
+\end{picture}}%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},\value{x}){\line(-1,1){#1}}%
+\put(-\monolength,\epilength){\nwhead}%
+\end{picture}}\end{picture}}%
+
+% \SEADJDIST{n} draws a south-east pair of adjoint distributors of length n units
+\newcommand{\SEADJDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\truey{400}%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},-\value{x}){\line(1,-1){#1}}%
+\put(\monolength,-\epilength){\sehead}%
+\end{picture}}%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},\value{x}){\line(-1,1){#1}}%
+\put(-\monolength,\epilength){\nwhead}%
+\end{picture}}%
+\put(-\value{x},-\value{x}){\circle{\value{y}}}%
+\put(\value{x},\value{x}){\circle{\value{y}}}%
+\end{picture}}%
+
+
+% All the following commands draw south-east arrows
+
+% south-east arrow of length nx100 units
+\def\basicsear[#1]{\sdcase{\SEAR}{}{}{#100}}%
+
+% south-east arrow
+\newcommand{\sear}{\@ifnextchar[{\basicsear}{\basicsear[59]}}%
+
+% south-east arrow with upper name [1] and length nx100 units
+\def\basicSear[#1]#2{\sdcase{\SEAR}{#2}{}{#100}}%
+
+% south-east arrow with upper name
+\newcommand{\Sear}{\@ifnextchar[{\basicSear}{\basicSear[59]}}%
+
+% south-east arrow with lower name [1] and length nx100 units
+\def\basicseaR[#1]#2{\sdcase{\SEAR}{}{#2}{#100}}%
+
+% south-east arrow with lower name [1]
+\newcommand{\seaR}{\@ifnextchar[{\basicseaR}{\basicseaR[59]}}%
+
+% south-east distributor of length nx100 units
+\def\basicsedist[#1]{\sdcase{\SEDIST}{}{}{#100}}%
+
+% south-east distributor
+\newcommand{\sedist}{\@ifnextchar[{\basicsedist}{\basicsedist[59]}}%
+
+% south-east distributor with upper name [1] and length nx100 units
+\def\basicSedist[#1]#2{\sdcase{\SEDIST}{#2}{}{#100}}%
+
+% south-east distributor with upper name
+\newcommand{\Sedist}{\@ifnextchar[{\basicSedist}{\basicSedist[59]}}%
+
+% south-east distributor with lower name [1] and length nx100 units
+\def\basicsedisT[#1]#2{\sdcase{\SEDIST}{}{#2}{#100}}%
+
+% south-east distributor with lower name [1]
+\newcommand{\sedisT}{\@ifnextchar[{\basicsedisT}{\basicsedisT[59]}}%
+
+% south-east dotted arrow of length nx100 units
+\def\basicsedotar[#1]{\sdcase{\SEDOTAR}{}{}{#100}}%
+
+% south-east dotted arrow
+\newcommand{\sedotar}{\@ifnextchar[{\basicsedotar}{\basicsedotar[59]}}%
+
+% south-east dotted arrow with upper name [1] and length nx100 units
+\def\basicSedotar[#1]#2{\sdcase{\SEDOTAR}{#2}{}{#100}}%
+
+% south-east dotted arrow with upper name
+\newcommand{\Sedotar}{\@ifnextchar[{\basicSedotar}{\basicSedotar[59]}}%
+
+% south-east dotted arrow with lower name [1] and length nx100 units
+\def\basicsedotaR[#1]#2{\sdcase{\SEDOTAR}{}{#2}{#100}}%
+
+% south-east dotted arrow with lower name [1]
+\newcommand{\sedotaR}{\@ifnextchar[{\basicsedotaR}{\basicsedotaR[59]}}%
+
+% south-east monomorphism of length nx100 units
+\def\basicsemono[#1]{\sdcase{\SEMONO}{}{}{#100}}%
+
+% south-east monomorphism
+\newcommand{\semono}{\@ifnextchar[{\basicsemono}{\basicsemono[59]}}%
+
+% south-east monomorphism with upper name [1] and length nx100 units
+\def\basicSemono[#1]#2{\sdcase{\SEMONO}{#2}{}{#100}}%
+
+% south-east monomophism with upper name
+\newcommand{\Semono}{\@ifnextchar[{\basicSemono}{\basicSemono[59]}}%
+
+% south-east monomorphism with lower name [1] and length nx100 units
+\def\basicsemonO[#1]#2{\sdcase{\SEMONO}{}{#2}{#100}}%
+
+% south-east monomorphism with lower name [1]
+\newcommand{\semonO}{\@ifnextchar[{\basicsemonO}{\basicsemonO[59]}}%
+
+% south-east epimorphism of length nx100 units
+\def\basicseepi[#1]{\sdcase{\SEEPI}{}{}{#100}}%
+
+% south-east epimorphism
+\newcommand{\seepi}{\@ifnextchar[{\basicseepi}{\basicseepi[59]}}%
+
+% south-east epimorphism with upper name [1] and length nx100 units
+\def\basicSeepi[#1]#2{\sdcase{\SEEPI}{#2}{}{#100}}%
+
+% south-east epimorphism with upper name
+\newcommand{\Seepi}{\@ifnextchar[{\basicSeepi}{\basicSeepi[59]}}%
+
+% south-east epimorphism with lower name [1] and length nx100 units
+\def\basicseepI[#1]#2{\sdcase{\SEEPI}{}{#2}{#100}}%
+
+% south-east epimorphism with lower name [1]
+\newcommand{\seepI}{\@ifnextchar[{\basicseepI}{\basicseepI[59]}}%
+
+% south-east bimorphism of length nx100 units
+\def\basicsebimo[#1]{\sdcase{\SEBIMO}{}{}{#100}}%
+
+% south-east bimorphism
+\newcommand{\sebimo}{\@ifnextchar[{\basicsebimo}{\basicsebimo[59]}}%
+
+% south-east bimorphism with upper name [1] and length nx100 units
+\def\basicSebimo[#1]#2{\sdcase{\SEBIMO}{#2}{}{#100}}%
+
+% south-east bimorphism with upper name
+\newcommand{\Sebimo}{\@ifnextchar[{\basicSebimo}{\basicSebimo[59]}}%
+
+% south-east bimorphism with lower name [1] and length nx100 units
+\def\basicsebimO[#1]#2{\sdcase{\SEBIMO}{}{#2}{#100}}%
+
+% south-east bimorphism with lower name [1]
+\newcommand{\sebimO}{\@ifnextchar[{\basicsebimO}{\basicsebimO[59]}}%
+
+% south-east isomorphism of length nx100 units
+\def\basicseiso[#1]{\sdcase{\SEAR}{\hspace{-2pt}\cong}{}{#100}}%
+
+% south-east isomorphism
+\newcommand{\seiso}{\@ifnextchar[{\basicseiso}{\basicseiso[59]}}%
+
+% south-east isomorphism with upper name [1] and length nx100 units
+\def\basicSeiso[#1]#2{\sdcase{\SEAR}{#2}{\cong}{#100}}%
+
+% south-east isomorphism with upper name
+\newcommand{\Seiso}{\@ifnextchar[{\basicSeiso}{\basicSeiso[59]}}%
+
+% south-east isomorphism with lower name [1] and length nx100 units
+\def\basicseisO[#1]#2{\sdcase{\SEAR}{\hspace{-2pt}\cong}{#2}{#100}}%
+
+% south-east isomorphism with lower name [1]
+\newcommand{\seisO}{\@ifnextchar[{\basicseisO}{\basicseisO[59]}}%
+
+% south-east equality of length nx100 units
+\def\basicseeql[#1]{\sdcase{\SEEQL}{}{}{#100}}%
+
+% south-east equality
+\newcommand{\seeql}{\@ifnextchar[{\basicseeql}{\basicseeql[59]}}%
+
+% south-east equality with upper name [1] and length nx100 units
+\def\basicSeeql[#1]#2{\sdcase{\SEEQL}{#2}{}{#100}}%
+
+% south-east equality with upper name
+\newcommand{\Seeql}{\@ifnextchar[{\basicSeeql}{\basicSeeql[59]}}%
+
+% south-east equality with lower name [1] and length nx100 units
+\def\basicseeqL[#1]#2{\sdcase{\SEEQL}{}{#2}{#100}}%
+
+% south-east equality with lower name [1]
+\newcommand{\seeqL}{\@ifnextchar[{\basicseeqL}{\basicseeqL[59]}}%
+
+% pair of south-east arrows of length nx100 units
+\def\basicsebiar[#1]{\sdbicase{\SEBIAR}{}{}{#100}}%
+
+% pair of south-east arrows
+\newcommand{\sebiar}{\@ifnextchar[{\basicsebiar}{\basicsebiar[59]}}%
+
+% pair of south-east arrows with names [1][2] and length nx100 units
+\def\basicSebiar[#1]#2#3{\sdbicase{\SEBIAR}{#2}{#3}{#100}}%
+
+% pair of south-east arrows with names
+\newcommand{\Sebiar}{\@ifnextchar[{\basicSebiar}{\basicSebiar[59]}}%
+\let\sebiaR=\Sebiar
+
+% pair of south-east adjoint arrows of length nx100 units
+\def\basicseadjar[#1]{\sdbicase{\SEADJAR}{}{}{#100}}%
+
+% pair of south-east adjoint arrows
+\newcommand{\seadjar}{\@ifnextchar[{\basicseadjar}{\basicseadjar[59]}}%
+
+% pair of south-east adjoint arrows with names [1][2] and length nx100 units
+\def\basicSeadjar[#1]#2#3{\sdbicase{\SEADJAR}{#2}{#3}{#100}}%
+
+% pair of south-east adjoint arrows with names
+\newcommand{\Seadjar}{\@ifnextchar[{\basicSeadjar}{\basicSeadjar[59]}}%
+\let\seadjaR=\Seadjar
+
+% pair of south-east distributors of length nx100 units
+\def\basicsebidist[#1]{\sdbicase{\SEBIDIST}{}{}{#100}}%
+
+% pair of south-east distributors
+\newcommand{\sebidist}{\@ifnextchar[{\basicsebidist}{\basicsebidist[59]}}%
+
+% pair of south-east distributors with names [1][2] and length nx100 units
+\def\basicSebidist[#1]#2#3{\sdbicase{\SEBIDIST}{#2}{#3}{#100}}%
+
+% pair of south-east distributors with names
+\newcommand{\Sebidist}{\@ifnextchar[{\basicSebidist}{\basicSebidist[59]}}%
+\let\sebidisT=\Sebidist
+
+% pair of south-east adjoint distributors of length nx100 units
+\def\basicseadjdist[#1]{\sdbicase{\SEADJDIST}{}{}{#100}}%
+
+% pair of south-east adjoint distributors
+\newcommand{\seadjdist}{\@ifnextchar[{\basicseadjdist}{\basicseadjdist[59]}}%
+
+% pair of south-east adjoint distributors with names [1][2] and length nx100 units
+\def\basicSeadjdist[#1]#2#3{\sdbicase{\SEADJDIST}{#2}{#3}{#100}}%
+
+% pair of south-east adjoint distributors with names
+\newcommand{\Seadjdist}{\@ifnextchar[{\basicSeadjdist}{\basicSeadjdist[59]}}%
+\let\seadjdisT=\Seadjdist
+
+
+% NORTH-WEST ARROWS
+
+% \NWAR{n} draws a north-west arrow of length nx100 units
+\newcommand{\NWAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\line(-1,1){#1}}%
+\put(-\Y,\Y){\nwhead}%
+\end{picture}}%
+
+% \NWDIST{n} draws a north-west distributor of length n units
+\newcommand{\NWDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\line(-1,1){#1}}%
+\put(-\Y,\Y){\nwhead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\end{picture}}%
+
+% \NWDOTAR{n} draws a north-west dotted arrow of length n units
+\newcommand{\NWDOTAR}[1]%
+{\truex{100}\truey{212}%
+\Y=#1%
+\divide\Y by 2%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Y,-\Y)(-\value{y},\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Y,\Y){\nwhead}%
+\end{picture}}%
+
+% \NWMONO{n} draws a north-west monomorphism of length n units
+\newcommand{\NWMONO}[1]{%
+\Y=#1%
+\divide \Y by 2%
+\Truetail%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\begin{picture}(0,0)%
+\put(\monolength,-\monolength){\line(-1,1){\bimolength}}%
+\put(\monolength,-\monolength){\nwhead}%
+\put(-\Y,\Y){\nwhead}%
+\end{picture}}%
+
+% \NWEPI{n} draws a north-west epimorphism of length n units
+\newcommand{\NWEPI}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\line(-1,1){\bimolength}}%
+\put(-\epilength,\epilength){\nwhead}%
+\put(-\Y,\Y){\nwhead}%
+\end{picture}}%
+
+% \NWBIMO{n} draws a north-west bimorphism of length n units
+\newcommand{\NWBIMO}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truetail\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\begin{picture}(0,0)%
+\put(\monolength,-\monolength){\line(-1,1){\bimolength}}%
+\put(\monolength,-\monolength){\nwhead}%
+\put(-\epilength,\epilength){\nwhead}%
+\put(-\Y,\Y){\nwhead}%
+\end{picture}}%
+
+% \NWBIAR{n} draws a pair of north-west arrows of length n units
+\newcommand{\NWBIAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\put(-\value{x},-\value{x}){\line(-1,1){#1}}%
+\put(\value{x},\value{x}){\line(-1,1){#1}}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\monolength,\epilength){\nwhead}%
+\put(-\epilength,\monolength){\nwhead}%
+\end{picture}}\end{picture}}%
+
+% \NWBIDIST{n} draws a pair of north-west distributors of length n units
+\newcommand{\NWBIDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\truey{400}%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},-\value{x}){\line(-1,1){#1}}%
+\put(-\epilength,\monolength){\nwhead}%
+\end{picture}}%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by \value{x}%
+\epilength=#1%
+\advance\epilength by -\value{x}%
+\put(\value{x},\value{x}){\line(-1,1){#1}}%
+\put(-\epilength,\monolength){\nwhead}%
+\end{picture}}%
+\put(-\value{x},-\value{x}){\circle{\value{y}}}%
+\put(\value{x},\value{x}){\circle{\value{y}}}%
+\end{picture}}%
+
+% \NWADJAR{n} draws a north-west pair of adjoint arrows of length n units
+\newcommand{\NWADJAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},-\value{x}){\line(-1,1){#1}}%
+\put(-\epilength,\monolength){\nwhead}%
+\end{picture}}%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},\value{x}){\line(1,-1){#1}}%
+\put(\epilength,-\monolength){\sehead}%
+\end{picture}}\end{picture}}%
+
+% \NWADJDIST{n} draws a north-west pair of adjoint distributors of length n units
+\newcommand{\NWADJDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\truey{400}%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},-\value{x}){\line(-1,1){#1}}%
+\put(-\epilength,\monolength){\nwhead}%
+\end{picture}}%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},\value{x}){\line(1,-1){#1}}%
+\put(\epilength,-\monolength){\sehead}%
+\end{picture}}%
+\put(-\value{x},-\value{x}){\circle{\value{y}}}%
+\put(\value{x},\value{x}){\circle{\value{y}}}%
+\end{picture}}%
+
+
+% All the following commands draw north-west arrows
+
+% north-west arrow of length nx100 units
+\def\basicnwar[#1]{\sdcase{\NWAR}{}{}{#100}}%
+
+% north-west arrow
+\newcommand{\nwar}{\@ifnextchar[{\basicnwar}{\basicnwar[59]}}%
+
+% north-west arrow with upper name [1] and length nx100 units
+\def\basicNwar[#1]#2{\sdcase{\NWAR}{#2}{}{#100}}%
+
+% north-west arrow with upper name
+\newcommand{\Nwar}{\@ifnextchar[{\basicNwar}{\basicNwar[59]}}%
+
+% north-west arrow with lower name [1] and length nx100 units
+\def\basicnwaR[#1]#2{\sdcase{\NWAR}{}{#2}{#100}}%
+
+% north-west arrow with lower name [1]
+\newcommand{\nwaR}{\@ifnextchar[{\basicnwaR}{\basicnwaR[59]}}%
+
+% north-west distributor of length nx100 units
+\def\basicnwdist[#1]{\sdcase{\NWDIST}{}{}{#100}}%
+
+% north-west distributor
+\newcommand{\nwdist}{\@ifnextchar[{\basicnwdist}{\basicnwdist[59]}}%
+
+% north-west distributor with upper name [1] and length nx100 units
+\def\basicNwdist[#1]#2{\sdcase{\NWDIST}{#2}{}{#100}}%
+
+% north-west distributor with upper name
+\newcommand{\Nwdist}{\@ifnextchar[{\basicNwdist}{\basicNwdist[59]}}%
+
+% north-west distributor with lower name [1] and length nx100 units
+\def\basicnwdisT[#1]#2{\sdcase{\NWDIST}{}{#2}{#100}}%
+
+% north-west distributor with lower name [1]
+\newcommand{\nwdisT}{\@ifnextchar[{\basicnwdisT}{\basicnwdisT[59]}}%
+
+% north-west dotted arrow of length nx100 units
+\def\basicnwdotar[#1]{\sdcase{\NWDOTAR}{}{}{#100}}%
+
+% north-west dotted arrow
+\newcommand{\nwdotar}{\@ifnextchar[{\basicnwdotar}{\basicnwdotar[59]}}%
+
+% north-west dotted arrow with upper name [1] and length nx100 units
+\def\basicNwdotar[#1]#2{\sdcase{\NWDOTAR}{#2}{}{#100}}%
+
+% north-west dotted arrow with upper name
+\newcommand{\Nwdotar}{\@ifnextchar[{\basicNwdotar}{\basicNwdotar[59]}}%
+
+% north-west dotted arrow with lower name [1] and length nx100 units
+\def\basicnwdotaR[#1]#2{\sdcase{\NWDOTAR}{}{#2}{#100}}%
+
+% north-west dotted arrow with lower name [1]
+\newcommand{\nwdotaR}{\@ifnextchar[{\basicnwdotaR}{\basicnwdotaR[59]}}%
+
+% north-west monomorphism of length nx100 units
+\def\basicnwmono[#1]{\sdcase{\NWMONO}{}{}{#100}}%
+
+% north-west monomorphism
+\newcommand{\nwmono}{\@ifnextchar[{\basicnwmono}{\basicnwmono[59]}}%
+
+% north-west monomorphism with upper name [1] and length nx100 units
+\def\basicNwmono[#1]#2{\sdcase{\NWMONO}{#2}{}{#100}}%
+
+% north-west monomophism with upper name
+\newcommand{\Nwmono}{\@ifnextchar[{\basicNwmono}{\basicNwmono[59]}}%
+
+% north-west monomorphism with lower name [1] and length nx100 units
+\def\basicnwmonO[#1]#2{\sdcase{\NWMONO}{}{#2}{#100}}%
+
+% north-west monomorphism with lower name [1]
+\newcommand{\nwmonO}{\@ifnextchar[{\basicnwmonO}{\basicnwmonO[59]}}%
+
+% north-west epimorphism of length nx100 units
+\def\basicnwepi[#1]{\sdcase{\NWEPI}{}{}{#100}}%
+
+% north-west epimorphism
+\newcommand{\nwepi}{\@ifnextchar[{\basicnwepi}{\basicnwepi[59]}}%
+
+% north-west epimorphism with upper name [1] and length nx100 units
+\def\basicNwepi[#1]#2{\sdcase{\NWEPI}{#2}{}{#100}}%
+
+% north-west epimorphism with upper name
+\newcommand{\Nwepi}{\@ifnextchar[{\basicNwepi}{\basicNwepi[59]}}%
+
+% north-west epimorphism with lower name [1] and length nx100 units
+\def\basicnwepI[#1]#2{\sdcase{\NWEPI}{}{#2}{#100}}%
+
+% north-west epimorphism with lower name [1]
+\newcommand{\nwepI}{\@ifnextchar[{\basicnwepI}{\basicnwepI[59]}}%
+
+% north-west bimorphism of length nx100 units
+\def\basicnwbimo[#1]{\sdcase{\NWBIMO}{}{}{#100}}%
+
+% north-west bimorphism
+\newcommand{\nwbimo}{\@ifnextchar[{\basicnwbimo}{\basicnwbimo[59]}}%
+
+% north-west bimorphism with upper name [1] and length nx100 units
+\def\basicNwbimo[#1]#2{\sdcase{\NWBIMO}{#2}{}{#100}}%
+
+% north-west bimorphism with upper name
+\newcommand{\Nwbimo}{\@ifnextchar[{\basicNwbimo}{\basicNwbimo[59]}}%
+
+% north-west bimorphism with lower name [1] and length nx100 units
+\def\basicnwbimO[#1]#2{\sdcase{\NWBIMO}{}{#2}{#100}}%
+
+% north-west bimorphism with lower name [1]
+\newcommand{\nwbimO}{\@ifnextchar[{\basicnwbimO}{\basicnwbimO[59]}}%
+
+% north-west isomorphism of length nx100 units
+\def\basicnwiso[#1]{\sdcase{\NWAR}{\hspace{-2pt}\cong}{}{#100}}%
+
+% north-west isomorphism
+\newcommand{\nwiso}{\@ifnextchar[{\basicnwiso}{\basicnwiso[59]}}%
+
+% north-west isomorphism with upper name [1] and length nx100 units
+\def\basicNwiso[#1]#2{\sdcase{\NWAR}{#2}{\cong}{#100}}%
+
+% north-west isomorphism with upper name
+\newcommand{\Nwiso}{\@ifnextchar[{\basicNwiso}{\basicNwiso[59]}}%
+
+% north-west isomorphism with lower name [1] and length nx100 units
+\def\basicnwisO[#1]#2{\sdcase{\NWAR}{\hspace{-2pt}\cong}{#2}{#100}}%
+
+% north-west isomorphism with lower name [1]
+\newcommand{\nwisO}{\@ifnextchar[{\basicnwisO}{\basicnwisO[59]}}%
+
+% north-west equality
+\let\nweql=\seeql%
+
+% north-west equality with upper name
+\let\Nweql=\Seeql%
+
+% north-west equality with lower name [1]
+\let\nweqL=\seeqL%
+
+% pair of north-west arrows of length nx100 units
+\def\basicnwbiar[#1]{\sdbicase{\NWBIAR}{}{}{#100}}%
+
+% pair of north-west arrows
+\newcommand{\nwbiar}{\@ifnextchar[{\basicnwbiar}{\basicnwbiar[59]}}%
+
+% pair of north-west arrows with names [1][2] and length nx100 units
+\def\basicNwbiar[#1]#2#3{\sdbicase{\NWBIAR}{#2}{#3}{#100}}%
+
+% pair of north-west arrows with names
+\newcommand{\Nwbiar}{\@ifnextchar[{\basicNwbiar}{\basicNwbiar[59]}}%
+\let\nwbiaR=\Nwbiar
+
+% pair of north-west adjoint arrows of length nx100 units
+\def\basicnwadjar[#1]{\sdbicase{\NWADJAR}{}{}{#100}}%
+
+% pair of north-west adjoint arrows
+\newcommand{\nwadjar}{\@ifnextchar[{\basicnwadjar}{\basicnwadjar[59]}}%
+
+% pair of north-west adjoint arrows with names [1][2] and length nx100 units
+\def\basicNwadjar[#1]#2#3{\sdbicase{\NWADJAR}{#2}{#3}{#100}}%
+
+% pair of north-west adjoint arrows with names
+\newcommand{\Nwadjar}{\@ifnextchar[{\basicNwadjar}{\basicNwadjar[59]}}%
+\let\nwadjaR=\Nwadjar
+
+% pair of north-west distributors of length nx100 units
+\def\basicnwbidist[#1]{\sdbicase{\NWBIDIST}{}{}{#100}}%
+
+% pair of north-west distributors
+\newcommand{\nwbidist}{\@ifnextchar[{\basicnwbidist}{\basicnwbidist[59]}}%
+
+% pair of north-west distributors with names [1][2] and length nx100 units
+\def\basicNwbidist[#1]#2#3{\sdbicase{\NWBIDIST}{#2}{#3}{#100}}%
+
+% pair of north-west distributors with names
+\newcommand{\Nwbidist}{\@ifnextchar[{\basicNwbidist}{\basicNwbidist[59]}}%
+\let\nwbidisT=\Nwbidist
+
+% pair of north-west adjoint distributors of length nx100 units
+\def\basicnwadjdist[#1]{\sdbicase{\NWADJDIST}{}{}{#100}}%
+
+% pair of north-west adjoint distributors
+\newcommand{\nwadjdist}{\@ifnextchar[{\basicnwadjdist}{\basicnwadjdist[59]}}%
+
+% pair of north-west adjoint distributors with names [1][2] and length nx100 units
+\def\basicNwadjdist[#1]#2#3{\sdbicase{\NWADJDIST}{#2}{#3}{#100}}%
+
+% pair of north-west adjoint distributors with names
+\newcommand{\Nwadjdist}{\@ifnextchar[{\basicNwadjdist}{\basicNwadjdist[59]}}%
+\let\nwadjdisT=\Nwadjdist
+
+
+% EAST-NORTH-EAST ARROWS
+
+% The following commands produce east-north-east arrows
+% of horizontal extent n units
+
+% \ENEAR{f}{g}{n} draws a east-north-east arrow with names f, g
+% and length n units
+\newcommand{\ENEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\line(2,1){#3}}%
+\put(\Y,\Z){\enehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEDIST{f}{g}{n} draws a east-north-east distributor
+% with names f, g and length n units
+\newcommand{\ENEDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\line(2,1){#3}}%
+\put(\Y,\Z){\enehead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\ENEDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Y,-\Z)(\value{y},\value{z}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Y,\Z){\enehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEMONO{f}{g}{n} draws a east-north-east monomorphism
+% with names f,g and length n units
+\newcommand{\ENEMONO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,-\secondmonolength){\line(2,1){\bimolength}}%
+\put(-\monolength,-\secondmonolength){\enehead}%
+\put(\Y,\Z){\enehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEEPI{f}{g}{n} draws a east-north-east epimorphism
+% with names f, g and length n units
+\newcommand{\ENEEPI}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\line(2,1){\bimolength}}%
+\put(\epilength,\secondepilength){\enehead}%
+\put(\Y,\Z){\enehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEBIMO{f}{g}{n} draws a east-north-east bimorphism
+% with names f,g and length n units
+\newcommand{\ENEBIMO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,-\secondmonolength){\line(2,1){\bimolength}}%
+\put(-\monolength,-\secondmonolength){\enehead}%
+\put(\epilength,\secondepilength){\enehead}%
+\put(\Y,\Z){\enehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEEQL{f}{g}{n} draws a east-north-east equality
+% with names f,g and length n units
+\newcommand{\ENEEQL}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\begin{picture}(0,0)%
+\truex{44}\truey{89}%
+\put(-\value{x},\value{y}){\line(2,1){#3}}%
+\put(\value{x},-\value{y}){\line(2,1){#3}}%
+\end{picture}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEBIAR{f}{g}{n} draws a pair of east-north-east arrows
+% with names f,g and length n units
+\newcommand{\ENEBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\put(-\value{x},\value{y}){\line(2,1){#3}}%
+\put(\value{x},-\value{y}){\line(2,1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\monolength,\secondepilength){\enehead}%
+\put(\epilength,\secondmonolength){\enehead}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEBIDIST{f}{g}{n} draws a pair of east-north-east distributors
+% with names f,g and length n units
+\newcommand{\ENEBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(-\Y,-\Z){\begin{picture}(0,0)%
+\put(-\value{x},\value{y}){\line(2,1){#3}}%
+\put(\value{x},-\value{y}){\line(2,1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\monolength,\secondepilength){\enehead}%
+\put(\epilength,\secondmonolength){\enehead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\circle{\value{z}}}%
+\put(\value{x},-\value{y}){\circle{\value{z}}}%
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEADJAR{f}{g}{n} draws a east-north-east pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\ENEADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\line(2,1){#3}}%
+\put(\epilength,\secondmonolength){\enehead}%
+\put(\monolength,\secondepilength){\line(-2,-1){#3}}%
+\put(-\value{x},\value{y}){\wswhead}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEADJDIST{f}{g}{n} draws a east-north-east pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\ENEADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(-\Y,-\Z){\begin{picture}(0,0)%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\line(2,1){#3}}%
+\put(\epilength,\secondmonolength){\enehead}%
+\put(\monolength,\secondepilength){\line(-2,-1){#3}}%
+\put(-\value{x},\value{y}){\wswhead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\circle{\value{z}}}%
+\put(\value{x},-\value{y}){\circle{\value{z}}}%
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce east-north-east arrows;
+% the default length is 13300 units
+
+% basic east-north-east arrow
+\def\basicenear[#1]{\ENEAR{}{}{#100}}%
+
+% east-north-east arrow
+\newcommand{\enear}{\@ifnextchar[{\basicenear}{\basicenear[133]}}%
+
+% basic east-north-east arrow with upper name
+\def\basicEnear[#1]#2{\ENEAR{#2}{}{#100}}%
+
+% east-north-east arrow with upper name
+\newcommand{\Enear}{\@ifnextchar[{\basicEnear}{\basicEnear[133]}}%
+
+% basic east-north-east arrow with lower name
+\def\basiceneaR[#1]#2{\ENEAR{}{#2}{#100}}%
+
+% east-north-east arrow with lower name
+\newcommand{\eneaR}{\@ifnextchar[{\basiceneaR}{\basiceneaR[133]}}%
+
+% basic east-north-east distributor
+\def\basicenedist[#1]{\ENEDIST{}{}{#100}}%
+
+% east-north-east distributor
+\newcommand{\enedist}{\@ifnextchar[{\basicenedist}{\basicenedist[133]}}%
+
+% basic east-north-east distributor with upper name
+\def\basicEnedist[#1]#2{\ENEDIST{#2}{}{#100}}%
+
+% east-north-east distributor with upper name
+\newcommand{\Enedist}{\@ifnextchar[{\basicEnedist}{\basicEnedist[133]}}%
+
+% basic east-north-east distributor with lower name
+\def\basicenedisT[#1]#2{\ENEDIST{}{#2}{#100}}%
+
+% east-north-east distributor with lower name
+\newcommand{\enedisT}{\@ifnextchar[{\basicenedisT}{\basicenedisT[133]}}%
+
+% basic east-north-east dotted arrow
+\def\basicenedotar[#1]{\ENEDOTAR{}{}{#100}}%
+
+% east-north-east dotted arrow
+\newcommand{\enedotar}{\@ifnextchar[{\basicenedotar}{\basicenedotar[133]}}%
+
+% basic east-north-east dotted arrow with upper name
+\def\basicEnedotar[#1]#2{\ENEDOTAR{#2}{}{#100}}%
+
+% east-north-east dotted arrow with upper name
+\newcommand{\Enedotar}{\@ifnextchar[{\basicEnedotar}{\basicEnedotar[133]}}%
+
+% basic east-north-east dotted arrow with lower name
+\def\basicenedotaR[#1]#2{\ENEDOTAR{}{#2}{#100}}%
+
+% east-north-east dotted arrow with lower name
+\newcommand{\enedotaR}{\@ifnextchar[{\basicenedotaR}{\basicenedotaR[133]}}%
+
+% basic east-north-east monomorphism
+\def\basicenemono[#1]{\ENEMONO{}{}{#100}}%
+
+% east-north-east monomorphism
+\newcommand{\enemono}{\@ifnextchar[{\basicenemono}{\basicenemono[133]}}%
+
+% basic east-north-east monomorphism with upper name
+\def\basicEnemono[#1]#2{\ENEMONO{#2}{}{#100}}%
+
+% east-north-east monomorphism with upper name
+\newcommand{\Enemono}{\@ifnextchar[{\basicEnemono}{\basicEnemono[133]}}%
+
+% basic east-north-east monomorphism with lower name
+\def\basicenemonO[#1]#2{\ENEMONO{}{#2}{#100}}%
+
+% east-north-east monomorphism with lower name
+\newcommand{\enemonO}{\@ifnextchar[{\basicenemonO}{\basicenemonO[133]}}%
+
+% basic east-north-east epimorphism
+\def\basiceneepi[#1]{\ENEEPI{}{}{#100}}%
+
+% east-north-east epimorphism
+\newcommand{\eneepi}{\@ifnextchar[{\basiceneepi}{\basiceneepi[133]}}%
+
+% basic east-north-east epimorphism with upper name
+\def\basicEneepi[#1]#2{\ENEEPI{#2}{}{#100}}%
+
+% east-north-east epimorphism with upper name
+\newcommand{\Eneepi}{\@ifnextchar[{\basicEneepi}{\basicEneepi[133]}}%
+
+% basic east-north-east epimorphism with lower name
+\def\basiceneepI[#1]#2{\ENEEPI{}{#2}{#100}}%
+
+% east-north-east epimorphism with lower name
+\newcommand{\eneepI}{\@ifnextchar[{\basiceneepI}{\basiceneepI[133]}}%
+
+% basic east-north-east bimorphism
+\def\basicenebimo[#1]{\ENEBIMO{}{}{#100}}%
+
+% east-north-east bimorphism
+\newcommand{\enebimo}{\@ifnextchar[{\basicenebimo}{\basicenebimo[133]}}%
+
+% basic east-north-east bimorphism with upper name
+\def\basicEnebimo[#1]#2{\ENEBIMO{#2}{}{#100}}%
+
+% east-north-east bimorphism with upper name
+\newcommand{\Enebimo}{\@ifnextchar[{\basicEnebimo}{\basicEnebimo[133]}}%
+
+% basic east-north-east bimorphism with lower name
+\def\basicenebimO[#1]#2{\ENEBIMO{}{#2}{#100}}%
+
+% east-north-east bimorphism with lower name
+\newcommand{\enebimO}{\@ifnextchar[{\basicenebimO}{\basicenebimO[133]}}%
+
+% basic east-north-east isomorphism
+\def\basiceneiso[#1]{\ENEAR{\cong}{}{#100}}%
+
+% east-north-east isomorphism
+\newcommand{\eneiso}{\@ifnextchar[{\basiceneiso}{\basiceneiso[133]}}%
+
+% basic east-north-east isomorphism with upper name
+\def\basicEneiso[#1]#2{\ENEAR{#2}{\cong}{#100}}%
+
+% east-north-east isomorphism with upper name
+\newcommand{\Eneiso}{\@ifnextchar[{\basicEneiso}{\basicEneiso[133]}}%
+
+% basic east-north-east isomorphism with lower name
+\def\basiceneisO[#1]#2{\ENEAR{\cong}{#2}{#100}}%
+
+% east-north-east isomorphism with lower name
+\newcommand{\eneisO}{\@ifnextchar[{\basiceneisO}{\basiceneisO[133]}}%
+
+% basic east-north-east equality
+\def\basiceneeql[#1]{\ENEEQL{}{}{#100}}%
+
+% east-north-east equality
+\newcommand{\eneeql}{\@ifnextchar[{\basiceneeql}{\basiceneeql[133]}}%
+
+% basic east-north-east equality with upper name
+\def\basicEneeql[#1]#2{\ENEEQL{#2}{}{#100}}%
+
+% east-north-east equality with upper name
+\newcommand{\Eneeql}{\@ifnextchar[{\basicEneeql}{\basicEneeql[133]}}%
+
+% basic east-north-east equality with lower name
+\def\basiceneeqL[#1]#2{\ENEEQL{}{#2}{#100}}%
+
+% east-north-east equality with lower name
+\newcommand{\eneeqL}{\@ifnextchar[{\basiceneeqL}{\basiceneeqL[133]}}%
+
+% basic east-north-east pair of arrows
+\def\basicenebiar[#1]{\ENEBIAR{}{}{#100}}%
+
+% east-north-east pair of arrows
+\newcommand{\enebiar}{\@ifnextchar[{\basicenebiar}{\basicenebiar[133]}}%
+
+% basic east-north-east pair of arrows with names
+\def\basicEnebiar[#1]#2#3{\ENEBIAR{#2}{#3}{#100}}%
+
+% east-north-east pair of arrows with names
+\newcommand{\Enebiar}{\@ifnextchar[{\basicEnebiar}{\basicEnebiar[133]}}%
+\let\enebiaR=\Enebiar
+
+% basic east-north-east pair of distributors
+\def\basicenebidist[#1]{\ENEBIDIST{}{}{#100}}%
+
+% east-north-east pair of distributors
+\newcommand{\enebidist}{\@ifnextchar[{\basicenebidist}{\basicenebidist[133]}}%
+
+% basic east-north-east pair of distributors with names
+\def\basicEnebidist[#1]#2#3{\ENEBIDIST{#2}{#3}{#100}}%
+
+% east-north-east pair of distributors with names
+\newcommand{\Enebidist}{\@ifnextchar[{\basicEnebidist}{\basicEnebidist[133]}}%
+\let\enebidisT=\Enebidist
+
+% basic east-north-east pair of adjoint arrows
+\def\basiceneadjar[#1]{\ENEADJAR{}{}{#100}}%
+
+% east-north-east pair of adjoint arrows
+\newcommand{\eneadjar}{\@ifnextchar[{\basiceneadjar}{\basiceneadjar[133]}}%
+
+% basic east-north-east pair of adjoint arrows with names
+\def\basicEneadjar[#1]#2#3{\ENEADJAR{#2}{#3}{#100}}%
+
+% east-north-east pair of adjoint arrows with names
+\newcommand{\Eneadjar}{\@ifnextchar[{\basicEneadjar}{\basicEneadjar[133]}}%
+\let\eneadjaR=\Eneadjar
+
+% basic east-north-east pair of adjoint distributors
+\def\basiceneadjdist[#1]{\ENEADJDIST{}{}{#100}}%
+
+% east-north-east pair of adjoint distributors
+\newcommand{\eneadjdist}{\@ifnextchar[{\basiceneadjdist}{\basiceneadjdist[133]}}%
+
+% basic east-north-east pair of adjoint distributors with names
+\def\basicEneadjdist[#1]#2#3{\ENEADJDIST{#2}{#3}{#100}}%
+
+% east-north-east pair of adjoint distributors with names
+\newcommand{\Eneadjdist}{\@ifnextchar[{\basicEneadjdist}{\basicEneadjdist[133]}}%
+\let\eneadjdisT=\Eneadjdist
+
+
+% EAST-SOUTH-EAST ARROWS
+
+% The following commands produce east-south-east arrows
+% of horizontal extent n units
+
+% \ESEAR{f}{g}{n} draws a east-south-east arrow with names f, g
+% and length n units
+\newcommand{\ESEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\line(2,-1){#3}}%
+\put(\Y,-\Z){\esehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEDIST{f}{g}{n} draws a east-south-east distributor
+% with names f, g and length n units
+\newcommand{\ESEDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\line(2,-1){#3}}%
+\put(\Y,-\Z){\esehead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\ESEDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Y,\Z)(\value{y},-\value{z}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Y,-\Z){\esehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEMONO{f}{g}{n} draws a east-south-east monomorphism
+% with names f,g and length n units
+\newcommand{\ESEMONO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,\secondmonolength){\line(2,-1){\bimolength}}%
+\put(-\monolength,\secondmonolength){\esehead}%
+\put(\Y,-\Z){\esehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEEPI{f}{g}{n} draws a east-south-east epimorphism
+% with names f, g and length n units
+\newcommand{\ESEEPI}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\line(2,-1){\bimolength}}%
+\put(\epilength,-\secondepilength){\esehead}%
+\put(\Y,-\Z){\esehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEBIMO{f}{g}{n} draws a east-south-east bimorphism
+% with names f,g and length n units
+\newcommand{\ESEBIMO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,\secondmonolength){\line(2,-1){\bimolength}}%
+\put(-\monolength,\secondmonolength){\esehead}%
+\put(\epilength,-\secondepilength){\esehead}%
+\put(\Y,-\Z){\esehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEEQL{f}{g}{n} draws a east-south-east equality
+% with names f,g and length n units
+\newcommand{\ESEEQL}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\begin{picture}(0,0)%
+\truex{44}\truey{89}%
+\put(-\value{x},-\value{y}){\line(2,-1){#3}}%
+\put(\value{x},\value{y}){\line(2,-1){#3}}%
+\end{picture}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEBIAR{f}{g}{n} draws a pair of east-south-east arrows
+% with names f,g and length n units
+\newcommand{\ESEBIAR}[3]{%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\put(-\value{x},-\value{y}){\line(2,-1){#3}}%
+\put(\value{x},\value{y}){\line(2,-1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\monolength,-\secondepilength){\esehead}%
+\put(\epilength,-\secondmonolength){\esehead}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEBIDIST{f}{g}{n} draws a pair of east-south-east distributors
+% with names f,g and length n units
+\newcommand{\ESEBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(-\Y,\Z){\begin{picture}(0,0)%
+\put(-\value{x},-\value{y}){\line(2,-1){#3}}%
+\put(\value{x},\value{y}){\line(2,-1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\monolength,-\secondepilength){\esehead}%
+\put(\epilength,-\secondmonolength){\esehead}%
+\end{picture}}
+\put(\value{x},\value{y}){\circle{\value{z}}}%
+\put(-\value{x},-\value{y}){\circle{\value{z}}}%
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEADJAR{f}{g}{n} draws a east-south-east pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\ESEADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\line(2,-1){#3}}%
+\put(\monolength,-\secondepilength){\esehead}%
+\put(\epilength,-\secondmonolength){\line(-2,1){#3}}%
+\put(\value{x},\value{y}){\wnwhead}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEADJDIST{f}{g}{n} draws a east-south-east pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\ESEADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(-\Y,\Z){\begin{picture}(0,0)%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\line(2,-1){#3}}%
+\put(\monolength,-\secondepilength){\esehead}%
+\put(\epilength,-\secondmonolength){\line(-2,1){#3}}%
+\put(\value{x},\value{y}){\wnwhead}%
+\end{picture}}
+\put(\value{x},\value{y}){\circle{\value{z}}}%
+\put(-\value{x},-\value{y}){\circle{\value{z}}}%
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce east-south-east arrows;
+% the default length is 13300 units
+
+% basic east-south-east arrow
+\def\basicesear[#1]{\ESEAR{}{}{#100}}%
+
+% east-south-east arrow
+\newcommand{\esear}{\@ifnextchar[{\basicesear}{\basicesear[133]}}%
+
+% basic east-south-east arrow with upper name
+\def\basicEsear[#1]#2{\ESEAR{#2}{}{#100}}%
+
+% east-south-east arrow with upper name
+\newcommand{\Esear}{\@ifnextchar[{\basicEsear}{\basicEsear[133]}}%
+
+% basic east-south-east arrow with lower name
+\def\basiceseaR[#1]#2{\ESEAR{}{#2}{#100}}%
+
+% east-south-east arrow with lower name
+\newcommand{\eseaR}{\@ifnextchar[{\basiceseaR}{\basiceseaR[133]}}%
+
+% basic east-south-east distributor
+\def\basicesedist[#1]{\ESEDIST{}{}{#100}}%
+
+% east-south-east distributor
+\newcommand{\esedist}{\@ifnextchar[{\basicesedist}{\basicesedist[133]}}%
+
+% basic east-south-east distributor with upper name
+\def\basicEsedist[#1]#2{\ESEDIST{#2}{}{#100}}%
+
+% east-south-east distributor with upper name
+\newcommand{\Esedist}{\@ifnextchar[{\basicEsedist}{\basicEsedist[133]}}%
+
+% basic east-south-east distributor with lower name
+\def\basicesedisT[#1]#2{\ESEDIST{}{#2}{#100}}%
+
+% east-south-east distributor with lower name
+\newcommand{\esedisT}{\@ifnextchar[{\basicesedisT}{\basicesedisT[133]}}%
+
+% basic east-south-east dotted arrow
+\def\basicesedotar[#1]{\ESEDOTAR{}{}{#100}}%
+
+% east-south-east dotted arrow
+\newcommand{\esedotar}{\@ifnextchar[{\basicesedotar}{\basicesedotar[133]}}%
+
+% basic east-south-east dotted arrow with upper name
+\def\basicEsedotar[#1]#2{\ESEDOTAR{#2}{}{#100}}%
+
+% east-south-east dotted arrow with upper name
+\newcommand{\Esedotar}{\@ifnextchar[{\basicEsedotar}{\basicEsedotar[133]}}%
+
+% basic east-south-east dotted arrow with lower name
+\def\basicesedotaR[#1]#2{\ESEDOTAR{}{#2}{#100}}%
+
+% east-south-east dotted arrow with lower name
+\newcommand{\esedotaR}{\@ifnextchar[{\basicesedotaR}{\basicesedotaR[133]}}%
+
+% basic east-south-east monomorphism
+\def\basicesemono[#1]{\ESEMONO{}{}{#100}}%
+
+% east-south-east monomorphism
+\newcommand{\esemono}{\@ifnextchar[{\basicesemono}{\basicesemono[133]}}%
+
+% basic east-south-east monomorphism with upper name
+\def\basicEsemono[#1]#2{\ESEMONO{#2}{}{#100}}%
+
+% east-south-east monomorphism with upper name
+\newcommand{\Esemono}{\@ifnextchar[{\basicEsemono}{\basicEsemono[133]}}%
+
+% basic east-south-east monomorphism with lower name
+\def\basicesemonO[#1]#2{\ESEMONO{}{#2}{#100}}%
+
+% east-south-east monomorphism with lower name
+\newcommand{\esemonO}{\@ifnextchar[{\basicesemonO}{\basicesemonO[133]}}%
+
+% basic east-south-east epimorphism
+\def\basiceseepi[#1]{\ESEEPI{}{}{#100}}%
+
+% east-south-east epimorphism
+\newcommand{\eseepi}{\@ifnextchar[{\basiceseepi}{\basiceseepi[133]}}%
+
+% basic east-south-east epimorphism with upper name
+\def\basicEseepi[#1]#2{\ESEEPI{#2}{}{#100}}%
+
+% east-south-east epimorphism with upper name
+\newcommand{\Eseepi}{\@ifnextchar[{\basicEseepi}{\basicEseepi[133]}}%
+
+% basic east-south-east epimorphism with lower name
+\def\basiceseepI[#1]#2{\ESEEPI{}{#2}{#100}}%
+
+% east-south-east epimorphism with lower name
+\newcommand{\eseepI}{\@ifnextchar[{\basiceseepI}{\basiceseepI[133]}}%
+
+% basic east-south-east bimorphism
+\def\basicesebimo[#1]{\ESEBIMO{}{}{#100}}%
+
+% east-south-east bimorphism
+\newcommand{\esebimo}{\@ifnextchar[{\basicesebimo}{\basicesebimo[133]}}%
+
+% basic east-south-east bimorphism with upper name
+\def\basicEsebimo[#1]#2{\ESEBIMO{#2}{}{#100}}%
+
+% east-south-east bimorphism with upper name
+\newcommand{\Esebimo}{\@ifnextchar[{\basicEsebimo}{\basicEsebimo[133]}}%
+
+% basic east-south-east bimorphism with lower name
+\def\basicesebimO[#1]#2{\ESEBIMO{}{#2}{#100}}%
+
+% east-south-east bimorphism with lower name
+\newcommand{\esebimO}{\@ifnextchar[{\basicesebimO}{\basicesebimO[133]}}%
+
+% basic east-south-east isomorphism
+\def\basiceseiso[#1]{\ESEAR{\cong}{}{#100}}%
+
+% east-south-east isomorphism
+\newcommand{\eseiso}{\@ifnextchar[{\basiceseiso}{\basiceseiso[133]}}%
+
+% basic east-south-east isomorphism with upper name
+\def\basicEseiso[#1]#2{\ESEAR{#2}{\cong}{#100}}%
+
+% east-south-east isomorphism with upper name
+\newcommand{\Eseiso}{\@ifnextchar[{\basicEseiso}{\basicEseiso[133]}}%
+
+% basic east-south-east isomorphism with lower name
+\def\basiceseisO[#1]#2{\ESEAR{\cong}{#2}{#100}}%
+
+% east-south-east isomorphism with lower name
+\newcommand{\eseisO}{\@ifnextchar[{\basiceseisO}{\basiceseisO[133]}}%
+
+% basic east-south-east equality
+\def\basiceseeql[#1]{\ESEEQL{}{}{#100}}%
+
+% east-south-east equality
+\newcommand{\eseeql}{\@ifnextchar[{\basiceseeql}{\basiceseeql[133]}}%
+
+% basic east-south-east equality with upper name
+\def\basicEseeql[#1]#2{\ESEEQL{#2}{}{#100}}%
+
+% east-south-east equality with upper name
+\newcommand{\Eseeql}{\@ifnextchar[{\basicEseeql}{\basicEseeql[133]}}%
+
+% basic east-south-east equality with lower name
+\def\basiceseeqL[#1]#2{\ESEEQL{}{#2}{#100}}%
+
+% east-south-east equality with lower name
+\newcommand{\eseeqL}{\@ifnextchar[{\basiceseeqL}{\basiceseeqL[133]}}%
+
+% basic east-south-east pair of arrows
+\def\basicesebiar[#1]{\ESEBIAR{}{}{#100}}%
+
+% east-south-east pair of arrows
+\newcommand{\esebiar}{\@ifnextchar[{\basicesebiar}{\basicesebiar[133]}}%
+
+% basic east-south-east pair of arrows with names
+\def\basicEsebiar[#1]#2#3{\ESEBIAR{#2}{#3}{#100}}%
+
+% east-south-east pair of arrows with names
+\newcommand{\Esebiar}{\@ifnextchar[{\basicEsebiar}{\basicEsebiar[133]}}%
+\let\esebiaR=\Esebiar
+
+% basic east-south-east pair of distributors
+\def\basicesebidist[#1]{\ESEBIDIST{}{}{#100}}%
+
+% east-south-east pair of distributors
+\newcommand{\esebidist}{\@ifnextchar[{\basicesebidist}{\basicesebidist[133]}}%
+
+% basic east-south-east pair of distributors with names
+\def\basicEsebidist[#1]#2#3{\ESEBIDIST{#2}{#3}{#100}}%
+
+% east-south-east pair of distributors with names
+\newcommand{\Esebidist}{\@ifnextchar[{\basicEsebidist}{\basicEsebidist[133]}}%
+\let\esebidisT=\Esebidist
+
+% basic east-south-east pair of adjoint arrows
+\def\basiceseadjar[#1]{\ESEADJAR{}{}{#100}}%
+
+% east-south-east pair of adjoint arrows
+\newcommand{\eseadjar}{\@ifnextchar[{\basiceseadjar}{\basiceseadjar[133]}}%
+
+% basic east-south-east pair of adjoint arrows with names
+\def\basicEseadjar[#1]#2#3{\ESEADJAR{#2}{#3}{#100}}%
+
+% east-south-east pair of adjoint arrows with names
+\newcommand{\Eseadjar}{\@ifnextchar[{\basicEseadjar}{\basicEseadjar[133]}}%
+\let\eseadjaR=\Eseadjar
+
+% basic east-south-east pair of adjoint distributors
+\def\basiceseadjdist[#1]{\ESEADJDIST{}{}{#100}}%
+
+% east-south-east pair of adjoint distributors
+\newcommand{\eseadjdist}{\@ifnextchar[{\basiceseadjdist}{\basiceseadjdist[133]}}%
+
+% basic east-south-east pair of adjoint distributors with names
+\def\basicEseadjdist[#1]#2#3{\ESEADJDIST{#2}{#3}{#100}}%
+
+% east-south-east pair of adjoint distributors with names
+\newcommand{\Eseadjdist}{\@ifnextchar[{\basicEseadjdist}{\basicEseadjdist[133]}}%
+\let\eseadjdisT=\Eseadjdist
+
+% WEST-SOUTH-WEST ARROWS
+
+% The following commands produce west-south-west arrows
+% of horizontal extent n units
+
+% \WSWAR{f}{g}{n} draws a west-south-west arrow with names f, g
+% and length n units
+\newcommand{\WSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\line(-2,-1){#3}}%
+\put(-\Y,-\Z){\wswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWDIST{f}{g}{n} draws a west-south-west distributor
+% with names f, g and length n units
+\newcommand{\WSWDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\line(-2,-1){#3}}%
+\put(-\Y,-\Z){\wswhead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\WSWDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Y,\Z)(-\value{y},-\value{z}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Y,-\Z){\wswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWMONO{f}{g}{n} draws a west-south-west monomorphism
+% with names f,g and length n units
+\newcommand{\WSWMONO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,\secondmonolength){\line(-2,-1){\bimolength}}%
+\put(\monolength,\secondmonolength){\wswhead}%
+\put(-\Y,-\Z){\wswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWEPI{f}{g}{n} draws a west-south-west epimorphism
+% with names f, g and length n units
+\newcommand{\WSWEPI}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\line(-2,-1){\bimolength}}%
+\put(-\epilength,-\secondepilength){\wswhead}%
+\put(-\Y,-\Z){\wswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWBIMO{f}{g}{n} draws a west-south-west bimorphism
+% with names f,g and length n units
+\newcommand{\WSWBIMO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,\secondmonolength){\line(-2,-1){\bimolength}}%
+\put(\monolength,\secondmonolength){\wswhead}%
+\put(-\epilength,-\secondepilength){\wswhead}%
+\put(-\Y,-\Z){\wswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWBIAR{f}{g}{n} draws a pair of west-south-west arrows
+% with names f,g and length n units
+\newcommand{\WSWBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\put(-\value{x},\value{y}){\line(-2,-1){#3}}%
+\put(\value{x},-\value{y}){\line(-2,-1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\monolength,-\secondepilength){\wswhead}%
+\put(-\epilength,-\secondmonolength){\wswhead}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWBIDIST{f}{g}{n} draws a pair of west-south-west distributors
+% with names f,g and length n units
+\newcommand{\WSWBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(\Y,\Z){\begin{picture}(0,0)%
+\put(-\value{x},\value{y}){\line(-2,-1){#3}}%
+\put(\value{x},-\value{y}){\line(-2,-1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\monolength,-\secondepilength){\wswhead}%
+\put(-\epilength,-\secondmonolength){\wswhead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\circle{\value{z}}}%
+\put(\value{x},-\value{y}){\circle{\value{z}}}%
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWADJAR{f}{g}{n} draws a west-south-west pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\WSWADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\line(-2,-1){#3}}%
+\put(-\monolength,-\secondepilength){\wswhead}%
+\put(-\epilength,-\secondmonolength){\line(2,1){#3}}%
+\put(-\value{x},\value{y}){\enehead}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWADJDIST{f}{g}{n} draws a west-south-west pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\WSWADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(\Y,\Z){\begin{picture}(0,0)%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\line(-2,-1){#3}}%
+\put(-\monolength,-\secondepilength){\wswhead}%
+\put(-\epilength,-\secondmonolength){\line(2,1){#3}}%
+\put(-\value{x},\value{y}){\enehead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\circle{\value{z}}}%
+\put(\value{x},-\value{y}){\circle{\value{z}}}%
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce west-south-west arrows;
+% the default length is 13300 units
+
+% basic west-south-west arrow
+\def\basicwswar[#1]{\WSWAR{}{}{#100}}%
+
+% west-south-west arrow
+\newcommand{\wswar}{\@ifnextchar[{\basicwswar}{\basicwswar[133]}}%
+
+% basic west-south-west arrow with upper name
+\def\basicWswar[#1]#2{\WSWAR{#2}{}{#100}}%
+
+% west-south-west arrow with upper name
+\newcommand{\Wswar}{\@ifnextchar[{\basicWswar}{\basicWswar[133]}}%
+
+% basic west-south-west arrow with lower name
+\def\basicwswaR[#1]#2{\WSWAR{}{#2}{#100}}%
+
+% west-south-west arrow with lower name
+\newcommand{\wswaR}{\@ifnextchar[{\basicwswaR}{\basicwswaR[133]}}%
+
+% basic west-south-west distributor
+\def\basicwswdist[#1]{\WSWDIST{}{}{#100}}%
+
+% west-south-west distributor
+\newcommand{\wswdist}{\@ifnextchar[{\basicwswdist}{\basicwswdist[133]}}%
+
+% basic west-south-west distributor with upper name
+\def\basicWswdist[#1]#2{\WSWDIST{#2}{}{#100}}%
+
+% west-south-west distributor with upper name
+\newcommand{\Wswdist}{\@ifnextchar[{\basicWswdist}{\basicWswdist[133]}}%
+
+% basic west-south-west distributor with lower name
+\def\basicwswdisT[#1]#2{\WSWDIST{}{#2}{#100}}%
+
+% west-south-west distributor with lower name
+\newcommand{\wswdisT}{\@ifnextchar[{\basicwswdisT}{\basicwswdisT[133]}}%
+
+% basic west-south-west dotted arrow
+\def\basicwswdotar[#1]{\WSWDOTAR{}{}{#100}}%
+
+% west-south-west dotted arrow
+\newcommand{\wswdotar}{\@ifnextchar[{\basicwswdotar}{\basicwswdotar[133]}}%
+
+% basic west-south-west dotted arrow with upper name
+\def\basicWswdotar[#1]#2{\WSWDOTAR{#2}{}{#100}}%
+
+% west-south-west dotted arrow with upper name
+\newcommand{\Wswdotar}{\@ifnextchar[{\basicWswdotar}{\basicWswdotar[133]}}%
+
+% basic west-south-west dotted arrow with lower name
+\def\basicwswdotaR[#1]#2{\WSWDOTAR{}{#2}{#100}}%
+
+% west-south-west dotted arrow with lower name
+\newcommand{\wswdotaR}{\@ifnextchar[{\basicwswdotaR}{\basicwswdotaR[133]}}%
+
+% basic west-south-west monomorphism
+\def\basicwswmono[#1]{\WSWMONO{}{}{#100}}%
+
+% west-south-west monomorphism
+\newcommand{\wswmono}{\@ifnextchar[{\basicwswmono}{\basicwswmono[133]}}%
+
+% basic west-south-west monomorphism with upper name
+\def\basicWswmono[#1]#2{\WSWMONO{#2}{}{#100}}%
+
+% west-south-west monomorphism with upper name
+\newcommand{\Wswmono}{\@ifnextchar[{\basicWswmono}{\basicWswmono[133]}}%
+
+% basic west-south-west monomorphism with lower name
+\def\basicwswmonO[#1]#2{\WSWMONO{}{#2}{#100}}%
+
+% west-south-west monomorphism with lower name
+\newcommand{\wswmonO}{\@ifnextchar[{\basicwswmonO}{\basicwswmonO[133]}}%
+
+% basic west-south-west epimorphism
+\def\basicwswepi[#1]{\WSWEPI{}{}{#100}}%
+
+% west-south-west epimorphism
+\newcommand{\wswepi}{\@ifnextchar[{\basicwswepi}{\basicwswepi[133]}}%
+
+% basic west-south-west epimorphism with upper name
+\def\basicWswepi[#1]#2{\WSWEPI{#2}{}{#100}}%
+
+% west-south-west epimorphism with upper name
+\newcommand{\Wswepi}{\@ifnextchar[{\basicWswepi}{\basicWswepi[133]}}%
+
+% basic west-south-west epimorphism with lower name
+\def\basicwswepI[#1]#2{\WSWEPI{}{#2}{#100}}%
+
+% west-south-west epimorphism with lower name
+\newcommand{\wswepI}{\@ifnextchar[{\basicwswepI}{\basicwswepI[133]}}%
+
+% basic west-south-west bimorphism
+\def\basicwswbimo[#1]{\WSWBIMO{}{}{#100}}%
+
+% west-south-west bimorphism
+\newcommand{\wswbimo}{\@ifnextchar[{\basicwswbimo}{\basicwswbimo[133]}}%
+
+% basic west-south-west bimorphism with upper name
+\def\basicWswbimo[#1]#2{\WSWBIMO{#2}{}{#100}}%
+
+% west-south-west bimorphism with upper name
+\newcommand{\Wswbimo}{\@ifnextchar[{\basicWswbimo}{\basicWswbimo[133]}}%
+
+% basic west-south-west bimorphism with lower name
+\def\basicwswbimO[#1]#2{\WSWBIMO{}{#2}{#100}}%
+
+% west-south-west bimorphism with lower name
+\newcommand{\wswbimO}{\@ifnextchar[{\basicwswbimO}{\basicwswbimO[133]}}%
+
+% basic west-south-west isomorphism
+\def\basicwswiso[#1]{\WSWAR{\cong}{}{#100}}%
+
+% west-south-west isomorphism
+\newcommand{\wswiso}{\@ifnextchar[{\basicwswiso}{\basicwswiso[133]}}%
+
+% basic west-south-west isomorphism with upper name
+\def\basicWswiso[#1]#2{\WSWAR{#2}{\cong}{#100}}%
+
+% west-south-west isomorphism with upper name
+\newcommand{\Wswiso}{\@ifnextchar[{\basicWswiso}{\basicWswiso[133]}}%
+
+% basic west-south-west isomorphism with lower name
+\def\basicwswisO[#1]#2{\WSWAR{\cong}{#2}{#100}}%
+
+% west-south-west isomorphism with lower name
+\newcommand{\wswisO}{\@ifnextchar[{\basicwswisO}{\basicwswisO[133]}}%
+
+% west-south-west equality
+\let\wsweql=\eneeql%
+
+% west-south-west equality with upper name
+\let\Wsweql=\Eneeql%
+
+% west-south-west equality with lower name
+\let\wsweqL=\eneeqL%
+
+% basic west-south-west pair of arrows
+\def\basicwswbiar[#1]{\WSWBIAR{}{}{#100}}%
+
+% west-south-west pair of arrows
+\newcommand{\wswbiar}{\@ifnextchar[{\basicwswbiar}{\basicwswbiar[133]}}%
+
+% basic west-south-west pair of arrows with names
+\def\basicWswbiar[#1]#2#3{\WSWBIAR{#2}{#3}{#100}}%
+
+% west-south-west pair of arrows with names
+\newcommand{\Wswbiar}{\@ifnextchar[{\basicWswbiar}{\basicWswbiar[133]}}%
+\let\wswbiaR=\Wswbiar
+
+% basic west-south-west pair of distributors
+\def\basicwswbidist[#1]{\WSWBIDIST{}{}{#100}}%
+
+% west-south-west pair of distributors
+\newcommand{\wswbidist}{\@ifnextchar[{\basicwswbidist}{\basicwswbidist[133]}}%
+
+% basic west-south-west pair of distributors with names
+\def\basicWswbidist[#1]#2#3{\WSWBIDIST{#2}{#3}{#100}}%
+
+% west-south-west pair of distributors with names
+\newcommand{\Wswbidist}{\@ifnextchar[{\basicWswbidist}{\basicWswbidist[133]}}%
+\let\wswbidisT=\Wswbidist
+
+% basic west-south-west pair of adjoint arrows
+\def\basicwswadjar[#1]{\WSWADJAR{}{}{#100}}%
+
+% west-south-west pair of adjoint arrows
+\newcommand{\wswadjar}{\@ifnextchar[{\basicwswadjar}{\basicwswadjar[133]}}%
+
+% basic west-south-west pair of adjoint arrows with names
+\def\basicWswadjar[#1]#2#3{\WSWADJAR{#2}{#3}{#100}}%
+
+% west-south-west pair of adjoint arrows with names
+\newcommand{\Wswadjar}{\@ifnextchar[{\basicWswadjar}{\basicWswadjar[133]}}%
+\let\wswadjaR=\Wswadjar
+
+% basic west-south-west pair of adjoint distributors
+\def\basicwswadjdist[#1]{\WSWADJDIST{}{}{#100}}%
+
+% west-south-west pair of adjoint distributors
+\newcommand{\wswadjdist}{\@ifnextchar[{\basicwswadjdist}{\basicwswadjdist[133]}}%
+
+% basic west-south-west pair of adjoint distributors with names
+\def\basicWswadjdist[#1]#2#3{\WSWADJDIST{#2}{#3}{#100}}%
+
+% west-south-west pair of adjoint distributors with names
+\newcommand{\Wswadjdist}{\@ifnextchar[{\basicWswadjdist}{\basicWswadjdist[133]}}%
+\let\wswadjdisT=\Wswadjdist
+
+
+% WEST-NORTH-WEST ARROWS
+
+% The following commands produce west-north-west arrows
+% of horizontal extent n units
+
+% \WNWAR{f}{g}{n} draws a west-north-west arrow with names f, g
+% and length n units
+\newcommand{\WNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\line(-2,1){#3}}%
+\put(-\Y,\Z){\wnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWDIST{f}{g}{n} draws a west-north-west distributor
+% with names f, g and length n units
+\newcommand{\WNWDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\line(-2,1){#3}}%
+\put(-\Y,\Z){\wnwhead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\WNWDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Y,-\Z)(-\value{y},\value{z}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Y,\Z){\wnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWMONO{f}{g}{n} draws a west-north-west monomorphism
+% with names f,g and length n units
+\newcommand{\WNWMONO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,-\secondmonolength){\line(-2,1){\bimolength}}%
+\put(\monolength,-\secondmonolength){\wnwhead}%
+\put(-\Y,\Z){\wnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWEPI{f}{g}{n} draws a west-north-west epimorphism
+% with names f, g and length n units
+\newcommand{\WNWEPI}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\line(-2,1){\bimolength}}%
+\put(-\epilength,\secondepilength){\wnwhead}%
+\put(-\Y,\Z){\wnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWBIMO{f}{g}{n} draws a west-north-west bimorphism
+% with names f,g and length n units
+\newcommand{\WNWBIMO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,-\secondmonolength){\line(-2,1){\bimolength}}%
+\put(\monolength,-\secondmonolength){\wnwhead}%
+\put(-\epilength,\secondepilength){\wnwhead}%
+\put(-\Y,\Z){\wnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWBIAR{f}{g}{n} draws a pair of west-north-west arrows
+% with names f,g and length n units
+\newcommand{\WNWBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\put(-\value{x},-\value{y}){\line(-2,1){#3}}%
+\put(\value{x},\value{y}){\line(-2,1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\monolength,\secondepilength){\wnwhead}%
+\put(-\epilength,\secondmonolength){\wnwhead}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWBIDIST{f}{g}{n} draws a pair of west-north-west distributors
+% with names f,g and length n units
+\newcommand{\WNWBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(\Y,-\Z){\begin{picture}(0,0)%
+\put(-\value{x},-\value{y}){\line(-2,1){#3}}%
+\put(\value{x},\value{y}){\line(-2,1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\monolength,\secondepilength){\wnwhead}%
+\put(-\epilength,\secondmonolength){\wnwhead}%
+\end{picture}}
+\put(\value{x},\value{y}){\circle{\value{z}}}%
+\put(-\value{x},-\value{y}){\circle{\value{z}}}%
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWADJAR{f}{g}{n} draws a west-north-west pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\WNWADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\line(-2,1){#3}}%
+\put(-\epilength,\secondmonolength){\wnwhead}%
+\put(-\monolength,\secondepilength){\line(2,-1){#3}}%
+\put(\value{x},\value{y}){\esehead}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWADJDIST{f}{g}{n} draws a west-north-west pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\WNWADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(\Y,-\Z){\begin{picture}(0,0)%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\line(-2,1){#3}}%
+\put(-\epilength,\secondmonolength){\wnwhead}%
+\put(-\monolength,\secondepilength){\line(2,-1){#3}}%
+\put(\value{x},\value{y}){\esehead}%
+\end{picture}}
+\put(\value{x},\value{y}){\circle{\value{z}}}%
+\put(-\value{x},-\value{y}){\circle{\value{z}}}%
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce west-north-west arrows;
+% the default length is 13300 units
+
+% basic west-north-west arrow
+\def\basicwnwar[#1]{\WNWAR{}{}{#100}}%
+
+% west-north-west arrow
+\newcommand{\wnwar}{\@ifnextchar[{\basicwnwar}{\basicwnwar[133]}}%
+
+% basic west-north-west arrow with upper name
+\def\basicWnwar[#1]#2{\WNWAR{#2}{}{#100}}%
+
+% west-north-west arrow with upper name
+\newcommand{\Wnwar}{\@ifnextchar[{\basicWnwar}{\basicWnwar[133]}}%
+
+% basic west-north-west arrow with lower name
+\def\basicwnwaR[#1]#2{\WNWAR{}{#2}{#100}}%
+
+% west-north-west arrow with lower name
+\newcommand{\wnwaR}{\@ifnextchar[{\basicwnwaR}{\basicwnwaR[133]}}%
+
+% basic west-north-west distributor
+\def\basicwnwdist[#1]{\WNWDIST{}{}{#100}}%
+
+% west-north-west distributor
+\newcommand{\wnwdist}{\@ifnextchar[{\basicwnwdist}{\basicwnwdist[133]}}%
+
+% basic west-north-west distributor with upper name
+\def\basicWnwdist[#1]#2{\WNWDIST{#2}{}{#100}}%
+
+% west-north-west distributor with upper name
+\newcommand{\Wnwdist}{\@ifnextchar[{\basicWnwdist}{\basicWnwdist[133]}}%
+
+% basic west-north-west distributor with lower name
+\def\basicwnwdisT[#1]#2{\WNWDIST{}{#2}{#100}}%
+
+% west-north-west distributor with lower name
+\newcommand{\wnwdisT}{\@ifnextchar[{\basicwnwdisT}{\basicwnwdisT[133]}}%
+
+% basic west-north-west dotted arrow
+\def\basicwnwdotar[#1]{\WNWDOTAR{}{}{#100}}%
+
+% west-north-west dotted arrow
+\newcommand{\wnwdotar}{\@ifnextchar[{\basicwnwdotar}{\basicwnwdotar[133]}}%
+
+% basic west-north-west dotted arrow with upper name
+\def\basicWnwdotar[#1]#2{\WNWDOTAR{#2}{}{#100}}%
+
+% west-north-west dotted arrow with upper name
+\newcommand{\Wnwdotar}{\@ifnextchar[{\basicWnwdotar}{\basicWnwdotar[133]}}%
+
+% basic west-north-west dotted arrow with lower name
+\def\basicwnwdotaR[#1]#2{\WNWDOTAR{}{#2}{#100}}%
+
+% west-north-west dotted arrow with lower name
+\newcommand{\wnwdotaR}{\@ifnextchar[{\basicwnwdotaR}{\basicwnwdotaR[133]}}%
+
+% basic west-north-west monomorphism
+\def\basicwnwmono[#1]{\WNWMONO{}{}{#100}}%
+
+% west-north-west monomorphism
+\newcommand{\wnwmono}{\@ifnextchar[{\basicwnwmono}{\basicwnwmono[133]}}%
+
+% basic west-north-west monomorphism with upper name
+\def\basicWnwmono[#1]#2{\WNWMONO{#2}{}{#100}}%
+
+% west-north-west monomorphism with upper name
+\newcommand{\Wnwmono}{\@ifnextchar[{\basicWnwmono}{\basicWnwmono[133]}}%
+
+% basic west-north-west monomorphism with lower name
+\def\basicwnwmonO[#1]#2{\WNWMONO{}{#2}{#100}}%
+
+% west-north-west monomorphism with lower name
+\newcommand{\wnwmonO}{\@ifnextchar[{\basicwnwmonO}{\basicwnwmonO[133]}}%
+
+% basic west-north-west epimorphism
+\def\basicwnwepi[#1]{\WNWEPI{}{}{#100}}%
+
+% west-north-west epimorphism
+\newcommand{\wnwepi}{\@ifnextchar[{\basicwnwepi}{\basicwnwepi[133]}}%
+
+% basic west-north-west epimorphism with upper name
+\def\basicWnwepi[#1]#2{\WNWEPI{#2}{}{#100}}%
+
+% west-north-west epimorphism with upper name
+\newcommand{\Wnwepi}{\@ifnextchar[{\basicWnwepi}{\basicWnwepi[133]}}%
+
+% basic west-north-west epimorphism with lower name
+\def\basicwnwepI[#1]#2{\WNWEPI{}{#2}{#100}}%
+
+% west-north-west epimorphism with lower name
+\newcommand{\wnwepI}{\@ifnextchar[{\basicwnwepI}{\basicwnwepI[133]}}%
+
+% basic west-north-west bimorphism
+\def\basicwnwbimo[#1]{\WNWBIMO{}{}{#100}}%
+
+% west-north-west bimorphism
+\newcommand{\wnwbimo}{\@ifnextchar[{\basicwnwbimo}{\basicwnwbimo[133]}}%
+
+% basic west-north-west bimorphism with upper name
+\def\basicWnwbimo[#1]#2{\WNWBIMO{#2}{}{#100}}%
+
+% west-north-west bimorphism with upper name
+\newcommand{\Wnwbimo}{\@ifnextchar[{\basicWnwbimo}{\basicWnwbimo[133]}}%
+
+% basic west-north-west bimorphism with lower name
+\def\basicwnwbimO[#1]#2{\WNWBIMO{}{#2}{#100}}%
+
+% west-north-west bimorphism with lower name
+\newcommand{\wnwbimO}{\@ifnextchar[{\basicwnwbimO}{\basicwnwbimO[133]}}%
+
+% basic west-north-west isomorphism
+\def\basicwnwiso[#1]{\WNWAR{\cong}{}{#100}}%
+
+% west-north-west isomorphism
+\newcommand{\wnwiso}{\@ifnextchar[{\basicwnwiso}{\basicwnwiso[133]}}%
+
+% basic west-north-west isomorphism with upper name
+\def\basicWnwiso[#1]#2{\WNWAR{#2}{\cong}{#100}}%
+
+% west-north-west isomorphism with upper name
+\newcommand{\Wnwiso}{\@ifnextchar[{\basicWnwiso}{\basicWnwiso[133]}}%
+
+% basic west-north-west isomorphism with lower name
+\def\basicwnwisO[#1]#2{\WNWAR{\cong}{#2}{#100}}%
+
+% west-north-west isomorphism with lower name
+\newcommand{\wnwisO}{\@ifnextchar[{\basicwnwisO}{\basicwnwisO[133]}}%
+
+% west-north-west equality
+\let\wnweql=\eseeql%
+
+% west-north-west equality with upper name
+\let\Wnweql=\Eseeql%
+
+% west-north-west equality with lower name
+\let\wnweqL=\eseeqL%
+
+% basic west-north-west pair of arrows
+\def\basicwnwbiar[#1]{\WNWBIAR{}{}{#100}}%
+
+% west-north-west pair of arrows
+\newcommand{\wnwbiar}{\@ifnextchar[{\basicwnwbiar}{\basicwnwbiar[133]}}%
+
+% basic west-north-west pair of arrows with names
+\def\basicWnwbiar[#1]#2#3{\WNWBIAR{#2}{#3}{#100}}%
+
+% west-north-west pair of arrows with names
+\newcommand{\Wnwbiar}{\@ifnextchar[{\basicWnwbiar}{\basicWnwbiar[133]}}%
+\let\wnwbiaR=\Wnwbiar
+
+% basic west-north-west pair of distributors
+\def\basicwnwbidist[#1]{\WNWBIDIST{}{}{#100}}%
+
+% west-north-west pair of distributors
+\newcommand{\wnwbidist}{\@ifnextchar[{\basicwnwbidist}{\basicwnwbidist[133]}}%
+
+% basic west-north-west pair of distributors with names
+\def\basicWnwbidist[#1]#2#3{\WNWBIDIST{#2}{#3}{#100}}%
+
+% west-north-west pair of distributors with names
+\newcommand{\Wnwbidist}{\@ifnextchar[{\basicWnwbidist}{\basicWnwbidist[133]}}%
+\let\wnwbidisT=\Wnwbidist
+
+% basic west-north-west pair of adjoint arrows
+\def\basicwnwadjar[#1]{\WNWADJAR{}{}{#100}}%
+
+% west-north-west pair of adjoint arrows
+\newcommand{\wnwadjar}{\@ifnextchar[{\basicwnwadjar}{\basicwnwadjar[133]}}%
+
+% basic west-north-west pair of adjoint arrows with names
+\def\basicWnwadjar[#1]#2#3{\WNWADJAR{#2}{#3}{#100}}%
+
+% west-north-west pair of adjoint arrows with names
+\newcommand{\Wnwadjar}{\@ifnextchar[{\basicWnwadjar}{\basicWnwadjar[133]}}%
+\let\wnwadjaR=\Wnwadjar
+
+% basic west-north-west pair of adjoint distributors
+\def\basicwnwadjdist[#1]{\WNWADJDIST{}{}{#100}}%
+
+% west-north-west pair of adjoint distributors
+\newcommand{\wnwadjdist}{\@ifnextchar[{\basicwnwadjdist}{\basicwnwadjdist[133]}}%
+
+% basic west-north-west pair of adjoint distributors with names
+\def\basicWnwadjdist[#1]#2#3{\WNWADJDIST{#2}{#3}{#100}}%
+
+% west-north-west pair of adjoint distributors with names
+\newcommand{\Wnwadjdist}{\@ifnextchar[{\basicWnwadjdist}{\basicWnwadjdist[133]}}%
+\let\wnwadjdisT=\Wnwadjdist
+
+
+% NORTH-NORTH-EAST ARROWS
+
+% The following commands produce north-north-east arrows
+% of horizontal extent n units
+
+% \NNEAR{f}{g}{n} draws a north-north-east arrow with names f, g
+% and length n units
+\newcommand{\NNEAR}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,-#3){\line(1,2){#3}}%
+\put(\Z,#3){\nnehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEDIST{f}{g}{n} draws a north-north-east distributor
+% with names f, g and length n units
+\newcommand{\NNEDIST}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,-#3){\line(1,2){#3}}%
+\put(\Z,#3){\nnehead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\NNEDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Z=#3%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{z}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Z,-#3)(\value{z},\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Z,#3){\nnehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEMONO{f}{g}{n} draws a north-north-east monomorphism
+% with names f,g and length n units
+\newcommand{\NNEMONO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,-\secondmonolength){\line(1,2){\bimolength}}%
+\put(-\monolength,-\secondmonolength){\nnehead}%
+\put(\Z,#3){\nnehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEEPI{f}{g}{n} draws a north-north-east epimorphism
+% with names f, g and length n units
+\newcommand{\NNEEPI}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\Z%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\Z,-#3){\line(1,2){\bimolength}}%
+\put(\epilength,\secondepilength){\nnehead}%
+\put(\Z,#3){\nnehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEBIMO{f}{g}{n} draws a north-north-east bimorphism
+% with names f,g and length n units
+\newcommand{\NNEBIMO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,-\secondmonolength){\line(1,2){\bimolength}}%
+\put(-\monolength,-\secondmonolength){\nnehead}%
+\put(\epilength,\secondepilength){\nnehead}%
+\put(\Z,#3){\nnehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEEQL{f}{g}{n} draws a north-north-east equality
+% with names f,g and length n units
+\newcommand{\NNEEQL}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,-#3){\begin{picture}(0,0)%
+\truex{44}\truey{89}%
+\put(-\value{y},\value{x}){\line(1,2){#3}}%
+\put(\value{y},-\value{x}){\line(1,2){#3}}%
+\end{picture}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEBIAR{f}{g}{n} draws a pair of north-north-east arrows
+% with names f,g and length n units
+\newcommand{\NNEBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\put(-\value{x},\value{y}){\line(1,2){#3}}%
+\put(\value{x},-\value{y}){\line(1,2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\monolength,\secondepilength){\nnehead}%
+\put(\epilength,\secondmonolength){\nnehead}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEBIDIST{f}{g}{n} draws a pair of north-north-east distributors
+% with names f,g and length n units
+\newcommand{\NNEBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(-\Y,-#3){\begin{picture}(0,0)%
+\put(-\value{x},\value{y}){\line(1,2){#3}}%
+\put(\value{x},-\value{y}){\line(1,2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\monolength,\secondepilength){\nnehead}%
+\put(\epilength,\secondmonolength){\nnehead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\circle{\value{z}}}%
+\put(\value{x},-\value{y}){\circle{\value{z}}}%
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEADJAR{f}{g}{n} draws a north-north-east pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\NNEADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\line(1,2){#3}}%
+\put(\epilength,\secondmonolength){\nnehead}%
+\put(\monolength,\secondepilength){\line(-1,-2){#3}}%
+\put(-\value{x},\value{y}){\sswhead}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEADJDIST{f}{g}{n} draws a north-north-east pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\NNEADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(-\Y,-#3){\begin{picture}(0,0)%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\line(1,2){#3}}%
+\put(\epilength,\secondmonolength){\nnehead}%
+\put(\monolength,\secondepilength){\line(-1,-2){#3}}%
+\put(-\value{x},\value{y}){\sswhead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\circle{\value{z}}}%
+\put(\value{x},-\value{y}){\circle{\value{z}}}%
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce north-north-east arrows;
+% the default length is 6700 units
+
+% basic north-north-east arrow
+\def\basicnnear[#1]{\NNEAR{}{}{#100}}%
+
+% north-north-east arrow
+\newcommand{\nnear}{\@ifnextchar[{\basicnnear}{\basicnnear[67]}}%
+
+% basic north-north-east arrow with upper name
+\def\basicNnear[#1]#2{\NNEAR{#2}{}{#100}}%
+
+% north-north-east arrow with upper name
+\newcommand{\Nnear}{\@ifnextchar[{\basicNnear}{\basicNnear[67]}}%
+
+% basic north-north-east arrow with lower name
+\def\basicnneaR[#1]#2{\NNEAR{}{#2}{#100}}%
+
+% north-north-east arrow with lower name
+\newcommand{\nneaR}{\@ifnextchar[{\basicnneaR}{\basicnneaR[67]}}%
+
+% basic north-north-east distributor
+\def\basicnnedist[#1]{\NNEDIST{}{}{#100}}%
+
+% north-north-east distributor
+\newcommand{\nnedist}{\@ifnextchar[{\basicnnedist}{\basicnnedist[67]}}%
+
+% basic north-north-east distributor with upper name
+\def\basicNnedist[#1]#2{\NNEDIST{#2}{}{#100}}%
+
+% north-north-east distributor with upper name
+\newcommand{\Nnedist}{\@ifnextchar[{\basicNnedist}{\basicNnedist[67]}}%
+
+% basic north-north-east distributor with lower name
+\def\basicnnedisT[#1]#2{\NNEDIST{}{#2}{#100}}%
+
+% north-north-east distributor with lower name
+\newcommand{\nnedisT}{\@ifnextchar[{\basicnnedisT}{\basicnnedisT[67]}}%
+
+% basic north-north-east dotted arrow
+\def\basicnnedotar[#1]{\NNEDOTAR{}{}{#100}}%
+
+% north-north-east dotted arrow
+\newcommand{\nnedotar}{\@ifnextchar[{\basicnnedotar}{\basicnnedotar[67]}}%
+
+% basic north-north-east dotted arrow with upper name
+\def\basicNnedotar[#1]#2{\NNEDOTAR{#2}{}{#100}}%
+
+% north-north-east dotted arrow with upper name
+\newcommand{\Nnedotar}{\@ifnextchar[{\basicNnedotar}{\basicNnedotar[67]}}%
+
+% basic north-north-east dotted arrow with lower name
+\def\basicnnedotaR[#1]#2{\NNEDOTAR{}{#2}{#100}}%
+
+% north-north-east dotted arrow with lower name
+\newcommand{\nnedotaR}{\@ifnextchar[{\basicnnedotaR}{\basicnnedotaR[67]}}%
+
+% basic north-north-east monomorphism
+\def\basicnnemono[#1]{\NNEMONO{}{}{#100}}%
+
+% north-north-east monomorphism
+\newcommand{\nnemono}{\@ifnextchar[{\basicnnemono}{\basicnnemono[67]}}%
+
+% basic north-north-east monomorphism with upper name
+\def\basicNnemono[#1]#2{\NNEMONO{#2}{}{#100}}%
+
+% north-north-east monomorphism with upper name
+\newcommand{\Nnemono}{\@ifnextchar[{\basicNnemono}{\basicNnemono[67]}}%
+
+% basic north-north-east monomorphism with lower name
+\def\basicnnemonO[#1]#2{\NNEMONO{}{#2}{#100}}%
+
+% north-north-east monomorphism with lower name
+\newcommand{\nnemonO}{\@ifnextchar[{\basicnnemonO}{\basicnnemonO[67]}}%
+
+% basic north-north-east epimorphism
+\def\basicnneepi[#1]{\NNEEPI{}{}{#100}}%
+
+% north-north-east epimorphism
+\newcommand{\nneepi}{\@ifnextchar[{\basicnneepi}{\basicnneepi[67]}}%
+
+% basic north-north-east epimorphism with upper name
+\def\basicNneepi[#1]#2{\NNEEPI{#2}{}{#100}}%
+
+% north-north-east epimorphism with upper name
+\newcommand{\Nneepi}{\@ifnextchar[{\basicNneepi}{\basicNneepi[67]}}%
+
+% basic north-north-east epimorphism with lower name
+\def\basicnneepI[#1]#2{\NNEEPI{}{#2}{#100}}%
+
+% north-north-east epimorphism with lower name
+\newcommand{\nneepI}{\@ifnextchar[{\basicnneepI}{\basicnneepI[67]}}%
+
+% basic north-north-east bimorphism
+\def\basicnnebimo[#1]{\NNEBIMO{}{}{#100}}%
+
+% north-north-east bimorphism
+\newcommand{\nnebimo}{\@ifnextchar[{\basicnnebimo}{\basicnnebimo[67]}}%
+
+% basic north-north-east bimorphism with upper name
+\def\basicNnebimo[#1]#2{\NNEBIMO{#2}{}{#100}}%
+
+% north-north-east bimorphism with upper name
+\newcommand{\Nnebimo}{\@ifnextchar[{\basicNnebimo}{\basicNnebimo[67]}}%
+
+% basic north-north-east bimorphism with lower name
+\def\basicnnebimO[#1]#2{\NNEBIMO{}{#2}{#100}}%
+
+% north-north-east bimorphism with lower name
+\newcommand{\nnebimO}{\@ifnextchar[{\basicnnebimO}{\basicnnebimO[67]}}%
+
+% basic north-north-east isomorphism
+\def\basicnneiso[#1]{\NNEAR{\cong}{}{#100}}%
+
+% north-north-east isomorphism
+\newcommand{\nneiso}{\@ifnextchar[{\basicnneiso}{\basicnneiso[67]}}%
+
+% basic north-north-east isomorphism with upper name
+\def\basicNneiso[#1]#2{\NNEAR{#2}{\cong}{#100}}%
+
+% north-north-east isomorphism with upper name
+\newcommand{\Nneiso}{\@ifnextchar[{\basicNneiso}{\basicNneiso[67]}}%
+
+% basic north-north-east isomorphism with lower name
+\def\basicnneisO[#1]#2{\NNEAR{\cong}{#2}{#100}}%
+
+% north-north-east isomorphism with lower name
+\newcommand{\nneisO}{\@ifnextchar[{\basicnneisO}{\basicnneisO[67]}}%
+
+% basic north-north-east equality
+\def\basicnneeql[#1]{\NNEEQL{}{}{#100}}%
+
+% north-north-east equality
+\newcommand{\nneeql}{\@ifnextchar[{\basicnneeql}{\basicnneeql[67]}}%
+
+% basic north-north-east equality with upper name
+\def\basicNneeql[#1]#2{\NNEEQL{#2}{}{#100}}%
+
+% north-north-east equality with upper name
+\newcommand{\Nneeql}{\@ifnextchar[{\basicNneeql}{\basicNneeql[67]}}%
+
+% basic north-north-east equality with lower name
+\def\basicnneeqL[#1]#2{\NNEEQL{}{#2}{#100}}%
+
+% north-north-east equality with lower name
+\newcommand{\nneeqL}{\@ifnextchar[{\basicnneeqL}{\basicnneeqL[67]}}%
+
+% basic north-north-east pair of arrows
+\def\basicnnebiar[#1]{\NNEBIAR{}{}{#100}}%
+
+% north-north-east pair of arrows
+\newcommand{\nnebiar}{\@ifnextchar[{\basicnnebiar}{\basicnnebiar[67]}}%
+
+% basic north-north-east pair of arrows with names
+\def\basicNnebiar[#1]#2#3{\NNEBIAR{#2}{#3}{#100}}%
+
+% north-north-east pair of arrows with names
+\newcommand{\Nnebiar}{\@ifnextchar[{\basicNnebiar}{\basicNnebiar[67]}}%
+\let\nnebiaR=\Nnebiar
+
+% basic north-north-east pair of distributors
+\def\basicnnebidist[#1]{\NNEBIDIST{}{}{#100}}%
+
+% north-north-east pair of distributors
+\newcommand{\nnebidist}{\@ifnextchar[{\basicnnebidist}{\basicnnebidist[67]}}%
+
+% basic north-north-east pair of distributors with names
+\def\basicNnebidist[#1]#2#3{\NNEBIDIST{#2}{#3}{#100}}%
+
+% north-north-east pair of distributors with names
+\newcommand{\Nnebidist}{\@ifnextchar[{\basicNnebidist}{\basicNnebidist[67]}}%
+\let\nnebidisT=\Nnebidist
+
+% basic north-north-east pair of adjoint arrows
+\def\basicnneadjar[#1]{\NNEADJAR{}{}{#100}}%
+
+% north-north-east pair of adjoint arrows
+\newcommand{\nneadjar}{\@ifnextchar[{\basicnneadjar}{\basicnneadjar[67]}}%
+
+% basic north-north-east pair of adjoint arrows with names
+\def\basicNneadjar[#1]#2#3{\NNEADJAR{#2}{#3}{#100}}%
+
+% north-north-east pair of adjoint arrows with names
+\newcommand{\Nneadjar}{\@ifnextchar[{\basicNneadjar}{\basicNneadjar[67]}}%
+\let\nneadjaR=\Nneadjar
+
+% basic north-north-east pair of adjoint distributors
+\def\basicnneadjdist[#1]{\NNEADJDIST{}{}{#100}}%
+
+% north-north-east pair of adjoint distributors
+\newcommand{\nneadjdist}{\@ifnextchar[{\basicnneadjdist}{\basicnneadjdist[67]}}%
+
+% basic north-north-east pair of adjoint distributors with names
+\def\basicNneadjdist[#1]#2#3{\NNEADJDIST{#2}{#3}{#100}}%
+
+% north-north-east pair of adjoint distributors with names
+\newcommand{\Nneadjdist}{\@ifnextchar[{\basicNneadjdist}{\basicNneadjdist[67]}}%
+\let\nneadjdisT=\Nneadjdist
+
+
+% SOUTH-SOUTH-EAST ARROWS
+
+% The following commands produce south-south-east arrows
+% of horizontal extent n units
+
+% \SSEAR{f}{g}{n} draws a south-south-east arrow with names f, g
+% and length n units
+\newcommand{\SSEAR}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,#3){\line(1,-2){#3}}%
+\put(\Z,-#3){\ssehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEDIST{f}{g}{n} draws a south-south-east distributor
+% with names f, g and length n units
+\newcommand{\SSEDIST}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,#3){\line(1,-2){#3}}%
+\put(\Z,-#3){\ssehead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\SSEDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Z=#3%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{z}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Z,#3)(\value{z},-\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Z,-#3){\ssehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEMONO{f}{g}{n} draws a south-south-east monomorphism
+% with names f,g and length n units
+\newcommand{\SSEMONO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,\secondmonolength){\line(1,-2){\bimolength}}%
+\put(-\monolength,\secondmonolength){\ssehead}%
+\put(\Z,-#3){\ssehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEEPI{f}{g}{n} draws a south-south-east epimorphism
+% with names f, g and length n units
+\newcommand{\SSEEPI}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\Z%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\Z,#3){\line(1,-2){\bimolength}}%
+\put(\epilength,-\secondepilength){\ssehead}%
+\put(\Z,-#3){\ssehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEBIMO{f}{g}{n} draws a south-south-east bimorphism
+% with names f,g and length n units
+\newcommand{\SSEBIMO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,\secondmonolength){\line(1,-2){\bimolength}}%
+\put(-\monolength,\secondmonolength){\ssehead}%
+\put(\epilength,-\secondepilength){\ssehead}%
+\put(\Z,-#3){\ssehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEEQL{f}{g}{n} draws a south-south-east equality
+% with names f,g and length n units
+\newcommand{\SSEEQL}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,#3){\begin{picture}(0,0)%
+\truex{44}\truey{89}%
+\put(-\value{y},-\value{x}){\line(1,-2){#3}}%
+\put(\value{y},\value{x}){\line(1,-2){#3}}%
+\end{picture}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEBIAR{f}{g}{n} draws a pair of south-south-east arrows
+% with names f,g and length n units
+\newcommand{\SSEBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\put(-\value{x},-\value{y}){\line(1,-2){#3}}%
+\put(\value{x},\value{y}){\line(1,-2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\monolength,-\secondepilength){\ssehead}%
+\put(\epilength,-\secondmonolength){\ssehead}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEBIDIST{f}{g}{n} draws a pair of south-south-east distributors
+% with names f,g and length n units
+\newcommand{\SSEBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(-\Y,#3){\begin{picture}(0,0)%
+\put(-\value{x},-\value{y}){\line(1,-2){#3}}%
+\put(\value{x},\value{y}){\line(1,-2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\monolength,-\secondepilength){\ssehead}%
+\put(\epilength,-\secondmonolength){\ssehead}%
+\end{picture}}
+\put(-\value{x},-\value{y}){\circle{\value{z}}}%
+\put(\value{x},\value{y}){\circle{\value{z}}}%
+\truex{500}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEADJAR{f}{g}{n} draws a south-south-east pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\SSEADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\line(1,-2){#3}}%
+\put(\monolength,-\secondepilength){\ssehead}%
+\put(\epilength,-\secondmonolength){\line(-1,2){#3}}%
+\put(\value{x},\value{y}){\nnwhead}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEADJDIST{f}{g}{n} draws a south-south-east pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\SSEADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(-\Y,#3){\begin{picture}(0,0)%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\line(1,-2){#3}}%
+\put(\monolength,-\secondepilength){\ssehead}%
+\put(\epilength,-\secondmonolength){\line(-1,2){#3}}%
+\put(\value{x},\value{y}){\nnwhead}%
+\end{picture}}
+\put(\value{x},\value{y}){\circle{\value{z}}}%
+\put(-\value{x},-\value{y}){\circle{\value{z}}}%
+\truex{500}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+
+% The following commands produce south-south-east arrows;
+% the default length is 6700 units
+
+% basic south-south-east arrow
+\def\basicssear[#1]{\SSEAR{}{}{#100}}%
+
+% south-south-east arrow
+\newcommand{\ssear}{\@ifnextchar[{\basicssear}{\basicssear[67]}}%
+
+% basic south-south-east arrow with upper name
+\def\basicSsear[#1]#2{\SSEAR{#2}{}{#100}}%
+
+% south-south-east arrow with upper name
+\newcommand{\Ssear}{\@ifnextchar[{\basicSsear}{\basicSsear[67]}}%
+
+% basic south-south-east arrow with lower name
+\def\basicsseaR[#1]#2{\SSEAR{}{#2}{#100}}%
+
+% south-south-east arrow with lower name
+\newcommand{\sseaR}{\@ifnextchar[{\basicsseaR}{\basicsseaR[67]}}%
+
+% basic south-south-east distributor
+\def\basicssedist[#1]{\SSEDIST{}{}{#100}}%
+
+% south-south-east distributor
+\newcommand{\ssedist}{\@ifnextchar[{\basicssedist}{\basicssedist[67]}}%
+
+% basic south-south-east distributor with upper name
+\def\basicSsedist[#1]#2{\SSEDIST{#2}{}{#100}}%
+
+% south-south-east distributor with upper name
+\newcommand{\Ssedist}{\@ifnextchar[{\basicSsedist}{\basicSsedist[67]}}%
+
+% basic south-south-east distributor with lower name
+\def\basicssedisT[#1]#2{\SSEDIST{}{#2}{#100}}%
+
+% south-south-east distributor with lower name
+\newcommand{\ssedisT}{\@ifnextchar[{\basicssedisT}{\basicssedisT[67]}}%
+
+% basic south-south-east dotted arrow
+\def\basicssedotar[#1]{\SSEDOTAR{}{}{#100}}%
+
+% south-south-east dotted arrow
+\newcommand{\ssedotar}{\@ifnextchar[{\basicssedotar}{\basicssedotar[67]}}%
+
+% basic south-south-east dotted arrow with upper name
+\def\basicSsedotar[#1]#2{\SSEDOTAR{#2}{}{#100}}%
+
+% south-south-east dotted arrow with upper name
+\newcommand{\Ssedotar}{\@ifnextchar[{\basicSsedotar}{\basicSsedotar[67]}}%
+
+% basic south-south-east dotted arrow with lower name
+\def\basicssedotaR[#1]#2{\SSEDOTAR{}{#2}{#100}}%
+
+% south-south-east dotted arrow with lower name
+\newcommand{\ssedotaR}{\@ifnextchar[{\basicssedotaR}{\basicssedotaR[67]}}%
+
+% basic south-south-east monomorphism
+\def\basicssemono[#1]{\SSEMONO{}{}{#100}}%
+
+% south-south-east monomorphism
+\newcommand{\ssemono}{\@ifnextchar[{\basicssemono}{\basicssemono[67]}}%
+
+% basic south-south-east monomorphism with upper name
+\def\basicSsemono[#1]#2{\SSEMONO{#2}{}{#100}}%
+
+% south-south-east monomorphism with upper name
+\newcommand{\Ssemono}{\@ifnextchar[{\basicSsemono}{\basicSsemono[67]}}%
+
+% basic south-south-east monomorphism with lower name
+\def\basicssemonO[#1]#2{\SSEMONO{}{#2}{#100}}%
+
+% south-south-east monomorphism with lower name
+\newcommand{\ssemonO}{\@ifnextchar[{\basicssemonO}{\basicssemonO[67]}}%
+
+% basic south-south-east epimorphism
+\def\basicsseepi[#1]{\SSEEPI{}{}{#100}}%
+
+% south-south-east epimorphism
+\newcommand{\sseepi}{\@ifnextchar[{\basicsseepi}{\basicsseepi[67]}}%
+
+% basic south-south-east epimorphism with upper name
+\def\basicSseepi[#1]#2{\SSEEPI{#2}{}{#100}}%
+
+% south-south-east epimorphism with upper name
+\newcommand{\Sseepi}{\@ifnextchar[{\basicSseepi}{\basicSseepi[67]}}%
+
+% basic south-south-east epimorphism with lower name
+\def\basicsseepI[#1]#2{\SSEEPI{}{#2}{#100}}%
+
+% south-south-east epimorphism with lower name
+\newcommand{\sseepI}{\@ifnextchar[{\basicsseepI}{\basicsseepI[67]}}%
+
+% basic south-south-east bimorphism
+\def\basicssebimo[#1]{\SSEBIMO{}{}{#100}}%
+
+% south-south-east bimorphism
+\newcommand{\ssebimo}{\@ifnextchar[{\basicssebimo}{\basicssebimo[67]}}%
+
+% basic south-south-east bimorphism with upper name
+\def\basicSsebimo[#1]#2{\SSEBIMO{#2}{}{#100}}%
+
+% south-south-east bimorphism with upper name
+\newcommand{\Ssebimo}{\@ifnextchar[{\basicSsebimo}{\basicSsebimo[67]}}%
+
+% basic south-south-east bimorphism with lower name
+\def\basicssebimO[#1]#2{\SSEBIMO{}{#2}{#100}}%
+
+% south-south-east bimorphism with lower name
+\newcommand{\ssebimO}{\@ifnextchar[{\basicssebimO}{\basicssebimO[67]}}%
+
+% basic south-south-east isomorphism
+\def\basicsseiso[#1]{\SSEAR{\cong}{}{#100}}%
+
+% south-south-east isomorphism
+\newcommand{\sseiso}{\@ifnextchar[{\basicsseiso}{\basicsseiso[67]}}%
+
+% basic south-south-east isomorphism with upper name
+\def\basicSseiso[#1]#2{\SSEAR{#2}{\cong}{#100}}%
+
+% south-south-east isomorphism with upper name
+\newcommand{\Sseiso}{\@ifnextchar[{\basicSseiso}{\basicSseiso[67]}}%
+
+% basic south-south-east isomorphism with lower name
+\def\basicsseisO[#1]#2{\SSEAR{\cong}{#2}{#100}}%
+
+% south-south-east isomorphism with lower name
+\newcommand{\sseisO}{\@ifnextchar[{\basicsseisO}{\basicsseisO[67]}}%
+
+% basic south-south-east equality
+\def\basicsseeql[#1]{\SSEEQL{}{}{#100}}%
+
+% south-south-east equality
+\newcommand{\sseeql}{\@ifnextchar[{\basicsseeql}{\basicsseeql[67]}}%
+
+% basic south-south-east equality with upper name
+\def\basicSseeql[#1]#2{\SSEEQL{#2}{}{#100}}%
+
+% south-south-east equality with upper name
+\newcommand{\Sseeql}{\@ifnextchar[{\basicSseeql}{\basicSseeql[67]}}%
+
+% basic south-south-east equality with lower name
+\def\basicsseeqL[#1]#2{\SSEEQL{}{#2}{#100}}%
+
+% south-south-east equality with lower name
+\newcommand{\sseeqL}{\@ifnextchar[{\basicsseeqL}{\basicsseeqL[67]}}%
+
+% basic south-south-east pair of arrows
+\def\basicssebiar[#1]{\SSEBIAR{}{}{#100}}%
+
+% south-south-east pair of arrows
+\newcommand{\ssebiar}{\@ifnextchar[{\basicssebiar}{\basicssebiar[67]}}%
+
+% basic south-south-east pair of arrows with names
+\def\basicSsebiar[#1]#2#3{\SSEBIAR{#2}{#3}{#100}}%
+
+% south-south-east pair of arrows with names
+\newcommand{\Ssebiar}{\@ifnextchar[{\basicSsebiar}{\basicSsebiar[67]}}%
+\let\ssebiaR=\Ssebiar
+
+% basic south-south-east pair of distributors
+\def\basicssebidist[#1]{\SSEBIDIST{}{}{#100}}%
+
+% south-south-east pair of distributors
+\newcommand{\ssebidist}{\@ifnextchar[{\basicssebidist}{\basicssebidist[67]}}%
+
+% basic south-south-east pair of distributors with names
+\def\basicSsebidist[#1]#2#3{\SSEBIDIST{#2}{#3}{#100}}%
+
+% south-south-east pair of distributors with names
+\newcommand{\Ssebidist}{\@ifnextchar[{\basicSsebidist}{\basicSsebidist[67]}}%
+\let\ssebidisT=\Ssebidist
+
+% basic south-south-east pair of adjoint arrows
+\def\basicsseadjar[#1]{\SSEADJAR{}{}{#100}}%
+
+% south-south-east pair of adjoint arrows
+\newcommand{\sseadjar}{\@ifnextchar[{\basicsseadjar}{\basicsseadjar[67]}}%
+
+% basic south-south-east pair of adjoint arrows with names
+\def\basicSseadjar[#1]#2#3{\SSEADJAR{#2}{#3}{#100}}%
+
+% south-south-east pair of adjoint arrows with names
+\newcommand{\Sseadjar}{\@ifnextchar[{\basicSseadjar}{\basicSseadjar[67]}}%
+\let\sseadjaR=\Sseadjar
+
+% basic south-south-east pair of adjoint distributors
+\def\basicsseadjdist[#1]{\SSEADJDIST{}{}{#100}}%
+
+% south-south-east pair of adjoint distributors
+\newcommand{\sseadjdist}{\@ifnextchar[{\basicsseadjdist}{\basicsseadjdist[67]}}%
+
+% basic south-south-east pair of adjoint distributors with names
+\def\basicSseadjdist[#1]#2#3{\SSEADJDIST{#2}{#3}{#100}}%
+
+% south-south-east pair of adjoint distributors with names
+\newcommand{\Sseadjdist}{\@ifnextchar[{\basicSseadjdist}{\basicSseadjdist[67]}}%
+\let\sseadjdisT=\Sseadjdist
+
+
+% SOUTH-SOUTH-WEST ARROWS
+
+% The following commands produce south-south-west arrows
+% of horizontal extent n units
+
+% \SSWAR{f}{g}{n} draws a south-south-west arrow with names f, g
+% and length n units
+\newcommand{\SSWAR}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Z,#3){\line(-1,-2){#3}}%
+\put(-\Z,-#3){\sswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWDIST{f}{g}{n} draws a south-south-west distributor
+% with names f, g and length n units
+\newcommand{\SSWDIST}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Z,#3){\line(-1,-2){#3}}%
+\put(-\Z,-#3){\sswhead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\SSWDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Z=#3%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{z}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Z,#3)(-\value{z},-\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Z,-#3){\sswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWMONO{f}{g}{n} draws a south-south-west monomorphism
+% with names f,g and length n units
+\newcommand{\SSWMONO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,\secondmonolength){\line(-1,-2){\bimolength}}%
+\put(\monolength,\secondmonolength){\sswhead}%
+\put(-\Z,-#3){\sswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWEPI{f}{g}{n} draws a south-south-west epimorphism
+% with names f, g and length n units
+\newcommand{\SSWEPI}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\Z%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\Z,#3){\line(-1,-2){\bimolength}}%
+\put(-\epilength,-\secondepilength){\sswhead}%
+\put(-\Z,-#3){\sswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWBIMO{f}{g}{n} draws a south-south-west bimorphism
+% with names f,g and length n units
+\newcommand{\SSWBIMO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,\secondmonolength){\line(-1,-2){\bimolength}}%
+\put(\monolength,\secondmonolength){\sswhead}%
+\put(-\epilength,-\secondepilength){\sswhead}%
+\put(-\Z,-#3){\sswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWBIAR{f}{g}{n} draws a pair of south-south-west arrows
+% with names f,g and length n units
+\newcommand{\SSWBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\put(-\value{x},\value{y}){\line(-1,-2){#3}}%
+\put(\value{x},-\value{y}){\line(-1,-2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\monolength,-\secondepilength){\sswhead}%
+\put(-\epilength,-\secondmonolength){\sswhead}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWBIDIST{f}{g}{n} draws a pair of south-south-west distributors
+% with names f,g and length n units
+\newcommand{\SSWBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(\Y,#3){\begin{picture}(0,0)%
+\put(-\value{x},\value{y}){\line(-1,-2){#3}}%
+\put(\value{x},-\value{y}){\line(-1,-2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\monolength,-\secondepilength){\sswhead}%
+\put(-\epilength,-\secondmonolength){\sswhead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\circle{\value{z}}}%
+\put(\value{x},-\value{y}){\circle{\value{z}}}%
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWADJAR{f}{g}{n} draws a south-south-west pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\SSWADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\line(-1,-2){#3}}%
+\put(-\monolength,-\secondepilength){\sswhead}%
+\put(-\epilength,-\secondmonolength){\line(1,2){#3}}%
+\put(-\value{x},\value{y}){\nnehead}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWADJDIST{f}{g}{n} draws a south-south-west pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\SSWADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(\Y,#3){\begin{picture}(0,0)%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\line(-1,-2){#3}}%
+\put(-\monolength,-\secondepilength){\sswhead}%
+\put(-\epilength,-\secondmonolength){\line(1,2){#3}}%
+\put(-\value{x},\value{y}){\nnehead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\circle{\value{z}}}%
+\put(\value{x},-\value{y}){\circle{\value{z}}}%
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce south-south-west arrows;
+% the default length is 6700 units
+
+% basic south-south-west arrow
+\def\basicsswar[#1]{\SSWAR{}{}{#100}}%
+
+% south-south-west arrow
+\newcommand{\sswar}{\@ifnextchar[{\basicsswar}{\basicsswar[67]}}%
+
+% basic south-south-west arrow with upper name
+\def\basicSswar[#1]#2{\SSWAR{#2}{}{#100}}%
+
+% south-south-west arrow with upper name
+\newcommand{\Sswar}{\@ifnextchar[{\basicSswar}{\basicSswar[67]}}%
+
+% basic south-south-west arrow with lower name
+\def\basicsswaR[#1]#2{\SSWAR{}{#2}{#100}}%
+
+% south-south-west arrow with lower name
+\newcommand{\sswaR}{\@ifnextchar[{\basicsswaR}{\basicsswaR[67]}}%
+
+% basic south-south-west distributor
+\def\basicsswdist[#1]{\SSWDIST{}{}{#100}}%
+
+% south-south-west distributor
+\newcommand{\sswdist}{\@ifnextchar[{\basicsswdist}{\basicsswdist[67]}}%
+
+% basic south-south-west distributor with upper name
+\def\basicSswdist[#1]#2{\SSWDIST{#2}{}{#100}}%
+
+% south-south-west distributor with upper name
+\newcommand{\Sswdist}{\@ifnextchar[{\basicSswdist}{\basicSswdist[67]}}%
+
+% basic south-south-west distributor with lower name
+\def\basicsswdisT[#1]#2{\SSWDIST{}{#2}{#100}}%
+
+% south-south-west distributor with lower name
+\newcommand{\sswdisT}{\@ifnextchar[{\basicsswdisT}{\basicsswdisT[67]}}%
+
+% basic south-south-west dotted arrow
+\def\basicsswdotar[#1]{\SSWDOTAR{}{}{#100}}%
+
+% south-south-west dotted arrow
+\newcommand{\sswdotar}{\@ifnextchar[{\basicsswdotar}{\basicsswdotar[67]}}%
+
+% basic south-south-west dotted arrow with upper name
+\def\basicSswdotar[#1]#2{\SSWDOTAR{#2}{}{#100}}%
+
+% south-south-west dotted arrow with upper name
+\newcommand{\Sswdotar}{\@ifnextchar[{\basicSswdotar}{\basicSswdotar[67]}}%
+
+% basic south-south-west dotted arrow with lower name
+\def\basicsswdotaR[#1]#2{\SSWDOTAR{}{#2}{#100}}%
+
+% south-south-west dotted arrow with lower name
+\newcommand{\sswdotaR}{\@ifnextchar[{\basicsswdotaR}{\basicsswdotaR[67]}}%
+
+% basic south-south-west monomorphism
+\def\basicsswmono[#1]{\SSWMONO{}{}{#100}}%
+
+% south-south-west monomorphism
+\newcommand{\sswmono}{\@ifnextchar[{\basicsswmono}{\basicsswmono[67]}}%
+
+% basic south-south-west monomorphism with upper name
+\def\basicSswmono[#1]#2{\SSWMONO{#2}{}{#100}}%
+
+% south-south-west monomorphism with upper name
+\newcommand{\Sswmono}{\@ifnextchar[{\basicSswmono}{\basicSswmono[67]}}%
+
+% basic south-south-west monomorphism with lower name
+\def\basicsswmonO[#1]#2{\SSWMONO{}{#2}{#100}}%
+
+% south-south-west monomorphism with lower name
+\newcommand{\sswmonO}{\@ifnextchar[{\basicsswmonO}{\basicsswmonO[67]}}%
+
+% basic south-south-west epimorphism
+\def\basicsswepi[#1]{\SSWEPI{}{}{#100}}%
+
+% south-south-west epimorphism
+\newcommand{\sswepi}{\@ifnextchar[{\basicsswepi}{\basicsswepi[67]}}%
+
+% basic south-south-west epimorphism with upper name
+\def\basicSswepi[#1]#2{\SSWEPI{#2}{}{#100}}%
+
+% south-south-west epimorphism with upper name
+\newcommand{\Sswepi}{\@ifnextchar[{\basicSswepi}{\basicSswepi[67]}}%
+
+% basic south-south-west epimorphism with lower name
+\def\basicsswepI[#1]#2{\SSWEPI{}{#2}{#100}}%
+
+% south-south-west epimorphism with lower name
+\newcommand{\sswepI}{\@ifnextchar[{\basicsswepI}{\basicsswepI[67]}}%
+
+% basic south-south-west bimorphism
+\def\basicsswbimo[#1]{\SSWBIMO{}{}{#100}}%
+
+% south-south-west bimorphism
+\newcommand{\sswbimo}{\@ifnextchar[{\basicsswbimo}{\basicsswbimo[67]}}%
+
+% basic south-south-west bimorphism with upper name
+\def\basicSswbimo[#1]#2{\SSWBIMO{#2}{}{#100}}%
+
+% south-south-west bimorphism with upper name
+\newcommand{\Sswbimo}{\@ifnextchar[{\basicSswbimo}{\basicSswbimo[67]}}%
+
+% basic south-south-west bimorphism with lower name
+\def\basicsswbimO[#1]#2{\SSWBIMO{}{#2}{#100}}%
+
+% south-south-west bimorphism with lower name
+\newcommand{\sswbimO}{\@ifnextchar[{\basicsswbimO}{\basicsswbimO[67]}}%
+
+% basic south-south-west isomorphism
+\def\basicsswiso[#1]{\SSWAR{\cong}{}{#100}}%
+
+% south-south-west isomorphism
+\newcommand{\sswiso}{\@ifnextchar[{\basicsswiso}{\basicsswiso[67]}}%
+
+% basic south-south-west isomorphism with upper name
+\def\basicSswiso[#1]#2{\SSWAR{#2}{\cong}{#100}}%
+
+% south-south-west isomorphism with upper name
+\newcommand{\Sswiso}{\@ifnextchar[{\basicSswiso}{\basicSswiso[67]}}%
+
+% basic south-south-west isomorphism with lower name
+\def\basicsswisO[#1]#2{\SSWAR{\cong}{#2}{#100}}%
+
+% south-south-west isomorphism with lower name
+\newcommand{\sswisO}{\@ifnextchar[{\basicsswisO}{\basicsswisO[67]}}%
+
+% south-south-west equality
+\let\ssweql=\nneeql%
+
+% south-south-west equality with upper name
+\let\Ssweql=\Nneeql%
+
+% south-south-west equality with lower name
+\let\ssweqL=\nneeqL%
+
+% basic south-south-west pair of arrows
+\def\basicsswbiar[#1]{\SSWBIAR{}{}{#100}}%
+
+% south-south-west pair of arrows
+\newcommand{\sswbiar}{\@ifnextchar[{\basicsswbiar}{\basicsswbiar[67]}}%
+
+% basic south-south-west pair of arrows with names
+\def\basicSswbiar[#1]#2#3{\SSWBIAR{#2}{#3}{#100}}%
+
+% south-south-west pair of arrows with names
+\newcommand{\Sswbiar}{\@ifnextchar[{\basicSswbiar}{\basicSswbiar[67]}}%
+\let\sswbiaR=\Sswbiar
+
+% basic south-south-west pair of distributors
+\def\basicsswbidist[#1]{\SSWBIDIST{}{}{#100}}%
+
+% south-south-west pair of distributors
+\newcommand{\sswbidist}{\@ifnextchar[{\basicsswbidist}{\basicsswbidist[67]}}%
+
+% basic south-south-west pair of distributors with names
+\def\basicSswbidist[#1]#2#3{\SSWBIDIST{#2}{#3}{#100}}%
+
+% south-south-west pair of distributors with names
+\newcommand{\Sswbidist}{\@ifnextchar[{\basicSswbidist}{\basicSswbidist[67]}}%
+\let\sswbidisT=\Sswbidist
+
+% basic south-south-west pair of adjoint arrows
+\def\basicsswadjar[#1]{\SSWADJAR{}{}{#100}}%
+
+% south-south-west pair of adjoint arrows
+\newcommand{\sswadjar}{\@ifnextchar[{\basicsswadjar}{\basicsswadjar[67]}}%
+
+% basic south-south-west pair of adjoint arrows with names
+\def\basicSswadjar[#1]#2#3{\SSWADJAR{#2}{#3}{#100}}%
+
+% south-south-west pair of adjoint arrows with names
+\newcommand{\Sswadjar}{\@ifnextchar[{\basicSswadjar}{\basicSswadjar[67]}}%
+\let\sswadjaR=\Sswadjar
+
+% basic south-south-west pair of adjoint distributors
+\def\basicsswadjdist[#1]{\SSWADJDIST{}{}{#100}}%
+
+% south-south-west pair of adjoint distributors
+\newcommand{\sswadjdist}{\@ifnextchar[{\basicsswadjdist}{\basicsswadjdist[67]}}%
+
+% basic south-south-west pair of adjoint distributors with names
+\def\basicSswadjdist[#1]#2#3{\SSWADJDIST{#2}{#3}{#100}}%
+
+% south-south-west pair of adjoint distributors with names
+\newcommand{\Sswadjdist}{\@ifnextchar[{\basicSswadjdist}{\basicSswadjdist[67]}}%
+\let\sswadjdisT=\Sswadjdist
+
+
+% NORTH-NORTH-WEST ARROWS
+
+% The following commands produce north-north-west arrows
+% of horizontal extent n units
+
+% \NNWAR{f}{g}{n} draws a north-north-west arrow with names f, g
+% and length n units
+\newcommand{\NNWAR}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Z,-#3){\line(-1,2){#3}}%
+\put(-\Z,#3){\nnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWDIST{f}{g}{n} draws a north-north-west distributor
+% with names f, g and length n units
+\newcommand{\NNWDIST}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Z,-#3){\line(-1,2){#3}}%
+\put(-\Z,#3){\nnwhead}%
+\truex{400}%
+\put(0,0){\circle{\value{x}}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\NNWDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Z=#3%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{z}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Z,-#3)(-\value{z},\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Z,#3){\nnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWMONO{f}{g}{n} draws a north-north-west monomorphism
+% with names f,g and length n units
+\newcommand{\NNWMONO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,-\secondmonolength){\line(-1,2){\bimolength}}%
+\put(\monolength,-\secondmonolength){\nnwhead}%
+\put(-\Z,#3){\nnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWEPI{f}{g}{n} draws a north-north-west epimorphism
+% with names f, g and length n units
+\newcommand{\NNWEPI}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\Z%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\Z,-#3){\line(-1,2){\bimolength}}%
+\put(-\epilength,\secondepilength){\nnwhead}%
+\put(-\Z,#3){\nnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWBIMO{f}{g}{n} draws a north-north-west bimorphism
+% with names f,g and length n units
+\newcommand{\NNWBIMO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,-\secondmonolength){\line(-1,2){\bimolength}}%
+\put(\monolength,-\secondmonolength){\nnwhead}%
+\put(-\epilength,\secondepilength){\nnwhead}%
+\put(-\Z,#3){\nnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWBIAR{f}{g}{n} draws a pair of north-north-west arrows
+% with names f,g and length n units
+\newcommand{\NNWBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\put(-\value{x},-\value{y}){\line(-1,2){#3}}%
+\put(\value{x},\value{y}){\line(-1,2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\monolength,\secondepilength){\nnwhead}%
+\put(-\epilength,\secondmonolength){\nnwhead}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWBIDIST{f}{g}{n} draws a pair of north-north-west distributors
+% with names f,g and length n units
+\newcommand{\NNWBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(\Y,-#3){\begin{picture}(0,0)%
+\put(-\value{x},-\value{y}){\line(-1,2){#3}}%
+\put(\value{x},\value{y}){\line(-1,2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\monolength,\secondepilength){\nnwhead}%
+\put(-\epilength,\secondmonolength){\nnwhead}%
+\end{picture}}
+\put(-\value{x},-\value{y}){\circle{\value{z}}}%
+\put(\value{x},\value{y}){\circle{\value{z}}}%
+\truex{500}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWADJAR{f}{g}{n} draws a north-north-west pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\NNWADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\line(-1,2){#3}}%
+\put(-\epilength,\secondmonolength){\nnwhead}%
+\put(-\monolength,\secondepilength){\line(1,-2){#3}}%
+\put(\value{x},\value{y}){\ssehead}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWADJDIST{f}{g}{n} draws a north-north-west pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\NNWADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(\Y,-#3){\begin{picture}(0,0)%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\line(-1,2){#3}}%
+\put(-\epilength,\secondmonolength){\nnwhead}%
+\put(-\monolength,\secondepilength){\line(1,-2){#3}}%
+\put(\value{x},\value{y}){\ssehead}%
+\end{picture}}
+\put(\value{x},\value{y}){\circle{\value{z}}}%
+\put(-\value{x},-\value{y}){\circle{\value{z}}}%
+\truex{500}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce north-north-west arrows;
+% the default length is 6700 units
+
+% basic north-north-west arrow
+\def\basicnnwar[#1]{\NNWAR{}{}{#100}}%
+
+% north-north-west arrow
+\newcommand{\nnwar}{\@ifnextchar[{\basicnnwar}{\basicnnwar[67]}}%
+
+% basic north-north-west arrow with upper name
+\def\basicNnwar[#1]#2{\NNWAR{#2}{}{#100}}%
+
+% north-north-west arrow with upper name
+\newcommand{\Nnwar}{\@ifnextchar[{\basicNnwar}{\basicNnwar[67]}}%
+
+% basic north-north-west arrow with lower name
+\def\basicnnwaR[#1]#2{\NNWAR{}{#2}{#100}}%
+
+% north-north-west arrow with lower name
+\newcommand{\nnwaR}{\@ifnextchar[{\basicnnwaR}{\basicnnwaR[67]}}%
+
+% basic north-north-west distributor
+\def\basicnnwdist[#1]{\NNWDIST{}{}{#100}}%
+
+% north-north-west distributor
+\newcommand{\nnwdist}{\@ifnextchar[{\basicnnwdist}{\basicnnwdist[67]}}%
+
+% basic north-north-west distributor with upper name
+\def\basicNnwdist[#1]#2{\NNWDIST{#2}{}{#100}}%
+
+% north-north-west distributor with upper name
+\newcommand{\Nnwdist}{\@ifnextchar[{\basicNnwdist}{\basicNnwdist[67]}}%
+
+% basic north-north-west distributor with lower name
+\def\basicnnwdisT[#1]#2{\NNWDIST{}{#2}{#100}}%
+
+% north-north-west distributor with lower name
+\newcommand{\nnwdisT}{\@ifnextchar[{\basicnnwdisT}{\basicnnwdisT[67]}}%
+
+% basic north-north-west dotted arrow
+\def\basicnnwdotar[#1]{\NNWDOTAR{}{}{#100}}%
+
+% north-north-west dotted arrow
+\newcommand{\nnwdotar}{\@ifnextchar[{\basicnnwdotar}{\basicnnwdotar[67]}}%
+
+% basic north-north-west dotted arrow with upper name
+\def\basicNnwdotar[#1]#2{\NNWDOTAR{#2}{}{#100}}%
+
+% north-north-west dotted arrow with upper name
+\newcommand{\Nnwdotar}{\@ifnextchar[{\basicNnwdotar}{\basicNnwdotar[67]}}%
+
+% basic north-north-west dotted arrow with lower name
+\def\basicnnwdotaR[#1]#2{\NNWDOTAR{}{#2}{#100}}%
+
+% north-north-west dotted arrow with lower name
+\newcommand{\nnwdotaR}{\@ifnextchar[{\basicnnwdotaR}{\basicnnwdotaR[67]}}%
+
+% basic north-north-west monomorphism
+\def\basicnnwmono[#1]{\NNWMONO{}{}{#100}}%
+
+% north-north-west monomorphism
+\newcommand{\nnwmono}{\@ifnextchar[{\basicnnwmono}{\basicnnwmono[67]}}%
+
+% basic north-north-west monomorphism with upper name
+\def\basicNnwmono[#1]#2{\NNWMONO{#2}{}{#100}}%
+
+% north-north-west monomorphism with upper name
+\newcommand{\Nnwmono}{\@ifnextchar[{\basicNnwmono}{\basicNnwmono[67]}}%
+
+% basic north-north-west monomorphism with lower name
+\def\basicnnwmonO[#1]#2{\NNWMONO{}{#2}{#100}}%
+
+% north-north-west monomorphism with lower name
+\newcommand{\nnwmonO}{\@ifnextchar[{\basicnnwmonO}{\basicnnwmonO[67]}}%
+
+% basic north-north-west epimorphism
+\def\basicnnwepi[#1]{\NNWEPI{}{}{#100}}%
+
+% north-north-west epimorphism
+\newcommand{\nnwepi}{\@ifnextchar[{\basicnnwepi}{\basicnnwepi[67]}}%
+
+% basic north-north-west epimorphism with upper name
+\def\basicNnwepi[#1]#2{\NNWEPI{#2}{}{#100}}%
+
+% north-north-west epimorphism with upper name
+\newcommand{\Nnwepi}{\@ifnextchar[{\basicNnwepi}{\basicNnwepi[67]}}%
+
+% basic north-north-west epimorphism with lower name
+\def\basicnnwepI[#1]#2{\NNWEPI{}{#2}{#100}}%
+
+% north-north-west epimorphism with lower name
+\newcommand{\nnwepI}{\@ifnextchar[{\basicnnwepI}{\basicnnwepI[67]}}%
+
+% basic north-north-west bimorphism
+\def\basicnnwbimo[#1]{\NNWBIMO{}{}{#100}}%
+
+% north-north-west bimorphism
+\newcommand{\nnwbimo}{\@ifnextchar[{\basicnnwbimo}{\basicnnwbimo[67]}}%
+
+% basic north-north-west bimorphism with upper name
+\def\basicNnwbimo[#1]#2{\NNWBIMO{#2}{}{#100}}%
+
+% north-north-west bimorphism with upper name
+\newcommand{\Nnwbimo}{\@ifnextchar[{\basicNnwbimo}{\basicNnwbimo[67]}}%
+
+% basic north-north-west bimorphism with lower name
+\def\basicnnwbimO[#1]#2{\NNWBIMO{}{#2}{#100}}%
+
+% north-north-west bimorphism with lower name
+\newcommand{\nnwbimO}{\@ifnextchar[{\basicnnwbimO}{\basicnnwbimO[67]}}%
+
+% basic north-north-west isomorphism
+\def\basicnnwiso[#1]{\NNWAR{\cong}{}{#100}}%
+
+% north-north-west isomorphism
+\newcommand{\nnwiso}{\@ifnextchar[{\basicnnwiso}{\basicnnwiso[67]}}%
+
+% basic north-north-west isomorphism with upper name
+\def\basicNnwiso[#1]#2{\NNWAR{#2}{\cong}{#100}}%
+
+% north-north-west isomorphism with upper name
+\newcommand{\Nnwiso}{\@ifnextchar[{\basicNnwiso}{\basicNnwiso[67]}}%
+
+% basic north-north-west isomorphism with lower name
+\def\basicnnwisO[#1]#2{\NNWAR{\cong}{#2}{#100}}%
+
+% north-north-west isomorphism with lower name
+\newcommand{\nnwisO}{\@ifnextchar[{\basicnnwisO}{\basicnnwisO[67]}}%
+
+% north-north-west equality
+\let\nnweql=\sseeql%
+
+% north-north-west equality with upper name
+\let\Nnweql=\Sseeql%
+
+% north-north-west equality with lower name
+\let\nnweqL=\sseeqL%
+
+% basic north-north-east pair of arrows
+\def\basicnnwbiar[#1]{\NNWBIAR{}{}{#100}}%
+
+% north-north-east pair of arrows
+\newcommand{\nnwbiar}{\@ifnextchar[{\basicnnwbiar}{\basicnnwbiar[67]}}%
+
+% basic north-north-east pair of arrows with names
+\def\basicNnwbiar[#1]#2#3{\NNWBIAR{#2}{#3}{#100}}%
+
+% north-north-east pair of arrows with names
+\newcommand{\Nnwbiar}{\@ifnextchar[{\basicNnwbiar}{\basicNnwbiar[67]}}%
+\let\nnwbiaR=\Nnwbiar
+
+% basic north-north-east pair of distributors
+\def\basicnnwbidist[#1]{\NNWBIDIST{}{}{#100}}%
+
+% north-north-east pair of distributors
+\newcommand{\nnwbidist}{\@ifnextchar[{\basicnnwbidist}{\basicnnwbidist[67]}}%
+
+% basic north-north-east pair of distributors with names
+\def\basicNnwbidist[#1]#2#3{\NNWBIDIST{#2}{#3}{#100}}%
+
+% north-north-east pair of distributors with names
+\newcommand{\Nnwbidist}{\@ifnextchar[{\basicNnwbidist}{\basicNnwbidist[67]}}%
+\let\nnwbidisT=\Nnwbidist
+
+% basic north-north-east pair of adjoint arrows
+\def\basicnnwadjar[#1]{\NNWADJAR{}{}{#100}}%
+
+% north-north-east pair of adjoint arrows
+\newcommand{\nnwadjar}{\@ifnextchar[{\basicnnwadjar}{\basicnnwadjar[67]}}%
+
+% basic north-north-east pair of adjoint arrows with names
+\def\basicNnwadjar[#1]#2#3{\NNWADJAR{#2}{#3}{#100}}%
+
+% north-north-east pair of adjoint arrows with names
+\newcommand{\Nnwadjar}{\@ifnextchar[{\basicNnwadjar}{\basicNnwadjar[67]}}%
+\let\nnwadjaR=\Nnwadjar
+
+% basic north-north-east pair of adjoint distributors
+\def\basicnnwadjdist[#1]{\NNWADJDIST{}{}{#100}}%
+
+% north-north-east pair of adjoint distributors
+\newcommand{\nnwadjdist}{\@ifnextchar[{\basicnnwadjdist}{\basicnnwadjdist[67]}}%
+
+% basic north-north-east pair of adjoint distributors with names
+\def\basicNnwadjdist[#1]#2#3{\NNWADJDIST{#2}{#3}{#100}}%
+
+% north-north-east pair of adjoint distributors with names
+\newcommand{\Nnwadjdist}{\@ifnextchar[{\basicNnwadjdist}{\basicNnwadjdist[67]}}%
+\let\nnwadjdisT=\Nnwadjdist
+
+
+% EAST-EAST-NORTH-EAST ARROWS
+% default length: 21100 units
+
+% \EENEAR{f}{g}{n} draws a east-east-north-east arrow with names f, g
+% and length n units
+\newcommand{\EENEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\line(3,1){#3}}%
+\put(\Y,\Z){\eenehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic east-east-north-east arrow
+\def\basiceenear[#1]{\EENEAR{}{}{#100}}%
+
+% east-east-north-east arrow
+\newcommand{\eenear}{\@ifnextchar[{\basiceenear}{\basiceenear[211]}}%
+
+% basic east-east-north-east arrow with upper name
+\def\basicEenear[#1]#2{\EENEAR{#2}{}{#100}}%
+
+% east-east-north-east arrow with upper name
+\newcommand{\Eenear}{\@ifnextchar[{\basicEenear}{\basicEenear[211]}}%
+
+% basic east-east-north-east arrow with lower name
+\def\basiceeneaR[#1]#2{\EENEAR{}{#2}{#100}}%
+
+% east-east-north-east arrow with lower name
+\newcommand{\eeneaR}{\@ifnextchar[{\basiceeneaR}{\basiceeneaR[211]}}%
+
+% EAST-EAST-SOUTH-EAST ARROWS
+% default length: 21100 units
+
+% \EESEAR{f}{g}{n} draws an east-east-south-east arrow with names f, g
+% and length n units
+\newcommand{\EESEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\line(3,-1){#3}}%
+\put(\Y,-\Z){\eesehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic east-east-south-east arrow
+\def\basiceesear[#1]{\EESEAR{}{}{#100}}%
+
+% east-east-south-east arrow
+\newcommand{\eesear}{\@ifnextchar[{\basiceesear}{\basiceesear[211]}}%
+
+% basic east-east-south-east arrow with upper name
+\def\basicEesear[#1]#2{\EESEAR{#2}{}{#100}}%
+
+% east-east-south-east arrow with upper name
+\newcommand{\Eesear}{\@ifnextchar[{\basicEesear}{\basicEesear[211]}}%
+
+% basic east-east-south-east arrow with lower name
+\def\basiceeseaR[#1]#2{\EESEAR{}{#2}{#100}}%
+
+% east-east-south-east arrow with lower name
+\newcommand{\eeseaR}{\@ifnextchar[{\basiceeseaR}{\basiceeseaR[211]}}%
+
+% WEST-WEST-NORTH-WEST ARROWs
+% default length: 21100 units
+
+% \WWNWAR{f}{g}{n} draws a west-west-north-west arrow with names f, g
+% and length n units
+\newcommand{\WWNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\line(-3,1){#3}}%
+\put(-\Y,\Z){\wwnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic west-west-north-west arrow
+\def\basicwwnwar[#1]{\WWNWAR{}{}{#100}}%
+
+% west-west-north-west arrow
+\newcommand{\wwnwar}{\@ifnextchar[{\basicwwnwar}{\basicwwnwar[211]}}%
+
+% basic west-west-north-west arrow with upper name
+\def\basicWwnwar[#1]#2{\WWNWAR{#2}{}{#100}}%
+
+% west-west-north-west arrow with upper name
+\newcommand{\Wwnwar}{\@ifnextchar[{\basicWwnwar}{\basicWwnwar[211]}}%
+
+% basic west-west-north-west arrow with lower name
+\def\basicwwnwaR[#1]#2{\WWNWAR{}{#2}{#100}}%
+
+% west-west-north-west arrow with lower name
+\newcommand{\wwnwaR}{\@ifnextchar[{\basicwwnwaR}{\basicwwnwaR[211]}}%
+
+% WEST-WEST-SOUTH-WEST ARROWS
+% default length: 21100 units
+
+% \WWSWAR{f}{g} draws a west-west-south-west arrow with names f, g
+\newcommand{\WWSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\line(-3,-1){#3}}%
+\put(-\Y,-\Z){\wwswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic west-west-south-west arrow
+\def\basicwwswar[#1]{\WWSWAR{}{}{#100}}%
+
+% west-west-south-west arrow
+\newcommand{\wwswar}{\@ifnextchar[{\basicwwswar}{\basicwwswar[211]}}%
+
+% basic west-west-south-west arrow with upper name
+\def\basicWwswar[#1]#2{\WWSWAR{#2}{}{#100}}%
+
+% west-west-south-west arrow with upper name
+\newcommand{\Wwswar}{\@ifnextchar[{\basicWwswar}{\basicWwswar[211]}}%
+
+% basic west-west-south-west arrow with lower name
+\def\basicwwswaR[#1]#2{\WWSWAR{}{#2}{#100}}%
+
+% west-west-south-west arrow with lower name
+\newcommand{\wwswaR}{\@ifnextchar[{\basicwwswaR}{\basicwwswaR[211]}}%
+
+
+% NORTH-NORTH-NORTH-EAST ARROWS
+% default length: 7100 units
+
+% \NNNEAR{f}{g}{n} draws a north-north-north-east arrow with names f, g
+% and length n units
+\newcommand{\NNNEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\multiply \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\line(1,3){#3}}%
+\put(\Y,\Z){\nnnehead}%
+\truex{100}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic north-north-north-east arrow
+\def\basicnnnear[#1]{\NNNEAR{}{}{#100}}%
+
+% north-north-north-east arrow
+\newcommand{\nnnear}{\@ifnextchar[{\basicnnnear}{\basicnnnear[71]}}%
+
+% basic north-north-north-east arrow with upper name
+\def\basicNnnear[#1]#2{\NNNEAR{#2}{}{#100}}%
+
+% north-north-north-east arrow with upper name
+\newcommand{\Nnnear}{\@ifnextchar[{\basicNnnear}{\basicNnnear[71]}}%
+
+% basic north-north-north-east arrow with lower name
+\def\basicnnneaR[#1]#2{\NNNEAR{}{#2}{#100}}%
+
+% north-north-north-east arrow with lower name
+\newcommand{\nnneaR}{\@ifnextchar[{\basicnnneaR}{\basicnnneaR[71]}}%
+
+% SOUTH-SOUTH-SOUTH-WEST ARROWS
+% default length: 7100 units
+
+% \SSSWAR{f}{g}{n} draws a south-south-south-west arrow with names f, g
+% and length n units
+\newcommand{\SSSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\multiply \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\line(-1,-3){#3}}%
+\put(-\Y,-\Z){\ssswhead}%
+\truex{100}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic south-south-south-west arrow
+\def\basicssswar[#1]{\SSSWAR{}{}{#100}}%
+
+% south-south-south-west arrow
+\newcommand{\ssswar}{\@ifnextchar[{\basicssswar}{\basicssswar[71]}}%
+
+% basic south-south-south-west arrow with upper name
+\def\basicSsswar[#1]#2{\SSSWAR{#2}{}{#100}}%
+
+% south-south-south-west arrow with upper name
+\newcommand{\Ssswar}{\@ifnextchar[{\basicSsswar}{\basicSsswar[71]}}%
+
+% basic south-south-south-west arrow with lower name
+\def\basicssswaR[#1]#2{\SSSWAR{}{#2}{#100}}%
+
+% south-south-south-west arrow with lower name
+\newcommand{\ssswaR}{\@ifnextchar[{\basicssswaR}{\basicssswaR[71]}}%
+
+% SOUTH-SOUTH-SOUTH-EAST ARROWS
+% default length: 7100 units
+
+% \SSSEAR{f}{g}{n} draws a south-south-south-east arrow with names f, g
+% and length n units
+\newcommand{\SSSEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\multiply \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\line(1,-3){#3}}%
+\put(\Y,-\Z){\sssehead}%
+\truex{200}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic south-south-south-east arrow
+\def\basicsssear[#1]{\SSSEAR{}{}{#100}}%
+
+% south-south-south-east arrow
+\newcommand{\sssear}{\@ifnextchar[{\basicsssear}{\basicsssear[71]}}%
+
+% basic south-south-south-east arrow with upper name
+\def\basicSssear[#1]#2{\SSSEAR{#2}{}{#100}}%
+
+% south-south-south-east arrow with upper name
+\newcommand{\Sssear}{\@ifnextchar[{\basicSssear}{\basicSssear[71]}}%
+
+% basic south-south-south-east arrow with lower name
+\def\basicssseaR[#1]#2{\SSSEAR{}{#2}{#100}}%
+
+% south-south-south-east arrow with lower name
+\newcommand{\ssseaR}{\@ifnextchar[{\basicssseaR}{\basicssseaR[71]}}%
+
+% NORTH-NORTH-NORTH-WEST ARROWS
+% default length: 7100 units
+
+% \NNNWAR{f}{g}{n} draws a north-north-north-west arrow with names f, g
+% and length n units
+\newcommand{\NNNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\multiply \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\line(-1,3){#3}}%
+\put(-\Y,\Z){\nnnwhead}%
+\truex{200}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic north-north-north-west arrow
+\def\basicnnnwar[#1]{\NNNWAR{}{}{#100}}%
+
+% north-north-north-west arrow
+\newcommand{\nnnwar}{\@ifnextchar[{\basicnnnwar}{\basicnnnwar[71]}}%
+
+% basic north-north-north-west arrow with upper name
+\def\basicNnnwar[#1]#2{\NNNWAR{#2}{}{#100}}%
+
+% north-north-north-west arrow with upper name
+\newcommand{\Nnnwar}{\@ifnextchar[{\basicNnnwar}{\basicNnnwar[71]}}%
+
+% basic north-north-north-west arrow with lower name
+\def\basicnnnwaR[#1]#2{\NNNWAR{}{#2}{#100}}%
+
+% north-north-north-west arrow with lower name
+\newcommand{\nnnwaR}{\@ifnextchar[{\basicnnnwaR}{\basicnnnwaR[71]}}%
+
+% NORTH-EAST-EAST-NORTH-EAST ARROWS
+% default length: 21500 units
+
+% \NEENEAR{f}{g}{n} draws a north-east-east-north-east arrow with names f, g
+% and length n units
+\newcommand{\NEENEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\line(3,2){#3}}%
+\put(\Y,\Z){\neenehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic north-east-east-north-east arrow
+\def\basicneenear[#1]{\NEENEAR{}{}{#100}}%
+
+% north-east-east-north-east arrow
+\newcommand{\neenear}{\@ifnextchar[{\basicneenear}{\basicneenear[215]}}%
+
+% basic north-east-east-north-east arrow with upper name
+\def\basicNeenear[#1]#2{\NEENEAR{#2}{}{#100}}%
+
+% north-east-east-north-east arrow with upper name
+\newcommand{\Neenear}{\@ifnextchar[{\basicNeenear}{\basicNeenear[215]}}%
+
+% basic north-east-east-north-east arrow with lower name
+\def\basicneeneaR[#1]#2{\NEENEAR{}{#2}{#100}}%
+
+% north-east-east-north-east arrow with lower name
+\newcommand{\neeneaR}{\@ifnextchar[{\basicneeneaR}{\basicneeneaR[215]}}%
+
+% SOUTH-EAST-EAST-SOUTH-EAST ARROWS
+% DEFAULT LENGTH: 21500 UNITS
+
+% \SEESEAR{f}{g} draws an sout-east-east-south-east arrow with names f, g
+% and length n units
+\newcommand{\SEESEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\line(3,-2){#3}}%
+\put(\Y,-\Z){\seesehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic south-east-east-south-east arrow
+\def\basicseesear[#1]{\SEESEAR{}{}{#100}}%
+
+% south-east-east-south-east arrow
+\newcommand{\seesear}{\@ifnextchar[{\basicseesear}{\basicseesear[215]}}%
+
+% basic south-east-east-south-east arrow with upper name
+\def\basicSeesear[#1]#2{\SEESEAR{#2}{}{#100}}%
+
+% south-east-east-south-east arrow with upper name
+\newcommand{\Seesear}{\@ifnextchar[{\basicSeesear}{\basicSeesear[215]}}%
+
+% basic south-east-east-south-east arrow with lower name
+\def\basicseeseaR[#1]#2{\SEESEAR{}{#2}{#100}}%
+
+% south-east-east-south-east arrow with lower name
+\newcommand{\seeseaR}{\@ifnextchar[{\basicseeseaR}{\basicseeseaR[215]}}%
+
+% NORTH-WEST-WEST-NORTH-WEST ARROWS
+% default length: 21500 units
+
+% \NWWNWAR{f}{g}{n} draws a north-west-west-north-west arrow with names f, g
+% and length n units
+\newcommand{\NWWNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\line(-3,2){#3}}%
+\put(-\Y,\Z){\nwwnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic north-west-west-north-west arrow
+\def\basicnwwnwar[#1]{\NWWNWAR{}{}{#100}}%
+
+% north-west-west-north-west arrow
+\newcommand{\nwwnwar}{\@ifnextchar[{\basicnwwnwar}{\basicnwwnwar[215]}}%
+
+% basic north-west-west-north-west arrow with upper name
+\def\basicNwwnwar[#1]#2{\NWWNWAR{#2}{}{#100}}%
+
+% north-west-west-north-west arrow with upper name
+\newcommand{\Nwwnwar}{\@ifnextchar[{\basicNwwnwar}{\basicNwwnwar[215]}}%
+
+% basic north-west-west-north-west arrow with lower name
+\def\basicnwwnwaR[#1]#2{\NWWNWAR{}{#2}{#100}}%
+
+% north-west-west-north-west arrow with lower name
+\newcommand{\nwwnwaR}{\@ifnextchar[{\basicnwwnwaR}{\basicnwwnwaR[215]}}%
+
+% SOUTH-WEST-WEST-SOUTH-WEST ARROWS
+% default length: 21500 units
+
+% \SWWSWAR{f}{g}{n} draws a south-west-west-south-west arrow with names f, g
+% and length n units
+\newcommand{\SWWSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\line(-3,-2){#3}}%
+\put(-\Y,-\Z){\swwswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic south-west-west-south-west arrow
+\def\basicswwswar[#1]{\SWWSWAR{}{}{#100}}%
+
+% south-west-west-south-west arrow
+\newcommand{\swwswar}{\@ifnextchar[{\basicswwswar}{\basicswwswar[215]}}%
+
+% basic south-west-west-south-west arrow with upper name
+\def\basicSwwswar[#1]#2{\SWWSWAR{#2}{}{#100}}%
+
+% south-west-west-south-west arrow with upper name
+\newcommand{\Swwswar}{\@ifnextchar[{\basicSwwswar}{\basicSwwswar[215]}}%
+
+% basic south-west-west-south-west arrow with lower name
+\def\basicswwswaR[#1]#2{\SWWSWAR{}{#2}{#100}}%
+
+% south-west-west-south-west arrow with lower name
+\newcommand{\swwswaR}{\@ifnextchar[{\basicswwswaR}{\basicswwswaR[215]}}%
+
+
+% NORTH-EAST-NORTH-NORTH-EAST ARROWS
+% default length 14300 units
+
+% \NENNEAR{f}{g}{n} draws a north-east-north-north-east arrow with names f, g
+% and length n units
+\newcommand{\NENNEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\multiply \Z by 3%
+\divide \Z by 4%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\line(2,3){#3}}%
+\put(\Y,\Z){\nennehead}%
+\truex{100}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic north-east-north-north-east arrow
+\def\basicnennear[#1]{\NENNEAR{}{}{#100}}%
+
+% north-east-north-north-east arrow
+\newcommand{\nennear}{\@ifnextchar[{\basicnennear}{\basicnennear[143]}}%
+
+% basic north-east-north-north-east arrow with upper name
+\def\basicNennear[#1]#2{\NENNEAR{#2}{}{#100}}%
+
+% north-east-north-north-east arrow with upper name
+\newcommand{\Nennear}{\@ifnextchar[{\basicNennear}{\basicNennear[143]}}%
+
+% basic north-east-north-north-east arrow with lower name
+\def\basicnenneaR[#1]#2{\NENNEAR{}{#2}{#100}}%
+
+% north-east-north-north-east arrow with lower name
+\newcommand{\nenneaR}{\@ifnextchar[{\basicnenneaR}{\basicnenneaR[143]}}%
+
+% SOUTH-WEST-SOUTH-SOUTH-WEST ARROWS
+% default length: 14300 units
+
+% \SWSSWAR{f}{g}{n} draws a south-west-south-south-west arrow with names f, g
+% and length n units
+\newcommand{\SWSSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\multiply \Z by 3%
+\divide \Z by 4%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\line(-2,-3){#3}}%
+\put(-\Y,-\Z){\swsswhead}%
+\truex{100}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic south-west-south-south-west arrow
+\def\basicswsswar[#1]{\SWSSWAR{}{}{#100}}%
+
+% south-west-south-south-west arrow
+\newcommand{\swsswar}{\@ifnextchar[{\basicswsswar}{\basicswsswar[143]}}%
+
+% basic south-west-south-south-west arrow with upper name
+\def\basicSwsswar[#1]#2{\SWSSWAR{#2}{}{#100}}%
+
+% south-west-south-south-west arrow with upper name
+\newcommand{\Swsswar}{\@ifnextchar[{\basicSwsswar}{\basicSwsswar[143]}}%
+
+% basic south-west-south-south-west arrow with lower name
+\def\basicswsswaR[#1]#2{\SWSSWAR{}{#2}{#100}}%
+
+% south-west-south-south-west arrow with lower name
+\newcommand{\swsswaR}{\@ifnextchar[{\basicswsswaR}{\basicswsswaR[143]}}%
+
+% SOUT-EAST-SOUTH-SOUTH-EAST ARROWS
+% default length: 14300 units
+
+% \SESSEAR{f}{g}{n} draws a south-east-south-south-east arrow with names f, g
+% and length n units
+\newcommand{\SESSEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\multiply \Z by 3%
+\divide \Z by 4%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\line(2,-3){#3}}%
+\put(\Y,-\Z){\sessehead}%
+\truex{200}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic south-east-south-south-east arrow
+\def\basicsessear[#1]{\SESSEAR{}{}{#100}}%
+
+% south-east-south-south-east arrow
+\newcommand{\sessear}{\@ifnextchar[{\basicsessear}{\basicsessear[143]}}%
+
+% basic south-east-south-south-east arrow with upper name
+\def\basicSessear[#1]#2{\SESSEAR{#2}{}{#100}}%
+
+% south-east-south-south-east arrow with upper name
+\newcommand{\Sessear}{\@ifnextchar[{\basicSessear}{\basicSessear[143]}}%
+
+% basic south-east-south-south-east arrow with lower name
+\def\basicsesseaR[#1]#2{\SESSEAR{}{#2}{#100}}%
+
+% south-east-south-south-east arrow with lower name
+\newcommand{\sesseaR}{\@ifnextchar[{\basicsesseaR}{\basicsesseaR[143]}}%
+
+% NORTH-WEST-NORTH-NORTH-WEST ARROWS
+% default length: 14300 units
+
+% \NWNNWAR{f}{g}{n} draws a north-west-north-north-west arrow with names f, g
+% and length n units
+\newcommand{\NWNNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\multiply \Z by 3%
+\divide \Z by 4%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\line(-2,3){#3}}%
+\put(-\Y,\Z){\nwnnwhead}%
+\truex{200}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic north-west-north-north-west arrow
+\def\basicnwnnwar[#1]{\NWNNWAR{}{}{#100}}%
+
+% north-west-north-north-west arrow
+\newcommand{\nwnnwar}{\@ifnextchar[{\basicnwnnwar}{\basicnwnnwar[143]}}%
+
+% basic north-west-north-north-west arrow with upper name
+\def\basicNwnnwar[#1]#2{\NWNNWAR{#2}{}{#100}}%
+
+% north-west-north-north-west arrow with upper name
+\newcommand{\Nwnnwar}{\@ifnextchar[{\basicNwnnwar}{\basicNwnnwar[143]}}%
+
+% basic north-west-north-north-west arrow with lower name
+\def\basicnwnnwaR[#1]#2{\NWNNWAR{}{#2}{#100}}%
+
+% north-west-north-north-west arrow with lower name
+\newcommand{\nwnnwaR}{\@ifnextchar[{\basicnwnnwaR}{\basicnwnnwaR[143]}}%
+
+% HORIZONTAL CURVED ARROWS
+
+% The following commands produce horizontal curved arrows
+% default length: 160 units
+
+% North\East curved arrow with name [1] and length [2]x100 units
+\newcommand{\Necurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(0,\value{x}){\oval(#200,\value{y})[t]}%
+\put(0,\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
+\put(#200,0){\line(0,-1){\value{z}}}%
+\put(#200,-\value{z}){\shead}%
+\put(0,0){\line(0,-1){\value{z}}}\end{picture}}}%
+\truex{2500}%
+\put(0,\value{x}){\makebox(0,0)[b]{${#1}$}}%
+\end{picture}}%
+
+% basic north\east curved arrow
+\def\basicnecurvar[#1]{\Necurve{}{#1}}
+
+% north\east curved arrow
+\newcommand{\necurvar}{\@ifnextchar[{\basicnecurvar}{\basicnecurvar[160]}}%
+
+% basic north\east curved arrow with name
+\def\basicNecurvar[#1]#2{\Necurve{#2}{#1}}%
+
+% north\east curved arrow with name
+\newcommand{\Necurvar}{\@ifnextchar[{\basicNecurvar}{\basicNecurvar[160]}}%
+\let\necurvaR=\Necurvar
+
+% North\West curved arrow with name [1] and length [2]x100 units
+\newcommand{\Nwcurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(0,\value{x}){\oval(#200,\value{y})[t]}%
+\put(0,\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
+\put(#200,0){\line(0,-1){\value{z}}}%
+\put(0,0){\line(0,-1){\value{z}}}%
+\put(0,-\value{z}){\shead}%
+\end{picture}}}%
+\truex{2500}%
+\put(0,\value{x}){\makebox(0,0)[b]{${#1}$}}%
+\end{picture}}%
+
+% basic north\west curved arrow
+\def\basicnwcurvar[#1]{\Nwcurve{}{#1}}
+
+% north\west curved arrow
+\newcommand{\nwcurvar}{\@ifnextchar[{\basicnwcurvar}{\basicnwcurvar[160]}}%
+
+% basic north\west curved arrow with name
+\def\basicNwcurvar[#1]#2{\Nwcurve{#2}{#1}}%
+
+% north\west curved arrow with name
+\newcommand{\Nwcurvar}{\@ifnextchar[{\basicNwcurvar}{\basicNwcurvar[160]}}%
+\let\nwcurvaR=\Nwcurvar
+
+% South\East curved arrow with name [1] and length [2]x100 units
+\newcommand{\Securve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(0,-\value{x}){\oval(#200,\value{y})[b]}%
+\put(0,-\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
+\put(#200,0){\line(0,1){\value{z}}}%
+\put(0,0){\line(0,1){\value{z}}}%
+\put(#200,\value{z}){\nhead}%
+\end{picture}}}%
+\truex{2500}%
+\put(0,-\value{x}){\makebox(0,0)[t]{${#1}$}}%
+\end{picture}}%
+
+% basic south\east curved arrow
+\def\basicsecurvar[#1]{\Securve{}{#1}}
+
+% south\east curved arrow
+\newcommand{\securvar}{\@ifnextchar[{\basicsecurvar}{\basicsecurvar[160]}}%
+
+% basic south\east curved arrow with name
+\def\basicSecurvar[#1]#2{\Securve{#2}{#1}}%
+
+% south\east curved arrow with name
+\newcommand{\Securvar}{\@ifnextchar[{\basicSecurvar}{\basicSecurvar[160]}}%
+\let\securvaR=\Securvar
+
+% South\West curved arrow with name [1] and length [2]x100 units
+\newcommand{\Swcurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(0,-\value{x}){\oval(#200,\value{y})[b]}%
+\put(0,-\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
+\put(#200,0){\line(0,1){\value{z}}}%
+\put(0,0){\line(0,1){\value{z}}}%
+\put(0,\value{z}){\nhead}%
+\end{picture}}}%
+\truex{2500}%
+\put(0,-\value{x}){\makebox(0,0)[t]{${#1}$}}%
+\end{picture}}%
+
+% basic south\west curved arrow
+\def\basicswcurvar[#1]{\Swcurve{}{#1}}
+
+% south\west curved arrow
+\newcommand{\swcurvar}{\@ifnextchar[{\basicswcurvar}{\basicswcurvar[160]}}%
+
+% basic south\west curved arrow with name
+\def\basicSwcurvar[#1]#2{\Swcurve{#2}{#1}}%
+
+% south\west curved arrow with name
+\newcommand{\Swcurvar}{\@ifnextchar[{\basicSwcurvar}{\basicSwcurvar[160]}}%
+\let\swcurvaR=\Swcurvar
+
+% VERTICAL CURVED ARROWS
+
+% The following commands produce vertical curved arrows
+% default length: 160pt
+
+% East\South curved arrow with name [1] and length [2]x100 units
+\newcommand{\Escurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1400}\truey{2000}\truez{200}%
+\put(\value{x},0){\oval(\value{y},#200)[r]}%
+\put(\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
+\put(0,0){\line(-1,0){\value{z}}}%
+\put(0,#200){\line(-1,0){\value{z}}}%
+\put(-\value{z},0){\whead}%
+\end{picture}}}%
+\truex{2500}%
+\put(\value{x},0){\makebox(0,0)[l]{${#1}$}}%
+\end{picture}}%
+
+% basic east\south curved arrow
+\def\basicescurvar[#1]{\Escurve{}{#1}}
+
+% east\south curved arrow
+\newcommand{\escurvar}{\@ifnextchar[{\basicescurvar}{\basicescurvar[160]}}%
+
+% basic east\south curved arrow with name
+\def\basicEscurvar[#1]#2{\Escurve{#2}{#1}}%
+
+% east\south curved arrow with name
+\newcommand{\Escurvar}{\@ifnextchar[{\basicEscurvar}{\basicEscurvar[160]}}%
+\let\escurvaR=\Escurvar
+
+% East\North curved arrow with name [1] and length [2]x100 units
+\newcommand{\Encurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1400}\truey{2000}\truez{200}%
+\put(\value{x},0){\oval(\value{y},#200)[r]}%
+\put(\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
+\put(0,0){\line(-1,0){\value{z}}}%
+\put(0,#200){\line(-1,0){\value{z}}}%
+\put(-\value{z},#200){\whead}%
+\end{picture}}}%
+\truex{2500}%
+\put(\value{x},0){\makebox(0,0)[l]{${#1}$}}%
+\end{picture}}%
+
+% basic east\north curved arrow
+\def\basicencurvar[#1]{\Encurve{}{#1}}
+
+% east\north curved arrow
+\newcommand{\encurvar}{\@ifnextchar[{\basicencurvar}{\basicencurvar[160]}}%
+
+% basic east\north curved arrow with name
+\def\basicEncurvar[#1]#2{\Encurve{#2}{#1}}%
+
+% east\north curved arrow with name
+\newcommand{\Encurvar}{\@ifnextchar[{\basicEncurvar}{\basicEncurvar[160]}}%
+\let\encurvaR=\Encurvar
+
+% West\South curved arrow with name [1] and length [2]x100 units
+\newcommand{\Wscurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(-\value{x},0){\oval(\value{y},#200)[l]}%
+\put(-\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
+\put(0,0){\line(1,0){\value{z}}}%
+\put(0,#200){\line(1,0){\value{z}}}%
+\put(\value{z},0){\ehead}%
+\end{picture}}}%
+\truex{2400}%
+\put(-\value{x},0){\makebox(0,0)[r]{${#1}$}}%
+\end{picture}}%
+
+% basic west\south curved arrow
+\def\basicwscurvar[#1]{\Wscurve{}{#1}}
+
+% west\south curved arrow
+\newcommand{\wscurvar}{\@ifnextchar[{\basicwscurvar}{\basicwscurvar[160]}}%
+
+% basic west\south curved arrow with name
+\def\basicWscurvar[#1]#2{\Wscurve{#2}{#1}}%
+
+% west\south curved arrow with name
+\newcommand{\Wscurvar}{\@ifnextchar[{\basicWscurvar}{\basicWscurvar[160]}}%
+\let\wscurvaR=\Wscurvar
+
+% West\North curved arrow with name [1] and length [2]x100 units
+\newcommand{\Wncurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(-\value{x},0){\oval(\value{y},#200)[l]}%
+\put(-\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
+\put(0,0){\line(1,0){\value{z}}}%
+\put(\value{z},#200){\ehead}%
+\put(0,#200){\line(1,0){\value{z}}}%
+\end{picture}}}%
+\truex{2400}%
+\put(-\value{x},0){\makebox(0,0)[r]{${#1}$}}%
+\end{picture}}%
+
+% basic west\north curved arrow
+\def\basicwncurvar[#1]{\Wncurve{}{#1}}
+
+% west\north curved arrow
+\newcommand{\wncurvar}{\@ifnextchar[{\basicwncurvar}{\basicwncurvar[160]}}%
+
+% basic west\north curved arrow with name
+\def\basicWncurvar[#1]#2{\Wncurve{#2}{#1}}%
+
+% west\north curved arrow with name
+\newcommand{\Wncurvar}{\@ifnextchar[{\basicWncurvar}{\basicWncurvar[160]}}%
+\let\wncurvaR=\Wncurvar
+
+\catcode`\@=12
diff --git a/macros/generic/diagrams/borceux/diagram/MaxiDiagram b/macros/generic/diagrams/borceux/diagram/MaxiDiagram
new file mode 100644
index 0000000000..c5d3537322
--- /dev/null
+++ b/macros/generic/diagrams/borceux/diagram/MaxiDiagram
@@ -0,0 +1,10213 @@
+% DIAGRAM MACROS (version 3.1)
+% MAXI-DIAGRAM FILE
+% FILE DIAGRAM AUGMENTED WITH triar, triadjar (with or without names)
+% AND quadriar, quadriadjar, quintiar, quintiadjar (without names)
+
+\catcode`\@=11
+
+%%%%% FIXING SOME PARAMETERS
+
+%%% Fixing the printerresolution
+%%% unit = 1 dpi
+\newcount\printerresolution
+\global\printerresolution=300
+
+%%% Fixing the length of a segment in an arrowhead
+%%% unit = 0.01pt
+\newcount\headsize
+\global\headsize=450
+
+%%% Fixing the thickness of an arrowhead
+%%% value = 1/5 of the font size
+\font\dotfont = lcircle10 at 3pt
+
+%%% Fixing the distance between the two heads of an epimorphism
+%%% unit = 0.01pt
+\newcount\epihead
+\global\epihead=200
+
+%%% Fixing the default scaling factor for diagrams
+\newcount\defaultscale
+\def\setdefaultscale#1{\global\defaultscale=#1}
+\setdefaultscale{100}
+
+\newcount\actualtextarrowspace
+\newcount\actualtextarrowlength
+
+% \computetextparameters computes the parameters
+% required to design a text arrow
+\newcommand{\computetextparameters}%
+{\global\actualtextarrowspace=\textarrowlength%
+\global\advance\actualtextarrowspace by 3%
+\global\actualtextarrowlength=\textarrowlength%
+\global\multiply\actualtextarrowlength by 100}
+
+%%% Fixing the default length of text arrows
+\newcount\textarrowlength
+\def\settextarrowlength#1{\global\textarrowlength=#1%
+\computetextparameters}
+\settextarrowlength{20}
+
+\newcount\actualdisplayarrowspace
+\newcount\actualdisplayarrowlength
+
+% \computedisplayparameters computes the parameters
+% required to design a displayed arrow
+\newcommand{\computedisplayparameters}%
+{\global\actualdisplayarrowspace=\displayarrowlength%
+\global\advance\actualdisplayarrowspace by 3%
+\global\actualdisplayarrowlength=\displayarrowlength%
+\global\multiply\actualdisplayarrowlength by 100}
+
+%%% Fixing the default length of displayed arrows
+\newcount\displayarrowlength
+\def\setdisplayarrowlength#1{\global\displayarrowlength=#1%
+\computedisplayparameters}
+\setdisplayarrowlength{30}
+
+
+% ERROR MESSAGES
+
+% Checking the next token without gobbling blanks
+\def\@ifnexttok#1#2#3{\let\@tempe #1\def\@tempa{#2}\def\@tempb{#3}%
+\futurelet\@tempc\@ifntok}
+\def\@ifntok{\ifx \@tempc \@tempe\let\@tempd\@tempa\else\let\@tempd\@tempb\fi%
+\@tempd}
+
+% \@diagramerror{MSG}{HLP}: Types a Diagram error message MSG and gives an error
+% halt with error help message HLP.
+\def\@diagramerror#1#2{%
+\edef\@@tempc{#2}\expandafter\errhelp\expandafter{\@@tempc}%
+\typeout{Diagram error. \space See User's guide for explanation.^^J
+ \space\@spaces\@spaces\@spaces Type \space H <return> \space for
+ immediate help.}\errmessage{#1}}
+
+\newif\ifdiagram
+
+% error test and message for text arrows
+\def\testtextmode{%
+\ifdiagram\@diagramerror{Text arrows are not allowed in diagrams}{Here you
+should use east or west diagram arrows, not forward or backward text arrows.
+Try proceeding now, typeset could succeed but with unpredictable output.}
+\else\ifmmode\relax\else%
+\@diagramerror{Missing \string$}{Text arrows should be introduced in math mode.
+Try proceeding now, typeset could succeed but output could not be what you expected.}\fi\fi}
+
+% error test and message for diagram arrows
+\def\testdiagrammode{\ifdiagram\relax\else
+\@diagramerror{Diagram arrows are not allowed in formulas}{Here you
+should use forward or backward text arrows, not diagram arrows. Proceeding
+could work with unpredictable output, but overflow arithmetic
+could also occur.}\fi}
+
+% error test and message for diagrams in math mode
+\def\checkmode{\ifmmode\@diagramerror{Wrong mode: no diagrams
+allowed in math mode.}{You should leave math mode before
+introducing your diagram. All items in the diagram will automatically be
+processed in math mode.}\else\relax\fi\global\diagramtrue}
+
+\global\diagramfalse
+
+%%%%% DESIGING THE ARROW HEADS
+
+%%% Customizing the unitlength for the sake of precision
+\setlength{\unitlength}{0.01pt}
+
+%%% Printing one dot at the required scale
+\def\DOT{{\dotfont q}}
+
+%%% Computing the distance between two dots in an arrowhead
+\newcount\basicstep
+\basicstep=7227
+\global\divide\basicstep by \printerresolution
+
+%%% Computing the number of dots in an arrowhead
+\newcount\numberofsteps
+\numberofsteps=\headsize
+\global\divide\numberofsteps by \basicstep
+
+%%% Producing an arrow head
+\newcommand{\makehead}[3]{%
+\begin{picture}(0,0)%
+\multiput(0,0)(#1,#2){#3}{\DOT}%
+\multiput(0,0)(-#2,#1){#3}{\DOT}%
+\end{picture}}
+
+%%% Creating bitmap images of the arrowheads
+\newcount\xstep
+\newcount\ystep
+
+\newsavebox{\northhead}
+\savebox{\northhead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 7071%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nhead}{\usebox{\northhead}}
+
+\newsavebox{\easthead}
+\savebox{\easthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 7071%
+\divide\xstep by 10000%
+\ystep=-\xstep%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\ehead}{\usebox{\easthead}}
+
+\newsavebox{\southhead}
+\savebox{\southhead}{%
+\xstep=\basicstep%
+\multiply\xstep by 7071%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\shead}{\usebox{\southhead}}
+
+\newsavebox{\westhead}
+\savebox{\westhead}{%
+\xstep=\basicstep%
+\multiply\xstep by 7071%
+\divide\xstep by 10000%
+\ystep=-\xstep%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\whead}{\usebox{\westhead}}
+
+\newsavebox{\northwesthead}
+\savebox{\northwesthead}{%
+\makehead{0}{-\basicstep}{\numberofsteps}}
+\newcommand{\nwhead}{\usebox{\northwesthead}}
+
+\newsavebox{\northeasthead}
+\savebox{\northeasthead}{%
+\makehead{-\basicstep}{0}{\numberofsteps}}
+\newcommand{\nehead}{\usebox{\northeasthead}}
+
+\newsavebox{\southwesthead}
+\savebox{\southwesthead}{%
+\makehead{\basicstep}{0}{\numberofsteps}}
+\newcommand{\swhead}{\usebox{\southwesthead}}
+
+\newsavebox{\southeasthead}
+\savebox{\southeasthead}{%
+\makehead{0}{\basicstep}{\numberofsteps}}
+\newcommand{\sehead}{\usebox{\southeasthead}}
+
+\newsavebox{\eastnortheasthead}
+\savebox{\eastnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 9486%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\enehead}{\usebox{\eastnortheasthead}}
+
+\newsavebox{\northnortheasthead}
+\savebox{\northnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 9486%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nnehead}{\usebox{\northnortheasthead}}
+
+\newsavebox{\southsouthwesthead}
+\savebox{\southsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 9486%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\sswhead}{\usebox{\southsouthwesthead}}
+
+\newsavebox{\westsouthwesthead}
+\savebox{\westsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 9486%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\wswhead}{\usebox{\westsouthwesthead}}
+
+\newsavebox{\westnorthwesthead}
+\savebox{\westnorthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 3162%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\wnwhead}{\usebox{\westnorthwesthead}}
+
+\newsavebox{\eastsoutheasthead}
+\savebox{\eastsoutheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 3162%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\esehead}{\usebox{\eastsoutheasthead}}
+
+\newsavebox{\northnorthwesthead}
+\savebox{\northnorthwesthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 3162%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nnwhead}{\usebox{\northnorthwesthead}}
+
+\newsavebox{\southsoutheasthead}
+\savebox{\southsoutheasthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 3162%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 3%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\ssehead}{\usebox{\southsoutheasthead}}
+
+\newsavebox{\easteastnortheasthead}
+\savebox{\easteastnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 8944%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\eenehead}{\usebox{\easteastnortheasthead}}
+
+\newsavebox{\northnorthnortheasthead}
+\savebox{\northnorthnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 8944%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nnnehead}{\usebox{\northnorthnortheasthead}}
+
+\newsavebox{\southsouthsouthwesthead}
+\savebox{\southsouthsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 8944%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\ssswhead}{\usebox{\southsouthsouthwesthead}}
+
+\newsavebox{\westwestsouthwesthead}
+\savebox{\westwestsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 8944%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\wwswhead}{\usebox{\westwestsouthwesthead}}
+
+\newsavebox{\westwestnorthwesthead}
+\savebox{\westwestnorthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 4472%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\wwnwhead}{\usebox{\westwestnorthwesthead}}
+
+\newsavebox{\easteastsoutheasthead}
+\savebox{\easteastsoutheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 4472%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\eesehead}{\usebox{\easteastsoutheasthead}}
+
+\newsavebox{\northnorthnorthwesthead}
+\savebox{\northnorthnorthwesthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 4472%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nnnwhead}{\usebox{\northnorthnorthwesthead}}
+
+\newsavebox{\southsouthsoutheasthead}
+\savebox{\southsouthsoutheasthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 4472%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 2%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\sssehead}{\usebox{\southsouthsoutheasthead}}
+
+\newsavebox{\northeasteastnortheasthead}
+\savebox{\northeasteastnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 9806%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\neenehead}{\usebox{\northeasteastnortheasthead}}
+
+\newsavebox{\northeastnorthnortheasthead}
+\savebox{\northeastnorthnortheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 9806%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nennehead}{\usebox{\northeastnorthnortheasthead}}
+
+\newsavebox{\southwestsouthsouthwesthead}
+\savebox{\southwestsouthsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 9806%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by 5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\swsswhead}{\usebox{\southwestsouthsouthwesthead}}
+
+\newsavebox{\southwestwestsouthwesthead}
+\savebox{\southwestwestsouthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 9806%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\divide\ystep by -5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\swwswhead}{\usebox{\southwestwestsouthwesthead}}
+
+\newsavebox{\northwestwestnorthwesthead}
+\savebox{\northwestwestnorthwesthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 1961%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nwwnwhead}{\usebox{\northwestwestnorthwesthead}}
+
+\newsavebox{\southeasteastsoutheasthead}
+\savebox{\southeasteastsoutheasthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 1961%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by -5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\seesehead}{\usebox{\southeasteastsoutheasthead}}
+
+\newsavebox{\northwestnorthnorthwesthead}
+\savebox{\northwestnorthnorthwesthead}{%
+\xstep=-\basicstep%
+\multiply\xstep by 1961%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\nwnnwhead}{\usebox{\northwestnorthnorthwesthead}}
+
+\newsavebox{\southeastsouthsoutheasthead}
+\savebox{\southeastsouthsoutheasthead}{%
+\xstep=\basicstep%
+\multiply\xstep by 1961%
+\divide\xstep by 10000%
+\ystep=\xstep%
+\multiply\ystep by 5%
+\makehead{\xstep}{\ystep}{\numberofsteps}}
+\newcommand{\sessehead}{\usebox{\southeastsouthsoutheasthead}}
+
+%%% Restoring the standard unitlength
+\setlength{\unitlength}{1pt}
+
+
+% MACROS FOR MARKED ARROWS
+
+\newsavebox{\isomorphismmark}
+\newcommand{\isomark}[1]{\savebox{\isomorphismmark}{#1}}
+\isomark{$\cong$}
+\newcommand{\isosign}{\usebox{\isomorphismmark}}
+
+\newif\ifuserdist
+\newsavebox{\distributormark}
+\newcommand{\distmark}[1]{\ifx#1\distcircle\userdistfalse\else%
+\userdisttrue\savebox{\distributormark}{#1}\fi}
+\newsavebox{\distributorcircle}
+\savebox{\distributorcircle}{\begin{picture}(0,0)%
+\put(0,0){\circle{4}}\end{picture}}
+\newcommand{\distsign}{\ifuserdist\usebox{\distributormark}\else%
+\usebox{\distributorcircle}\fi}
+\userdistfalse
+
+
+
+% MACROS FOR ADJUSTING THE LENGTH OF MONOMORPHISMS AND EPIMORPHISMS
+
+\newcount\monolength
+\newcount\epilength
+\newcount\bimolength
+\newcount\secondmonolength
+\newcount\secondepilength
+
+\newcount\monotail%
+\global\monotail=\headsize%
+\global\multiply\monotail by 7070%
+\global\divide\monotail by 10000%
+
+\newcount\truemonotail%
+\newcount\trueepihead%
+
+\def\truetail{\truemonotail=\monotail%
+\multiply\truemonotail by 100%
+\divide\truemonotail by \SCALE}
+
+\def\truehead{\trueepihead=\epihead%
+\multiply\trueepihead by 100%
+\divide\trueepihead by \SCALE}
+
+\newcount\Monotail%
+\global\Monotail=\headsize%
+\global\divide\Monotail by 2%
+
+\newcount\Epihead%
+\global\Epihead=\epihead%
+\global\multiply\Epihead by 7070%
+\global\divide\Epihead by 10000%
+
+\newcount\Truemonotail%
+\newcount\Trueepihead%
+
+\def\Truetail{\Truemonotail=\Monotail%
+\multiply\Truemonotail by 100%
+\divide\Truemonotail by \SCALE}%
+
+\def\Truehead{\Trueepihead=\Epihead%
+\multiply\Trueepihead by 100%
+\divide\Trueepihead by \SCALE}
+
+\newcount\MonoTail%
+\global\MonoTail=\headsize%
+\global\multiply\MonoTail by 6324%
+\global\divide\MonoTail by 10000%
+
+\newcount\EpiHead%
+\global\EpiHead=\epihead%
+\global\multiply\EpiHead by 8944%
+\global\divide\EpiHead by 10000%
+
+\newcount\TrueMonoTail%
+\newcount\TrueEpiHead%
+
+\def\TrueTail{\TrueMonoTail=\MonoTail%
+\multiply\TrueMonoTail by 100%
+\divide\TrueMonoTail by \SCALE}%
+
+\def\TrueHead{\TrueEpiHead=\EpiHead%
+\multiply\TrueEpiHead by 100%
+\divide\TrueEpiHead by \SCALE}
+
+\newcount\monotaiL%
+\global\monotaiL=\headsize%
+\global\multiply\monotaiL by 3162%
+\global\divide\monotaiL by 10000%
+
+\newcount\epiheaD%
+\global\epiheaD=\epihead%
+\global\multiply\epiheaD by 4472%
+\global\divide\epiheaD by 10000%
+
+\newcount\truemonotaiL%
+\newcount\trueepiheaD%
+
+\def\truetaiL{\truemonotaiL=\monotaiL%
+\multiply\truemonotaiL by 100%
+\divide\truemonotaiL by \SCALE}%
+
+\def\trueheaD{\trueepiheaD=\epiheaD%
+\multiply\trueepiheaD by 100%
+\divide\trueepiheaD by \SCALE}
+
+
+% INITIALIZATION
+
+\newcount\SCALE%
+
+\newcount\NUMBER%
+
+\newcount\LINE%
+
+\newcount\COLUMN%
+
+\newcount\WIDTH%
+
+\newcount\SOURCE%
+
+\newcount\ARROW%
+
+\newcount\TARGET%
+
+\newcount\ARROWLENGTH%
+
+\newcount\NUMBEROFDOTS%
+
+\newcounter{x}%
+
+\newcounter{y}%
+
+\newcounter{z}%
+
+\newcounter{horizontal}%
+
+\newcounter{vertical}%
+
+\newskip\itemlength%
+
+\newskip\firstitem%
+
+\newskip\seconditem%
+
+\newcommand{\printarrow}{}%
+
+\newcount\X%
+
+\newcount\Y%
+
+\newcount\Z%
+
+
+% MACROS FOR DESIGNING DIAGRAMS
+
+
+% \truex{n} divides n x 100 by the scaling factor and puts the result
+% in counter x
+\newcommand{\truex}[1]{%
+\NUMBER=#1%
+\multiply\NUMBER by 100%
+\divide\NUMBER by \SCALE%
+\setcounter{x}{\NUMBER}}%
+
+% \truey{n} divides n x 100 by the scaling factor and puts the result
+% in counter y
+\newcommand{\truey}[1]{%
+\NUMBER=#1%
+\multiply\NUMBER by 100%
+\divide\NUMBER by \SCALE%
+\setcounter{y}{\NUMBER}}%
+
+% \truez{n} divides n x 100 by the scaling factor and puts the result
+% in counter z
+\newcommand{\truez}[1]{%
+\NUMBER=#1%
+\multiply\NUMBER by 100%
+\divide\NUMBER by \SCALE%
+\setcounter{z}{\NUMBER}}%
+
+
+% \changecounters computes the values of the various parameters required
+% to design an arrow with adjusted length.
+\newcommand{\changecounters}[1]{%
+\SOURCE=\ARROW%
+\ARROW=\TARGET%
+\settowidth{\itemlength}{#1}%
+\ifdim \itemlength > 2800\unitlength%
+\addtolength{\itemlength}{-2800\unitlength}%
+\TARGET=\itemlength%
+\divide\TARGET by 1310%
+\multiply\TARGET by 100%
+\divide\TARGET by \SCALE%
+\else%
+\TARGET=0%
+\fi%
+\ARROWLENGTH=5000%
+\advance\ARROWLENGTH by -\SOURCE%
+\advance\ARROWLENGTH by -\TARGET%
+\divide\ARROWLENGTH by 100%
+\advance\SOURCE by -\TARGET}%
+
+% \initialize initializes the counters required to produce the diagram
+% and defines the formal dimensions of the diagram to be (0,0).
+\newcommand{\initialize}[1]{%
+\LINE=0%
+\COLUMN=0%
+\WIDTH=0%
+\ARROW=0%
+\TARGET=0%
+\changecounters{#1}%
+\renewcommand{\printarrow}{#1}%
+\begin{center}%
+\vspace{2pt}%
+\begin{picture}(0,0)}%
+
+% \DIAGV{n} starts the construction of a diagram scaled by a factor
+% n percent, computes the scaled unit length and the unscaling factor.
+\newcommand{\DIAGV}[2]{%
+\checkmode%
+\SCALE=#1%
+\setlength{\unitlength}{655sp}%
+\multiply\unitlength by \SCALE%
+\divide\unitlength by 100%
+\initialize{\mbox{$#2$}}}%
+
+% \n introduces the next item of the diagram, computes its parameters
+% and prints the previous item.
+\newcommand{\n}[1]{%
+\changecounters{\mbox{$#1$}}%
+\put(\COLUMN,\LINE){\makebox(0,0){\printarrow}}%
+\thinlines%
+\renewcommand{\printarrow}{\mbox{$#1$}}%
+\advance\COLUMN by 4000}%
+
+% \nn prints the last item of a line and starts a new line.
+\newcommand{\nn}[1]{%
+\put(\COLUMN,\LINE){\makebox(0,0){\printarrow}}%
+\thinlines%
+\ifnum \WIDTH < \COLUMN%
+\WIDTH=\COLUMN%
+\else%
+\fi%
+\advance\LINE by -4000%
+\COLUMN=0%
+\ARROW=0%
+\TARGET=0%
+\changecounters{\mbox{$#1$}}%
+\renewcommand{\printarrow}{\mbox{$#1$}}}%
+
+% \conclude prints the last item of the diagram and sets the
+% dimensions of the diagram;
+\newcommand{\conclude}{%
+\put(\COLUMN,\LINE){\makebox(0,0){\printarrow}}%
+\thinlines%
+\ifnum \WIDTH < \COLUMN%
+\WIDTH=\COLUMN%
+\else%
+\fi%
+\setcounter{horizontal}{\WIDTH}%
+\setcounter{vertical}{-\LINE}%
+\end{picture}}%
+
+% \diag prints the last item of the diagram and takes care of the spacing
+\newcommand{\diag}{%
+\conclude%
+\raisebox{0pt}[0pt][\value{vertical}\unitlength]{}%
+\hspace*{\value{horizontal}\unitlength}%
+\vspace{12pt}%
+\end{center}%
+\setlength{\unitlength}{1pt}%
+\global\diagramfalse}%
+
+% \diagv{t}{l}{b} prints the last item of the diagram and
+% adds a t points extra space at the top of the diagram
+% adds a l points extra space at the left of the diagram
+% adds a b points extra space at the bottom of the diagram
+\newcommand{\diagv}[3]{%
+\conclude%
+\NUMBER=#1%
+\rule{0pt}{\NUMBER pt}%
+\hspace*{-#2pt}%
+\raisebox{0pt}[0pt][\value{vertical}\unitlength]{}%
+\hspace*{\value{horizontal}\unitlength}%6
+\NUMBER=#3%
+\advance\NUMBER by 12%
+\vspace*{\NUMBER pt}%
+\end{center}%
+\setlength{\unitlength}{1pt}%
+\global\diagramfalse}%
+
+% \movename(n,m){f} moves the name f of the arrow n points right
+% and m points up.
+\def\movename(#1,#2)#3{%
+\hspace{#1pt}%
+\raisebox{#2pt}[5pt][2pt]{\raisebox{#2pt}{$#3$}}%
+\hspace{-#1pt}}%
+
+% \movearrow(n,m){\...} moves arrow \... n points right
+% and m points up.
+\def\movearrow(#1,#2)#3{%
+\makebox[0pt]{%
+\hspace{#1pt}\hspace{#1pt}%
+\raisebox{#2pt}[0pt][0pt]{\raisebox{#2pt}{$#3$}}}}%
+
+% \movevertex(n,m){A} moves vertex A n points right and m points up
+\def\movevertex(#1,#2)#3{%
+\mbox{\hspace{#1pt}%
+\raisebox{#2pt}{\raisebox{#2pt}{$#3$}}%
+\hspace{-#1pt}}}%
+
+% \movevertexleft{XXX} moves vertex XXX left
+\newcommand{\movevertexleft}[1]{\makebox[2800\unitlength][r]{$#1$}}
+
+% \movevertexright{XXX} moves vertex XXX right
+\newcommand{\movevertexright}[1]{\makebox[2800\unitlength][l]{$#1$}}
+
+% \crosslength{P}{Q} computes the formal dimensions of the
+% superposition of pictures P and Q
+\newcommand{\crosslength}[2]{%
+\settowidth{\firstitem}{#1}%
+\settowidth{\seconditem}{#2}%
+\ifdim\firstitem < \seconditem%
+\itemlength=\seconditem%
+\else%
+\itemlength=\firstitem%
+\fi%
+\divide\itemlength by 2%
+\hspace{\itemlength}}%
+
+% \cross{P}{Q} superposes pictures P and Q
+\newcommand{\cross}[2]{%
+\crosslength{\mbox{$#1$}}{\mbox{$#2$}}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0){$#1$}}%
+\thinlines%
+\put(0,0){\makebox(0,0){$#2$}}%
+\thinlines%
+\end{picture}%
+\crosslength{\mbox{$#1$}}{\mbox{$#2$}}}%
+
+% \bold prints the next arrow in bold-face type
+\newcommand{\bold}{\ifdiagram\thicklines\else\typeout{Sorry: command
+\string\bold does not apply to text arrows; I am ignoring it.}\fi}
+
+% \unbold switches back to normal arrows
+\newcommand{\unbold}{\thinlines}
+
+% SHORTENING THE TYPING OF DIAGRAMS
+
+\def\basicDIAG#1¤{\DIAGV{\defaultscale}{#1}\@ifnexttok¤{\finishline}{\basicn}}
+\def\basicDIAGV[#1]#2¤{\DIAGV{#1}{#2}\@ifnexttok¤{\finishline}{\basicn}}
+\def\basicn#1¤{\n{#1}\@ifnexttok¤{\finishline}{\basicn}}
+\def\basicnn#1¤{\nn{#1}\@ifnexttok¤{\finishline}{\basicn}}
+\def\finishline#1{\@ifnextchar\end{\diag}%
+{\@ifnextchar\spacing{\relax}{\basicnn}}}
+\def\spacing(#1,#2,#3){\diagv{#1}{#2}{#3}}
+
+\newif\ifcaption%
+
+\newenvironment{diagram}{%
+\iffloatdiag\relax\else
+\global\def\diagramcaption##1{%
+\global\captiontrue%
+\global\def\@diagcaption{##1}}%
+\global\def\@diagcaption{}\fi%
+\@ifnextchar[{\basicDIAGV}{\basicDIAG}}%
+{\iffloatdiag\relax\else%
+\ifcaption
+\begin{center}\mbox{}\@diagcaption\end{center}%
+\else\relax\fi\fi\global\captionfalse}
+
+\global\captionfalse
+
+
+% MACROS FOR FLOATING DIAGRAMS
+
+\gdef\@diaglabel{Diagram}
+\gdef\diagramlabel#1{\gdef\@diaglabel{#1}}
+
+\newcounter{Diagram}
+\setcounter{Diagram}{0}
+\def\theDiagram{\@arabic\c@Diagram}
+\def\fps@Diagram{tbp}
+\def\ftype@Diagram{1}
+\def\ext@Diagram{lof}
+\def\fnum@Diagram{\@diaglabel\ \theDiagram}
+\def\Diagram{\@float{Diagram}}
+\let\endDiagram\end@float
+\@namedef{Diagram*}{\@dblfloat{Diagram}}
+\@namedef{endDiagram*}{\end@dblfloat}
+
+\def\setdiagramcounter#1{\@addtoreset{Diagram}{#1}%
+\def\theDiagram{\arabic{#1}.\@arabic\c@Diagram}}
+
+\newif\iffloatdiag
+
+\newenvironment{floatingdiagram}{%
+\global\floatdiagtrue%
+\long\def\@makecaption##1##2{
+ \vskip 0pt
+ \setbox\@tempboxa\hbox{##1##2}
+ \ifdim \wd\@tempboxa >\hsize \unhbox\@tempboxa\par \else \hbox
+to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}%
+\global\def\diagramcaption##1{\global\def\@diagcaption{: ##1}}%
+\global\def\@diagcaption{}%
+\begin{Diagram}[tbp]\begin{diagram}}%
+{\end{diagram}\caption{\@diagcaption}\end{Diagram}%
+\global\floatdiagfalse}
+
+\global\floatdiagfalse
+
+
+% MACROS FOR DRAWING TEXT PICTURES
+
+% moving a name up
+\newcommand{\TUP}[1]{\raisebox{0pt}[0pt][3pt]{}#1}
+
+% moving a name down
+\newcommand{\TDOWN}[1]{\raisebox{0pt}[6pt][0pt]{}#1}
+
+% \tlowername{P}{f} puts the name f under the picture P
+\newcommand{\tlowername}[2]%
+{$\stackrel{\makebox[1pt]{#1}}%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,6)[t]{\makebox[1pt]{$\scriptstyle#2$}}}%
+\end{picture}}$}%
+
+% \tcase{P} draws the picture P with length \textarrowlength pt.
+\newcommand{\tcase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{2.5pt}{#1{\actualtextarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Tcase{P}{f} draws the picture P with upper name f
+% and length \textarrowlength pt.
+\newcommand{\Tcase}[2]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{2.5pt}{$\stackrel{\scriptstyle #2}{#1{\actualtextarrowlength}}$}}%
+\setlength{\unitlength}{1pt}}%
+
+% \tbicase{P} draws the bi-picture P
+% with length \textarrowlength pt.
+\newcommand{\tbicase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{1pt}{#1{\actualtextarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Tbicase{P}{f}{g} draws the bi-picture P with names f, g
+% and length \textarrowlength pt.
+\newcommand{\Tbicase}[3]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{-1pt}%
+{$\stackrel{\scriptstyle #2}%
+{\mbox{\tlowername{#1{\actualtextarrowlength}}%
+{\scriptstyle #3}}}$}}%
+\setlength{\unitlength}{1pt}}%
+
+% \ttricase{P} draws the tri-picture P
+% with length \textarrowlength pt.
+\newcommand{\ttricase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{4pt}{#1{\actualtextarrowlength}%
+{\rule{0pt}{6pt}}{\rule{0pt}{6pt}}{\rule{0pt}{6pt}}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Ttricase{P}{f}{g}{h} draws the tri-picture P with names f, g, h
+% and length \textarrowlength pt.
+\newcommand{\Ttricase}[4]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{4pt}%
+{#1{\actualtextarrowlength}{\rule{0pt}{6pt}\scriptstyle #2}%
+{\rule{0pt}{6pt}\scriptstyle #3}{\rule{0pt}{6pt}\scriptstyle #4}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \tmulticase{P} draws the multi-picture P
+% with length \textarrowlength pt.
+\newcommand{\tmulticase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{1pt}{#1{\actualtextarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+
+% MACROS FOR DRAWING DISPLAYED PICTURES
+
+% moving a name up
+\newcommand{\DUP}[1]{\raisebox{0pt}[0pt][4pt]{}#1}
+
+% moving a name down
+\newcommand{\DDOWN}[1]{\raisebox{0pt}[9pt][0pt]{}#1}
+
+% \dlowername{P}{f} puts the name f under the picture P
+\newcommand{\dlowername}[2]%
+{$\stackrel{\makebox[1pt]{#1}}%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,6)[t]{\makebox[1pt]{$\textstyle#2$}}}%
+\end{picture}}$}%
+
+% \dcase{P} draws the picture P with length \displayarrowlength pt.
+\newcommand{\dcase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{2.5pt}{#1{\actualdisplayarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Dcase{P}{f} draws the picture P with upper name f
+% and length \displayarrowlength pt.
+\newcommand{\Dcase}[2]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{2.5pt}{$\stackrel{\textstyle #2}{#1{\actualdisplayarrowlength}}$}}%
+\setlength{\unitlength}{1pt}}%
+
+% \dbicase{P} draws the bi-picture P
+% with length \displayarrowlength pt.
+\newcommand{\dbicase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{1pt}{#1{\actualdisplayarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Dbicase{P}{f}{g} draws the bi-picture P with names f, g
+% and length \displayarrowlength pt.
+\newcommand{\Dbicase}[3]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{-1pt}%
+{$\stackrel{\textstyle #2}%
+{\mbox{\tlowername{#1{\actualdisplayarrowlength}}%
+{\textstyle #3}}}$}}%
+\setlength{\unitlength}{1pt}}%
+
+% \dtricase{P} draws the tri-picture P
+% with length \displayarrowlength pt.
+\newcommand{\dtricase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{4pt}{#1{\actualdisplayarrowlength}%
+{\rule{0pt}{6pt}}{\rule{0pt}{6pt}}{\rule{0pt}{6pt}}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Dtricase{P}{f}{g}{h} draws the tri-picture P with names f, g, h
+% and length \displayarrowlength pt.
+\newcommand{\Dtricase}[4]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{4pt}%
+{#1{\actualdisplayarrowlength}{\rule{0pt}{6pt}\textstyle #2}%
+{\rule{0pt}{6pt}\textstyle #3}{\rule{0pt}{6pt}\textstyle #4}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \dmulticase{P} draws the multi-picture P
+% with length \displayarrowlength pt.
+\newcommand{\dmulticase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{1pt}{#1{\actualdisplayarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% IN-TEXT ARROWS
+
+% \AR{n} draws an arrow of length n units
+\newcommand{\AR}[1]%
+{\begin{picture}(#1,0)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\end{picture}}%
+
+% \DIST{n} draws a distributor of length n units
+\newcommand{\DIST}[1]%
+{\begin{picture}(#1,0)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}%
+\end{picture}}%
+
+% \DOTAR{n} draws a dotted arrow of length n units
+\newcommand{\DOTAR}[1]%
+{\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by 300%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(#1,0)%
+\multiput(0,0)(300,0){\NUMBEROFDOTS}{\circle*{100}}%
+\put(#1,0){\ehead}%
+\end{picture}}%
+
+% \MONO{n} draws a monomorphism of length n units
+\newcommand{\MONO}[1]%
+{\monolength=#1%
+\advance\monolength by -\monotail%
+\begin{picture}(#1,0)%
+\put(\monotail,0){\line(1,0){\monolength}}%
+\put(#1,0){\ehead}%
+\put(\monotail,0){\ehead}%
+\end{picture}}%
+
+% \EPI{n} draws an epimorphism of length n units
+\newcommand{\EPI}[1]%
+{\epilength=#1%
+\advance\epilength by -\epihead%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-#1,0){\line(1,0){\epilength}}%
+\put(-\epihead,0){\ehead}%
+\put(0,0){\ehead}%
+\end{picture}}%
+
+% \BIMO{n} draws a bimorphism of length n units
+\newcommand{\BIMO}[1]%
+{\monolength=#1%
+\advance\monolength by -\monotail%
+\epilength=\monolength%
+\advance\epilength by -\epihead%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-\monolength,0){\line(1,0){\epilength}}%
+\put(-\monolength,0){\ehead}%
+\put(-\epihead,0){\ehead}%
+\put(0,0){\ehead}%
+\end{picture}}%
+
+% \BIAR{n} draws a pair of arrows of length n units
+\newcommand{\BIAR}[1]%
+{\begin{picture}(#1,700)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,700){\line(1,0){#1}}%
+\put(#1,700){\ehead}%
+\end{picture}}%
+
+% \BIDIST{n} draws a pair of distributors of length n units
+\newcommand{\BIDIST}[1]%
+{\begin{picture}(#1,700)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,700){\line(1,0){#1}}%
+\put(#1,700){\ehead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}%
+\put(\NUMBER,700){\distsign}%
+\end{picture}}%
+
+% \EQL{n} draws an equality of length n units
+\newcommand{\EQL}[1]%
+{\begin{picture}(#1,0)%
+\put(0,100){\line(1,0){#1}}%
+\put(0,-100){\line(1,0){#1}}%
+\end{picture}}%
+
+% \ADJAR{n} draws a pair of adjoint arrows of length n units
+\newcommand{\ADJAR}[1]%
+{\begin{picture}(#1,700)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,700){\line(-1,0){#1}}%
+\put(0,700){\whead}
+\end{picture}}%
+
+% \ADJDIST{n} draws a pair of adjoint distibutors of length n units
+\newcommand{\ADJDIST}[1]%
+{\begin{picture}(#1,700)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,700){\line(-1,0){#1}}%
+\put(0,700){\whead}
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}%
+\put(\NUMBER,700){\distsign}%
+\end{picture}}%
+
+% \TRIAR{n}{f}{g}{h} draws a triple of arrows of length n units
+% and names f, g, h
+\newcommand{\TRIAR}[4]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\mbox{$#2$}\\ \AR{#1}\\%
+\mbox{$#3$}\\ \AR{#1}\\%
+\mbox{$#4$}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \TRIADJAR{n} draws a triple of adjoint arrows of length n units
+% and names f, g, h
+\newcommand{\TRIADJAR}[4]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\mbox{$#2$}\\ \BKAR{#1}\\%
+\mbox{$#3$}\\ \AR{#1}\\%
+\mbox{$#4$}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \QUADRIAR{n} draws a quadruple of arrows of length n units
+\newcommand{\QUADRIAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\AR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \QUADRIADJAR{n} draws a quadruple of adjoint arrows
+% of length n units
+\newcommand{\QUADRIADJAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \QUINTIAR{n} draws a quintuple of arrows of length n units
+\newcommand{\QUINTIAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\AR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \QUINTIADJAR{n} draws a quintuple of adjoint arrows
+% of length n units
+\newcommand{\QUINTIADJAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\AR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% All the following commands produce arrows with length 20pt
+% and scriptstyle names in math mode but arrows with length
+% \displayarrowlength pt and textstyle names in display math mode.
+
+% arrow
+\newcommand{\ar}{\ifinner\tcase{\AR}\else\dcase{\AR}\fi}%
+
+% arrow with upper name [1]
+\newcommand{\Ar}[1]{\ifinner\Tcase{\AR}{#1}\else\Dcase{\AR}{#1}\fi}%
+
+% distributor
+\newcommand{\dist}{\ifinner\tcase{\DIST}\else\dcase{\DIST}\fi}%
+
+% distributor with upper name [1]
+\newcommand{\Dist}[1]{\ifinner\Tcase{\DIST}{\TUP{#1}}%
+\else\Dcase{\DIST}{\TUP{#1}}\fi}%
+
+% dotted arrow
+\newcommand{\dotar}{\ifinner\tcase{\DOTAR}\else\dcase{\DOTAR}\fi}%
+
+% dotted arrow with upper name [1]
+\newcommand{\Dotar}[1]{\ifinner\Tcase{\DOTAR}{#1}%
+\else\Dcase{\DOTAR}{#1}\fi}%
+
+% monomorphism
+\newcommand{\mono}{\ifinner\tcase{\MONO}\else\dcase{\MONO}\fi}%
+
+% monomorphism with upper name [1]
+\newcommand{\Mono}[1]{\ifinner\Tcase{\MONO}{#1}\else\Dcase{\MONO}{#1}\fi}%
+
+% epimorphism
+\newcommand{\epi}{\ifinner\tcase{\EPI}\else\dcase{\EPI}\fi}%
+
+% epimorphism with upper name [1]
+\newcommand{\Epi}[1]{\ifinner\Tcase{\EPI}{#1}\else\Dcase{\EPI}{#1}\fi}%
+
+% bimorphism
+\newcommand{\bimo}{\ifinner\tcase{\BIMO}\else\dcase{\BIMO}\fi}%
+
+% bimorphism with upper name [1]
+\newcommand{\Bimo}[1]{\ifinner\Tcase{\BIMO}{#1}%
+\else\Dcase{\BIMO}{#1}\fi}%
+
+% isomorphism
+\newcommand{\iso}{\ifinner\Tcase{\AR}{\isosign}\else\Dcase{\AR}{\isosign}\fi}%
+
+% isomorphism with upper name [1]
+\newcommand{\Iso}[1]{\ifinner\Tcase{\AR}{\isosign{#1}}%
+\else\Dcase{\AR}{\isosign{#1}}\fi}%
+
+% pair of arrows
+\newcommand{\biar}{\ifinner\tbicase{\BIAR}\else\dbicase{\BIAR}\fi}%
+
+% pair of arrows with names [1],[2]
+\newcommand{\Biar}[2]{\ifinner\Tbicase{\BIAR}{#1}{#2}%
+\else\Dbicase{\BIAR}{#1}{#2}\fi}%
+
+% pair of distributors
+\newcommand{\bidist}{\ifinner\tbicase{\BIDIST}\else\dbicase{\BIDIST}\fi}%
+
+% pair of distributors with names [1],[2]
+\newcommand{\Bidist}[2]{\ifinner\Tbicase{\BIDIST}{\TUP{#1}}{\TDOWN{#2}}%
+\else\Dbicase{\BIDIST}{\DUP{#1}}{\DDOWN{#2}}\fi}%
+
+% equality
+\newcommand{\eql}{\ifinner\tcase{\EQL}\else\dcase{\EQL}\fi}%
+
+% equality with name [1]
+\newcommand{\Eql}[1]{\ifinner\Tcase{\EQL}{\TUP{#1}}%
+\else\Dcase{\EQL}{\DUP{#1}}\fi}%
+
+% pair of adjoint arrows
+\newcommand{\adjar}{\ifinner\tbicase{\ADJAR}\else\dbicase{\ADJAR}\fi}%
+
+% pair of adjoint arrows with names [1],[2]
+\newcommand{\Adjar}[2]{\ifinner\Tbicase{\ADJAR}{#1}{#2}%
+\else\Dbicase{\ADJAR}{#1}{#2}\fi}%
+
+% pair of adjoint distributors
+\newcommand{\adjdist}{\ifinner\tbicase{\ADJDIST}\else\dbicase{\ADJDIST}\fi}%
+
+% pair of adjoint distributors with names [1],[2]
+\newcommand{\Adjdist}[2]{\ifinner\Tbicase{\ADJDIST}{\TUP{#1}}{\TDOWN{#2}}%
+\else\Dbicase{\ADJDIST}{\DUP{#1}}{\DDOWN{#2}}\fi}%
+
+% triple of arrows
+\newcommand{\triar}{\ifinner\ttricase{\TRIAR}\else\dtricase{\TRIAR}\fi}%
+
+% triple of arrows with names [1],[2],[3]
+\newcommand{\Triar}[3]{\ifinner\Ttricase{\TRIAR}{#1}{#2}{#3}%
+\else\Dtricase{\TRIAR}{#1}{#2}{#3}\fi}%
+
+% triple of adjoint arrows
+\newcommand{\triadjar}{\ifinner\ttricase{\TRIADJAR}%
+\else\dtricase{\TRIADJAR}\fi}%
+
+% triple of adjoint arrows with names [1],[2],[3]
+\newcommand{\Triadjar}[3]{\ifinner\Ttricase{\TRIADJAR}{#1}{#2}{#3}%
+\else\Dtricase{\TRIADJAR}{#1}{#2}{#3}\fi}%
+
+% quadruple of arrows
+\newcommand{\quadriar}{\ifinner\tquadricase{\QUADRIAR}%
+\else\dmulticase{\QUADRIAR}\fi}%
+
+% quadruple of adjoint arrows
+\newcommand{\quadriadjar}{\ifinner\tmulticase{\QUADRIADJAR}%
+\else\dmulticase{\QUADRIADJAR}\fi}%
+
+% quintuple of arrows
+\newcommand{\quintiar}{\ifinner\tmulticase{\QUINTIAR}%
+\else\dmulticase{\QUINTIAR}\fi}%
+
+% quintuple of adjoint arrows
+\newcommand{\quintiadjar}{\ifinner\tmulticase{\QUINTIADJAR}%
+\else\dmulticase{\QUINTIADJAR}\fi}%
+
+
+% IN-TEXT BACK ARROWS
+
+% \BKAR{n} draws a pointing back arrow of length n units
+\newcommand{\BKAR}[1]%
+{\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \BKDIST{n} draws a pointing back distributor of length n units
+\newcommand{\BKDIST}[1]%
+{\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}%
+\end{picture}}%
+
+% \BKDOTAR{n} draws a backward dotted arrow
+% of length n units
+\newcommand{\BKDOTAR}[1]%
+{\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by 300%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(#1,0)%
+\multiput(#1,0)(-300,0){\NUMBEROFDOTS}{\circle*{100}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \BKMONO{n} draws a pointing back monomorphism of length n units
+\newcommand{\BKMONO}[1]%
+{\monolength=#1%
+\advance\monolength by -\monotail%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-\monotail,0){\line(-1,0){\monolength}}%
+\put(-\monotail,0){\whead}%
+\put(-#1,0){\whead}%
+\end{picture}}%
+
+% \BKEPI{n} draws a pointing back epimorphism of length n units
+\newcommand{\BKEPI}[1]%
+{\epilength=#1%
+\advance\epilength by -\epihead%
+\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){\epilength}}%
+\put(\epihead,0){\whead}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \BKBIMO{n} draws a pointing back bimorphism of length n units
+\newcommand{\BKBIMO}[1]%
+{\monolength=#1%
+\advance\monolength by -\monotail%
+\epilength=\monolength%
+\advance\epilength by -\epihead%
+\begin{picture}(#1,0)%
+\put(\monolength,0){\line(-1,0){\epilength}}%
+\put(\monolength,0){\whead}%
+\put(\epihead,0){\whead}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \BKBIAR{n} draws a pair of pointing back arrows of length n units
+\newcommand{\BKBIAR}[1]%
+{\begin{picture}(#1,700)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,700){\line(-1,0){#1}}%
+\put(0,700){\whead}%
+\end{picture}}%
+
+% \BKBIDIST{n} draws a pair of pointing back distributors of length n units
+\newcommand{\BKBIDIST}[1]%
+{\begin{picture}(#1,700)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,700){\line(-1,0){#1}}%
+\put(0,700){\whead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}%
+\put(\NUMBER,700){\distsign}%
+\end{picture}}%
+
+% \BKADJAR{n} draws a pair of adjoint arrows of length n units
+\newcommand{\BKADJAR}[1]%
+{\begin{picture}(#1,700)%
+\put(0,700){\line(1,0){#1}}%
+\put(#1,700){\ehead}%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \BKADJDIST{n} draws a pair of adjoint distributors of length n units
+\newcommand{\BKADJDIST}[1]%
+{\begin{picture}(#1,700)%
+\put(0,700){\line(1,0){#1}}%
+\put(#1,700){\ehead}%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}%
+\put(\NUMBER,700){\distsign}%
+\end{picture}}%
+
+% \BKTRIAR{n}{f}{g}{h} draws a triple of back arrows of length n units
+% and names f, g, h
+\newcommand{\BKTRIAR}[4]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\mbox{$#2$}\\ \BKAR{#1}\\%
+\mbox{$#3$}\\ \BKAR{#1}\\%
+\mbox{$#4$}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \BKTRIADJAR{n} draws a back triple of adjoint arrows of length n units
+% and names f, g, h
+\newcommand{\BKTRIADJAR}[4]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\mbox{$#2$}\\ \AR{#1}\\%
+\mbox{$#3$}\\ \BKAR{#1}\\%
+\mbox{$#4$}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \BKQUADRIAR{n} draws a quadruple of back arrows of length n units
+\newcommand{\BKQUADRIAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \BKQUADRIADJAR{n} draws a back quadruple of adjoint arrows
+% of length n units
+\newcommand{\BKQUADRIADJAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\AR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \BKQUINTIAR{n} draws a quintuple of back arrows of length n units
+\newcommand{\BKQUINTIAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \BKQUINTIADJAR{n} draws a back quintuple of adjoint arrows
+% of length n units
+\newcommand{\BKQUINTIADJAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% All the following commands produce back arrows with length 20pt
+% and scriptstyle names in math mode but arrows with length
+% \displayarrowlength and textstyle names in display math mode.
+
+% back arrow
+\newcommand{\bkar}{\ifinner\tcase{\BKAR}\else\dcase{\BKAR}\fi}%
+
+% back arrow with upper name [1]
+\newcommand{\Bkar}[1]{\ifinner\Tcase{\BKAR}{#1}\else\Dcase{\BKAR}{#1}\fi}%
+
+% back distributor
+\newcommand{\bkdist}{\ifinner\tcase{\BKDIST}\else\dcase{\BKDIST}\fi}%
+
+% back distributor with upper name [1]
+\newcommand{\Bkdist}[1]{\ifinner\Tcase{\BKDIST}{\TUP{#1}}%
+\else\Dcase{\BKDIST}{\TUP{#1}}\fi}%
+
+% backward dotted arrow
+\newcommand{\bkdotar}{\ifinner\tcase{\BKDOTAR}\else\dcase{\BKDOTAR}\fi}%
+
+% backward dotted arrow with upper name [1]
+\newcommand{\Bkdotar}[1]{\ifinner\Tcase{\BKDOTAR}{#1}%
+\else\Dcase{\BKDOTAR}{#1}\fi}%
+
+% back monomorphism
+\newcommand{\bkmono}{\ifinner\tcase{\BKMONO}\else\dcase{\BKMONO}\fi}%
+
+% back monomorphism with upper name [1]
+\newcommand{\Bkmono}[1]{\ifinner\Tcase{\BKMONO}{#1}%
+\else\Dcase{\BKMONO}{#1}\fi}%
+
+% back epimorphism
+\newcommand{\bkepi}{\ifinner\tcase{\BKEPI}\else\dcase{\BKEPI}\fi}%
+
+% back epimorphism with upper name [1]
+\newcommand{\Bkepi}[1]{\ifinner\Tcase{\BKEPI}{#1}%
+\else\Dcase{\BKEPI}{#1}\fi}%
+
+% back bimorphism
+\newcommand{\bkbimo}{\ifinner\tcase{\BKBIMO}\else\dcase{\BKBIMO}\fi}%
+
+% back bimorphism with upper name [1]
+\newcommand{\Bkbimo}[1]{\ifinner\Tcase{\BKBIMO}{\hspace{9pt}#1}%
+\else\Dcase{\BKBIMO}{\hspace{9pt}#1}\fi}%
+
+% back isomorphism
+\newcommand{\bkiso}{\ifinner\Tcase{\BKAR}{\isosign}%
+\else\Dcase{\BKAR}{\isosign}\fi}%
+
+% back isomorphism with upper name [1]
+\newcommand{\Bkiso}[1]{\ifinner\Tcase{\BKAR}{\isosign{#1}}%
+\else\Dcase{\BKAR}{\isosign{#1}}\fi}%
+
+% pair of back arrows
+\newcommand{\bkbiar}{\ifinner\tbicase{\BKBIAR}\else\dbicase{\BKBIAR}\fi}%
+
+% pair of back arrows with names [1],[2]
+\newcommand{\Bkbiar}[2]{\ifinner\Tbicase{\BKBIAR}{#1}{#2}%
+\else\Dbicase{\BKBIAR}{#1}{#2}\fi}%
+
+% pair of back distributors
+\newcommand{\bkbidist}{\ifinner\tbicase{\BKBIDIST}%
+\else\dbicase{\BKBIDIST}\fi}%
+
+% pair of back distributors with names [1],[2]
+\newcommand{\Bkbidist}[2]{\ifinner\Tbicase{\BKBIDIST}{\TUP{#1}}{\TDOWN{#2}}%
+\else\Tbicase{\BKBIDIST}{\DUP{#1}}{\DDOWN{#2}}\fi}%
+
+% back equality
+\let\bkeql=\eql%
+
+% back equality with name [1]
+\let\Bkeql=\Eql%
+
+% back pair of adjoint arrows
+\newcommand{\bkadjar}{\ifinner\tbicase{\BKADJAR}%
+\else\dbicase{\BKADJAR}\fi}%
+
+% back pair of adjoint arrows with names [1],[2]
+\newcommand{\Bkadjar}[2]{\ifinner\Tbicase{\BKADJAR}{#1}{#2}%
+\else\Dbicase{\BKADJAR}{#1}{#2}\fi}%
+
+% back pair of adjoint distributors
+\newcommand{\bkadjdist}{\ifinner\tbicase{\BKADJDIST}%
+\else\dbicase{\BKADJDIST}\fi}%
+
+% back pair of adjoint distributors with names [1],[2]
+\newcommand{\Bkadjdist}[2]{\ifinner\Tbicase{\BKADJDIST}{\TUP{#1}}{\TDOWN{#2}}%
+\else\Dbicase{\BKADJDIST}{\TUP{#1}}{\TDOWN{#2}}\fi}%
+
+% triple of back arrows
+\newcommand{\bktriar}{\ifinner\ttricase{\BKTRIAR}\else\dtricase{\BKTRIAR}\fi}%
+
+% triple of back arrows with names [1],[2],[3]
+\newcommand{\Bktriar}[3]{\ifinner\Ttricase{\BKTRIAR}{#1}{#2}{#3}%
+\else\Dtricase{\BKTRIAR}{#1}{#2}{#3}\fi}%
+
+% back triple of adjoint arrows
+\newcommand{\bktriadjar}{\ifinner\ttricase{\BKTRIADJAR}%
+\else\dtricase{\BKTRIADJAR}\fi}%
+
+% back triple of adjoint arrows with names [1],[2],[3]
+\newcommand{\Bktriadjar}[3]{\ifinner\Ttricase{\BKTRIADJAR}{#1}{#2}{#3}%
+\else\Dtricase{\BKTRIADJAR}{#1}{#2}{#3}\fi}%
+
+% back quadruple of arrows
+\newcommand{\bkquadriar}{\ifinner\tquadricase{\BKQUADRIAR}%
+\else\dmulticase{\BKQUADRIAR}\fi}%
+
+% back quadruple of adjoint arrows
+\newcommand{\bkquadriadjar}{\ifinner\tmulticase{\BKQUADRIADJAR}%
+\else\dmulticase{\BKQUADRIADJAR}\fi}%
+
+% back quintuple of arrows
+\newcommand{\bkquintiar}{\ifinner\tmulticase{\BKQUINTIAR}%
+\else\dmulticase{\BKQUINTIAR}\fi}%
+
+% back quintuple of adjoint arrows
+\newcommand{\bkquintiadjar}{\ifinner\tmulticase{\BKQUINTIADJAR}%
+\else\dmulticase{\BKQUINTIADJAR}\fi}%
+
+
+% SPECIAL SYMBOLS
+
+% adjoint symbol
+\newcommand{\adj}{\begin{picture}(9,6)%
+\put(1,3){\line(1,0){6}}\put(7,0){\line(0,1){6}}%
+\end{picture}}%
+
+% commutative diagram symbol
+\newcommand{\com}{\begin{picture}(12,8)%
+\put(6,4){\oval(8,8)[b]}\put(6,4){\oval(8,8)[r]}%
+\put(6,8){\line(-1,0){2}}\end{picture}}%
+
+% natural transformation with names [1],[2],[3]
+\newcommand{\Nat}[3]{\raisebox{-2pt}%
+{\begin{picture}(34,15)%
+\put(2,10){\line(1,0){30}}%
+\put(32,10){\ehead}%
+\put(2,0){\line(1,0){30}}%
+\put(32,0){\ehead}%
+\put(13,2){$\Downarrow$}%
+\put(20,3){$\scriptstyle{#2}$}%
+\put(4,11){$\scriptstyle{#1}$}%
+\put(4,1){$\scriptstyle{#3}$}%
+\end{picture}}}%
+
+% natural transformation
+\newcommand{\nat}{\raisebox{-2pt}%
+{\begin{picture}(34,10)%
+\put(2,10){\line(1,0){30}}%
+\put(32,10){\ehead}%
+\put(2,0){\line(1,0){30}}%
+\put(32,0){\ehead}%
+\put(13,2){$\Downarrow$}%
+\end{picture}}}%
+
+% pair of natural transformations with names [1],[2],[3],[4],[5]
+\newcommand{\Binat}[5]{\raisebox{-7.5pt}%
+{\begin{picture}(34,25)%
+\put(2,20){\line(1,0){30}}%
+\put(32,20){\ehead}%
+\put(2,10){\line(1,0){30}}%
+\put(32,10){\ehead}%
+\put(2,0){\line(1,0){30}}%
+\put(32,0){\ehead}%
+\put(13,12){$\Downarrow$}%
+\put(13,2){$\Downarrow$}%
+\put(20,13){$\scriptstyle{#2}$}%
+\put(20,3){$\scriptstyle{#4}$}%
+\put(4,21){$\scriptstyle{#1}$}%
+\put(4,11){$\scriptstyle{#3}$}%
+\put(4,1){$\scriptstyle{#5}$}%
+\end{picture}}}%
+
+% pair of natural transformations
+\newcommand{\binat}{\raisebox{-7.5pt}%
+{\begin{picture}(34,20)%
+\put(2,20){\line(1,0){30}}%
+\put(32,20){\ehead}%
+\put(2,10){\line(1,0){30}}%
+\put(32,10){\ehead}%
+\put(2,0){\line(1,0){30}}%
+\put(32,0){\ehead}%
+\put(13,12){$\Downarrow$}%
+\put(13,2){$\Downarrow$}%
+\end{picture}}}%
+
+% display natural transformation with names [1],[2],[3]
+\newcommand{\Dnat}[3]{\raisebox{-2pt}%
+{\begin{picture}(54,15)%
+\put(2,10){\line(1,0){50}}%
+\put(52,10){\ehead}%
+\put(2,0){\line(1,0){50}}%
+\put(52,0){\ehead}%
+\put(23,2){$\Downarrow$}%
+\put(30,1){$\textstyle{#2}$}%
+\put(4,11){$\textstyle{#1}$}%
+\put(4,1){$\textstyle{#3}$}%
+\end{picture}}}%
+
+% display natural transformation
+\newcommand{\dnat}{\raisebox{-2pt}%
+{\begin{picture}(54,10)%
+\put(2,10){\line(1,0){50}}%
+\put(52,10){\ehead}%
+\put(2,0){\line(1,0){50}}%
+\put(52,0){\ehead}%
+\put(23,2){$\Downarrow$}%
+\end{picture}}}%
+
+% display pair of natural transformations with names [1],[2],[3],[4],[5]
+\newcommand{\Dbinat}[5]{\raisebox{-7.5pt}%
+{\begin{picture}(54,25)%
+\put(2,20){\line(1,0){50}}%
+\put(52,20){\ehead}%
+\put(2,10){\line(1,0){50}}%
+\put(52,10){\ehead}%
+\put(2,0){\line(1,0){50}}%
+\put(52,0){\ehead}%
+\put(23,12){$\Downarrow$}%
+\put(23,2){$\Downarrow$}%
+\put(30,11){$\textstyle{#2}$}%
+\put(30,1){$\textstyle{#4}$}%
+\put(4,21){$\textstyle{#1}$}%
+\put(4,11){$\textstyle{#3}$}%
+\put(4,1){$\textstyle{#5}$}%
+\end{picture}}}%
+
+% display pair of natural transformations
+\newcommand{\dbinat}{\raisebox{-7.5pt}%
+{\begin{picture}(54,20)%
+\put(2,20){\line(1,0){50}}%
+\put(52,20){\ehead}%
+\put(2,10){\line(1,0){50}}%
+\put(52,10){\ehead}%
+\put(2,0){\line(1,0){50}}%
+\put(52,0){\ehead}%
+\put(23,12){$\Downarrow$}%
+\put(23,2){$\Downarrow$}%
+\end{picture}}}%
+
+% MACROS FOR DRAWING HORIZONTAL PICTURES
+
+% \lowername{P}{f} puts the name f under the picture P
+\newcommand{\lowername}[2]%
+{$\stackrel{\makebox[1pt]{#1}}%
+{\begin{picture}(0,0)%
+\truex{600}%
+\put(0,0){\makebox(0,\value{x})[t]{\makebox[1pt]{$#2$}}}%
+\end{picture}}$}%
+
+% \hcase{P}{n} draws the picture P with length n units
+\newcommand{\hcase}[2]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{0pt}[0pt][0pt]{#1{#2}}}}%
+
+% \Hcase{P}{f}{n} draws the picture P with upper name f
+% and length n units.
+\newcommand{\Hcase}[3]%
+{\testdiagrammode\makebox[0pt]
+{\raisebox{0pt}[0pt][0pt]%
+{$\stackrel{\makebox[0pt]{$\textstyle{#2}$}}{#1{#3}}$}}}%
+
+% \hcasE{P}{f}{n} draws the picture P with lower name f
+% and length n units.
+\newcommand{\hcasE}[3]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{-8pt}[0pt][0pt]%
+{\lowername{#1{#3}}{#2}}}}%
+
+% \Hisocase{P}{f}{g}{n} draws an arrow P with names f, g
+% and length n units.
+\newcommand{\Hisocase}[4]%
+{\testdiagrammode\makebox[0pt]
+{\raisebox{-8pt}[0pt][0pt]%
+{$\stackrel{\makebox[0pt]{$\textstyle{#2}$}}%
+{\mbox{\lowername{#1{#4}}{#3}}}$}}}%
+
+% \hbicase{P}{n} draws the bi-picture P with length n units.
+\newcommand{\hbicase}[2]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{-2.4pt}[0pt][0pt]{#1{#2}}}}%
+
+% \Hbicase{P}{f}{g}{n} draws the bi-picture P with names f, g
+% and length n units.
+\newcommand{\Hbicase}[4]%
+{\testdiagrammode\makebox[0pt]
+{\raisebox{-10.4pt}[0pt][0pt]%
+{$\stackrel{\makebox[0pt]{$\textstyle{#2}$}}%
+{\mbox{\lowername{#1{#4}}{#3}}}$}}}%
+
+% \htricase{P}{n} draws the tri-picture P with length n units.
+\newcommand{\htricase}[2]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{-12pt}[0pt][0pt]{#1{#2}{}{}{}{}}}}%
+
+% \Htricase{P}{f}{g}{h}{i}{n} draws the tri-picture P
+% with names f, g, h, i and length n units.
+\newcommand{\Htricase}[6]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{-12pt}[0pt][0pt]{#1{#6}{#2}{#3}{#4}{#5}}}}%
+
+% \hmulticase{P}{n} draws the multi-picture P with length n units.
+\newcommand{\hmulticase}[2]%
+{\testdiagrammode\makebox[0pt]{\raisebox{-12pt}[0pt][0pt]{#1{#2}}}}%
+
+
+% EAST ARROWS
+
+% \EAR{n} draws an east arrow of length n units
+\newcommand{\EAR}[1]%
+{\begin{picture}(#1,0)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\end{picture}}%
+
+% \EDIST{n} draws an east distributor of length n units
+\newcommand{\EDIST}[1]%
+{\begin{picture}(#1,0)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\truex{400}
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}
+\end{picture}}%
+
+% \EDOTAR draws a dotted arrow of length n units
+\newcommand{\EDOTAR}[1]%
+{\truex{100}\truey{300}%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(#1,0)%
+\multiput(0,0)(\value{y},0){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(#1,0){\ehead}%
+\end{picture}}%
+
+
+% \EMONO{n} draws an east monomorphism of length n units
+\newcommand{\EMONO}[1]%
+{\truetail
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\begin{picture}(#1,0)%
+\put(\truemonotail,0){\line(1,0){\monolength}}%
+\put(#1,0){\ehead}%
+\put(\truemonotail,0){\ehead}%
+\end{picture}}%
+
+
+% \EEPI{n} draws an east epimorphism of length n units
+\newcommand{\EEPI}[1]%
+{\truehead%
+\epilength=#1%
+\advance\epilength by -\trueepihead%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-#1,0){\line(1,0){\epilength}}%
+\put(-\trueepihead,0){\ehead}%
+\put(0,0){\ehead}%
+\end{picture}}%
+
+
+% \EBIMO{n} draws an east bimorphism of length n units
+\newcommand{\EBIMO}[1]%
+{\truehead\truetail%
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\epilength=\monolength%
+\advance\epilength by -\trueepihead%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-\monolength,0){\line(1,0){\epilength}}%
+\put(-\monolength,0){\ehead}%
+\put(-\trueepihead,0){\ehead}%
+\put(0,0){\ehead}%
+\end{picture}}%
+
+
+% \EBIAR{n} draws an east pair of arrows of length n units
+\newcommand{\EBIAR}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\end{picture}}%
+
+% \EBIDIST{n} draws an east pair of distributors of length n units
+\newcommand{\EBIDIST}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}
+\put(\NUMBER,\value{x}){\distsign}%
+\end{picture}}%
+
+% \EEQL{n} draws an east equality of length n units
+\newcommand{\EEQL}[1]%
+{\begin{picture}(#1,0)%
+\truex{200}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(0,0){\line(1,0){#1}}%
+\end{picture}}%
+
+% \EADJAR{n} draws an east pair of adjoint arrows of length n
+% units
+\newcommand{\EADJAR}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\end{picture}}%
+
+% \EADJDIST{n} draws an east pair of adjoint distributors of length n
+% units
+\newcommand{\EADJDIST}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}
+\put(\NUMBER,\value{x}){\distsign}%
+\end{picture}}%
+
+% \ETRIAR{n}{f}{g}{h}{i} draws an east triple of arrows
+% of length n units with names f, g, h, i
+\newcommand{\ETRIAR}[5]%
+{\truex{1200}%
+\X=\value{x}%
+\multiply\X by 2%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\X=#1%
+\divide\X by 2%
+\truex{-600}%
+\put(\X,\value{x}){\makebox(0,0){$#5$}}%
+\truex{600}%
+\put(\X,\value{x}){\makebox(0,0){$#4$}}%
+\truex{1800}%
+\put(\X,\value{x}){\makebox(0,0){$#3$}}%
+\truex{3000}%
+\put(\X,\value{x}){\makebox(0,0){$#2$}}%
+\end{picture}}%
+
+% \ETRIADJAR{n}{f}{g}{h}{i} draws an east triple of adjoint arrows
+% of length n units and names f, g, h, i
+\newcommand{\ETRIADJAR}[5]%
+{\truex{1200}%
+\X=\value{x}%
+\multiply\X by 2%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\X=#1%
+\divide\X by 2%
+\truex{-600}%
+\put(\X,\value{x}){\makebox(0,0){$#5$}}%
+\truex{600}%
+\put(\X,\value{x}){\makebox(0,0){$#4$}}%
+\truex{1800}%
+\put(\X,\value{x}){\makebox(0,0){$#3$}}%
+\truex{3000}%
+\put(\X,\value{x}){\makebox(0,0){$#2$}}%
+\end{picture}}%
+
+% \EQUADRIAR{n} draws an east quadruple of arrows
+% of length n units
+\newcommand{\EQUADRIAR}[1]%
+{\truex{800}%
+\truey{1600}%
+\X=\value{x}%
+\multiply\X by 3%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(0,\value{y}){\line(1,0){#1}}%
+\put(#1,\value{y}){\ehead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\end{picture}}%
+
+% \EQUADRIADJAR{n} draws an east quadruple of adjoint arrows
+% of length n units
+\newcommand{\EQUADRIADJAR}[1]%
+{\truex{800}%
+\truey{1600}%
+\X=\value{x}%
+\multiply\X by 3%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(0,\value{y}){\line(1,0){#1}}%
+\put(#1,\value{y}){\ehead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\end{picture}}%
+
+% \EQUINTIAR{n} draws an east quintuple of arrows
+% of length n units
+\newcommand{\EQUINTIAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\truez{1800}%
+\X=\value{x}%
+\multiply\X by 4%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(0,\value{y}){\line(1,0){#1}}%
+\put(#1,\value{y}){\ehead}%
+\put(0,\value{z}){\line(1,0){#1}}%
+\put(#1,\value{z}){\ehead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\end{picture}}%
+
+% \EQUINTIADJAR{n} draws an east quintuple of adjoint arrows
+% of length n units
+\newcommand{\EQUINTIADJAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\truez{1800}%
+\X=\value{x}%
+\multiply\X by 4%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(0,\value{y}){\line(1,0){#1}}%
+\put(#1,\value{y}){\ehead}%
+\put(#1,\value{z}){\line(-1,0){#1}}%
+\put(0,\value{z}){\whead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\end{picture}}%
+
+
+% All the following commands produce east arrows
+
+% basic east arrow
+\def\basicear[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EAR}{\Z}}%
+
+% east arrow
+\newcommand{\ear}{\@ifnextchar[{\basicear}%
+{\hspace{\SOURCE\unitlength}\basicear[\ARROWLENGTH]}}%
+
+% basic east arrow with upper name
+\def\basicEar[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EAR}{#2}{\Z}}%
+
+% east arrow with upper name
+\newcommand{\Ear}{\@ifnextchar[{\basicEar}%
+{\hspace{\SOURCE\unitlength}\basicEar[\ARROWLENGTH]}}%
+
+% basic east arrow with lower name
+\def\basiceaR[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EAR}{#2}{\Z}}%
+
+% east arrow with lower name
+\newcommand{\eaR}{\@ifnextchar[{\basiceaR}%
+{\hspace{\SOURCE\unitlength}\basiceaR[\ARROWLENGTH]}}%
+
+% basic east distributor
+\def\basicedist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EDIST}{\Z}}%
+
+% east distributor
+\newcommand{\edist}{\@ifnextchar[{\basicedist}%
+{\hspace{\SOURCE\unitlength}\basicedist[\ARROWLENGTH]}}%
+
+% basic east distributor with upper name
+\def\basicEdist[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EDIST}{\DUP{#2}}{\Z}}%
+
+% east distributor with upper name
+\newcommand{\Edist}{\@ifnextchar[{\basicEdist}%
+{\hspace{\SOURCE\unitlength}\basicEdist[\ARROWLENGTH]}}%
+
+% basic east distributor with lower name
+\def\basicedisT[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EDIST}{\DDOWN{#2}}{\Z}}%
+
+% east distributor with lower name
+\newcommand{\edisT}{\@ifnextchar[{\basicedisT}%
+{\hspace{\SOURCE\unitlength}\basicedisT[\ARROWLENGTH]}}%
+
+% basic east dotted arrow
+\def\basicedotar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EDOTAR}{\Z}}%
+
+% east dotted arrow
+\newcommand{\edotar}{\@ifnextchar[{\basicedotar}%
+{\hspace{\SOURCE\unitlength}\basicedotar[\ARROWLENGTH]}}%
+
+% basic east dotted arrow with upper name
+\def\basicEdotar[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EDOTAR}{#2}{\Z}}%
+
+% east dotted arrow with upper name
+\newcommand{\Edotar}{\@ifnextchar[{\basicEdotar}%
+{\hspace{\SOURCE\unitlength}\basicEdotar[\ARROWLENGTH]}}%
+
+% basic east dotted arrow with lower name
+\def\basicedotaR[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EDOTAR}{#2}{\Z}}%
+
+% east dotted arrow with lower name
+\newcommand{\edotaR}{\@ifnextchar[{\basicedotaR}%
+{\hspace{\SOURCE\unitlength}\basicedotaR[\ARROWLENGTH]}}%
+
+% basic east monomorphism
+\def\basicemono[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EMONO}{\Z}}%
+
+% east arrow
+\newcommand{\emono}{\@ifnextchar[{\basicemono}%
+{\hspace{\SOURCE\unitlength}\basicemono[\ARROWLENGTH]}}%
+
+% basic east monomorphism with upper name
+\def\basicEmono[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EMONO}{#2}{\Z}}%
+
+% east monomorphism with upper name
+\newcommand{\Emono}{\@ifnextchar[{\basicEmono}%
+{\hspace{\SOURCE\unitlength}\basicEmono[\ARROWLENGTH]}}%
+
+% basic east monomorphism with lower name
+\def\basicemonO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EMONO}{#2}{\Z}}%
+
+% east monomorphism with lower name
+\newcommand{\emonO}{\@ifnextchar[{\basicemonO}%
+{\hspace{\SOURCE\unitlength}\basicemonO[\ARROWLENGTH]}}%
+
+% basic east epimorphism
+\def\basiceepi[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EEPI}{\Z}}%
+
+% east epimorphism
+\newcommand{\eepi}{\@ifnextchar[{\basiceepi}%
+{\hspace{\SOURCE\unitlength}\basiceepi[\ARROWLENGTH]}}%
+
+% basic east epimorphism with upper name
+\def\basicEepi[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EEPI}{#2}{\Z}}%
+
+% east epimorphism with upper name
+\newcommand{\Eepi}{\@ifnextchar[{\basicEepi}%
+{\hspace{\SOURCE\unitlength}\basicEepi[\ARROWLENGTH]}}%
+
+% basic east epimorphism with lower name
+\def\basiceepI[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EEPI}{#2}{\Z}}%
+
+% east epimorphism with lower name
+\newcommand{\eepI}{\@ifnextchar[{\basiceepI}%
+{\hspace{\SOURCE\unitlength}\basiceepI[\ARROWLENGTH]}}%
+
+% basic east bimorphism
+\def\basicebimo[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EBIMO}{\Z}}%
+
+% east bimorphism
+\newcommand{\ebimo}{\@ifnextchar[{\basicebimo}%
+{\hspace{\SOURCE\unitlength}\basicebimo[\ARROWLENGTH]}}%
+
+% basic east bimorphism with upper name
+\def\basicEbimo[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EBIMO}{#2}{\Z}}%
+
+% east bimorphism with upper name
+\newcommand{\Ebimo}{\@ifnextchar[{\basicEbimo}%
+{\hspace{\SOURCE\unitlength}\basicEbimo[\ARROWLENGTH]}}%
+
+% basic east bimorphism with lower name
+\def\basicebimO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EBIMO}{#2}{\Z}}%
+
+% east bimorphism with lower name
+\newcommand{\ebimO}{\@ifnextchar[{\basicebimO}%
+{\hspace{\SOURCE\unitlength}\basicebimO[\ARROWLENGTH]}}%
+
+% basic east isomorphism
+\def\basiceiso[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\EAR}{\isosign}{}{\Z}}%
+
+% east isomorphism
+\newcommand{\eiso}{\@ifnextchar[{\basiceiso}%
+{\hspace{\SOURCE\unitlength}\basiceiso[\ARROWLENGTH]}}%
+
+% basic east isomorphism with upper name
+\def\basicEiso[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\EAR}{#2}{\isosign}{\Z}}%
+
+% east isomorphism with upper name
+\newcommand{\Eiso}{\@ifnextchar[{\basicEiso}%
+{\hspace{\SOURCE\unitlength}\basicEiso[\ARROWLENGTH]}}%
+
+% basic east isomorphism with lower name
+\def\basiceisO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\EAR}{\isosign}{#2}{\Z}}%
+
+% east isomorphism with lower name
+\newcommand{\eisO}{\@ifnextchar[{\basiceisO}%
+{\hspace{\SOURCE\unitlength}\basiceisO[\ARROWLENGTH]}}%
+
+% basic east equality
+\def\basiceeql[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EEQL}{\Z}}%
+
+% east equality
+\newcommand{\eeql}{\@ifnextchar[{\basiceeql}%
+{\hspace{\SOURCE\unitlength}\basiceeql[\ARROWLENGTH]}}%
+
+% basic east equality with upper name
+\def\basicEeql[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EEQL}{\DUP{#2}}{\Z}}%
+
+% east equality with upper name
+\newcommand{\Eeql}{\@ifnextchar[{\basicEeql}%
+{\hspace{\SOURCE\unitlength}\basicEeql[\ARROWLENGTH]}}%
+
+% basic east equality with lower name
+\def\basiceeqL[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EEQL}{#2}{\Z}}%
+
+% east equality with lower name
+\newcommand{\eeqL}{\@ifnextchar[{\basiceeqL}%
+{\hspace{\SOURCE\unitlength}\basiceeqL[\ARROWLENGTH]}}%
+
+% basic pair of east arrows
+\def\basicebiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\EBIAR}{\Z}}%
+
+% pair of east arrows
+\newcommand{\ebiar}{\@ifnextchar[{\basicebiar}%
+{\hspace{\SOURCE\unitlength}\basicebiar[\ARROWLENGTH]}}%
+
+% basic pair of east arrows with names
+\def\basicEbiar[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\EBIAR}{#2}{#3}{\Z}}%
+
+% pair of east arrows with names
+\newcommand{\Ebiar}{\@ifnextchar[{\basicEbiar}%
+{\hspace{\SOURCE\unitlength}\basicEbiar[\ARROWLENGTH]}}%
+\let\ebiaR=\Ebiar
+
+% basic pair of east distributors
+\def\basicebidist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\EBIDIST}{\Z}}%
+
+% pair of east distributors
+\newcommand{\ebidist}{\@ifnextchar[{\basicebidist}%
+{\hspace{\SOURCE\unitlength}\basicebidist[\ARROWLENGTH]}}%
+
+% basic pair of east distributors with names
+\def\basicEbidist[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\EBIDIST}{\DUP{#2}}{\DDOWN{#3}}{\Z}}%
+
+% pair of east distributors with names
+\newcommand{\Ebidist}{\@ifnextchar[{\basicEbidist}%
+{\hspace{\SOURCE\unitlength}\basicEbidist[\ARROWLENGTH]}}%
+\let\ebidisT=\Ebidist
+
+% basic pair of east adjoint arrows
+\def\basiceadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\EADJAR}{\Z}}%
+
+% pair of east adjoint arrows
+\newcommand{\eadjar}{\@ifnextchar[{\basiceadjar}%
+{\hspace{\SOURCE\unitlength}\basiceadjar[\ARROWLENGTH]}}%
+
+% basic pair of east adjoint arrows with names
+\def\basicEadjar[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\EADJAR}{#2}{#3}{\Z}}%
+
+% pair of east adjoint arrows with names
+\newcommand{\Eadjar}{\@ifnextchar[{\basicEadjar}%
+{\hspace{\SOURCE\unitlength}\basicEadjar[\ARROWLENGTH]}}%
+\let\eadjaR=\Eadjar
+
+% basic pair of east adjoint distributors
+\def\basiceadjdist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\EADJDIST}{\Z}}%
+
+% pair of east adjoint distributors
+\newcommand{\eadjdist}{\@ifnextchar[{\basiceadjdist}%
+{\hspace{\SOURCE\unitlength}\basiceadjdist[\ARROWLENGTH]}}%
+
+% basic pair of east adjoint distributors with names
+\def\basicEadjdist[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\EADJDIST}{\DUP{#2}}{\DDOWN{#3}}{\Z}}%
+
+% pair of east adjoint distributors with names
+\newcommand{\Eadjdist}{\@ifnextchar[{\basicEadjdist}%
+{\hspace{\SOURCE\unitlength}\basicEadjdist[\ARROWLENGTH]}}%
+\let\eadjdisT=\Eadjdist
+
+% basic east triple of arrows
+\def\basicetriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\htricase{\ETRIAR}{\Z}}%
+
+% east triple of arrows
+\newcommand{\etriar}{\@ifnextchar[{\basicetriar}%
+{\hspace{\SOURCE\unitlength}\basicetriar[\ARROWLENGTH]}}%
+
+% basic east triple of arrows with upper names
+\def\basicEtriar[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\ETRIAR}{#2}{#3}{#4}{}{\Z}}%
+
+% east triple of arrows with upper names
+\newcommand{\Etriar}{\@ifnextchar[{\basicEtriar}%
+{\hspace{\SOURCE\unitlength}\basicEtriar[\ARROWLENGTH]}}%
+
+% basic east triple of arrows with lower names
+\def\basicetriaR[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\ETRIAR}{}{#2}{#3}{#4}{\Z}}%
+
+% east triple of arrows with lower name
+\newcommand{\etriaR}{\@ifnextchar[{\basicetriaR}%
+{\hspace{\SOURCE\unitlength}\basicetriaR[\ARROWLENGTH]}}%
+
+% basic east triple of adjoint arrows
+\def\basicetriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\htricase{\ETRIADJAR}{\Z}}%
+
+% east triple of adjoint arrows
+\newcommand{\etriadjar}{\@ifnextchar[{\basicetriadjar}%
+{\hspace{\SOURCE\unitlength}\basicetriadjar[\ARROWLENGTH]}}%
+
+% basic east triple of adjoint arrows with upper names
+\def\basicEtriadjar[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\ETRIADJAR}{#2}{#3}{#4}{}{\Z}}%
+
+% east triple of adjoint arrows with upper names
+\newcommand{\Etriadjar}{\@ifnextchar[{\basicEtriadjar}%
+{\hspace{\SOURCE\unitlength}\basicEtriadjar[\ARROWLENGTH]}}%
+
+% basic east triple of adjoint arrows with lower names
+\def\basicetriadjaR[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\ETRIADJAR}{}{#2}{#3}{#4}{\Z}}%
+
+% east triple of adjoint arrows with lower name
+\newcommand{\etriadjaR}{\@ifnextchar[{\basicetriadjaR}%
+{\hspace{\SOURCE\unitlength}\basicetriadjaR[\ARROWLENGTH]}}%
+
+% basic east quadruple of arrows
+\def\basicequadriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\EQUADRIAR}{\Z}}%
+
+% east quadruple of arrows
+\newcommand{\equadriar}{\@ifnextchar[{\basicequadriar}%
+{\hspace{\SOURCE\unitlength}\basicequadriar[\ARROWLENGTH]}}%
+
+% basic east quadruple of adjoint arrows
+\def\basicequadriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\EQUADRIADJAR}{\Z}}%
+
+% east quadruple of adjoint arrows
+\newcommand{\equadriadjar}{\@ifnextchar[{\basicequadriadjar}%
+{\hspace{\SOURCE\unitlength}\basicequadriadjar[\ARROWLENGTH]}}%
+
+% basic east quintuple of arrows
+\def\basicequintiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\EQUINTIAR}{\Z}}%
+
+% east quintuple of arrows
+\newcommand{\equintiar}{\@ifnextchar[{\basicequintiar}%
+{\hspace{\SOURCE\unitlength}\basicequintiar[\ARROWLENGTH]}}%
+
+% basic east quintuple of adjoint arrows
+\def\basicequintiadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\EQUINTIADJAR}{\Z}}%
+
+% east quintuple of adjoint arrows
+\newcommand{\equintiadjar}{\@ifnextchar[{\basicequintiadjar}%
+{\hspace{\SOURCE\unitlength}\basicequintiadjar[\ARROWLENGTH]}}%
+
+
+% WEST ARROWS
+
+% \WAR{n} draws a pointing back arrow of length n units
+\newcommand{\WAR}[1]%
+{\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \WDIST{n} draws a pointing back distributor of length n units
+\newcommand{\WDIST}[1]%
+{\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}%
+\end{picture}}%
+
+% \WDOTAR draws a dotted arrow of length n units
+\newcommand{\WDOTAR}[1]%
+{\truex{100}\truey{300}%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(#1,0)%
+\multiput(#1,0)(-\value{y},0){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \WMONO{n} draws a pointing back monomorphism of length n units
+\newcommand{\WMONO}[1]%
+{\truetail%
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\begin{picture}(#1,0)(-#1,0)%
+\put(-\truemonotail,0){\line(-1,0){\monolength}}%
+\put(-\truemonotail,0){\whead}%
+\put(-#1,0){\whead}%
+\end{picture}}%
+
+
+% \WEPI{n} draws a pointing back epimorphism of length n units
+\newcommand{\WEPI}[1]%
+{\truehead%
+\epilength=#1%
+\advance\epilength by -\trueepihead%
+\begin{picture}(#1,0)%
+\put(#1,0){\line(-1,0){\epilength}}%
+\put(\trueepihead,0){\whead}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \WBIMO{n} draws a pointing back bimorphism of length n units
+\newcommand{\WBIMO}[1]%
+{\truehead\truetail%
+\monolength=#1
+\advance\monolength by -\truemonotail%
+\epilength=\monolength%
+\advance\epilength by -\trueepihead%
+\begin{picture}(#1,0)%
+\put(\monolength,0){\line(-1,0){\epilength}}%
+\put(\monolength,0){\whead}%
+\put(\trueepihead,0){\whead}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \WBIAR{n} draws a pair of pointing back arrows of length n units
+\newcommand{\WBIAR}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\end{picture}}%
+
+% \WBIDIST{n} draws a pair of pointing back distributors of length n units
+\newcommand{\WBIDIST}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}%
+\put(\NUMBER,\value{x}){\distsign}%
+\end{picture}}%
+
+% \WADJAR{n} draws a pair of adjoint arrows of length n units
+\newcommand{\WADJAR}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\end{picture}}%
+
+% \WADJDIST{n} draws a pair of adjoint distributors of length n units
+\newcommand{\WADJDIST}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\distsign}%
+\put(\NUMBER,\value{x}){\distsign}%
+\end{picture}}%
+
+% \WTRIAR{n}{f}{g}{h}{i} draws a west triple of arrows
+% of length n units and names f, g, h, i
+\newcommand{\WTRIAR}[5]%
+{\truex{1200}%
+\X=\value{x}%
+\multiply\X by 2%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\X=#1%
+\divide\X by 2%
+\truex{-600}%
+\put(\X,\value{x}){\makebox(0,0){$#5$}}%
+\truex{600}%
+\put(\X,\value{x}){\makebox(0,0){$#4$}}%
+\truex{1800}%
+\put(\X,\value{x}){\makebox(0,0){$#3$}}%
+\truex{3000}%
+\put(\X,\value{x}){\makebox(0,0){$#2$}}%
+\end{picture}}%
+
+% \WTRIADJAR{n}{f}{g}{h}{i} draws a west triple of adjoint arrows
+% of length n units and names f, g, h, i
+\newcommand{\WTRIADJAR}[5]%
+{\truex{1200}%
+\X=\value{x}%
+\multiply\X by 2%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\X=#1%
+\divide\X by 2%
+\truex{-600}%
+\put(\X,\value{x}){\makebox(0,0){$#5$}}%
+\truex{600}%
+\put(\X,\value{x}){\makebox(0,0){$#4$}}%
+\truex{1800}%
+\put(\X,\value{x}){\makebox(0,0){$#3$}}%
+\truex{3000}%
+\put(\X,\value{x}){\makebox(0,0){$#2$}}%
+\end{picture}}%
+
+% \WQUADRIAR{n} draws a west quadruple of arrows
+% of length n units
+\newcommand{\WQUADRIAR}[1]%
+{\truex{800}%
+\truey{1600}%
+\X=\value{x}%
+\multiply\X by 3%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(#1,\value{y}){\line(-1,0){#1}}%
+\put(0,\value{y}){\whead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\end{picture}}%
+
+% \WQUADRIADJAR{n} draws a west quadruple of adjoint arrows
+% of length n units
+\newcommand{\WQUADRIADJAR}[1]%
+{\truex{800}%
+\truey{1600}%
+\X=\value{x}%
+\multiply\X by 3%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(#1,\value{y}){\line(-1,0){#1}}%
+\put(0,\value{y}){\whead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\end{picture}}%
+
+% \WQUINTIAR{n} draws a west quintuple of arrows
+% of length n units
+\newcommand{\WQUINTIAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\truez{1800}%
+\X=\value{x}%
+\multiply\X by 4%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(#1,\value{y}){\line(-1,0){#1}}%
+\put(0,\value{y}){\whead}%
+\put(#1,\value{z}){\line(-1,0){#1}}%
+\put(0,\value{z}){\whead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\end{picture}}%
+
+% \WQUINTIADJAR{n} draws a west quintuple of adjoint arrows
+% of length n units
+\newcommand{\WQUINTIADJAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\truez{1800}%
+\X=\value{x}%
+\multiply\X by 4%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(#1,\value{y}){\line(-1,0){#1}}%
+\put(0,\value{y}){\whead}%
+\put(0,\value{z}){\line(1,0){#1}}%
+\put(#1,\value{z}){\ehead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\end{picture}}%
+
+
+% All the following commands produce west arrows
+
+% basic west arrow
+\def\basicwar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WAR}{\Z}}%
+
+% west arrow
+\newcommand{\war}{\@ifnextchar[{\basicwar}%
+{\hspace{\SOURCE\unitlength}\basicwar[\ARROWLENGTH]}}%
+
+% basic west arrow with upper name
+\def\basicWar[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WAR}{#2}{\Z}}%
+
+% west arrow with upper name
+\newcommand{\War}{\@ifnextchar[{\basicWar}%
+{\hspace{\SOURCE\unitlength}\basicWar[\ARROWLENGTH]}}%
+
+% basic west arrow with lower name
+\def\basicwaR[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WAR}{#2}{\Z}}%
+
+% west arrow with lower name
+\newcommand{\waR}{\@ifnextchar[{\basicwaR}%
+{\hspace{\SOURCE\unitlength}\basicwaR[\ARROWLENGTH]}}%
+
+% basic west distributor
+\def\basicwdist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WDIST}{\Z}}%
+
+% west distributor
+\newcommand{\wdist}{\@ifnextchar[{\basicwdist}%
+{\hspace{\SOURCE\unitlength}\basicwdist[\ARROWLENGTH]}}%
+
+% basic west distributor with upper name
+\def\basicWdist[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WDIST}{\DUP{#2}}{\Z}}%
+
+% west distributor with upper name
+\newcommand{\Wdist}{\@ifnextchar[{\basicWdist}%
+{\hspace{\SOURCE\unitlength}\basicWdist[\ARROWLENGTH]}}%
+
+% basic west distributor with lower name
+\def\basicwdisT[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WDIST}{\DDOWN{#2}}{\Z}}%
+
+% west distributor with lower name
+\newcommand{\wdisT}{\@ifnextchar[{\basicwdisT}%
+{\hspace{\SOURCE\unitlength}\basicwdisT[\ARROWLENGTH]}}%
+
+% basic west dotted arrow
+\def\basicwdotar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WDOTAR}{\Z}}%
+
+% west dotted arrow
+\newcommand{\wdotar}{\@ifnextchar[{\basicwdotar}%
+{\hspace{\SOURCE\unitlength}\basicwdotar[\ARROWLENGTH]}}%
+
+% basic west dotted arrow with upper name
+\def\basicWdotar[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WDOTAR}{#2}{\Z}}%
+
+% west dotted arrow with upper name
+\newcommand{\Wdotar}{\@ifnextchar[{\basicWdotar}%
+{\hspace{\SOURCE\unitlength}\basicWdotar[\ARROWLENGTH]}}%
+
+% basic west dotted arrow with lower name
+\def\basicwdotaR[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WDOTAR}{#2}{\Z}}%
+
+% west dotted arrow with lower name
+\newcommand{\wdotaR}{\@ifnextchar[{\basicwdotaR}%
+{\hspace{\SOURCE\unitlength}\basicwdotaR[\ARROWLENGTH]}}%
+
+% basic west monomorphism
+\def\basicwmono[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WMONO}{\Z}}%
+
+% west arrow
+\newcommand{\wmono}{\@ifnextchar[{\basicwmono}%
+{\hspace{\SOURCE\unitlength}\basicwmono[\ARROWLENGTH]}}%
+
+% basic west monomorphism with upper name
+\def\basicWmono[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WMONO}{#2}{\Z}}%
+
+% west monomorphism with upper name
+\newcommand{\Wmono}{\@ifnextchar[{\basicWmono}%
+{\hspace{\SOURCE\unitlength}\basicWmono[\ARROWLENGTH]}}%
+
+% basic west monomorphism with lower name
+\def\basicwmonO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WMONO}{#2}{\Z}}%
+
+% west monomorphism with lower name
+\newcommand{\wmonO}{\@ifnextchar[{\basicwmonO}%
+{\hspace{\SOURCE\unitlength}\basicwmonO[\ARROWLENGTH]}}%
+
+% basic west epimorphism
+\def\basicwepi[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WEPI}{\Z}}%
+
+% west epimorphism
+\newcommand{\wepi}{\@ifnextchar[{\basicwepi}%
+{\hspace{\SOURCE\unitlength}\basicwepi[\ARROWLENGTH]}}%
+
+% basic west epimorphism with upper name
+\def\basicWepi[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WEPI}{#2}{\Z}}%
+
+% west epimorphism with upper name
+\newcommand{\Wepi}{\@ifnextchar[{\basicWepi}%
+{\hspace{\SOURCE\unitlength}\basicWepi[\ARROWLENGTH]}}%
+
+% basic west epimorphism with lower name
+\def\basicwepI[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WEPI}{#2}{\Z}}%
+
+% west epimorphism with lower name
+\newcommand{\wepI}{\@ifnextchar[{\basicwepI}%
+{\hspace{\SOURCE\unitlength}\basicwepI[\ARROWLENGTH]}}%
+
+% basic west bimorphism
+\def\basicwbimo[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WBIMO}{\Z}}%
+
+% west bimorphism
+\newcommand{\wbimo}{\@ifnextchar[{\basicwbimo}%
+{\hspace{\SOURCE\unitlength}\basicwbimo[\ARROWLENGTH]}}%
+
+% basic west bimorphism with upper name
+\def\basicWbimo[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WBIMO}{#2}{\Z}}%
+
+% west bimorphism with upper name
+\newcommand{\Wbimo}{\@ifnextchar[{\basicWbimo}%
+{\hspace{\SOURCE\unitlength}\basicWbimo[\ARROWLENGTH]}}%
+
+% basic west bimorphism with lower name
+\def\basicwbimO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WBIMO}{#2}{\Z}}%
+
+% west bimorphism with lower name
+\newcommand{\wbimO}{\@ifnextchar[{\basicwbimO}%
+{\hspace{\SOURCE\unitlength}\basicwbimO[\ARROWLENGTH]}}%
+
+% basic west isomorphism
+\def\basicwiso[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\WAR}{\isosign}{}{\Z}}%
+
+% west isomorphism
+\newcommand{\wiso}{\@ifnextchar[{\basicwiso}%
+{\hspace{\SOURCE\unitlength}\basicwiso[\ARROWLENGTH]}}%
+
+% basic west isomorphism with upper name
+\def\basicWiso[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\WAR}{#2}{\isosign}{\Z}}%
+
+% west isomorphism with upper name
+\newcommand{\Wiso}{\@ifnextchar[{\basicWiso}%
+{\hspace{\SOURCE\unitlength}\basicWiso[\ARROWLENGTH]}}%
+
+% basic west isomorphism with lower name
+\def\basicwisO[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hisocase{\WAR}{\isosign}{#2}{\Z}}%
+
+% west isomorphism with lower name
+\newcommand{\wisO}{\@ifnextchar[{\basicwisO}%
+{\hspace{\SOURCE\unitlength}\basicwisO[\ARROWLENGTH]}}%
+
+% west equality
+\let\weql=\eeql%
+
+% west equality with upper name
+\let\Weql=\Eeql%
+
+% west equality with lower name
+\let\weqL=\eeqL%
+
+% basic pair of west arrows
+\def\basicwbiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\WBIAR}{\Z}}%
+
+% pair of west arrows
+\newcommand{\wbiar}{\@ifnextchar[{\basicwbiar}%
+{\hspace{\SOURCE\unitlength}\basicwbiar[\ARROWLENGTH]}}%
+
+% basic pair of west arrows with names
+\def\basicWbiar[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\WBIAR}{#2}{#3}{\Z}}%
+
+% pair of west arrows with names
+\newcommand{\Wbiar}{\@ifnextchar[{\basicWbiar}%
+{\hspace{\SOURCE\unitlength}\basicWbiar[\ARROWLENGTH]}}%
+\let\wbiaR=\Wbiar
+
+% basic pair of west distributors
+\def\basicwbidist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\WBIDIST}{\Z}}%
+
+% pair of west distributors
+\newcommand{\wbidist}{\@ifnextchar[{\basicwbidist}%
+{\hspace{\SOURCE\unitlength}\basicwbidist[\ARROWLENGTH]}}%
+
+% basic pair of west distributors with names
+\def\basicWbidist[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\WBIDIST}{\DUP{#2}}{\DDOWN{#3}}{\Z}}%
+
+% pair of west distributors with names
+\newcommand{\Wbidist}{\@ifnextchar[{\basicWbidist}%
+{\hspace{\SOURCE\unitlength}\basicWbidist[\ARROWLENGTH]}}%
+\let\wbidisT=\Wbidist
+
+% basic pair of west adjoint arrows
+\def\basicwadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\WADJAR}{\Z}}%
+
+% pair of west adjoint arrows
+\newcommand{\wadjar}{\@ifnextchar[{\basicwadjar}%
+{\hspace{\SOURCE\unitlength}\basicwadjar[\ARROWLENGTH]}}%
+
+% basic pair of west adjoint arrows with names
+\def\basicWadjar[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\WADJAR}{#2}{#3}{\Z}}%
+
+% pair of west adjoint arrows with names
+\newcommand{\Wadjar}{\@ifnextchar[{\basicWadjar}%
+{\hspace{\SOURCE\unitlength}\basicWadjar[\ARROWLENGTH]}}%
+\let\wadjaR=\Wadjar
+
+% basic pair of west adjoint distributors
+\def\basicwadjdist[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\WADJDIST}{\Z}}%
+
+% pair of west adjoint distributors
+\newcommand{\wadjdist}{\@ifnextchar[{\basicwadjdist}%
+{\hspace{\SOURCE\unitlength}\basicwadjdist[\ARROWLENGTH]}}%
+
+% basic pair of west adjoint distributors with names
+\def\basicWadjdist[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\WADJDIST}{\DUP{#2}}{\DDOWN{#3}}{\Z}}%
+
+% pair of west adjoint distributors with names
+\newcommand{\Wadjdist}{\@ifnextchar[{\basicWadjdist}%
+{\hspace{\SOURCE\unitlength}\basicWadjdist[\ARROWLENGTH]}}%
+\let\wadjdisT=\Wadjdist
+
+% basic west triple of arrows
+\def\basicwtriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\htricase{\WTRIAR}{\Z}}%
+
+% west triple of arrows
+\newcommand{\wtriar}{\@ifnextchar[{\basicwtriar}%
+{\hspace{\SOURCE\unitlength}\basicwtriar[\ARROWLENGTH]}}%
+
+% basic west triple of arrows with upper names
+\def\basicWtriar[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\WTRIAR}{#2}{#3}{#4}{}{\Z}}%
+
+% west triple of arrows with upper names
+\newcommand{\Wtriar}{\@ifnextchar[{\basicWtriar}%
+{\hspace{\SOURCE\unitlength}\basicWtriar[\ARROWLENGTH]}}%
+
+% basic west triple of arrows with lower names
+\def\basicwtriaR[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\WTRIAR}{}{#2}{#3}{#4}{\Z}}%
+
+% west triple of arrows with lower name
+\newcommand{\wtriaR}{\@ifnextchar[{\basicwtriaR}%
+{\hspace{\SOURCE\unitlength}\basicwtriaR[\ARROWLENGTH]}}%
+
+% basic west triple of adjoint arrows
+\def\basicwtriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\htricase{\WTRIADJAR}{\Z}}%
+
+% west triple of adjoint arrows
+\newcommand{\wtriadjar}{\@ifnextchar[{\basicwtriadjar}%
+{\hspace{\SOURCE\unitlength}\basicwtriadjar[\ARROWLENGTH]}}%
+
+% basic west triple of adjoint arrows with upper names
+\def\basicWtriadjar[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\WTRIADJAR}{#2}{#3}{#4}{}{\Z}}%
+
+% west triple of adjoint arrows with upper names
+\newcommand{\Wtriadjar}{\@ifnextchar[{\basicWtriadjar}%
+{\hspace{\SOURCE\unitlength}\basicWtriadjar[\ARROWLENGTH]}}%
+
+% basic west triple of adjoint arrows with lower names
+\def\basicwtriadjaR[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\WTRIADJAR}{}{#2}{#3}{#4}{\Z}}%
+
+% west triple of adjoint arrows with lower name
+\newcommand{\wtriadjaR}{\@ifnextchar[{\basicwtriadjaR}%
+{\hspace{\SOURCE\unitlength}\basicwtriadjaR[\ARROWLENGTH]}}%
+
+% basic west quadruple of arrows
+\def\basicwquadriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\WQUADRIAR}{\Z}}%
+
+% west quadruple of arrows
+\newcommand{\wquadriar}{\@ifnextchar[{\basicwquadriar}%
+{\hspace{\SOURCE\unitlength}\basicwquadriar[\ARROWLENGTH]}}%
+
+% basic west quadruple of adjoint arrows
+\def\basicwquadriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\WQUADRIADJAR}{\Z}}%
+
+% west quadruple of adjoint arrows
+\newcommand{\wquadriadjar}{\@ifnextchar[{\basicwquadriadjar}%
+{\hspace{\SOURCE\unitlength}\basicwquadriadjar[\ARROWLENGTH]}}%
+
+% basic west quintuple of arrows
+\def\basicwquintiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\WQUINTIAR}{\Z}}%
+
+% west quintuple of arrows
+\newcommand{\wquintiar}{\@ifnextchar[{\basicwquintiar}%
+{\hspace{\SOURCE\unitlength}\basicwquintiar[\ARROWLENGTH]}}%
+
+% basic west quintuple of adjoint arrows
+\def\basicwquintiadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\WQUINTIADJAR}{\Z}}%
+
+% west quintuple of adjoint arrows
+\newcommand{\wquintiadjar}{\@ifnextchar[{\basicwquintiadjar}%
+{\hspace{\SOURCE\unitlength}\basicwquintiadjar[\ARROWLENGTH]}}%
+
+
+% MACROS FOR DRAWING VERTICAL PICTURES
+
+% \vcase{P}{n} draws the vertical picture P with length n units.
+\newcommand{\vcase}[2]{\testdiagrammode#1{#2}}%
+
+% \Vcase{P}{f}{n} draws the vertical picture P
+% with left name f and length n units.
+\newcommand{\Vcase}[3]{\testdiagrammode\makebox[0pt]%
+{\makebox[0pt][r]{\raisebox{0pt}[0pt][0pt]{${#2}\hspace{2pt}$}}}#1{#3}}%
+
+% \vcasE{P}{f}{n} draws the vertical picture P
+% with right name f and length n units.
+\newcommand{\vcasE}[3]{\testdiagrammode\makebox[0pt]%
+{#1{#3}\makebox[0pt][l]{\raisebox{0pt}[0pt][0pt]{\hspace{2pt}$#2$}}}}%
+
+% \Visocase{P}{f}{g}{n} draws the vertical picture P
+% with names f, g and length n units.
+\newcommand{\Visocase}[4]{\testdiagrammode\makebox[0pt]%
+{\makebox[0pt][r]{\raisebox{0pt}[0pt][0pt]{$#2$\hspace{2pt}}}#1{#4}%
+\makebox[0pt][l]{\raisebox{0pt}[0pt][0pt]{\hspace{2pt}$#3$}}}}%
+
+% \vbicase{P}{n} draws the vertical bi-picture P with length n units.
+\newcommand{\vbicase}[2]{\testdiagrammode\makebox[0pt]{{#1{#2}}}}%
+
+% \Vbicase{P}{f}{g}{n} draws the vertical bi-picture P
+% with names f, g and length n units.
+\newcommand{\Vbicase}[4]{\testdiagrammode\makebox[0pt]%
+{\makebox[0pt][r]{\raisebox{0pt}[0pt][0pt]{$#2$\hspace{5.5pt}}}#1{#4}%
+\makebox[0pt][l]{\raisebox{0pt}[0pt][0pt]{\hspace{6.5pt}$#3$}}}}%
+
+% \vtricase{P}{n} draws the vertical tri-picture P
+% with length n units
+\newcommand{\vtricase}[2]%
+{\testdiagrammode\makebox[0pt]{#1{}{}{}{}{#2}}}%
+
+% \Vtricase{P}{f}{g}{h}{i}{n} draws the vertical tri-picture P
+% with length n units and names f, g, h, i.
+\newcommand{\Vtricase}[6]%
+{\testdiagrammode\makebox[0pt]{#1{#2}{#3}{#4}{#5}{#6}}}%
+
+% \vmulticase{P}{n} draws the vertical multi-picture P
+% with length n units.
+\newcommand{\vmulticase}[2]{\testdiagrammode\makebox[0pt]{#1{#2}}}%
+
+
+% SOUTH ARROWS
+
+% \SAR{n} draws a south arrow of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SAR}[1]%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,#1){\line(0,-1){#1}}%
+\put(0,0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SDIST{n} draws a south distributor of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SDIST}[1]%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,#1){\line(0,-1){#1}}%
+\put(0,0){\shead}%
+\end{picture}}}%
+\put(0,0){\distsign}%
+\end{picture}}%
+
+% \SDOTAR{n} draws a south dotted arrow of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SDOTAR}[1]%
+{\truex{100}\truey{300}%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\multiput(0,#1)(0,-\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(0,0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SMONO{n} draws a south monomorphism of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SMONO}[1]%
+{\truetail%
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,\monolength){\line(0,-1){\monolength}}%
+\put(0,\monolength){\shead}%
+\put(0,0){\shead}%
+\end{picture}}}\end{picture}}%
+
+
+% \SEPI{n} draws a south epimorphism of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SEPI}[1]%
+{\truehead%
+\epilength=#1%
+\advance\epilength by -\trueepihead%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,#1){\line(0,-1){\epilength}}%
+\put(0,\trueepihead){\shead}%
+\put(0,0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SBIMO{n} draws a south bimorphism of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SBIMO}[1]%
+{\truehead\truetail%
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\epilength=\monolength%
+\advance\epilength by -\trueepihead%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,\monolength){\line(0,-1){\epilength}}%
+\put(0,\monolength){\shead}%
+\put(0,\trueepihead){\shead}%
+\put(0,0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SBIAR{n} draws a pair of south arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SBIAR}[1]%
+{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SBIDIST{n} draws a pair of south distributors of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SBIDIST}[1]%
+{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\end{picture}}}%
+\put(-\value{x},0){\distsign}%
+\put(\value{x},0){\distsign}%
+\end{picture}}%
+
+% \SEQL{n} draws a vertical equality of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SEQL}[1]%
+{\begin{picture}(0,0)%
+\truex{100}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\end{picture}}}\end{picture}}%
+
+% \SADJAR{n} draws a pair of vertical adjoint arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SADJAR}[1]{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \SADJDIST{n} draws a pair of vertical adjoint distributors of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SADJDIST}[1]{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\end{picture}}}%
+\put(-\value{x},0){\distsign}%
+\put(\value{x},0){\distsign}%
+\end{picture}}%
+
+% \STRIAR{f}{g}{h}{i}{n} draws a triple of south arrows
+% of length n units with names f, g, h, i
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\STRIAR}[5]%
+{\truex{1200}%
+\truey{1800}%
+\truez{600}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#5)%
+\X=#5\divide\X by 2%
+\put(-\value{x},#5){\line(0,-1){#5}}%
+\put(-\value{x},0){\shead}%
+\put(0,#5){\line(0,-1){#5}}%
+\put(0,0){\shead}%
+\put(\value{x},#5){\line(0,-1){#5}}%
+\put(\value{x},0){\shead}%
+\put(-\value{y},\X){\makebox(0,0){$#1$}}%
+\put(\value{y},\X){\makebox(0,0){$#4$}}%
+\put(-\value{z},\X){\makebox(0,0){$#2$}}%
+\put(\value{z},\X){\makebox(0,0){$#3$}}%
+\end{picture}}}\end{picture}}%
+
+% \STRIADJAR{f}{g}{h}{i}{n} draws a south triple of adjoint
+% arrows of length n units with names f, g, h, i
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\STRIADJAR}[5]%
+{\truex{1200}%
+\truey{1800}%
+\truez{600}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#5)%
+\X=#5\divide\X by 2%
+\put(-\value{x},0){\line(0,1){#5}}%
+\put(-\value{x},#5){\nhead}%
+\put(0,#5){\line(0,-1){#5}}%
+\put(0,0){\shead}%
+\put(\value{x},0){\line(0,1){#5}}%
+\put(\value{x},#5){\nhead}%
+\put(-\value{y},\X){\makebox(0,0){$#1$}}%
+\put(\value{y},\X){\makebox(0,0){$#4$}}%
+\put(-\value{z},\X){\makebox(0,0){$#2$}}%
+\put(\value{z},\X){\makebox(0,0){$#3$}}%
+\end{picture}}}\end{picture}}%
+
+% \SQUADRIAR{n} draws a quadruple of south arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SQUADRIAR}[1]%
+{\truex{400}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},#1){\line(0,-1){#1}}%
+\put(-\value{y},0){\shead}%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(\value{y},#1){\line(0,-1){#1}}%
+\put(\value{y},0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SQUADRIADJAR{n} draws a south quadruple of adjoint arrows
+% of length n units and centers it in a box of width 0pt and height 0pt
+\newcommand{\SQUADRIADJAR}[1]%
+{\truex{400}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},#1){\line(0,-1){#1}}%
+\put(-\value{y},0){\shead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(\value{y},0){\line(0,1){#1}}%
+\put(\value{y},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \SQUINTIAR{n} draws a quintuple of south arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SQUINTIAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},#1){\line(0,-1){#1}}%
+\put(-\value{y},0){\shead}%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(0,#1){\line(0,-1){#1}}%
+\put(0,0){\shead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(\value{y},#1){\line(0,-1){#1}}%
+\put(\value{y},0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SQUINTIADJAR{n} draws a south quintuple of adjoint arrows
+% of length n units and centers it in a box of width 0pt and height 0pt
+\newcommand{\SQUINTIADJAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},#1){\line(0,-1){#1}}%
+\put(-\value{y},0){\shead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(0,#1){\line(0,-1){#1}}%
+\put(0,0){\shead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\put(\value{y},#1){\line(0,-1){#1}}%
+\put(\value{y},0){\shead}%
+\end{picture}}}\end{picture}}%
+
+
+% All the following commands produce south arrows
+
+% basic south arrow
+\def\basicsar[#1]{\vcase{\SAR}{#100}}%
+
+% south arrow
+\newcommand{\sar}{\@ifnextchar[{\basicsar}{\basicsar[50]}}%
+
+% basic south arrow with left name
+\def\basicSar[#1]#2{\Vcase{\SAR}{#2}{#100}}%
+
+% south arrow with left name
+\newcommand{\Sar}{\@ifnextchar[{\basicSar}{\basicSar[50]}}%
+
+% basic south arrow with right name
+\def\basicsaR[#1]#2{\vcasE{\SAR}{#2}{#100}}%
+
+% south arrow with right name
+\newcommand{\saR}{\@ifnextchar[{\basicsaR}{\basicsaR[50]}}%
+
+% basic south distributor
+\def\basicsdist[#1]{\vcase{\SDIST}{#100}}%
+
+% south distributor
+\newcommand{\sdist}{\@ifnextchar[{\basicsdist}{\basicsdist[50]}}%
+
+% basic south distributor with left name
+\def\basicSdist[#1]#2{\Vcase{\SDIST}{#2\hspace*{2pt}}{#100}}%
+
+% south distributor with left name
+\newcommand{\Sdist}{\@ifnextchar[{\basicSdist}{\basicSdist[50]}}%
+
+% basic south distributor with right name
+\def\basicsdisT[#1]#2{\vcasE{\SDIST}{\hspace*{2pt}#2}{#100}}%
+
+% south distributor with right name
+\newcommand{\sdisT}{\@ifnextchar[{\basicsdisT}{\basicsdisT[50]}}%
+
+% basic south dotted arrow
+\def\basicsdotar[#1]{\vcase{\SDOTAR}{#100}}%
+
+% south dotted arrow
+\newcommand{\sdotar}{\@ifnextchar[{\basicsdotar}{\basicsdotar[50]}}%
+
+% basic south dotted arrow with left name
+\def\basicSdotar[#1]#2{\Vcase{\SDOTAR}{#2}{#100}}%
+
+% south dotted arrow with left name
+\newcommand{\Sdotar}{\@ifnextchar[{\basicSdotar}{\basicSdotar[50]}}%
+
+% basic south dotted arrow with right name
+\def\basicsdotaR[#1]#2{\vcasE{\SDOTAR}{#2}{#100}}%
+
+% south dotted arrow with right name
+\newcommand{\sdotaR}{\@ifnextchar[{\basicsdotaR}{\basicsdotaR[50]}}%
+
+% basic south monomorphism
+\def\basicsmono[#1]{\vcase{\SMONO}{#100}}%
+
+% south arrow
+\newcommand{\smono}{\@ifnextchar[{\basicsmono}{\basicsmono[50]}}%
+
+% basic south monomorphism with left name
+\def\basicSmono[#1]#2{\Vcase{\SMONO}{#2}{#100}}%
+
+% south monomorphism with left name
+\newcommand{\Smono}{\@ifnextchar[{\basicSmono}{\basicSmono[50]}}%
+
+% basic south monomorphism with right name
+\def\basicsmonO[#1]#2{\vcasE{\SMONO}{#2}{#100}}%
+
+% south monomorphism with right name
+\newcommand{\smonO}{\@ifnextchar[{\basicsmonO}{\basicsmonO[50]}}%
+
+% basic south epimorphism
+\def\basicsepi[#1]{\vcase{\SEPI}{#100}}%
+
+% south epimorphism
+\newcommand{\sepi}{\@ifnextchar[{\basicsepi}{\basicsepi[50]}}%
+
+% basic south epimorphism with left name
+\def\basicSepi[#1]#2{\Vcase{\SEPI}{#2}{#100}}%
+
+% south epimorphism with left name
+\newcommand{\Sepi}{\@ifnextchar[{\basicSepi}{\basicSepi[50]}}%
+
+% basic south epimorphism with right name
+\def\basicsepI[#1]#2{\vcasE{\SEPI}{#2}{#100}}%
+
+% south epimorphism with right name
+\newcommand{\sepI}{\@ifnextchar[{\basicsepI}{\basicsepI[50]}}%
+
+% basic south bimorphism
+\def\basicsbimo[#1]{\vcase{\SBIMO}{#100}}%
+
+% south bimorphism
+\newcommand{\sbimo}{\@ifnextchar[{\basicsbimo}{\basicsbimo[50]}}%
+
+% basic south bimorphism with left name
+\def\basicSbimo[#1]#2{\Vcase{\SBIMO}{#2}{#100}}%
+
+% south bimorphism with left name
+\newcommand{\Sbimo}{\@ifnextchar[{\basicSbimo}{\basicSbimo[50]}}%
+
+% basic south bimorphism with right name
+\def\basicsbimO[#1]#2{\vcasE{\SBIMO}{#2}{#100}}%
+
+% south bimorphism with right name
+\newcommand{\sbimO}{\@ifnextchar[{\basicsbimO}{\basicsbimO[50]}}%
+
+% basic south isomorphism
+\def\basicsiso[#1]{\Visocase{\SAR}{\isosign}{}{#100}}%
+
+% south isomorphism
+\newcommand{\siso}{\@ifnextchar[{\basicsiso}{\basicsiso[50]}}%
+
+% basic south isomorphism with left name
+\def\basicSiso[#1]#2{\Visocase{\SAR}{#2}{\isosign}{#100}}%
+
+% south isomorphism with left name
+\newcommand{\Siso}{\@ifnextchar[{\basicSiso}{\basicSiso[50]}}%
+
+% basic south isomorphism with right name
+\def\basicsisO[#1]#2{\Visocase{\SAR}{\isosign}{#2}{#100}}%
+
+% south isomorphism with right name
+\newcommand{\sisO}{\@ifnextchar[{\basicsisO}{\basicsisO[50]}}%
+
+% basic south equality
+\def\basicseql[#1]{\vcase{\SEQL}{#100}}%
+
+% south equality
+\newcommand{\seql}{\@ifnextchar[{\basicseql}{\basicseql[50]}}%
+
+% basic south equality with left name
+\def\basicSeql[#1]#2{\Vcase{\SEQL}{#2\hspace*{2pt}}{#100}}%
+
+% south equality with left name
+\newcommand{\Seql}{\@ifnextchar[{\basicSeql}{\basicSeql[50]}}%
+
+% basic south equality with right name
+\def\basicseqL[#1]#2{\vcasE{\SEQL}{\hspace*{2pt}#2}{#100}}%
+
+% south equality with right name
+\newcommand{\seqL}{\@ifnextchar[{\basicseqL}{\basicseqL[50]}}%
+
+% basic pair of south arrows
+\def\basicsbiar[#1]{\vbicase{\SBIAR}{#100}}%
+
+% pair of south arrows
+\newcommand{\sbiar}{\@ifnextchar[{\basicsbiar}{\basicsbiar[50]}}%
+
+% basic pair of south arrows with names
+\def\basicSbiar[#1]#2#3{\Vbicase{\SBIAR}{#2}{#3}{#100}}%
+
+% pair of south arrows with names
+\newcommand{\Sbiar}{\@ifnextchar[{\basicSbiar}{\basicSbiar[50]}}%
+\let\sbiaR=\Sbiar
+
+% basic pair of south distributors
+\def\basicsbidist[#1]{\vbicase{\SBIDIST}{#100}}%
+
+% pair of south distributors
+\newcommand{\sbidist}{\@ifnextchar[{\basicsbidist}{\basicsbidist[50]}}%
+
+% basic pair of south distributors with names
+\def\basicSbidist[#1]#2#3%
+{\Vbicase{\SBIDIST}{#2\hspace*{2pt}}{\hspace*{2pt}#3}{#100}}%
+
+% pair of south distributors with names
+\newcommand{\Sbidist}{\@ifnextchar[{\basicSbidist}{\basicSbidist[50]}}%
+\let\sbidisT=\Sbidist
+
+% basic pair of south adjoint arrows
+\def\basicsadjar[#1]{\vbicase{\SADJAR}{#100}}%
+
+% pair of south adjoint arrows
+\newcommand{\sadjar}{\@ifnextchar[{\basicsadjar}{\basicsadjar[50]}}%
+
+% basic pair of south adjoint arrows with names
+\def\basicSadjar[#1]#2#3{\Vbicase{\SADJAR}{#2}{#3}{#100}}%
+
+% pair of south adjoint arrows with names
+\newcommand{\Sadjar}{\@ifnextchar[{\basicSadjar}{\basicSadjar[50]}}%
+\let\sadjaR=\Sadjar
+
+% basic pair of south adjoint distributors
+\def\basicsadjdist[#1]{\vbicase{\SADJDIST}{#100}}%
+
+% pair of south adjoint distributors
+\newcommand{\sadjdist}{\@ifnextchar[{\basicsadjdist}{\basicsadjdist[50]}}%
+
+% basic pair of south adjoint distributors with names
+\def\basicSadjdist[#1]#2#3%
+{\Vbicase{\SADJDIST}{#2\hspace*{2pt}}{\hspace*{2pt}#3}{#100}}%
+
+% pair of south adjoint distributors with names
+\newcommand{\Sadjdist}{\@ifnextchar[{\basicSadjdist}{\basicSadjdist[50]}}%
+\let\sadjdisT=\Sadjdist
+
+% basic south triple of arrows
+\def\basicstriar[#1]{\vtricase{\STRIAR}{#100}}%
+
+% south triple of arrows
+\newcommand{\striar}{\@ifnextchar[{\basicstriar}{\basicstriar[50]}}%
+
+% basic south triple of arrows with left names
+\def\basicStriar[#1]#2#3#4{\Vtricase{\STRIAR}{#2}{#3}{#4}{}{#100}}%
+
+% south triple of arrows with left names
+\newcommand{\Striar}{\@ifnextchar[{\basicStriar}{\basicStriar[50]}}%
+
+% basic south triple of arrows with right names
+\def\basicstriaR[#1]#2#3#4{\Vtricase{\STRIAR}{}{#2}{#3}{#4}{#100}}%
+
+% south triple of arrows with right name
+\newcommand{\striaR}{\@ifnextchar[{\basicstriaR}{\basicstriaR[50]}}%
+
+% basic south triple of adjoint arrows
+\def\basicstriadjar[#1]{\vtricase{\STRIADJAR}{#100}}%
+
+% south triple of adjoint arrows
+\newcommand{\striadjar}{\@ifnextchar[{\basicstriadjar}{\basicstriadjar[50]}}%
+
+% basic south triple of adjoint arrows with left names
+\def\basicStriadjar[#1]#2#3#4{\Vtricase{\STRIADJAR}{#2}{#3}{#4}{}{#100}}%
+
+% south triple of adjoint arrows with left names
+\newcommand{\Striadjar}{\@ifnextchar[{\basicStriadjar}{\basicStriadjar[50]}}%
+
+% basic south triple of adjoint arrows with right names
+\def\basicstriadjaR[#1]#2#3#4{\Vtricase{\STRIADJAR}{}{#2}{#3}{#4}{#100}}%
+
+% south triple of adjoint arrows with right name
+\newcommand{\striadjaR}{\@ifnextchar[{\basicstriadjaR}{\basicstriadjaR[50]}}%
+
+% basic south quadruple of arrows
+\def\basicsquadriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\SQUADRIAR}{\Z}}%
+
+% south quadruple of arrows
+\newcommand{\squadriar}{\@ifnextchar[{\basicsquadriar}%
+{\hspace{\SOURCE\unitlength}\basicsquadriar[\ARROWLENGTH]}}%
+
+% basic south quadruple of adjoint arrows
+\def\basicsquadriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\SQUADRIADJAR}{\Z}}%
+
+% south quadruple of adjoint arrows
+\newcommand{\squadriadjar}{\@ifnextchar[{\basicsquadriadjar}%
+{\hspace{\SOURCE\unitlength}\basicsquadriadjar[\ARROWLENGTH]}}%
+
+% basic south quintuple of arrows
+\def\basicsquintiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\SQUINTIAR}{\Z}}%
+
+% south quintuple of arrows
+\newcommand{\squintiar}{\@ifnextchar[{\basicsquintiar}%
+{\hspace{\SOURCE\unitlength}\basicsquintiar[\ARROWLENGTH]}}%
+
+% basic south quintuple of adjoint arrows
+\def\basicsquintiadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\SQUINTIADJAR}{\Z}}%
+
+% south quintuple of adjoint arrows
+\newcommand{\squintiadjar}{\@ifnextchar[{\basicsquintiadjar}%
+{\hspace{\SOURCE\unitlength}\basicsquintiadjar[\ARROWLENGTH]}}%
+
+
+% NORTH ARROWS
+
+% \NAR{n} draws a north arrow of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NAR}[1]%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,0){\line(0,1){#1}}%
+\put(0,#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NDIST{n} draws a north distributor of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NDIST}[1]%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,0){\line(0,1){#1}}%
+\put(0,#1){\nhead}%
+\end{picture}}}
+\put(0,0){\distsign}%
+\end{picture}}%
+
+% \NDOTAR{n} draws a north dotted arrow of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NDOTAR}[1]%
+{\truex{100}\truey{300}%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\multiput(0,0)(0,\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(0,#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+
+% \NMONO{n} draws a north monomorphism of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NMONO}[1]%
+{\truetail%
+\monolength=#1%
+\advance\monolength by -\truemonotail%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,\truemonotail){\line(0,1){\monolength}}%
+\put(0,#1){\nhead}%
+\put(0,\truemonotail){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NEPI{n} draws a north epimorphism of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NEPI}[1]%
+{\truehead%
+\epilength=#1%
+\advance\epilength by -\trueepihead%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,0){\line(0,1){\epilength}}%
+\put(0,#1){\nhead}%
+\put(0,\epilength){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NBIMO{n} draws a north bimorphism of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NBIMO}[1]%
+{\truehead\truetail%
+\epilength=#1%
+\advance\epilength by -\trueepihead%
+\monolength=\epilength%
+\advance\monolength by -\truemonotail%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,\truemonotail){\line(0,1){\monolength}}%
+\put(0,#1){\nhead}%
+\put(0,\truemonotail){\nhead}%
+\put(0,\epilength){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NBIAR{n} draws a pair of north arrows of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NBIAR}[1]%
+{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NBIDIST{n} draws a pair of north distributors of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NBIDIST}[1]%
+{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\end{picture}}}
+\put(-\value{x},0){\distsign}%
+\put(\value{x},0){\distsign}%
+\end{picture}}%
+
+% \NADJAR{n} draws a pair of vertical adjoint arrows of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NADJAR}[1]{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NADJDIST{n} draws a pair of vertical adjoint distributors of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NADJDIST}[1]{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\end{picture}}}
+\put(-\value{x},0){\distsign}%
+\put(\value{x},0){\distsign}%
+\end{picture}}%
+
+% \NTRIAR{f}{g}{h}{i}{n} draws a triple of north arrows
+% of length n units with names f, g, h, i
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NTRIAR}[5]%
+{\truex{1200}%
+\truey{1800}%
+\truez{600}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#5)%
+\X=#5\divide\X by 2%
+\put(-\value{x},0){\line(0,1){#5}}%
+\put(-\value{x},#5){\nhead}%
+\put(0,0){\line(0,1){#5}}%
+\put(0,#5){\nhead}%
+\put(\value{x},0){\line(0,1){#5}}%
+\put(\value{x},#5){\nhead}%
+\put(-\value{y},\X){\makebox(0,0){$#1$}}%
+\put(\value{y},\X){\makebox(0,0){$#4$}}%
+\put(-\value{z},\X){\makebox(0,0){$#2$}}%
+\put(\value{z},\X){\makebox(0,0){$#3$}}%
+\end{picture}}}\end{picture}}%
+
+% \NTRIADJAR{f}{g}{h}{i}{n} draws a north triple of adjoint
+% arrows of length n units with names f, g, h, i
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NTRIADJAR}[5]%
+{\truex{1200}%
+\truey{1800}%
+\truez{600}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#5)%
+\X=#5\divide\X by 2%
+\put(-\value{x},#5){\line(0,-1){#5}}%
+\put(-\value{x},0){\shead}%
+\put(0,0){\line(0,1){#5}}%
+\put(0,#5){\nhead}%
+\put(\value{x},#5){\line(0,-1){#5}}%
+\put(\value{x},0){\shead}%
+\put(-\value{y},\X){\makebox(0,0){$#1$}}%
+\put(\value{y},\X){\makebox(0,0){$#4$}}%
+\put(-\value{z},\X){\makebox(0,0){$#2$}}%
+\put(\value{z},\X){\makebox(0,0){$#3$}}%
+\end{picture}}}\end{picture}}%
+
+% \NQUADRIAR{n} draws a quadruple of north arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NQUADRIAR}[1]%
+{\truex{400}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},0){\line(0,1){#1}}%
+\put(-\value{y},#1){\nhead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\put(\value{y},0){\line(0,1){#1}}%
+\put(\value{y},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NQUADRIADJAR{n} draws a north quadruple of adjoint arrows
+% of length n units and centers it in a box of width 0pt and height 0pt
+\newcommand{\NQUADRIADJAR}[1]%
+{\truex{400}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},0){\line(0,1){#1}}%
+\put(-\value{y},#1){\nhead}%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\put(\value{y},#1){\line(0,-1){#1}}%
+\put(\value{y},0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \NQUINTIAR{n} draws a quintuple of north arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NQUINTIAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},0){\line(0,1){#1}}%
+\put(-\value{y},#1){\nhead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(0,0){\line(0,1){#1}}%
+\put(0,#1){\nhead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\put(\value{y},0){\line(0,1){#1}}%
+\put(\value{y},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NQUINTIADJAR{n} draws a north quintuple of adjoint arrows
+% of length n units and centers it in a box of width 0pt and height 0pt
+\newcommand{\NQUINTIADJAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},0){\line(0,1){#1}}%
+\put(-\value{y},#1){\nhead}%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(0,0){\line(0,1){#1}}%
+\put(0,#1){\nhead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(\value{y},0){\line(0,1){#1}}%
+\put(\value{y},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+
+% All the following commands produce north arrows
+
+% basic north arrow
+\def\basicnar[#1]{\vcase{\NAR}{#100}}%
+
+% north arrow
+\newcommand{\nar}{\@ifnextchar[{\basicnar}{\basicnar[50]}}%
+
+% basic north arrow with left name
+\def\basicNar[#1]#2{\Vcase{\NAR}{#2}{#100}}%
+
+% north arrow with left name
+\newcommand{\Nar}{\@ifnextchar[{\basicNar}{\basicNar[50]}}%
+
+% basic north arrow with right name
+\def\basicnaR[#1]#2{\vcasE{\NAR}{#2}{#100}}%
+
+% north arrow with right name
+\newcommand{\naR}{\@ifnextchar[{\basicnaR}{\basicnaR[50]}}%
+
+% basic north distributor
+\def\basicndist[#1]{\vcase{\NDIST}{#100}}%
+
+% north distributor
+\newcommand{\ndist}{\@ifnextchar[{\basicndist}{\basicndist[50]}}%
+
+% basic north distributor with left name
+\def\basicNdist[#1]#2{\Vcase{\NDIST}{#2\hspace*{2pt}}{#100}}%
+
+% north distributor with left name
+\newcommand{\Ndist}{\@ifnextchar[{\basicNdist}{\basicNdist[50]}}%
+
+% basic north distributor with right name
+\def\basicndisT[#1]#2{\vcasE{\NDIST}{\hspace*{2pt}#2}{#100}}%
+
+% north distributor with right name
+\newcommand{\ndisT}{\@ifnextchar[{\basicndisT}{\basicndisT[50]}}%
+
+% basic north dotted arrow
+\def\basicndotar[#1]{\vcase{\NDOTAR}{#100}}%
+
+% north dotted arrow
+\newcommand{\ndotar}{\@ifnextchar[{\basicndotar}{\basicndotar[50]}}%
+
+% basic north dotted arrow with left name
+\def\basicNdotar[#1]#2{\Vcase{\NDOTAR}{#2}{#100}}%
+
+% north dotted arrow with left name
+\newcommand{\Ndotar}{\@ifnextchar[{\basicNdotar}{\basicNdotar[50]}}%
+
+% basic north dotted arrow with right name
+\def\basicndotaR[#1]#2{\vcasE{\NDOTAR}{#2}{#100}}%
+
+% north dotted arrow with right name
+\newcommand{\ndotaR}{\@ifnextchar[{\basicndotaR}{\basicndotaR[50]}}%
+
+% basic north monomorphism
+\def\basicnmono[#1]{\vcase{\NMONO}{#100}}%
+
+% north arrow
+\newcommand{\nmono}{\@ifnextchar[{\basicnmono}%
+{\basicnmono[50]}}%
+
+% basic north monomorphism with left name
+\def\basicNmono[#1]#2{\Vcase{\NMONO}{#2}{#100}}%
+
+% north monomorphism with left name
+\newcommand{\Nmono}{\@ifnextchar[{\basicNmono}{\basicNmono[50]}}%
+
+% basic north monomorphism with right name
+\def\basicnmonO[#1]#2{\vcasE{\NMONO}{#2}{#100}}%
+
+% north monomorphism with right name
+\newcommand{\nmonO}{\@ifnextchar[{\basicnmonO}{\basicnmonO[50]}}%
+
+% basic north epimorphism
+\def\basicnepi[#1]{\vcase{\NEPI}{#100}}%
+
+% north epimorphism
+\newcommand{\nepi}{\@ifnextchar[{\basicnepi}{\basicnepi[50]}}%
+
+% basic north epimorphism with left name
+\def\basicNepi[#1]#2{\Vcase{\NEPI}{#2}{#100}}%
+
+% north epimorphism with left name
+\newcommand{\Nepi}{\@ifnextchar[{\basicNepi}{\basicNepi[50]}}%
+
+% basic north epimorphism with right name
+\def\basicnepI[#1]#2{\vcasE{\NEPI}{#2}{#100}}%
+
+% north epimorphism with right name
+\newcommand{\nepI}{\@ifnextchar[{\basicnepI}{\basicnepI[50]}}%
+
+% basic north bimorphism
+\def\basicnbimo[#1]{\vcase{\NBIMO}{#100}}%
+
+% north bimorphism
+\newcommand{\nbimo}{\@ifnextchar[{\basicnbimo}{\basicnbimo[50]}}%
+
+% basic north bimorphism with left name
+\def\basicNbimo[#1]#2{\Vcase{\NBIMO}{#2}{#100}}%
+
+% north bimorphism with left name
+\newcommand{\Nbimo}{\@ifnextchar[{\basicNbimo}{\basicNbimo[50]}}%
+
+% basic north bimorphism with right name
+\def\basicnbimO[#1]#2{\vcasE{\NBIMO}{#2}{#100}}%
+
+% north bimorphism with right name
+\newcommand{\nbimO}{\@ifnextchar[{\basicnbimO}{\basicnbimO[50]}}%
+
+% basic north isomorphism
+\def\basicniso[#1]{\Visocase{\NAR}{\isosign}{}{#100}}%
+
+% north isomorphism
+\newcommand{\niso}{\@ifnextchar[{\basicniso}{\basicniso[50]}}%
+
+% basic north isomorphism with left name
+\def\basicNiso[#1]#2{\Visocase{\NAR}{#2}{\isosign}{#100}}%
+
+% north isomorphism with left name
+\newcommand{\Niso}{\@ifnextchar[{\basicNiso}{\basicNiso[50]}}%
+
+% basic north isomorphism with right name
+\def\basicnisO[#1]#2{\Visocase{\NAR}{\isosign}{#2}{#100}}%
+
+% north isomorphism with right name
+\newcommand{\nisO}{\@ifnextchar[{\basicnisO}{\basicnisO[50]}}%
+
+% north equality
+\let\neql=\seql%
+
+% north equality with left name
+\let\Neql=\Seql%
+
+% north equality with right name
+\let\neqL=\seqL%
+
+% basic pair of north arrows
+\def\basicnbiar[#1]{\vbicase{\NBIAR}{#100}}%
+
+% pair of north arrows
+\newcommand{\nbiar}{\@ifnextchar[{\basicnbiar}{\basicnbiar[50]}}%
+
+% basic pair of north arrows with names
+\def\basicNbiar[#1]#2#3{\Vbicase{\NBIAR}{#2}{#3}{#100}}%
+
+% pair of north arrows with names
+\newcommand{\Nbiar}{\@ifnextchar[{\basicNbiar}{\basicNbiar[50]}}%
+\let\nbiaR=\Nbiar
+
+% basic pair of north distributors
+\def\basicnbidist[#1]{\vbicase{\NBIDIST}{#100}}%
+
+% pair of north distributors
+\newcommand{\nbidist}{\@ifnextchar[{\basicnbidist}{\basicnbidist[50]}}%
+
+% basic pair of north distributors with names
+\def\basicNbidist[#1]#2#3%
+{\Vbicase{\NBIDIST}{#2\hspace*{2pt}}{\hspace*{2pt}#3}{#100}}%
+
+% pair of north distributors with names
+\newcommand{\Nbidist}{\@ifnextchar[{\basicNbidist}{\basicNbidist[50]}}%
+\let\nbidisT=\Nbidist
+
+% basic pair of north adjoint arrows
+\def\basicnadjar[#1]{\vbicase{\NADJAR}{#100}}%
+
+% pair of north adjoint arrows
+\newcommand{\nadjar}{\@ifnextchar[{\basicnadjar}{\basicnadjar[50]}}%
+
+% basic pair of north adjoint arrows with names
+\def\basicNadjar[#1]#2#3{\Vbicase{\NADJAR}{#2}{#3}{#100}}%
+
+% pair of north adjoint arrows with names
+\newcommand{\Nadjar}{\@ifnextchar[{\basicNadjar}{\basicNadjar[50]}}%
+\let\nadjaR=\Nadjar
+
+% basic pair of north adjoint distributors
+\def\basicnadjdist[#1]{\vbicase{\NADJDIST}{#100}}%
+
+% pair of north adjoint distributors
+\newcommand{\nadjdist}{\@ifnextchar[{\basicnadjdist}{\basicnadjdist[50]}}%
+
+% basic pair of north adjoint distributors with names
+\def\basicNadjdist[#1]#2#3%
+{\Vbicase{\NADJDIST}{#2\hspace*{2pt}}{\hspace*{2pt}#3}{#100}}%
+
+% pair of north adjoint distributors with names
+\newcommand{\Nadjdist}{\@ifnextchar[{\basicNadjdist}{\basicNadjdist[50]}}%
+\let\nadjdisT=\Nadjdist
+
+% basic north triple of arrows
+\def\basicntriar[#1]{\vtricase{\NTRIAR}{#100}}%
+
+% north triple of arrows
+\newcommand{\ntriar}{\@ifnextchar[{\basicntriar}{\basicntriar[50]}}%
+
+% basic north triple of arrows with left names
+\def\basicNtriar[#1]#2#3#4{\Vtricase{\NTRIAR}{#2}{#3}{#4}{}{#100}}%
+
+% north triple of arrows with left names
+\newcommand{\Ntriar}{\@ifnextchar[{\basicNtriar}{\basicNtriar[50]}}%
+
+% basic north triple of arrows with right names
+\def\basicntriaR[#1]#2#3#4{\Vtricase{\NTRIAR}{}{#2}{#3}{#4}{#100}}%
+
+% north triple of arrows with right name
+\newcommand{\ntriaR}{\@ifnextchar[{\basicntriaR}{\basicntriaR[50]}}%
+
+% basic north triple of adjoint arrows
+\def\basicntriadjar[#1]{\vtricase{\NTRIADJAR}{#100}}%
+
+% north triple of adjoint arrows
+\newcommand{\ntriadjar}{\@ifnextchar[{\basicntriadjar}{\basicntriadjar[50]}}%
+
+% basic north triple of adjoint arrows with left names
+\def\basicNtriadjar[#1]#2#3#4{\Vtricase{\NTRIADJAR}{#2}{#3}{#4}{}{#100}}%
+
+% north triple of adjoint arrows with left names
+\newcommand{\Ntriadjar}{\@ifnextchar[{\basicNtriadjar}{\basicNtriadjar[50]}}%
+
+% basic north triple of adjoint arrows with right names
+\def\basicntriadjaR[#1]#2#3#4{\Vtricase{\NTRIADJAR}{}{#2}{#3}{#4}{#100}}%
+
+% north triple of adjoint arrows with right name
+\newcommand{\ntriadjaR}{\@ifnextchar[{\basicntriadjaR}{\basicntriadjaR[50]}}%
+
+% basic north quadruple of arrows
+\def\basicnquadriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\NQUADRIAR}{\Z}}%
+
+% north quadruple of arrows
+\newcommand{\nquadriar}{\@ifnextchar[{\basicnquadriar}%
+{\hspace{\SOURCE\unitlength}\basicnquadriar[\ARROWLENGTH]}}%
+
+% basic north quadruple of adjoint arrows
+\def\basicnquadriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\NQUADRIADJAR}{\Z}}%
+
+% north quadruple of adjoint arrows
+\newcommand{\nquadriadjar}{\@ifnextchar[{\basicnquadriadjar}%
+{\hspace{\SOURCE\unitlength}\basicnquadriadjar[\ARROWLENGTH]}}%
+
+% basic north quintuple of arrows
+\def\basicnquintiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\NQUINTIAR}{\Z}}%
+
+% north quintuple of arrows
+\newcommand{\nquintiar}{\@ifnextchar[{\basicnquintiar}%
+{\hspace{\SOURCE\unitlength}\basicnquintiar[\ARROWLENGTH]}}%
+
+% basic north quintuple of adjoint arrows
+\def\basicnquintiadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\NQUINTIADJAR}{\Z}}%
+
+% north quintuple of adjoint arrows
+\newcommand{\nquintiadjar}{\@ifnextchar[{\basicnquintiadjar}%
+{\hspace{\SOURCE\unitlength}\basicnquintiadjar[\ARROWLENGTH]}}%
+
+
+% MACROS FOR FIRST DIAGONAL PICTURES
+
+
+% \fdcase{P}{f}{g}{n} draws the picture P with names f, g
+% and length n units
+\newcommand{\fdcase}[4]{\testdiagrammode\begin{picture}(0,0)%
+\put(0,0){#1{#4}}%
+\truex{200}\truey{600}\truez{600}%
+\put(-\value{x},-\value{x}){\makebox(0,\value{z})[r]{${#2}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#3}$}}%
+\end{picture}}%
+
+% \fdbicase{P}{f}{g}{n} draws the bipicture P with names f, g
+% and length n units
+\newcommand{\fdbicase}[4]{\testdiagrammode\begin{picture}(0,0)%
+\put(0,0){#1{#4}}%
+\truex{900}\truey{150}%
+\put(-\value{x},\value{y}){${#2}$}%
+\truex{300}\truey{1050}%
+\put(\value{x},-\value{y}){${#3}$}%
+\end{picture}}%
+
+
+% NORTH-EAST ARROWS
+
+% \NEAR{n} draws a north-east arrow of length nx100 units
+\newcommand{\NEAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\line(1,1){#1}}%
+\put(\Y,\Y){\nehead}%
+\end{picture}}%
+
+% \NEDIST{n} draws a north-east distributor of length n units
+\newcommand{\NEDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\line(1,1){#1}}%
+\put(\Y,\Y){\nehead}%
+\put(0,0){\distsign}%
+\end{picture}}%
+
+% \NEDOTAR{n} draws a north-east dotted arrow of length n units
+\newcommand{\NEDOTAR}[1]%
+{\truex{100}\truey{212}%
+\Y=#1%
+\divide\Y by 2%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Y,-\Y)(\value{y},\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Y,\Y){\nehead}%
+\end{picture}}%
+
+% \NEMONO{n} draws a north-east monomorphism of length n units
+\newcommand{\NEMONO}[1]{%
+\Y=#1%
+\divide \Y by 2%
+\Truetail%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\begin{picture}(0,0)%
+\put(-\monolength,-\monolength){\line(1,1){\bimolength}}%
+\put(-\monolength,-\monolength){\nehead}%
+\put(\Y,\Y){\nehead}%
+\end{picture}}%
+
+% \NEEPI{n} draws a north-east epimorphism of length n units
+\newcommand{\NEEPI}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\line(1,1){\bimolength}}%
+\put(\epilength,\epilength){\nehead}%
+\put(\Y,\Y){\nehead}%
+\end{picture}}%
+
+% \NEBIMO{n} draws a north-east bimorphism of length n units
+\newcommand{\NEBIMO}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truetail\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\begin{picture}(0,0)%
+\put(-\monolength,-\monolength){\line(1,1){\bimolength}}%
+\put(-\monolength,-\monolength){\nehead}%
+\put(\epilength,\epilength){\nehead}%
+\put(\Y,\Y){\nehead}%
+\end{picture}}%
+
+% \NEBIAR{n} draws a pair of north-east arrows of length n units
+\newcommand{\NEBIAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\put(-\value{x},\value{x}){\line(1,1){#1}}%
+\put(\value{x},-\value{x}){\line(1,1){#1}}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\monolength,\epilength){\nehead}%
+\put(\epilength,\monolength){\nehead}%
+\end{picture}}\end{picture}}%
+
+% \NEBIDIST{n} draws a pair of north-east distributors of length n units
+\newcommand{\NEBIDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},-\value{x}){\line(1,1){#1}}%
+\put(\epilength,\monolength){\nehead}%
+\end{picture}}%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by \value{x}%
+\epilength=#1%
+\advance\epilength by -\value{x}%
+\put(-\value{x},\value{x}){\line(1,1){#1}}%
+\put(\epilength,\monolength){\nehead}%
+\end{picture}}%
+\put(-\value{x},\value{x}){\distsign}%
+\put(\value{x},-\value{x}){\distsign}%
+\end{picture}}%
+
+% \NEEQL{n} draws a north-east equality of length n units
+\newcommand{\NEEQL}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{70}%
+\put(-\value{x},\value{x}){\line(1,1){#1}}%
+\put(\value{x},-\value{x}){\line(1,1){#1}}%
+\end{picture}}\end{picture}}%
+
+% \NEADJAR{n} draws a north-east pair of adjoint arrows of length n units
+\newcommand{\NEADJAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},-\value{x}){\line(1,1){#1}}%
+\put(\epilength,\monolength){\nehead}%
+\end{picture}}%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},\value{x}){\line(-1,-1){#1}}%
+\put(-\epilength,-\monolength){\swhead}%
+\end{picture}}\end{picture}}%
+
+% \NEADJDIST{n} draws a north-east pair of adjoint distributors of length n units
+\newcommand{\NEADJDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},-\value{x}){\line(1,1){#1}}%
+\put(\epilength,\monolength){\nehead}%
+\end{picture}}%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},\value{x}){\line(-1,-1){#1}}%
+\put(-\epilength,-\monolength){\swhead}%
+\end{picture}}%
+\put(-\value{x},\value{x}){\distsign}%
+\put(\value{x},-\value{x}){\distsign}%
+\end{picture}}%
+
+
+% All the following commands draw north-east arrows
+
+% north-east arrow of length nx100 units
+\def\basicnear[#1]{\fdcase{\NEAR}{}{}{#100}}%
+
+% north-east arrow
+\newcommand{\near}{\@ifnextchar[{\basicnear}{\basicnear[59]}}%
+
+% north-east arrow with upper name [1] and length nx100 units
+\def\basicNear[#1]#2{\fdcase{\NEAR}{#2}{}{#100}}%
+
+% north-east arrow with upper name
+\newcommand{\Near}{\@ifnextchar[{\basicNear}{\basicNear[59]}}%
+
+% north-east arrow with lower name [1] and length nx100 units
+\def\basicneaR[#1]#2{\fdcase{\NEAR}{}{#2}{#100}}%
+
+% north-east arrow with lower name [1]
+\newcommand{\neaR}{\@ifnextchar[{\basicneaR}{\basicneaR[59]}}%
+
+% north-east distributor of length nx100 units
+\def\basicnedist[#1]{\fdcase{\NEDIST}{}{}{#100}}%
+
+% north-east distributor
+\newcommand{\nedist}{\@ifnextchar[{\basicnedist}{\basicnedist[59]}}%
+
+% north-east distributor with upper name [1] and length nx100 units
+\def\basicNedist[#1]#2{\fdcase{\NEDIST}{#2}{}{#100}}%
+
+% north-east distributor with upper name
+\newcommand{\Nedist}{\@ifnextchar[{\basicNedist}{\basicNedist[59]}}%
+
+% north-east distributor with lower name [1] and length nx100 units
+\def\basicnedisT[#1]#2{\fdcase{\NEDIST}{}{#2}{#100}}%
+
+% north-east distributor with lower name [1]
+\newcommand{\nedisT}{\@ifnextchar[{\basicnedisT}{\basicnedisT[59]}}%
+
+% north-east dotted arrow of length nx100 units
+\def\basicnedotar[#1]{\fdcase{\NEDOTAR}{}{}{#100}}%
+
+% north-east dotted arrow
+\newcommand{\nedotar}{\@ifnextchar[{\basicnedotar}{\basicnedotar[59]}}%
+
+% north-east dotted arrow with upper name [1] and length nx100 units
+\def\basicNedotar[#1]#2{\fdcase{\NEDOTAR}{#2}{}{#100}}%
+
+% north-east dotted arrow with upper name
+\newcommand{\Nedotar}{\@ifnextchar[{\basicNedotar}{\basicNedotar[59]}}%
+
+% north-east dotted arrow with lower name [1] and length nx100 units
+\def\basicnedotaR[#1]#2{\fdcase{\NEDOTAR}{}{#2}{#100}}%
+
+% north-east dotted arrow with lower name [1]
+\newcommand{\nedotaR}{\@ifnextchar[{\basicnedotaR}{\basicnedotaR[59]}}%
+
+% north-east monomorphism of length nx100 units
+\def\basicnemono[#1]{\fdcase{\NEMONO}{}{}{#100}}%
+
+% north-east monomorphism
+\newcommand{\nemono}{\@ifnextchar[{\basicnemono}{\basicnemono[59]}}%
+
+% north-east monomorphism with upper name [1] and length nx100 units
+\def\basicNemono[#1]#2{\fdcase{\NEMONO}{#2}{}{#100}}%
+
+% north-east monomophism with upper name
+\newcommand{\Nemono}{\@ifnextchar[{\basicNemono}{\basicNemono[59]}}%
+
+% north-east monomorphism with lower name [1] and length nx100 units
+\def\basicnemonO[#1]#2{\fdcase{\NEMONO}{}{#2}{#100}}%
+
+% north-east monomorphism with lower name [1]
+\newcommand{\nemonO}{\@ifnextchar[{\basicnemonO}{\basicnemonO[59]}}%
+
+% north-east epimorphism of length nx100 units
+\def\basicneepi[#1]{\fdcase{\NEEPI}{}{}{#100}}%
+
+% north-east epimorphism
+\newcommand{\neepi}{\@ifnextchar[{\basicneepi}{\basicneepi[59]}}%
+
+% north-east epimorphism with upper name [1] and length nx100 units
+\def\basicNeepi[#1]#2{\fdcase{\NEEPI}{#2}{}{#100}}%
+
+% north-east epimorphism with upper name
+\newcommand{\Neepi}{\@ifnextchar[{\basicNeepi}{\basicNeepi[59]}}%
+
+% north-east epimorphism with lower name [1] and length nx100 units
+\def\basicneepI[#1]#2{\fdcase{\NEEPI}{}{#2}{#100}}%
+
+% north-east epimorphism with lower name [1]
+\newcommand{\neepI}{\@ifnextchar[{\basicneepI}{\basicneepI[59]}}%
+
+% north-east bimorphism of length nx100 units
+\def\basicnebimo[#1]{\fdcase{\NEBIMO}{}{}{#100}}%
+
+% north-east bimorphism
+\newcommand{\nebimo}{\@ifnextchar[{\basicnebimo}{\basicnebimo[59]}}%
+
+% north-east bimorphism with upper name [1] and length nx100 units
+\def\basicNebimo[#1]#2{\fdcase{\NEBIMO}{#2}{}{#100}}%
+
+% north-east bimorphism with upper name
+\newcommand{\Nebimo}{\@ifnextchar[{\basicNebimo}{\basicNebimo[59]}}%
+
+% north-east bimorphism with lower name [1] and length nx100 units
+\def\basicnebimO[#1]#2{\fdcase{\NEBIMO}{}{#2}{#100}}%
+
+% north-east bimorphism with lower name [1]
+\newcommand{\nebimO}{\@ifnextchar[{\basicnebimO}{\basicnebimO[59]}}%
+
+% north-east isomorphism of length nx100 units
+\def\basicneiso[#1]{\fdcase{\NEAR}{\hspace{-2pt}\isosign}{}{#100}}%
+
+% north-east isomorphism
+\newcommand{\neiso}{\@ifnextchar[{\basicneiso}{\basicneiso[59]}}%
+
+% north-east isomorphism with upper name [1] and length nx100 units
+\def\basicNeiso[#1]#2{\fdcase{\NEAR}{#2}{\isosign}{#100}}%
+
+% north-east isomorphism with upper name
+\newcommand{\Neiso}{\@ifnextchar[{\basicNeiso}{\basicNeiso[59]}}%
+
+% north-east isomorphism with lower name [1] and length nx100 units
+\def\basicneisO[#1]#2{\fdcase{\NEAR}{\hspace{-2pt}\isosign}{#2}{#100}}%
+
+% north-east isomorphism with lower name [1]
+\newcommand{\neisO}{\@ifnextchar[{\basicneisO}{\basicneisO[59]}}%
+
+% north-east equality of length nx100 units
+\def\basicneeql[#1]{\fdcase{\NEEQL}{}{}{#100}}%
+
+% north-east equality
+\newcommand{\neeql}{\@ifnextchar[{\basicneeql}{\basicneeql[59]}}%
+
+% north-east equality with upper name [1] and length nx100 units
+\def\basicNeeql[#1]#2{\fdcase{\NEEQL}{#2}{}{#100}}%
+
+% north-east equality with upper name
+\newcommand{\Neeql}{\@ifnextchar[{\basicNeeql}{\basicNeeql[59]}}%
+
+% north-east equality with lower name [1] and length nx100 units
+\def\basicneeqL[#1]#2{\fdcase{\NEEQL}{}{#2}{#100}}%
+
+% north-east equality with lower name [1]
+\newcommand{\neeqL}{\@ifnextchar[{\basicneeqL}{\basicneeqL[59]}}%
+
+% pair of north-east arrows of length nx100 units
+\def\basicnebiar[#1]{\fdbicase{\NEBIAR}{}{}{#100}}%
+
+% pair of north-east arrows
+\newcommand{\nebiar}{\@ifnextchar[{\basicnebiar}{\basicnebiar[59]}}%
+
+% pair of north-east arrows with names [1][2] and length nx100 units
+\def\basicNebiar[#1]#2#3{\fdbicase{\NEBIAR}{#2}{#3}{#100}}%
+
+% pair of north-east arrows with names
+\newcommand{\Nebiar}{\@ifnextchar[{\basicNebiar}{\basicNebiar[59]}}%
+\let\nebiaR=\Nebiar
+
+% pair of north-east adjoint arrows of length nx100 units
+\def\basicneadjar[#1]{\fdbicase{\NEADJAR}{}{}{#100}}%
+
+% pair of north-east adjoint arrows
+\newcommand{\neadjar}{\@ifnextchar[{\basicneadjar}{\basicneadjar[59]}}%
+
+% pair of north-east adjoint arrows with names [1][2] and length nx100 units
+\def\basicNeadjar[#1]#2#3{\fdbicase{\NEADJAR}{#2}{#3}{#100}}%
+
+% pair of north-east adjoint arrows with names
+\newcommand{\Neadjar}{\@ifnextchar[{\basicNeadjar}{\basicNeadjar[59]}}%
+\let\neadjaR=\Neadjar
+
+% pair of north-east distributors of length nx100 units
+\def\basicnebidist[#1]{\fdbicase{\NEBIDIST}{}{}{#100}}%
+
+% pair of north-east distributors
+\newcommand{\nebidist}{\@ifnextchar[{\basicnebidist}{\basicnebidist[59]}}%
+
+% pair of north-east distributors with names [1][2] and length nx100 units
+\def\basicNebidist[#1]#2#3{\fdbicase{\NEBIDIST}{#2}{#3}{#100}}%
+
+% pair of north-east distributors with names
+\newcommand{\Nebidist}{\@ifnextchar[{\basicNebidist}{\basicNebidist[59]}}%
+\let\nebidisT=\Nebidist
+
+% pair of north-east adjoint distributors of length nx100 units
+\def\basicneadjdist[#1]{\fdbicase{\NEADJDIST}{}{}{#100}}%
+
+% pair of north-east adjoint distributors
+\newcommand{\neadjdist}{\@ifnextchar[{\basicneadjdist}{\basicneadjdist[59]}}%
+
+% pair of north-east adjoint distributors with names [1][2] and length nx100 units
+\def\basicNeadjdist[#1]#2#3{\fdbicase{\NEADJDIST}{#2}{#3}{#100}}%
+
+% pair of north-east adjoint distributors with names
+\newcommand{\Neadjdist}{\@ifnextchar[{\basicNeadjdist}{\basicNeadjdist[59]}}%
+\let\neadjdisT=\Neadjdist
+
+
+
+% SOUT-WEST ARROWS
+
+% \SWAR{n} draws a south-west arrow of length nx100 units
+\newcommand{\SWAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\line(-1,-1){#1}}%
+\put(-\Y,-\Y){\swhead}%
+\end{picture}}%
+
+% \SWDIST{n} draws a south-west distributor of length n units
+\newcommand{\SWDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\line(-1,-1){#1}}%
+\put(-\Y,-\Y){\swhead}%
+\put(0,0){\distsign}%
+\end{picture}}%
+
+% \SWDOTAR{n} draws a south-west dotted arrow of length n units
+\newcommand{\SWDOTAR}[1]%
+{\truex{100}\truey{212}%
+\Y=#1%
+\divide\Y by 2%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Y,\Y)(-\value{y},-\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Y,-\Y){\swhead}%
+\end{picture}}%
+
+% \SWMONO{n} draws a south-west monomorphism of length n units
+\newcommand{\SWMONO}[1]{%
+\Y=#1%
+\divide \Y by 2%
+\Truetail%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\begin{picture}(0,0)%
+\put(\monolength,\monolength){\line(-1,-1){\bimolength}}%
+\put(\monolength,\monolength){\swhead}%
+\put(-\Y,-\Y){\swhead}%
+\end{picture}}%
+
+% \SWEPI{n} draws a south-west epimorphism of length n units
+\newcommand{\SWEPI}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\line(-1,-1){\bimolength}}%
+\put(-\epilength,-\epilength){\swhead}%
+\put(-\Y,-\Y){\swhead}%
+\end{picture}}%
+
+% \SWBIMO{n} draws a south-west bimorphism of length n units
+\newcommand{\SWBIMO}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truetail\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\begin{picture}(0,0)%
+\put(\monolength,\monolength){\line(-1,-1){\bimolength}}%
+\put(\monolength,\monolength){\swhead}%
+\put(-\epilength,-\epilength){\swhead}%
+\put(-\Y,-\Y){\swhead}%
+\end{picture}}%
+
+% \SWBIAR{n} draws a pair of south-west arrows of length n units
+\newcommand{\SWBIAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\put(\value{x},-\value{x}){\line(-1,-1){#1}}%
+\put(-\value{x},\value{x}){\line(-1,-1){#1}}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\monolength,-\epilength){\swhead}%
+\put(-\epilength,-\monolength){\swhead}%
+\end{picture}}\end{picture}}%
+
+% \SWBIDIST{n} draws a pair of south-west distributors of length n units
+\newcommand{\SWBIDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},\value{x}){\line(-1,-1){#1}}%
+\put(-\epilength,-\monolength){\swhead}%
+\end{picture}}%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by \value{x}%
+\epilength=#1%
+\advance\epilength by -\value{x}%
+\put(\value{x},-\value{x}){\line(-1,-1){#1}}%
+\put(-\epilength,-\monolength){\swhead}%
+\end{picture}}%
+\put(\value{x},-\value{x}){\distsign}%
+\put(-\value{x},\value{x}){\distsign}%
+\end{picture}}%
+
+% \SWADJAR{n} draws a south-west pair of adjoint arrows of length n units
+\newcommand{\SWADJAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},-\value{x}){\line(-1,-1){#1}}%
+\put(-\monolength,-\epilength){\swhead}%
+\end{picture}}%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},\value{x}){\line(1,1){#1}}%
+\put(\monolength,\epilength){\nehead}%
+\end{picture}}\end{picture}}%
+
+% \SWADJDIST{n} draws a south-west pair of adjoint distributors of length n units
+\newcommand{\SWADJDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},-\value{x}){\line(-1,-1){#1}}%
+\put(-\monolength,-\epilength){\swhead}%
+\end{picture}}%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},\value{x}){\line(1,1){#1}}%
+\put(\monolength,\epilength){\nehead}%
+\end{picture}}%
+\put(-\value{x},\value{x}){\distsign}%
+\put(\value{x},-\value{x}){\distsign}%
+\end{picture}}%
+
+
+% All the following commands draw south-west arrows
+
+% south-west arrow of length nx100 units
+\def\basicswar[#1]{\fdcase{\SWAR}{}{}{#100}}%
+
+% south-west arrow
+\newcommand{\swar}{\@ifnextchar[{\basicswar}{\basicswar[59]}}%
+
+% south-west arrow with upper name [1] and length nx100 units
+\def\basicSwar[#1]#2{\fdcase{\SWAR}{#2}{}{#100}}%
+
+% south-west arrow with upper name
+\newcommand{\Swar}{\@ifnextchar[{\basicSwar}{\basicSwar[59]}}%
+
+% south-west arrow with lower name [1] and length nx100 units
+\def\basicswaR[#1]#2{\fdcase{\SWAR}{}{#2}{#100}}%
+
+% south-west arrow with lower name [1]
+\newcommand{\swaR}{\@ifnextchar[{\basicswaR}{\basicswaR[59]}}%
+
+% south-west distributor of length nx100 units
+\def\basicswdist[#1]{\fdcase{\SWDIST}{}{}{#100}}%
+
+% south-west distributor
+\newcommand{\swdist}{\@ifnextchar[{\basicswdist}{\basicswdist[59]}}%
+
+% south-west distributor with upper name [1] and length nx100 units
+\def\basicSwdist[#1]#2{\fdcase{\SWDIST}{#2}{}{#100}}%
+
+% south-west distributor with upper name
+\newcommand{\Swdist}{\@ifnextchar[{\basicSwdist}{\basicSwdist[59]}}%
+
+% south-west distributor with lower name [1] and length nx100 units
+\def\basicswdisT[#1]#2{\fdcase{\SWDIST}{}{#2}{#100}}%
+
+% south-west distributor with lower name [1]
+\newcommand{\swdisT}{\@ifnextchar[{\basicswdisT}{\basicswdisT[59]}}%
+
+% south-west dotted arrow of length nx100 units
+\def\basicswdotar[#1]{\fdcase{\SWDOTAR}{}{}{#100}}%
+
+% south-west dotted arrow
+\newcommand{\swdotar}{\@ifnextchar[{\basicswdotar}{\basicswdotar[59]}}%
+
+% south-west dotted arrow with upper name [1] and length nx100 units
+\def\basicSwdotar[#1]#2{\fdcase{\SWDOTAR}{#2}{}{#100}}%
+
+% south-west dotted arrow with upper name
+\newcommand{\Swdotar}{\@ifnextchar[{\basicSwdotar}{\basicSwdotar[59]}}%
+
+% south-west dotted arrow with lower name [1] and length nx100 units
+\def\basicswdotaR[#1]#2{\fdcase{\SWDOTAR}{}{#2}{#100}}%
+
+% south-west dotted arrow with lower name [1]
+\newcommand{\swdotaR}{\@ifnextchar[{\basicswdotaR}{\basicswdotaR[59]}}%
+
+% south-west monomorphism of length nx100 units
+\def\basicswmono[#1]{\fdcase{\SWMONO}{}{}{#100}}%
+
+% south-west monomorphism
+\newcommand{\swmono}{\@ifnextchar[{\basicswmono}{\basicswmono[59]}}%
+
+% south-west monomorphism with upper name [1] and length nx100 units
+\def\basicSwmono[#1]#2{\fdcase{\SWMONO}{#2}{}{#100}}%
+
+% south-west monomophism with upper name
+\newcommand{\Swmono}{\@ifnextchar[{\basicSwmono}{\basicSwmono[59]}}%
+
+% south-west monomorphism with lower name [1] and length nx100 units
+\def\basicswmonO[#1]#2{\fdcase{\SWMONO}{}{#2}{#100}}%
+
+% south-west monomorphism with lower name [1]
+\newcommand{\swmonO}{\@ifnextchar[{\basicswmonO}{\basicswmonO[59]}}%
+
+% south-west epimorphism of length nx100 units
+\def\basicswepi[#1]{\fdcase{\SWEPI}{}{}{#100}}%
+
+% south-west epimorphism
+\newcommand{\swepi}{\@ifnextchar[{\basicswepi}{\basicswepi[59]}}%
+
+% south-west epimorphism with upper name [1] and length nx100 units
+\def\basicSwepi[#1]#2{\fdcase{\SWEPI}{#2}{}{#100}}%
+
+% south-west epimorphism with upper name
+\newcommand{\Swepi}{\@ifnextchar[{\basicSwepi}{\basicSwepi[59]}}%
+
+% south-west epimorphism with lower name [1] and length nx100 units
+\def\basicswepI[#1]#2{\fdcase{\SWEPI}{}{#2}{#100}}%
+
+% south-west epimorphism with lower name [1]
+\newcommand{\swepI}{\@ifnextchar[{\basicswepI}{\basicswepI[59]}}%
+
+% south-west bimorphism of length nx100 units
+\def\basicswbimo[#1]{\fdcase{\SWBIMO}{}{}{#100}}%
+
+% south-west bimorphism
+\newcommand{\swbimo}{\@ifnextchar[{\basicswbimo}{\basicswbimo[59]}}%
+
+% south-west bimorphism with upper name [1] and length nx100 units
+\def\basicSwbimo[#1]#2{\fdcase{\SWBIMO}{#2}{}{#100}}%
+
+% south-west bimorphism with upper name
+\newcommand{\Swbimo}{\@ifnextchar[{\basicSwbimo}{\basicSwbimo[59]}}%
+
+% south-west bimorphism with lower name [1] and length nx100 units
+\def\basicswbimO[#1]#2{\fdcase{\SWBIMO}{}{#2}{#100}}%
+
+% south-west bimorphism with lower name [1]
+\newcommand{\swbimO}{\@ifnextchar[{\basicswbimO}{\basicswbimO[59]}}%
+
+% south-west isomorphism of length nx100 units
+\def\basicswiso[#1]{\fdcase{\SWAR}{\hspace{-2pt}\isosign}{}{#100}}%
+
+% south-west isomorphism
+\newcommand{\swiso}{\@ifnextchar[{\basicswiso}{\basicswiso[59]}}%
+
+% south-west isomorphism with upper name [1] and length nx100 units
+\def\basicSwiso[#1]#2{\fdcase{\SWAR}{#2}{\isosign}{#100}}%
+
+% south-west isomorphism with upper name
+\newcommand{\Swiso}{\@ifnextchar[{\basicSwiso}{\basicSwiso[59]}}%
+
+% south-west isomorphism with lower name [1] and length nx100 units
+\def\basicswisO[#1]#2{\fdcase{\SWAR}{\hspace{-2pt}\isosign}{#2}{#100}}%
+
+% south-west isomorphism with lower name [1]
+\newcommand{\swisO}{\@ifnextchar[{\basicswisO}{\basicswisO[59]}}%
+
+% south-west equality
+\let\sweql\neeql%
+
+% south-west equality with upper name [1]
+\let\Sweql=\Neeql%
+
+% south-west equality with lower name [1]
+\let\sweqL=\neeqL%
+
+% pair of south-west arrows of length nx100 units
+\def\basicswbiar[#1]{\fdbicase{\SWBIAR}{}{}{#100}}%
+
+% pair of south-west arrows
+\newcommand{\swbiar}{\@ifnextchar[{\basicswbiar}{\basicswbiar[59]}}%
+
+% pair of south-west arrows with names [1][2] and length nx100 units
+\def\basicSwbiar[#1]#2#3{\fdbicase{\SWBIAR}{#2}{#3}{#100}}%
+
+% pair of south-west arrows with names
+\newcommand{\Swbiar}{\@ifnextchar[{\basicSwbiar}{\basicSwbiar[59]}}%
+\let\swbiaR=\Swbiar
+
+% pair of south-west adjoint arrows of length nx100 units
+\def\basicswadjar[#1]{\fdbicase{\SWADJAR}{}{}{#100}}%
+
+% pair of south-west adjoint arrows
+\newcommand{\swadjar}{\@ifnextchar[{\basicswadjar}{\basicswadjar[59]}}%
+
+% pair of south-west adjoint arrows with names [1][2] and length nx100 units
+\def\basicSwadjar[#1]#2#3{\fdbicase{\SWADJAR}{#2}{#3}{#100}}%
+
+% pair of south-west adjoint arrows with names
+\newcommand{\Swadjar}{\@ifnextchar[{\basicSwadjar}{\basicSwadjar[59]}}%
+\let\swadjaR=\Swadjar
+
+% pair of south-west distributors of length nx100 units
+\def\basicswbidist[#1]{\fdbicase{\SWBIDIST}{}{}{#100}}%
+
+% pair of south-west distributors
+\newcommand{\swbidist}{\@ifnextchar[{\basicswbidist}{\basicswbidist[59]}}%
+
+% pair of south-west distributors with names [1][2] and length nx100 units
+\def\basicSwbidist[#1]#2#3{\fdbicase{\SWBIDIST}{#2}{#3}{#100}}%
+
+% pair of south-west distributors with names
+\newcommand{\Swbidist}{\@ifnextchar[{\basicSwbidist}{\basicSwbidist[59]}}%
+\let\swbidisT=\Swbidist
+
+% pair of south-west adjoint distributors of length nx100 units
+\def\basicswadjdist[#1]{\fdbicase{\SWADJDIST}{}{}{#100}}%
+
+% pair of south-west adjoint distributors
+\newcommand{\swadjdist}{\@ifnextchar[{\basicswadjdist}{\basicswadjdist[59]}}%
+
+% pair of south-west adjoint distributors with names [1][2] and length nx100 units
+\def\basicSwadjdist[#1]#2#3{\fdbicase{\SWADJDIST}{#2}{#3}{#100}}%
+
+% pair of south-west adjoint distributors with names
+\newcommand{\Swadjdist}{\@ifnextchar[{\basicSwadjdist}{\basicSwadjdist[59]}}%
+\let\swadjdisT=\Swadjdist
+
+
+
+% MACROS FOR SECOND DIAGONAL PICTURES
+
+% \sdcase{P}{f}{g}{n} draws the picture P with names f, g
+% and length n units
+\newcommand{\sdcase}[4]{\testdiagrammode\begin{picture}(0,0)%
+\put(0,0){#1{#4}}%
+\truex{100}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#2}$}}%
+\truex{300}\truey{800}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#3}$}}%
+\end{picture}}%
+
+% \sdbicase{P}{f}{g}{n} draws the bipicture P with names f, g
+% and length n units
+\newcommand{\sdbicase}[4]{\testdiagrammode\begin{picture}(0,0)%
+\put(0,0){#1{#4}}%
+\truex{350}\truey{600}\truez{950}%
+\put(\value{x},\value{x}){\makebox(0,\value{y})[l]{${#2}$}}%
+\truex{450}\truey{600}\truez{1050}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{y})[r]{${#3}$}}%
+\end{picture}}%
+
+
+% SOUTH-EAST ARROWS
+
+% \SEAR{n} draws a south-east arrow of length nx100 units
+\newcommand{\SEAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\line(1,-1){#1}}%
+\put(\Y,-\Y){\sehead}%
+\end{picture}}%
+
+% \SEDIST{n} draws a south-east distributor of length n units
+\newcommand{\SEDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\line(1,-1){#1}}%
+\put(\Y,-\Y){\sehead}%
+\put(0,0){\distsign}%
+\end{picture}}%
+
+% \SEDOTAR{n} draws a south-east dotted arrow of length n units
+\newcommand{\SEDOTAR}[1]%
+{\truex{100}\truey{212}%
+\Y=#1%
+\divide\Y by 2%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Y,\Y)(\value{y},-\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Y,-\Y){\sehead}%
+\end{picture}}%
+
+% \SEMONO{n} draws a south-east monomorphism of length n units
+\newcommand{\SEMONO}[1]{%
+\Y=#1%
+\divide \Y by 2%
+\Truetail%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\begin{picture}(0,0)%
+\put(-\monolength,\monolength){\line(1,-1){\bimolength}}%
+\put(-\monolength,\monolength){\sehead}%
+\put(\Y,-\Y){\sehead}%
+\end{picture}}%
+
+% \SEEPI{n} draws a south-east epimorphism of length n units
+\newcommand{\SEEPI}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\line(1,-1){\bimolength}}%
+\put(\epilength,-\epilength){\sehead}%
+\put(\Y,-\Y){\sehead}%
+\end{picture}}%
+
+% \SEBIMO{n} draws a south-east bimorphism of length n units
+\newcommand{\SEBIMO}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truetail\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\begin{picture}(0,0)%
+\put(-\monolength,\monolength){\line(1,-1){\bimolength}}%
+\put(-\monolength,\monolength){\sehead}%
+\put(\epilength,-\epilength){\sehead}%
+\put(\Y,-\Y){\sehead}%
+\end{picture}}%
+
+% \SEBIAR{n} draws a pair of south-east arrows of length n units
+\newcommand{\SEBIAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\put(-\value{x},-\value{x}){\line(1,-1){#1}}%
+\put(\value{x},\value{x}){\line(1,-1){#1}}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\monolength,-\epilength){\sehead}%
+\put(\epilength,-\monolength){\sehead}%
+\end{picture}}\end{picture}}%
+
+% \SEBIDIST{n} draws a pair of south-east distributors of length n units
+\newcommand{\SEBIDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},\value{x}){\line(1,-1){#1}}%
+\put(\epilength,-\monolength){\sehead}%
+\end{picture}}%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by \value{x}%
+\epilength=#1%
+\advance\epilength by -\value{x}%
+\put(-\value{x},-\value{x}){\line(1,-1){#1}}%
+\put(\epilength,-\monolength){\sehead}%
+\end{picture}}%
+\put(-\value{x},-\value{x}){\distsign}%
+\put(\value{x},\value{x}){\distsign}%
+\end{picture}}%
+
+% \SEEQL{n} draws a south-east equality of length n units
+\newcommand{\SEEQL}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{70}%
+\put(-\value{x},-\value{x}){\line(1,-1){#1}}%
+\put(\value{x},\value{x}){\line(1,-1){#1}}%
+\end{picture}}\end{picture}}%
+
+% \SEADJAR{n} draws a south-east pair of adjoint arrows of length n units
+\newcommand{\SEADJAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},-\value{x}){\line(1,-1){#1}}%
+\put(\monolength,-\epilength){\sehead}%
+\end{picture}}%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},\value{x}){\line(-1,1){#1}}%
+\put(-\monolength,\epilength){\nwhead}%
+\end{picture}}\end{picture}}%
+
+% \SEADJDIST{n} draws a south-east pair of adjoint distributors of length n units
+\newcommand{\SEADJDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},-\value{x}){\line(1,-1){#1}}%
+\put(\monolength,-\epilength){\sehead}%
+\end{picture}}%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},\value{x}){\line(-1,1){#1}}%
+\put(-\monolength,\epilength){\nwhead}%
+\end{picture}}%
+\put(-\value{x},-\value{x}){\distsign}%
+\put(\value{x},\value{x}){\distsign}%
+\end{picture}}%
+
+
+% All the following commands draw south-east arrows
+
+% south-east arrow of length nx100 units
+\def\basicsear[#1]{\sdcase{\SEAR}{}{}{#100}}%
+
+% south-east arrow
+\newcommand{\sear}{\@ifnextchar[{\basicsear}{\basicsear[59]}}%
+
+% south-east arrow with upper name [1] and length nx100 units
+\def\basicSear[#1]#2{\sdcase{\SEAR}{#2}{}{#100}}%
+
+% south-east arrow with upper name
+\newcommand{\Sear}{\@ifnextchar[{\basicSear}{\basicSear[59]}}%
+
+% south-east arrow with lower name [1] and length nx100 units
+\def\basicseaR[#1]#2{\sdcase{\SEAR}{}{#2}{#100}}%
+
+% south-east arrow with lower name [1]
+\newcommand{\seaR}{\@ifnextchar[{\basicseaR}{\basicseaR[59]}}%
+
+% south-east distributor of length nx100 units
+\def\basicsedist[#1]{\sdcase{\SEDIST}{}{}{#100}}%
+
+% south-east distributor
+\newcommand{\sedist}{\@ifnextchar[{\basicsedist}{\basicsedist[59]}}%
+
+% south-east distributor with upper name [1] and length nx100 units
+\def\basicSedist[#1]#2{\sdcase{\SEDIST}{#2}{}{#100}}%
+
+% south-east distributor with upper name
+\newcommand{\Sedist}{\@ifnextchar[{\basicSedist}{\basicSedist[59]}}%
+
+% south-east distributor with lower name [1] and length nx100 units
+\def\basicsedisT[#1]#2{\sdcase{\SEDIST}{}{#2}{#100}}%
+
+% south-east distributor with lower name [1]
+\newcommand{\sedisT}{\@ifnextchar[{\basicsedisT}{\basicsedisT[59]}}%
+
+% south-east dotted arrow of length nx100 units
+\def\basicsedotar[#1]{\sdcase{\SEDOTAR}{}{}{#100}}%
+
+% south-east dotted arrow
+\newcommand{\sedotar}{\@ifnextchar[{\basicsedotar}{\basicsedotar[59]}}%
+
+% south-east dotted arrow with upper name [1] and length nx100 units
+\def\basicSedotar[#1]#2{\sdcase{\SEDOTAR}{#2}{}{#100}}%
+
+% south-east dotted arrow with upper name
+\newcommand{\Sedotar}{\@ifnextchar[{\basicSedotar}{\basicSedotar[59]}}%
+
+% south-east dotted arrow with lower name [1] and length nx100 units
+\def\basicsedotaR[#1]#2{\sdcase{\SEDOTAR}{}{#2}{#100}}%
+
+% south-east dotted arrow with lower name [1]
+\newcommand{\sedotaR}{\@ifnextchar[{\basicsedotaR}{\basicsedotaR[59]}}%
+
+% south-east monomorphism of length nx100 units
+\def\basicsemono[#1]{\sdcase{\SEMONO}{}{}{#100}}%
+
+% south-east monomorphism
+\newcommand{\semono}{\@ifnextchar[{\basicsemono}{\basicsemono[59]}}%
+
+% south-east monomorphism with upper name [1] and length nx100 units
+\def\basicSemono[#1]#2{\sdcase{\SEMONO}{#2}{}{#100}}%
+
+% south-east monomophism with upper name
+\newcommand{\Semono}{\@ifnextchar[{\basicSemono}{\basicSemono[59]}}%
+
+% south-east monomorphism with lower name [1] and length nx100 units
+\def\basicsemonO[#1]#2{\sdcase{\SEMONO}{}{#2}{#100}}%
+
+% south-east monomorphism with lower name [1]
+\newcommand{\semonO}{\@ifnextchar[{\basicsemonO}{\basicsemonO[59]}}%
+
+% south-east epimorphism of length nx100 units
+\def\basicseepi[#1]{\sdcase{\SEEPI}{}{}{#100}}%
+
+% south-east epimorphism
+\newcommand{\seepi}{\@ifnextchar[{\basicseepi}{\basicseepi[59]}}%
+
+% south-east epimorphism with upper name [1] and length nx100 units
+\def\basicSeepi[#1]#2{\sdcase{\SEEPI}{#2}{}{#100}}%
+
+% south-east epimorphism with upper name
+\newcommand{\Seepi}{\@ifnextchar[{\basicSeepi}{\basicSeepi[59]}}%
+
+% south-east epimorphism with lower name [1] and length nx100 units
+\def\basicseepI[#1]#2{\sdcase{\SEEPI}{}{#2}{#100}}%
+
+% south-east epimorphism with lower name [1]
+\newcommand{\seepI}{\@ifnextchar[{\basicseepI}{\basicseepI[59]}}%
+
+% south-east bimorphism of length nx100 units
+\def\basicsebimo[#1]{\sdcase{\SEBIMO}{}{}{#100}}%
+
+% south-east bimorphism
+\newcommand{\sebimo}{\@ifnextchar[{\basicsebimo}{\basicsebimo[59]}}%
+
+% south-east bimorphism with upper name [1] and length nx100 units
+\def\basicSebimo[#1]#2{\sdcase{\SEBIMO}{#2}{}{#100}}%
+
+% south-east bimorphism with upper name
+\newcommand{\Sebimo}{\@ifnextchar[{\basicSebimo}{\basicSebimo[59]}}%
+
+% south-east bimorphism with lower name [1] and length nx100 units
+\def\basicsebimO[#1]#2{\sdcase{\SEBIMO}{}{#2}{#100}}%
+
+% south-east bimorphism with lower name [1]
+\newcommand{\sebimO}{\@ifnextchar[{\basicsebimO}{\basicsebimO[59]}}%
+
+% south-east isomorphism of length nx100 units
+\def\basicseiso[#1]{\sdcase{\SEAR}{\hspace{-2pt}\isosign}{}{#100}}%
+
+% south-east isomorphism
+\newcommand{\seiso}{\@ifnextchar[{\basicseiso}{\basicseiso[59]}}%
+
+% south-east isomorphism with upper name [1] and length nx100 units
+\def\basicSeiso[#1]#2{\sdcase{\SEAR}{#2}{\isosign}{#100}}%
+
+% south-east isomorphism with upper name
+\newcommand{\Seiso}{\@ifnextchar[{\basicSeiso}{\basicSeiso[59]}}%
+
+% south-east isomorphism with lower name [1] and length nx100 units
+\def\basicseisO[#1]#2{\sdcase{\SEAR}{\hspace{-2pt}\isosign}{#2}{#100}}%
+
+% south-east isomorphism with lower name [1]
+\newcommand{\seisO}{\@ifnextchar[{\basicseisO}{\basicseisO[59]}}%
+
+% south-east equality of length nx100 units
+\def\basicseeql[#1]{\sdcase{\SEEQL}{}{}{#100}}%
+
+% south-east equality
+\newcommand{\seeql}{\@ifnextchar[{\basicseeql}{\basicseeql[59]}}%
+
+% south-east equality with upper name [1] and length nx100 units
+\def\basicSeeql[#1]#2{\sdcase{\SEEQL}{#2}{}{#100}}%
+
+% south-east equality with upper name
+\newcommand{\Seeql}{\@ifnextchar[{\basicSeeql}{\basicSeeql[59]}}%
+
+% south-east equality with lower name [1] and length nx100 units
+\def\basicseeqL[#1]#2{\sdcase{\SEEQL}{}{#2}{#100}}%
+
+% south-east equality with lower name [1]
+\newcommand{\seeqL}{\@ifnextchar[{\basicseeqL}{\basicseeqL[59]}}%
+
+% pair of south-east arrows of length nx100 units
+\def\basicsebiar[#1]{\sdbicase{\SEBIAR}{}{}{#100}}%
+
+% pair of south-east arrows
+\newcommand{\sebiar}{\@ifnextchar[{\basicsebiar}{\basicsebiar[59]}}%
+
+% pair of south-east arrows with names [1][2] and length nx100 units
+\def\basicSebiar[#1]#2#3{\sdbicase{\SEBIAR}{#2}{#3}{#100}}%
+
+% pair of south-east arrows with names
+\newcommand{\Sebiar}{\@ifnextchar[{\basicSebiar}{\basicSebiar[59]}}%
+\let\sebiaR=\Sebiar
+
+% pair of south-east adjoint arrows of length nx100 units
+\def\basicseadjar[#1]{\sdbicase{\SEADJAR}{}{}{#100}}%
+
+% pair of south-east adjoint arrows
+\newcommand{\seadjar}{\@ifnextchar[{\basicseadjar}{\basicseadjar[59]}}%
+
+% pair of south-east adjoint arrows with names [1][2] and length nx100 units
+\def\basicSeadjar[#1]#2#3{\sdbicase{\SEADJAR}{#2}{#3}{#100}}%
+
+% pair of south-east adjoint arrows with names
+\newcommand{\Seadjar}{\@ifnextchar[{\basicSeadjar}{\basicSeadjar[59]}}%
+\let\seadjaR=\Seadjar
+
+% pair of south-east distributors of length nx100 units
+\def\basicsebidist[#1]{\sdbicase{\SEBIDIST}{}{}{#100}}%
+
+% pair of south-east distributors
+\newcommand{\sebidist}{\@ifnextchar[{\basicsebidist}{\basicsebidist[59]}}%
+
+% pair of south-east distributors with names [1][2] and length nx100 units
+\def\basicSebidist[#1]#2#3{\sdbicase{\SEBIDIST}{#2}{#3}{#100}}%
+
+% pair of south-east distributors with names
+\newcommand{\Sebidist}{\@ifnextchar[{\basicSebidist}{\basicSebidist[59]}}%
+\let\sebidisT=\Sebidist
+
+% pair of south-east adjoint distributors of length nx100 units
+\def\basicseadjdist[#1]{\sdbicase{\SEADJDIST}{}{}{#100}}%
+
+% pair of south-east adjoint distributors
+\newcommand{\seadjdist}{\@ifnextchar[{\basicseadjdist}{\basicseadjdist[59]}}%
+
+% pair of south-east adjoint distributors with names [1][2] and length nx100 units
+\def\basicSeadjdist[#1]#2#3{\sdbicase{\SEADJDIST}{#2}{#3}{#100}}%
+
+% pair of south-east adjoint distributors with names
+\newcommand{\Seadjdist}{\@ifnextchar[{\basicSeadjdist}{\basicSeadjdist[59]}}%
+\let\seadjdisT=\Seadjdist
+
+
+% NORTH-WEST ARROWS
+
+% \NWAR{n} draws a north-west arrow of length nx100 units
+\newcommand{\NWAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\line(-1,1){#1}}%
+\put(-\Y,\Y){\nwhead}%
+\end{picture}}%
+
+% \NWDIST{n} draws a north-west distributor of length n units
+\newcommand{\NWDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\line(-1,1){#1}}%
+\put(-\Y,\Y){\nwhead}%
+\put(0,0){\distsign}%
+\end{picture}}%
+
+% \NWDOTAR{n} draws a north-west dotted arrow of length n units
+\newcommand{\NWDOTAR}[1]%
+{\truex{100}\truey{212}%
+\Y=#1%
+\divide\Y by 2%
+\NUMBEROFDOTS=#1%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Y,-\Y)(-\value{y},\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Y,\Y){\nwhead}%
+\end{picture}}%
+
+% \NWMONO{n} draws a north-west monomorphism of length n units
+\newcommand{\NWMONO}[1]{%
+\Y=#1%
+\divide \Y by 2%
+\Truetail%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\begin{picture}(0,0)%
+\put(\monolength,-\monolength){\line(-1,1){\bimolength}}%
+\put(\monolength,-\monolength){\nwhead}%
+\put(-\Y,\Y){\nwhead}%
+\end{picture}}%
+
+% \NWEPI{n} draws a north-west epimorphism of length n units
+\newcommand{\NWEPI}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\line(-1,1){\bimolength}}%
+\put(-\epilength,\epilength){\nwhead}%
+\put(-\Y,\Y){\nwhead}%
+\end{picture}}%
+
+% \NWBIMO{n} draws a north-west bimorphism of length n units
+\newcommand{\NWBIMO}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\Truetail\Truehead%
+\bimolength=#1%
+\advance\bimolength by -\Truemonotail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\Trueepihead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\begin{picture}(0,0)%
+\put(\monolength,-\monolength){\line(-1,1){\bimolength}}%
+\put(\monolength,-\monolength){\nwhead}%
+\put(-\epilength,\epilength){\nwhead}%
+\put(-\Y,\Y){\nwhead}%
+\end{picture}}%
+
+% \NWBIAR{n} draws a pair of north-west arrows of length n units
+\newcommand{\NWBIAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\put(-\value{x},-\value{x}){\line(-1,1){#1}}%
+\put(\value{x},\value{x}){\line(-1,1){#1}}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\monolength,\epilength){\nwhead}%
+\put(-\epilength,\monolength){\nwhead}%
+\end{picture}}\end{picture}}%
+
+% \NWBIDIST{n} draws a pair of north-west distributors of length n units
+\newcommand{\NWBIDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},-\value{x}){\line(-1,1){#1}}%
+\put(-\epilength,\monolength){\nwhead}%
+\end{picture}}%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by \value{x}%
+\epilength=#1%
+\advance\epilength by -\value{x}%
+\put(\value{x},\value{x}){\line(-1,1){#1}}%
+\put(-\epilength,\monolength){\nwhead}%
+\end{picture}}%
+\put(-\value{x},-\value{x}){\distsign}%
+\put(\value{x},\value{x}){\distsign}%
+\end{picture}}%
+
+% \NWADJAR{n} draws a north-west pair of adjoint arrows of length n units
+\newcommand{\NWADJAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},-\value{x}){\line(-1,1){#1}}%
+\put(-\epilength,\monolength){\nwhead}%
+\end{picture}}%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},\value{x}){\line(1,-1){#1}}%
+\put(\epilength,-\monolength){\sehead}%
+\end{picture}}\end{picture}}%
+
+% \NWADJDIST{n} draws a north-west pair of adjoint distributors of length n units
+\newcommand{\NWADJDIST}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},-\value{x}){\line(-1,1){#1}}%
+\put(-\epilength,\monolength){\nwhead}%
+\end{picture}}%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},\value{x}){\line(1,-1){#1}}%
+\put(\epilength,-\monolength){\sehead}%
+\end{picture}}%
+\put(-\value{x},-\value{x}){\distsign}%
+\put(\value{x},\value{x}){\distsign}%
+\end{picture}}%
+
+
+% All the following commands draw north-west arrows
+
+% north-west arrow of length nx100 units
+\def\basicnwar[#1]{\sdcase{\NWAR}{}{}{#100}}%
+
+% north-west arrow
+\newcommand{\nwar}{\@ifnextchar[{\basicnwar}{\basicnwar[59]}}%
+
+% north-west arrow with upper name [1] and length nx100 units
+\def\basicNwar[#1]#2{\sdcase{\NWAR}{#2}{}{#100}}%
+
+% north-west arrow with upper name
+\newcommand{\Nwar}{\@ifnextchar[{\basicNwar}{\basicNwar[59]}}%
+
+% north-west arrow with lower name [1] and length nx100 units
+\def\basicnwaR[#1]#2{\sdcase{\NWAR}{}{#2}{#100}}%
+
+% north-west arrow with lower name [1]
+\newcommand{\nwaR}{\@ifnextchar[{\basicnwaR}{\basicnwaR[59]}}%
+
+% north-west distributor of length nx100 units
+\def\basicnwdist[#1]{\sdcase{\NWDIST}{}{}{#100}}%
+
+% north-west distributor
+\newcommand{\nwdist}{\@ifnextchar[{\basicnwdist}{\basicnwdist[59]}}%
+
+% north-west distributor with upper name [1] and length nx100 units
+\def\basicNwdist[#1]#2{\sdcase{\NWDIST}{#2}{}{#100}}%
+
+% north-west distributor with upper name
+\newcommand{\Nwdist}{\@ifnextchar[{\basicNwdist}{\basicNwdist[59]}}%
+
+% north-west distributor with lower name [1] and length nx100 units
+\def\basicnwdisT[#1]#2{\sdcase{\NWDIST}{}{#2}{#100}}%
+
+% north-west distributor with lower name [1]
+\newcommand{\nwdisT}{\@ifnextchar[{\basicnwdisT}{\basicnwdisT[59]}}%
+
+% north-west dotted arrow of length nx100 units
+\def\basicnwdotar[#1]{\sdcase{\NWDOTAR}{}{}{#100}}%
+
+% north-west dotted arrow
+\newcommand{\nwdotar}{\@ifnextchar[{\basicnwdotar}{\basicnwdotar[59]}}%
+
+% north-west dotted arrow with upper name [1] and length nx100 units
+\def\basicNwdotar[#1]#2{\sdcase{\NWDOTAR}{#2}{}{#100}}%
+
+% north-west dotted arrow with upper name
+\newcommand{\Nwdotar}{\@ifnextchar[{\basicNwdotar}{\basicNwdotar[59]}}%
+
+% north-west dotted arrow with lower name [1] and length nx100 units
+\def\basicnwdotaR[#1]#2{\sdcase{\NWDOTAR}{}{#2}{#100}}%
+
+% north-west dotted arrow with lower name [1]
+\newcommand{\nwdotaR}{\@ifnextchar[{\basicnwdotaR}{\basicnwdotaR[59]}}%
+
+% north-west monomorphism of length nx100 units
+\def\basicnwmono[#1]{\sdcase{\NWMONO}{}{}{#100}}%
+
+% north-west monomorphism
+\newcommand{\nwmono}{\@ifnextchar[{\basicnwmono}{\basicnwmono[59]}}%
+
+% north-west monomorphism with upper name [1] and length nx100 units
+\def\basicNwmono[#1]#2{\sdcase{\NWMONO}{#2}{}{#100}}%
+
+% north-west monomophism with upper name
+\newcommand{\Nwmono}{\@ifnextchar[{\basicNwmono}{\basicNwmono[59]}}%
+
+% north-west monomorphism with lower name [1] and length nx100 units
+\def\basicnwmonO[#1]#2{\sdcase{\NWMONO}{}{#2}{#100}}%
+
+% north-west monomorphism with lower name [1]
+\newcommand{\nwmonO}{\@ifnextchar[{\basicnwmonO}{\basicnwmonO[59]}}%
+
+% north-west epimorphism of length nx100 units
+\def\basicnwepi[#1]{\sdcase{\NWEPI}{}{}{#100}}%
+
+% north-west epimorphism
+\newcommand{\nwepi}{\@ifnextchar[{\basicnwepi}{\basicnwepi[59]}}%
+
+% north-west epimorphism with upper name [1] and length nx100 units
+\def\basicNwepi[#1]#2{\sdcase{\NWEPI}{#2}{}{#100}}%
+
+% north-west epimorphism with upper name
+\newcommand{\Nwepi}{\@ifnextchar[{\basicNwepi}{\basicNwepi[59]}}%
+
+% north-west epimorphism with lower name [1] and length nx100 units
+\def\basicnwepI[#1]#2{\sdcase{\NWEPI}{}{#2}{#100}}%
+
+% north-west epimorphism with lower name [1]
+\newcommand{\nwepI}{\@ifnextchar[{\basicnwepI}{\basicnwepI[59]}}%
+
+% north-west bimorphism of length nx100 units
+\def\basicnwbimo[#1]{\sdcase{\NWBIMO}{}{}{#100}}%
+
+% north-west bimorphism
+\newcommand{\nwbimo}{\@ifnextchar[{\basicnwbimo}{\basicnwbimo[59]}}%
+
+% north-west bimorphism with upper name [1] and length nx100 units
+\def\basicNwbimo[#1]#2{\sdcase{\NWBIMO}{#2}{}{#100}}%
+
+% north-west bimorphism with upper name
+\newcommand{\Nwbimo}{\@ifnextchar[{\basicNwbimo}{\basicNwbimo[59]}}%
+
+% north-west bimorphism with lower name [1] and length nx100 units
+\def\basicnwbimO[#1]#2{\sdcase{\NWBIMO}{}{#2}{#100}}%
+
+% north-west bimorphism with lower name [1]
+\newcommand{\nwbimO}{\@ifnextchar[{\basicnwbimO}{\basicnwbimO[59]}}%
+
+% north-west isomorphism of length nx100 units
+\def\basicnwiso[#1]{\sdcase{\NWAR}{\hspace{-2pt}\isosign}{}{#100}}%
+
+% north-west isomorphism
+\newcommand{\nwiso}{\@ifnextchar[{\basicnwiso}{\basicnwiso[59]}}%
+
+% north-west isomorphism with upper name [1] and length nx100 units
+\def\basicNwiso[#1]#2{\sdcase{\NWAR}{#2}{\isosign}{#100}}%
+
+% north-west isomorphism with upper name
+\newcommand{\Nwiso}{\@ifnextchar[{\basicNwiso}{\basicNwiso[59]}}%
+
+% north-west isomorphism with lower name [1] and length nx100 units
+\def\basicnwisO[#1]#2{\sdcase{\NWAR}{\hspace{-2pt}\isosign}{#2}{#100}}%
+
+% north-west isomorphism with lower name [1]
+\newcommand{\nwisO}{\@ifnextchar[{\basicnwisO}{\basicnwisO[59]}}%
+
+% north-west equality
+\let\nweql=\seeql%
+
+% north-west equality with upper name
+\let\Nweql=\Seeql%
+
+% north-west equality with lower name [1]
+\let\nweqL=\seeqL%
+
+% pair of north-west arrows of length nx100 units
+\def\basicnwbiar[#1]{\sdbicase{\NWBIAR}{}{}{#100}}%
+
+% pair of north-west arrows
+\newcommand{\nwbiar}{\@ifnextchar[{\basicnwbiar}{\basicnwbiar[59]}}%
+
+% pair of north-west arrows with names [1][2] and length nx100 units
+\def\basicNwbiar[#1]#2#3{\sdbicase{\NWBIAR}{#2}{#3}{#100}}%
+
+% pair of north-west arrows with names
+\newcommand{\Nwbiar}{\@ifnextchar[{\basicNwbiar}{\basicNwbiar[59]}}%
+\let\nwbiaR=\Nwbiar
+
+% pair of north-west adjoint arrows of length nx100 units
+\def\basicnwadjar[#1]{\sdbicase{\NWADJAR}{}{}{#100}}%
+
+% pair of north-west adjoint arrows
+\newcommand{\nwadjar}{\@ifnextchar[{\basicnwadjar}{\basicnwadjar[59]}}%
+
+% pair of north-west adjoint arrows with names [1][2] and length nx100 units
+\def\basicNwadjar[#1]#2#3{\sdbicase{\NWADJAR}{#2}{#3}{#100}}%
+
+% pair of north-west adjoint arrows with names
+\newcommand{\Nwadjar}{\@ifnextchar[{\basicNwadjar}{\basicNwadjar[59]}}%
+\let\nwadjaR=\Nwadjar
+
+% pair of north-west distributors of length nx100 units
+\def\basicnwbidist[#1]{\sdbicase{\NWBIDIST}{}{}{#100}}%
+
+% pair of north-west distributors
+\newcommand{\nwbidist}{\@ifnextchar[{\basicnwbidist}{\basicnwbidist[59]}}%
+
+% pair of north-west distributors with names [1][2] and length nx100 units
+\def\basicNwbidist[#1]#2#3{\sdbicase{\NWBIDIST}{#2}{#3}{#100}}%
+
+% pair of north-west distributors with names
+\newcommand{\Nwbidist}{\@ifnextchar[{\basicNwbidist}{\basicNwbidist[59]}}%
+\let\nwbidisT=\Nwbidist
+
+% pair of north-west adjoint distributors of length nx100 units
+\def\basicnwadjdist[#1]{\sdbicase{\NWADJDIST}{}{}{#100}}%
+
+% pair of north-west adjoint distributors
+\newcommand{\nwadjdist}{\@ifnextchar[{\basicnwadjdist}{\basicnwadjdist[59]}}%
+
+% pair of north-west adjoint distributors with names [1][2] and length nx100 units
+\def\basicNwadjdist[#1]#2#3{\sdbicase{\NWADJDIST}{#2}{#3}{#100}}%
+
+% pair of north-west adjoint distributors with names
+\newcommand{\Nwadjdist}{\@ifnextchar[{\basicNwadjdist}{\basicNwadjdist[59]}}%
+\let\nwadjdisT=\Nwadjdist
+
+
+% EAST-NORTH-EAST ARROWS
+
+% The following commands produce east-north-east arrows
+% of horizontal extent n units
+
+% \ENEAR{f}{g}{n} draws a east-north-east arrow with names f, g
+% and length n units
+\newcommand{\ENEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\line(2,1){#3}}%
+\put(\Y,\Z){\enehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEDIST{f}{g}{n} draws a east-north-east distributor
+% with names f, g and length n units
+\newcommand{\ENEDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\line(2,1){#3}}%
+\put(\Y,\Z){\enehead}%
+\put(0,0){\distsign}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\ENEDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Y,-\Z)(\value{y},\value{z}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Y,\Z){\enehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEMONO{f}{g}{n} draws a east-north-east monomorphism
+% with names f,g and length n units
+\newcommand{\ENEMONO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,-\secondmonolength){\line(2,1){\bimolength}}%
+\put(-\monolength,-\secondmonolength){\enehead}%
+\put(\Y,\Z){\enehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEEPI{f}{g}{n} draws a east-north-east epimorphism
+% with names f, g and length n units
+\newcommand{\ENEEPI}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\line(2,1){\bimolength}}%
+\put(\epilength,\secondepilength){\enehead}%
+\put(\Y,\Z){\enehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEBIMO{f}{g}{n} draws a east-north-east bimorphism
+% with names f,g and length n units
+\newcommand{\ENEBIMO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,-\secondmonolength){\line(2,1){\bimolength}}%
+\put(-\monolength,-\secondmonolength){\enehead}%
+\put(\epilength,\secondepilength){\enehead}%
+\put(\Y,\Z){\enehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEEQL{f}{g}{n} draws a east-north-east equality
+% with names f,g and length n units
+\newcommand{\ENEEQL}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\begin{picture}(0,0)%
+\truex{44}\truey{89}%
+\put(-\value{x},\value{y}){\line(2,1){#3}}%
+\put(\value{x},-\value{y}){\line(2,1){#3}}%
+\end{picture}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEBIAR{f}{g}{n} draws a pair of east-north-east arrows
+% with names f,g and length n units
+\newcommand{\ENEBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\put(-\value{x},\value{y}){\line(2,1){#3}}%
+\put(\value{x},-\value{y}){\line(2,1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\monolength,\secondepilength){\enehead}%
+\put(\epilength,\secondmonolength){\enehead}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEBIDIST{f}{g}{n} draws a pair of east-north-east distributors
+% with names f,g and length n units
+\newcommand{\ENEBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(-\Y,-\Z){\begin{picture}(0,0)%
+\put(-\value{x},\value{y}){\line(2,1){#3}}%
+\put(\value{x},-\value{y}){\line(2,1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\monolength,\secondepilength){\enehead}%
+\put(\epilength,\secondmonolength){\enehead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\distsign}%
+\put(\value{x},-\value{y}){\distsign}%
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEADJAR{f}{g}{n} draws a east-north-east pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\ENEADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\line(2,1){#3}}%
+\put(\epilength,\secondmonolength){\enehead}%
+\put(\monolength,\secondepilength){\line(-2,-1){#3}}%
+\put(-\value{x},\value{y}){\wswhead}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEADJDIST{f}{g}{n} draws a east-north-east pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\ENEADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(-\Y,-\Z){\begin{picture}(0,0)%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\line(2,1){#3}}%
+\put(\epilength,\secondmonolength){\enehead}%
+\put(\monolength,\secondepilength){\line(-2,-1){#3}}%
+\put(-\value{x},\value{y}){\wswhead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\distsign}%
+\put(\value{x},-\value{y}){\distsign}%
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce east-north-east arrows;
+% the default length is 13300 units
+
+% basic east-north-east arrow
+\def\basicenear[#1]{\ENEAR{}{}{#100}}%
+
+% east-north-east arrow
+\newcommand{\enear}{\@ifnextchar[{\basicenear}{\basicenear[133]}}%
+
+% basic east-north-east arrow with upper name
+\def\basicEnear[#1]#2{\ENEAR{#2}{}{#100}}%
+
+% east-north-east arrow with upper name
+\newcommand{\Enear}{\@ifnextchar[{\basicEnear}{\basicEnear[133]}}%
+
+% basic east-north-east arrow with lower name
+\def\basiceneaR[#1]#2{\ENEAR{}{#2}{#100}}%
+
+% east-north-east arrow with lower name
+\newcommand{\eneaR}{\@ifnextchar[{\basiceneaR}{\basiceneaR[133]}}%
+
+% basic east-north-east distributor
+\def\basicenedist[#1]{\ENEDIST{}{}{#100}}%
+
+% east-north-east distributor
+\newcommand{\enedist}{\@ifnextchar[{\basicenedist}{\basicenedist[133]}}%
+
+% basic east-north-east distributor with upper name
+\def\basicEnedist[#1]#2{\ENEDIST{#2}{}{#100}}%
+
+% east-north-east distributor with upper name
+\newcommand{\Enedist}{\@ifnextchar[{\basicEnedist}{\basicEnedist[133]}}%
+
+% basic east-north-east distributor with lower name
+\def\basicenedisT[#1]#2{\ENEDIST{}{#2}{#100}}%
+
+% east-north-east distributor with lower name
+\newcommand{\enedisT}{\@ifnextchar[{\basicenedisT}{\basicenedisT[133]}}%
+
+% basic east-north-east dotted arrow
+\def\basicenedotar[#1]{\ENEDOTAR{}{}{#100}}%
+
+% east-north-east dotted arrow
+\newcommand{\enedotar}{\@ifnextchar[{\basicenedotar}{\basicenedotar[133]}}%
+
+% basic east-north-east dotted arrow with upper name
+\def\basicEnedotar[#1]#2{\ENEDOTAR{#2}{}{#100}}%
+
+% east-north-east dotted arrow with upper name
+\newcommand{\Enedotar}{\@ifnextchar[{\basicEnedotar}{\basicEnedotar[133]}}%
+
+% basic east-north-east dotted arrow with lower name
+\def\basicenedotaR[#1]#2{\ENEDOTAR{}{#2}{#100}}%
+
+% east-north-east dotted arrow with lower name
+\newcommand{\enedotaR}{\@ifnextchar[{\basicenedotaR}{\basicenedotaR[133]}}%
+
+% basic east-north-east monomorphism
+\def\basicenemono[#1]{\ENEMONO{}{}{#100}}%
+
+% east-north-east monomorphism
+\newcommand{\enemono}{\@ifnextchar[{\basicenemono}{\basicenemono[133]}}%
+
+% basic east-north-east monomorphism with upper name
+\def\basicEnemono[#1]#2{\ENEMONO{#2}{}{#100}}%
+
+% east-north-east monomorphism with upper name
+\newcommand{\Enemono}{\@ifnextchar[{\basicEnemono}{\basicEnemono[133]}}%
+
+% basic east-north-east monomorphism with lower name
+\def\basicenemonO[#1]#2{\ENEMONO{}{#2}{#100}}%
+
+% east-north-east monomorphism with lower name
+\newcommand{\enemonO}{\@ifnextchar[{\basicenemonO}{\basicenemonO[133]}}%
+
+% basic east-north-east epimorphism
+\def\basiceneepi[#1]{\ENEEPI{}{}{#100}}%
+
+% east-north-east epimorphism
+\newcommand{\eneepi}{\@ifnextchar[{\basiceneepi}{\basiceneepi[133]}}%
+
+% basic east-north-east epimorphism with upper name
+\def\basicEneepi[#1]#2{\ENEEPI{#2}{}{#100}}%
+
+% east-north-east epimorphism with upper name
+\newcommand{\Eneepi}{\@ifnextchar[{\basicEneepi}{\basicEneepi[133]}}%
+
+% basic east-north-east epimorphism with lower name
+\def\basiceneepI[#1]#2{\ENEEPI{}{#2}{#100}}%
+
+% east-north-east epimorphism with lower name
+\newcommand{\eneepI}{\@ifnextchar[{\basiceneepI}{\basiceneepI[133]}}%
+
+% basic east-north-east bimorphism
+\def\basicenebimo[#1]{\ENEBIMO{}{}{#100}}%
+
+% east-north-east bimorphism
+\newcommand{\enebimo}{\@ifnextchar[{\basicenebimo}{\basicenebimo[133]}}%
+
+% basic east-north-east bimorphism with upper name
+\def\basicEnebimo[#1]#2{\ENEBIMO{#2}{}{#100}}%
+
+% east-north-east bimorphism with upper name
+\newcommand{\Enebimo}{\@ifnextchar[{\basicEnebimo}{\basicEnebimo[133]}}%
+
+% basic east-north-east bimorphism with lower name
+\def\basicenebimO[#1]#2{\ENEBIMO{}{#2}{#100}}%
+
+% east-north-east bimorphism with lower name
+\newcommand{\enebimO}{\@ifnextchar[{\basicenebimO}{\basicenebimO[133]}}%
+
+% basic east-north-east isomorphism
+\def\basiceneiso[#1]{\ENEAR{\isosign}{}{#100}}%
+
+% east-north-east isomorphism
+\newcommand{\eneiso}{\@ifnextchar[{\basiceneiso}{\basiceneiso[133]}}%
+
+% basic east-north-east isomorphism with upper name
+\def\basicEneiso[#1]#2{\ENEAR{#2}{\isosign}{#100}}%
+
+% east-north-east isomorphism with upper name
+\newcommand{\Eneiso}{\@ifnextchar[{\basicEneiso}{\basicEneiso[133]}}%
+
+% basic east-north-east isomorphism with lower name
+\def\basiceneisO[#1]#2{\ENEAR{\isosign}{#2}{#100}}%
+
+% east-north-east isomorphism with lower name
+\newcommand{\eneisO}{\@ifnextchar[{\basiceneisO}{\basiceneisO[133]}}%
+
+% basic east-north-east equality
+\def\basiceneeql[#1]{\ENEEQL{}{}{#100}}%
+
+% east-north-east equality
+\newcommand{\eneeql}{\@ifnextchar[{\basiceneeql}{\basiceneeql[133]}}%
+
+% basic east-north-east equality with upper name
+\def\basicEneeql[#1]#2{\ENEEQL{#2}{}{#100}}%
+
+% east-north-east equality with upper name
+\newcommand{\Eneeql}{\@ifnextchar[{\basicEneeql}{\basicEneeql[133]}}%
+
+% basic east-north-east equality with lower name
+\def\basiceneeqL[#1]#2{\ENEEQL{}{#2}{#100}}%
+
+% east-north-east equality with lower name
+\newcommand{\eneeqL}{\@ifnextchar[{\basiceneeqL}{\basiceneeqL[133]}}%
+
+% basic east-north-east pair of arrows
+\def\basicenebiar[#1]{\ENEBIAR{}{}{#100}}%
+
+% east-north-east pair of arrows
+\newcommand{\enebiar}{\@ifnextchar[{\basicenebiar}{\basicenebiar[133]}}%
+
+% basic east-north-east pair of arrows with names
+\def\basicEnebiar[#1]#2#3{\ENEBIAR{#2}{#3}{#100}}%
+
+% east-north-east pair of arrows with names
+\newcommand{\Enebiar}{\@ifnextchar[{\basicEnebiar}{\basicEnebiar[133]}}%
+\let\enebiaR=\Enebiar
+
+% basic east-north-east pair of distributors
+\def\basicenebidist[#1]{\ENEBIDIST{}{}{#100}}%
+
+% east-north-east pair of distributors
+\newcommand{\enebidist}{\@ifnextchar[{\basicenebidist}{\basicenebidist[133]}}%
+
+% basic east-north-east pair of distributors with names
+\def\basicEnebidist[#1]#2#3{\ENEBIDIST{#2}{#3}{#100}}%
+
+% east-north-east pair of distributors with names
+\newcommand{\Enebidist}{\@ifnextchar[{\basicEnebidist}{\basicEnebidist[133]}}%
+\let\enebidisT=\Enebidist
+
+% basic east-north-east pair of adjoint arrows
+\def\basiceneadjar[#1]{\ENEADJAR{}{}{#100}}%
+
+% east-north-east pair of adjoint arrows
+\newcommand{\eneadjar}{\@ifnextchar[{\basiceneadjar}{\basiceneadjar[133]}}%
+
+% basic east-north-east pair of adjoint arrows with names
+\def\basicEneadjar[#1]#2#3{\ENEADJAR{#2}{#3}{#100}}%
+
+% east-north-east pair of adjoint arrows with names
+\newcommand{\Eneadjar}{\@ifnextchar[{\basicEneadjar}{\basicEneadjar[133]}}%
+\let\eneadjaR=\Eneadjar
+
+% basic east-north-east pair of adjoint distributors
+\def\basiceneadjdist[#1]{\ENEADJDIST{}{}{#100}}%
+
+% east-north-east pair of adjoint distributors
+\newcommand{\eneadjdist}{\@ifnextchar[{\basiceneadjdist}{\basiceneadjdist[133]}}%
+
+% basic east-north-east pair of adjoint distributors with names
+\def\basicEneadjdist[#1]#2#3{\ENEADJDIST{#2}{#3}{#100}}%
+
+% east-north-east pair of adjoint distributors with names
+\newcommand{\Eneadjdist}{\@ifnextchar[{\basicEneadjdist}{\basicEneadjdist[133]}}%
+\let\eneadjdisT=\Eneadjdist
+
+
+% EAST-SOUTH-EAST ARROWS
+
+% The following commands produce east-south-east arrows
+% of horizontal extent n units
+
+% \ESEAR{f}{g}{n} draws a east-south-east arrow with names f, g
+% and length n units
+\newcommand{\ESEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\line(2,-1){#3}}%
+\put(\Y,-\Z){\esehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEDIST{f}{g}{n} draws a east-south-east distributor
+% with names f, g and length n units
+\newcommand{\ESEDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\line(2,-1){#3}}%
+\put(\Y,-\Z){\esehead}%
+\put(0,0){\distsign}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\ESEDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Y,\Z)(\value{y},-\value{z}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Y,-\Z){\esehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEMONO{f}{g}{n} draws a east-south-east monomorphism
+% with names f,g and length n units
+\newcommand{\ESEMONO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,\secondmonolength){\line(2,-1){\bimolength}}%
+\put(-\monolength,\secondmonolength){\esehead}%
+\put(\Y,-\Z){\esehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEEPI{f}{g}{n} draws a east-south-east epimorphism
+% with names f, g and length n units
+\newcommand{\ESEEPI}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\line(2,-1){\bimolength}}%
+\put(\epilength,-\secondepilength){\esehead}%
+\put(\Y,-\Z){\esehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEBIMO{f}{g}{n} draws a east-south-east bimorphism
+% with names f,g and length n units
+\newcommand{\ESEBIMO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,\secondmonolength){\line(2,-1){\bimolength}}%
+\put(-\monolength,\secondmonolength){\esehead}%
+\put(\epilength,-\secondepilength){\esehead}%
+\put(\Y,-\Z){\esehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEEQL{f}{g}{n} draws a east-south-east equality
+% with names f,g and length n units
+\newcommand{\ESEEQL}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\begin{picture}(0,0)%
+\truex{44}\truey{89}%
+\put(-\value{x},-\value{y}){\line(2,-1){#3}}%
+\put(\value{x},\value{y}){\line(2,-1){#3}}%
+\end{picture}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEBIAR{f}{g}{n} draws a pair of east-south-east arrows
+% with names f,g and length n units
+\newcommand{\ESEBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\put(-\value{x},-\value{y}){\line(2,-1){#3}}%
+\put(\value{x},\value{y}){\line(2,-1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\monolength,-\secondepilength){\esehead}%
+\put(\epilength,-\secondmonolength){\esehead}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEBIDIST{f}{g}{n} draws a pair of east-south-east distributors
+% with names f,g and length n units
+\newcommand{\ESEBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(-\Y,\Z){\begin{picture}(0,0)%
+\put(-\value{x},-\value{y}){\line(2,-1){#3}}%
+\put(\value{x},\value{y}){\line(2,-1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\monolength,-\secondepilength){\esehead}%
+\put(\epilength,-\secondmonolength){\esehead}%
+\end{picture}}
+\put(\value{x},\value{y}){\distsign}%
+\put(-\value{x},-\value{y}){\distsign}%
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEADJAR{f}{g}{n} draws a east-south-east pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\ESEADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\line(2,-1){#3}}%
+\put(\monolength,-\secondepilength){\esehead}%
+\put(\epilength,-\secondmonolength){\line(-2,1){#3}}%
+\put(\value{x},\value{y}){\wnwhead}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEADJDIST{f}{g}{n} draws a east-south-east pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\ESEADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(-\Y,\Z){\begin{picture}(0,0)%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\line(2,-1){#3}}%
+\put(\monolength,-\secondepilength){\esehead}%
+\put(\epilength,-\secondmonolength){\line(-2,1){#3}}%
+\put(\value{x},\value{y}){\wnwhead}%
+\end{picture}}
+\put(\value{x},\value{y}){\distsign}%
+\put(-\value{x},-\value{y}){\distsign}%
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce east-south-east arrows;
+% the default length is 13300 units
+
+% basic east-south-east arrow
+\def\basicesear[#1]{\ESEAR{}{}{#100}}%
+
+% east-south-east arrow
+\newcommand{\esear}{\@ifnextchar[{\basicesear}{\basicesear[133]}}%
+
+% basic east-south-east arrow with upper name
+\def\basicEsear[#1]#2{\ESEAR{#2}{}{#100}}%
+
+% east-south-east arrow with upper name
+\newcommand{\Esear}{\@ifnextchar[{\basicEsear}{\basicEsear[133]}}%
+
+% basic east-south-east arrow with lower name
+\def\basiceseaR[#1]#2{\ESEAR{}{#2}{#100}}%
+
+% east-south-east arrow with lower name
+\newcommand{\eseaR}{\@ifnextchar[{\basiceseaR}{\basiceseaR[133]}}%
+
+% basic east-south-east distributor
+\def\basicesedist[#1]{\ESEDIST{}{}{#100}}%
+
+% east-south-east distributor
+\newcommand{\esedist}{\@ifnextchar[{\basicesedist}{\basicesedist[133]}}%
+
+% basic east-south-east distributor with upper name
+\def\basicEsedist[#1]#2{\ESEDIST{#2}{}{#100}}%
+
+% east-south-east distributor with upper name
+\newcommand{\Esedist}{\@ifnextchar[{\basicEsedist}{\basicEsedist[133]}}%
+
+% basic east-south-east distributor with lower name
+\def\basicesedisT[#1]#2{\ESEDIST{}{#2}{#100}}%
+
+% east-south-east distributor with lower name
+\newcommand{\esedisT}{\@ifnextchar[{\basicesedisT}{\basicesedisT[133]}}%
+
+% basic east-south-east dotted arrow
+\def\basicesedotar[#1]{\ESEDOTAR{}{}{#100}}%
+
+% east-south-east dotted arrow
+\newcommand{\esedotar}{\@ifnextchar[{\basicesedotar}{\basicesedotar[133]}}%
+
+% basic east-south-east dotted arrow with upper name
+\def\basicEsedotar[#1]#2{\ESEDOTAR{#2}{}{#100}}%
+
+% east-south-east dotted arrow with upper name
+\newcommand{\Esedotar}{\@ifnextchar[{\basicEsedotar}{\basicEsedotar[133]}}%
+
+% basic east-south-east dotted arrow with lower name
+\def\basicesedotaR[#1]#2{\ESEDOTAR{}{#2}{#100}}%
+
+% east-south-east dotted arrow with lower name
+\newcommand{\esedotaR}{\@ifnextchar[{\basicesedotaR}{\basicesedotaR[133]}}%
+
+% basic east-south-east monomorphism
+\def\basicesemono[#1]{\ESEMONO{}{}{#100}}%
+
+% east-south-east monomorphism
+\newcommand{\esemono}{\@ifnextchar[{\basicesemono}{\basicesemono[133]}}%
+
+% basic east-south-east monomorphism with upper name
+\def\basicEsemono[#1]#2{\ESEMONO{#2}{}{#100}}%
+
+% east-south-east monomorphism with upper name
+\newcommand{\Esemono}{\@ifnextchar[{\basicEsemono}{\basicEsemono[133]}}%
+
+% basic east-south-east monomorphism with lower name
+\def\basicesemonO[#1]#2{\ESEMONO{}{#2}{#100}}%
+
+% east-south-east monomorphism with lower name
+\newcommand{\esemonO}{\@ifnextchar[{\basicesemonO}{\basicesemonO[133]}}%
+
+% basic east-south-east epimorphism
+\def\basiceseepi[#1]{\ESEEPI{}{}{#100}}%
+
+% east-south-east epimorphism
+\newcommand{\eseepi}{\@ifnextchar[{\basiceseepi}{\basiceseepi[133]}}%
+
+% basic east-south-east epimorphism with upper name
+\def\basicEseepi[#1]#2{\ESEEPI{#2}{}{#100}}%
+
+% east-south-east epimorphism with upper name
+\newcommand{\Eseepi}{\@ifnextchar[{\basicEseepi}{\basicEseepi[133]}}%
+
+% basic east-south-east epimorphism with lower name
+\def\basiceseepI[#1]#2{\ESEEPI{}{#2}{#100}}%
+
+% east-south-east epimorphism with lower name
+\newcommand{\eseepI}{\@ifnextchar[{\basiceseepI}{\basiceseepI[133]}}%
+
+% basic east-south-east bimorphism
+\def\basicesebimo[#1]{\ESEBIMO{}{}{#100}}%
+
+% east-south-east bimorphism
+\newcommand{\esebimo}{\@ifnextchar[{\basicesebimo}{\basicesebimo[133]}}%
+
+% basic east-south-east bimorphism with upper name
+\def\basicEsebimo[#1]#2{\ESEBIMO{#2}{}{#100}}%
+
+% east-south-east bimorphism with upper name
+\newcommand{\Esebimo}{\@ifnextchar[{\basicEsebimo}{\basicEsebimo[133]}}%
+
+% basic east-south-east bimorphism with lower name
+\def\basicesebimO[#1]#2{\ESEBIMO{}{#2}{#100}}%
+
+% east-south-east bimorphism with lower name
+\newcommand{\esebimO}{\@ifnextchar[{\basicesebimO}{\basicesebimO[133]}}%
+
+% basic east-south-east isomorphism
+\def\basiceseiso[#1]{\ESEAR{\isosign}{}{#100}}%
+
+% east-south-east isomorphism
+\newcommand{\eseiso}{\@ifnextchar[{\basiceseiso}{\basiceseiso[133]}}%
+
+% basic east-south-east isomorphism with upper name
+\def\basicEseiso[#1]#2{\ESEAR{#2}{\isosign}{#100}}%
+
+% east-south-east isomorphism with upper name
+\newcommand{\Eseiso}{\@ifnextchar[{\basicEseiso}{\basicEseiso[133]}}%
+
+% basic east-south-east isomorphism with lower name
+\def\basiceseisO[#1]#2{\ESEAR{\isosign}{#2}{#100}}%
+
+% east-south-east isomorphism with lower name
+\newcommand{\eseisO}{\@ifnextchar[{\basiceseisO}{\basiceseisO[133]}}%
+
+% basic east-south-east equality
+\def\basiceseeql[#1]{\ESEEQL{}{}{#100}}%
+
+% east-south-east equality
+\newcommand{\eseeql}{\@ifnextchar[{\basiceseeql}{\basiceseeql[133]}}%
+
+% basic east-south-east equality with upper name
+\def\basicEseeql[#1]#2{\ESEEQL{#2}{}{#100}}%
+
+% east-south-east equality with upper name
+\newcommand{\Eseeql}{\@ifnextchar[{\basicEseeql}{\basicEseeql[133]}}%
+
+% basic east-south-east equality with lower name
+\def\basiceseeqL[#1]#2{\ESEEQL{}{#2}{#100}}%
+
+% east-south-east equality with lower name
+\newcommand{\eseeqL}{\@ifnextchar[{\basiceseeqL}{\basiceseeqL[133]}}%
+
+% basic east-south-east pair of arrows
+\def\basicesebiar[#1]{\ESEBIAR{}{}{#100}}%
+
+% east-south-east pair of arrows
+\newcommand{\esebiar}{\@ifnextchar[{\basicesebiar}{\basicesebiar[133]}}%
+
+% basic east-south-east pair of arrows with names
+\def\basicEsebiar[#1]#2#3{\ESEBIAR{#2}{#3}{#100}}%
+
+% east-south-east pair of arrows with names
+\newcommand{\Esebiar}{\@ifnextchar[{\basicEsebiar}{\basicEsebiar[133]}}%
+\let\esebiaR=\Esebiar
+
+% basic east-south-east pair of distributors
+\def\basicesebidist[#1]{\ESEBIDIST{}{}{#100}}%
+
+% east-south-east pair of distributors
+\newcommand{\esebidist}{\@ifnextchar[{\basicesebidist}{\basicesebidist[133]}}%
+
+% basic east-south-east pair of distributors with names
+\def\basicEsebidist[#1]#2#3{\ESEBIDIST{#2}{#3}{#100}}%
+
+% east-south-east pair of distributors with names
+\newcommand{\Esebidist}{\@ifnextchar[{\basicEsebidist}{\basicEsebidist[133]}}%
+\let\esebidisT=\Esebidist
+
+% basic east-south-east pair of adjoint arrows
+\def\basiceseadjar[#1]{\ESEADJAR{}{}{#100}}%
+
+% east-south-east pair of adjoint arrows
+\newcommand{\eseadjar}{\@ifnextchar[{\basiceseadjar}{\basiceseadjar[133]}}%
+
+% basic east-south-east pair of adjoint arrows with names
+\def\basicEseadjar[#1]#2#3{\ESEADJAR{#2}{#3}{#100}}%
+
+% east-south-east pair of adjoint arrows with names
+\newcommand{\Eseadjar}{\@ifnextchar[{\basicEseadjar}{\basicEseadjar[133]}}%
+\let\eseadjaR=\Eseadjar
+
+% basic east-south-east pair of adjoint distributors
+\def\basiceseadjdist[#1]{\ESEADJDIST{}{}{#100}}%
+
+% east-south-east pair of adjoint distributors
+\newcommand{\eseadjdist}{\@ifnextchar[{\basiceseadjdist}{\basiceseadjdist[133]}}%
+
+% basic east-south-east pair of adjoint distributors with names
+\def\basicEseadjdist[#1]#2#3{\ESEADJDIST{#2}{#3}{#100}}%
+
+% east-south-east pair of adjoint distributors with names
+\newcommand{\Eseadjdist}{\@ifnextchar[{\basicEseadjdist}{\basicEseadjdist[133]}}%
+\let\eseadjdisT=\Eseadjdist
+
+% WEST-SOUTH-WEST ARROWS
+
+% The following commands produce west-south-west arrows
+% of horizontal extent n units
+
+% \WSWAR{f}{g}{n} draws a west-south-west arrow with names f, g
+% and length n units
+\newcommand{\WSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\line(-2,-1){#3}}%
+\put(-\Y,-\Z){\wswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWDIST{f}{g}{n} draws a west-south-west distributor
+% with names f, g and length n units
+\newcommand{\WSWDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\line(-2,-1){#3}}%
+\put(-\Y,-\Z){\wswhead}%
+\truex{400}%
+\put(0,0){\distsign}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\WSWDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Y,\Z)(-\value{y},-\value{z}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Y,-\Z){\wswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWMONO{f}{g}{n} draws a west-south-west monomorphism
+% with names f,g and length n units
+\newcommand{\WSWMONO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,\secondmonolength){\line(-2,-1){\bimolength}}%
+\put(\monolength,\secondmonolength){\wswhead}%
+\put(-\Y,-\Z){\wswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWEPI{f}{g}{n} draws a west-south-west epimorphism
+% with names f, g and length n units
+\newcommand{\WSWEPI}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\line(-2,-1){\bimolength}}%
+\put(-\epilength,-\secondepilength){\wswhead}%
+\put(-\Y,-\Z){\wswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWBIMO{f}{g}{n} draws a west-south-west bimorphism
+% with names f,g and length n units
+\newcommand{\WSWBIMO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,\secondmonolength){\line(-2,-1){\bimolength}}%
+\put(\monolength,\secondmonolength){\wswhead}%
+\put(-\epilength,-\secondepilength){\wswhead}%
+\put(-\Y,-\Z){\wswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWBIAR{f}{g}{n} draws a pair of west-south-west arrows
+% with names f,g and length n units
+\newcommand{\WSWBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\put(-\value{x},\value{y}){\line(-2,-1){#3}}%
+\put(\value{x},-\value{y}){\line(-2,-1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\monolength,-\secondepilength){\wswhead}%
+\put(-\epilength,-\secondmonolength){\wswhead}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWBIDIST{f}{g}{n} draws a pair of west-south-west distributors
+% with names f,g and length n units
+\newcommand{\WSWBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(\Y,\Z){\begin{picture}(0,0)%
+\put(-\value{x},\value{y}){\line(-2,-1){#3}}%
+\put(\value{x},-\value{y}){\line(-2,-1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\monolength,-\secondepilength){\wswhead}%
+\put(-\epilength,-\secondmonolength){\wswhead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\distsign}%
+\put(\value{x},-\value{y}){\distsign}%
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWADJAR{f}{g}{n} draws a west-south-west pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\WSWADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\line(-2,-1){#3}}%
+\put(-\monolength,-\secondepilength){\wswhead}%
+\put(-\epilength,-\secondmonolength){\line(2,1){#3}}%
+\put(-\value{x},\value{y}){\enehead}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWADJDIST{f}{g}{n} draws a west-south-west pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\WSWADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(\Y,\Z){\begin{picture}(0,0)%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\line(-2,-1){#3}}%
+\put(-\monolength,-\secondepilength){\wswhead}%
+\put(-\epilength,-\secondmonolength){\line(2,1){#3}}%
+\put(-\value{x},\value{y}){\enehead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\distsign}%
+\put(\value{x},-\value{y}){\distsign}%
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce west-south-west arrows;
+% the default length is 13300 units
+
+% basic west-south-west arrow
+\def\basicwswar[#1]{\WSWAR{}{}{#100}}%
+
+% west-south-west arrow
+\newcommand{\wswar}{\@ifnextchar[{\basicwswar}{\basicwswar[133]}}%
+
+% basic west-south-west arrow with upper name
+\def\basicWswar[#1]#2{\WSWAR{#2}{}{#100}}%
+
+% west-south-west arrow with upper name
+\newcommand{\Wswar}{\@ifnextchar[{\basicWswar}{\basicWswar[133]}}%
+
+% basic west-south-west arrow with lower name
+\def\basicwswaR[#1]#2{\WSWAR{}{#2}{#100}}%
+
+% west-south-west arrow with lower name
+\newcommand{\wswaR}{\@ifnextchar[{\basicwswaR}{\basicwswaR[133]}}%
+
+% basic west-south-west distributor
+\def\basicwswdist[#1]{\WSWDIST{}{}{#100}}%
+
+% west-south-west distributor
+\newcommand{\wswdist}{\@ifnextchar[{\basicwswdist}{\basicwswdist[133]}}%
+
+% basic west-south-west distributor with upper name
+\def\basicWswdist[#1]#2{\WSWDIST{#2}{}{#100}}%
+
+% west-south-west distributor with upper name
+\newcommand{\Wswdist}{\@ifnextchar[{\basicWswdist}{\basicWswdist[133]}}%
+
+% basic west-south-west distributor with lower name
+\def\basicwswdisT[#1]#2{\WSWDIST{}{#2}{#100}}%
+
+% west-south-west distributor with lower name
+\newcommand{\wswdisT}{\@ifnextchar[{\basicwswdisT}{\basicwswdisT[133]}}%
+
+% basic west-south-west dotted arrow
+\def\basicwswdotar[#1]{\WSWDOTAR{}{}{#100}}%
+
+% west-south-west dotted arrow
+\newcommand{\wswdotar}{\@ifnextchar[{\basicwswdotar}{\basicwswdotar[133]}}%
+
+% basic west-south-west dotted arrow with upper name
+\def\basicWswdotar[#1]#2{\WSWDOTAR{#2}{}{#100}}%
+
+% west-south-west dotted arrow with upper name
+\newcommand{\Wswdotar}{\@ifnextchar[{\basicWswdotar}{\basicWswdotar[133]}}%
+
+% basic west-south-west dotted arrow with lower name
+\def\basicwswdotaR[#1]#2{\WSWDOTAR{}{#2}{#100}}%
+
+% west-south-west dotted arrow with lower name
+\newcommand{\wswdotaR}{\@ifnextchar[{\basicwswdotaR}{\basicwswdotaR[133]}}%
+
+% basic west-south-west monomorphism
+\def\basicwswmono[#1]{\WSWMONO{}{}{#100}}%
+
+% west-south-west monomorphism
+\newcommand{\wswmono}{\@ifnextchar[{\basicwswmono}{\basicwswmono[133]}}%
+
+% basic west-south-west monomorphism with upper name
+\def\basicWswmono[#1]#2{\WSWMONO{#2}{}{#100}}%
+
+% west-south-west monomorphism with upper name
+\newcommand{\Wswmono}{\@ifnextchar[{\basicWswmono}{\basicWswmono[133]}}%
+
+% basic west-south-west monomorphism with lower name
+\def\basicwswmonO[#1]#2{\WSWMONO{}{#2}{#100}}%
+
+% west-south-west monomorphism with lower name
+\newcommand{\wswmonO}{\@ifnextchar[{\basicwswmonO}{\basicwswmonO[133]}}%
+
+% basic west-south-west epimorphism
+\def\basicwswepi[#1]{\WSWEPI{}{}{#100}}%
+
+% west-south-west epimorphism
+\newcommand{\wswepi}{\@ifnextchar[{\basicwswepi}{\basicwswepi[133]}}%
+
+% basic west-south-west epimorphism with upper name
+\def\basicWswepi[#1]#2{\WSWEPI{#2}{}{#100}}%
+
+% west-south-west epimorphism with upper name
+\newcommand{\Wswepi}{\@ifnextchar[{\basicWswepi}{\basicWswepi[133]}}%
+
+% basic west-south-west epimorphism with lower name
+\def\basicwswepI[#1]#2{\WSWEPI{}{#2}{#100}}%
+
+% west-south-west epimorphism with lower name
+\newcommand{\wswepI}{\@ifnextchar[{\basicwswepI}{\basicwswepI[133]}}%
+
+% basic west-south-west bimorphism
+\def\basicwswbimo[#1]{\WSWBIMO{}{}{#100}}%
+
+% west-south-west bimorphism
+\newcommand{\wswbimo}{\@ifnextchar[{\basicwswbimo}{\basicwswbimo[133]}}%
+
+% basic west-south-west bimorphism with upper name
+\def\basicWswbimo[#1]#2{\WSWBIMO{#2}{}{#100}}%
+
+% west-south-west bimorphism with upper name
+\newcommand{\Wswbimo}{\@ifnextchar[{\basicWswbimo}{\basicWswbimo[133]}}%
+
+% basic west-south-west bimorphism with lower name
+\def\basicwswbimO[#1]#2{\WSWBIMO{}{#2}{#100}}%
+
+% west-south-west bimorphism with lower name
+\newcommand{\wswbimO}{\@ifnextchar[{\basicwswbimO}{\basicwswbimO[133]}}%
+
+% basic west-south-west isomorphism
+\def\basicwswiso[#1]{\WSWAR{\isosign}{}{#100}}%
+
+% west-south-west isomorphism
+\newcommand{\wswiso}{\@ifnextchar[{\basicwswiso}{\basicwswiso[133]}}%
+
+% basic west-south-west isomorphism with upper name
+\def\basicWswiso[#1]#2{\WSWAR{#2}{\isosign}{#100}}%
+
+% west-south-west isomorphism with upper name
+\newcommand{\Wswiso}{\@ifnextchar[{\basicWswiso}{\basicWswiso[133]}}%
+
+% basic west-south-west isomorphism with lower name
+\def\basicwswisO[#1]#2{\WSWAR{\isosign}{#2}{#100}}%
+
+% west-south-west isomorphism with lower name
+\newcommand{\wswisO}{\@ifnextchar[{\basicwswisO}{\basicwswisO[133]}}%
+
+% west-south-west equality
+\let\wsweql=\eneeql%
+
+% west-south-west equality with upper name
+\let\Wsweql=\Eneeql%
+
+% west-south-west equality with lower name
+\let\wsweqL=\eneeqL%
+
+% basic west-south-west pair of arrows
+\def\basicwswbiar[#1]{\WSWBIAR{}{}{#100}}%
+
+% west-south-west pair of arrows
+\newcommand{\wswbiar}{\@ifnextchar[{\basicwswbiar}{\basicwswbiar[133]}}%
+
+% basic west-south-west pair of arrows with names
+\def\basicWswbiar[#1]#2#3{\WSWBIAR{#2}{#3}{#100}}%
+
+% west-south-west pair of arrows with names
+\newcommand{\Wswbiar}{\@ifnextchar[{\basicWswbiar}{\basicWswbiar[133]}}%
+\let\wswbiaR=\Wswbiar
+
+% basic west-south-west pair of distributors
+\def\basicwswbidist[#1]{\WSWBIDIST{}{}{#100}}%
+
+% west-south-west pair of distributors
+\newcommand{\wswbidist}{\@ifnextchar[{\basicwswbidist}{\basicwswbidist[133]}}%
+
+% basic west-south-west pair of distributors with names
+\def\basicWswbidist[#1]#2#3{\WSWBIDIST{#2}{#3}{#100}}%
+
+% west-south-west pair of distributors with names
+\newcommand{\Wswbidist}{\@ifnextchar[{\basicWswbidist}{\basicWswbidist[133]}}%
+\let\wswbidisT=\Wswbidist
+
+% basic west-south-west pair of adjoint arrows
+\def\basicwswadjar[#1]{\WSWADJAR{}{}{#100}}%
+
+% west-south-west pair of adjoint arrows
+\newcommand{\wswadjar}{\@ifnextchar[{\basicwswadjar}{\basicwswadjar[133]}}%
+
+% basic west-south-west pair of adjoint arrows with names
+\def\basicWswadjar[#1]#2#3{\WSWADJAR{#2}{#3}{#100}}%
+
+% west-south-west pair of adjoint arrows with names
+\newcommand{\Wswadjar}{\@ifnextchar[{\basicWswadjar}{\basicWswadjar[133]}}%
+\let\wswadjaR=\Wswadjar
+
+% basic west-south-west pair of adjoint distributors
+\def\basicwswadjdist[#1]{\WSWADJDIST{}{}{#100}}%
+
+% west-south-west pair of adjoint distributors
+\newcommand{\wswadjdist}{\@ifnextchar[{\basicwswadjdist}{\basicwswadjdist[133]}}%
+
+% basic west-south-west pair of adjoint distributors with names
+\def\basicWswadjdist[#1]#2#3{\WSWADJDIST{#2}{#3}{#100}}%
+
+% west-south-west pair of adjoint distributors with names
+\newcommand{\Wswadjdist}{\@ifnextchar[{\basicWswadjdist}{\basicWswadjdist[133]}}%
+\let\wswadjdisT=\Wswadjdist
+
+
+% WEST-NORTH-WEST ARROWS
+
+% The following commands produce west-north-west arrows
+% of horizontal extent n units
+
+% \WNWAR{f}{g}{n} draws a west-north-west arrow with names f, g
+% and length n units
+\newcommand{\WNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\line(-2,1){#3}}%
+\put(-\Y,\Z){\wnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWDIST{f}{g}{n} draws a west-north-west distributor
+% with names f, g and length n units
+\newcommand{\WNWDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\line(-2,1){#3}}%
+\put(-\Y,\Z){\wnwhead}%
+\truex{400}%
+\put(0,0){\distsign}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\WNWDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{y}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Y,-\Z)(-\value{y},\value{z}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Y,\Z){\wnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWMONO{f}{g}{n} draws a west-north-west monomorphism
+% with names f,g and length n units
+\newcommand{\WNWMONO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,-\secondmonolength){\line(-2,1){\bimolength}}%
+\put(\monolength,-\secondmonolength){\wnwhead}%
+\put(-\Y,\Z){\wnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWEPI{f}{g}{n} draws a west-north-west epimorphism
+% with names f, g and length n units
+\newcommand{\WNWEPI}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\Y%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\line(-2,1){\bimolength}}%
+\put(-\epilength,\secondepilength){\wnwhead}%
+\put(-\Y,\Z){\wnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWBIMO{f}{g}{n} draws a west-north-west bimorphism
+% with names f,g and length n units
+\newcommand{\WNWBIMO}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\TrueTail\TrueHead%
+\bimolength=#3%
+\advance\bimolength by -\TrueMonoTail%
+\monolength=\bimolength%
+\advance\monolength by -\Y%
+\advance\bimolength by -\TrueEpiHead%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\divide\secondmonolength by 2%
+\secondepilength=\epilength%
+\divide\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,-\secondmonolength){\line(-2,1){\bimolength}}%
+\put(\monolength,-\secondmonolength){\wnwhead}%
+\put(-\epilength,\secondepilength){\wnwhead}%
+\put(-\Y,\Z){\wnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWBIAR{f}{g}{n} draws a pair of west-north-west arrows
+% with names f,g and length n units
+\newcommand{\WNWBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\put(-\value{x},-\value{y}){\line(-2,1){#3}}%
+\put(\value{x},\value{y}){\line(-2,1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\monolength,\secondepilength){\wnwhead}%
+\put(-\epilength,\secondmonolength){\wnwhead}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWBIDIST{f}{g}{n} draws a pair of west-north-west distributors
+% with names f,g and length n units
+\newcommand{\WNWBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(\Y,-\Z){\begin{picture}(0,0)%
+\put(-\value{x},-\value{y}){\line(-2,1){#3}}%
+\put(\value{x},\value{y}){\line(-2,1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\monolength,\secondepilength){\wnwhead}%
+\put(-\epilength,\secondmonolength){\wnwhead}%
+\end{picture}}
+\put(\value{x},\value{y}){\distsign}%
+\put(-\value{x},-\value{y}){\distsign}%
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWADJAR{f}{g}{n} draws a west-north-west pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\WNWADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\line(-2,1){#3}}%
+\put(-\epilength,\secondmonolength){\wnwhead}%
+\put(-\monolength,\secondepilength){\line(2,-1){#3}}%
+\put(\value{x},\value{y}){\esehead}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWADJDIST{f}{g}{n} draws a west-north-west pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\WNWADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\truex{156}\truey{313}\truez{400}%
+\put(\Y,-\Z){\begin{picture}(0,0)%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\line(-2,1){#3}}%
+\put(-\epilength,\secondmonolength){\wnwhead}%
+\put(-\monolength,\secondepilength){\line(2,-1){#3}}%
+\put(\value{x},\value{y}){\esehead}%
+\end{picture}}
+\put(\value{x},\value{y}){\distsign}%
+\put(-\value{x},-\value{y}){\distsign}%
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce west-north-west arrows;
+% the default length is 13300 units
+
+% basic west-north-west arrow
+\def\basicwnwar[#1]{\WNWAR{}{}{#100}}%
+
+% west-north-west arrow
+\newcommand{\wnwar}{\@ifnextchar[{\basicwnwar}{\basicwnwar[133]}}%
+
+% basic west-north-west arrow with upper name
+\def\basicWnwar[#1]#2{\WNWAR{#2}{}{#100}}%
+
+% west-north-west arrow with upper name
+\newcommand{\Wnwar}{\@ifnextchar[{\basicWnwar}{\basicWnwar[133]}}%
+
+% basic west-north-west arrow with lower name
+\def\basicwnwaR[#1]#2{\WNWAR{}{#2}{#100}}%
+
+% west-north-west arrow with lower name
+\newcommand{\wnwaR}{\@ifnextchar[{\basicwnwaR}{\basicwnwaR[133]}}%
+
+% basic west-north-west distributor
+\def\basicwnwdist[#1]{\WNWDIST{}{}{#100}}%
+
+% west-north-west distributor
+\newcommand{\wnwdist}{\@ifnextchar[{\basicwnwdist}{\basicwnwdist[133]}}%
+
+% basic west-north-west distributor with upper name
+\def\basicWnwdist[#1]#2{\WNWDIST{#2}{}{#100}}%
+
+% west-north-west distributor with upper name
+\newcommand{\Wnwdist}{\@ifnextchar[{\basicWnwdist}{\basicWnwdist[133]}}%
+
+% basic west-north-west distributor with lower name
+\def\basicwnwdisT[#1]#2{\WNWDIST{}{#2}{#100}}%
+
+% west-north-west distributor with lower name
+\newcommand{\wnwdisT}{\@ifnextchar[{\basicwnwdisT}{\basicwnwdisT[133]}}%
+
+% basic west-north-west dotted arrow
+\def\basicwnwdotar[#1]{\WNWDOTAR{}{}{#100}}%
+
+% west-north-west dotted arrow
+\newcommand{\wnwdotar}{\@ifnextchar[{\basicwnwdotar}{\basicwnwdotar[133]}}%
+
+% basic west-north-west dotted arrow with upper name
+\def\basicWnwdotar[#1]#2{\WNWDOTAR{#2}{}{#100}}%
+
+% west-north-west dotted arrow with upper name
+\newcommand{\Wnwdotar}{\@ifnextchar[{\basicWnwdotar}{\basicWnwdotar[133]}}%
+
+% basic west-north-west dotted arrow with lower name
+\def\basicwnwdotaR[#1]#2{\WNWDOTAR{}{#2}{#100}}%
+
+% west-north-west dotted arrow with lower name
+\newcommand{\wnwdotaR}{\@ifnextchar[{\basicwnwdotaR}{\basicwnwdotaR[133]}}%
+
+% basic west-north-west monomorphism
+\def\basicwnwmono[#1]{\WNWMONO{}{}{#100}}%
+
+% west-north-west monomorphism
+\newcommand{\wnwmono}{\@ifnextchar[{\basicwnwmono}{\basicwnwmono[133]}}%
+
+% basic west-north-west monomorphism with upper name
+\def\basicWnwmono[#1]#2{\WNWMONO{#2}{}{#100}}%
+
+% west-north-west monomorphism with upper name
+\newcommand{\Wnwmono}{\@ifnextchar[{\basicWnwmono}{\basicWnwmono[133]}}%
+
+% basic west-north-west monomorphism with lower name
+\def\basicwnwmonO[#1]#2{\WNWMONO{}{#2}{#100}}%
+
+% west-north-west monomorphism with lower name
+\newcommand{\wnwmonO}{\@ifnextchar[{\basicwnwmonO}{\basicwnwmonO[133]}}%
+
+% basic west-north-west epimorphism
+\def\basicwnwepi[#1]{\WNWEPI{}{}{#100}}%
+
+% west-north-west epimorphism
+\newcommand{\wnwepi}{\@ifnextchar[{\basicwnwepi}{\basicwnwepi[133]}}%
+
+% basic west-north-west epimorphism with upper name
+\def\basicWnwepi[#1]#2{\WNWEPI{#2}{}{#100}}%
+
+% west-north-west epimorphism with upper name
+\newcommand{\Wnwepi}{\@ifnextchar[{\basicWnwepi}{\basicWnwepi[133]}}%
+
+% basic west-north-west epimorphism with lower name
+\def\basicwnwepI[#1]#2{\WNWEPI{}{#2}{#100}}%
+
+% west-north-west epimorphism with lower name
+\newcommand{\wnwepI}{\@ifnextchar[{\basicwnwepI}{\basicwnwepI[133]}}%
+
+% basic west-north-west bimorphism
+\def\basicwnwbimo[#1]{\WNWBIMO{}{}{#100}}%
+
+% west-north-west bimorphism
+\newcommand{\wnwbimo}{\@ifnextchar[{\basicwnwbimo}{\basicwnwbimo[133]}}%
+
+% basic west-north-west bimorphism with upper name
+\def\basicWnwbimo[#1]#2{\WNWBIMO{#2}{}{#100}}%
+
+% west-north-west bimorphism with upper name
+\newcommand{\Wnwbimo}{\@ifnextchar[{\basicWnwbimo}{\basicWnwbimo[133]}}%
+
+% basic west-north-west bimorphism with lower name
+\def\basicwnwbimO[#1]#2{\WNWBIMO{}{#2}{#100}}%
+
+% west-north-west bimorphism with lower name
+\newcommand{\wnwbimO}{\@ifnextchar[{\basicwnwbimO}{\basicwnwbimO[133]}}%
+
+% basic west-north-west isomorphism
+\def\basicwnwiso[#1]{\WNWAR{\isosign}{}{#100}}%
+
+% west-north-west isomorphism
+\newcommand{\wnwiso}{\@ifnextchar[{\basicwnwiso}{\basicwnwiso[133]}}%
+
+% basic west-north-west isomorphism with upper name
+\def\basicWnwiso[#1]#2{\WNWAR{#2}{\isosign}{#100}}%
+
+% west-north-west isomorphism with upper name
+\newcommand{\Wnwiso}{\@ifnextchar[{\basicWnwiso}{\basicWnwiso[133]}}%
+
+% basic west-north-west isomorphism with lower name
+\def\basicwnwisO[#1]#2{\WNWAR{\isosign}{#2}{#100}}%
+
+% west-north-west isomorphism with lower name
+\newcommand{\wnwisO}{\@ifnextchar[{\basicwnwisO}{\basicwnwisO[133]}}%
+
+% west-north-west equality
+\let\wnweql=\eseeql%
+
+% west-north-west equality with upper name
+\let\Wnweql=\Eseeql%
+
+% west-north-west equality with lower name
+\let\wnweqL=\eseeqL%
+
+% basic west-north-west pair of arrows
+\def\basicwnwbiar[#1]{\WNWBIAR{}{}{#100}}%
+
+% west-north-west pair of arrows
+\newcommand{\wnwbiar}{\@ifnextchar[{\basicwnwbiar}{\basicwnwbiar[133]}}%
+
+% basic west-north-west pair of arrows with names
+\def\basicWnwbiar[#1]#2#3{\WNWBIAR{#2}{#3}{#100}}%
+
+% west-north-west pair of arrows with names
+\newcommand{\Wnwbiar}{\@ifnextchar[{\basicWnwbiar}{\basicWnwbiar[133]}}%
+\let\wnwbiaR=\Wnwbiar
+
+% basic west-north-west pair of distributors
+\def\basicwnwbidist[#1]{\WNWBIDIST{}{}{#100}}%
+
+% west-north-west pair of distributors
+\newcommand{\wnwbidist}{\@ifnextchar[{\basicwnwbidist}{\basicwnwbidist[133]}}%
+
+% basic west-north-west pair of distributors with names
+\def\basicWnwbidist[#1]#2#3{\WNWBIDIST{#2}{#3}{#100}}%
+
+% west-north-west pair of distributors with names
+\newcommand{\Wnwbidist}{\@ifnextchar[{\basicWnwbidist}{\basicWnwbidist[133]}}%
+\let\wnwbidisT=\Wnwbidist
+
+% basic west-north-west pair of adjoint arrows
+\def\basicwnwadjar[#1]{\WNWADJAR{}{}{#100}}%
+
+% west-north-west pair of adjoint arrows
+\newcommand{\wnwadjar}{\@ifnextchar[{\basicwnwadjar}{\basicwnwadjar[133]}}%
+
+% basic west-north-west pair of adjoint arrows with names
+\def\basicWnwadjar[#1]#2#3{\WNWADJAR{#2}{#3}{#100}}%
+
+% west-north-west pair of adjoint arrows with names
+\newcommand{\Wnwadjar}{\@ifnextchar[{\basicWnwadjar}{\basicWnwadjar[133]}}%
+\let\wnwadjaR=\Wnwadjar
+
+% basic west-north-west pair of adjoint distributors
+\def\basicwnwadjdist[#1]{\WNWADJDIST{}{}{#100}}%
+
+% west-north-west pair of adjoint distributors
+\newcommand{\wnwadjdist}{\@ifnextchar[{\basicwnwadjdist}{\basicwnwadjdist[133]}}%
+
+% basic west-north-west pair of adjoint distributors with names
+\def\basicWnwadjdist[#1]#2#3{\WNWADJDIST{#2}{#3}{#100}}%
+
+% west-north-west pair of adjoint distributors with names
+\newcommand{\Wnwadjdist}{\@ifnextchar[{\basicWnwadjdist}{\basicWnwadjdist[133]}}%
+\let\wnwadjdisT=\Wnwadjdist
+
+
+% NORTH-NORTH-EAST ARROWS
+
+% The following commands produce north-north-east arrows
+% of horizontal extent n units
+
+% \NNEAR{f}{g}{n} draws a north-north-east arrow with names f, g
+% and length n units
+\newcommand{\NNEAR}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,-#3){\line(1,2){#3}}%
+\put(\Z,#3){\nnehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEDIST{f}{g}{n} draws a north-north-east distributor
+% with names f, g and length n units
+\newcommand{\NNEDIST}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,-#3){\line(1,2){#3}}%
+\put(\Z,#3){\nnehead}%
+\truex{400}%
+\put(0,0){\distsign}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\NNEDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Z=#3%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{z}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Z,-#3)(\value{z},\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Z,#3){\nnehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEMONO{f}{g}{n} draws a north-north-east monomorphism
+% with names f,g and length n units
+\newcommand{\NNEMONO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,-\secondmonolength){\line(1,2){\bimolength}}%
+\put(-\monolength,-\secondmonolength){\nnehead}%
+\put(\Z,#3){\nnehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEEPI{f}{g}{n} draws a north-north-east epimorphism
+% with names f, g and length n units
+\newcommand{\NNEEPI}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\Z%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\Z,-#3){\line(1,2){\bimolength}}%
+\put(\epilength,\secondepilength){\nnehead}%
+\put(\Z,#3){\nnehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEBIMO{f}{g}{n} draws a north-north-east bimorphism
+% with names f,g and length n units
+\newcommand{\NNEBIMO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,-\secondmonolength){\line(1,2){\bimolength}}%
+\put(-\monolength,-\secondmonolength){\nnehead}%
+\put(\epilength,\secondepilength){\nnehead}%
+\put(\Z,#3){\nnehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEEQL{f}{g}{n} draws a north-north-east equality
+% with names f,g and length n units
+\newcommand{\NNEEQL}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,-#3){\begin{picture}(0,0)%
+\truex{44}\truey{89}%
+\put(-\value{y},\value{x}){\line(1,2){#3}}%
+\put(\value{y},-\value{x}){\line(1,2){#3}}%
+\end{picture}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEBIAR{f}{g}{n} draws a pair of north-north-east arrows
+% with names f,g and length n units
+\newcommand{\NNEBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\put(-\value{x},\value{y}){\line(1,2){#3}}%
+\put(\value{x},-\value{y}){\line(1,2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\monolength,\secondepilength){\nnehead}%
+\put(\epilength,\secondmonolength){\nnehead}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEBIDIST{f}{g}{n} draws a pair of north-north-east distributors
+% with names f,g and length n units
+\newcommand{\NNEBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(-\Y,-#3){\begin{picture}(0,0)%
+\put(-\value{x},\value{y}){\line(1,2){#3}}%
+\put(\value{x},-\value{y}){\line(1,2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\monolength,\secondepilength){\nnehead}%
+\put(\epilength,\secondmonolength){\nnehead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\distsign}%
+\put(\value{x},-\value{y}){\distsign}%
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEADJAR{f}{g}{n} draws a north-north-east pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\NNEADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\line(1,2){#3}}%
+\put(\epilength,\secondmonolength){\nnehead}%
+\put(\monolength,\secondepilength){\line(-1,-2){#3}}%
+\put(-\value{x},\value{y}){\sswhead}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEADJDIST{f}{g}{n} draws a north-north-east pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\NNEADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(-\Y,-#3){\begin{picture}(0,0)%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\line(1,2){#3}}%
+\put(\epilength,\secondmonolength){\nnehead}%
+\put(\monolength,\secondepilength){\line(-1,-2){#3}}%
+\put(-\value{x},\value{y}){\sswhead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\distsign}%
+\put(\value{x},-\value{y}){\distsign}%
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce north-north-east arrows;
+% the default length is 6700 units
+
+% basic north-north-east arrow
+\def\basicnnear[#1]{\NNEAR{}{}{#100}}%
+
+% north-north-east arrow
+\newcommand{\nnear}{\@ifnextchar[{\basicnnear}{\basicnnear[67]}}%
+
+% basic north-north-east arrow with upper name
+\def\basicNnear[#1]#2{\NNEAR{#2}{}{#100}}%
+
+% north-north-east arrow with upper name
+\newcommand{\Nnear}{\@ifnextchar[{\basicNnear}{\basicNnear[67]}}%
+
+% basic north-north-east arrow with lower name
+\def\basicnneaR[#1]#2{\NNEAR{}{#2}{#100}}%
+
+% north-north-east arrow with lower name
+\newcommand{\nneaR}{\@ifnextchar[{\basicnneaR}{\basicnneaR[67]}}%
+
+% basic north-north-east distributor
+\def\basicnnedist[#1]{\NNEDIST{}{}{#100}}%
+
+% north-north-east distributor
+\newcommand{\nnedist}{\@ifnextchar[{\basicnnedist}{\basicnnedist[67]}}%
+
+% basic north-north-east distributor with upper name
+\def\basicNnedist[#1]#2{\NNEDIST{#2}{}{#100}}%
+
+% north-north-east distributor with upper name
+\newcommand{\Nnedist}{\@ifnextchar[{\basicNnedist}{\basicNnedist[67]}}%
+
+% basic north-north-east distributor with lower name
+\def\basicnnedisT[#1]#2{\NNEDIST{}{#2}{#100}}%
+
+% north-north-east distributor with lower name
+\newcommand{\nnedisT}{\@ifnextchar[{\basicnnedisT}{\basicnnedisT[67]}}%
+
+% basic north-north-east dotted arrow
+\def\basicnnedotar[#1]{\NNEDOTAR{}{}{#100}}%
+
+% north-north-east dotted arrow
+\newcommand{\nnedotar}{\@ifnextchar[{\basicnnedotar}{\basicnnedotar[67]}}%
+
+% basic north-north-east dotted arrow with upper name
+\def\basicNnedotar[#1]#2{\NNEDOTAR{#2}{}{#100}}%
+
+% north-north-east dotted arrow with upper name
+\newcommand{\Nnedotar}{\@ifnextchar[{\basicNnedotar}{\basicNnedotar[67]}}%
+
+% basic north-north-east dotted arrow with lower name
+\def\basicnnedotaR[#1]#2{\NNEDOTAR{}{#2}{#100}}%
+
+% north-north-east dotted arrow with lower name
+\newcommand{\nnedotaR}{\@ifnextchar[{\basicnnedotaR}{\basicnnedotaR[67]}}%
+
+% basic north-north-east monomorphism
+\def\basicnnemono[#1]{\NNEMONO{}{}{#100}}%
+
+% north-north-east monomorphism
+\newcommand{\nnemono}{\@ifnextchar[{\basicnnemono}{\basicnnemono[67]}}%
+
+% basic north-north-east monomorphism with upper name
+\def\basicNnemono[#1]#2{\NNEMONO{#2}{}{#100}}%
+
+% north-north-east monomorphism with upper name
+\newcommand{\Nnemono}{\@ifnextchar[{\basicNnemono}{\basicNnemono[67]}}%
+
+% basic north-north-east monomorphism with lower name
+\def\basicnnemonO[#1]#2{\NNEMONO{}{#2}{#100}}%
+
+% north-north-east monomorphism with lower name
+\newcommand{\nnemonO}{\@ifnextchar[{\basicnnemonO}{\basicnnemonO[67]}}%
+
+% basic north-north-east epimorphism
+\def\basicnneepi[#1]{\NNEEPI{}{}{#100}}%
+
+% north-north-east epimorphism
+\newcommand{\nneepi}{\@ifnextchar[{\basicnneepi}{\basicnneepi[67]}}%
+
+% basic north-north-east epimorphism with upper name
+\def\basicNneepi[#1]#2{\NNEEPI{#2}{}{#100}}%
+
+% north-north-east epimorphism with upper name
+\newcommand{\Nneepi}{\@ifnextchar[{\basicNneepi}{\basicNneepi[67]}}%
+
+% basic north-north-east epimorphism with lower name
+\def\basicnneepI[#1]#2{\NNEEPI{}{#2}{#100}}%
+
+% north-north-east epimorphism with lower name
+\newcommand{\nneepI}{\@ifnextchar[{\basicnneepI}{\basicnneepI[67]}}%
+
+% basic north-north-east bimorphism
+\def\basicnnebimo[#1]{\NNEBIMO{}{}{#100}}%
+
+% north-north-east bimorphism
+\newcommand{\nnebimo}{\@ifnextchar[{\basicnnebimo}{\basicnnebimo[67]}}%
+
+% basic north-north-east bimorphism with upper name
+\def\basicNnebimo[#1]#2{\NNEBIMO{#2}{}{#100}}%
+
+% north-north-east bimorphism with upper name
+\newcommand{\Nnebimo}{\@ifnextchar[{\basicNnebimo}{\basicNnebimo[67]}}%
+
+% basic north-north-east bimorphism with lower name
+\def\basicnnebimO[#1]#2{\NNEBIMO{}{#2}{#100}}%
+
+% north-north-east bimorphism with lower name
+\newcommand{\nnebimO}{\@ifnextchar[{\basicnnebimO}{\basicnnebimO[67]}}%
+
+% basic north-north-east isomorphism
+\def\basicnneiso[#1]{\NNEAR{\isosign}{}{#100}}%
+
+% north-north-east isomorphism
+\newcommand{\nneiso}{\@ifnextchar[{\basicnneiso}{\basicnneiso[67]}}%
+
+% basic north-north-east isomorphism with upper name
+\def\basicNneiso[#1]#2{\NNEAR{#2}{\isosign}{#100}}%
+
+% north-north-east isomorphism with upper name
+\newcommand{\Nneiso}{\@ifnextchar[{\basicNneiso}{\basicNneiso[67]}}%
+
+% basic north-north-east isomorphism with lower name
+\def\basicnneisO[#1]#2{\NNEAR{\isosign}{#2}{#100}}%
+
+% north-north-east isomorphism with lower name
+\newcommand{\nneisO}{\@ifnextchar[{\basicnneisO}{\basicnneisO[67]}}%
+
+% basic north-north-east equality
+\def\basicnneeql[#1]{\NNEEQL{}{}{#100}}%
+
+% north-north-east equality
+\newcommand{\nneeql}{\@ifnextchar[{\basicnneeql}{\basicnneeql[67]}}%
+
+% basic north-north-east equality with upper name
+\def\basicNneeql[#1]#2{\NNEEQL{#2}{}{#100}}%
+
+% north-north-east equality with upper name
+\newcommand{\Nneeql}{\@ifnextchar[{\basicNneeql}{\basicNneeql[67]}}%
+
+% basic north-north-east equality with lower name
+\def\basicnneeqL[#1]#2{\NNEEQL{}{#2}{#100}}%
+
+% north-north-east equality with lower name
+\newcommand{\nneeqL}{\@ifnextchar[{\basicnneeqL}{\basicnneeqL[67]}}%
+
+% basic north-north-east pair of arrows
+\def\basicnnebiar[#1]{\NNEBIAR{}{}{#100}}%
+
+% north-north-east pair of arrows
+\newcommand{\nnebiar}{\@ifnextchar[{\basicnnebiar}{\basicnnebiar[67]}}%
+
+% basic north-north-east pair of arrows with names
+\def\basicNnebiar[#1]#2#3{\NNEBIAR{#2}{#3}{#100}}%
+
+% north-north-east pair of arrows with names
+\newcommand{\Nnebiar}{\@ifnextchar[{\basicNnebiar}{\basicNnebiar[67]}}%
+\let\nnebiaR=\Nnebiar
+
+% basic north-north-east pair of distributors
+\def\basicnnebidist[#1]{\NNEBIDIST{}{}{#100}}%
+
+% north-north-east pair of distributors
+\newcommand{\nnebidist}{\@ifnextchar[{\basicnnebidist}{\basicnnebidist[67]}}%
+
+% basic north-north-east pair of distributors with names
+\def\basicNnebidist[#1]#2#3{\NNEBIDIST{#2}{#3}{#100}}%
+
+% north-north-east pair of distributors with names
+\newcommand{\Nnebidist}{\@ifnextchar[{\basicNnebidist}{\basicNnebidist[67]}}%
+\let\nnebidisT=\Nnebidist
+
+% basic north-north-east pair of adjoint arrows
+\def\basicnneadjar[#1]{\NNEADJAR{}{}{#100}}%
+
+% north-north-east pair of adjoint arrows
+\newcommand{\nneadjar}{\@ifnextchar[{\basicnneadjar}{\basicnneadjar[67]}}%
+
+% basic north-north-east pair of adjoint arrows with names
+\def\basicNneadjar[#1]#2#3{\NNEADJAR{#2}{#3}{#100}}%
+
+% north-north-east pair of adjoint arrows with names
+\newcommand{\Nneadjar}{\@ifnextchar[{\basicNneadjar}{\basicNneadjar[67]}}%
+\let\nneadjaR=\Nneadjar
+
+% basic north-north-east pair of adjoint distributors
+\def\basicnneadjdist[#1]{\NNEADJDIST{}{}{#100}}%
+
+% north-north-east pair of adjoint distributors
+\newcommand{\nneadjdist}{\@ifnextchar[{\basicnneadjdist}{\basicnneadjdist[67]}}%
+
+% basic north-north-east pair of adjoint distributors with names
+\def\basicNneadjdist[#1]#2#3{\NNEADJDIST{#2}{#3}{#100}}%
+
+% north-north-east pair of adjoint distributors with names
+\newcommand{\Nneadjdist}{\@ifnextchar[{\basicNneadjdist}{\basicNneadjdist[67]}}%
+\let\nneadjdisT=\Nneadjdist
+
+
+% SOUTH-SOUTH-EAST ARROWS
+
+% The following commands produce south-south-east arrows
+% of horizontal extent n units
+
+% \SSEAR{f}{g}{n} draws a south-south-east arrow with names f, g
+% and length n units
+\newcommand{\SSEAR}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,#3){\line(1,-2){#3}}%
+\put(\Z,-#3){\ssehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEDIST{f}{g}{n} draws a south-south-east distributor
+% with names f, g and length n units
+\newcommand{\SSEDIST}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,#3){\line(1,-2){#3}}%
+\put(\Z,-#3){\ssehead}%
+\truex{400}%
+\put(0,0){\distsign}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\SSEDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Z=#3%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{z}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(-\Z,#3)(\value{z},-\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(\Z,-#3){\ssehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEMONO{f}{g}{n} draws a south-south-east monomorphism
+% with names f,g and length n units
+\newcommand{\SSEMONO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,\secondmonolength){\line(1,-2){\bimolength}}%
+\put(-\monolength,\secondmonolength){\ssehead}%
+\put(\Z,-#3){\ssehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEEPI{f}{g}{n} draws a south-south-east epimorphism
+% with names f, g and length n units
+\newcommand{\SSEEPI}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\Z%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\Z,#3){\line(1,-2){\bimolength}}%
+\put(\epilength,-\secondepilength){\ssehead}%
+\put(\Z,-#3){\ssehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEBIMO{f}{g}{n} draws a south-south-east bimorphism
+% with names f,g and length n units
+\newcommand{\SSEBIMO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(-\monolength,\secondmonolength){\line(1,-2){\bimolength}}%
+\put(-\monolength,\secondmonolength){\ssehead}%
+\put(\epilength,-\secondepilength){\ssehead}%
+\put(\Z,-#3){\ssehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEEQL{f}{g}{n} draws a south-south-east equality
+% with names f,g and length n units
+\newcommand{\SSEEQL}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,#3){\begin{picture}(0,0)%
+\truex{44}\truey{89}%
+\put(-\value{y},-\value{x}){\line(1,-2){#3}}%
+\put(\value{y},\value{x}){\line(1,-2){#3}}%
+\end{picture}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEBIAR{f}{g}{n} draws a pair of south-south-east arrows
+% with names f,g and length n units
+\newcommand{\SSEBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\put(-\value{x},-\value{y}){\line(1,-2){#3}}%
+\put(\value{x},\value{y}){\line(1,-2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\monolength,-\secondepilength){\ssehead}%
+\put(\epilength,-\secondmonolength){\ssehead}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEBIDIST{f}{g}{n} draws a pair of south-south-east distributors
+% with names f,g and length n units
+\newcommand{\SSEBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(-\Y,#3){\begin{picture}(0,0)%
+\put(-\value{x},-\value{y}){\line(1,-2){#3}}%
+\put(\value{x},\value{y}){\line(1,-2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\monolength,-\secondepilength){\ssehead}%
+\put(\epilength,-\secondmonolength){\ssehead}%
+\end{picture}}
+\put(-\value{x},-\value{y}){\distsign}%
+\put(\value{x},\value{y}){\distsign}%
+\truex{500}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEADJAR{f}{g}{n} draws a south-south-east pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\SSEADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\line(1,-2){#3}}%
+\put(\monolength,-\secondepilength){\ssehead}%
+\put(\epilength,-\secondmonolength){\line(-1,2){#3}}%
+\put(\value{x},\value{y}){\nnwhead}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEADJDIST{f}{g}{n} draws a south-south-east pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\SSEADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(-\Y,#3){\begin{picture}(0,0)%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\line(1,-2){#3}}%
+\put(\monolength,-\secondepilength){\ssehead}%
+\put(\epilength,-\secondmonolength){\line(-1,2){#3}}%
+\put(\value{x},\value{y}){\nnwhead}%
+\end{picture}}
+\put(\value{x},\value{y}){\distsign}%
+\put(-\value{x},-\value{y}){\distsign}%
+\truex{500}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+
+% The following commands produce south-south-east arrows;
+% the default length is 6700 units
+
+% basic south-south-east arrow
+\def\basicssear[#1]{\SSEAR{}{}{#100}}%
+
+% south-south-east arrow
+\newcommand{\ssear}{\@ifnextchar[{\basicssear}{\basicssear[67]}}%
+
+% basic south-south-east arrow with upper name
+\def\basicSsear[#1]#2{\SSEAR{#2}{}{#100}}%
+
+% south-south-east arrow with upper name
+\newcommand{\Ssear}{\@ifnextchar[{\basicSsear}{\basicSsear[67]}}%
+
+% basic south-south-east arrow with lower name
+\def\basicsseaR[#1]#2{\SSEAR{}{#2}{#100}}%
+
+% south-south-east arrow with lower name
+\newcommand{\sseaR}{\@ifnextchar[{\basicsseaR}{\basicsseaR[67]}}%
+
+% basic south-south-east distributor
+\def\basicssedist[#1]{\SSEDIST{}{}{#100}}%
+
+% south-south-east distributor
+\newcommand{\ssedist}{\@ifnextchar[{\basicssedist}{\basicssedist[67]}}%
+
+% basic south-south-east distributor with upper name
+\def\basicSsedist[#1]#2{\SSEDIST{#2}{}{#100}}%
+
+% south-south-east distributor with upper name
+\newcommand{\Ssedist}{\@ifnextchar[{\basicSsedist}{\basicSsedist[67]}}%
+
+% basic south-south-east distributor with lower name
+\def\basicssedisT[#1]#2{\SSEDIST{}{#2}{#100}}%
+
+% south-south-east distributor with lower name
+\newcommand{\ssedisT}{\@ifnextchar[{\basicssedisT}{\basicssedisT[67]}}%
+
+% basic south-south-east dotted arrow
+\def\basicssedotar[#1]{\SSEDOTAR{}{}{#100}}%
+
+% south-south-east dotted arrow
+\newcommand{\ssedotar}{\@ifnextchar[{\basicssedotar}{\basicssedotar[67]}}%
+
+% basic south-south-east dotted arrow with upper name
+\def\basicSsedotar[#1]#2{\SSEDOTAR{#2}{}{#100}}%
+
+% south-south-east dotted arrow with upper name
+\newcommand{\Ssedotar}{\@ifnextchar[{\basicSsedotar}{\basicSsedotar[67]}}%
+
+% basic south-south-east dotted arrow with lower name
+\def\basicssedotaR[#1]#2{\SSEDOTAR{}{#2}{#100}}%
+
+% south-south-east dotted arrow with lower name
+\newcommand{\ssedotaR}{\@ifnextchar[{\basicssedotaR}{\basicssedotaR[67]}}%
+
+% basic south-south-east monomorphism
+\def\basicssemono[#1]{\SSEMONO{}{}{#100}}%
+
+% south-south-east monomorphism
+\newcommand{\ssemono}{\@ifnextchar[{\basicssemono}{\basicssemono[67]}}%
+
+% basic south-south-east monomorphism with upper name
+\def\basicSsemono[#1]#2{\SSEMONO{#2}{}{#100}}%
+
+% south-south-east monomorphism with upper name
+\newcommand{\Ssemono}{\@ifnextchar[{\basicSsemono}{\basicSsemono[67]}}%
+
+% basic south-south-east monomorphism with lower name
+\def\basicssemonO[#1]#2{\SSEMONO{}{#2}{#100}}%
+
+% south-south-east monomorphism with lower name
+\newcommand{\ssemonO}{\@ifnextchar[{\basicssemonO}{\basicssemonO[67]}}%
+
+% basic south-south-east epimorphism
+\def\basicsseepi[#1]{\SSEEPI{}{}{#100}}%
+
+% south-south-east epimorphism
+\newcommand{\sseepi}{\@ifnextchar[{\basicsseepi}{\basicsseepi[67]}}%
+
+% basic south-south-east epimorphism with upper name
+\def\basicSseepi[#1]#2{\SSEEPI{#2}{}{#100}}%
+
+% south-south-east epimorphism with upper name
+\newcommand{\Sseepi}{\@ifnextchar[{\basicSseepi}{\basicSseepi[67]}}%
+
+% basic south-south-east epimorphism with lower name
+\def\basicsseepI[#1]#2{\SSEEPI{}{#2}{#100}}%
+
+% south-south-east epimorphism with lower name
+\newcommand{\sseepI}{\@ifnextchar[{\basicsseepI}{\basicsseepI[67]}}%
+
+% basic south-south-east bimorphism
+\def\basicssebimo[#1]{\SSEBIMO{}{}{#100}}%
+
+% south-south-east bimorphism
+\newcommand{\ssebimo}{\@ifnextchar[{\basicssebimo}{\basicssebimo[67]}}%
+
+% basic south-south-east bimorphism with upper name
+\def\basicSsebimo[#1]#2{\SSEBIMO{#2}{}{#100}}%
+
+% south-south-east bimorphism with upper name
+\newcommand{\Ssebimo}{\@ifnextchar[{\basicSsebimo}{\basicSsebimo[67]}}%
+
+% basic south-south-east bimorphism with lower name
+\def\basicssebimO[#1]#2{\SSEBIMO{}{#2}{#100}}%
+
+% south-south-east bimorphism with lower name
+\newcommand{\ssebimO}{\@ifnextchar[{\basicssebimO}{\basicssebimO[67]}}%
+
+% basic south-south-east isomorphism
+\def\basicsseiso[#1]{\SSEAR{\isosign}{}{#100}}%
+
+% south-south-east isomorphism
+\newcommand{\sseiso}{\@ifnextchar[{\basicsseiso}{\basicsseiso[67]}}%
+
+% basic south-south-east isomorphism with upper name
+\def\basicSseiso[#1]#2{\SSEAR{#2}{\isosign}{#100}}%
+
+% south-south-east isomorphism with upper name
+\newcommand{\Sseiso}{\@ifnextchar[{\basicSseiso}{\basicSseiso[67]}}%
+
+% basic south-south-east isomorphism with lower name
+\def\basicsseisO[#1]#2{\SSEAR{\isosign}{#2}{#100}}%
+
+% south-south-east isomorphism with lower name
+\newcommand{\sseisO}{\@ifnextchar[{\basicsseisO}{\basicsseisO[67]}}%
+
+% basic south-south-east equality
+\def\basicsseeql[#1]{\SSEEQL{}{}{#100}}%
+
+% south-south-east equality
+\newcommand{\sseeql}{\@ifnextchar[{\basicsseeql}{\basicsseeql[67]}}%
+
+% basic south-south-east equality with upper name
+\def\basicSseeql[#1]#2{\SSEEQL{#2}{}{#100}}%
+
+% south-south-east equality with upper name
+\newcommand{\Sseeql}{\@ifnextchar[{\basicSseeql}{\basicSseeql[67]}}%
+
+% basic south-south-east equality with lower name
+\def\basicsseeqL[#1]#2{\SSEEQL{}{#2}{#100}}%
+
+% south-south-east equality with lower name
+\newcommand{\sseeqL}{\@ifnextchar[{\basicsseeqL}{\basicsseeqL[67]}}%
+
+% basic south-south-east pair of arrows
+\def\basicssebiar[#1]{\SSEBIAR{}{}{#100}}%
+
+% south-south-east pair of arrows
+\newcommand{\ssebiar}{\@ifnextchar[{\basicssebiar}{\basicssebiar[67]}}%
+
+% basic south-south-east pair of arrows with names
+\def\basicSsebiar[#1]#2#3{\SSEBIAR{#2}{#3}{#100}}%
+
+% south-south-east pair of arrows with names
+\newcommand{\Ssebiar}{\@ifnextchar[{\basicSsebiar}{\basicSsebiar[67]}}%
+\let\ssebiaR=\Ssebiar
+
+% basic south-south-east pair of distributors
+\def\basicssebidist[#1]{\SSEBIDIST{}{}{#100}}%
+
+% south-south-east pair of distributors
+\newcommand{\ssebidist}{\@ifnextchar[{\basicssebidist}{\basicssebidist[67]}}%
+
+% basic south-south-east pair of distributors with names
+\def\basicSsebidist[#1]#2#3{\SSEBIDIST{#2}{#3}{#100}}%
+
+% south-south-east pair of distributors with names
+\newcommand{\Ssebidist}{\@ifnextchar[{\basicSsebidist}{\basicSsebidist[67]}}%
+\let\ssebidisT=\Ssebidist
+
+% basic south-south-east pair of adjoint arrows
+\def\basicsseadjar[#1]{\SSEADJAR{}{}{#100}}%
+
+% south-south-east pair of adjoint arrows
+\newcommand{\sseadjar}{\@ifnextchar[{\basicsseadjar}{\basicsseadjar[67]}}%
+
+% basic south-south-east pair of adjoint arrows with names
+\def\basicSseadjar[#1]#2#3{\SSEADJAR{#2}{#3}{#100}}%
+
+% south-south-east pair of adjoint arrows with names
+\newcommand{\Sseadjar}{\@ifnextchar[{\basicSseadjar}{\basicSseadjar[67]}}%
+\let\sseadjaR=\Sseadjar
+
+% basic south-south-east pair of adjoint distributors
+\def\basicsseadjdist[#1]{\SSEADJDIST{}{}{#100}}%
+
+% south-south-east pair of adjoint distributors
+\newcommand{\sseadjdist}{\@ifnextchar[{\basicsseadjdist}{\basicsseadjdist[67]}}%
+
+% basic south-south-east pair of adjoint distributors with names
+\def\basicSseadjdist[#1]#2#3{\SSEADJDIST{#2}{#3}{#100}}%
+
+% south-south-east pair of adjoint distributors with names
+\newcommand{\Sseadjdist}{\@ifnextchar[{\basicSseadjdist}{\basicSseadjdist[67]}}%
+\let\sseadjdisT=\Sseadjdist
+
+
+% SOUTH-SOUTH-WEST ARROWS
+
+% The following commands produce south-south-west arrows
+% of horizontal extent n units
+
+% \SSWAR{f}{g}{n} draws a south-south-west arrow with names f, g
+% and length n units
+\newcommand{\SSWAR}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Z,#3){\line(-1,-2){#3}}%
+\put(-\Z,-#3){\sswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWDIST{f}{g}{n} draws a south-south-west distributor
+% with names f, g and length n units
+\newcommand{\SSWDIST}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Z,#3){\line(-1,-2){#3}}%
+\put(-\Z,-#3){\sswhead}%
+\truex{400}%
+\put(0,0){\distsign}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\SSWDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Z=#3%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{z}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Z,#3)(-\value{z},-\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Z,-#3){\sswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWMONO{f}{g}{n} draws a south-south-west monomorphism
+% with names f,g and length n units
+\newcommand{\SSWMONO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,\secondmonolength){\line(-1,-2){\bimolength}}%
+\put(\monolength,\secondmonolength){\sswhead}%
+\put(-\Z,-#3){\sswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWEPI{f}{g}{n} draws a south-south-west epimorphism
+% with names f, g and length n units
+\newcommand{\SSWEPI}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\Z%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\Z,#3){\line(-1,-2){\bimolength}}%
+\put(-\epilength,-\secondepilength){\sswhead}%
+\put(-\Z,-#3){\sswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWBIMO{f}{g}{n} draws a south-south-west bimorphism
+% with names f,g and length n units
+\newcommand{\SSWBIMO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,\secondmonolength){\line(-1,-2){\bimolength}}%
+\put(\monolength,\secondmonolength){\sswhead}%
+\put(-\epilength,-\secondepilength){\sswhead}%
+\put(-\Z,-#3){\sswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWBIAR{f}{g}{n} draws a pair of south-south-west arrows
+% with names f,g and length n units
+\newcommand{\SSWBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\put(-\value{x},\value{y}){\line(-1,-2){#3}}%
+\put(\value{x},-\value{y}){\line(-1,-2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\monolength,-\secondepilength){\sswhead}%
+\put(-\epilength,-\secondmonolength){\sswhead}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWBIDIST{f}{g}{n} draws a pair of south-south-west distributors
+% with names f,g and length n units
+\newcommand{\SSWBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(\Y,#3){\begin{picture}(0,0)%
+\put(-\value{x},\value{y}){\line(-1,-2){#3}}%
+\put(\value{x},-\value{y}){\line(-1,-2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\monolength,-\secondepilength){\sswhead}%
+\put(-\epilength,-\secondmonolength){\sswhead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\distsign}%
+\put(\value{x},-\value{y}){\distsign}%
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWADJAR{f}{g}{n} draws a south-south-west pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\SSWADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\line(-1,-2){#3}}%
+\put(-\monolength,-\secondepilength){\sswhead}%
+\put(-\epilength,-\secondmonolength){\line(1,2){#3}}%
+\put(-\value{x},\value{y}){\nnehead}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWADJDIST{f}{g}{n} draws a south-south-west pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\SSWADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(\Y,#3){\begin{picture}(0,0)%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\line(-1,-2){#3}}%
+\put(-\monolength,-\secondepilength){\sswhead}%
+\put(-\epilength,-\secondmonolength){\line(1,2){#3}}%
+\put(-\value{x},\value{y}){\nnehead}%
+\end{picture}}
+\put(-\value{x},\value{y}){\distsign}%
+\put(\value{x},-\value{y}){\distsign}%
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce south-south-west arrows;
+% the default length is 6700 units
+
+% basic south-south-west arrow
+\def\basicsswar[#1]{\SSWAR{}{}{#100}}%
+
+% south-south-west arrow
+\newcommand{\sswar}{\@ifnextchar[{\basicsswar}{\basicsswar[67]}}%
+
+% basic south-south-west arrow with upper name
+\def\basicSswar[#1]#2{\SSWAR{#2}{}{#100}}%
+
+% south-south-west arrow with upper name
+\newcommand{\Sswar}{\@ifnextchar[{\basicSswar}{\basicSswar[67]}}%
+
+% basic south-south-west arrow with lower name
+\def\basicsswaR[#1]#2{\SSWAR{}{#2}{#100}}%
+
+% south-south-west arrow with lower name
+\newcommand{\sswaR}{\@ifnextchar[{\basicsswaR}{\basicsswaR[67]}}%
+
+% basic south-south-west distributor
+\def\basicsswdist[#1]{\SSWDIST{}{}{#100}}%
+
+% south-south-west distributor
+\newcommand{\sswdist}{\@ifnextchar[{\basicsswdist}{\basicsswdist[67]}}%
+
+% basic south-south-west distributor with upper name
+\def\basicSswdist[#1]#2{\SSWDIST{#2}{}{#100}}%
+
+% south-south-west distributor with upper name
+\newcommand{\Sswdist}{\@ifnextchar[{\basicSswdist}{\basicSswdist[67]}}%
+
+% basic south-south-west distributor with lower name
+\def\basicsswdisT[#1]#2{\SSWDIST{}{#2}{#100}}%
+
+% south-south-west distributor with lower name
+\newcommand{\sswdisT}{\@ifnextchar[{\basicsswdisT}{\basicsswdisT[67]}}%
+
+% basic south-south-west dotted arrow
+\def\basicsswdotar[#1]{\SSWDOTAR{}{}{#100}}%
+
+% south-south-west dotted arrow
+\newcommand{\sswdotar}{\@ifnextchar[{\basicsswdotar}{\basicsswdotar[67]}}%
+
+% basic south-south-west dotted arrow with upper name
+\def\basicSswdotar[#1]#2{\SSWDOTAR{#2}{}{#100}}%
+
+% south-south-west dotted arrow with upper name
+\newcommand{\Sswdotar}{\@ifnextchar[{\basicSswdotar}{\basicSswdotar[67]}}%
+
+% basic south-south-west dotted arrow with lower name
+\def\basicsswdotaR[#1]#2{\SSWDOTAR{}{#2}{#100}}%
+
+% south-south-west dotted arrow with lower name
+\newcommand{\sswdotaR}{\@ifnextchar[{\basicsswdotaR}{\basicsswdotaR[67]}}%
+
+% basic south-south-west monomorphism
+\def\basicsswmono[#1]{\SSWMONO{}{}{#100}}%
+
+% south-south-west monomorphism
+\newcommand{\sswmono}{\@ifnextchar[{\basicsswmono}{\basicsswmono[67]}}%
+
+% basic south-south-west monomorphism with upper name
+\def\basicSswmono[#1]#2{\SSWMONO{#2}{}{#100}}%
+
+% south-south-west monomorphism with upper name
+\newcommand{\Sswmono}{\@ifnextchar[{\basicSswmono}{\basicSswmono[67]}}%
+
+% basic south-south-west monomorphism with lower name
+\def\basicsswmonO[#1]#2{\SSWMONO{}{#2}{#100}}%
+
+% south-south-west monomorphism with lower name
+\newcommand{\sswmonO}{\@ifnextchar[{\basicsswmonO}{\basicsswmonO[67]}}%
+
+% basic south-south-west epimorphism
+\def\basicsswepi[#1]{\SSWEPI{}{}{#100}}%
+
+% south-south-west epimorphism
+\newcommand{\sswepi}{\@ifnextchar[{\basicsswepi}{\basicsswepi[67]}}%
+
+% basic south-south-west epimorphism with upper name
+\def\basicSswepi[#1]#2{\SSWEPI{#2}{}{#100}}%
+
+% south-south-west epimorphism with upper name
+\newcommand{\Sswepi}{\@ifnextchar[{\basicSswepi}{\basicSswepi[67]}}%
+
+% basic south-south-west epimorphism with lower name
+\def\basicsswepI[#1]#2{\SSWEPI{}{#2}{#100}}%
+
+% south-south-west epimorphism with lower name
+\newcommand{\sswepI}{\@ifnextchar[{\basicsswepI}{\basicsswepI[67]}}%
+
+% basic south-south-west bimorphism
+\def\basicsswbimo[#1]{\SSWBIMO{}{}{#100}}%
+
+% south-south-west bimorphism
+\newcommand{\sswbimo}{\@ifnextchar[{\basicsswbimo}{\basicsswbimo[67]}}%
+
+% basic south-south-west bimorphism with upper name
+\def\basicSswbimo[#1]#2{\SSWBIMO{#2}{}{#100}}%
+
+% south-south-west bimorphism with upper name
+\newcommand{\Sswbimo}{\@ifnextchar[{\basicSswbimo}{\basicSswbimo[67]}}%
+
+% basic south-south-west bimorphism with lower name
+\def\basicsswbimO[#1]#2{\SSWBIMO{}{#2}{#100}}%
+
+% south-south-west bimorphism with lower name
+\newcommand{\sswbimO}{\@ifnextchar[{\basicsswbimO}{\basicsswbimO[67]}}%
+
+% basic south-south-west isomorphism
+\def\basicsswiso[#1]{\SSWAR{\isosign}{}{#100}}%
+
+% south-south-west isomorphism
+\newcommand{\sswiso}{\@ifnextchar[{\basicsswiso}{\basicsswiso[67]}}%
+
+% basic south-south-west isomorphism with upper name
+\def\basicSswiso[#1]#2{\SSWAR{#2}{\isosign}{#100}}%
+
+% south-south-west isomorphism with upper name
+\newcommand{\Sswiso}{\@ifnextchar[{\basicSswiso}{\basicSswiso[67]}}%
+
+% basic south-south-west isomorphism with lower name
+\def\basicsswisO[#1]#2{\SSWAR{\isosign}{#2}{#100}}%
+
+% south-south-west isomorphism with lower name
+\newcommand{\sswisO}{\@ifnextchar[{\basicsswisO}{\basicsswisO[67]}}%
+
+% south-south-west equality
+\let\ssweql=\nneeql%
+
+% south-south-west equality with upper name
+\let\Ssweql=\Nneeql%
+
+% south-south-west equality with lower name
+\let\ssweqL=\nneeqL%
+
+% basic south-south-west pair of arrows
+\def\basicsswbiar[#1]{\SSWBIAR{}{}{#100}}%
+
+% south-south-west pair of arrows
+\newcommand{\sswbiar}{\@ifnextchar[{\basicsswbiar}{\basicsswbiar[67]}}%
+
+% basic south-south-west pair of arrows with names
+\def\basicSswbiar[#1]#2#3{\SSWBIAR{#2}{#3}{#100}}%
+
+% south-south-west pair of arrows with names
+\newcommand{\Sswbiar}{\@ifnextchar[{\basicSswbiar}{\basicSswbiar[67]}}%
+\let\sswbiaR=\Sswbiar
+
+% basic south-south-west pair of distributors
+\def\basicsswbidist[#1]{\SSWBIDIST{}{}{#100}}%
+
+% south-south-west pair of distributors
+\newcommand{\sswbidist}{\@ifnextchar[{\basicsswbidist}{\basicsswbidist[67]}}%
+
+% basic south-south-west pair of distributors with names
+\def\basicSswbidist[#1]#2#3{\SSWBIDIST{#2}{#3}{#100}}%
+
+% south-south-west pair of distributors with names
+\newcommand{\Sswbidist}{\@ifnextchar[{\basicSswbidist}{\basicSswbidist[67]}}%
+\let\sswbidisT=\Sswbidist
+
+% basic south-south-west pair of adjoint arrows
+\def\basicsswadjar[#1]{\SSWADJAR{}{}{#100}}%
+
+% south-south-west pair of adjoint arrows
+\newcommand{\sswadjar}{\@ifnextchar[{\basicsswadjar}{\basicsswadjar[67]}}%
+
+% basic south-south-west pair of adjoint arrows with names
+\def\basicSswadjar[#1]#2#3{\SSWADJAR{#2}{#3}{#100}}%
+
+% south-south-west pair of adjoint arrows with names
+\newcommand{\Sswadjar}{\@ifnextchar[{\basicSswadjar}{\basicSswadjar[67]}}%
+\let\sswadjaR=\Sswadjar
+
+% basic south-south-west pair of adjoint distributors
+\def\basicsswadjdist[#1]{\SSWADJDIST{}{}{#100}}%
+
+% south-south-west pair of adjoint distributors
+\newcommand{\sswadjdist}{\@ifnextchar[{\basicsswadjdist}{\basicsswadjdist[67]}}%
+
+% basic south-south-west pair of adjoint distributors with names
+\def\basicSswadjdist[#1]#2#3{\SSWADJDIST{#2}{#3}{#100}}%
+
+% south-south-west pair of adjoint distributors with names
+\newcommand{\Sswadjdist}{\@ifnextchar[{\basicSswadjdist}{\basicSswadjdist[67]}}%
+\let\sswadjdisT=\Sswadjdist
+
+
+% NORTH-NORTH-WEST ARROWS
+
+% The following commands produce north-north-west arrows
+% of horizontal extent n units
+
+% \NNWAR{f}{g}{n} draws a north-north-west arrow with names f, g
+% and length n units
+\newcommand{\NNWAR}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Z,-#3){\line(-1,2){#3}}%
+\put(-\Z,#3){\nnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWDIST{f}{g}{n} draws a north-north-west distributor
+% with names f, g and length n units
+\newcommand{\NNWDIST}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Z,-#3){\line(-1,2){#3}}%
+\put(-\Z,#3){\nnwhead}%
+\truex{400}%
+\put(0,0){\distsign}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWDOTAR{f}{g}{n} draws a north-east dotted arrow
+% with names f,g and length n units
+\newcommand{\NNWDOTAR}[3]{\testdiagrammode%
+\truex{100}\truey{268}\truez{134}%
+\Z=#3%
+\divide\Z by 2%
+\NUMBEROFDOTS=#3%
+\divide\NUMBEROFDOTS by \value{z}%
+\advance\NUMBEROFDOTS by 1%
+\begin{picture}(0,0)%
+\multiput(\Z,-#3)(-\value{z},\value{y}){\NUMBEROFDOTS}%
+{\circle*{\value{x}}}%
+\put(-\Z,#3){\nnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWMONO{f}{g}{n} draws a north-north-west monomorphism
+% with names f,g and length n units
+\newcommand{\NNWMONO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,-\secondmonolength){\line(-1,2){\bimolength}}%
+\put(\monolength,-\secondmonolength){\nnwhead}%
+\put(-\Z,#3){\nnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWEPI{f}{g}{n} draws a north-north-west epimorphism
+% with names f, g and length n units
+\newcommand{\NNWEPI}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\Z%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\Z,-#3){\line(-1,2){\bimolength}}%
+\put(-\epilength,\secondepilength){\nnwhead}%
+\put(-\Z,#3){\nnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWBIMO{f}{g}{n} draws a north-north-west bimorphism
+% with names f,g and length n units
+\newcommand{\NNWBIMO}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\truetaiL\trueheaD%
+\bimolength=#3%
+\advance\bimolength by -\truemonotaiL%
+\monolength=\bimolength%
+\advance\monolength by -\Z%
+\advance\bimolength by -\trueepiheaD%
+\epilength=\bimolength%
+\advance\epilength by -\monolength%
+\secondmonolength=\monolength%
+\multiply\secondmonolength by 2%
+\secondepilength=\epilength%
+\multiply\secondepilength by 2%
+\begin{picture}(0,0)%
+\put(\monolength,-\secondmonolength){\line(-1,2){\bimolength}}%
+\put(\monolength,-\secondmonolength){\nnwhead}%
+\put(-\epilength,\secondepilength){\nnwhead}%
+\put(-\Z,#3){\nnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWBIAR{f}{g}{n} draws a pair of north-north-west arrows
+% with names f,g and length n units
+\newcommand{\NNWBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\put(-\value{x},-\value{y}){\line(-1,2){#3}}%
+\put(\value{x},\value{y}){\line(-1,2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\monolength,\secondepilength){\nnwhead}%
+\put(-\epilength,\secondmonolength){\nnwhead}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWBIDIST{f}{g}{n} draws a pair of north-north-west distributors
+% with names f,g and length n units
+\newcommand{\NNWBIDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(\Y,-#3){\begin{picture}(0,0)%
+\put(-\value{x},-\value{y}){\line(-1,2){#3}}%
+\put(\value{x},\value{y}){\line(-1,2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\monolength,\secondepilength){\nnwhead}%
+\put(-\epilength,\secondmonolength){\nnwhead}%
+\end{picture}}
+\put(-\value{x},-\value{y}){\distsign}%
+\put(\value{x},\value{y}){\distsign}%
+\truex{500}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWADJAR{f}{g}{n} draws a north-north-west pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\NNWADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\line(-1,2){#3}}%
+\put(-\epilength,\secondmonolength){\nnwhead}%
+\put(-\monolength,\secondepilength){\line(1,-2){#3}}%
+\put(\value{x},\value{y}){\ssehead}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWADJDIST{f}{g}{n} draws a north-north-west pair of adjoint distributors
+% with names f,g and length n units
+\newcommand{\NNWADJDIST}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\truex{313}\truey{156}\truez{400}%
+\put(\Y,-#3){\begin{picture}(0,0)%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\line(-1,2){#3}}%
+\put(-\epilength,\secondmonolength){\nnwhead}%
+\put(-\monolength,\secondepilength){\line(1,-2){#3}}%
+\put(\value{x},\value{y}){\ssehead}%
+\end{picture}}
+\put(\value{x},\value{y}){\distsign}%
+\put(-\value{x},-\value{y}){\distsign}%
+\truex{500}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce north-north-west arrows;
+% the default length is 6700 units
+
+% basic north-north-west arrow
+\def\basicnnwar[#1]{\NNWAR{}{}{#100}}%
+
+% north-north-west arrow
+\newcommand{\nnwar}{\@ifnextchar[{\basicnnwar}{\basicnnwar[67]}}%
+
+% basic north-north-west arrow with upper name
+\def\basicNnwar[#1]#2{\NNWAR{#2}{}{#100}}%
+
+% north-north-west arrow with upper name
+\newcommand{\Nnwar}{\@ifnextchar[{\basicNnwar}{\basicNnwar[67]}}%
+
+% basic north-north-west arrow with lower name
+\def\basicnnwaR[#1]#2{\NNWAR{}{#2}{#100}}%
+
+% north-north-west arrow with lower name
+\newcommand{\nnwaR}{\@ifnextchar[{\basicnnwaR}{\basicnnwaR[67]}}%
+
+% basic north-north-west distributor
+\def\basicnnwdist[#1]{\NNWDIST{}{}{#100}}%
+
+% north-north-west distributor
+\newcommand{\nnwdist}{\@ifnextchar[{\basicnnwdist}{\basicnnwdist[67]}}%
+
+% basic north-north-west distributor with upper name
+\def\basicNnwdist[#1]#2{\NNWDIST{#2}{}{#100}}%
+
+% north-north-west distributor with upper name
+\newcommand{\Nnwdist}{\@ifnextchar[{\basicNnwdist}{\basicNnwdist[67]}}%
+
+% basic north-north-west distributor with lower name
+\def\basicnnwdisT[#1]#2{\NNWDIST{}{#2}{#100}}%
+
+% north-north-west distributor with lower name
+\newcommand{\nnwdisT}{\@ifnextchar[{\basicnnwdisT}{\basicnnwdisT[67]}}%
+
+% basic north-north-west dotted arrow
+\def\basicnnwdotar[#1]{\NNWDOTAR{}{}{#100}}%
+
+% north-north-west dotted arrow
+\newcommand{\nnwdotar}{\@ifnextchar[{\basicnnwdotar}{\basicnnwdotar[67]}}%
+
+% basic north-north-west dotted arrow with upper name
+\def\basicNnwdotar[#1]#2{\NNWDOTAR{#2}{}{#100}}%
+
+% north-north-west dotted arrow with upper name
+\newcommand{\Nnwdotar}{\@ifnextchar[{\basicNnwdotar}{\basicNnwdotar[67]}}%
+
+% basic north-north-west dotted arrow with lower name
+\def\basicnnwdotaR[#1]#2{\NNWDOTAR{}{#2}{#100}}%
+
+% north-north-west dotted arrow with lower name
+\newcommand{\nnwdotaR}{\@ifnextchar[{\basicnnwdotaR}{\basicnnwdotaR[67]}}%
+
+% basic north-north-west monomorphism
+\def\basicnnwmono[#1]{\NNWMONO{}{}{#100}}%
+
+% north-north-west monomorphism
+\newcommand{\nnwmono}{\@ifnextchar[{\basicnnwmono}{\basicnnwmono[67]}}%
+
+% basic north-north-west monomorphism with upper name
+\def\basicNnwmono[#1]#2{\NNWMONO{#2}{}{#100}}%
+
+% north-north-west monomorphism with upper name
+\newcommand{\Nnwmono}{\@ifnextchar[{\basicNnwmono}{\basicNnwmono[67]}}%
+
+% basic north-north-west monomorphism with lower name
+\def\basicnnwmonO[#1]#2{\NNWMONO{}{#2}{#100}}%
+
+% north-north-west monomorphism with lower name
+\newcommand{\nnwmonO}{\@ifnextchar[{\basicnnwmonO}{\basicnnwmonO[67]}}%
+
+% basic north-north-west epimorphism
+\def\basicnnwepi[#1]{\NNWEPI{}{}{#100}}%
+
+% north-north-west epimorphism
+\newcommand{\nnwepi}{\@ifnextchar[{\basicnnwepi}{\basicnnwepi[67]}}%
+
+% basic north-north-west epimorphism with upper name
+\def\basicNnwepi[#1]#2{\NNWEPI{#2}{}{#100}}%
+
+% north-north-west epimorphism with upper name
+\newcommand{\Nnwepi}{\@ifnextchar[{\basicNnwepi}{\basicNnwepi[67]}}%
+
+% basic north-north-west epimorphism with lower name
+\def\basicnnwepI[#1]#2{\NNWEPI{}{#2}{#100}}%
+
+% north-north-west epimorphism with lower name
+\newcommand{\nnwepI}{\@ifnextchar[{\basicnnwepI}{\basicnnwepI[67]}}%
+
+% basic north-north-west bimorphism
+\def\basicnnwbimo[#1]{\NNWBIMO{}{}{#100}}%
+
+% north-north-west bimorphism
+\newcommand{\nnwbimo}{\@ifnextchar[{\basicnnwbimo}{\basicnnwbimo[67]}}%
+
+% basic north-north-west bimorphism with upper name
+\def\basicNnwbimo[#1]#2{\NNWBIMO{#2}{}{#100}}%
+
+% north-north-west bimorphism with upper name
+\newcommand{\Nnwbimo}{\@ifnextchar[{\basicNnwbimo}{\basicNnwbimo[67]}}%
+
+% basic north-north-west bimorphism with lower name
+\def\basicnnwbimO[#1]#2{\NNWBIMO{}{#2}{#100}}%
+
+% north-north-west bimorphism with lower name
+\newcommand{\nnwbimO}{\@ifnextchar[{\basicnnwbimO}{\basicnnwbimO[67]}}%
+
+% basic north-north-west isomorphism
+\def\basicnnwiso[#1]{\NNWAR{\isosign}{}{#100}}%
+
+% north-north-west isomorphism
+\newcommand{\nnwiso}{\@ifnextchar[{\basicnnwiso}{\basicnnwiso[67]}}%
+
+% basic north-north-west isomorphism with upper name
+\def\basicNnwiso[#1]#2{\NNWAR{#2}{\isosign}{#100}}%
+
+% north-north-west isomorphism with upper name
+\newcommand{\Nnwiso}{\@ifnextchar[{\basicNnwiso}{\basicNnwiso[67]}}%
+
+% basic north-north-west isomorphism with lower name
+\def\basicnnwisO[#1]#2{\NNWAR{\isosign}{#2}{#100}}%
+
+% north-north-west isomorphism with lower name
+\newcommand{\nnwisO}{\@ifnextchar[{\basicnnwisO}{\basicnnwisO[67]}}%
+
+% north-north-west equality
+\let\nnweql=\sseeql%
+
+% north-north-west equality with upper name
+\let\Nnweql=\Sseeql%
+
+% north-north-west equality with lower name
+\let\nnweqL=\sseeqL%
+
+% basic north-north-east pair of arrows
+\def\basicnnwbiar[#1]{\NNWBIAR{}{}{#100}}%
+
+% north-north-east pair of arrows
+\newcommand{\nnwbiar}{\@ifnextchar[{\basicnnwbiar}{\basicnnwbiar[67]}}%
+
+% basic north-north-east pair of arrows with names
+\def\basicNnwbiar[#1]#2#3{\NNWBIAR{#2}{#3}{#100}}%
+
+% north-north-east pair of arrows with names
+\newcommand{\Nnwbiar}{\@ifnextchar[{\basicNnwbiar}{\basicNnwbiar[67]}}%
+\let\nnwbiaR=\Nnwbiar
+
+% basic north-north-east pair of distributors
+\def\basicnnwbidist[#1]{\NNWBIDIST{}{}{#100}}%
+
+% north-north-east pair of distributors
+\newcommand{\nnwbidist}{\@ifnextchar[{\basicnnwbidist}{\basicnnwbidist[67]}}%
+
+% basic north-north-east pair of distributors with names
+\def\basicNnwbidist[#1]#2#3{\NNWBIDIST{#2}{#3}{#100}}%
+
+% north-north-east pair of distributors with names
+\newcommand{\Nnwbidist}{\@ifnextchar[{\basicNnwbidist}{\basicNnwbidist[67]}}%
+\let\nnwbidisT=\Nnwbidist
+
+% basic north-north-east pair of adjoint arrows
+\def\basicnnwadjar[#1]{\NNWADJAR{}{}{#100}}%
+
+% north-north-east pair of adjoint arrows
+\newcommand{\nnwadjar}{\@ifnextchar[{\basicnnwadjar}{\basicnnwadjar[67]}}%
+
+% basic north-north-east pair of adjoint arrows with names
+\def\basicNnwadjar[#1]#2#3{\NNWADJAR{#2}{#3}{#100}}%
+
+% north-north-east pair of adjoint arrows with names
+\newcommand{\Nnwadjar}{\@ifnextchar[{\basicNnwadjar}{\basicNnwadjar[67]}}%
+\let\nnwadjaR=\Nnwadjar
+
+% basic north-north-east pair of adjoint distributors
+\def\basicnnwadjdist[#1]{\NNWADJDIST{}{}{#100}}%
+
+% north-north-east pair of adjoint distributors
+\newcommand{\nnwadjdist}{\@ifnextchar[{\basicnnwadjdist}{\basicnnwadjdist[67]}}%
+
+% basic north-north-east pair of adjoint distributors with names
+\def\basicNnwadjdist[#1]#2#3{\NNWADJDIST{#2}{#3}{#100}}%
+
+% north-north-east pair of adjoint distributors with names
+\newcommand{\Nnwadjdist}{\@ifnextchar[{\basicNnwadjdist}{\basicNnwadjdist[67]}}%
+\let\nnwadjdisT=\Nnwadjdist
+
+
+% EAST-EAST-NORTH-EAST ARROWS
+% default length: 21100 units
+
+% \EENEAR{f}{g}{n} draws a east-east-north-east arrow with names f, g
+% and length n units
+\newcommand{\EENEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\line(3,1){#3}}%
+\put(\Y,\Z){\eenehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic east-east-north-east arrow
+\def\basiceenear[#1]{\EENEAR{}{}{#100}}%
+
+% east-east-north-east arrow
+\newcommand{\eenear}{\@ifnextchar[{\basiceenear}{\basiceenear[211]}}%
+
+% basic east-east-north-east arrow with upper name
+\def\basicEenear[#1]#2{\EENEAR{#2}{}{#100}}%
+
+% east-east-north-east arrow with upper name
+\newcommand{\Eenear}{\@ifnextchar[{\basicEenear}{\basicEenear[211]}}%
+
+% basic east-east-north-east arrow with lower name
+\def\basiceeneaR[#1]#2{\EENEAR{}{#2}{#100}}%
+
+% east-east-north-east arrow with lower name
+\newcommand{\eeneaR}{\@ifnextchar[{\basiceeneaR}{\basiceeneaR[211]}}%
+
+% EAST-EAST-SOUTH-EAST ARROWS
+% default length: 21100 units
+
+% \EESEAR{f}{g}{n} draws an east-east-south-east arrow with names f, g
+% and length n units
+\newcommand{\EESEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\line(3,-1){#3}}%
+\put(\Y,-\Z){\eesehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic east-east-south-east arrow
+\def\basiceesear[#1]{\EESEAR{}{}{#100}}%
+
+% east-east-south-east arrow
+\newcommand{\eesear}{\@ifnextchar[{\basiceesear}{\basiceesear[211]}}%
+
+% basic east-east-south-east arrow with upper name
+\def\basicEesear[#1]#2{\EESEAR{#2}{}{#100}}%
+
+% east-east-south-east arrow with upper name
+\newcommand{\Eesear}{\@ifnextchar[{\basicEesear}{\basicEesear[211]}}%
+
+% basic east-east-south-east arrow with lower name
+\def\basiceeseaR[#1]#2{\EESEAR{}{#2}{#100}}%
+
+% east-east-south-east arrow with lower name
+\newcommand{\eeseaR}{\@ifnextchar[{\basiceeseaR}{\basiceeseaR[211]}}%
+
+% WEST-WEST-NORTH-WEST ARROWs
+% default length: 21100 units
+
+% \WWNWAR{f}{g}{n} draws a west-west-north-west arrow with names f, g
+% and length n units
+\newcommand{\WWNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\line(-3,1){#3}}%
+\put(-\Y,\Z){\wwnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic west-west-north-west arrow
+\def\basicwwnwar[#1]{\WWNWAR{}{}{#100}}%
+
+% west-west-north-west arrow
+\newcommand{\wwnwar}{\@ifnextchar[{\basicwwnwar}{\basicwwnwar[211]}}%
+
+% basic west-west-north-west arrow with upper name
+\def\basicWwnwar[#1]#2{\WWNWAR{#2}{}{#100}}%
+
+% west-west-north-west arrow with upper name
+\newcommand{\Wwnwar}{\@ifnextchar[{\basicWwnwar}{\basicWwnwar[211]}}%
+
+% basic west-west-north-west arrow with lower name
+\def\basicwwnwaR[#1]#2{\WWNWAR{}{#2}{#100}}%
+
+% west-west-north-west arrow with lower name
+\newcommand{\wwnwaR}{\@ifnextchar[{\basicwwnwaR}{\basicwwnwaR[211]}}%
+
+% WEST-WEST-SOUTH-WEST ARROWS
+% default length: 21100 units
+
+% \WWSWAR{f}{g} draws a west-west-south-west arrow with names f, g
+\newcommand{\WWSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\line(-3,-1){#3}}%
+\put(-\Y,-\Z){\wwswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic west-west-south-west arrow
+\def\basicwwswar[#1]{\WWSWAR{}{}{#100}}%
+
+% west-west-south-west arrow
+\newcommand{\wwswar}{\@ifnextchar[{\basicwwswar}{\basicwwswar[211]}}%
+
+% basic west-west-south-west arrow with upper name
+\def\basicWwswar[#1]#2{\WWSWAR{#2}{}{#100}}%
+
+% west-west-south-west arrow with upper name
+\newcommand{\Wwswar}{\@ifnextchar[{\basicWwswar}{\basicWwswar[211]}}%
+
+% basic west-west-south-west arrow with lower name
+\def\basicwwswaR[#1]#2{\WWSWAR{}{#2}{#100}}%
+
+% west-west-south-west arrow with lower name
+\newcommand{\wwswaR}{\@ifnextchar[{\basicwwswaR}{\basicwwswaR[211]}}%
+
+
+% NORTH-NORTH-NORTH-EAST ARROWS
+% default length: 7100 units
+
+% \NNNEAR{f}{g}{n} draws a north-north-north-east arrow with names f, g
+% and length n units
+\newcommand{\NNNEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\multiply \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\line(1,3){#3}}%
+\put(\Y,\Z){\nnnehead}%
+\truex{100}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic north-north-north-east arrow
+\def\basicnnnear[#1]{\NNNEAR{}{}{#100}}%
+
+% north-north-north-east arrow
+\newcommand{\nnnear}{\@ifnextchar[{\basicnnnear}{\basicnnnear[71]}}%
+
+% basic north-north-north-east arrow with upper name
+\def\basicNnnear[#1]#2{\NNNEAR{#2}{}{#100}}%
+
+% north-north-north-east arrow with upper name
+\newcommand{\Nnnear}{\@ifnextchar[{\basicNnnear}{\basicNnnear[71]}}%
+
+% basic north-north-north-east arrow with lower name
+\def\basicnnneaR[#1]#2{\NNNEAR{}{#2}{#100}}%
+
+% north-north-north-east arrow with lower name
+\newcommand{\nnneaR}{\@ifnextchar[{\basicnnneaR}{\basicnnneaR[71]}}%
+
+% SOUTH-SOUTH-SOUTH-WEST ARROWS
+% default length: 7100 units
+
+% \SSSWAR{f}{g}{n} draws a south-south-south-west arrow with names f, g
+% and length n units
+\newcommand{\SSSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\multiply \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\line(-1,-3){#3}}%
+\put(-\Y,-\Z){\ssswhead}%
+\truex{100}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic south-south-south-west arrow
+\def\basicssswar[#1]{\SSSWAR{}{}{#100}}%
+
+% south-south-south-west arrow
+\newcommand{\ssswar}{\@ifnextchar[{\basicssswar}{\basicssswar[71]}}%
+
+% basic south-south-south-west arrow with upper name
+\def\basicSsswar[#1]#2{\SSSWAR{#2}{}{#100}}%
+
+% south-south-south-west arrow with upper name
+\newcommand{\Ssswar}{\@ifnextchar[{\basicSsswar}{\basicSsswar[71]}}%
+
+% basic south-south-south-west arrow with lower name
+\def\basicssswaR[#1]#2{\SSSWAR{}{#2}{#100}}%
+
+% south-south-south-west arrow with lower name
+\newcommand{\ssswaR}{\@ifnextchar[{\basicssswaR}{\basicssswaR[71]}}%
+
+% SOUTH-SOUTH-SOUTH-EAST ARROWS
+% default length: 7100 units
+
+% \SSSEAR{f}{g}{n} draws a south-south-south-east arrow with names f, g
+% and length n units
+\newcommand{\SSSEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\multiply \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\line(1,-3){#3}}%
+\put(\Y,-\Z){\sssehead}%
+\truex{200}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic south-south-south-east arrow
+\def\basicsssear[#1]{\SSSEAR{}{}{#100}}%
+
+% south-south-south-east arrow
+\newcommand{\sssear}{\@ifnextchar[{\basicsssear}{\basicsssear[71]}}%
+
+% basic south-south-south-east arrow with upper name
+\def\basicSssear[#1]#2{\SSSEAR{#2}{}{#100}}%
+
+% south-south-south-east arrow with upper name
+\newcommand{\Sssear}{\@ifnextchar[{\basicSssear}{\basicSssear[71]}}%
+
+% basic south-south-south-east arrow with lower name
+\def\basicssseaR[#1]#2{\SSSEAR{}{#2}{#100}}%
+
+% south-south-south-east arrow with lower name
+\newcommand{\ssseaR}{\@ifnextchar[{\basicssseaR}{\basicssseaR[71]}}%
+
+% NORTH-NORTH-NORTH-WEST ARROWS
+% default length: 7100 units
+
+% \NNNWAR{f}{g}{n} draws a north-north-north-west arrow with names f, g
+% and length n units
+\newcommand{\NNNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\multiply \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\line(-1,3){#3}}%
+\put(-\Y,\Z){\nnnwhead}%
+\truex{200}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic north-north-north-west arrow
+\def\basicnnnwar[#1]{\NNNWAR{}{}{#100}}%
+
+% north-north-north-west arrow
+\newcommand{\nnnwar}{\@ifnextchar[{\basicnnnwar}{\basicnnnwar[71]}}%
+
+% basic north-north-north-west arrow with upper name
+\def\basicNnnwar[#1]#2{\NNNWAR{#2}{}{#100}}%
+
+% north-north-north-west arrow with upper name
+\newcommand{\Nnnwar}{\@ifnextchar[{\basicNnnwar}{\basicNnnwar[71]}}%
+
+% basic north-north-north-west arrow with lower name
+\def\basicnnnwaR[#1]#2{\NNNWAR{}{#2}{#100}}%
+
+% north-north-north-west arrow with lower name
+\newcommand{\nnnwaR}{\@ifnextchar[{\basicnnnwaR}{\basicnnnwaR[71]}}%
+
+% NORTH-EAST-EAST-NORTH-EAST ARROWS
+% default length: 21500 units
+
+% \NEENEAR{f}{g}{n} draws a north-east-east-north-east arrow with names f, g
+% and length n units
+\newcommand{\NEENEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\line(3,2){#3}}%
+\put(\Y,\Z){\neenehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic north-east-east-north-east arrow
+\def\basicneenear[#1]{\NEENEAR{}{}{#100}}%
+
+% north-east-east-north-east arrow
+\newcommand{\neenear}{\@ifnextchar[{\basicneenear}{\basicneenear[215]}}%
+
+% basic north-east-east-north-east arrow with upper name
+\def\basicNeenear[#1]#2{\NEENEAR{#2}{}{#100}}%
+
+% north-east-east-north-east arrow with upper name
+\newcommand{\Neenear}{\@ifnextchar[{\basicNeenear}{\basicNeenear[215]}}%
+
+% basic north-east-east-north-east arrow with lower name
+\def\basicneeneaR[#1]#2{\NEENEAR{}{#2}{#100}}%
+
+% north-east-east-north-east arrow with lower name
+\newcommand{\neeneaR}{\@ifnextchar[{\basicneeneaR}{\basicneeneaR[215]}}%
+
+% SOUTH-EAST-EAST-SOUTH-EAST ARROWS
+% DEFAULT LENGTH: 21500 UNITS
+
+% \SEESEAR{f}{g} draws an sout-east-east-south-east arrow with names f, g
+% and length n units
+\newcommand{\SEESEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\line(3,-2){#3}}%
+\put(\Y,-\Z){\seesehead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic south-east-east-south-east arrow
+\def\basicseesear[#1]{\SEESEAR{}{}{#100}}%
+
+% south-east-east-south-east arrow
+\newcommand{\seesear}{\@ifnextchar[{\basicseesear}{\basicseesear[215]}}%
+
+% basic south-east-east-south-east arrow with upper name
+\def\basicSeesear[#1]#2{\SEESEAR{#2}{}{#100}}%
+
+% south-east-east-south-east arrow with upper name
+\newcommand{\Seesear}{\@ifnextchar[{\basicSeesear}{\basicSeesear[215]}}%
+
+% basic south-east-east-south-east arrow with lower name
+\def\basicseeseaR[#1]#2{\SEESEAR{}{#2}{#100}}%
+
+% south-east-east-south-east arrow with lower name
+\newcommand{\seeseaR}{\@ifnextchar[{\basicseeseaR}{\basicseeseaR[215]}}%
+
+% NORTH-WEST-NORTH-NORTH-WEST ARROWS
+% default length: 21500 units
+
+% \NWWNWAR{f}{g}{n} draws a north-west-west-north-west arrow with names f, g
+% and length n units
+\newcommand{\NWWNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\line(-3,2){#3}}%
+\put(-\Y,\Z){\nwwnwhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic north-west-west-north-west arrow
+\def\basicnwwnwar[#1]{\NWWNWAR{}{}{#100}}%
+
+% north-west-west-north-west arrow
+\newcommand{\nwwnwar}{\@ifnextchar[{\basicnwwnwar}{\basicnwwnwar[215]}}%
+
+% basic north-west-west-north-west arrow with upper name
+\def\basicNwwnwar[#1]#2{\NWWNWAR{#2}{}{#100}}%
+
+% north-west-west-north-west arrow with upper name
+\newcommand{\Nwwnwar}{\@ifnextchar[{\basicNwwnwar}{\basicNwwnwar[215]}}%
+
+% basic north-west-west-north-west arrow with lower name
+\def\basicnwwnwaR[#1]#2{\NWWNWAR{}{#2}{#100}}%
+
+% north-west-west-north-west arrow with lower name
+\newcommand{\nwwnwaR}{\@ifnextchar[{\basicnwwnwaR}{\basicnwwnwaR[215]}}%
+
+% SOUTH-WEST-WEST-SOUTH-WEST ARROWS
+% default length: 21500 units
+
+% \SWWSWAR{f}{g}{n} draws a south-west-west-south-west arrow with names f, g
+% and length n units
+\newcommand{\SWWSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\line(-3,-2){#3}}%
+\put(-\Y,-\Z){\swwswhead}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic south-west-west-south-west arrow
+\def\basicswwswar[#1]{\SWWSWAR{}{}{#100}}%
+
+% south-west-west-south-west arrow
+\newcommand{\swwswar}{\@ifnextchar[{\basicswwswar}{\basicswwswar[215]}}%
+
+% basic south-west-west-south-west arrow with upper name
+\def\basicSwwswar[#1]#2{\SWWSWAR{#2}{}{#100}}%
+
+% south-west-west-south-west arrow with upper name
+\newcommand{\Swwswar}{\@ifnextchar[{\basicSwwswar}{\basicSwwswar[215]}}%
+
+% basic south-west-west-south-west arrow with lower name
+\def\basicswwswaR[#1]#2{\SWWSWAR{}{#2}{#100}}%
+
+% south-west-west-south-west arrow with lower name
+\newcommand{\swwswaR}{\@ifnextchar[{\basicswwswaR}{\basicswwswaR[215]}}%
+
+
+% NORTH-EAST-NORTH-NORTH-EAST ARROWS
+% default length 14300 units
+
+% \NENNEAR{f}{g}{n} draws a north-east-north-north-east arrow with names f, g
+% and length n units
+\newcommand{\NENNEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\multiply \Z by 3%
+\divide \Z by 4%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\line(2,3){#3}}%
+\put(\Y,\Z){\nennehead}%
+\truex{100}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic north-east-north-north-east arrow
+\def\basicnennear[#1]{\NENNEAR{}{}{#100}}%
+
+% north-east-north-north-east arrow
+\newcommand{\nennear}{\@ifnextchar[{\basicnennear}{\basicnennear[143]}}%
+
+% basic north-east-north-north-east arrow with upper name
+\def\basicNennear[#1]#2{\NENNEAR{#2}{}{#100}}%
+
+% north-east-north-north-east arrow with upper name
+\newcommand{\Nennear}{\@ifnextchar[{\basicNennear}{\basicNennear[143]}}%
+
+% basic north-east-north-north-east arrow with lower name
+\def\basicnenneaR[#1]#2{\NENNEAR{}{#2}{#100}}%
+
+% north-east-north-north-east arrow with lower name
+\newcommand{\nenneaR}{\@ifnextchar[{\basicnenneaR}{\basicnenneaR[143]}}%
+
+% SOUTH-WEST-SOUTH-SOUTH-WEST ARROWS
+% default length: 14300 units
+
+% \SWSSWAR{f}{g}{n} draws a south-west-south-south-west arrow with names f, g
+% and length n units
+\newcommand{\SWSSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\multiply \Z by 3%
+\divide \Z by 4%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\line(-2,-3){#3}}%
+\put(-\Y,-\Z){\swsswhead}%
+\truex{100}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic south-west-south-south-west arrow
+\def\basicswsswar[#1]{\SWSSWAR{}{}{#100}}%
+
+% south-west-south-south-west arrow
+\newcommand{\swsswar}{\@ifnextchar[{\basicswsswar}{\basicswsswar[143]}}%
+
+% basic south-west-south-south-west arrow with upper name
+\def\basicSwsswar[#1]#2{\SWSSWAR{#2}{}{#100}}%
+
+% south-west-south-south-west arrow with upper name
+\newcommand{\Swsswar}{\@ifnextchar[{\basicSwsswar}{\basicSwsswar[143]}}%
+
+% basic south-west-south-south-west arrow with lower name
+\def\basicswsswaR[#1]#2{\SWSSWAR{}{#2}{#100}}%
+
+% south-west-south-south-west arrow with lower name
+\newcommand{\swsswaR}{\@ifnextchar[{\basicswsswaR}{\basicswsswaR[143]}}%
+
+% SOUT-EAST-SOUTH-SOUTH-EAST ARROWS
+% default length: 14300 units
+
+% \SESSEAR{f}{g}{n} draws a south-east-south-south-east arrow with names f, g
+% and length n units
+\newcommand{\SESSEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\multiply \Z by 3%
+\divide \Z by 4%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\line(2,-3){#3}}%
+\put(\Y,-\Z){\sessehead}%
+\truex{200}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic south-east-south-south-east arrow
+\def\basicsessear[#1]{\SESSEAR{}{}{#100}}%
+
+% south-east-south-south-east arrow
+\newcommand{\sessear}{\@ifnextchar[{\basicsessear}{\basicsessear[143]}}%
+
+% basic south-east-south-south-east arrow with upper name
+\def\basicSessear[#1]#2{\SESSEAR{#2}{}{#100}}%
+
+% south-east-south-south-east arrow with upper name
+\newcommand{\Sessear}{\@ifnextchar[{\basicSessear}{\basicSessear[143]}}%
+
+% basic south-east-south-south-east arrow with lower name
+\def\basicsesseaR[#1]#2{\SESSEAR{}{#2}{#100}}%
+
+% south-east-south-south-east arrow with lower name
+\newcommand{\sesseaR}{\@ifnextchar[{\basicsesseaR}{\basicsesseaR[143]}}%
+
+% NORTH-WEST-NORTH-NORTH-WEST ARROWS
+% default length: 14300 units
+
+% \NWNNWAR{f}{g}{n} draws a north-west-north-north-west arrow with names f, g
+% and length n units
+\newcommand{\NWNNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\multiply \Z by 3%
+\divide \Z by 4%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\line(-2,3){#3}}%
+\put(-\Y,\Z){\nwnnwhead}%
+\truex{200}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic north-west-north-north-west arrow
+\def\basicnwnnwar[#1]{\NWNNWAR{}{}{#100}}%
+
+% north-west-north-north-west arrow
+\newcommand{\nwnnwar}{\@ifnextchar[{\basicnwnnwar}{\basicnwnnwar[143]}}%
+
+% basic north-west-north-north-west arrow with upper name
+\def\basicNwnnwar[#1]#2{\NWNNWAR{#2}{}{#100}}%
+
+% north-west-north-north-west arrow with upper name
+\newcommand{\Nwnnwar}{\@ifnextchar[{\basicNwnnwar}{\basicNwnnwar[143]}}%
+
+% basic north-west-north-north-west arrow with lower name
+\def\basicnwnnwaR[#1]#2{\NWNNWAR{}{#2}{#100}}%
+
+% north-west-north-north-west arrow with lower name
+\newcommand{\nwnnwaR}{\@ifnextchar[{\basicnwnnwaR}{\basicnwnnwaR[143]}}%
+
+% HORIZONTAL CURVED ARROWS
+
+% The following commands produce horizontal curved arrows
+% default length: 160 units
+
+% North\East curved arrow with name [1] and length [2]x100 units
+\newcommand{\Necurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(0,\value{x}){\oval(#200,\value{y})[t]}%
+\put(0,\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
+\put(#200,0){\line(0,-1){\value{z}}}%
+\put(#200,-\value{z}){\shead}%
+\put(0,0){\line(0,-1){\value{z}}}\end{picture}}}%
+\truex{2500}%
+\put(0,\value{x}){\makebox(0,0)[b]{${#1}$}}%
+\end{picture}}%
+
+% basic north\east curved arrow
+\def\basicnecurvar[#1]{\Necurve{}{#1}}
+
+% north\east curved arrow
+\newcommand{\necurvar}{\@ifnextchar[{\basicnecurvar}{\basicnecurvar[160]}}%
+
+% basic north\east curved arrow with name
+\def\basicNecurvar[#1]#2{\Necurve{#2}{#1}}%
+
+% north\east curved arrow with name
+\newcommand{\Necurvar}{\@ifnextchar[{\basicNecurvar}{\basicNecurvar[160]}}%
+\let\necurvaR=\Necurvar
+
+% North\West curved arrow with name [1] and length [2]x100 units
+\newcommand{\Nwcurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(0,\value{x}){\oval(#200,\value{y})[t]}%
+\put(0,\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
+\put(#200,0){\line(0,-1){\value{z}}}%
+\put(0,0){\line(0,-1){\value{z}}}%
+\put(0,-\value{z}){\shead}%
+\end{picture}}}%
+\truex{2500}%
+\put(0,\value{x}){\makebox(0,0)[b]{${#1}$}}%
+\end{picture}}%
+
+% basic north\west curved arrow
+\def\basicnwcurvar[#1]{\Nwcurve{}{#1}}
+
+% north\west curved arrow
+\newcommand{\nwcurvar}{\@ifnextchar[{\basicnwcurvar}{\basicnwcurvar[160]}}%
+
+% basic north\west curved arrow with name
+\def\basicNwcurvar[#1]#2{\Nwcurve{#2}{#1}}%
+
+% north\west curved arrow with name
+\newcommand{\Nwcurvar}{\@ifnextchar[{\basicNwcurvar}{\basicNwcurvar[160]}}%
+\let\nwcurvaR=\Nwcurvar
+
+% South\East curved arrow with name [1] and length [2]x100 units
+\newcommand{\Securve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(0,-\value{x}){\oval(#200,\value{y})[b]}%
+\put(0,-\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
+\put(#200,0){\line(0,1){\value{z}}}%
+\put(0,0){\line(0,1){\value{z}}}%
+\put(#200,\value{z}){\nhead}%
+\end{picture}}}%
+\truex{2500}%
+\put(0,-\value{x}){\makebox(0,0)[t]{${#1}$}}%
+\end{picture}}%
+
+% basic south\east curved arrow
+\def\basicsecurvar[#1]{\Securve{}{#1}}
+
+% south\east curved arrow
+\newcommand{\securvar}{\@ifnextchar[{\basicsecurvar}{\basicsecurvar[160]}}%
+
+% basic south\east curved arrow with name
+\def\basicSecurvar[#1]#2{\Securve{#2}{#1}}%
+
+% south\east curved arrow with name
+\newcommand{\Securvar}{\@ifnextchar[{\basicSecurvar}{\basicSecurvar[160]}}%
+\let\securvaR=\Securvar
+
+% South\West curved arrow with name [1] and length [2]x100 units
+\newcommand{\Swcurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(0,-\value{x}){\oval(#200,\value{y})[b]}%
+\put(0,-\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
+\put(#200,0){\line(0,1){\value{z}}}%
+\put(0,0){\line(0,1){\value{z}}}%
+\put(0,\value{z}){\nhead}%
+\end{picture}}}%
+\truex{2500}%
+\put(0,-\value{x}){\makebox(0,0)[t]{${#1}$}}%
+\end{picture}}%
+
+% basic south\west curved arrow
+\def\basicswcurvar[#1]{\Swcurve{}{#1}}
+
+% south\west curved arrow
+\newcommand{\swcurvar}{\@ifnextchar[{\basicswcurvar}{\basicswcurvar[160]}}%
+
+% basic south\west curved arrow with name
+\def\basicSwcurvar[#1]#2{\Swcurve{#2}{#1}}%
+
+% south\west curved arrow with name
+\newcommand{\Swcurvar}{\@ifnextchar[{\basicSwcurvar}{\basicSwcurvar[160]}}%
+\let\swcurvaR=\Swcurvar
+
+% VERTICAL CURVED ARROWS
+
+% The following commands produce vertical curved arrows
+% default length: 160pt
+
+% East\South curved arrow with name [1] and length [2]x100 units
+\newcommand{\Escurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1400}\truey{2000}\truez{200}%
+\put(\value{x},0){\oval(\value{y},#200)[r]}%
+\put(\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
+\put(0,0){\line(-1,0){\value{z}}}%
+\put(0,#200){\line(-1,0){\value{z}}}%
+\put(-\value{z},0){\whead}%
+\end{picture}}}%
+\truex{2500}%
+\put(\value{x},0){\makebox(0,0)[l]{${#1}$}}%
+\end{picture}}%
+
+% basic east\south curved arrow
+\def\basicescurvar[#1]{\Escurve{}{#1}}
+
+% east\south curved arrow
+\newcommand{\escurvar}{\@ifnextchar[{\basicescurvar}{\basicescurvar[160]}}%
+
+% basic east\south curved arrow with name
+\def\basicEscurvar[#1]#2{\Escurve{#2}{#1}}%
+
+% east\south curved arrow with name
+\newcommand{\Escurvar}{\@ifnextchar[{\basicEscurvar}{\basicEscurvar[160]}}%
+\let\escurvaR=\Escurvar
+
+% East\North curved arrow with name [1] and length [2]x100 units
+\newcommand{\Encurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1400}\truey{2000}\truez{200}%
+\put(\value{x},0){\oval(\value{y},#200)[r]}%
+\put(\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
+\put(0,0){\line(-1,0){\value{z}}}%
+\put(0,#200){\line(-1,0){\value{z}}}%
+\put(-\value{z},#200){\whead}%
+\end{picture}}}%
+\truex{2500}%
+\put(\value{x},0){\makebox(0,0)[l]{${#1}$}}%
+\end{picture}}%
+
+% basic east\north curved arrow
+\def\basicencurvar[#1]{\Encurve{}{#1}}
+
+% east\north curved arrow
+\newcommand{\encurvar}{\@ifnextchar[{\basicencurvar}{\basicencurvar[160]}}%
+
+% basic east\north curved arrow with name
+\def\basicEncurvar[#1]#2{\Encurve{#2}{#1}}%
+
+% east\north curved arrow with name
+\newcommand{\Encurvar}{\@ifnextchar[{\basicEncurvar}{\basicEncurvar[160]}}%
+\let\encurvaR=\Encurvar
+
+% West\South curved arrow with name [1] and length [2]x100 units
+\newcommand{\Wscurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(-\value{x},0){\oval(\value{y},#200)[l]}%
+\put(-\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
+\put(0,0){\line(1,0){\value{z}}}%
+\put(0,#200){\line(1,0){\value{z}}}%
+\put(\value{z},0){\ehead}%
+\end{picture}}}%
+\truex{2400}%
+\put(-\value{x},0){\makebox(0,0)[r]{${#1}$}}%
+\end{picture}}%
+
+% basic west\south curved arrow
+\def\basicwscurvar[#1]{\Wscurve{}{#1}}
+
+% west\south curved arrow
+\newcommand{\wscurvar}{\@ifnextchar[{\basicwscurvar}{\basicwscurvar[160]}}%
+
+% basic west\south curved arrow with name
+\def\basicWscurvar[#1]#2{\Wscurve{#2}{#1}}%
+
+% west\south curved arrow with name
+\newcommand{\Wscurvar}{\@ifnextchar[{\basicWscurvar}{\basicWscurvar[160]}}%
+\let\wscurvaR=\Wscurvar
+
+% West\North curved arrow with name [1] and length [2]x100 units
+\newcommand{\Wncurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(-\value{x},0){\oval(\value{y},#200)[l]}%
+\put(-\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
+\put(0,0){\line(1,0){\value{z}}}%
+\put(\value{z},#200){\ehead}%
+\put(0,#200){\line(1,0){\value{z}}}%
+\end{picture}}}%
+\truex{2400}%
+\put(-\value{x},0){\makebox(0,0)[r]{${#1}$}}%
+\end{picture}}%
+
+% basic west\north curved arrow
+\def\basicwncurvar[#1]{\Wncurve{}{#1}}
+
+% west\north curved arrow
+\newcommand{\wncurvar}{\@ifnextchar[{\basicwncurvar}{\basicwncurvar[160]}}%
+
+% basic west\north curved arrow with name
+\def\basicWncurvar[#1]#2{\Wncurve{#2}{#1}}%
+
+% west\north curved arrow with name
+\newcommand{\Wncurvar}{\@ifnextchar[{\basicWncurvar}{\basicWncurvar[160]}}%
+\let\wncurvaR=\Wncurvar
+
+\catcode`\@=12
diff --git a/macros/generic/diagrams/borceux/diagram/MicroDiagram b/macros/generic/diagrams/borceux/diagram/MicroDiagram
new file mode 100644
index 0000000000..3ab5c4bd85
--- /dev/null
+++ b/macros/generic/diagrams/borceux/diagram/MicroDiagram
@@ -0,0 +1,1917 @@
+% DIAGRAM MACROS (version 3.1)
+% MICRO-DIAGRAM FILE
+% JUST PLAIN ARROWS
+% ARROWHEADS DESIGNED AS \vector
+
+\catcode`\@=11
+
+%%%%% FIXING SOME PARAMETERS
+
+%%% Fixing the default scaling factor for diagrams
+\newcount\defaultscale
+\def\setdefaultscale#1{\global\defaultscale=#1}
+\setdefaultscale{100}
+
+\newcount\actualtextarrowspace
+\newcount\actualtextarrowlength
+
+% \computetextparameters computes the parameters
+% required to design a text arrow
+\newcommand{\computetextparameters}%
+{\global\actualtextarrowspace=\textarrowlength%
+\global\advance\actualtextarrowspace by 3%
+\global\actualtextarrowlength=\textarrowlength%
+\global\multiply\actualtextarrowlength by 100}
+
+%%% Fixing the default length of text arrows
+\newcount\textarrowlength
+\def\settextarrowlength#1{\global\textarrowlength=#1%
+\computetextparameters}
+\settextarrowlength{20}
+
+\newcount\actualdisplayarrowspace
+\newcount\actualdisplayarrowlength
+
+% \computedisplayparameters computes the parameters
+% required to design a displayed arrow
+\newcommand{\computedisplayparameters}%
+{\global\actualdisplayarrowspace=\displayarrowlength%
+\global\advance\actualdisplayarrowspace by 3%
+\global\actualdisplayarrowlength=\displayarrowlength%
+\global\multiply\actualdisplayarrowlength by 100}
+
+%%% Fixing the default length of displayed arrows
+\newcount\displayarrowlength
+\def\setdisplayarrowlength#1{\global\displayarrowlength=#1%
+\computedisplayparameters}
+\setdisplayarrowlength{30}
+
+% ERROR MESSAGES
+
+% Checking the next token without gobbling blanks
+\def\@ifnexttok#1#2#3{\let\@tempe #1\def\@tempa{#2}\def\@tempb{#3}%
+\futurelet\@tempc\@ifntok}
+\def\@ifntok{\ifx \@tempc \@tempe\let\@tempd\@tempa\else\let\@tempd\@tempb\fi%
+\@tempd}
+
+% \@diagramerror{MSG}{HLP}: Types a Diagram error message MSG and gives an error
+% halt with error help message HLP.
+\def\@diagramerror#1#2{%
+\edef\@@tempc{#2}\expandafter\errhelp\expandafter{\@@tempc}%
+\typeout{Diagram error. \space See User's guide for explanation.^^J
+ \space\@spaces\@spaces\@spaces Type \space H <return> \space for
+ immediate help.}\errmessage{#1}}
+
+\newif\ifdiagram
+
+% error test and message for text arrows
+\def\testtextmode{%
+\ifdiagram\@diagramerror{Text arrows are not allowed in diagrams}{Here you
+should use east or west diagram arrows, not forward or backward text arrows.
+Try proceeding now, typeset could succeed but with unpredictable output.}
+\else\ifmmode\relax\else%
+\@diagramerror{Missing \string$}{Text arrows should be introduced in math mode.
+Try proceeding now, typeset could succeed but output could not be what you expected.}\fi\fi}
+
+% error test and message for diagram arrows
+\def\testdiagrammode{\ifdiagram\relax\else
+\@diagramerror{Diagram arrows are not allowed in formulas}{Here you
+should use forward or backward text arrows, not diagram arrows. Proceeding
+could work with unpredictable output, but overflow arithmetic
+could also occur.}\fi}
+
+% error test and message for diagrams in math mode
+\def\checkmode{\ifmmode\@diagramerror{Wrong mode: no diagrams
+allowed in math mode.}{You should leave math mode before
+introducing your diagram. All items in the diagram will automatically be
+processed in math mode.}\else\relax\fi\global\diagramtrue}
+
+\global\diagramfalse
+
+% INITIALIZATION
+
+\newcount\SCALE%
+
+\newcount\NUMBER%
+
+\newcount\LINE%
+
+\newcount\COLUMN%
+
+\newcount\WIDTH%
+
+\newcount\SOURCE%
+
+\newcount\ARROW%
+
+\newcount\TARGET%
+
+\newcount\ARROWLENGTH%
+
+\newcounter{x}%
+
+\newcounter{y}%
+
+\newcounter{z}%
+
+\newcounter{horizontal}%
+
+\newcounter{vertical}%
+
+\newskip\itemlength%
+
+\newskip\firstitem%
+
+\newskip\seconditem%
+
+\newcommand{\printarrow}{}%
+
+\newcount\Y%
+
+\newcount\Z%
+
+
+% MACROS FOR DESIGNING DIAGRAMS
+
+
+% \truex{n} divides n x 100 by the scaling factor and puts the result
+% in counter x
+\newcommand{\truex}[1]{%
+\NUMBER=#1%
+\multiply\NUMBER by 100%
+\divide\NUMBER by \SCALE%
+\setcounter{x}{\NUMBER}}%
+
+% \truey{n} divides n x 100 by the scaling factor and puts the result
+% in counter y
+\newcommand{\truey}[1]{%
+\NUMBER=#1%
+\multiply\NUMBER by 100%
+\divide\NUMBER by \SCALE%
+\setcounter{y}{\NUMBER}}%
+
+% \truez{n} divides n x 100 by the scaling factor and puts the result
+% in counter z
+\newcommand{\truez}[1]{%
+\NUMBER=#1%
+\multiply\NUMBER by 100%
+\divide\NUMBER by \SCALE%
+\setcounter{z}{\NUMBER}}%
+
+
+% \changecounters computes the values of the various parameters required
+% to design an arrow with adjusted length.
+\newcommand{\changecounters}[1]{%
+\SOURCE=\ARROW%
+\ARROW=\TARGET%
+\settowidth{\itemlength}{#1}%
+\ifdim \itemlength > 2800\unitlength%
+\addtolength{\itemlength}{-2800\unitlength}%
+\TARGET=\itemlength%
+\divide\TARGET by 1310%
+\multiply\TARGET by 100%
+\divide\TARGET by \SCALE%
+\else%
+\TARGET=0%
+\fi%
+\ARROWLENGTH=5000%
+\advance\ARROWLENGTH by -\SOURCE%
+\advance\ARROWLENGTH by -\TARGET%
+\divide\ARROWLENGTH by 100%
+\advance\SOURCE by -\TARGET}%
+
+% \initialize initializes the counters required to produce the diagram
+% and defines the formal dimensions of the diagram to be (0,0).
+\newcommand{\initialize}[1]{%
+\LINE=0%
+\COLUMN=0%
+\WIDTH=0%
+\ARROW=0%
+\TARGET=0%
+\changecounters{#1}%
+\renewcommand{\printarrow}{#1}%
+\begin{center}%
+\vspace{2pt}%
+\begin{picture}(0,0)}%
+
+% \DIAGV{n} starts the construction of a diagram scaled by a factor
+% n percent, computes the scaled unit length and the unscaling factor.
+\newcommand{\DIAGV}[2]{%
+\checkmode%
+\SCALE=#1%
+\setlength{\unitlength}{655sp}%
+\multiply\unitlength by \SCALE%
+\divide\unitlength by 100%
+\initialize{\mbox{$#2$}}}%
+
+% \n introduces the next item of the diagram, computes its parameters
+% and prints the previous item.
+\newcommand{\n}[1]{%
+\changecounters{\mbox{$#1$}}%
+\put(\COLUMN,\LINE){\makebox(0,0){\printarrow}}%
+\thinlines%
+\renewcommand{\printarrow}{\mbox{$#1$}}%
+\advance\COLUMN by 4000}%
+
+% \nn prints the last item of a line and starts a new line.
+\newcommand{\nn}[1]{%
+\put(\COLUMN,\LINE){\makebox(0,0){\printarrow}}%
+\thinlines%
+\ifnum \WIDTH < \COLUMN%
+\WIDTH=\COLUMN%
+\else%
+\fi%
+\advance\LINE by -4000%
+\COLUMN=0%
+\ARROW=0%
+\TARGET=0%
+\changecounters{\mbox{$#1$}}%
+\renewcommand{\printarrow}{\mbox{$#1$}}}%
+
+% \conclude prints the last item of the diagram and sets the
+% dimensions of the diagram;
+\newcommand{\conclude}{%
+\put(\COLUMN,\LINE){\makebox(0,0){\printarrow}}%
+\thinlines%
+\ifnum \WIDTH < \COLUMN%
+\WIDTH=\COLUMN%
+\else%
+\fi%
+\setcounter{horizontal}{\WIDTH}%
+\setcounter{vertical}{-\LINE}%
+\end{picture}}%
+
+% \diag prints the last item of the diagram and takes care of the spacing
+\newcommand{\diag}{%
+\conclude%
+\raisebox{0pt}[0pt][\value{vertical}\unitlength]{}%
+\hspace*{\value{horizontal}\unitlength}%
+\vspace{12pt}%
+\end{center}%
+\setlength{\unitlength}{1pt}%
+\global\diagramfalse}%
+
+% \diagv{t}{l}{b} prints the last item of the diagram and
+% adds a t points extra space at the top of the diagram
+% adds a l points extra space at the left of the diagram
+% adds a b points extra space at the bottom of the diagram
+\newcommand{\diagv}[3]{%
+\conclude%
+\NUMBER=#1%
+\rule{0pt}{\NUMBER pt}%
+\hspace*{-#2pt}%
+\raisebox{0pt}[0pt][\value{vertical}\unitlength]{}%
+\hspace*{\value{horizontal}\unitlength}%6
+\NUMBER=#3%
+\advance\NUMBER by 12%
+\vspace*{\NUMBER pt}%
+\end{center}%
+\setlength{\unitlength}{1pt}%
+\global\diagramfalse}%
+
+% \movename(n,m){f} moves the name f of the arrow n points right
+% and m points up.
+\def\movename(#1,#2)#3{%
+\hspace{#1pt}%
+\raisebox{#2pt}[5pt][2pt]{\raisebox{#2pt}{$#3$}}%
+\hspace{-#1pt}}%
+
+% \movearrow(n,m){\...} moves arrow \... n points right
+% and m points up.
+\def\movearrow(#1,#2)#3{%
+\makebox[0pt]{%
+\hspace{#1pt}\hspace{#1pt}%
+\raisebox{#2pt}[0pt][0pt]{\raisebox{#2pt}{$#3$}}}}%
+
+% \movevertex(n,m){A} moves vertex A n points right and m points up
+\def\movevertex(#1,#2)#3{%
+\mbox{\hspace{#1pt}%
+\raisebox{#2pt}{\raisebox{#2pt}{$#3$}}%
+\hspace{-#1pt}}}%
+
+% \movevertexleft{XXX} moves vertex XXX left
+\newcommand{\movevertexleft}[1]{\makebox[2800\unitlength][r]{$#1$}}
+
+% \movevertexright{XXX} moves vertex XXX right
+\newcommand{\movevertexright}[1]{\makebox[2800\unitlength][l]{$#1$}}
+
+% \crosslength{P}{Q} computes the formal dimensions of the
+% superposition of pictures P and Q
+\newcommand{\crosslength}[2]{%
+\settowidth{\firstitem}{#1}%
+\settowidth{\seconditem}{#2}%
+\ifdim\firstitem < \seconditem%
+\itemlength=\seconditem%
+\else%
+\itemlength=\firstitem%
+\fi%
+\divide\itemlength by 2%
+\hspace{\itemlength}}%
+
+% \cross{P}{Q} superposes pictures P and Q
+\newcommand{\cross}[2]{%
+\crosslength{\mbox{$#1$}}{\mbox{$#2$}}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0){$#1$}}%
+\thinlines%
+\put(0,0){\makebox(0,0){$#2$}}%
+\thinlines%
+\end{picture}%
+\crosslength{\mbox{$#1$}}{\mbox{$#2$}}}%
+
+% \bold prints the next arrow in bold-face type
+\newcommand{\bold}{\ifdiagram\thicklines\else\typeout{Sorry: command
+\string\bold does not apply to text arrows; I am ignoring it.}\fi}
+
+% \unbold switches back to normal arrows
+\newcommand{\unbold}{\thinlines}
+
+% SHORTENING THE TYPING OF DIAGRAMS
+
+\def\basicDIAG#1¤{\DIAGV{\defaultscale}{#1}\@ifnexttok¤{\finishline}{\basicn}}
+\def\basicDIAGV[#1]#2¤{\DIAGV{#1}{#2}\@ifnexttok¤{\finishline}{\basicn}}
+\def\basicn#1¤{\n{#1}\@ifnexttok¤{\finishline}{\basicn}}
+\def\basicnn#1¤{\nn{#1}\@ifnexttok¤{\finishline}{\basicn}}
+\def\finishline#1{\@ifnextchar\end{\diag}%
+{\@ifnextchar\spacing{\relax}{\basicnn}}}
+\def\spacing(#1,#2,#3){\diagv{#1}{#2}{#3}}
+
+\newif\ifcaption%
+
+\newenvironment{diagram}{%
+\iffloatdiag\relax\else
+\global\def\diagramcaption##1{%
+\global\captiontrue%
+\global\def\@diagcaption{##1}}%
+\global\def\@diagcaption{}\fi%
+\@ifnextchar[{\basicDIAGV}{\basicDIAG}}%
+{\iffloatdiag\relax\else%
+\ifcaption
+\begin{center}\mbox{}\@diagcaption\end{center}%
+\else\relax\fi\fi\global\captionfalse}
+
+\global\captionfalse
+
+
+% MACROS FOR FLOATING DIAGRAMS
+
+\gdef\@diaglabel{Diagram}
+\gdef\diagramlabel#1{\gdef\@diaglabel{#1}}
+
+\newcounter{Diagram}
+\setcounter{Diagram}{0}
+\def\theDiagram{\@arabic\c@Diagram}
+\def\fps@Diagram{tbp}
+\def\ftype@Diagram{1}
+\def\ext@Diagram{lof}
+\def\fnum@Diagram{\@diaglabel\ \theDiagram}
+\def\Diagram{\@float{Diagram}}
+\let\endDiagram\end@float
+\@namedef{Diagram*}{\@dblfloat{Diagram}}
+\@namedef{endDiagram*}{\end@dblfloat}
+
+\def\setdiagramcounter#1{\@addtoreset{Diagram}{#1}%
+\def\theDiagram{\arabic{#1}.\@arabic\c@Diagram}}
+
+\newif\iffloatdiag
+
+\newenvironment{floatingdiagram}{%
+\global\floatdiagtrue%
+\long\def\@makecaption##1##2{
+ \vskip 0pt
+ \setbox\@tempboxa\hbox{##1##2}
+ \ifdim \wd\@tempboxa >\hsize \unhbox\@tempboxa\par \else \hbox
+to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}%
+\global\def\diagramcaption##1{\global\def\@diagcaption{: ##1}}%
+\global\def\@diagcaption{}%
+\begin{Diagram}[tbp]\begin{diagram}}%
+{\end{diagram}\caption{\@diagcaption}\end{Diagram}%
+\global\floatdiagfalse}
+
+\global\floatdiagfalse
+
+% MACROS FOR DRAWING TEXT PICTURES
+
+% \tlowername{P}{f} puts the name f under the picture P
+\newcommand{\tlowername}[2]%
+{$\stackrel{\makebox[1pt]{#1}}%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,6)[t]{\makebox[1pt]{$\scriptstyle#2$}}}%
+\end{picture}}$}%
+
+% \tcase{P} draws the picture P with length \textarrowlength pt.
+\newcommand{\tcase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{2.5pt}{#1{\actualtextarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Tcase{P}{f} draws the picture P with upper name f
+% and length \textarrowlength pt.
+\newcommand{\Tcase}[2]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{2.5pt}{$\stackrel{\scriptstyle #2}{#1{\actualtextarrowlength}}$}}%
+\setlength{\unitlength}{1pt}}%
+
+% MACROS FOR DRAWING DISPLAYED PICTURES
+
+% \dlowername{P}{f} puts the name f under the picture P
+\newcommand{\dlowername}[2]%
+{$\stackrel{\makebox[1pt]{#1}}%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,6)[t]{\makebox[1pt]{$\textstyle#2$}}}%
+\end{picture}}$}%
+
+% \dcase{P} draws the picture P with length \displayarrowlength pt.
+\newcommand{\dcase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{2.5pt}{#1{\actualdisplayarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Dcase{P}{f} draws the picture P with upper name f
+% and length \displayarrowlength pt.
+\newcommand{\Dcase}[2]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{2.5pt}{$\stackrel{\textstyle #2}{#1{\actualdisplayarrowlength}}$}}%
+\setlength{\unitlength}{1pt}}%
+
+% IN-TEXT ARROWS
+
+% \AR{n} draws an arrow of length n units
+\newcommand{\AR}[1]%
+{\begin{picture}(#1,0)%
+\put(0,0){\vector(1,0){#1}}%
+\end{picture}}%
+
+% All the following commands produce arrows with length 20pt
+% and scriptstyle names in math mode but arrows with length
+% \displayarrowlength pt and textstyle names in display math mode.
+
+% arrow
+\newcommand{\ar}{\ifinner\tcase{\AR}\else\dcase{\AR}\fi}%
+
+% arrow with upper name [1]
+\newcommand{\Ar}[1]{\ifinner\Tcase{\AR}{#1}\else\Dcase{\AR}{#1}\fi}%
+
+% IN-TEXT BACK ARROWS
+
+% \BKAR{n} draws a pointing back arrow of length n units
+\newcommand{\BKAR}[1]%
+{\begin{picture}(#1,0)%
+\put(#1,0){\vector(-1,0){#1}}%
+\end{picture}}%
+
+% All the following commands produce back arrows with length 20pt
+% and scriptstyle names in math mode but arrows with length
+% \displayarrowlength and textstyle names in display math mode.
+
+% back arrow
+\newcommand{\bkar}{\ifinner\tcase{\BKAR}\else\dcase{\BKAR}\fi}%
+
+% back arrow with upper name [1]
+\newcommand{\Bkar}[1]{\ifinner\Tcase{\BKAR}{#1}\else\Dcase{\BKAR}{#1}\fi}%
+
+
+% MACROS FOR DRAWING HORIZONTAL PICTURES
+
+
+% \lowername{P}{f} puts the name f under the picture P
+\newcommand{\lowername}[2]%
+{$\stackrel{\makebox[1pt]{#1}}%
+{\begin{picture}(0,0)%
+\truex{600}%
+\put(0,0){\makebox(0,\value{x})[t]{\makebox[1pt]{$#2$}}}%
+\end{picture}}$}%
+
+% \hcase{P}{n} draws the picture P with length n units
+\newcommand{\hcase}[2]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{0pt}[0pt][0pt]{#1{#2}}}}%
+
+% \Hcase{P}{f}{n} draws the picture P with upper name f
+% and length n units.
+\newcommand{\Hcase}[3]%
+{\testdiagrammode\makebox[0pt]
+{\raisebox{0pt}[0pt][0pt]%
+{$\stackrel{\makebox[0pt]{$\textstyle{#2}$}}{#1{#3}}$}}}%
+
+% \hcasE{P}{f}{n} draws the picture P with lower name f
+% and length n units.
+\newcommand{\hcasE}[3]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{-8pt}[0pt][0pt]%
+{\lowername{#1{#3}}{#2}}}}%
+
+% EAST ARROWS
+
+% \EAR{n} draws an east arrow of length n units
+\newcommand{\EAR}[1]%
+{\begin{picture}(#1,0)%
+\put(0,0){\vector(1,0){#1}}%
+\end{picture}}%
+
+% All the following commands produce east arrows
+
+% basic east arrow
+\def\basicear[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EAR}{\Z}}%
+
+% east arrow
+\newcommand{\ear}{\@ifnextchar[{\basicear}%
+{\hspace{\SOURCE\unitlength}\basicear[\ARROWLENGTH]}}%
+
+% basic east arrow with upper name
+\def\basicEar[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EAR}{#2}{\Z}}%
+
+% east arrow with upper name
+\newcommand{\Ear}{\@ifnextchar[{\basicEar}%
+{\hspace{\SOURCE\unitlength}\basicEar[\ARROWLENGTH]}}%
+
+% basic east arrow with lower name
+\def\basiceaR[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EAR}{#2}{\Z}}%
+
+% east arrow with lower name
+\newcommand{\eaR}{\@ifnextchar[{\basiceaR}%
+{\hspace{\SOURCE\unitlength}\basiceaR[\ARROWLENGTH]}}%
+
+% WEST ARROWS
+
+% \WAR{n} draws a pointing back arrow of length n units
+\newcommand{\WAR}[1]%
+{\begin{picture}(#1,0)%
+\put(#1,0){\vector(-1,0){#1}}%
+\end{picture}}%
+
+% All the following commands produce west arrows
+
+% basic west arrow
+\def\basicwar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WAR}{\Z}}%
+
+% west arrow
+\newcommand{\war}{\@ifnextchar[{\basicwar}%
+{\hspace{\SOURCE\unitlength}\basicwar[\ARROWLENGTH]}}%
+
+% basic west arrow with upper name
+\def\basicWar[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WAR}{#2}{\Z}}%
+
+% west arrow with upper name
+\newcommand{\War}{\@ifnextchar[{\basicWar}%
+{\hspace{\SOURCE\unitlength}\basicWar[\ARROWLENGTH]}}%
+
+% basic west arrow with lower name
+\def\basicwaR[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WAR}{#2}{\Z}}%
+
+% west arrow with lower name
+\newcommand{\waR}{\@ifnextchar[{\basicwaR}%
+{\hspace{\SOURCE\unitlength}\basicwaR[\ARROWLENGTH]}}%
+
+% MACROS FOR DRAWING VERTICAL PICTURES
+
+% \vcase{P}{n} draws the vertical picture P with length n units.
+\newcommand{\vcase}[2]{\testdiagrammode#1{#2}}%
+
+% \Vcase{P}{f}{n} draws the vertical picture P
+% with left name f and length n units.
+\newcommand{\Vcase}[3]{\testdiagrammode\makebox[0pt]%
+{\makebox[0pt][r]{\raisebox{0pt}[0pt][0pt]{${#2}\hspace{2pt}$}}}#1{#3}}%
+
+% \vcasE{P}{f}{n} draws the vertical picture P
+% with right name f and length n units.
+\newcommand{\vcasE}[3]{\testdiagrammode\makebox[0pt]%
+{#1{#3}\makebox[0pt][l]{\raisebox{0pt}[0pt][0pt]{\hspace{2pt}$#2$}}}}%
+
+% SOUTH ARROWS
+
+% \SAR{n} draws a south arrow of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SAR}[1]%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,#1){\vector(0,-1){#1}}%
+\end{picture}}}\end{picture}}%
+
+% All the following commands produce south arrows
+
+% basic south arrow
+\def\basicsar[#1]{\vcase{\SAR}{#100}}%
+
+% south arrow
+\newcommand{\sar}{\@ifnextchar[{\basicsar}{\basicsar[50]}}%
+
+% basic south arrow with left name
+\def\basicSar[#1]#2{\Vcase{\SAR}{#2}{#100}}%
+
+% south arrow with left name
+\newcommand{\Sar}{\@ifnextchar[{\basicSar}{\basicSar[50]}}%
+
+% basic south arrow with right name
+\def\basicsaR[#1]#2{\vcasE{\SAR}{#2}{#100}}%
+
+% south arrow with right name
+\newcommand{\saR}{\@ifnextchar[{\basicsaR}{\basicsaR[50]}}%
+
+% NORTH ARROWS
+
+% \NAR{n} draws a north arrow of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NAR}[1]%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,0){\vector(0,1){#1}}%
+\end{picture}}}\end{picture}}%
+
+% All the following commands produce north arrows
+
+% basic north arrow
+\def\basicnar[#1]{\vcase{\NAR}{#100}}%
+
+% north arrow
+\newcommand{\nar}{\@ifnextchar[{\basicnar}{\basicnar[50]}}%
+
+% basic north arrow with left name
+\def\basicNar[#1]#2{\Vcase{\NAR}{#2}{#100}}%
+
+% north arrow with left name
+\newcommand{\Nar}{\@ifnextchar[{\basicNar}{\basicNar[50]}}%
+
+% basic north arrow with right name
+\def\basicnaR[#1]#2{\vcasE{\NAR}{#2}{#100}}%
+
+% north arrow with right name
+\newcommand{\naR}{\@ifnextchar[{\basicnaR}{\basicnaR[50]}}%
+
+% MACROS FOR FIRST DIAGONAL PICTURES
+
+% \fdcase{P}{f}{g}{n} draws the picture P with names f, g
+% and length n units
+\newcommand{\fdcase}[4]{\testdiagrammode\begin{picture}(0,0)%
+\put(0,0){#1{#4}}%
+\truex{200}\truey{600}\truez{600}%
+\put(-\value{x},-\value{x}){\makebox(0,\value{z})[r]{${#2}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#3}$}}%
+\end{picture}}%
+
+% NORTH-EAST ARROWS
+
+% \NEAR{n} draws a north-east arrow of length nx100 units
+\newcommand{\NEAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\vector(1,1){#1}}%
+\end{picture}}%
+
+% All the following commands draw north-east arrows
+
+% north-east arrow of length nx100 units
+\def\basicnear[#1]{\fdcase{\NEAR}{}{}{#100}}%
+
+% north-east arrow
+\newcommand{\near}{\@ifnextchar[{\basicnear}{\basicnear[59]}}%
+
+% north-east arrow with upper name [1] and length nx100 units
+\def\basicNear[#1]#2{\fdcase{\NEAR}{#2}{}{#100}}%
+
+% north-east arrow with upper name
+\newcommand{\Near}{\@ifnextchar[{\basicNear}{\basicNear[59]}}%
+
+% north-east arrow with lower name [1] and length nx100 units
+\def\basicneaR[#1]#2{\fdcase{\NEAR}{}{#2}{#100}}%
+
+% north-east arrow with lower name [1]
+\newcommand{\neaR}{\@ifnextchar[{\basicneaR}{\basicneaR[59]}}%
+
+% SOUT-WEST ARROWS
+
+% \SWAR{n} draws a south-west arrow of length nx100 units
+\newcommand{\SWAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\vector(-1,-1){#1}}%
+\end{picture}}%
+
+% All the following commands draw south-west arrows
+
+% south-west arrow of length nx100 units
+\def\basicswar[#1]{\fdcase{\SWAR}{}{}{#100}}%
+
+% south-west arrow
+\newcommand{\swar}{\@ifnextchar[{\basicswar}{\basicswar[59]}}%
+
+% south-west arrow with upper name [1] and length nx100 units
+\def\basicSwar[#1]#2{\fdcase{\SWAR}{#2}{}{#100}}%
+
+% south-west arrow with upper name
+\newcommand{\Swar}{\@ifnextchar[{\basicSwar}{\basicSwar[59]}}%
+
+% south-west arrow with lower name [1] and length nx100 units
+\def\basicswaR[#1]#2{\fdcase{\SWAR}{}{#2}{#100}}%
+
+% south-west arrow with lower name [1]
+\newcommand{\swaR}{\@ifnextchar[{\basicswaR}{\basicswaR[59]}}%
+
+% MACROS FOR SECOND DIAGONAL PICTURES
+
+% \sdcase{P}{f}{g}{n} draws the picture P with names f, g
+% and length n units
+\newcommand{\sdcase}[4]{\testdiagrammode\begin{picture}(0,0)%
+\put(0,0){#1{#4}}%
+\truex{100}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#2}$}}%
+\truex{300}\truey{800}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#3}$}}%
+\end{picture}}%
+
+% SOUTH-EAST ARROWS
+
+% \SEAR{n} draws a south-east arrow of length nx100 units
+\newcommand{\SEAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\vector(1,-1){#1}}%
+\end{picture}}%
+
+% All the following commands draw south-east arrows
+
+% south-east arrow of length nx100 units
+\def\basicsear[#1]{\sdcase{\SEAR}{}{}{#100}}%
+
+% south-east arrow
+\newcommand{\sear}{\@ifnextchar[{\basicsear}{\basicsear[59]}}%
+
+% south-east arrow with upper name [1] and length nx100 units
+\def\basicSear[#1]#2{\sdcase{\SEAR}{#2}{}{#100}}%
+
+% south-east arrow with upper name
+\newcommand{\Sear}{\@ifnextchar[{\basicSear}{\basicSear[59]}}%
+
+% south-east arrow with lower name [1] and length nx100 units
+\def\basicseaR[#1]#2{\sdcase{\SEAR}{}{#2}{#100}}%
+
+% south-east arrow with lower name [1]
+\newcommand{\seaR}{\@ifnextchar[{\basicseaR}{\basicseaR[59]}}%
+
+% NORTH-WEST ARROWS
+
+% \NWAR{n} draws a north-west arrow of length nx100 units
+\newcommand{\NWAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\vector(-1,1){#1}}%
+\end{picture}}%
+
+% All the following commands draw north-west arrows
+
+% north-west arrow of length nx100 units
+\def\basicnwar[#1]{\sdcase{\NWAR}{}{}{#100}}%
+
+% north-west arrow
+\newcommand{\nwar}{\@ifnextchar[{\basicnwar}{\basicnwar[59]}}%
+
+% north-west arrow with upper name [1] and length nx100 units
+\def\basicNwar[#1]#2{\sdcase{\NWAR}{#2}{}{#100}}%
+
+% north-west arrow with upper name
+\newcommand{\Nwar}{\@ifnextchar[{\basicNwar}{\basicNwar[59]}}%
+
+% north-west arrow with lower name [1] and length nx100 units
+\def\basicnwaR[#1]#2{\sdcase{\NWAR}{}{#2}{#100}}%
+
+% north-west arrow with lower name [1]
+\newcommand{\nwaR}{\@ifnextchar[{\basicnwaR}{\basicnwaR[59]}}%
+
+% EAST-NORTH-EAST ARROWS
+
+% The following commands produce east-north-east arrows
+% of horizontal extent n units
+
+% \ENEAR{f}{g}{n} draws a east-north-east arrow with names f, g
+% and length n units
+\newcommand{\ENEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\vector(2,1){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce east-north-east arrows;
+% the default length is 13300 units
+
+% basic east-north-east arrow
+\def\basicenear[#1]{\ENEAR{}{}{#100}}%
+
+% east-north-east arrow
+\newcommand{\enear}{\@ifnextchar[{\basicenear}{\basicenear[133]}}%
+
+% basic east-north-east arrow with upper name
+\def\basicWnear[#1]#2{\ENEAR{#2}{}{#100}}%
+
+% east-north-east arrow with upper name
+\newcommand{\Enear}{\@ifnextchar[{\basicEnear}{\basicEnear[133]}}%
+
+% basic east-north-east arrow with lower name
+\def\basiceneaR[#1]#2{\ENEAR{}{#2}{#100}}%
+
+% east-north-east arrow with lower name
+\newcommand{\eneaR}{\@ifnextchar[{\basiceneaR}{\basiceneaR[133]}}%
+
+
+% EAST-SOUTH-EAST ARROWS
+
+% The following commands produce east-south-east arrows
+% of horizontal extent n units
+
+% \ESEAR{f}{g}{n} draws a east-south-east arrow with names f, g
+% and length n units
+\newcommand{\ESEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\vector(2,-1){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce east-south-east arrows;
+% the default length is 13300 units
+
+% basic east-south-east arrow
+\def\basicesear[#1]{\ESEAR{}{}{#100}}%
+
+% east-south-east arrow
+\newcommand{\esear}{\@ifnextchar[{\basicesear}{\basicesear[133]}}%
+
+% basic east-south-east arrow with upper name
+\def\basicEsear[#1]#2{\ESEAR{#2}{}{#100}}%
+
+% east-south-east arrow with upper name
+\newcommand{\Esear}{\@ifnextchar[{\basicEsear}{\basicEsear[133]}}%
+
+% basic east-south-east arrow with lower name
+\def\basiceseaR[#1]#2{\ESEAR{}{#2}{#100}}%
+
+% east-south-east arrow with lower name
+\newcommand{\eseaR}{\@ifnextchar[{\basiceseaR}{\basiceseaR[133]}}%
+
+% WEST-SOUTH-WEST ARROWS
+
+% The following commands produce west-south-west arrows
+% of horizontal extent n units
+
+% \WSWAR{f}{g}{n} draws a west-south-west arrow with names f, g
+% and length n units
+\newcommand{\WSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\vector(-2,-1){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce west-south-west arrows;
+% the default length is 13300 units
+
+% basic west-south-west arrow
+\def\basicwswar[#1]{\WSWAR{}{}{#100}}%
+
+% west-south-west arrow
+\newcommand{\wswar}{\@ifnextchar[{\basicwswar}{\basicwswar[133]}}%
+
+% basic west-south-west arrow with upper name
+\def\basicWswar[#1]#2{\WSWAR{#2}{}{#100}}%
+
+% west-south-west arrow with upper name
+\newcommand{\Wswar}{\@ifnextchar[{\basicWswar}{\basicWswar[133]}}%
+
+% basic west-south-west arrow with lower name
+\def\basicwswaR[#1]#2{\WSWAR{}{#2}{#100}}%
+
+% west-south-west arrow with lower name
+\newcommand{\wswaR}{\@ifnextchar[{\basicwswaR}{\basicwswaR[133]}}%
+
+% WEST-NORTH-WEST ARROWS
+
+% The following commands produce west-north-west arrows
+% of horizontal extent n units
+
+% \WNWAR{f}{g}{n} draws a west-north-west arrow with names f, g
+% and length n units
+\newcommand{\WNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\vector(-2,1){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce west-north-west arrows;
+% the default length is 13300 units
+
+% basic west-north-west arrow
+\def\basicwnwar[#1]{\WNWAR{}{}{#100}}%
+
+% west-north-west arrow
+\newcommand{\wnwar}{\@ifnextchar[{\basicwnwar}{\basicwnwar[133]}}%
+
+% basic west-north-west arrow with upper name
+\def\basicWnwar[#1]#2{\WNWAR{#2}{}{#100}}%
+
+% west-north-west arrow with upper name
+\newcommand{\Wnwar}{\@ifnextchar[{\basicWnwar}{\basicWnwar[133]}}%
+
+% basic west-north-west arrow with lower name
+\def\basicwnwaR[#1]#2{\WNWAR{}{#2}{#100}}%
+
+% west-north-west arrow with lower name
+\newcommand{\wnwaR}{\@ifnextchar[{\basicwnwaR}{\basicwnwaR[133]}}%
+
+% NORTH-NORTH-EAST ARROWS
+
+% The following commands produce north-north-east arrows
+% of horizontal extent n units
+
+% \NNEAR{f}{g}{n} draws a north-north-east arrow with names f, g
+% and length n units
+\newcommand{\NNEAR}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,-#3){\vector(1,2){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce north-north-east arrows;
+% the default length is 6700 units
+
+% basic north-north-east arrow
+\def\basicnnear[#1]{\NNEAR{}{}{#100}}%
+
+% north-north-east arrow
+\newcommand{\nnear}{\@ifnextchar[{\basicnnear}{\basicnnear[67]}}%
+
+% basic north-north-east arrow with upper name
+\def\basicNnear[#1]#2{\NNEAR{#2}{}{#100}}%
+
+% north-north-east arrow with upper name
+\newcommand{\Nnear}{\@ifnextchar[{\basicNnear}{\basicNnear[67]}}%
+
+% basic north-north-east arrow with lower name
+\def\basicnneaR[#1]#2{\NNEAR{}{#2}{#100}}%
+
+% north-north-east arrow with lower name
+\newcommand{\nneaR}{\@ifnextchar[{\basicnneaR}{\basicnneaR[67]}}%
+
+
+% SOUTH-SOUTH-EAST ARROWS
+
+% The following commands produce south-south-east arrows
+% of horizontal extent n units
+
+% \SSEAR{f}{g}{n} draws a south-south-east arrow with names f, g
+% and length n units
+\newcommand{\SSEAR}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,#3){\vector(1,-2){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce south-south-east arrows;
+% the default length is 6700 units
+
+% basic south-south-east arrow
+\def\basicssear[#1]{\SSEAR{}{}{#100}}%
+
+% south-south-east arrow
+\newcommand{\ssear}{\@ifnextchar[{\basicssear}{\basicssear[67]}}%
+
+% basic south-south-east arrow with upper name
+\def\basicSsear[#1]#2{\SSEAR{#2}{}{#100}}%
+
+% south-south-east arrow with upper name
+\newcommand{\Ssear}{\@ifnextchar[{\basicSsear}{\basicSsear[67]}}%
+
+% basic south-south-east arrow with lower name
+\def\basicsseaR[#1]#2{\SSEAR{}{#2}{#100}}%
+
+% south-south-east arrow with lower name
+\newcommand{\sseaR}{\@ifnextchar[{\basicsseaR}{\basicsseaR[67]}}%
+
+% SOUTH-SOUTH-WEST ARROWS
+
+% The following commands produce south-south-west arrows
+% of horizontal extent n units
+
+% \SSWAR{f}{g}{n} draws a south-south-west arrow with names f, g
+% and length n units
+\newcommand{\SSWAR}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Z,#3){\vector(-1,-2){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce south-south-west arrows;
+% the default length is 6700 units
+
+% basic south-south-west arrow
+\def\basicsswar[#1]{\SSWAR{}{}{#100}}%
+
+% south-south-west arrow
+\newcommand{\sswar}{\@ifnextchar[{\basicsswar}{\basicsswar[67]}}%
+
+% basic south-south-west arrow with upper name
+\def\basicSswar[#1]#2{\SSWAR{#2}{}{#100}}%
+
+% south-south-west arrow with upper name
+\newcommand{\Sswar}{\@ifnextchar[{\basicSswar}{\basicSswar[67]}}%
+
+% basic south-south-west arrow with lower name
+\def\basicsswaR[#1]#2{\SSWAR{}{#2}{#100}}%
+
+% south-south-west arrow with lower name
+\newcommand{\sswaR}{\@ifnextchar[{\basicsswaR}{\basicsswaR[67]}}%
+
+% NORTH-NORTH-WEST ARROWS
+
+% The following commands produce north-north-west arrows
+% of horizontal extent n units
+
+% \NNWAR{f}{g}{n} draws a north-north-west arrow with names f, g
+% and length n units
+\newcommand{\NNWAR}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Z,-#3){\vector(-1,2){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce north-north-west arrows;
+% the default length is 6700 units
+
+% basic north-north-west arrow
+\def\basicnnwar[#1]{\NNWAR{}{}{#100}}%
+
+% north-north-west arrow
+\newcommand{\nnwar}{\@ifnextchar[{\basicnnwar}{\basicnnwar[67]}}%
+
+% basic north-north-west arrow with upper name
+\def\basicNnwar[#1]#2{\NNWAR{#2}{}{#100}}%
+
+% north-north-west arrow with upper name
+\newcommand{\Nnwar}{\@ifnextchar[{\basicNnwar}{\basicNnwar[67]}}%
+
+% basic north-north-west arrow with lower name
+\def\basicnnwaR[#1]#2{\NNWAR{}{#2}{#100}}%
+
+% north-north-west arrow with lower name
+\newcommand{\nnwaR}{\@ifnextchar[{\basicnnwaR}{\basicnnwaR[67]}}%
+
+% EAST-EAST-NORTH-EAST ARROWS
+% default length: 21100 units
+
+% \EENEAR{f}{g}{n} draws a east-east-north-east arrow with names f, g
+% and length n units
+\newcommand{\EENEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\vector(3,1){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic east-east-north-east arrow
+\def\basiceenear[#1]{\EENEAR{}{}{#100}}%
+
+% east-east-north-east arrow
+\newcommand{\eenear}{\@ifnextchar[{\basiceenear}{\basiceenear[211]}}%
+
+% basic east-east-north-east arrow with upper name
+\def\basicEenear[#1]#2{\EENEAR{#2}{}{#100}}%
+
+% east-east-north-east arrow with upper name
+\newcommand{\Eenear}{\@ifnextchar[{\basicEenear}{\basicEenear[211]}}%
+
+% basic east-east-north-east arrow with lower name
+\def\basiceeneaR[#1]#2{\EENEAR{}{#2}{#100}}%
+
+% east-east-north-east arrow with lower name
+\newcommand{\eeneaR}{\@ifnextchar[{\basiceeneaR}{\basiceeneaR[211]}}%
+
+% EAST-EAST-SOUTH-EAST ARROWS
+% default length: 21100 units
+
+% \EESEAR{f}{g}{n} draws an east-east-south-east arrow with names f, g
+% and length n units
+\newcommand{\EESEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\vector(3,-1){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic east-east-south-east arrow
+\def\basiceesear[#1]{\EESEAR{}{}{#100}}%
+
+% east-east-south-east arrow
+\newcommand{\eesear}{\@ifnextchar[{\basiceesear}{\basiceesear[211]}}%
+
+% basic east-east-south-east arrow with upper name
+\def\basicEesear[#1]#2{\EESEAR{#2}{}{#100}}%
+
+% east-east-south-east arrow with upper name
+\newcommand{\Eesear}{\@ifnextchar[{\basicEesear}{\basicEesear[211]}}%
+
+% basic east-east-south-east arrow with lower name
+\def\basiceeseaR[#1]#2{\EESEAR{}{#2}{#100}}%
+
+% east-east-south-east arrow with lower name
+\newcommand{\eeseaR}{\@ifnextchar[{\basiceeseaR}{\basiceeseaR[211]}}%
+
+% WEST-WEST-NORTH-WEST ARROWS
+% default length: 21100 units
+
+% \WWNWAR{f}{g}{n} draws a west-west-north-west arrow with names f, g
+% and length n units
+\newcommand{\WWNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\vector(-3,1){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic west-west-north-west arrow
+\def\basicwwnwar[#1]{\WWNWAR{}{}{#100}}%
+
+% west-west-north-west arrow
+\newcommand{\wwnwar}{\@ifnextchar[{\basicwwnwar}{\basicwwnwar[211]}}%
+
+% basic west-west-north-west arrow with upper name
+\def\basicWwnwar[#1]#2{\WWNWAR{#2}{}{#100}}%
+
+% west-west-north-west arrow with upper name
+\newcommand{\Wwnwar}{\@ifnextchar[{\basicWwnwar}{\basicWwnwar[211]}}%
+
+% basic west-west-north-west arrow with lower name
+\def\basicwwnwaR[#1]#2{\WWNWAR{}{#2}{#100}}%
+
+% west-west-north-west arrow with lower name
+\newcommand{\wwnwaR}{\@ifnextchar[{\basicwwnwaR}{\basicwwnwaR[211]}}%
+
+% WEST-WEST-SOUTH-WEST ARROWS
+% default length: 21100 units
+
+% \WWSWAR{f}{g} draws a west-west-south-west arrow with names f, g
+\newcommand{\WWSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\vector(-3,-1){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic west-west-south-west arrow
+\def\basicwwswar[#1]{\WWSWAR{}{}{#100}}%
+
+% west-west-south-west arrow
+\newcommand{\wwswar}{\@ifnextchar[{\basicwwswar}{\basicwwswar[211]}}%
+
+% basic west-west-south-west arrow with upper name
+\def\basicWwswar[#1]#2{\WWSWAR{#2}{}{#100}}%
+
+% west-west-south-west arrow with upper name
+\newcommand{\Wwswar}{\@ifnextchar[{\basicWwswar}{\basicWwswar[211]}}%
+
+% basic west-west-south-west arrow with lower name
+\def\basicwwswaR[#1]#2{\WWSWAR{}{#2}{#100}}%
+
+% west-west-south-west arrow with lower name
+\newcommand{\wwswaR}{\@ifnextchar[{\basicwwswaR}{\basicwwswaR[211]}}%
+
+
+% NORTH-NORTH-NORTH-EAST ARROWS
+% default length: 7100 units
+
+% \NNNEAR{f}{g}{n} draws a north-north-north-east arrow with names f, g
+% and length n units
+\newcommand{\NNNEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\multiply \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\vector(1,3){#3}}%
+\truex{100}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic north-north-north-east arrow
+\def\basicnnnear[#1]{\NNNEAR{}{}{#100}}%
+
+% north-north-north-east arrow
+\newcommand{\nnnear}{\@ifnextchar[{\basicnnnear}{\basicnnnear[71]}}%
+
+% basic north-north-north-east arrow with upper name
+\def\basicNnnear[#1]#2{\NNNEAR{#2}{}{#100}}%
+
+% north-north-north-east arrow with upper name
+\newcommand{\Nnnear}{\@ifnextchar[{\basicNnnear}{\basicNnnear[71]}}%
+
+% basic north-north-north-east arrow with lower name
+\def\basicnnneaR[#1]#2{\NNNEAR{}{#2}{#100}}%
+
+% north-north-north-east arrow with lower name
+\newcommand{\nnneaR}{\@ifnextchar[{\basicnnneaR}{\basicnnneaR[71]}}%
+
+% SOUTH-SOUTH-SOUTH-WEST ARROWS
+% default length: 7100 units
+
+% \SSSWAR{f}{g}{n} draws a south-south-south-west arrow with names f, g
+% and length n units
+\newcommand{\SSSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\multiply \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\vector(-1,-3){#3}}%
+\truex{100}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic south-south-south-west arrow
+\def\basicssswar[#1]{\SSSWAR{}{}{#100}}%
+
+% south-south-south-west arrow
+\newcommand{\ssswar}{\@ifnextchar[{\basicssswar}{\basicssswar[71]}}%
+
+% basic south-south-south-west arrow with upper name
+\def\basicSsswar[#1]#2{\SSSWAR{#2}{}{#100}}%
+
+% south-south-south-west arrow with upper name
+\newcommand{\Ssswar}{\@ifnextchar[{\basicSsswar}{\basicSsswar[71]}}%
+
+% basic south-south-south-west arrow with lower name
+\def\basicssswaR[#1]#2{\SSSWAR{}{#2}{#100}}%
+
+% south-south-south-west arrow with lower name
+\newcommand{\ssswaR}{\@ifnextchar[{\basicssswaR}{\basicssswaR[71]}}%
+
+% SOUTH-SOUTH-SOUTH-EAST ARROWS
+% default length: 7100 units
+
+% \SSSEAR{f}{g}{n} draws a south-south-south-east arrow with names f, g
+% and length n units
+\newcommand{\SSSEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\multiply \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\vector(1,-3){#3}}%
+\truex{200}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic south-south-south-east arrow
+\def\basicsssear[#1]{\SSSEAR{}{}{#100}}%
+
+% south-south-south-east arrow
+\newcommand{\sssear}{\@ifnextchar[{\basicsssear}{\basicsssear[71]}}%
+
+% basic south-south-south-east arrow with upper name
+\def\basicSssear[#1]#2{\SSSEAR{#2}{}{#100}}%
+
+% south-south-south-east arrow with upper name
+\newcommand{\Sssear}{\@ifnextchar[{\basicSssear}{\basicSssear[71]}}%
+
+% basic south-south-south-east arrow with lower name
+\def\basicssseaR[#1]#2{\SSSEAR{}{#2}{#100}}%
+
+% south-south-south-east arrow with lower name
+\newcommand{\ssseaR}{\@ifnextchar[{\basicssseaR}{\basicssseaR[71]}}%
+
+% NORTH-NORTH-NORTH-WEST ARROWS
+% default length: 7100 units
+
+% \NNNWAR{f}{g}{n} draws a north-north-north-west arrow with names f, g
+% and length n units
+\newcommand{\NNNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\multiply \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\vector(-1,3){#3}}%
+\truex{200}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic north-north-north-west arrow
+\def\basicnnnwar[#1]{\NNNWAR{}{}{#100}}%
+
+% north-north-north-west arrow
+\newcommand{\nnnwar}{\@ifnextchar[{\basicnnnwar}{\basicnnnwar[71]}}%
+
+% basic north-north-north-west arrow with upper name
+\def\basicNnnwar[#1]#2{\NNNWAR{#2}{}{#100}}%
+
+% north-north-north-west arrow with upper name
+\newcommand{\Nnnwar}{\@ifnextchar[{\basicNnnwar}{\basicNnnwar[71]}}%
+
+% basic north-north-north-west arrow with lower name
+\def\basicnnnwaR[#1]#2{\NNNWAR{}{#2}{#100}}%
+
+% north-north-north-west arrow with lower name
+\newcommand{\nnnwaR}{\@ifnextchar[{\basicnnnwaR}{\basicnnnwaR[71]}}%
+
+% NORTH-EAST-EAST-NORTH-EAST ARROWS
+% default length: 21500 units
+
+% \NEENEAR{f}{g}{n} draws a north-east-east-north-east arrow with names f, g
+% and length n units
+\newcommand{\NEENEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\vector(3,2){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic north-east-east-north-east arrow
+\def\basicneenear[#1]{\NEENEAR{}{}{#100}}%
+
+% north-east-east-north-east arrow
+\newcommand{\neenear}{\@ifnextchar[{\basicneenear}{\basicneenear[215]}}%
+
+% basic north-east-east-north-east arrow with upper name
+\def\basicNeenear[#1]#2{\NEENEAR{#2}{}{#100}}%
+
+% north-east-east-north-east arrow with upper name
+\newcommand{\Neenear}{\@ifnextchar[{\basicNeenear}{\basicNeenear[215]}}%
+
+% basic north-east-east-north-east arrow with lower name
+\def\basicneeneaR[#1]#2{\NEENEAR{}{#2}{#100}}%
+
+% north-east-east-north-east arrow with lower name
+\newcommand{\neeneaR}{\@ifnextchar[{\basicneeneaR}{\basicneeneaR[215]}}%
+
+% SOUTH-EAST-EAST-SOUTH-EAST ARROWS
+% DEFAULT LENGTH: 21500 UNITS
+
+% \SEESEAR{f}{g} draws an sout-east-east-south-east arrow with names f, g
+% and length n units
+\newcommand{\SEESEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\vector(3,-2){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic south-east-east-south-east arrow
+\def\basicseesear[#1]{\SEESEAR{}{}{#100}}%
+
+% south-east-east-south-east arrow
+\newcommand{\seesear}{\@ifnextchar[{\basicseesear}{\basicseesear[215]}}%
+
+% basic south-east-east-south-east arrow with upper name
+\def\basicSeesear[#1]#2{\SEESEAR{#2}{}{#100}}%
+
+% south-east-east-south-east arrow with upper name
+\newcommand{\Seesear}{\@ifnextchar[{\basicSeesear}{\basicSeesear[215]}}%
+
+% basic south-east-east-south-east arrow with lower name
+\def\basicseeseaR[#1]#2{\SEESEAR{}{#2}{#100}}%
+
+% south-east-east-south-east arrow with lower name
+\newcommand{\seeseaR}{\@ifnextchar[{\basicseeseaR}{\basicseeseaR[215]}}%
+
+% NORTH-WEST-NORTH-NORTH-WEST ARROWS
+% default length: 21500 units
+
+% \NWWNWAR{f}{g}{n} draws a north-west-west-north-west arrow with names f, g
+% and length n units
+\newcommand{\NWWNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\vector(-3,2){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic north-west-west-north-west arrow
+\def\basicnwwnwar[#1]{\NWWNWAR{}{}{#100}}%
+
+% north-west-west-north-west arrow
+\newcommand{\nwwnwar}{\@ifnextchar[{\basicnwwnwar}{\basicnwwnwar[215]}}%
+
+% basic north-west-west-north-west arrow with upper name
+\def\basicNwwnwar[#1]#2{\NWWNWAR{#2}{}{#100}}%
+
+% north-west-west-north-west arrow with upper name
+\newcommand{\Nwwnwar}{\@ifnextchar[{\basicNwwnwar}{\basicNwwnwar[215]}}%
+
+% basic north-west-west-north-west arrow with lower name
+\def\basicnwwnwaR[#1]#2{\NWWNWAR{}{#2}{#100}}%
+
+% north-west-west-north-west arrow with lower name
+\newcommand{\nwwnwaR}{\@ifnextchar[{\basicnwwnwaR}{\basicnwwnwaR[215]}}%
+
+% SOUTH-WEST-WEST-SOUTH-WEST ARROWS
+% default length: 21500 units
+
+% \SWWSWAR{f}{g}{n} draws a south-west-west-south-west arrow with names f, g
+% and length n units
+\newcommand{\SWWSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\vector(-3,-2){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic south-west-west-south-west arrow
+\def\basicswwswar[#1]{\SWWSWAR{}{}{#100}}%
+
+% south-west-west-south-west arrow
+\newcommand{\swwswar}{\@ifnextchar[{\basicswwswar}{\basicswwswar[215]}}%
+
+% basic south-west-west-south-west arrow with upper name
+\def\basicSwwswar[#1]#2{\SWWSWAR{#2}{}{#100}}%
+
+% south-west-west-south-west arrow with upper name
+\newcommand{\Swwswar}{\@ifnextchar[{\basicSwwswar}{\basicSwwswar[215]}}%
+
+% basic south-west-west-south-west arrow with lower name
+\def\basicswwswaR[#1]#2{\SWWSWAR{}{#2}{#100}}%
+
+% south-west-west-south-west arrow with lower name
+\newcommand{\swwswaR}{\@ifnextchar[{\basicswwswaR}{\basicswwswaR[215]}}%
+
+
+% NORTH-EAST-NORTH-NORTH-EAST ARROWS
+% default length 14300 units
+
+% \NENNEAR{f}{g}{n} draws a north-east-north-north-east arrow with names f, g
+% and length n units
+\newcommand{\NENNEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\multiply \Z by 3%
+\divide \Z by 4%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\vector(2,3){#3}}%
+\truex{100}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic north-east-north-north-east arrow
+\def\basicnennear[#1]{\NENNEAR{}{}{#100}}%
+
+% north-east-north-north-east arrow
+\newcommand{\nennear}{\@ifnextchar[{\basicnennear}{\basicnennear[143]}}%
+
+% basic north-east-north-north-east arrow with upper name
+\def\basicNennear[#1]#2{\NENNEAR{#2}{}{#100}}%
+
+% north-east-north-north-east arrow with upper name
+\newcommand{\Nennear}{\@ifnextchar[{\basicNennear}{\basicNennear[143]}}%
+
+% basic north-east-north-north-east arrow with lower name
+\def\basicnenneaR[#1]#2{\NENNEAR{}{#2}{#100}}%
+
+% north-east-north-north-east arrow with lower name
+\newcommand{\nenneaR}{\@ifnextchar[{\basicnenneaR}{\basicnenneaR[143]}}%
+
+% SOUTH-WEST-SOUTH-SOUTH-WEST ARROWS
+% default length: 14300 units
+
+% \SWSSWAR{f}{g}{n} draws a south-west-south-south-west arrow with names f, g
+% and length n units
+\newcommand{\SWSSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\multiply \Z by 3%
+\divide \Z by 4%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\vector(-2,-3){#3}}%
+\truex{100}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic south-west-south-south-west arrow
+\def\basicswsswar[#1]{\SWSSWAR{}{}{#100}}%
+
+% south-west-south-south-west arrow
+\newcommand{\swsswar}{\@ifnextchar[{\basicswsswar}{\basicswsswar[143]}}%
+
+% basic south-west-south-south-west arrow with upper name
+\def\basicSwsswar[#1]#2{\SWSSWAR{#2}{}{#100}}%
+
+% south-west-south-south-west arrow with upper name
+\newcommand{\Swsswar}{\@ifnextchar[{\basicSwsswar}{\basicSwsswar[143]}}%
+
+% basic south-west-south-south-west arrow with lower name
+\def\basicswsswaR[#1]#2{\SWSSWAR{}{#2}{#100}}%
+
+% south-west-south-south-west arrow with lower name
+\newcommand{\swsswaR}{\@ifnextchar[{\basicswsswaR}{\basicswsswaR[143]}}%
+
+% SOUT-EAST-SOUTH-SOUTH-EAST ARROWS
+% default length: 14300 units
+
+% \SESSEAR{f}{g}{n} draws a south-east-south-south-east arrow with names f, g
+% and length n units
+\newcommand{\SESSEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\multiply \Z by 3%
+\divide \Z by 4%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\vector(2,-3){#3}}%
+\truex{200}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic south-east-south-south-east arrow
+\def\basicsessear[#1]{\SESSEAR{}{}{#100}}%
+
+% south-east-south-south-east arrow
+\newcommand{\sessear}{\@ifnextchar[{\basicsessear}{\basicsessear[143]}}%
+
+% basic south-east-south-south-east arrow with upper name
+\def\basicSessear[#1]#2{\SESSEAR{#2}{}{#100}}%
+
+% south-east-south-south-east arrow with upper name
+\newcommand{\Sessear}{\@ifnextchar[{\basicSessear}{\basicSessear[143]}}%
+
+% basic south-east-south-south-east arrow with lower name
+\def\basicsesseaR[#1]#2{\SESSEAR{}{#2}{#100}}%
+
+% south-east-south-south-east arrow with lower name
+\newcommand{\sesseaR}{\@ifnextchar[{\basicsesseaR}{\basicsesseaR[143]}}%
+
+% NORTH-WEST-NORTH-NORTH-WEST ARROWS
+% default length: 14300 units
+
+% \NWNNWAR{f}{g}{n} draws a north-west-north-north-west arrow with names f, g
+% and length n units
+\newcommand{\NWNNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\multiply \Z by 3%
+\divide \Z by 4%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\vector(-2,3){#3}}%
+\truex{200}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic north-west-north-north-west arrow
+\def\basicnwnnwar[#1]{\NWNNWAR{}{}{#100}}%
+
+% north-west-north-north-west arrow
+\newcommand{\nwnnwar}{\@ifnextchar[{\basicnwnnwar}{\basicnwnnwar[143]}}%
+
+% basic north-west-north-north-west arrow with upper name
+\def\basicNwnnwar[#1]#2{\NWNNWAR{#2}{}{#100}}%
+
+% north-west-north-north-west arrow with upper name
+\newcommand{\Nwnnwar}{\@ifnextchar[{\basicNwnnwar}{\basicNwnnwar[143]}}%
+
+% basic north-west-north-north-west arrow with lower name
+\def\basicnwnnwaR[#1]#2{\NWNNWAR{}{#2}{#100}}%
+
+% north-west-north-north-west arrow with lower name
+\newcommand{\nwnnwaR}{\@ifnextchar[{\basicnwnnwaR}{\basicnwnnwaR[143]}}%
+
+% HORIZONTAL CURVED ARROWS
+
+% The following commands produce horizontal curved arrows
+% default length: 160 units
+
+% North\East curved arrow with name [1] and length [2]x100 units
+\newcommand{\Necurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(0,\value{x}){\oval(#200,\value{y})[t]}%
+\put(0,\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
+\put(#200,0){\line(0,-1){\value{z}}}%
+\put(#200,-\value{z}){\shead}%
+\put(0,0){\line(0,-1){\value{z}}}\end{picture}}}%
+\truex{2500}%
+\put(0,\value{x}){\makebox(0,0)[b]{${#1}$}}%
+\end{picture}}%
+
+% basic north\east curved arrow
+\def\basicnecurvar[#1]{\Necurve{}{#1}}
+
+% north\east curved arrow
+\newcommand{\necurvar}{\@ifnextchar[{\basicnecurvar}{\basicnecurvar[160]}}%
+
+% basic north\east curved arrow with name
+\def\basicNecurvar[#1]#2{\Necurve{#2}{#1}}%
+
+% north\east curved arrow with name
+\newcommand{\Necurvar}{\@ifnextchar[{\basicNecurvar}{\basicNecurvar[160]}}%
+\let\necurvaR=\Necurvar
+
+% North\West curved arrow with name [1] and length [2]x100 units
+\newcommand{\Nwcurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(0,\value{x}){\oval(#200,\value{y})[t]}%
+\put(0,\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
+\put(#200,0){\line(0,-1){\value{z}}}%
+\put(0,0){\line(0,-1){\value{z}}}%
+\put(0,-\value{z}){\shead}%
+\end{picture}}}%
+\truex{2500}%
+\put(0,\value{x}){\makebox(0,0)[b]{${#1}$}}%
+\end{picture}}%
+
+% basic north\west curved arrow
+\def\basicnwcurvar[#1]{\Nwcurve{}{#1}}
+
+% north\west curved arrow
+\newcommand{\nwcurvar}{\@ifnextchar[{\basicnwcurvar}{\basicnwcurvar[160]}}%
+
+% basic north\west curved arrow with name
+\def\basicNwcurvar[#1]#2{\Nwcurve{#2}{#1}}%
+
+% north\west curved arrow with name
+\newcommand{\Nwcurvar}{\@ifnextchar[{\basicNwcurvar}{\basicNwcurvar[160]}}%
+\let\nwcurvaR=\Nwcurvar
+
+% South\East curved arrow with name [1] and length [2]x100 units
+\newcommand{\Securve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(0,-\value{x}){\oval(#200,\value{y})[b]}%
+\put(0,-\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
+\put(#200,0){\line(0,1){\value{z}}}%
+\put(0,0){\line(0,1){\value{z}}}%
+\put(#200,\value{z}){\nhead}%
+\end{picture}}}%
+\truex{2500}%
+\put(0,-\value{x}){\makebox(0,0)[t]{${#1}$}}%
+\end{picture}}%
+
+% basic south\east curved arrow
+\def\basicsecurvar[#1]{\Securve{}{#1}}
+
+% south\east curved arrow
+\newcommand{\securvar}{\@ifnextchar[{\basicsecurvar}{\basicsecurvar[160]}}%
+
+% basic south\east curved arrow with name
+\def\basicSecurvar[#1]#2{\Securve{#2}{#1}}%
+
+% south\east curved arrow with name
+\newcommand{\Securvar}{\@ifnextchar[{\basicSecurvar}{\basicSecurvar[160]}}%
+\let\securvaR=\Securvar
+
+% South\West curved arrow with name [1] and length [2]x100 units
+\newcommand{\Swcurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(0,-\value{x}){\oval(#200,\value{y})[b]}%
+\put(0,-\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
+\put(#200,0){\line(0,1){\value{z}}}%
+\put(0,0){\line(0,1){\value{z}}}%
+\put(0,\value{z}){\nhead}%
+\end{picture}}}%
+\truex{2500}%
+\put(0,-\value{x}){\makebox(0,0)[t]{${#1}$}}%
+\end{picture}}%
+
+% basic south\west curved arrow
+\def\basicswcurvar[#1]{\Swcurve{}{#1}}
+
+% south\west curved arrow
+\newcommand{\swcurvar}{\@ifnextchar[{\basicswcurvar}{\basicswcurvar[160]}}%
+
+% basic south\west curved arrow with name
+\def\basicSwcurvar[#1]#2{\Swcurve{#2}{#1}}%
+
+% south\west curved arrow with name
+\newcommand{\Swcurvar}{\@ifnextchar[{\basicSwcurvar}{\basicSwcurvar[160]}}%
+\let\swcurvaR=\Swcurvar
+
+% VERTICAL CURVED ARROWS
+
+% The following commands produce vertical curved arrows
+% default length: 160pt
+
+% East\South curved arrow with name [1] and length [2]x100 units
+\newcommand{\Escurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1400}\truey{2000}\truez{200}%
+\put(\value{x},0){\oval(\value{y},#200)[r]}%
+\put(\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
+\put(0,0){\line(-1,0){\value{z}}}%
+\put(0,#200){\line(-1,0){\value{z}}}%
+\put(-\value{z},0){\whead}%
+\end{picture}}}%
+\truex{2500}%
+\put(\value{x},0){\makebox(0,0)[l]{${#1}$}}%
+\end{picture}}%
+
+% basic east\south curved arrow
+\def\basicescurvar[#1]{\Escurve{}{#1}}
+
+% east\south curved arrow
+\newcommand{\escurvar}{\@ifnextchar[{\basicescurvar}{\basicescurvar[160]}}%
+
+% basic east\south curved arrow with name
+\def\basicEscurvar[#1]#2{\Escurve{#2}{#1}}%
+
+% east\south curved arrow with name
+\newcommand{\Escurvar}{\@ifnextchar[{\basicEscurvar}{\basicEscurvar[160]}}%
+\let\escurvaR=\Escurvar
+
+% East\North curved arrow with name [1] and length [2]x100 units
+\newcommand{\Encurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1400}\truey{2000}\truez{200}%
+\put(\value{x},0){\oval(\value{y},#200)[r]}%
+\put(\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
+\put(0,0){\line(-1,0){\value{z}}}%
+\put(0,#200){\line(-1,0){\value{z}}}%
+\put(-\value{z},#200){\whead}%
+\end{picture}}}%
+\truex{2500}%
+\put(\value{x},0){\makebox(0,0)[l]{${#1}$}}%
+\end{picture}}%
+
+% basic east\north curved arrow
+\def\basicencurvar[#1]{\Encurve{}{#1}}
+
+% east\north curved arrow
+\newcommand{\encurvar}{\@ifnextchar[{\basicencurvar}{\basicencurvar[160]}}%
+
+% basic east\north curved arrow with name
+\def\basicEncurvar[#1]#2{\Encurve{#2}{#1}}%
+
+% east\north curved arrow with name
+\newcommand{\Encurvar}{\@ifnextchar[{\basicEncurvar}{\basicEncurvar[160]}}%
+\let\encurvaR=\Encurvar
+
+% West\South curved arrow with name [1] and length [2]x100 units
+\newcommand{\Wscurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(-\value{x},0){\oval(\value{y},#200)[l]}%
+\put(-\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
+\put(0,0){\line(1,0){\value{z}}}%
+\put(0,#200){\line(1,0){\value{z}}}%
+\put(\value{z},0){\ehead}%
+\end{picture}}}%
+\truex{2400}%
+\put(-\value{x},0){\makebox(0,0)[r]{${#1}$}}%
+\end{picture}}%
+
+% basic west\south curved arrow
+\def\basicwscurvar[#1]{\Wscurve{}{#1}}
+
+% west\south curved arrow
+\newcommand{\wscurvar}{\@ifnextchar[{\basicwscurvar}{\basicwscurvar[160]}}%
+
+% basic west\south curved arrow with name
+\def\basicWscurvar[#1]#2{\Wscurve{#2}{#1}}%
+
+% west\south curved arrow with name
+\newcommand{\Wscurvar}{\@ifnextchar[{\basicWscurvar}{\basicWscurvar[160]}}%
+\let\wscurvaR=\Wscurvar
+
+% West\North curved arrow with name [1] and length [2]x100 units
+\newcommand{\Wncurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(-\value{x},0){\oval(\value{y},#200)[l]}%
+\put(-\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
+\put(0,0){\line(1,0){\value{z}}}%
+\put(\value{z},#200){\ehead}%
+\put(0,#200){\line(1,0){\value{z}}}%
+\end{picture}}}%
+\truex{2400}%
+\put(-\value{x},0){\makebox(0,0)[r]{${#1}$}}%
+\end{picture}}%
+
+% basic west\north curved arrow
+\def\basicwncurvar[#1]{\Wncurve{}{#1}}
+
+% west\north curved arrow
+\newcommand{\wncurvar}{\@ifnextchar[{\basicwncurvar}{\basicwncurvar[160]}}%
+
+% basic west\north curved arrow with name
+\def\basicWncurvar[#1]#2{\Wncurve{#2}{#1}}%
+
+% west\north curved arrow with name
+\newcommand{\Wncurvar}{\@ifnextchar[{\basicWncurvar}{\basicWncurvar[160]}}%
+\let\wncurvaR=\Wncurvar
+
+\catcode`\@=12
diff --git a/macros/generic/diagrams/borceux/diagram/MiniDiagram b/macros/generic/diagrams/borceux/diagram/MiniDiagram
new file mode 100644
index 0000000000..39c08f673b
--- /dev/null
+++ b/macros/generic/diagrams/borceux/diagram/MiniDiagram
@@ -0,0 +1,3164 @@
+% DIAGRAM MACROS (version 3.1)
+% MINI-DIAGRAM FILE
+% PLAIN ARROWS, PAIRS OF PLAIN ARROWS, ADJOINT PAIRS OF PLAIN ARROWS
+% ARROWHEADS DESIGNED AS \vector
+
+\catcode`\@=11
+
+%%%%% FIXING SOME PARAMETERS
+
+%%% Fixing the default scaling factor for diagrams
+\newcount\defaultscale
+\def\setdefaultscale#1{\global\defaultscale=#1}
+\setdefaultscale{100}
+
+\newcount\actualtextarrowspace
+\newcount\actualtextarrowlength
+
+% \computetextparameters computes the parameters
+% required to design a text arrow
+\newcommand{\computetextparameters}%
+{\global\actualtextarrowspace=\textarrowlength%
+\global\advance\actualtextarrowspace by 3%
+\global\actualtextarrowlength=\textarrowlength%
+\global\multiply\actualtextarrowlength by 100}
+
+%%% Fixing the default length of text arrows
+\newcount\textarrowlength
+\def\settextarrowlength#1{\global\textarrowlength=#1%
+\computetextparameters}
+\settextarrowlength{20}
+
+\newcount\actualdisplayarrowspace
+\newcount\actualdisplayarrowlength
+
+% \computedisplayparameters computes the parameters
+% required to design a displayed arrow
+\newcommand{\computedisplayparameters}%
+{\global\actualdisplayarrowspace=\displayarrowlength%
+\global\advance\actualdisplayarrowspace by 3%
+\global\actualdisplayarrowlength=\displayarrowlength%
+\global\multiply\actualdisplayarrowlength by 100}
+
+%%% Fixing the default length of displayed arrows
+\newcount\displayarrowlength
+\def\setdisplayarrowlength#1{\global\displayarrowlength=#1%
+\computedisplayparameters}
+\setdisplayarrowlength{30}
+
+
+% ERROR MESSAGES
+
+% Checking the next token without gobbling blanks
+\def\@ifnexttok#1#2#3{\let\@tempe #1\def\@tempa{#2}\def\@tempb{#3}%
+\futurelet\@tempc\@ifntok}
+\def\@ifntok{\ifx \@tempc \@tempe\let\@tempd\@tempa\else\let\@tempd\@tempb\fi%
+\@tempd}
+
+% \@diagramerror{MSG}{HLP}: Types a Diagram error message MSG and gives an error
+% halt with error help message HLP.
+\def\@diagramerror#1#2{%
+\edef\@@tempc{#2}\expandafter\errhelp\expandafter{\@@tempc}%
+\typeout{Diagram error. \space See User's guide for explanation.^^J
+ \space\@spaces\@spaces\@spaces Type \space H <return> \space for
+ immediate help.}\errmessage{#1}}
+
+\newif\ifdiagram
+
+% error test and message for text arrows
+\def\testtextmode{%
+\ifdiagram\@diagramerror{Text arrows are not allowed in diagrams}{Here you
+should use east or west diagram arrows, not forward or backward text arrows.
+Try proceeding now, typeset could succeed but with unpredictable output.}
+\else\ifmmode\relax\else%
+\@diagramerror{Missing \string$}{Text arrows should be introduced in math mode.
+Try proceeding now, typeset could succeed but output could not be what you expected.}\fi\fi}
+
+% error test and message for diagram arrows
+\def\testdiagrammode{\ifdiagram\relax\else
+\@diagramerror{Diagram arrows are not allowed in formulas}{Here you
+should use forward or backward text arrows, not diagram arrows. Proceeding
+could work with unpredictable output, but overflow arithmetic
+could also occur.}\fi}
+
+% error test and message for diagrams in math mode
+\def\checkmode{\ifmmode\@diagramerror{Wrong mode: no diagrams
+allowed in math mode.}{You should leave math mode before
+introducing your diagram. All items in the diagram will automatically be
+processed in math mode.}\else\relax\fi\global\diagramtrue}
+
+\global\diagramfalse
+
+% INITIALIZATION
+
+\newcount\SCALE%
+
+\newcount\NUMBER%
+
+\newcount\LINE%
+
+\newcount\COLUMN%
+
+\newcount\WIDTH%
+
+\newcount\SOURCE%
+
+\newcount\ARROW%
+
+\newcount\TARGET%
+
+\newcount\ARROWLENGTH%
+
+\newcount\NUMBEROFDOTS%
+
+\newcounter{x}%
+
+\newcounter{y}%
+
+\newcounter{z}%
+
+\newcounter{horizontal}%
+
+\newcounter{vertical}%
+
+\newskip\itemlength%
+
+\newskip\firstitem%
+
+\newskip\seconditem%
+
+\newcommand{\printarrow}{}%
+
+\newcount\X%
+
+\newcount\Y%
+
+\newcount\Z%
+
+
+% MACROS FOR DESIGNING DIAGRAMS
+
+
+% \truex{n} divides n x 100 by the scaling factor and puts the result
+% in counter x
+\newcommand{\truex}[1]{%
+\NUMBER=#1%
+\multiply\NUMBER by 100%
+\divide\NUMBER by \SCALE%
+\setcounter{x}{\NUMBER}}%
+
+% \truey{n} divides n x 100 by the scaling factor and puts the result
+% in counter y
+\newcommand{\truey}[1]{%
+\NUMBER=#1%
+\multiply\NUMBER by 100%
+\divide\NUMBER by \SCALE%
+\setcounter{y}{\NUMBER}}%
+
+% \truez{n} divides n x 100 by the scaling factor and puts the result
+% in counter z
+\newcommand{\truez}[1]{%
+\NUMBER=#1%
+\multiply\NUMBER by 100%
+\divide\NUMBER by \SCALE%
+\setcounter{z}{\NUMBER}}%
+
+
+% \changecounters computes the values of the various parameters required
+% to design an arrow with adjusted length.
+\newcommand{\changecounters}[1]{%
+\SOURCE=\ARROW%
+\ARROW=\TARGET%
+\settowidth{\itemlength}{#1}%
+\ifdim \itemlength > 2800\unitlength%
+\addtolength{\itemlength}{-2800\unitlength}%
+\TARGET=\itemlength%
+\divide\TARGET by 1310%
+\multiply\TARGET by 100%
+\divide\TARGET by \SCALE%
+\else%
+\TARGET=0%
+\fi%
+\ARROWLENGTH=5000%
+\advance\ARROWLENGTH by -\SOURCE%
+\advance\ARROWLENGTH by -\TARGET%
+\divide\ARROWLENGTH by 100%
+\advance\SOURCE by -\TARGET}%
+
+% \initialize initializes the counters required to produce the diagram
+% and defines the formal dimensions of the diagram to be (0,0).
+\newcommand{\initialize}[1]{%
+\LINE=0%
+\COLUMN=0%
+\WIDTH=0%
+\ARROW=0%
+\TARGET=0%
+\changecounters{#1}%
+\renewcommand{\printarrow}{#1}%
+\begin{center}%
+\vspace{2pt}%
+\begin{picture}(0,0)}%
+
+% \DIAGV{n} starts the construction of a diagram scaled by a factor
+% n percent, computes the scaled unit length and the unscaling factor.
+\newcommand{\DIAGV}[2]{%
+\checkmode%
+\SCALE=#1%
+\setlength{\unitlength}{655sp}%
+\multiply\unitlength by \SCALE%
+\divide\unitlength by 100%
+\initialize{\mbox{$#2$}}}%
+
+% \n introduces the next item of the diagram, computes its parameters
+% and prints the previous item.
+\newcommand{\n}[1]{%
+\changecounters{\mbox{$#1$}}%
+\put(\COLUMN,\LINE){\makebox(0,0){\printarrow}}%
+\thinlines%
+\renewcommand{\printarrow}{\mbox{$#1$}}%
+\advance\COLUMN by 4000}%
+
+% \nn prints the last item of a line and starts a new line.
+\newcommand{\nn}[1]{%
+\put(\COLUMN,\LINE){\makebox(0,0){\printarrow}}%
+\thinlines%
+\ifnum \WIDTH < \COLUMN%
+\WIDTH=\COLUMN%
+\else%
+\fi%
+\advance\LINE by -4000%
+\COLUMN=0%
+\ARROW=0%
+\TARGET=0%
+\changecounters{\mbox{$#1$}}%
+\renewcommand{\printarrow}{\mbox{$#1$}}}%
+
+% \conclude prints the last item of the diagram and sets the
+% dimensions of the diagram;
+\newcommand{\conclude}{%
+\put(\COLUMN,\LINE){\makebox(0,0){\printarrow}}%
+\thinlines%
+\ifnum \WIDTH < \COLUMN%
+\WIDTH=\COLUMN%
+\else%
+\fi%
+\setcounter{horizontal}{\WIDTH}%
+\setcounter{vertical}{-\LINE}%
+\end{picture}}%
+
+% \diag prints the last item of the diagram and takes care of the spacing
+\newcommand{\diag}{%
+\conclude%
+\raisebox{0pt}[0pt][\value{vertical}\unitlength]{}%
+\hspace*{\value{horizontal}\unitlength}%
+\vspace{12pt}%
+\end{center}%
+\setlength{\unitlength}{1pt}%
+\global\diagramfalse}%
+
+% \diagv{t}{l}{b} prints the last item of the diagram and
+% adds a t points extra space at the top of the diagram
+% adds a l points extra space at the left of the diagram
+% adds a b points extra space at the bottom of the diagram
+\newcommand{\diagv}[3]{%
+\conclude%
+\NUMBER=#1%
+\rule{0pt}{\NUMBER pt}%
+\hspace*{-#2pt}%
+\raisebox{0pt}[0pt][\value{vertical}\unitlength]{}%
+\hspace*{\value{horizontal}\unitlength}%6
+\NUMBER=#3%
+\advance\NUMBER by 12%
+\vspace*{\NUMBER pt}%
+\end{center}%
+\setlength{\unitlength}{1pt}%
+\global\diagramfalse}%
+
+% \movename(n,m){f} moves the name f of the arrow n points right
+% and m points up.
+\def\movename(#1,#2)#3{%
+\hspace{#1pt}%
+\raisebox{#2pt}[5pt][2pt]{\raisebox{#2pt}{$#3$}}%
+\hspace{-#1pt}}%
+
+% \movearrow(n,m){\...} moves arrow \... n points right
+% and m points up.
+\def\movearrow(#1,#2)#3{%
+\makebox[0pt]{%
+\hspace{#1pt}\hspace{#1pt}%
+\raisebox{#2pt}[0pt][0pt]{\raisebox{#2pt}{$#3$}}}}%
+
+% \movevertex(n,m){A} moves vertex A n points right and m points up
+\def\movevertex(#1,#2)#3{%
+\mbox{\hspace{#1pt}%
+\raisebox{#2pt}{\raisebox{#2pt}{$#3$}}%
+\hspace{-#1pt}}}%
+
+% \movevertexleft{XXX} moves vertex XXX left
+\newcommand{\movevertexleft}[1]{\makebox[2800\unitlength][r]{$#1$}}
+
+% \movevertexright{XXX} moves vertex XXX right
+\newcommand{\movevertexright}[1]{\makebox[2800\unitlength][l]{$#1$}}
+
+% \crosslength{P}{Q} computes the formal dimensions of the
+% superposition of pictures P and Q
+\newcommand{\crosslength}[2]{%
+\settowidth{\firstitem}{#1}%
+\settowidth{\seconditem}{#2}%
+\ifdim\firstitem < \seconditem%
+\itemlength=\seconditem%
+\else%
+\itemlength=\firstitem%
+\fi%
+\divide\itemlength by 2%
+\hspace{\itemlength}}%
+
+% \cross{P}{Q} superposes pictures P and Q
+\newcommand{\cross}[2]{%
+\crosslength{\mbox{$#1$}}{\mbox{$#2$}}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0){$#1$}}%
+\thinlines%
+\put(0,0){\makebox(0,0){$#2$}}%
+\thinlines%
+\end{picture}%
+\crosslength{\mbox{$#1$}}{\mbox{$#2$}}}%
+
+% \bold prints the next arrow in bold-face type
+\newcommand{\bold}{\ifdiagram\thicklines\else\typeout{Sorry: command
+\string\bold does not apply to text arrows; I am ignoring it.}\fi}
+
+% \unbold switches back to normal arrows
+\newcommand{\unbold}{\thinlines}
+
+% SHORTENING THE TYPING OF DIAGRAMS
+
+\def\basicDIAG#1¤{\DIAGV{\defaultscale}{#1}\@ifnexttok¤{\finishline}{\basicn}}
+\def\basicDIAGV[#1]#2¤{\DIAGV{#1}{#2}\@ifnexttok¤{\finishline}{\basicn}}
+\def\basicn#1¤{\n{#1}\@ifnexttok¤{\finishline}{\basicn}}
+\def\basicnn#1¤{\nn{#1}\@ifnexttok¤{\finishline}{\basicn}}
+\def\finishline#1{\@ifnextchar\end{\diag}%
+{\@ifnextchar\spacing{\relax}{\basicnn}}}
+\def\spacing(#1,#2,#3){\diagv{#1}{#2}{#3}}
+
+\newif\ifcaption%
+
+\newenvironment{diagram}{%
+\iffloatdiag\relax\else
+\global\def\diagramcaption##1{%
+\global\captiontrue%
+\global\def\@diagcaption{##1}}%
+\global\def\@diagcaption{}\fi%
+\@ifnextchar[{\basicDIAGV}{\basicDIAG}}%
+{\iffloatdiag\relax\else%
+\ifcaption
+\begin{center}\mbox{}\@diagcaption\end{center}%
+\else\relax\fi\fi\global\captionfalse}
+
+\global\captionfalse
+
+
+% MACROS FOR FLOATING DIAGRAMS
+
+\gdef\@diaglabel{Diagram}
+\gdef\diagramlabel#1{\gdef\@diaglabel{#1}}
+
+\newcounter{Diagram}
+\setcounter{Diagram}{0}
+\def\theDiagram{\@arabic\c@Diagram}
+\def\fps@Diagram{tbp}
+\def\ftype@Diagram{1}
+\def\ext@Diagram{lof}
+\def\fnum@Diagram{\@diaglabel\ \theDiagram}
+\def\Diagram{\@float{Diagram}}
+\let\endDiagram\end@float
+\@namedef{Diagram*}{\@dblfloat{Diagram}}
+\@namedef{endDiagram*}{\end@dblfloat}
+
+\def\setdiagramcounter#1{\@addtoreset{Diagram}{#1}%
+\def\theDiagram{\arabic{#1}.\@arabic\c@Diagram}}
+
+\newif\iffloatdiag
+
+\newenvironment{floatingdiagram}{%
+\global\floatdiagtrue%
+\long\def\@makecaption##1##2{
+ \vskip 0pt
+ \setbox\@tempboxa\hbox{##1##2}
+ \ifdim \wd\@tempboxa >\hsize \unhbox\@tempboxa\par \else \hbox
+to\hsize{\hfil\box\@tempboxa\hfil}
+ \fi}%
+\global\def\diagramcaption##1{\global\def\@diagcaption{: ##1}}%
+\global\def\@diagcaption{}%
+\begin{Diagram}[tbp]\begin{diagram}}%
+{\end{diagram}\caption{\@diagcaption}\end{Diagram}%
+\global\floatdiagfalse}
+
+\global\floatdiagfalse
+
+% MACROS FOR DRAWING TEXT PICTURES
+
+% \tlowername{P}{f} puts the name f under the picture P
+\newcommand{\tlowername}[2]%
+{$\stackrel{\makebox[1pt]{#1}}%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,6)[t]{\makebox[1pt]{$\scriptstyle#2$}}}%
+\end{picture}}$}%
+
+% \tcase{P} draws the picture P with length \textarrowlength pt.
+\newcommand{\tcase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{2.5pt}{#1{\actualtextarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Tcase{P}{f} draws the picture P with upper name f
+% and length \textarrowlength pt.
+\newcommand{\Tcase}[2]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{2.5pt}{$\stackrel{\scriptstyle #2}{#1{\actualtextarrowlength}}$}}%
+\setlength{\unitlength}{1pt}}%
+
+% \tbicase{P} draws the bi-picture P
+% with length \textarrowlength pt.
+\newcommand{\tbicase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{1pt}{#1{\actualtextarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Tbicase{P}{f}{g} draws the bi-picture P with names f, g
+% and length \textarrowlength pt.
+\newcommand{\Tbicase}[3]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{-1pt}%
+{$\stackrel{\scriptstyle #2}%
+{\mbox{\tlowername{#1{\actualtextarrowlength}}%
+{\scriptstyle #3}}}$}}%
+\setlength{\unitlength}{1pt}}%
+
+% MACROS FOR DRAWING DISPLAYED PICTURES
+
+% \dlowername{P}{f} puts the name f under the picture P
+\newcommand{\dlowername}[2]%
+{$\stackrel{\makebox[1pt]{#1}}%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,6)[t]{\makebox[1pt]{$\textstyle#2$}}}%
+\end{picture}}$}%
+
+% \dcase{P} draws the picture P with length \displayarrowlength pt.
+\newcommand{\dcase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{2.5pt}{#1{\actualdisplayarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Dcase{P}{f} draws the picture P with upper name f
+% and length \displayarrowlength pt.
+\newcommand{\Dcase}[2]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{2.5pt}{$\stackrel{\textstyle #2}{#1{\actualdisplayarrowlength}}$}}%
+\setlength{\unitlength}{1pt}}%
+
+% \dbicase{P} draws the bi-picture P
+% with length \displayarrowlength pt.
+\newcommand{\dbicase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{1pt}{#1{\actualdisplayarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Dbicase{P}{f}{g} draws the bi-picture P with names f, g
+% and length \displayarrowlength pt.
+\newcommand{\Dbicase}[3]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{-1pt}%
+{$\stackrel{\textstyle #2}%
+{\mbox{\tlowername{#1{\actualdisplayarrowlength}}%
+{\textstyle #3}}}$}}%
+\setlength{\unitlength}{1pt}}%
+
+
+% IN-TEXT ARROWS
+
+% \AR{n} draws an arrow of length n units
+\newcommand{\AR}[1]%
+{\begin{picture}(#1,0)%
+\put(0,0){\vector(1,0){#1}}%
+\end{picture}}%
+
+% \BIAR{n} draws a pair of arrows of length n units
+\newcommand{\BIAR}[1]%
+{\begin{picture}(#1,700)%
+\put(0,0){\vector(1,0){#1}}%
+\put(0,700){\vector(1,0){#1}}%
+\end{picture}}%
+
+% \ADJAR{n} draws a pair of adjoint arrows of length n units
+\newcommand{\ADJAR}[1]%
+{\begin{picture}(#1,700)%
+\put(0,0){\vector(1,0){#1}}%
+\put(#1,700){\vector(-1,0){#1}}%
+\end{picture}}%
+
+% All the following commands produce arrows with length 20pt
+% and scriptstyle names in math mode but arrows with length
+% \displayarrowlength pt and textstyle names in display math mode.
+
+% arrow
+\newcommand{\ar}{\ifinner\tcase{\AR}\else\dcase{\AR}\fi}%
+
+% arrow with upper name [1]
+\newcommand{\Ar}[1]{\ifinner\Tcase{\AR}{#1}\else\Dcase{\AR}{#1}\fi}%
+
+% pair of arrows
+\newcommand{\biar}{\ifinner\tbicase{\BIAR}\else\dbicase{\BIAR}\fi}%
+
+% pair of arrows with names [1],[2]
+\newcommand{\Biar}[2]{\ifinner\Tbicase{\BIAR}{#1}{#2}%
+\else\Dbicase{\BIAR}{#1}{#2}\fi}%
+
+% pair of adjoint arrows
+\newcommand{\adjar}{\ifinner\tbicase{\ADJAR}\else\dbicase{\ADJAR}\fi}%
+
+% pair of adjoint arrows with names [1],[2]
+\newcommand{\Adjar}[2]{\ifinner\Tbicase{\ADJAR}{#1}{#2}%
+\else\Dbicase{\ADJAR}{#1}{#2}\fi}%
+
+% IN-TEXT BACK ARROWS
+
+% \BKAR{n} draws a pointing back arrow of length n units
+\newcommand{\BKAR}[1]%
+{\begin{picture}(#1,0)%
+\put(#1,0){\vector(-1,0){#1}}%
+\end{picture}}%
+
+% \BKBIAR{n} draws a pair of pointing back arrows of length n units
+\newcommand{\BKBIAR}[1]%
+{\begin{picture}(#1,700)%
+\put(#1,0){\vector(-1,0){#1}}%
+\put(#1,700){\vector(-1,0){#1}}%
+\end{picture}}%
+
+% \BKADJAR{n} draws a pair of adjoint arrows of length n units
+\newcommand{\BKADJAR}[1]%
+{\begin{picture}(#1,700)%
+\put(0,700){\vector(1,0){#1}}%
+\put(#1,0){\vector(-1,0){#1}}%
+\end{picture}}%
+
+% \BKADJDIST{n} draws a pair of adjoint distributors of length n units
+\newcommand{\BKADJDIST}[1]%
+{\begin{picture}(#1,700)%
+\put(0,700){\vector(1,0){#1}}%
+\put(#1,0){\vector(-1,0){#1}}%
+\NUMBER=#1%
+\divide\NUMBER by 2%
+\put(\NUMBER,0){\circle{400}}%
+\put(\NUMBER,700){\circle{400}}%
+\end{picture}}%
+
+% All the following commands produce back arrows with length 20pt
+% and scriptstyle names in math mode but arrows with length
+% \displayarrowlength and textstyle names in display math mode.
+
+% back arrow
+\newcommand{\bkar}{\ifinner\tcase{\BKAR}\else\dcase{\BKAR}\fi}%
+
+% back arrow with upper name [1]
+\newcommand{\Bkar}[1]{\ifinner\Tcase{\BKAR}{#1}\else\Dcase{\BKAR}{#1}\fi}%
+
+% pair of back arrows
+\newcommand{\bkbiar}{\ifinner\tbicase{\BKBIAR}\else\dbicase{\BKBIAR}\fi}%
+
+% pair of back arrows with names [1],[2]
+\newcommand{\Bkbiar}[2]{\ifinner\Tbicase{\BKBIAR}{#1}{#2}%
+\else\Dbicase{\BKBIAR}{#1}{#2}\fi}%
+
+% back pair of adjoint arrows
+\newcommand{\bkadjar}{\ifinner\tbicase{\BKADJAR}%
+\else\dbicase{\BKADJAR}\fi}%
+
+% back pair of adjoint arrows with names [1],[2]
+\newcommand{\Bkadjar}[2]{\ifinner\Tbicase{\BKADJAR}{#1}{#2}%
+\else\Dbicase{\BKADJAR}{#1}{#2}\fi}%
+
+% MACROS FOR DRAWING HORIZONTAL PICTURES
+
+% \lowername{P}{f} puts the name f under the picture P
+\newcommand{\lowername}[2]%
+{$\stackrel{\makebox[1pt]{#1}}%
+{\begin{picture}(0,0)%
+\truex{600}%
+\put(0,0){\makebox(0,\value{x})[t]{\makebox[1pt]{$#2$}}}%
+\end{picture}}$}%
+
+% \hcase{P}{n} draws the picture P with length n units
+\newcommand{\hcase}[2]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{0pt}[0pt][0pt]{#1{#2}}}}%
+
+% \Hcase{P}{f}{n} draws the picture P with upper name f
+% and length n units.
+\newcommand{\Hcase}[3]%
+{\testdiagrammode\makebox[0pt]
+{\raisebox{0pt}[0pt][0pt]%
+{$\stackrel{\makebox[0pt]{$\textstyle{#2}$}}{#1{#3}}$}}}%
+
+% \hcasE{P}{f}{n} draws the picture P with lower name f
+% and length n units.
+\newcommand{\hcasE}[3]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{-8pt}[0pt][0pt]%
+{\lowername{#1{#3}}{#2}}}}%
+
+% \hbicase{P}{n} draws the bi-picture P with length n units.
+\newcommand{\hbicase}[2]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{-2.4pt}[0pt][0pt]{#1{#2}}}}%
+
+% \Hbicase{P}{f}{g}{n} draws the bi-picture P with names f, g
+% and length n units.
+\newcommand{\Hbicase}[4]%
+{\testdiagrammode\makebox[0pt]
+{\raisebox{-10.4pt}[0pt][0pt]%
+{$\stackrel{\makebox[0pt]{$\textstyle{#2}$}}%
+{\mbox{\lowername{#1{#4}}{#3}}}$}}}%
+
+% EAST ARROWS
+
+% \EAR{n} draws an east arrow of length n units
+\newcommand{\EAR}[1]%
+{\begin{picture}(#1,0)%
+\put(0,0){\vector(1,0){#1}}%
+\end{picture}}%
+
+% \EBIAR{n} draws an east pair of arrows of length n units
+\newcommand{\EBIAR}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,0){\vector(1,0){#1}}%
+\put(0,\value{x}){\vector(1,0){#1}}%
+\end{picture}}%
+
+% \EADJAR{n} draws an east pair of adjoint arrows of length n
+% units
+\newcommand{\EADJAR}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,0){\vector(1,0){#1}}%
+\put(#1,\value{x}){\vector(-1,0){#1}}%
+\end{picture}}%
+
+% All the following commands produce east arrows
+
+% basic east arrow
+\def\basicear[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\EAR}{\Z}}%
+
+% east arrow
+\newcommand{\ear}{\@ifnextchar[{\basicear}%
+{\hspace{\SOURCE\unitlength}\basicear[\ARROWLENGTH]}}%
+
+% basic east arrow with upper name
+\def\basicEar[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\EAR}{#2}{\Z}}%
+
+% east arrow with upper name
+\newcommand{\Ear}{\@ifnextchar[{\basicEar}%
+{\hspace{\SOURCE\unitlength}\basicEar[\ARROWLENGTH]}}%
+
+% basic east arrow with lower name
+\def\basiceaR[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\EAR}{#2}{\Z}}%
+
+% east arrow with lower name
+\newcommand{\eaR}{\@ifnextchar[{\basiceaR}%
+{\hspace{\SOURCE\unitlength}\basiceaR[\ARROWLENGTH]}}%
+
+% basic pair of east arrows
+\def\basicebiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\EBIAR}{\Z}}%
+
+% pair of east arrows
+\newcommand{\ebiar}{\@ifnextchar[{\basicebiar}%
+{\hspace{\SOURCE\unitlength}\basicebiar[\ARROWLENGTH]}}%
+
+% basic pair of east arrows with names
+\def\basicEbiar[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\EBIAR}{#2}{#3}{\Z}}%
+
+% pair of east arrows with names
+\newcommand{\Ebiar}{\@ifnextchar[{\basicEbiar}%
+{\hspace{\SOURCE\unitlength}\basicEbiar[\ARROWLENGTH]}}%
+\let\ebiaR=\Ebiar
+
+% basic pair of east adjoint arrows
+\def\basiceadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\EADJAR}{\Z}}%
+
+% pair of east adjoint arrows
+\newcommand{\eadjar}{\@ifnextchar[{\basiceadjar}%
+{\hspace{\SOURCE\unitlength}\basiceadjar[\ARROWLENGTH]}}%
+
+% basic pair of east adjoint arrows with names
+\def\basicEadjar[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\EADJAR}{#2}{#3}{\Z}}%
+
+% pair of east adjoint arrows with names
+\newcommand{\Eadjar}{\@ifnextchar[{\basicEadjar}%
+{\hspace{\SOURCE\unitlength}\basicEadjar[\ARROWLENGTH]}}%
+\let\eadjaR=\Eadjar
+
+% WEST ARROWS
+
+% \WAR{n} draws a pointing back arrow of length n units
+\newcommand{\WAR}[1]%
+{\begin{picture}(#1,0)%
+\put(#1,0){\vector(-1,0){#1}}%
+\end{picture}}%
+
+% \WBIAR{n} draws a pair of pointing back arrows of length n units
+\newcommand{\WBIAR}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(#1,0){\vector(-1,0){#1}}%
+\put(#1,\value{x}){\vector(-1,0){#1}}%
+\end{picture}}%
+
+% \WADJAR{n} draws a pair of adjoint arrows of length n units
+\newcommand{\WADJAR}[1]%
+{\truex{700}%
+\begin{picture}(#1,\value{x})%
+\put(0,\value{x}){\vector(1,0){#1}}%
+\put(#1,0){\vector(-1,0){#1}}%
+\end{picture}}%
+
+% All the following commands produce west arrows
+
+% basic west arrow
+\def\basicwar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hcase{\WAR}{\Z}}%
+
+% west arrow
+\newcommand{\war}{\@ifnextchar[{\basicwar}%
+{\hspace{\SOURCE\unitlength}\basicwar[\ARROWLENGTH]}}%
+
+% basic west arrow with upper name
+\def\basicWar[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\Hcase{\WAR}{#2}{\Z}}%
+
+% west arrow with upper name
+\newcommand{\War}{\@ifnextchar[{\basicWar}%
+{\hspace{\SOURCE\unitlength}\basicWar[\ARROWLENGTH]}}%
+
+% basic west arrow with lower name
+\def\basicwaR[#1]#2{%
+\Z=#1%
+\multiply \Z by 100%
+\hcasE{\WAR}{#2}{\Z}}%
+
+% west arrow with lower name
+\newcommand{\waR}{\@ifnextchar[{\basicwaR}%
+{\hspace{\SOURCE\unitlength}\basicwaR[\ARROWLENGTH]}}%
+
+% basic pair of west arrows
+\def\basicwbiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\WBIAR}{\Z}}%
+
+% pair of west arrows
+\newcommand{\wbiar}{\@ifnextchar[{\basicwbiar}%
+{\hspace{\SOURCE\unitlength}\basicwbiar[\ARROWLENGTH]}}%
+
+% basic pair of west arrows with names
+\def\basicWbiar[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\WBIAR}{#2}{#3}{\Z}}%
+
+% pair of west arrows with names
+\newcommand{\Wbiar}{\@ifnextchar[{\basicWbiar}%
+{\hspace{\SOURCE\unitlength}\basicWbiar[\ARROWLENGTH]}}%
+\let\wbiaR=\Wbiar
+
+% basic pair of west adjoint arrows
+\def\basicwadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hbicase{\WADJAR}{\Z}}%
+
+% pair of west adjoint arrows
+\newcommand{\wadjar}{\@ifnextchar[{\basicwadjar}%
+{\hspace{\SOURCE\unitlength}\basicwadjar[\ARROWLENGTH]}}%
+
+% basic pair of west adjoint arrows with names
+\def\basicWadjar[#1]#2#3{%
+\Z=#1%
+\multiply \Z by 100%
+\Hbicase{\WADJAR}{#2}{#3}{\Z}}%
+
+% pair of west adjoint arrows with names
+\newcommand{\Wadjar}{\@ifnextchar[{\basicWadjar}%
+{\hspace{\SOURCE\unitlength}\basicWadjar[\ARROWLENGTH]}}%
+\let\wadjaR=\Wadjar
+
+% MACROS FOR DRAWING VERTICAL PICTURES
+
+% \vcase{P}{n} draws the vertical picture P with length n units.
+\newcommand{\vcase}[2]{\testdiagrammode#1{#2}}%
+
+% \Vcase{P}{f}{n} draws the vertical picture P
+% with left name f and length n units.
+\newcommand{\Vcase}[3]{\testdiagrammode\makebox[0pt]%
+{\makebox[0pt][r]{\raisebox{0pt}[0pt][0pt]{${#2}\hspace{2pt}$}}}#1{#3}}%
+
+% \vcasE{P}{f}{n} draws the vertical picture P
+% with right name f and length n units.
+\newcommand{\vcasE}[3]{\testdiagrammode\makebox[0pt]%
+{#1{#3}\makebox[0pt][l]{\raisebox{0pt}[0pt][0pt]{\hspace{2pt}$#2$}}}}%
+
+% \vbicase{P}{n} draws the vertical bi-picture P with length n units.
+\newcommand{\vbicase}[2]{\testdiagrammode\makebox[0pt]{{#1{#2}}}}%
+
+% \Vbicase{P}{f}{g}{n} draws the vertical bi-picture P
+% with names f, g and length n units.
+\newcommand{\Vbicase}[4]{\testdiagrammode\makebox[0pt]%
+{\makebox[0pt][r]{\raisebox{0pt}[0pt][0pt]{$#2$\hspace{5.5pt}}}#1{#4}%
+\makebox[0pt][l]{\raisebox{0pt}[0pt][0pt]{\hspace{6.5pt}$#3$}}}}%
+
+% SOUTH ARROWS
+
+% \SAR{n} draws a south arrow of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SAR}[1]%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,#1){\vector(0,-1){#1}}%
+\end{picture}}}\end{picture}}%
+
+% \SBIAR{n} draws a pair of south arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SBIAR}[1]%
+{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},#1){\vector(0,-1){#1}}%
+\put(\value{x},#1){\vector(0,-1){#1}}%
+\end{picture}}}\end{picture}}%
+
+% \SADJAR{n} draws a pair of vertical adjoint arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SADJAR}[1]{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},#1){\vector(0,-1){#1}}%
+\put(\value{x},0){\vector(0,1){#1}}%
+\end{picture}}}\end{picture}}%
+
+% All the following commands produce south arrows
+
+% basic south arrow
+\def\basicsar[#1]{\vcase{\SAR}{#100}}%
+
+% south arrow
+\newcommand{\sar}{\@ifnextchar[{\basicsar}{\basicsar[50]}}%
+
+% basic south arrow with left name
+\def\basicSar[#1]#2{\Vcase{\SAR}{#2}{#100}}%
+
+% south arrow with left name
+\newcommand{\Sar}{\@ifnextchar[{\basicSar}{\basicSar[50]}}%
+
+% basic south arrow with right name
+\def\basicsaR[#1]#2{\vcasE{\SAR}{#2}{#100}}%
+
+% south arrow with right name
+\newcommand{\saR}{\@ifnextchar[{\basicsaR}{\basicsaR[50]}}%
+
+% basic pair of south arrows
+\def\basicsbiar[#1]{\vbicase{\SBIAR}{#100}}%
+
+% pair of south arrows
+\newcommand{\sbiar}{\@ifnextchar[{\basicsbiar}{\basicsbiar[50]}}%
+
+% basic pair of south arrows with names
+\def\basicSbiar[#1]#2#3{\Vbicase{\SBIAR}{#2}{#3}{#100}}%
+
+% pair of south arrows with names
+\newcommand{\Sbiar}{\@ifnextchar[{\basicSbiar}{\basicSbiar[50]}}%
+\let\sbiaR=\Sbiar
+
+% basic pair of south adjoint arrows
+\def\basicsadjar[#1]{\vbicase{\SADJAR}{#100}}%
+
+% pair of south adjoint arrows
+\newcommand{\sadjar}{\@ifnextchar[{\basicsadjar}{\basicsadjar[50]}}%
+
+% basic pair of south adjoint arrows with names
+\def\basicSadjar[#1]#2#3{\Vbicase{\SADJAR}{#2}{#3}{#100}}%
+
+% pair of south adjoint arrows with names
+\newcommand{\Sadjar}{\@ifnextchar[{\basicSadjar}{\basicSadjar[50]}}%
+\let\sadjaR=\Sadjar
+
+% NORTH ARROWS
+
+% \NAR{n} draws a north arrow of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NAR}[1]%
+{\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(0,0){\vector(0,1){#1}}%
+\end{picture}}}\end{picture}}%
+
+% \NBIAR{n} draws a pair of north arrows of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NBIAR}[1]%
+{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{x},0){\vector(0,1){#1}}%
+\put(\value{x},0){\vector(0,1){#1}}%
+\end{picture}}}\end{picture}}%
+
+% \NADJAR{n} draws a pair of vertical adjoint arrows of length n pt
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NADJAR}[1]{\begin{picture}(0,0)%
+\truex{350}%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(\value{x},#1){\vector(0,-1){#1}}%
+\put(-\value{x},0){\vector(0,1){#1}}%
+\end{picture}}}\end{picture}}%
+
+% All the following commands produce north arrows
+
+% basic north arrow
+\def\basicnar[#1]{\vcase{\NAR}{#100}}%
+
+% north arrow
+\newcommand{\nar}{\@ifnextchar[{\basicnar}{\basicnar[50]}}%
+
+% basic north arrow with left name
+\def\basicNar[#1]#2{\Vcase{\NAR}{#2}{#100}}%
+
+% north arrow with left name
+\newcommand{\Nar}{\@ifnextchar[{\basicNar}{\basicNar[50]}}%
+
+% basic north arrow with right name
+\def\basicnaR[#1]#2{\vcasE{\NAR}{#2}{#100}}%
+
+% north arrow with right name
+\newcommand{\naR}{\@ifnextchar[{\basicnaR}{\basicnaR[50]}}%
+
+% basic pair of north arrows
+\def\basicnbiar[#1]{\vbicase{\NBIAR}{#100}}%
+
+% pair of north arrows
+\newcommand{\nbiar}{\@ifnextchar[{\basicnbiar}{\basicnbiar[50]}}%
+
+% basic pair of north arrows with names
+\def\basicNbiar[#1]#2#3{\Vbicase{\NBIAR}{#2}{#3}{#100}}%
+
+% pair of north arrows with names
+\newcommand{\Nbiar}{\@ifnextchar[{\basicNbiar}{\basicNbiar[50]}}%
+\let\nbiaR=\Nbiar
+
+% basic pair of north adjoint arrows
+\def\basicnadjar[#1]{\vbicase{\NADJAR}{#100}}%
+
+% pair of north adjoint arrows
+\newcommand{\nadjar}{\@ifnextchar[{\basicnadjar}{\basicnadjar[50]}}%
+
+% basic pair of north adjoint arrows with names
+\def\basicNadjar[#1]#2#3{\Vbicase{\NADJAR}{#2}{#3}{#100}}%
+
+% pair of north adjoint arrows with names
+\newcommand{\Nadjar}{\@ifnextchar[{\basicNadjar}{\basicNadjar[50]}}%
+\let\nadjaR=\Nadjar
+
+% MACROS FOR FIRST DIAGONAL PICTURES
+
+
+% \fdcase{P}{f}{g}{n} draws the picture P with names f, g
+% and length n units
+\newcommand{\fdcase}[4]{\testdiagrammode\begin{picture}(0,0)%
+\put(0,0){#1{#4}}%
+\truex{200}\truey{600}\truez{600}%
+\put(-\value{x},-\value{x}){\makebox(0,\value{z})[r]{${#2}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#3}$}}%
+\end{picture}}%
+
+% \fdbicase{P}{f}{g}{n} draws the bipicture P with names f, g
+% and length n units
+\newcommand{\fdbicase}[4]{\testdiagrammode\begin{picture}(0,0)%
+\put(0,0){#1{#4}}%
+\truex{900}\truey{150}%
+\put(-\value{x},\value{y}){${#2}$}%
+\truex{300}\truey{1050}%
+\put(\value{x},-\value{y}){${#3}$}%
+\end{picture}}%
+
+
+% NORTH-EAST ARROWS
+
+% \NEAR{n} draws a north-east arrow of length nx100 units
+\newcommand{\NEAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\vector(1,1){#1}}%
+\end{picture}}%
+
+% \NEBIAR{n} draws a pair of north-east arrows of length n units
+\newcommand{\NEBIAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\put(-\value{x},\value{x}){\vector(1,1){#1}}%
+\put(\value{x},-\value{x}){\vector(1,1){#1}}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\end{picture}}\end{picture}}%
+
+% \NEADJAR{n} draws a north-east pair of adjoint arrows of length n units
+\newcommand{\NEADJAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},-\value{x}){\vector(1,1){#1}}%
+\end{picture}}%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},\value{x}){\vector(-1,-1){#1}}%
+\end{picture}}\end{picture}}%
+
+% All the following commands draw north-east arrows
+
+% north-east arrow of length nx100 units
+\def\basicnear[#1]{\fdcase{\NEAR}{}{}{#100}}%
+
+% north-east arrow
+\newcommand{\near}{\@ifnextchar[{\basicnear}{\basicnear[59]}}%
+
+% north-east arrow with upper name [1] and length nx100 units
+\def\basicNear[#1]#2{\fdcase{\NEAR}{#2}{}{#100}}%
+
+% north-east arrow with upper name
+\newcommand{\Near}{\@ifnextchar[{\basicNear}{\basicNear[59]}}%
+
+% north-east arrow with lower name [1] and length nx100 units
+\def\basicneaR[#1]#2{\fdcase{\NEAR}{}{#2}{#100}}%
+
+% north-east arrow with lower name [1]
+\newcommand{\neaR}{\@ifnextchar[{\basicneaR}{\basicneaR[59]}}%
+
+% pair of north-east arrows of length nx100 units
+\def\basicnebiar[#1]{\fdbicase{\NEBIAR}{}{}{#100}}%
+
+% pair of north-east arrows
+\newcommand{\nebiar}{\@ifnextchar[{\basicnebiar}{\basicnebiar[59]}}%
+
+% pair of north-east arrows with names [1][2] and length nx100 units
+\def\basicNebiar[#1]#2#3{\fdbicase{\NEBIAR}{#2}{#3}{#100}}%
+
+% pair of north-east arrows with names
+\newcommand{\Nebiar}{\@ifnextchar[{\basicNebiar}{\basicNebiar[59]}}%
+\let\nebiaR=\Nebiar
+
+% pair of north-east adjoint arrows of length nx100 units
+\def\basicneadjar[#1]{\fdbicase{\NEADJAR}{}{}{#100}}%
+
+% pair of north-east adjoint arrows
+\newcommand{\neadjar}{\@ifnextchar[{\basicneadjar}{\basicneadjar[59]}}%
+
+% pair of north-east adjoint arrows with names [1][2] and length nx100 units
+\def\basicNeadjar[#1]#2#3{\fdbicase{\NEADJAR}{#2}{#3}{#100}}%
+
+% pair of north-east adjoint arrows with names
+\newcommand{\Neadjar}{\@ifnextchar[{\basicNeadjar}{\basicNeadjar[59]}}%
+\let\neadjaR=\Neadjar
+
+% SOUT-WEST ARROWS
+
+% \SWAR{n} draws a south-west arrow of length nx100 units
+\newcommand{\SWAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\vector(-1,-1){#1}}%
+\end{picture}}%
+
+% \SWBIAR{n} draws a pair of south-west arrows of length n units
+\newcommand{\SWBIAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\put(\value{x},-\value{x}){\vector(-1,-1){#1}}%
+\put(-\value{x},\value{x}){\vector(-1,-1){#1}}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\end{picture}}\end{picture}}%
+
+% \SWADJAR{n} draws a south-west pair of adjoint arrows of length n units
+\newcommand{\SWADJAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},-\value{x}){\vector(-1,-1){#1}}%
+\end{picture}}%
+\put(-\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},\value{x}){\vector(1,1){#1}}%
+\end{picture}}\end{picture}}%
+
+% All the following commands draw south-west arrows
+
+% south-west arrow of length nx100 units
+\def\basicswar[#1]{\fdcase{\SWAR}{}{}{#100}}%
+
+% south-west arrow
+\newcommand{\swar}{\@ifnextchar[{\basicswar}{\basicswar[59]}}%
+
+% south-west arrow with upper name [1] and length nx100 units
+\def\basicSwar[#1]#2{\fdcase{\SWAR}{#2}{}{#100}}%
+
+% south-west arrow with upper name
+\newcommand{\Swar}{\@ifnextchar[{\basicSwar}{\basicSwar[59]}}%
+
+% south-west arrow with lower name [1] and length nx100 units
+\def\basicswaR[#1]#2{\fdcase{\SWAR}{}{#2}{#100}}%
+
+% south-west arrow with lower name [1]
+\newcommand{\swaR}{\@ifnextchar[{\basicswaR}{\basicswaR[59]}}%
+
+% pair of south-west arrows of length nx100 units
+\def\basicswbiar[#1]{\fdbicase{\SWBIAR}{}{}{#100}}%
+
+% pair of south-west arrows
+\newcommand{\swbiar}{\@ifnextchar[{\basicswbiar}{\basicswbiar[59]}}%
+
+% pair of south-west arrows with names [1][2] and length nx100 units
+\def\basicSwbiar[#1]#2#3{\fdbicase{\SWBIAR}{#2}{#3}{#100}}%
+
+% pair of south-west arrows with names
+\newcommand{\Swbiar}{\@ifnextchar[{\basicSwbiar}{\basicSwbiar[59]}}%
+\let\swbiaR=\Swbiar
+
+% pair of south-west adjoint arrows of length nx100 units
+\def\basicswadjar[#1]{\fdbicase{\SWADJAR}{}{}{#100}}%
+
+% pair of south-west adjoint arrows
+\newcommand{\swadjar}{\@ifnextchar[{\basicswadjar}{\basicswadjar[59]}}%
+
+% pair of south-west adjoint arrows with names [1][2] and length nx100 units
+\def\basicSwadjar[#1]#2#3{\fdbicase{\SWADJAR}{#2}{#3}{#100}}%
+
+% pair of south-west adjoint arrows with names
+\newcommand{\Swadjar}{\@ifnextchar[{\basicSwadjar}{\basicSwadjar[59]}}%
+\let\swadjaR=\Swadjar
+
+% MACROS FOR SECOND DIAGONAL PICTURES
+
+% \sdcase{P}{f}{g}{n} draws the picture P with names f, g
+% and length n units
+\newcommand{\sdcase}[4]{\testdiagrammode\begin{picture}(0,0)%
+\put(0,0){#1{#4}}%
+\truex{100}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#2}$}}%
+\truex{300}\truey{800}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#3}$}}%
+\end{picture}}%
+
+% \sdbicase{P}{f}{g}{n} draws the bipicture P with names f, g
+% and length n units
+\newcommand{\sdbicase}[4]{\testdiagrammode\begin{picture}(0,0)%
+\put(0,0){#1{#4}}%
+\truex{350}\truey{600}\truez{950}%
+\put(\value{x},\value{x}){\makebox(0,\value{y})[l]{${#2}$}}%
+\truex{450}\truey{600}\truez{1050}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{y})[r]{${#3}$}}%
+\end{picture}}%
+
+
+% SOUTH-EAST ARROWS
+
+% \SEAR{n} draws a south-east arrow of length nx100 units
+\newcommand{\SEAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\vector(1,-1){#1}}%
+\end{picture}}%
+
+% \SEBIAR{n} draws a pair of south-east arrows of length n units
+\newcommand{\SEBIAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\put(-\value{x},-\value{x}){\vector(1,-1){#1}}%
+\put(\value{x},\value{x}){\vector(1,-1){#1}}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\end{picture}}\end{picture}}%
+
+% \SEADJAR{n} draws a south-east pair of adjoint arrows of length n units
+\newcommand{\SEADJAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},-\value{x}){\vector(1,-1){#1}}%
+\end{picture}}%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},\value{x}){\vector(-1,1){#1}}%
+\end{picture}}\end{picture}}%
+
+% All the following commands draw south-east arrows
+
+% south-east arrow of length nx100 units
+\def\basicsear[#1]{\sdcase{\SEAR}{}{}{#100}}%
+
+% south-east arrow
+\newcommand{\sear}{\@ifnextchar[{\basicsear}{\basicsear[59]}}%
+
+% south-east arrow with upper name [1] and length nx100 units
+\def\basicSear[#1]#2{\sdcase{\SEAR}{#2}{}{#100}}%
+
+% south-east arrow with upper name
+\newcommand{\Sear}{\@ifnextchar[{\basicSear}{\basicSear[59]}}%
+
+% south-east arrow with lower name [1] and length nx100 units
+\def\basicseaR[#1]#2{\sdcase{\SEAR}{}{#2}{#100}}%
+
+% south-east arrow with lower name [1]
+\newcommand{\seaR}{\@ifnextchar[{\basicseaR}{\basicseaR[59]}}%
+
+% pair of south-east arrows of length nx100 units
+\def\basicsebiar[#1]{\sdbicase{\SEBIAR}{}{}{#100}}%
+
+% pair of south-east arrows
+\newcommand{\sebiar}{\@ifnextchar[{\basicsebiar}{\basicsebiar[59]}}%
+
+% pair of south-east arrows with names [1][2] and length nx100 units
+\def\basicSebiar[#1]#2#3{\sdbicase{\SEBIAR}{#2}{#3}{#100}}%
+
+% pair of south-east arrows with names
+\newcommand{\Sebiar}{\@ifnextchar[{\basicSebiar}{\basicSebiar[59]}}%
+\let\sebiaR=\Sebiar
+
+% pair of south-east adjoint arrows of length nx100 units
+\def\basicseadjar[#1]{\sdbicase{\SEADJAR}{}{}{#100}}%
+
+% pair of south-east adjoint arrows
+\newcommand{\seadjar}{\@ifnextchar[{\basicseadjar}{\basicseadjar[59]}}%
+
+% pair of south-east adjoint arrows with names [1][2] and length nx100 units
+\def\basicSeadjar[#1]#2#3{\sdbicase{\SEADJAR}{#2}{#3}{#100}}%
+
+% pair of south-east adjoint arrows with names
+\newcommand{\Seadjar}{\@ifnextchar[{\basicSeadjar}{\basicSeadjar[59]}}%
+\let\seadjaR=\Seadjar
+
+% NORTH-WEST ARROWS
+
+% \NWAR{n} draws a north-west arrow of length nx100 units
+\newcommand{\NWAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\vector(-1,1){#1}}%
+\end{picture}}%
+
+% \NWBIAR{n} draws a pair of north-west arrows of length n units
+\newcommand{\NWBIAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\put(-\value{x},-\value{x}){\vector(-1,1){#1}}%
+\put(\value{x},\value{x}){\vector(-1,1){#1}}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\end{picture}}\end{picture}}%
+
+% \NWADJAR{n} draws a north-west pair of adjoint arrows of length n units
+\newcommand{\NWADJAR}[1]{%
+\Y=#1%
+\divide\Y by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(-\value{x},-\value{x}){\vector(-1,1){#1}}%
+\end{picture}}%
+\put(-\Y,\Y){\begin{picture}(0,0)%
+\truex{247}%
+\monolength=#1%
+\advance\monolength by -\value{x}%
+\epilength=#1%
+\advance\epilength by \value{x}%
+\put(\value{x},\value{x}){\vector(1,-1){#1}}%
+\end{picture}}\end{picture}}%
+
+% All the following commands draw north-west arrows
+
+% north-west arrow of length nx100 units
+\def\basicnwar[#1]{\sdcase{\NWAR}{}{}{#100}}%
+
+% north-west arrow
+\newcommand{\nwar}{\@ifnextchar[{\basicnwar}{\basicnwar[59]}}%
+
+% north-west arrow with upper name [1] and length nx100 units
+\def\basicNwar[#1]#2{\sdcase{\NWAR}{#2}{}{#100}}%
+
+% north-west arrow with upper name
+\newcommand{\Nwar}{\@ifnextchar[{\basicNwar}{\basicNwar[59]}}%
+
+% north-west arrow with lower name [1] and length nx100 units
+\def\basicnwaR[#1]#2{\sdcase{\NWAR}{}{#2}{#100}}%
+
+% north-west arrow with lower name [1]
+\newcommand{\nwaR}{\@ifnextchar[{\basicnwaR}{\basicnwaR[59]}}%
+
+% pair of north-west arrows of length nx100 units
+\def\basicnwbiar[#1]{\sdbicase{\NWBIAR}{}{}{#100}}%
+
+% pair of north-west arrows
+\newcommand{\nwbiar}{\@ifnextchar[{\basicnwbiar}{\basicnwbiar[59]}}%
+
+% pair of north-west arrows with names [1][2] and length nx100 units
+\def\basicNwbiar[#1]#2#3{\sdbicase{\NWBIAR}{#2}{#3}{#100}}%
+
+% pair of north-west arrows with names
+\newcommand{\Nwbiar}{\@ifnextchar[{\basicNwbiar}{\basicNwbiar[59]}}%
+\let\nwbiaR=\Nwbiar
+
+% pair of north-west adjoint arrows of length nx100 units
+\def\basicnwadjar[#1]{\sdbicase{\NWADJAR}{}{}{#100}}%
+
+% pair of north-west adjoint arrows
+\newcommand{\nwadjar}{\@ifnextchar[{\basicnwadjar}{\basicnwadjar[59]}}%
+
+% pair of north-west adjoint arrows with names [1][2] and length nx100 units
+\def\basicNwadjar[#1]#2#3{\sdbicase{\NWADJAR}{#2}{#3}{#100}}%
+
+% pair of north-west adjoint arrows with names
+\newcommand{\Nwadjar}{\@ifnextchar[{\basicNwadjar}{\basicNwadjar[59]}}%
+\let\nwadjaR=\Nwadjar
+
+% EAST-NORTH-EAST ARROWS
+
+% The following commands produce east-north-east arrows
+% of horizontal extent n units
+
+% \ENEAR{f}{g}{n} draws a east-north-east arrow with names f, g
+% and length n units
+\newcommand{\ENEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\vector(2,1){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEBIAR{f}{g}{n} draws a pair of east-north-east arrows
+% with names f,g and length n units
+\newcommand{\ENEBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\put(-\value{x},\value{y}){\vector(2,1){#3}}%
+\put(\value{x},-\value{y}){\vector(2,1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \ENEADJAR{f}{g}{n} draws a east-north-east pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\ENEADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\vector(2,1){#3}}%
+\put(\monolength,\secondepilength){\vector(-2,-1){#3}}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce east-north-east arrows;
+% the default length is 13300 units
+
+% basic east-north-east arrow
+\def\basicenear[#1]{\ENEAR{}{}{#100}}%
+
+% east-north-east arrow
+\newcommand{\enear}{\@ifnextchar[{\basicenear}{\basicenear[133]}}%
+
+% basic east-north-east arrow with upper name
+\def\basicEnear[#1]#2{\ENEAR{#2}{}{#100}}%
+
+% east-north-east arrow with upper name
+\newcommand{\Enear}{\@ifnextchar[{\basicEnear}{\basicEnear[133]}}%
+
+% basic east-north-east arrow with lower name
+\def\basiceneaR[#1]#2{\ENEAR{}{#2}{#100}}%
+
+% east-north-east arrow with lower name
+\newcommand{\eneaR}{\@ifnextchar[{\basiceneaR}{\basiceneaR[133]}}%
+
+% basic east-north-east pair of arrows
+\def\basicenebiar[#1]{\ENEBIAR{}{}{#100}}%
+
+% east-north-east pair of arrows
+\newcommand{\enebiar}{\@ifnextchar[{\basicenebiar}{\basicenebiar[133]}}%
+
+% basic east-north-east pair of arrows with names
+\def\basicEnebiar[#1]#2#3{\ENEBIAR{#2}{#3}{#100}}%
+
+% east-north-east pair of arrows with names
+\newcommand{\Enebiar}{\@ifnextchar[{\basicEnebiar}{\basicEnebiar[133]}}%
+\let\enebiaR=\Enebiar
+
+% basic east-north-east pair of adjoint arrows
+\def\basiceneadjar[#1]{\ENEADJAR{}{}{#100}}%
+
+% east-north-east pair of adjoint arrows
+\newcommand{\eneadjar}{\@ifnextchar[{\basiceneadjar}{\basiceneadjar[133]}}%
+
+% basic east-north-east pair of adjoint arrows with names
+\def\basicEneadjar[#1]#2#3{\ENEADJAR{#2}{#3}{#100}}%
+
+% east-north-east pair of adjoint arrows with names
+\newcommand{\Eneadjar}{\@ifnextchar[{\basicEneadjar}{\basicEneadjar[133]}}%
+\let\eneadjaR=\Eneadjar
+
+% EAST-SOUTH-EAST ARROWS
+
+% The following commands produce east-south-east arrows
+% of horizontal extent n units
+
+% \ESEAR{f}{g}{n} draws a east-south-east arrow with names f, g
+% and length n units
+\newcommand{\ESEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\vector(2,-1){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEBIAR{f}{g}{n} draws a pair of east-south-east arrows
+% with names f,g and length n units
+\newcommand{\ESEBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\put(-\value{x},-\value{y}){\vector(2,-1){#3}}%
+\put(\value{x},\value{y}){\vector(2,-1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \ESEADJAR{f}{g}{n} draws a east-south-east pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\ESEADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\vector(2,-1){#3}}%
+\put(\epilength,-\secondmonolength){\vector(-2,1){#3}}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce east-south-east arrows;
+% the default length is 13300 units
+
+% basic east-south-east arrow
+\def\basicesear[#1]{\ESEAR{}{}{#100}}%
+
+% east-south-east arrow
+\newcommand{\esear}{\@ifnextchar[{\basicesear}{\basicesear[133]}}%
+
+% basic east-south-east arrow with upper name
+\def\basicEsear[#1]#2{\ESEAR{#2}{}{#100}}%
+
+% east-south-east arrow with upper name
+\newcommand{\Esear}{\@ifnextchar[{\basicEsear}{\basicEsear[133]}}%
+
+% basic east-south-east arrow with lower name
+\def\basiceseaR[#1]#2{\ESEAR{}{#2}{#100}}%
+
+% east-south-east arrow with lower name
+\newcommand{\eseaR}{\@ifnextchar[{\basiceseaR}{\basiceseaR[133]}}%
+
+% basic east-south-east pair of arrows
+\def\basicesebiar[#1]{\ESEBIAR{}{}{#100}}%
+
+% east-south-east pair of arrows
+\newcommand{\esebiar}{\@ifnextchar[{\basicesebiar}{\basicesebiar[133]}}%
+
+% basic east-south-east pair of arrows with names
+\def\basicEsebiar[#1]#2#3{\ESEBIAR{#2}{#3}{#100}}%
+
+% east-south-east pair of arrows with names
+\newcommand{\Esebiar}{\@ifnextchar[{\basicEsebiar}{\basicEsebiar[133]}}%
+\let\esebiaR=\Esebiar
+
+% basic east-south-east pair of adjoint arrows
+\def\basiceseadjar[#1]{\ESEADJAR{}{}{#100}}%
+
+% east-south-east pair of adjoint arrows
+\newcommand{\eseadjar}{\@ifnextchar[{\basiceseadjar}{\basiceseadjar[133]}}%
+
+% basic east-south-east pair of adjoint arrows with names
+\def\basicEseadjar[#1]#2#3{\ESEADJAR{#2}{#3}{#100}}%
+
+% east-south-east pair of adjoint arrows with names
+\newcommand{\Eseadjar}{\@ifnextchar[{\basicEseadjar}{\basicEseadjar[133]}}%
+\let\eseadjaR=\Eseadjar
+
+% WEST-SOUTH-WEST ARROWS
+
+% The following commands produce west-south-west arrows
+% of horizontal extent n units
+
+% \WSWAR{f}{g}{n} draws a west-south-west arrow with names f, g
+% and length n units
+\newcommand{\WSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\vector(-2,-1){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWBIAR{f}{g}{n} draws a pair of west-south-west arrows
+% with names f,g and length n units
+\newcommand{\WSWBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\put(-\value{x},\value{y}){\vector(-2,-1){#3}}%
+\put(\value{x},-\value{y}){\vector(-2,-1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \WSWADJAR{f}{g}{n} draws a west-south-west pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\WSWADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\vector(-2,-1){#3}}%
+\put(-\epilength,-\secondmonolength){\vector(2,1){#3}}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce west-south-west arrows;
+% the default length is 13300 units
+
+% basic west-south-west arrow
+\def\basicwswar[#1]{\WSWAR{}{}{#100}}%
+
+% west-south-west arrow
+\newcommand{\wswar}{\@ifnextchar[{\basicwswar}{\basicwswar[133]}}%
+
+% basic west-south-west arrow with upper name
+\def\basicWswar[#1]#2{\WSWAR{#2}{}{#100}}%
+
+% west-south-west arrow with upper name
+\newcommand{\Wswar}{\@ifnextchar[{\basicWswar}{\basicWswar[133]}}%
+
+% basic west-south-west arrow with lower name
+\def\basicwswaR[#1]#2{\WSWAR{}{#2}{#100}}%
+
+% west-south-west arrow with lower name
+\newcommand{\wswaR}{\@ifnextchar[{\basicwswaR}{\basicwswaR[133]}}%
+
+% basic west-south-west pair of arrows
+\def\basicwswbiar[#1]{\WSWBIAR{}{}{#100}}%
+
+% west-south-west pair of arrows
+\newcommand{\wswbiar}{\@ifnextchar[{\basicwswbiar}{\basicwswbiar[133]}}%
+
+% basic west-south-west pair of arrows with names
+\def\basicWswbiar[#1]#2#3{\WSWBIAR{#2}{#3}{#100}}%
+
+% west-south-west pair of arrows with names
+\newcommand{\Wswbiar}{\@ifnextchar[{\basicWswbiar}{\basicWswbiar[133]}}%
+\let\wswbiaR=\Wswbiar
+
+% basic west-south-west pair of adjoint arrows
+\def\basicwswadjar[#1]{\WSWADJAR{}{}{#100}}%
+
+% west-south-west pair of adjoint arrows
+\newcommand{\wswadjar}{\@ifnextchar[{\basicwswadjar}{\basicwswadjar[133]}}%
+
+% basic west-south-west pair of adjoint arrows with names
+\def\basicWswadjar[#1]#2#3{\WSWADJAR{#2}{#3}{#100}}%
+
+% west-south-west pair of adjoint arrows with names
+\newcommand{\Wswadjar}{\@ifnextchar[{\basicWswadjar}{\basicWswadjar[133]}}%
+\let\wswadjaR=\Wswadjar
+
+% WEST-NORTH-WEST ARROWS
+
+% The following commands produce west-north-west arrows
+% of horizontal extent n units
+
+% \WNWAR{f}{g}{n} draws a west-north-west arrow with names f, g
+% and length n units
+\newcommand{\WNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\vector(-2,1){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWBIAR{f}{g}{n} draws a pair of west-north-west arrows
+% with names f,g and length n units
+\newcommand{\WNWBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\put(-\value{x},-\value{y}){\vector(-2,1){#3}}%
+\put(\value{x},\value{y}){\vector(-2,1){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \WNWADJAR{f}{g}{n} draws a west-north-west pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\WNWADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=\Y%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\begin{picture}(0,0)%
+\truex{156}\truey{313}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Y%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Y%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\vector(-2,1){#3}}%
+\put(-\monolength,\secondepilength){\vector(2,-1){#3}}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce west-north-west arrows;
+% the default length is 13300 units
+
+% basic west-north-west arrow
+\def\basicwnwar[#1]{\WNWAR{}{}{#100}}%
+
+% west-north-west arrow
+\newcommand{\wnwar}{\@ifnextchar[{\basicwnwar}{\basicwnwar[133]}}%
+
+% basic west-north-west arrow with upper name
+\def\basicWnwar[#1]#2{\WNWAR{#2}{}{#100}}%
+
+% west-north-west arrow with upper name
+\newcommand{\Wnwar}{\@ifnextchar[{\basicWnwar}{\basicWnwar[133]}}%
+
+% basic west-north-west arrow with lower name
+\def\basicwnwaR[#1]#2{\WNWAR{}{#2}{#100}}%
+
+% west-north-west arrow with lower name
+\newcommand{\wnwaR}{\@ifnextchar[{\basicwnwaR}{\basicwnwaR[133]}}%
+
+% basic west-north-west distributor
+\def\basicwnwdist[#1]{\WNWDIST{}{}{#100}}%
+
+% basic west-north-west pair of arrows
+\def\basicwnwbiar[#1]{\WNWBIAR{}{}{#100}}%
+
+% west-north-west pair of arrows
+\newcommand{\wnwbiar}{\@ifnextchar[{\basicwnwbiar}{\basicwnwbiar[133]}}%
+
+% basic west-north-west pair of arrows with names
+\def\basicWnwbiar[#1]#2#3{\WNWBIAR{#2}{#3}{#100}}%
+
+% west-north-west pair of arrows with names
+\newcommand{\Wnwbiar}{\@ifnextchar[{\basicWnwbiar}{\basicWnwbiar[133]}}%
+\let\wnwbiaR=\Wnwbiar
+
+% basic west-north-west pair of adjoint arrows
+\def\basicwnwadjar[#1]{\WNWADJAR{}{}{#100}}%
+
+% west-north-west pair of adjoint arrows
+\newcommand{\wnwadjar}{\@ifnextchar[{\basicwnwadjar}{\basicwnwadjar[133]}}%
+
+% basic west-north-west pair of adjoint arrows with names
+\def\basicWnwadjar[#1]#2#3{\WNWADJAR{#2}{#3}{#100}}%
+
+% west-north-west pair of adjoint arrows with names
+\newcommand{\Wnwadjar}{\@ifnextchar[{\basicWnwadjar}{\basicWnwadjar[133]}}%
+\let\wnwadjaR=\Wnwadjar
+
+% NORTH-NORTH-EAST ARROWS
+
+% The following commands produce north-north-east arrows
+% of horizontal extent n units
+
+% \NNEAR{f}{g}{n} draws a north-north-east arrow with names f, g
+% and length n units
+\newcommand{\NNEAR}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,-#3){\vector(1,2){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEBIAR{f}{g}{n} draws a pair of north-north-east arrows
+% with names f,g and length n units
+\newcommand{\NNEBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\put(-\value{x},\value{y}){\vector(1,2){#3}}%
+\put(\value{x},-\value{y}){\vector(1,2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \NNEADJAR{f}{g}{n} draws a north-north-east pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\NNEADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,-#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\vector(1,2){#3}}%
+\put(\monolength,\secondepilength){\vector(-1,-2){#3}}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce north-north-east arrows;
+% the default length is 6700 units
+
+% basic north-north-east arrow
+\def\basicnnear[#1]{\NNEAR{}{}{#100}}%
+
+% north-north-east arrow
+\newcommand{\nnear}{\@ifnextchar[{\basicnnear}{\basicnnear[67]}}%
+
+% basic north-north-east arrow with upper name
+\def\basicNnear[#1]#2{\NNEAR{#2}{}{#100}}%
+
+% north-north-east arrow with upper name
+\newcommand{\Nnear}{\@ifnextchar[{\basicNnear}{\basicNnear[67]}}%
+
+% basic north-north-east arrow with lower name
+\def\basicnneaR[#1]#2{\NNEAR{}{#2}{#100}}%
+
+% north-north-east arrow with lower name
+\newcommand{\nneaR}{\@ifnextchar[{\basicnneaR}{\basicnneaR[67]}}%
+
+% basic north-north-east pair of arrows
+\def\basicnnebiar[#1]{\NNEBIAR{}{}{#100}}%
+
+% north-north-east pair of arrows
+\newcommand{\nnebiar}{\@ifnextchar[{\basicnnebiar}{\basicnnebiar[67]}}%
+
+% basic north-north-east pair of arrows with names
+\def\basicNnebiar[#1]#2#3{\NNEBIAR{#2}{#3}{#100}}%
+
+% north-north-east pair of arrows with names
+\newcommand{\Nnebiar}{\@ifnextchar[{\basicNnebiar}{\basicNnebiar[67]}}%
+\let\nnebiaR=\Nnebiar
+
+% basic north-north-east pair of adjoint arrows
+\def\basicnneadjar[#1]{\NNEADJAR{}{}{#100}}%
+
+% north-north-east pair of adjoint arrows
+\newcommand{\nneadjar}{\@ifnextchar[{\basicnneadjar}{\basicnneadjar[67]}}%
+
+% basic north-north-east pair of adjoint arrows with names
+\def\basicNneadjar[#1]#2#3{\NNEADJAR{#2}{#3}{#100}}%
+
+% north-north-east pair of adjoint arrows with names
+\newcommand{\Nneadjar}{\@ifnextchar[{\basicNneadjar}{\basicNneadjar[67]}}%
+\let\nneadjaR=\Nneadjar
+
+% SOUTH-SOUTH-EAST ARROWS
+
+% The following commands produce south-south-east arrows
+% of horizontal extent n units
+
+% \SSEAR{f}{g}{n} draws a south-south-east arrow with names f, g
+% and length n units
+\newcommand{\SSEAR}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(-\Z,#3){\vector(1,-2){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEBIAR{f}{g}{n} draws a pair of south-south-east arrows
+% with names f,g and length n units
+\newcommand{\SSEBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\put(-\value{x},-\value{y}){\vector(1,-2){#3}}%
+\put(\value{x},\value{y}){\vector(1,-2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \SSEADJAR{f}{g}{n} draws a south-south-east pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\SSEADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(-\Y,#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\vector(1,-2){#3}}%
+\put(\epilength,-\secondmonolength){\vector(-1,2){#3}}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce south-south-east arrows;
+% the default length is 6700 units
+
+% basic south-south-east arrow
+\def\basicssear[#1]{\SSEAR{}{}{#100}}%
+
+% south-south-east arrow
+\newcommand{\ssear}{\@ifnextchar[{\basicssear}{\basicssear[67]}}%
+
+% basic south-south-east arrow with upper name
+\def\basicSsear[#1]#2{\SSEAR{#2}{}{#100}}%
+
+% south-south-east arrow with upper name
+\newcommand{\Ssear}{\@ifnextchar[{\basicSsear}{\basicSsear[67]}}%
+
+% basic south-south-east arrow with lower name
+\def\basicsseaR[#1]#2{\SSEAR{}{#2}{#100}}%
+
+% south-south-east arrow with lower name
+\newcommand{\sseaR}{\@ifnextchar[{\basicsseaR}{\basicsseaR[67]}}%
+
+% basic south-south-east pair of arrows
+\def\basicssebiar[#1]{\SSEBIAR{}{}{#100}}%
+
+% south-south-east pair of arrows
+\newcommand{\ssebiar}{\@ifnextchar[{\basicssebiar}{\basicssebiar[67]}}%
+
+% basic south-south-east pair of arrows with names
+\def\basicSsebiar[#1]#2#3{\SSEBIAR{#2}{#3}{#100}}%
+
+% south-south-east pair of arrows with names
+\newcommand{\Ssebiar}{\@ifnextchar[{\basicSsebiar}{\basicSsebiar[67]}}%
+\let\ssebiaR=\Ssebiar
+
+% basic south-south-east pair of adjoint arrows
+\def\basicsseadjar[#1]{\SSEADJAR{}{}{#100}}%
+
+% south-south-east pair of adjoint arrows
+\newcommand{\sseadjar}{\@ifnextchar[{\basicsseadjar}{\basicsseadjar[67]}}%
+
+% basic south-south-east pair of adjoint arrows with names
+\def\basicSseadjar[#1]#2#3{\SSEADJAR{#2}{#3}{#100}}%
+
+% south-south-east pair of adjoint arrows with names
+\newcommand{\Sseadjar}{\@ifnextchar[{\basicSseadjar}{\basicSseadjar[67]}}%
+\let\sseadjaR=\Sseadjar
+
+% SOUTH-SOUTH-WEST ARROWS
+
+% The following commands produce south-south-west arrows
+% of horizontal extent n units
+
+% \SSWAR{f}{g}{n} draws a south-south-west arrow with names f, g
+% and length n units
+\newcommand{\SSWAR}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Z,#3){\vector(-1,-2){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWBIAR{f}{g}{n} draws a pair of south-south-west arrows
+% with names f,g and length n units
+\newcommand{\SSWBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\put(-\value{x},\value{y}){\vector(-1,-2){#3}}%
+\put(\value{x},-\value{y}){\vector(-1,-2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% \SSWADJAR{f}{g}{n} draws a south-south-west pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\SSWADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(\value{x},-\value{y}){\vector(-1,-2){#3}}%
+\put(-\epilength,-\secondmonolength){\vector(1,2){#3}}%
+\end{picture}}
+\truex{300}\truey{1000}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce south-south-west arrows;
+% the default length is 6700 units
+
+% basic south-south-west arrow
+\def\basicsswar[#1]{\SSWAR{}{}{#100}}%
+
+% south-south-west arrow
+\newcommand{\sswar}{\@ifnextchar[{\basicsswar}{\basicsswar[67]}}%
+
+% basic south-south-west arrow with upper name
+\def\basicSswar[#1]#2{\SSWAR{#2}{}{#100}}%
+
+% south-south-west arrow with upper name
+\newcommand{\Sswar}{\@ifnextchar[{\basicSswar}{\basicSswar[67]}}%
+
+% basic south-south-west arrow with lower name
+\def\basicsswaR[#1]#2{\SSWAR{}{#2}{#100}}%
+
+% south-south-west arrow with lower name
+\newcommand{\sswaR}{\@ifnextchar[{\basicsswaR}{\basicsswaR[67]}}%
+
+% basic south-south-west pair of arrows
+\def\basicsswbiar[#1]{\SSWBIAR{}{}{#100}}%
+
+% south-south-west pair of arrows
+\newcommand{\sswbiar}{\@ifnextchar[{\basicsswbiar}{\basicsswbiar[67]}}%
+
+% basic south-south-west pair of arrows with names
+\def\basicSswbiar[#1]#2#3{\SSWBIAR{#2}{#3}{#100}}%
+
+% south-south-west pair of arrows with names
+\newcommand{\Sswbiar}{\@ifnextchar[{\basicSswbiar}{\basicSswbiar[67]}}%
+\let\sswbiaR=\Sswbiar
+
+% basic south-south-west pair of adjoint arrows
+\def\basicsswadjar[#1]{\SSWADJAR{}{}{#100}}%
+
+% south-south-west pair of adjoint arrows
+\newcommand{\sswadjar}{\@ifnextchar[{\basicsswadjar}{\basicsswadjar[67]}}%
+
+% basic south-south-west pair of adjoint arrows with names
+\def\basicSswadjar[#1]#2#3{\SSWADJAR{#2}{#3}{#100}}%
+
+% south-south-west pair of adjoint arrows with names
+\newcommand{\Sswadjar}{\@ifnextchar[{\basicSswadjar}{\basicSswadjar[67]}}%
+\let\sswadjaR=\Sswadjar
+
+% NORTH-NORTH-WEST ARROWS
+
+% The following commands produce north-north-west arrows
+% of horizontal extent n units
+
+% \NNWAR{f}{g}{n} draws a north-north-west arrow with names f, g
+% and length n units
+\newcommand{\NNWAR}[3]{\testdiagrammode%
+\Z=#3%
+\divide\Z by 2%
+\begin{picture}(0,0)%
+\put(\Z,-#3){\vector(-1,2){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWBIAR{f}{g}{n} draws a pair of north-north-west arrows
+% with names f,g and length n units
+\newcommand{\NNWBIAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\put(-\value{x},-\value{y}){\vector(-1,2){#3}}%
+\put(\value{x},\value{y}){\vector(-1,2){#3}}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% \NNWADJAR{f}{g}{n} draws a north-north-west pair of adjoint arrows
+% with names f,g and length n units
+\newcommand{\NNWADJAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide\Y by 2%
+\Z=#3%
+\multiply \Z by 2%
+\begin{picture}(0,0)%
+\put(\Y,-#3){\begin{picture}(0,0)%
+\truex{313}\truey{156}%
+\monolength=#3%
+\advance\monolength by -\value{x}%
+\epilength=#3%
+\advance\epilength by \value{x}%
+\secondmonolength=\Z%
+\advance\secondmonolength by -\value{y}%
+\secondepilength=\Z%
+\advance\secondepilength by \value{y}%
+\put(-\value{x},-\value{y}){\vector(-1,2){#3}}%
+\put(-\monolength,\secondepilength){\vector(1,-2){#3}}%
+\end{picture}}
+\truex{400}\truey{1000}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% The following commands produce north-north-west arrows;
+% the default length is 6700 units
+
+% basic north-north-west arrow
+\def\basicnnwar[#1]{\NNWAR{}{}{#100}}%
+
+% north-north-west arrow
+\newcommand{\nnwar}{\@ifnextchar[{\basicnnwar}{\basicnnwar[67]}}%
+
+% basic north-north-west arrow with upper name
+\def\basicNnwar[#1]#2{\NNWAR{#2}{}{#100}}%
+
+% north-north-west arrow with upper name
+\newcommand{\Nnwar}{\@ifnextchar[{\basicNnwar}{\basicNnwar[67]}}%
+
+% basic north-north-west arrow with lower name
+\def\basicnnwaR[#1]#2{\NNWAR{}{#2}{#100}}%
+
+% north-north-west arrow with lower name
+\newcommand{\nnwaR}{\@ifnextchar[{\basicnnwaR}{\basicnnwaR[67]}}%
+
+% basic north-north-east pair of arrows
+\def\basicnnwbiar[#1]{\NNWBIAR{}{}{#100}}%
+
+% north-north-east pair of arrows
+\newcommand{\nnwbiar}{\@ifnextchar[{\basicnnwbiar}{\basicnnwbiar[67]}}%
+
+% basic north-north-east pair of arrows with names
+\def\basicNnwbiar[#1]#2#3{\NNWBIAR{#2}{#3}{#100}}%
+
+% north-north-east pair of arrows with names
+\newcommand{\Nnwbiar}{\@ifnextchar[{\basicNnwbiar}{\basicNnwbiar[67]}}%
+\let\nnwbiaR=\Nnwbiar
+
+% basic north-north-east pair of adjoint arrows
+\def\basicnnwadjar[#1]{\NNWADJAR{}{}{#100}}%
+
+% north-north-east pair of adjoint arrows
+\newcommand{\nnwadjar}{\@ifnextchar[{\basicnnwadjar}{\basicnnwadjar[67]}}%
+
+% basic north-north-east pair of adjoint arrows with names
+\def\basicNnwadjar[#1]#2#3{\NNWADJAR{#2}{#3}{#100}}%
+
+% north-north-east pair of adjoint arrows with names
+\newcommand{\Nnwadjar}{\@ifnextchar[{\basicNnwadjar}{\basicNnwadjar[67]}}%
+\let\nnwadjaR=\Nnwadjar
+
+% EAST-EAST-NORTH-EAST ARROWS
+% default length: 21100 units
+
+% \EENEAR{f}{g}{n} draws a east-east-north-east arrow with names f, g
+% and length n units
+\newcommand{\EENEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\vector(3,1){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic east-east-north-east arrow
+\def\basiceenear[#1]{\EENEAR{}{}{#100}}%
+
+% east-east-north-east arrow
+\newcommand{\eenear}{\@ifnextchar[{\basiceenear}{\basiceenear[211]}}%
+
+% basic east-east-north-east arrow with upper name
+\def\basicEenear[#1]#2{\EENEAR{#2}{}{#100}}%
+
+% east-east-north-east arrow with upper name
+\newcommand{\Eenear}{\@ifnextchar[{\basicEenear}{\basicEenear[211]}}%
+
+% basic east-east-north-east arrow with lower name
+\def\basiceeneaR[#1]#2{\EENEAR{}{#2}{#100}}%
+
+% east-east-north-east arrow with lower name
+\newcommand{\eeneaR}{\@ifnextchar[{\basiceeneaR}{\basiceeneaR[211]}}%
+
+% EAST-EAST-SOUTH-EAST ARROWS
+% default length: 21100 units
+
+% \EESEAR{f}{g}{n} draws an east-east-south-east arrow with names f, g
+% and length n units
+\newcommand{\EESEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\vector(3,-1){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic east-east-south-east arrow
+\def\basiceesear[#1]{\EESEAR{}{}{#100}}%
+
+% east-east-south-east arrow
+\newcommand{\eesear}{\@ifnextchar[{\basiceesear}{\basiceesear[211]}}%
+
+% basic east-east-south-east arrow with upper name
+\def\basicEesear[#1]#2{\EESEAR{#2}{}{#100}}%
+
+% east-east-south-east arrow with upper name
+\newcommand{\Eesear}{\@ifnextchar[{\basicEesear}{\basicEesear[211]}}%
+
+% basic east-east-south-east arrow with lower name
+\def\basiceeseaR[#1]#2{\EESEAR{}{#2}{#100}}%
+
+% east-east-south-east arrow with lower name
+\newcommand{\eeseaR}{\@ifnextchar[{\basiceeseaR}{\basiceeseaR[211]}}%
+
+% WEST-WEST-NORTH-WEST ARROWs
+% default length: 21100 units
+
+% \WWNWAR{f}{g}{n} draws a west-west-north-west arrow with names f, g
+% and length n units
+\newcommand{\WWNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\vector(-3,1){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic west-west-north-west arrow
+\def\basicwwnwar[#1]{\WWNWAR{}{}{#100}}%
+
+% west-west-north-west arrow
+\newcommand{\wwnwar}{\@ifnextchar[{\basicwwnwar}{\basicwwnwar[211]}}%
+
+% basic west-west-north-west arrow with upper name
+\def\basicWwnwar[#1]#2{\WWNWAR{#2}{}{#100}}%
+
+% west-west-north-west arrow with upper name
+\newcommand{\Wwnwar}{\@ifnextchar[{\basicWwnwar}{\basicWwnwar[211]}}%
+
+% basic west-west-north-west arrow with lower name
+\def\basicwwnwaR[#1]#2{\WWNWAR{}{#2}{#100}}%
+
+% west-west-north-west arrow with lower name
+\newcommand{\wwnwaR}{\@ifnextchar[{\basicwwnwaR}{\basicwwnwaR[211]}}%
+
+% WEST-WEST-SOUTH-WEST ARROWS
+% default length: 21100 units
+
+% \WWSWAR{f}{g} draws a west-west-south-west arrow with names f, g
+\newcommand{\WWSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\vector(-3,-1){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic west-west-south-west arrow
+\def\basicwwswar[#1]{\WWSWAR{}{}{#100}}%
+
+% west-west-south-west arrow
+\newcommand{\wwswar}{\@ifnextchar[{\basicwwswar}{\basicwwswar[211]}}%
+
+% basic west-west-south-west arrow with upper name
+\def\basicWwswar[#1]#2{\WWSWAR{#2}{}{#100}}%
+
+% west-west-south-west arrow with upper name
+\newcommand{\Wwswar}{\@ifnextchar[{\basicWwswar}{\basicWwswar[211]}}%
+
+% basic west-west-south-west arrow with lower name
+\def\basicwwswaR[#1]#2{\WWSWAR{}{#2}{#100}}%
+
+% west-west-south-west arrow with lower name
+\newcommand{\wwswaR}{\@ifnextchar[{\basicwwswaR}{\basicwwswaR[211]}}%
+
+
+% NORTH-NORTH-NORTH-EAST ARROWS
+% default length: 7100 units
+
+% \NNNEAR{f}{g}{n} draws a north-north-north-east arrow with names f, g
+% and length n units
+\newcommand{\NNNEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\multiply \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\vector(1,3){#3}}%
+\truex{100}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic north-north-north-east arrow
+\def\basicnnnear[#1]{\NNNEAR{}{}{#100}}%
+
+% north-north-north-east arrow
+\newcommand{\nnnear}{\@ifnextchar[{\basicnnnear}{\basicnnnear[71]}}%
+
+% basic north-north-north-east arrow with upper name
+\def\basicNnnear[#1]#2{\NNNEAR{#2}{}{#100}}%
+
+% north-north-north-east arrow with upper name
+\newcommand{\Nnnear}{\@ifnextchar[{\basicNnnear}{\basicNnnear[71]}}%
+
+% basic north-north-north-east arrow with lower name
+\def\basicnnneaR[#1]#2{\NNNEAR{}{#2}{#100}}%
+
+% north-north-north-east arrow with lower name
+\newcommand{\nnneaR}{\@ifnextchar[{\basicnnneaR}{\basicnnneaR[71]}}%
+
+% SOUTH-SOUTH-SOUTH-WEST ARROWS
+% default length: 7100 units
+
+% \SSSWAR{f}{g}{n} draws a south-south-south-west arrow with names f, g
+% and length n units
+\newcommand{\SSSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\multiply \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\vector(-1,-3){#3}}%
+\truex{100}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic south-south-south-west arrow
+\def\basicssswar[#1]{\SSSWAR{}{}{#100}}%
+
+% south-south-south-west arrow
+\newcommand{\ssswar}{\@ifnextchar[{\basicssswar}{\basicssswar[71]}}%
+
+% basic south-south-south-west arrow with upper name
+\def\basicSsswar[#1]#2{\SSSWAR{#2}{}{#100}}%
+
+% south-south-south-west arrow with upper name
+\newcommand{\Ssswar}{\@ifnextchar[{\basicSsswar}{\basicSsswar[71]}}%
+
+% basic south-south-south-west arrow with lower name
+\def\basicssswaR[#1]#2{\SSSWAR{}{#2}{#100}}%
+
+% south-south-south-west arrow with lower name
+\newcommand{\ssswaR}{\@ifnextchar[{\basicssswaR}{\basicssswaR[71]}}%
+
+% SOUTH-SOUTH-SOUTH-EAST ARROWS
+% default length: 7100 units
+
+% \SSSEAR{f}{g}{n} draws a south-south-south-east arrow with names f, g
+% and length n units
+\newcommand{\SSSEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\multiply \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\vector(1,-3){#3}}%
+\truex{200}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic south-south-south-east arrow
+\def\basicsssear[#1]{\SSSEAR{}{}{#100}}%
+
+% south-south-south-east arrow
+\newcommand{\sssear}{\@ifnextchar[{\basicsssear}{\basicsssear[71]}}%
+
+% basic south-south-south-east arrow with upper name
+\def\basicSssear[#1]#2{\SSSEAR{#2}{}{#100}}%
+
+% south-south-south-east arrow with upper name
+\newcommand{\Sssear}{\@ifnextchar[{\basicSssear}{\basicSssear[71]}}%
+
+% basic south-south-south-east arrow with lower name
+\def\basicssseaR[#1]#2{\SSSEAR{}{#2}{#100}}%
+
+% south-south-south-east arrow with lower name
+\newcommand{\ssseaR}{\@ifnextchar[{\basicssseaR}{\basicssseaR[71]}}%
+
+% NORTH-NORTH-NORTH-WEST ARROWS
+% default length: 7100 units
+
+% \NNNWAR{f}{g}{n} draws a north-north-north-west arrow with names f, g
+% and length n units
+\newcommand{\NNNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=\Y%
+\multiply \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\vector(-1,3){#3}}%
+\truex{200}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic north-north-north-west arrow
+\def\basicnnnwar[#1]{\NNNWAR{}{}{#100}}%
+
+% north-north-north-west arrow
+\newcommand{\nnnwar}{\@ifnextchar[{\basicnnnwar}{\basicnnnwar[71]}}%
+
+% basic north-north-north-west arrow with upper name
+\def\basicNnnwar[#1]#2{\NNNWAR{#2}{}{#100}}%
+
+% north-north-north-west arrow with upper name
+\newcommand{\Nnnwar}{\@ifnextchar[{\basicNnnwar}{\basicNnnwar[71]}}%
+
+% basic north-north-north-west arrow with lower name
+\def\basicnnnwaR[#1]#2{\NNNWAR{}{#2}{#100}}%
+
+% north-north-north-west arrow with lower name
+\newcommand{\nnnwaR}{\@ifnextchar[{\basicnnnwaR}{\basicnnnwaR[71]}}%
+
+% NORTH-EAST-EAST-NORTH-EAST ARROWS
+% default length: 21500 units
+
+% \NEENEAR{f}{g}{n} draws a north-east-east-north-east arrow with names f, g
+% and length n units
+\newcommand{\NEENEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\vector(3,2){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic north-east-east-north-east arrow
+\def\basicneenear[#1]{\NEENEAR{}{}{#100}}%
+
+% north-east-east-north-east arrow
+\newcommand{\neenear}{\@ifnextchar[{\basicneenear}{\basicneenear[215]}}%
+
+% basic north-east-east-north-east arrow with upper name
+\def\basicNeenear[#1]#2{\NEENEAR{#2}{}{#100}}%
+
+% north-east-east-north-east arrow with upper name
+\newcommand{\Neenear}{\@ifnextchar[{\basicNeenear}{\basicNeenear[215]}}%
+
+% basic north-east-east-north-east arrow with lower name
+\def\basicneeneaR[#1]#2{\NEENEAR{}{#2}{#100}}%
+
+% north-east-east-north-east arrow with lower name
+\newcommand{\neeneaR}{\@ifnextchar[{\basicneeneaR}{\basicneeneaR[215]}}%
+
+% SOUTH-EAST-EAST-SOUTH-EAST ARROWS
+% DEFAULT LENGTH: 21500 UNITS
+
+% \SEESEAR{f}{g} draws an sout-east-east-south-east arrow with names f, g
+% and length n units
+\newcommand{\SEESEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\vector(3,-2){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic south-east-east-south-east arrow
+\def\basicseesear[#1]{\SEESEAR{}{}{#100}}%
+
+% south-east-east-south-east arrow
+\newcommand{\seesear}{\@ifnextchar[{\basicseesear}{\basicseesear[215]}}%
+
+% basic south-east-east-south-east arrow with upper name
+\def\basicSeesear[#1]#2{\SEESEAR{#2}{}{#100}}%
+
+% south-east-east-south-east arrow with upper name
+\newcommand{\Seesear}{\@ifnextchar[{\basicSeesear}{\basicSeesear[215]}}%
+
+% basic south-east-east-south-east arrow with lower name
+\def\basicseeseaR[#1]#2{\SEESEAR{}{#2}{#100}}%
+
+% south-east-east-south-east arrow with lower name
+\newcommand{\seeseaR}{\@ifnextchar[{\basicseeseaR}{\basicseeseaR[215]}}%
+
+% NORTH-WEST-NORTH-NORTH-WEST ARROWS
+% default length: 21500 units
+
+% \NWWNWAR{f}{g}{n} draws a north-west-west-north-west arrow with names f, g
+% and length n units
+\newcommand{\NWWNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\vector(-3,2){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{y}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic north-west-west-north-west arrow
+\def\basicnwwnwar[#1]{\NWWNWAR{}{}{#100}}%
+
+% north-west-west-north-west arrow
+\newcommand{\nwwnwar}{\@ifnextchar[{\basicnwwnwar}{\basicnwwnwar[215]}}%
+
+% basic north-west-west-north-west arrow with upper name
+\def\basicNwwnwar[#1]#2{\NWWNWAR{#2}{}{#100}}%
+
+% north-west-west-north-west arrow with upper name
+\newcommand{\Nwwnwar}{\@ifnextchar[{\basicNwwnwar}{\basicNwwnwar[215]}}%
+
+% basic north-west-west-north-west arrow with lower name
+\def\basicnwwnwaR[#1]#2{\NWWNWAR{}{#2}{#100}}%
+
+% north-west-west-north-west arrow with lower name
+\newcommand{\nwwnwaR}{\@ifnextchar[{\basicnwwnwaR}{\basicnwwnwaR[215]}}%
+
+% SOUTH-WEST-WEST-SOUTH-WEST ARROWS
+% default length: 21500 units
+
+% \SWWSWAR{f}{g}{n} draws a south-west-west-south-west arrow with names f, g
+% and length n units
+\newcommand{\SWWSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\divide \Z by 3%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\vector(-3,-2){#3}}%
+\truex{200}\truey{800}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{y}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic south-west-west-south-west arrow
+\def\basicswwswar[#1]{\SWWSWAR{}{}{#100}}%
+
+% south-west-west-south-west arrow
+\newcommand{\swwswar}{\@ifnextchar[{\basicswwswar}{\basicswwswar[215]}}%
+
+% basic south-west-west-south-west arrow with upper name
+\def\basicSwwswar[#1]#2{\SWWSWAR{#2}{}{#100}}%
+
+% south-west-west-south-west arrow with upper name
+\newcommand{\Swwswar}{\@ifnextchar[{\basicSwwswar}{\basicSwwswar[215]}}%
+
+% basic south-west-west-south-west arrow with lower name
+\def\basicswwswaR[#1]#2{\SWWSWAR{}{#2}{#100}}%
+
+% south-west-west-south-west arrow with lower name
+\newcommand{\swwswaR}{\@ifnextchar[{\basicswwswaR}{\basicswwswaR[215]}}%
+
+
+% NORTH-EAST-NORTH-NORTH-EAST ARROWS
+% default length 14300 units
+
+% \NENNEAR{f}{g}{n} draws a north-east-north-north-east arrow with names f, g
+% and length n units
+\newcommand{\NENNEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\multiply \Z by 3%
+\divide \Z by 4%
+\begin{picture}(0,0)%
+\put(-\Y,-\Z){\vector(2,3){#3}}%
+\truex{100}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic north-east-north-north-east arrow
+\def\basicnennear[#1]{\NENNEAR{}{}{#100}}%
+
+% north-east-north-north-east arrow
+\newcommand{\nennear}{\@ifnextchar[{\basicnennear}{\basicnennear[143]}}%
+
+% basic north-east-north-north-east arrow with upper name
+\def\basicNennear[#1]#2{\NENNEAR{#2}{}{#100}}%
+
+% north-east-north-north-east arrow with upper name
+\newcommand{\Nennear}{\@ifnextchar[{\basicNennear}{\basicNennear[143]}}%
+
+% basic north-east-north-north-east arrow with lower name
+\def\basicnenneaR[#1]#2{\NENNEAR{}{#2}{#100}}%
+
+% north-east-north-north-east arrow with lower name
+\newcommand{\nenneaR}{\@ifnextchar[{\basicnenneaR}{\basicnenneaR[143]}}%
+
+% SOUTH-WEST-SOUTH-SOUTH-WEST ARROWS
+% default length: 14300 units
+
+% \SWSSWAR{f}{g}{n} draws a south-west-south-south-west arrow with names f, g
+% and length n units
+\newcommand{\SWSSWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\multiply \Z by 3%
+\divide \Z by 4%
+\begin{picture}(0,0)%
+\put(\Y,\Z){\vector(-2,-3){#3}}%
+\truex{100}\truez{600}%
+\put(-\value{x},\value{x}){\makebox(0,\value{z})[r]{${#1}$}}%
+\put(\value{x},-\value{z}){\makebox(0,\value{z})[l]{${#2}$}}%
+\end{picture}}%
+
+% basic south-west-south-south-west arrow
+\def\basicswsswar[#1]{\SWSSWAR{}{}{#100}}%
+
+% south-west-south-south-west arrow
+\newcommand{\swsswar}{\@ifnextchar[{\basicswsswar}{\basicswsswar[143]}}%
+
+% basic south-west-south-south-west arrow with upper name
+\def\basicSwsswar[#1]#2{\SWSSWAR{#2}{}{#100}}%
+
+% south-west-south-south-west arrow with upper name
+\newcommand{\Swsswar}{\@ifnextchar[{\basicSwsswar}{\basicSwsswar[143]}}%
+
+% basic south-west-south-south-west arrow with lower name
+\def\basicswsswaR[#1]#2{\SWSSWAR{}{#2}{#100}}%
+
+% south-west-south-south-west arrow with lower name
+\newcommand{\swsswaR}{\@ifnextchar[{\basicswsswaR}{\basicswsswaR[143]}}%
+
+% SOUT-EAST-SOUTH-SOUTH-EAST ARROWS
+% default length: 14300 units
+
+% \SESSEAR{f}{g}{n} draws a south-east-south-south-east arrow with names f, g
+% and length n units
+\newcommand{\SESSEAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\multiply \Z by 3%
+\divide \Z by 4%
+\begin{picture}(0,0)%
+\put(-\Y,\Z){\vector(2,-3){#3}}%
+\truex{200}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic south-east-south-south-east arrow
+\def\basicsessear[#1]{\SESSEAR{}{}{#100}}%
+
+% south-east-south-south-east arrow
+\newcommand{\sessear}{\@ifnextchar[{\basicsessear}{\basicsessear[143]}}%
+
+% basic south-east-south-south-east arrow with upper name
+\def\basicSessear[#1]#2{\SESSEAR{#2}{}{#100}}%
+
+% south-east-south-south-east arrow with upper name
+\newcommand{\Sessear}{\@ifnextchar[{\basicSessear}{\basicSessear[143]}}%
+
+% basic south-east-south-south-east arrow with lower name
+\def\basicsesseaR[#1]#2{\SESSEAR{}{#2}{#100}}%
+
+% south-east-south-south-east arrow with lower name
+\newcommand{\sesseaR}{\@ifnextchar[{\basicsesseaR}{\basicsesseaR[143]}}%
+
+% NORTH-WEST-NORTH-NORTH-WEST ARROWS
+% default length: 14300 units
+
+% \NWNNWAR{f}{g}{n} draws a north-west-north-north-west arrow with names f, g
+% and length n units
+\newcommand{\NWNNWAR}[3]{\testdiagrammode%
+\Y=#3%
+\divide \Y by 2%
+\Z=#3%
+\multiply \Z by 3%
+\divide \Z by 4%
+\begin{picture}(0,0)%
+\put(\Y,-\Z){\vector(-2,3){#3}}%
+\truex{200}\truez{600}%
+\put(\value{x},\value{x}){\makebox(0,\value{z})[l]{${#1}$}}%
+\put(-\value{x},-\value{z}){\makebox(0,\value{z})[r]{${#2}$}}%
+\end{picture}}%
+
+% basic north-west-north-north-west arrow
+\def\basicnwnnwar[#1]{\NWNNWAR{}{}{#100}}%
+
+% north-west-north-north-west arrow
+\newcommand{\nwnnwar}{\@ifnextchar[{\basicnwnnwar}{\basicnwnnwar[143]}}%
+
+% basic north-west-north-north-west arrow with upper name
+\def\basicNwnnwar[#1]#2{\NWNNWAR{#2}{}{#100}}%
+
+% north-west-north-north-west arrow with upper name
+\newcommand{\Nwnnwar}{\@ifnextchar[{\basicNwnnwar}{\basicNwnnwar[143]}}%
+
+% basic north-west-north-north-west arrow with lower name
+\def\basicnwnnwaR[#1]#2{\NWNNWAR{}{#2}{#100}}%
+
+% north-west-north-north-west arrow with lower name
+\newcommand{\nwnnwaR}{\@ifnextchar[{\basicnwnnwaR}{\basicnwnnwaR[143]}}%
+
+% HORIZONTAL CURVED ARROWS
+
+% The following commands produce horizontal curved arrows
+% default length: 160 units
+
+% North\East curved arrow with name [1] and length [2]x100 units
+\newcommand{\Necurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(0,\value{x}){\oval(#200,\value{y})[t]}%
+\put(0,\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
+\put(#200,0){\line(0,-1){\value{z}}}%
+\put(#200,-\value{z}){\shead}%
+\put(0,0){\line(0,-1){\value{z}}}\end{picture}}}%
+\truex{2500}%
+\put(0,\value{x}){\makebox(0,0)[b]{${#1}$}}%
+\end{picture}}%
+
+% basic north\east curved arrow
+\def\basicnecurvar[#1]{\Necurve{}{#1}}
+
+% north\east curved arrow
+\newcommand{\necurvar}{\@ifnextchar[{\basicnecurvar}{\basicnecurvar[160]}}%
+
+% basic north\east curved arrow with name
+\def\basicNecurvar[#1]#2{\Necurve{#2}{#1}}%
+
+% north\east curved arrow with name
+\newcommand{\Necurvar}{\@ifnextchar[{\basicNecurvar}{\basicNecurvar[160]}}%
+\let\necurvaR=\Necurvar
+
+% North\West curved arrow with name [1] and length [2]x100 units
+\newcommand{\Nwcurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(0,\value{x}){\oval(#200,\value{y})[t]}%
+\put(0,\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
+\put(#200,0){\line(0,-1){\value{z}}}%
+\put(0,0){\line(0,-1){\value{z}}}%
+\put(0,-\value{z}){\shead}%
+\end{picture}}}%
+\truex{2500}%
+\put(0,\value{x}){\makebox(0,0)[b]{${#1}$}}%
+\end{picture}}%
+
+% basic north\west curved arrow
+\def\basicnwcurvar[#1]{\Nwcurve{}{#1}}
+
+% north\west curved arrow
+\newcommand{\nwcurvar}{\@ifnextchar[{\basicnwcurvar}{\basicnwcurvar[160]}}%
+
+% basic north\west curved arrow with name
+\def\basicNwcurvar[#1]#2{\Nwcurve{#2}{#1}}%
+
+% north\west curved arrow with name
+\newcommand{\Nwcurvar}{\@ifnextchar[{\basicNwcurvar}{\basicNwcurvar[160]}}%
+\let\nwcurvaR=\Nwcurvar
+
+% South\East curved arrow with name [1] and length [2]x100 units
+\newcommand{\Securve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(0,-\value{x}){\oval(#200,\value{y})[b]}%
+\put(0,-\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
+\put(#200,0){\line(0,1){\value{z}}}%
+\put(0,0){\line(0,1){\value{z}}}%
+\put(#200,\value{z}){\nhead}%
+\end{picture}}}%
+\truex{2500}%
+\put(0,-\value{x}){\makebox(0,0)[t]{${#1}$}}%
+\end{picture}}%
+
+% basic south\east curved arrow
+\def\basicsecurvar[#1]{\Securve{}{#1}}
+
+% south\east curved arrow
+\newcommand{\securvar}{\@ifnextchar[{\basicsecurvar}{\basicsecurvar[160]}}%
+
+% basic south\east curved arrow with name
+\def\basicSecurvar[#1]#2{\Securve{#2}{#1}}%
+
+% south\east curved arrow with name
+\newcommand{\Securvar}{\@ifnextchar[{\basicSecurvar}{\basicSecurvar[160]}}%
+\let\securvaR=\Securvar
+
+% South\West curved arrow with name [1] and length [2]x100 units
+\newcommand{\Swcurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(0,-\value{x}){\oval(#200,\value{y})[b]}%
+\put(0,-\value{x}){\makebox(0,0){\begin{picture}(#200,0)%
+\put(#200,0){\line(0,1){\value{z}}}%
+\put(0,0){\line(0,1){\value{z}}}%
+\put(0,\value{z}){\nhead}%
+\end{picture}}}%
+\truex{2500}%
+\put(0,-\value{x}){\makebox(0,0)[t]{${#1}$}}%
+\end{picture}}%
+
+% basic south\west curved arrow
+\def\basicswcurvar[#1]{\Swcurve{}{#1}}
+
+% south\west curved arrow
+\newcommand{\swcurvar}{\@ifnextchar[{\basicswcurvar}{\basicswcurvar[160]}}%
+
+% basic south\west curved arrow with name
+\def\basicSwcurvar[#1]#2{\Swcurve{#2}{#1}}%
+
+% south\west curved arrow with name
+\newcommand{\Swcurvar}{\@ifnextchar[{\basicSwcurvar}{\basicSwcurvar[160]}}%
+\let\swcurvaR=\Swcurvar
+
+% VERTICAL CURVED ARROWS
+
+% The following commands produce vertical curved arrows
+% default length: 160pt
+
+% East\South curved arrow with name [1] and length [2]x100 units
+\newcommand{\Escurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1400}\truey{2000}\truez{200}%
+\put(\value{x},0){\oval(\value{y},#200)[r]}%
+\put(\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
+\put(0,0){\line(-1,0){\value{z}}}%
+\put(0,#200){\line(-1,0){\value{z}}}%
+\put(-\value{z},0){\whead}%
+\end{picture}}}%
+\truex{2500}%
+\put(\value{x},0){\makebox(0,0)[l]{${#1}$}}%
+\end{picture}}%
+
+% basic east\south curved arrow
+\def\basicescurvar[#1]{\Escurve{}{#1}}
+
+% east\south curved arrow
+\newcommand{\escurvar}{\@ifnextchar[{\basicescurvar}{\basicescurvar[160]}}%
+
+% basic east\south curved arrow with name
+\def\basicEscurvar[#1]#2{\Escurve{#2}{#1}}%
+
+% east\south curved arrow with name
+\newcommand{\Escurvar}{\@ifnextchar[{\basicEscurvar}{\basicEscurvar[160]}}%
+\let\escurvaR=\Escurvar
+
+% East\North curved arrow with name [1] and length [2]x100 units
+\newcommand{\Encurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1400}\truey{2000}\truez{200}%
+\put(\value{x},0){\oval(\value{y},#200)[r]}%
+\put(\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
+\put(0,0){\line(-1,0){\value{z}}}%
+\put(0,#200){\line(-1,0){\value{z}}}%
+\put(-\value{z},#200){\whead}%
+\end{picture}}}%
+\truex{2500}%
+\put(\value{x},0){\makebox(0,0)[l]{${#1}$}}%
+\end{picture}}%
+
+% basic east\north curved arrow
+\def\basicencurvar[#1]{\Encurve{}{#1}}
+
+% east\north curved arrow
+\newcommand{\encurvar}{\@ifnextchar[{\basicencurvar}{\basicencurvar[160]}}%
+
+% basic east\north curved arrow with name
+\def\basicEncurvar[#1]#2{\Encurve{#2}{#1}}%
+
+% east\north curved arrow with name
+\newcommand{\Encurvar}{\@ifnextchar[{\basicEncurvar}{\basicEncurvar[160]}}%
+\let\encurvaR=\Encurvar
+
+% West\South curved arrow with name [1] and length [2]x100 units
+\newcommand{\Wscurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(-\value{x},0){\oval(\value{y},#200)[l]}%
+\put(-\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
+\put(0,0){\line(1,0){\value{z}}}%
+\put(0,#200){\line(1,0){\value{z}}}%
+\put(\value{z},0){\ehead}%
+\end{picture}}}%
+\truex{2400}%
+\put(-\value{x},0){\makebox(0,0)[r]{${#1}$}}%
+\end{picture}}%
+
+% basic west\south curved arrow
+\def\basicwscurvar[#1]{\Wscurve{}{#1}}
+
+% west\south curved arrow
+\newcommand{\wscurvar}{\@ifnextchar[{\basicwscurvar}{\basicwscurvar[160]}}%
+
+% basic west\south curved arrow with name
+\def\basicWscurvar[#1]#2{\Wscurve{#2}{#1}}%
+
+% west\south curved arrow with name
+\newcommand{\Wscurvar}{\@ifnextchar[{\basicWscurvar}{\basicWscurvar[160]}}%
+\let\wscurvaR=\Wscurvar
+
+% West\North curved arrow with name [1] and length [2]x100 units
+\newcommand{\Wncurve}[2]%
+{\testdiagrammode\begin{picture}(0,0)%
+\truex{1300}\truey{2000}\truez{200}%
+\put(-\value{x},0){\oval(\value{y},#200)[l]}%
+\put(-\value{x},0){\makebox(0,0){\begin{picture}(0,#200)%
+\put(0,0){\line(1,0){\value{z}}}%
+\put(\value{z},#200){\ehead}%
+\put(0,#200){\line(1,0){\value{z}}}%
+\end{picture}}}%
+\truex{2400}%
+\put(-\value{x},0){\makebox(0,0)[r]{${#1}$}}%
+\end{picture}}%
+
+% basic west\north curved arrow
+\def\basicwncurvar[#1]{\Wncurve{}{#1}}
+
+% west\north curved arrow
+\newcommand{\wncurvar}{\@ifnextchar[{\basicwncurvar}{\basicwncurvar[160]}}%
+
+% basic west\north curved arrow with name
+\def\basicWncurvar[#1]#2{\Wncurve{#2}{#1}}%
+
+% west\north curved arrow with name
+\newcommand{\Wncurvar}{\@ifnextchar[{\basicWncurvar}{\basicWncurvar[160]}}%
+\let\wncurvaR=\Wncurvar
+
+\catcode`\@=12
diff --git a/macros/generic/diagrams/borceux/diagram/MultipleArrows b/macros/generic/diagrams/borceux/diagram/MultipleArrows
new file mode 100644
index 0000000000..9ac6aa2f85
--- /dev/null
+++ b/macros/generic/diagrams/borceux/diagram/MultipleArrows
@@ -0,0 +1,1313 @@
+%%% MACRO FILE FOR TRIPLE, QUADRUPLE AND QUINTUPLE ARROWS
+
+\catcode`\@=11
+
+% SPECIAL SYMBOLS
+
+% adjoint symbol
+\newcommand{\adj}{\begin{picture}(9,6)%
+\put(1,3){\line(1,0){6}}\put(7,0){\line(0,1){6}}%
+\end{picture}}%
+
+% commutative diagram symbol
+\newcommand{\com}{\begin{picture}(12,8)%
+\put(6,4){\oval(8,8)[b]}\put(6,4){\oval(8,8)[r]}%
+\put(6,8){\line(-1,0){2}}\end{picture}}%
+
+% natural transformation with names [1],[2],[3]
+\newcommand{\Nat}[3]{\raisebox{-2pt}%
+{\begin{picture}(34,15)%
+\put(2,10){\line(1,0){30}}%
+\put(32,10){\ehead}%
+\put(2,0){\line(1,0){30}}%
+\put(32,0){\ehead}%
+\put(13,2){$\Downarrow$}%
+\put(20,3){$\scriptstyle{#2}$}%
+\put(4,11){$\scriptstyle{#1}$}%
+\put(4,1){$\scriptstyle{#3}$}%
+\end{picture}}}%
+
+% natural transformation
+\newcommand{\nat}{\raisebox{-2pt}%
+{\begin{picture}(34,10)%
+\put(2,10){\line(1,0){30}}%
+\put(32,10){\ehead}%
+\put(2,0){\line(1,0){30}}%
+\put(32,0){\ehead}%
+\put(13,2){$\Downarrow$}%
+\end{picture}}}%
+
+% pair of natural transformations with names [1],[2],[3],[4],[5]
+\newcommand{\Binat}[5]{\raisebox{-7.5pt}%
+{\begin{picture}(34,25)%
+\put(2,20){\line(1,0){30}}%
+\put(32,20){\ehead}%
+\put(2,10){\line(1,0){30}}%
+\put(32,10){\ehead}%
+\put(2,0){\line(1,0){30}}%
+\put(32,0){\ehead}%
+\put(13,12){$\Downarrow$}%
+\put(13,2){$\Downarrow$}%
+\put(20,13){$\scriptstyle{#2}$}%
+\put(20,3){$\scriptstyle{#4}$}%
+\put(4,21){$\scriptstyle{#1}$}%
+\put(4,11){$\scriptstyle{#3}$}%
+\put(4,1){$\scriptstyle{#5}$}%
+\end{picture}}}%
+
+% pair of natural transformations
+\newcommand{\binat}{\raisebox{-7.5pt}%
+{\begin{picture}(34,20)%
+\put(2,20){\line(1,0){30}}%
+\put(32,20){\ehead}%
+\put(2,10){\line(1,0){30}}%
+\put(32,10){\ehead}%
+\put(2,0){\line(1,0){30}}%
+\put(32,0){\ehead}%
+\put(13,12){$\Downarrow$}%
+\put(13,2){$\Downarrow$}%
+\end{picture}}}%
+
+% display natural transformation with names [1],[2],[3]
+\newcommand{\Dnat}[3]{\raisebox{-2pt}%
+{\begin{picture}(54,15)%
+\put(2,10){\line(1,0){50}}%
+\put(52,10){\ehead}%
+\put(2,0){\line(1,0){50}}%
+\put(52,0){\ehead}%
+\put(23,2){$\Downarrow$}%
+\put(30,1){$\textstyle{#2}$}%
+\put(4,11){$\textstyle{#1}$}%
+\put(4,1){$\textstyle{#3}$}%
+\end{picture}}}%
+
+% display natural transformation
+\newcommand{\dnat}{\raisebox{-2pt}%
+{\begin{picture}(54,10)%
+\put(2,10){\line(1,0){50}}%
+\put(52,10){\ehead}%
+\put(2,0){\line(1,0){50}}%
+\put(52,0){\ehead}%
+\put(23,2){$\Downarrow$}%
+\end{picture}}}%
+
+% display pair of natural transformations with names [1],[2],[3],[4],[5]
+\newcommand{\Dbinat}[5]{\raisebox{-7.5pt}%
+{\begin{picture}(54,25)%
+\put(2,20){\line(1,0){50}}%
+\put(52,20){\ehead}%
+\put(2,10){\line(1,0){50}}%
+\put(52,10){\ehead}%
+\put(2,0){\line(1,0){50}}%
+\put(52,0){\ehead}%
+\put(23,12){$\Downarrow$}%
+\put(23,2){$\Downarrow$}%
+\put(30,11){$\textstyle{#2}$}%
+\put(30,1){$\textstyle{#4}$}%
+\put(4,21){$\textstyle{#1}$}%
+\put(4,11){$\textstyle{#3}$}%
+\put(4,1){$\textstyle{#5}$}%
+\end{picture}}}%
+
+% display pair of natural transformations
+\newcommand{\dbinat}{\raisebox{-7.5pt}%
+{\begin{picture}(54,20)%
+\put(2,20){\line(1,0){50}}%
+\put(52,20){\ehead}%
+\put(2,10){\line(1,0){50}}%
+\put(52,10){\ehead}%
+\put(2,0){\line(1,0){50}}%
+\put(52,0){\ehead}%
+\put(23,12){$\Downarrow$}%
+\put(23,2){$\Downarrow$}%
+\end{picture}}}%
+
+
+% MACROS FOR TEXT ARROWS
+
+% \ttricase{P} draws the tri-picture P
+% with length \textarrowlength pt.
+\newcommand{\ttricase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\computetextparameters%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{4pt}{#1{\actualtextarrowlength}%
+{\rule{0pt}{6pt}}{\rule{0pt}{6pt}}{\rule{0pt}{6pt}}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Ttricase{P}{f}{g}{h} draws the tri-picture P with names f, g, h
+% and length \textarrowlength pt.
+\newcommand{\Ttricase}[4]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\computetextparameters%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{4pt}%
+{#1{\actualtextarrowlength}{\rule{0pt}{6pt}\scriptstyle #2}%
+{\rule{0pt}{6pt}\scriptstyle #3}{\rule{0pt}{6pt}\scriptstyle #4}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \tmulticase{P} draws the multi-picture P
+% with length \textarrowlength pt.
+\newcommand{\tmulticase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\computetextparameters%
+\makebox[\actualtextarrowspace pt]%
+{\raisebox{1pt}{#1{\actualtextarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% MACROS FOR DISPLAYED ARROWS
+
+% \dtricase{P} draws the tri-picture P
+% with length \displayarrowlength pt.
+\newcommand{\dtricase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\computedisplayparameters%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{4pt}{#1{\actualdisplayarrowlength}%
+{\rule{0pt}{6pt}}{\rule{0pt}{6pt}}{\rule{0pt}{6pt}}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \Dtricase{P}{f}{g}{h} draws the tri-picture P with names f, g, h
+% and length \displayarrowlength pt.
+\newcommand{\Dtricase}[4]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\computedisplayparameters%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{4pt}%
+{#1{\actualdisplayarrowlength}{\rule{0pt}{6pt}\textstyle #2}%
+{\rule{0pt}{6pt}\textstyle #3}{\rule{0pt}{6pt}\textstyle #4}}}%
+\setlength{\unitlength}{1pt}}%
+
+% \dmulticase{P} draws the multi-picture P
+% with length \displayarrowlength pt.
+\newcommand{\dmulticase}[1]{%
+\testtextmode%
+\setlength{\unitlength}{0.01pt}%
+\computedisplayparameters%
+\makebox[\actualdisplayarrowspace pt]%
+{\raisebox{1pt}{#1{\actualdisplayarrowlength}}}%
+\setlength{\unitlength}{1pt}}%
+
+% TEXT ARROWS
+
+% \TRIAR{n}{f}{g}{h} draws a triple of arrows of length n units
+% and names f, g, h
+\newcommand{\TRIAR}[4]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\mbox{$#2$}\\ \AR{#1}\\%
+\mbox{$#3$}\\ \AR{#1}\\%
+\mbox{$#4$}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \TRIADJAR{n} draws a triple of adjoint arrows of length n units
+% and names f, g, h
+\newcommand{\TRIADJAR}[4]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\mbox{$#2$}\\ \BKAR{#1}\\%
+\mbox{$#3$}\\ \AR{#1}\\%
+\mbox{$#4$}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \QUADRIAR{n} draws a quadruple of arrows of length n units
+\newcommand{\QUADRIAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\AR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \QUADRIADJAR{n} draws a quadruple of adjoint arrows
+% of length n units
+\newcommand{\QUADRIADJAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \QUINTIAR{n} draws a quintuple of arrows of length n units
+\newcommand{\QUINTIAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\AR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \QUINTIADJAR{n} draws a quintuple of adjoint arrows
+% of length n units
+\newcommand{\QUINTIADJAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\AR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% USER'S COMMANDS FOR TEXT ARROWS
+
+% triple of arrows
+\newcommand{\triar}{\ifinner\ttricase{\TRIAR}\else\dtricase{\TRIAR}\fi}%
+
+% triple of arrows with names [1],[2],[3]
+\newcommand{\Triar}[3]{\ifinner\Ttricase{\TRIAR}{#1}{#2}{#3}%
+\else\Dtricase{\TRIAR}{#1}{#2}{#3}\fi}%
+
+% triple of adjoint arrows
+\newcommand{\triadjar}{\ifinner\ttricase{\TRIADJAR}%
+\else\dtricase{\TRIADJAR}\fi}%
+
+% triple of adjoint arrows with names [1],[2],[3]
+\newcommand{\Triadjar}[3]{\ifinner\Ttricase{\TRIADJAR}{#1}{#2}{#3}%
+\else\Dtricase{\TRIADJAR}{#1}{#2}{#3}\fi}%
+
+% quadruple of arrows
+\newcommand{\quadriar}{\ifinner\tquadricase{\QUADRIAR}%
+\else\dmulticase{\QUADRIAR}\fi}%
+
+% quadruple of adjoint arrows
+\newcommand{\quadriadjar}{\ifinner\tmulticase{\QUADRIADJAR}%
+\else\dmulticase{\QUADRIADJAR}\fi}%
+
+% quintuple of arrows
+\newcommand{\quintiar}{\ifinner\tmulticase{\QUINTIAR}%
+\else\dmulticase{\QUINTIAR}\fi}%
+
+% quintuple of adjoint arrows
+\newcommand{\quintiadjar}{\ifinner\tmulticase{\QUINTIADJAR}%
+\else\dmulticase{\QUINTIADJAR}\fi}%
+
+
+% BACKWARD TEXT ARROWS
+
+% \BKTRIAR{n}{f}{g}{h} draws a triple of back arrows of length n units
+% and names f, g, h
+\newcommand{\BKTRIAR}[4]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\mbox{$#2$}\\ \BKAR{#1}\\%
+\mbox{$#3$}\\ \BKAR{#1}\\%
+\mbox{$#4$}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \BKTRIADJAR{n} draws a back triple of adjoint arrows of length n units
+% and names f, g, h
+\newcommand{\BKTRIADJAR}[4]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\mbox{$#2$}\\ \AR{#1}\\%
+\mbox{$#3$}\\ \BKAR{#1}\\%
+\mbox{$#4$}\\ \AR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \BKQUADRIAR{n} draws a quadruple of back arrows of length n units
+\newcommand{\BKQUADRIAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \BKQUADRIADJAR{n} draws a back quadruple of adjoint arrows
+% of length n units
+\newcommand{\BKQUADRIADJAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\AR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}\\%
+\rule{0pt}{3pt}\\ \AR{#1}\\%
+\rule{0pt}{3pt}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \BKQUINTIAR{n} draws a quintuple of back arrows of length n units
+\newcommand{\BKQUINTIAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% \BKQUINTIADJAR{n} draws a back quintuple of adjoint arrows
+% of length n units
+\newcommand{\BKQUINTIADJAR}[1]%
+{\renewcommand{\arraystretch}{0.2}%
+\begin{tabular}{c}%
+\BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}\\%
+\rule{0pt}{2pt}\\ \AR{#1}\\%
+\rule{0pt}{2pt}\\ \BKAR{#1}%
+\end{tabular}%
+\renewcommand{\arraystretch}{1}}%
+
+% USER'S COMMANDS FOR BACKWARD TEXT ARROWS
+
+% triple of back arrows
+\newcommand{\bktriar}{\ifinner\ttricase{\BKTRIAR}\else\dtricase{\BKTRIAR}\fi}%
+
+% triple of back arrows with names [1],[2],[3]
+\newcommand{\Bktriar}[3]{\ifinner\Ttricase{\BKTRIAR}{#1}{#2}{#3}%
+\else\Dtricase{\BKTRIAR}{#1}{#2}{#3}\fi}%
+
+% back triple of adjoint arrows
+\newcommand{\bktriadjar}{\ifinner\ttricase{\BKTRIADJAR}%
+\else\dtricase{\BKTRIADJAR}\fi}%
+
+% back triple of adjoint arrows with names [1],[2],[3]
+\newcommand{\Bktriadjar}[3]{\ifinner\Ttricase{\BKTRIADJAR}{#1}{#2}{#3}%
+\else\Dtricase{\BKTRIADJAR}{#1}{#2}{#3}\fi}%
+
+% back quadruple of arrows
+\newcommand{\bkquadriar}{\ifinner\tquadricase{\BKQUADRIAR}%
+\else\dmulticase{\BKQUADRIAR}\fi}%
+
+% back quadruple of adjoint arrows
+\newcommand{\bkquadriadjar}{\ifinner\tmulticase{\BKQUADRIADJAR}%
+\else\dmulticase{\BKQUADRIADJAR}\fi}%
+
+% back quintuple of arrows
+\newcommand{\bkquintiar}{\ifinner\tmulticase{\BKQUINTIAR}%
+\else\dmulticase{\BKQUINTIAR}\fi}%
+
+% back quintuple of adjoint arrows
+\newcommand{\bkquintiadjar}{\ifinner\tmulticase{\BKQUINTIADJAR}%
+\else\dmulticase{\BKQUINTIADJAR}\fi}%
+
+% MACROS FOR HORIZONTAL DIAGRAM ARROWS
+
+% \htricase{P}{n} draws the tri-picture P with length n units.
+\newcommand{\htricase}[2]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{-12pt}[0pt][0pt]{#1{#2}{}{}{}{}}}}%
+
+% \Htricase{P}{f}{g}{h}{i}{n} draws the tri-picture P
+% with names f, g, h, i and length n units.
+\newcommand{\Htricase}[6]%
+{\testdiagrammode\makebox[0pt]%
+{\raisebox{-12pt}[0pt][0pt]{#1{#6}{#2}{#3}{#4}{#5}}}}%
+
+% \hmulticase{P}{n} draws the multi-picture P with length n units.
+\newcommand{\hmulticase}[2]%
+{\testdiagrammode\makebox[0pt]{\raisebox{-12pt}[0pt][0pt]{#1{#2}}}}%
+
+% EAST ARROWS
+
+% \ETRIAR{n}{f}{g}{h}{i} draws an east triple of arrows
+% of length n units with names f, g, h, i
+\newcommand{\ETRIAR}[5]%
+{\truex{1200}%
+\X=\value{x}%
+\multiply\X by 2%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\X=#1%
+\divide\X by 2%
+\truex{-600}%
+\put(\X,\value{x}){\makebox(0,0){$#5$}}%
+\truex{600}%
+\put(\X,\value{x}){\makebox(0,0){$#4$}}%
+\truex{1800}%
+\put(\X,\value{x}){\makebox(0,0){$#3$}}%
+\truex{3000}%
+\put(\X,\value{x}){\makebox(0,0){$#2$}}%
+\end{picture}}%
+
+% \ETRIADJAR{n}{f}{g}{h}{i} draws an east triple of adjoint arrows
+% of length n units and names f, g, h, i
+\newcommand{\ETRIADJAR}[5]%
+{\truex{1200}%
+\X=\value{x}%
+\multiply\X by 2%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\X=#1%
+\divide\X by 2%
+\truex{-600}%
+\put(\X,\value{x}){\makebox(0,0){$#5$}}%
+\truex{600}%
+\put(\X,\value{x}){\makebox(0,0){$#4$}}%
+\truex{1800}%
+\put(\X,\value{x}){\makebox(0,0){$#3$}}%
+\truex{3000}%
+\put(\X,\value{x}){\makebox(0,0){$#2$}}%
+\end{picture}}%
+
+% \EQUADRIAR{n} draws an east quadruple of arrows
+% of length n units
+\newcommand{\EQUADRIAR}[1]%
+{\truex{800}%
+\truey{1600}%
+\X=\value{x}%
+\multiply\X by 3%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(0,\value{y}){\line(1,0){#1}}%
+\put(#1,\value{y}){\ehead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\end{picture}}%
+
+% \EQUADRIADJAR{n} draws an east quadruple of adjoint arrows
+% of length n units
+\newcommand{\EQUADRIADJAR}[1]%
+{\truex{800}%
+\truey{1600}%
+\X=\value{x}%
+\multiply\X by 3%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(0,\value{y}){\line(1,0){#1}}%
+\put(#1,\value{y}){\ehead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\end{picture}}%
+
+% \EQUINTIAR{n} draws an east quintuple of arrows
+% of length n units
+\newcommand{\EQUINTIAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\truez{1800}%
+\X=\value{x}%
+\multiply\X by 4%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(0,\value{y}){\line(1,0){#1}}%
+\put(#1,\value{y}){\ehead}%
+\put(0,\value{z}){\line(1,0){#1}}%
+\put(#1,\value{z}){\ehead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\end{picture}}%
+
+% \EQUINTIADJAR{n} draws an east quintuple of adjoint arrows
+% of length n units
+\newcommand{\EQUINTIADJAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\truez{1800}%
+\X=\value{x}%
+\multiply\X by 4%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(0,\value{y}){\line(1,0){#1}}%
+\put(#1,\value{y}){\ehead}%
+\put(#1,\value{z}){\line(-1,0){#1}}%
+\put(0,\value{z}){\whead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\end{picture}}%
+
+% USER'S COMMANDS FOR EAST ARROWS
+
+% basic east triple of arrows
+\def\basicetriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\htricase{\ETRIAR}{\Z}}%
+
+% east triple of arrows
+\newcommand{\etriar}{\@ifnextchar[{\basicetriar}%
+{\hspace{\SOURCE\unitlength}\basicetriar[\ARROWLENGTH]}}%
+
+% basic east triple of arrows with upper names
+\def\basicEtriar[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\ETRIAR}{#2}{#3}{#4}{}{\Z}}%
+
+% east triple of arrows with upper names
+\newcommand{\Etriar}{\@ifnextchar[{\basicEtriar}%
+{\hspace{\SOURCE\unitlength}\basicEtriar[\ARROWLENGTH]}}%
+
+% basic east triple of arrows with lower names
+\def\basicetriaR[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\ETRIAR}{}{#2}{#3}{#4}{\Z}}%
+
+% east triple of arrows with lower name
+\newcommand{\etriaR}{\@ifnextchar[{\basicetriaR}%
+{\hspace{\SOURCE\unitlength}\basicetriaR[\ARROWLENGTH]}}%
+
+% basic east triple of adjoint arrows
+\def\basicetriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\htricase{\ETRIADJAR}{\Z}}%
+
+% east triple of adjoint arrows
+\newcommand{\etriadjar}{\@ifnextchar[{\basicetriadjar}%
+{\hspace{\SOURCE\unitlength}\basicetriadjar[\ARROWLENGTH]}}%
+
+% basic east triple of adjoint arrows with upper names
+\def\basicEtriadjar[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\ETRIADJAR}{#2}{#3}{#4}{}{\Z}}%
+
+% east triple of adjoint arrows with upper names
+\newcommand{\Etriadjar}{\@ifnextchar[{\basicEtriadjar}%
+{\hspace{\SOURCE\unitlength}\basicEtriadjar[\ARROWLENGTH]}}%
+
+% basic east triple of adjoint arrows with lower names
+\def\basicetriadjaR[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\ETRIADJAR}{}{#2}{#3}{#4}{\Z}}%
+
+% east triple of adjoint arrows with lower name
+\newcommand{\etriadjaR}{\@ifnextchar[{\basicetriadjaR}%
+{\hspace{\SOURCE\unitlength}\basicetriadjaR[\ARROWLENGTH]}}%
+
+% basic east quadruple of arrows
+\def\basicequadriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\EQUADRIAR}{\Z}}%
+
+% east quadruple of arrows
+\newcommand{\equadriar}{\@ifnextchar[{\basicequadriar}%
+{\hspace{\SOURCE\unitlength}\basicequadriar[\ARROWLENGTH]}}%
+
+% basic east quadruple of adjoint arrows
+\def\basicequadriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\EQUADRIADJAR}{\Z}}%
+
+% east quadruple of adjoint arrows
+\newcommand{\equadriadjar}{\@ifnextchar[{\basicequadriadjar}%
+{\hspace{\SOURCE\unitlength}\basicequadriadjar[\ARROWLENGTH]}}%
+
+% basic east quintuple of arrows
+\def\basicequintiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\EQUINTIAR}{\Z}}%
+
+% east quintuple of arrows
+\newcommand{\equintiar}{\@ifnextchar[{\basicequintiar}%
+{\hspace{\SOURCE\unitlength}\basicequintiar[\ARROWLENGTH]}}%
+
+% basic east quintuple of adjoint arrows
+\def\basicequintiadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\EQUINTIADJAR}{\Z}}%
+
+% east quintuple of adjoint arrows
+\newcommand{\equintiadjar}{\@ifnextchar[{\basicequintiadjar}%
+{\hspace{\SOURCE\unitlength}\basicequintiadjar[\ARROWLENGTH]}}%
+
+
+% WEST ARROWS
+
+% \WTRIAR{n}{f}{g}{h}{i} draws a west triple of arrows
+% of length n units and names f, g, h, i
+\newcommand{\WTRIAR}[5]%
+{\truex{1200}%
+\X=\value{x}%
+\multiply\X by 2%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\X=#1%
+\divide\X by 2%
+\truex{-600}%
+\put(\X,\value{x}){\makebox(0,0){$#5$}}%
+\truex{600}%
+\put(\X,\value{x}){\makebox(0,0){$#4$}}%
+\truex{1800}%
+\put(\X,\value{x}){\makebox(0,0){$#3$}}%
+\truex{3000}%
+\put(\X,\value{x}){\makebox(0,0){$#2$}}%
+\end{picture}}%
+
+% \WTRIADJAR{n}{f}{g}{h}{i} draws a west triple of adjoint arrows
+% of length n units and names f, g, h, i
+\newcommand{\WTRIADJAR}[5]%
+{\truex{1200}%
+\X=\value{x}%
+\multiply\X by 2%
+\begin{picture}(#1,\X)%
+\put(0,0){\line(1,0){#1}}%
+\put(#1,0){\ehead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\X=#1%
+\divide\X by 2%
+\truex{-600}%
+\put(\X,\value{x}){\makebox(0,0){$#5$}}%
+\truex{600}%
+\put(\X,\value{x}){\makebox(0,0){$#4$}}%
+\truex{1800}%
+\put(\X,\value{x}){\makebox(0,0){$#3$}}%
+\truex{3000}%
+\put(\X,\value{x}){\makebox(0,0){$#2$}}%
+\end{picture}}%
+
+% \WQUADRIAR{n} draws a west quadruple of arrows
+% of length n units
+\newcommand{\WQUADRIAR}[1]%
+{\truex{800}%
+\truey{1600}%
+\X=\value{x}%
+\multiply\X by 3%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(#1,\value{y}){\line(-1,0){#1}}%
+\put(0,\value{y}){\whead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\end{picture}}%
+
+% \WQUADRIADJAR{n} draws a west quadruple of adjoint arrows
+% of length n units
+\newcommand{\WQUADRIADJAR}[1]%
+{\truex{800}%
+\truey{1600}%
+\X=\value{x}%
+\multiply\X by 3%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(#1,\value{y}){\line(-1,0){#1}}%
+\put(0,\value{y}){\whead}%
+\put(0,\X){\line(1,0){#1}}%
+\put(#1,\X){\ehead}%
+\end{picture}}%
+
+% \WQUINTIAR{n} draws a west quintuple of arrows
+% of length n units
+\newcommand{\WQUINTIAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\truez{1800}%
+\X=\value{x}%
+\multiply\X by 4%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(#1,\value{x}){\line(-1,0){#1}}%
+\put(0,\value{x}){\whead}%
+\put(#1,\value{y}){\line(-1,0){#1}}%
+\put(0,\value{y}){\whead}%
+\put(#1,\value{z}){\line(-1,0){#1}}%
+\put(0,\value{z}){\whead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\end{picture}}%
+
+% \WQUINTIADJAR{n} draws a west quintuple of adjoint arrows
+% of length n units
+\newcommand{\WQUINTIADJAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\truez{1800}%
+\X=\value{x}%
+\multiply\X by 4%
+\begin{picture}(#1,\X)%
+\put(#1,0){\line(-1,0){#1}}%
+\put(0,0){\whead}%
+\put(0,\value{x}){\line(1,0){#1}}%
+\put(#1,\value{x}){\ehead}%
+\put(#1,\value{y}){\line(-1,0){#1}}%
+\put(0,\value{y}){\whead}%
+\put(0,\value{z}){\line(1,0){#1}}%
+\put(#1,\value{z}){\ehead}%
+\put(#1,\X){\line(-1,0){#1}}%
+\put(0,\X){\whead}%
+\end{picture}}%
+
+% USER'S COMMANDS FOR WEST ARROWS
+
+% basic west triple of arrows
+\def\basicwtriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\htricase{\WTRIAR}{\Z}}%
+
+% west triple of arrows
+\newcommand{\wtriar}{\@ifnextchar[{\basicwtriar}%
+{\hspace{\SOURCE\unitlength}\basicwtriar[\ARROWLENGTH]}}%
+
+% basic west triple of arrows with upper names
+\def\basicWtriar[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\WTRIAR}{#2}{#3}{#4}{}{\Z}}%
+
+% west triple of arrows with upper names
+\newcommand{\Wtriar}{\@ifnextchar[{\basicWtriar}%
+{\hspace{\SOURCE\unitlength}\basicWtriar[\ARROWLENGTH]}}%
+
+% basic west triple of arrows with lower names
+\def\basicwtriaR[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\WTRIAR}{}{#2}{#3}{#4}{\Z}}%
+
+% west triple of arrows with lower name
+\newcommand{\wtriaR}{\@ifnextchar[{\basicwtriaR}%
+{\hspace{\SOURCE\unitlength}\basicwtriaR[\ARROWLENGTH]}}%
+
+% basic west triple of adjoint arrows
+\def\basicwtriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\htricase{\WTRIADJAR}{\Z}}%
+
+% west triple of adjoint arrows
+\newcommand{\wtriadjar}{\@ifnextchar[{\basicwtriadjar}%
+{\hspace{\SOURCE\unitlength}\basicwtriadjar[\ARROWLENGTH]}}%
+
+% basic west triple of adjoint arrows with upper names
+\def\basicWtriadjar[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\WTRIADJAR}{#2}{#3}{#4}{}{\Z}}%
+
+% west triple of adjoint arrows with upper names
+\newcommand{\Wtriadjar}{\@ifnextchar[{\basicWtriadjar}%
+{\hspace{\SOURCE\unitlength}\basicWtriadjar[\ARROWLENGTH]}}%
+
+% basic west triple of adjoint arrows with lower names
+\def\basicwtriadjaR[#1]#2#3#4{%
+\Z=#1%
+\multiply \Z by 100%
+\Htricase{\WTRIADJAR}{}{#2}{#3}{#4}{\Z}}%
+
+% west triple of adjoint arrows with lower name
+\newcommand{\wtriadjaR}{\@ifnextchar[{\basicwtriadjaR}%
+{\hspace{\SOURCE\unitlength}\basicwtriadjaR[\ARROWLENGTH]}}%
+
+% basic west quadruple of arrows
+\def\basicwquadriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\WQUADRIAR}{\Z}}%
+
+% west quadruple of arrows
+\newcommand{\wquadriar}{\@ifnextchar[{\basicwquadriar}%
+{\hspace{\SOURCE\unitlength}\basicwquadriar[\ARROWLENGTH]}}%
+
+% basic west quadruple of adjoint arrows
+\def\basicwquadriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\WQUADRIADJAR}{\Z}}%
+
+% west quadruple of adjoint arrows
+\newcommand{\wquadriadjar}{\@ifnextchar[{\basicwquadriadjar}%
+{\hspace{\SOURCE\unitlength}\basicwquadriadjar[\ARROWLENGTH]}}%
+
+% basic west quintuple of arrows
+\def\basicwquintiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\WQUINTIAR}{\Z}}%
+
+% west quintuple of arrows
+\newcommand{\wquintiar}{\@ifnextchar[{\basicwquintiar}%
+{\hspace{\SOURCE\unitlength}\basicwquintiar[\ARROWLENGTH]}}%
+
+% basic west quintuple of adjoint arrows
+\def\basicwquintiadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\hmulticase{\WQUINTIADJAR}{\Z}}%
+
+% west quintuple of adjoint arrows
+\newcommand{\wquintiadjar}{\@ifnextchar[{\basicwquintiadjar}%
+{\hspace{\SOURCE\unitlength}\basicwquintiadjar[\ARROWLENGTH]}}%
+
+
+
+% MACROS FOR VERTICAL DIAGRAM PICTURES
+
+% \vtricase{P}{n} draws the vertical tri-picture P
+% with length n units
+\newcommand{\vtricase}[2]%
+{\testdiagrammode\makebox[0pt]{#1{}{}{}{}{#2}}}%
+
+% \Vtricase{P}{f}{g}{h}{i}{n} draws the vertical tri-picture P
+% with length n units and names f, g, h, i.
+\newcommand{\Vtricase}[6]%
+{\testdiagrammode\makebox[0pt]{#1{#2}{#3}{#4}{#5}{#6}}}%
+
+% \vmulticase{P}{n} draws the vertical multi-picture P
+% with length n units.
+\newcommand{\vmulticase}[2]{\testdiagrammode\makebox[0pt]{#1{#2}}}%
+
+% SOUTH ARROWS
+
+% \STRIAR{f}{g}{h}{i}{n} draws a triple of south arrows
+% of length n units with names f, g, h, i
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\STRIAR}[5]%
+{\truex{1200}%
+\truey{1800}%
+\truez{600}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#5)%
+\X=#5\divide\X by 2%
+\put(-\value{x},#5){\line(0,-1){#5}}%
+\put(-\value{x},0){\shead}%
+\put(0,#5){\line(0,-1){#5}}%
+\put(0,0){\shead}%
+\put(\value{x},#5){\line(0,-1){#5}}%
+\put(\value{x},0){\shead}%
+\put(-\value{y},\X){\makebox(0,0){$#1$}}%
+\put(\value{y},\X){\makebox(0,0){$#4$}}%
+\put(-\value{z},\X){\makebox(0,0){$#2$}}%
+\put(\value{z},\X){\makebox(0,0){$#3$}}%
+\end{picture}}}\end{picture}}%
+
+% \STRIADJAR{f}{g}{h}{i}{n} draws a south triple of adjoint
+% arrows of length n units with names f, g, h, i
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\STRIADJAR}[5]%
+{\truex{1200}%
+\truey{1800}%
+\truez{600}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#5)%
+\X=#5\divide\X by 2%
+\put(-\value{x},0){\line(0,1){#5}}%
+\put(-\value{x},#5){\nhead}%
+\put(0,#5){\line(0,-1){#5}}%
+\put(0,0){\shead}%
+\put(\value{x},0){\line(0,1){#5}}%
+\put(\value{x},#5){\nhead}%
+\put(-\value{y},\X){\makebox(0,0){$#1$}}%
+\put(\value{y},\X){\makebox(0,0){$#4$}}%
+\put(-\value{z},\X){\makebox(0,0){$#2$}}%
+\put(\value{z},\X){\makebox(0,0){$#3$}}%
+\end{picture}}}\end{picture}}%
+
+% \SQUADRIAR{n} draws a quadruple of south arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SQUADRIAR}[1]%
+{\truex{400}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},#1){\line(0,-1){#1}}%
+\put(-\value{y},0){\shead}%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(\value{y},#1){\line(0,-1){#1}}%
+\put(\value{y},0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SQUADRIADJAR{n} draws a south quadruple of adjoint arrows
+% of length n units and centers it in a box of width 0pt and height 0pt
+\newcommand{\SQUADRIADJAR}[1]%
+{\truex{400}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},#1){\line(0,-1){#1}}%
+\put(-\value{y},0){\shead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(\value{y},0){\line(0,1){#1}}%
+\put(\value{y},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \SQUINTIAR{n} draws a quintuple of south arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\SQUINTIAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},#1){\line(0,-1){#1}}%
+\put(-\value{y},0){\shead}%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(0,#1){\line(0,-1){#1}}%
+\put(0,0){\shead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(\value{y},#1){\line(0,-1){#1}}%
+\put(\value{y},0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \SQUINTIADJAR{n} draws a south quintuple of adjoint arrows
+% of length n units and centers it in a box of width 0pt and height 0pt
+\newcommand{\SQUINTIADJAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},#1){\line(0,-1){#1}}%
+\put(-\value{y},0){\shead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(0,#1){\line(0,-1){#1}}%
+\put(0,0){\shead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\put(\value{y},#1){\line(0,-1){#1}}%
+\put(\value{y},0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% USER'S COMMANDS FOR SOUTH ARROWS
+
+% basic south triple of arrows
+\def\basicstriar[#1]{\vtricase{\STRIAR}{#100}}%
+
+% south triple of arrows
+\newcommand{\striar}{\@ifnextchar[{\basicstriar}{\basicstriar[50]}}%
+
+% basic south triple of arrows with left names
+\def\basicStriar[#1]#2#3#4{\Vtricase{\STRIAR}{#2}{#3}{#4}{}{#100}}%
+
+% south triple of arrows with left names
+\newcommand{\Striar}{\@ifnextchar[{\basicStriar}{\basicStriar[50]}}%
+
+% basic south triple of arrows with right names
+\def\basicstriaR[#1]#2#3#4{\Vtricase{\STRIAR}{}{#2}{#3}{#4}{#100}}%
+
+% south triple of arrows with right name
+\newcommand{\striaR}{\@ifnextchar[{\basicstriaR}{\basicstriaR[50]}}%
+
+% basic south triple of adjoint arrows
+\def\basicstriadjar[#1]{\vtricase{\STRIADJAR}{#100}}%
+
+% south triple of adjoint arrows
+\newcommand{\striadjar}{\@ifnextchar[{\basicstriadjar}{\basicstriadjar[50]}}%
+
+% basic south triple of adjoint arrows with left names
+\def\basicStriadjar[#1]#2#3#4{\Vtricase{\STRIADJAR}{#2}{#3}{#4}{}{#100}}%
+
+% south triple of adjoint arrows with left names
+\newcommand{\Striadjar}{\@ifnextchar[{\basicStriadjar}{\basicStriadjar[50]}}%
+
+% basic south triple of adjoint arrows with right names
+\def\basicstriadjaR[#1]#2#3#4{\Vtricase{\STRIADJAR}{}{#2}{#3}{#4}{#100}}%
+
+% south triple of adjoint arrows with right name
+\newcommand{\striadjaR}{\@ifnextchar[{\basicstriadjaR}{\basicstriadjaR[50]}}%
+
+% basic south quadruple of arrows
+\def\basicsquadriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\SQUADRIAR}{\Z}}%
+
+% south quadruple of arrows
+\newcommand{\squadriar}{\@ifnextchar[{\basicsquadriar}%
+{\hspace{\SOURCE\unitlength}\basicsquadriar[\ARROWLENGTH]}}%
+
+% basic south quadruple of adjoint arrows
+\def\basicsquadriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\SQUADRIADJAR}{\Z}}%
+
+% south quadruple of adjoint arrows
+\newcommand{\squadriadjar}{\@ifnextchar[{\basicsquadriadjar}%
+{\hspace{\SOURCE\unitlength}\basicsquadriadjar[\ARROWLENGTH]}}%
+
+% basic south quintuple of arrows
+\def\basicsquintiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\SQUINTIAR}{\Z}}%
+
+% south quintuple of arrows
+\newcommand{\squintiar}{\@ifnextchar[{\basicsquintiar}%
+{\hspace{\SOURCE\unitlength}\basicsquintiar[\ARROWLENGTH]}}%
+
+% basic south quintuple of adjoint arrows
+\def\basicsquintiadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\SQUINTIADJAR}{\Z}}%
+
+% south quintuple of adjoint arrows
+\newcommand{\squintiadjar}{\@ifnextchar[{\basicsquintiadjar}%
+{\hspace{\SOURCE\unitlength}\basicsquintiadjar[\ARROWLENGTH]}}%
+
+
+
+% NORTH ARROWS
+
+% \NTRIAR{f}{g}{h}{i}{n} draws a triple of north arrows
+% of length n units with names f, g, h, i
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NTRIAR}[5]%
+{\truex{1200}%
+\truey{1800}%
+\truez{600}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#5)%
+\X=#5\divide\X by 2%
+\put(-\value{x},0){\line(0,1){#5}}%
+\put(-\value{x},#5){\nhead}%
+\put(0,0){\line(0,1){#5}}%
+\put(0,#5){\nhead}%
+\put(\value{x},0){\line(0,1){#5}}%
+\put(\value{x},#5){\nhead}%
+\put(-\value{y},\X){\makebox(0,0){$#1$}}%
+\put(\value{y},\X){\makebox(0,0){$#4$}}%
+\put(-\value{z},\X){\makebox(0,0){$#2$}}%
+\put(\value{z},\X){\makebox(0,0){$#3$}}%
+\end{picture}}}\end{picture}}%
+
+% \NTRIADJAR{f}{g}{h}{i}{n} draws a north triple of adjoint
+% arrows of length n units with names f, g, h, i
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NTRIADJAR}[5]%
+{\truex{1200}%
+\truey{1800}%
+\truez{600}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#5)%
+\X=#5\divide\X by 2%
+\put(-\value{x},#5){\line(0,-1){#5}}%
+\put(-\value{x},0){\shead}%
+\put(0,0){\line(0,1){#5}}%
+\put(0,#5){\nhead}%
+\put(\value{x},#5){\line(0,-1){#5}}%
+\put(\value{x},0){\shead}%
+\put(-\value{y},\X){\makebox(0,0){$#1$}}%
+\put(\value{y},\X){\makebox(0,0){$#4$}}%
+\put(-\value{z},\X){\makebox(0,0){$#2$}}%
+\put(\value{z},\X){\makebox(0,0){$#3$}}%
+\end{picture}}}\end{picture}}%
+
+% \NQUADRIAR{n} draws a quadruple of north arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NQUADRIAR}[1]%
+{\truex{400}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},0){\line(0,1){#1}}%
+\put(-\value{y},#1){\nhead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\put(\value{y},0){\line(0,1){#1}}%
+\put(\value{y},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NQUADRIADJAR{n} draws a north quadruple of adjoint arrows
+% of length n units and centers it in a box of width 0pt and height 0pt
+\newcommand{\NQUADRIADJAR}[1]%
+{\truex{400}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},0){\line(0,1){#1}}%
+\put(-\value{y},#1){\nhead}%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\put(\value{y},#1){\line(0,-1){#1}}%
+\put(\value{y},0){\shead}%
+\end{picture}}}\end{picture}}%
+
+% \NQUINTIAR{n} draws a quintuple of north arrows of length n units
+% and centers it in a box of width 0pt and height 0pt
+\newcommand{\NQUINTIAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},0){\line(0,1){#1}}%
+\put(-\value{y},#1){\nhead}%
+\put(-\value{x},0){\line(0,1){#1}}%
+\put(-\value{x},#1){\nhead}%
+\put(0,0){\line(0,1){#1}}%
+\put(0,#1){\nhead}%
+\put(\value{x},0){\line(0,1){#1}}%
+\put(\value{x},#1){\nhead}%
+\put(\value{y},0){\line(0,1){#1}}%
+\put(\value{y},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% \NQUINTIADJAR{n} draws a north quintuple of adjoint arrows
+% of length n units and centers it in a box of width 0pt and height 0pt
+\newcommand{\NQUINTIADJAR}[1]%
+{\truex{600}%
+\truey{1200}%
+\begin{picture}(0,0)%
+\put(0,0){\makebox(0,0)%
+{\begin{picture}(0,#1)%
+\put(-\value{y},0){\line(0,1){#1}}%
+\put(-\value{y},#1){\nhead}%
+\put(-\value{x},#1){\line(0,-1){#1}}%
+\put(-\value{x},0){\shead}%
+\put(0,0){\line(0,1){#1}}%
+\put(0,#1){\nhead}%
+\put(\value{x},#1){\line(0,-1){#1}}%
+\put(\value{x},0){\shead}%
+\put(\value{y},0){\line(0,1){#1}}%
+\put(\value{y},#1){\nhead}%
+\end{picture}}}\end{picture}}%
+
+% USER'S COMMANDS FOR NORTH ARROWS
+
+% basic north triple of arrows
+\def\basicntriar[#1]{\vtricase{\NTRIAR}{#100}}%
+
+% north triple of arrows
+\newcommand{\ntriar}{\@ifnextchar[{\basicntriar}{\basicntriar[50]}}%
+
+% basic north triple of arrows with left names
+\def\basicNtriar[#1]#2#3#4{\Vtricase{\NTRIAR}{#2}{#3}{#4}{}{#100}}%
+
+% north triple of arrows with left names
+\newcommand{\Ntriar}{\@ifnextchar[{\basicNtriar}{\basicNtriar[50]}}%
+
+% basic north triple of arrows with right names
+\def\basicntriaR[#1]#2#3#4{\Vtricase{\NTRIAR}{}{#2}{#3}{#4}{#100}}%
+
+% north triple of arrows with right name
+\newcommand{\ntriaR}{\@ifnextchar[{\basicntriaR}{\basicntriaR[50]}}%
+
+% basic north triple of adjoint arrows
+\def\basicntriadjar[#1]{\vtricase{\NTRIADJAR}{#100}}%
+
+% north triple of adjoint arrows
+\newcommand{\ntriadjar}{\@ifnextchar[{\basicntriadjar}{\basicntriadjar[50]}}%
+
+% basic north triple of adjoint arrows with left names
+\def\basicNtriadjar[#1]#2#3#4{\Vtricase{\NTRIADJAR}{#2}{#3}{#4}{}{#100}}%
+
+% north triple of adjoint arrows with left names
+\newcommand{\Ntriadjar}{\@ifnextchar[{\basicNtriadjar}{\basicNtriadjar[50]}}%
+
+% basic north triple of adjoint arrows with right names
+\def\basicntriadjaR[#1]#2#3#4{\Vtricase{\NTRIADJAR}{}{#2}{#3}{#4}{#100}}%
+
+% north triple of adjoint arrows with right name
+\newcommand{\ntriadjaR}{\@ifnextchar[{\basicntriadjaR}{\basicntriadjaR[50]}}%
+
+% basic north quadruple of arrows
+\def\basicnquadriar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\NQUADRIAR}{\Z}}%
+
+% north quadruple of arrows
+\newcommand{\nquadriar}{\@ifnextchar[{\basicnquadriar}%
+{\hspace{\SOURCE\unitlength}\basicnquadriar[\ARROWLENGTH]}}%
+
+% basic north quadruple of adjoint arrows
+\def\basicnquadriadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\NQUADRIADJAR}{\Z}}%
+
+% north quadruple of adjoint arrows
+\newcommand{\nquadriadjar}{\@ifnextchar[{\basicnquadriadjar}%
+{\hspace{\SOURCE\unitlength}\basicnquadriadjar[\ARROWLENGTH]}}%
+
+% basic north quintuple of arrows
+\def\basicnquintiar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\NQUINTIAR}{\Z}}%
+
+% north quintuple of arrows
+\newcommand{\nquintiar}{\@ifnextchar[{\basicnquintiar}%
+{\hspace{\SOURCE\unitlength}\basicnquintiar[\ARROWLENGTH]}}%
+
+% basic north quintuple of adjoint arrows
+\def\basicnquintiadjar[#1]{%
+\Z=#1%
+\multiply \Z by 100%
+\vmulticase{\NQUINTIADJAR}{\Z}}%
+
+% north quintuple of adjoint arrows
+\newcommand{\nquintiadjar}{\@ifnextchar[{\basicnquintiadjar}%
+{\hspace{\SOURCE\unitlength}\basicnquintiadjar[\ARROWLENGTH]}}%
+
+\catcode`\@=12 \ No newline at end of file
diff --git a/macros/generic/diagrams/borceux/user-guides/Diagram_Mode_d_Emploi b/macros/generic/diagrams/borceux/user-guides/Diagram_Mode_d_Emploi
new file mode 100644
index 0000000000..4e28d199be
--- /dev/null
+++ b/macros/generic/diagrams/borceux/user-guides/Diagram_Mode_d_Emploi
@@ -0,0 +1,588 @@
+\documentstyle{article}
+
+\textheight532pt
+\textwidth355pt
+\footskip15pt
+
+\hoffset-35mm
+\voffset-35mm
+
+\language=1
+\hyphenation{dia-gram-me}
+\diagramlabel{Diagramme}
+
+\title{Mode d'emploi de {\em Diagram 3}\thanks{Par rapport aux versions~1 et
+~2, le dessin des flches a ŽtŽ amŽliorŽ, la variŽtŽ de directions et de
+flches disponibles a ŽtŽ plus que doublŽe, toutes les flches pour diagrammes
+admettent un argument optionnel de longueur, la frappe des diagrammes a ŽtŽ
+simplifiŽe, des messages d'erreur et d'aide ont ŽtŽ introduits. Pour compiler
+avec {\em Diagram~3}, des documents prŽparŽs avec les versions~1 ou~2, lire le
+fichier {\em OldDiagram} aprs le fichier {\em Diagram}.}}
+\author{Francis Borceux, Louvain-la-Neuve}
+
+\font\bldfc=cmmib10
+\def\boldface#1{\mbox{\bldfc#1}}
+
+\newcommand{\XA}%
+{\truex{300}%
+\begin{picture}(0,0)%
+\put(0,0){\circle{\value{x}}}%
+\end{picture}}
+
+\newcommand{\XB}%
+{\truex{500}%
+\begin{picture}(0,0)%
+\put(0,0){\circle*{\value{x}}}%
+\end{picture}}
+
+\newcommand{\V}[3]{\cross{\XB}{\movevertex(#1,#2){\scriptstyle#3}}}
+
+\begin{document}
+
+\maketitle
+
+\section{A propos de {\em Diagram}}
+
+Le fichier {\em Diagram} rŽalise la construction de diagrammes du type de ceux
+apparaissant dans les textes de thŽorie des catŽgories. L'utilisateur donne la
+liste des objets et des flches constituant le diagramme, comme s'il composait
+une matrice, et le programme prend soin de calculer les dimensions des flches
+et de rŽaliser la mise en page. Tout ce que l'utilisateur doit faire en ce qui
+concerne les flches est prŽciser leur type (monomorphisme, paire de flches,
+\ldots) et leur direction (nord, sud-est,\ldots): 12 types de flches et 32
+directions sont disponibles; voir figures~1 et~3 pour des listes exhaustives.
+
+Un fichier {\em MultipleArrows} existe Žgalement: il produit des flches
+triples, quadruples et quintuples, parallles ou adjointes. La taille de ces
+ŽlŽments est telle que de sŽvres restrictions s'appliquent ˆ ceux-ci.
+
+{\em Diagram} fait un usage abondant des commandes \LaTeX\ et ne peut donc
+fonctionner sans \LaTeX.
+
+Certaines implŽmentations de \TeX, surtout celles limitŽes ˆ $2^{16}$ mots de
+mŽ\-moi\-re, sont incapables de manipuler {\em Diagram}. Pour ces situations,
+deux fichiers rŽduits de macros ont ŽtŽ crŽŽs; la restriction s'applique
+uniquement aux types de flches disponibles.
+\begin{itemize}
+\item {\em MicroDiagram} ne dessine que des flches simples;
+\item {\em MiniDiagram} dessine des flches simples, des paires de flches et
+des flches adjointes.
+\end{itemize}
+La restriction est d'ailleurs plus subtile, car les flches sont produites ici
+d'une manire plus Žconomique.
+
+Compiler de grands diagrammes requiert beaucoup de mŽmoire \TeX; si vous tes
+fortement limitŽ ˆ cet Žgard, esssayez de produire ces diagrammes commes
+documents sŽparŽs. Pour Žconomiser de la mŽmoire, vous pouvez aussi supprimer
+du fichier les macros que vous n'envisagez pas d'utiliser. Ne copiez pas des
+macros de {\em Diagram} vers {\em MiniDiagram} ou {\em MicroDiagram}: cela ne
+fonctionnerait pas.
+
+{\em Diagram} a ŽtŽ conu pour fournir des rŽsultats optimaux sur les
+imprimantes avec une rŽsolution allant jusque 300dpi. Dans le cas d'imprimantes
+ˆ plus haute rŽsolution, il convient d'adapter en consŽquence le paramtre {\em
+printerresolution} donnŽ comme premire instruction du fichier {\em Diagram}.
+Notez en passant que diminuer ce paramtre est une autre manire d'Žconomiser
+de la mŽmoire.
+
+\section{Les flches dans les formules}
+
+Des flches peuvent tre introduites dans les formules, donc dans une ligne de
+texte entre simples dollars ou dans une formule hors-texte, entre doubles
+dollars. La commande est la mme dans les deux cas, mais l'effet produit est
+diffŽrent. La variŽtŽ de flches disponibles est donnŽe ˆ la figure~1.
+\begin{figure}
+\settextarrowlength{45}
+\begin{center}
+\begin{tabular}{|l|c|l|}
+\hline
+{\bf Nom}&{\bf Flche}&{\bf Code}\\
+\hline\hline
+flche simple&$\ar$&ar\\
+flche pointillŽe&$\dotar$&dotar\\
+distributeur&$\dist$&dist\\
+monomorphisme&$\mono$&mono\\
+Žpimorphisme&$\epi$&epi\\
+bimorphisme&$\bimo$&bimo\\
+isomorphisme&$\iso$&iso\\
+ŽgalitŽ&$\eql$&eql\\ & & \\
+paire de flches&$\biar$&biar\\ & & \\
+flches adjointes&$\adjar$&adjar\\ & & \\
+paire de distributeurs&$\bidist$&bidist\\ & & \\
+distributeurs adjoints&$\adjdist$&adjdist\\
+\hline
+\end{tabular}
+\hspace{5mm}
+\begin{minipage}{30mm}
+Les codes {\em iso, dist, bidist, adjdist} sont gŽ\-nŽ\-ri\-ques:
+les mar\-ques $\cong$, $\circ$ peu\-vent tre chan\-gŽes a tout mo\-ment
+par les ins\-truc\-tions \verb+\isomark{...}+, \verb+\distmark{...}+
+o \verb+...+ sont les nou\-vel\-les mar\-ques. Les mar\-ques par dŽ\-faut sont
+\verb+\cong+ et \verb+\distcircle+.
+\end{minipage}
+\end{center}
+\caption{Les divers types de flches.}
+\settextarrowlength{20}
+\end{figure}
+\begin{itemize}
+\item Pour produire un type donnŽ de flche dans le sens direct (comme ˆ la
+figure~1), il suffit de frapper un {\em backslash} suivi du code pour ce type
+de flche: donc
+\verb+$f \colon A \mono B$+ produit $f \colon A \mono B$.
+\item Pour produire un type donnŽ de flche dans le sens opposŽ, frappez une
+commande commenant par \verb+\bk+ et se terminant par le code pour ce type de
+flche: donc
+\verb+$g \colon B \bkepi C$+ produit $g \colon B \bkepi C$.
+\item Pour donner un nom ˆ l'une des flches prŽcŽdentes, il suffit de frapper
+en majuscule la premire lettre de la commande et de donner le nom comme
+argument: donc
+\verb+$C \Dist h D$+ produit $C \Dist h D$.
+Bien entendu, dans le cas de doubles flches, il faut donner deux noms:
+d'abord celui de la flche supŽrieure puis celui de la flche infŽrieure:
+par exemple
+\verb+$D \Bkadjar ij E$+ produit $D \Bkadjar ij E$. Comme d'habitude, quand les
+noms ne sont pas des caractres uniques, utilisez des accolades pour les
+dŽlimiter.
+\end{itemize}
+Pour vous permettre de juger la diffŽrence entre les flches
+dans le texte et les flches hors-texte, voici les flches prŽcŽdentes
+produites hors-texte
+$$ A \Mono f B \Bkepi g C \Dist h D \Bkadjar ij E $$
+via les commandes
+\begin{verbatim}
+$$ A \Mono f B \Bkepi g C \Dist h D \Bkadjar ij E $$
+\end{verbatim}
+
+La longueur par dŽfaut d'une flche dans le texte est 20pt et son nom Žventuel
+est produit en taille {\em scriptstyle}; la longueur par dŽfaut d'une flche
+hors-texte est 30pt et son nom Žventuel est produit en taille {\em textstyle}.
+Ces longueurs par dŽfaut peuvent tre modifiŽes ˆ tout moment via des
+instructions
+\begin{verbatim}
+\settextarrowlength{25}
+\setdisplayarrowlength{40}
+\end{verbatim}
+o 25 et 40 expriment les nouvelles longueurs en points.
+
+\section{Construire un diagramme}
+
+Pour construire un diagramme bi-dimensionnel, imaginez un rŽseau de points,
+visualisŽ par des cercles et des ``boulets'' dans la figure~2:
+\begin{figure}
+\begin{diagram}
+\XB¤\XA¤\XB¤\XA¤\XB¤\XA¤\XB¤¤
+\XA¤\cross{\XA}{\sear}¤\cross{\XA}{\esear}¤\cross{\XA}{\eesear}¤\XA¤\XA¤\XA¤¤
+\XB¤\cross{\XA}{\ssear}¤\XB¤\cross{\XA}{\ear}¤\XB¤\cross{\XA}{\ear}¤\XB¤¤
+\XA¤\XA¤\cross{\XA}{\sar}¤\XA¤\cross{\XA}{\sar}¤\XA¤\cross{\XA}{\sar}¤¤
+\XB¤\XA¤\XB¤\cross{\XA}{\ear}¤\XB¤\cross{\XA}{\ear}¤\XB¤¤
+\end{diagram}
+\caption{Conception d'un diagramme bi-dimensionnel.}
+\end{figure}
+les boulets indiquent les points du rŽseau o l'on peut s'attendre ˆ trouver un
+objet. Chaque objet et chaque flche est attachŽ par son centre en un point du
+rŽseau. Il suffit maintenant d'ŽnumŽrer les ŽlŽments, ligne par ligne et
+colonne par colonne, comme pour une matrice; en particulier quand tous les
+ŽlŽments non vides d'une ligne ont ŽtŽ ŽnumŽrŽs, on peut passer directement ˆ
+la ligne suivante. Tous les ŽlŽments sont traitŽs automatiquement en mode
+mathŽmatique. Le programme prend soin de choisir correctement la longueur de
+chaque flche.
+
+Un objet se frappe comme n'importe quelle formule mathŽmatique. Les rgles pour
+introduire une flche sont compltement analogues ˆ celles de la section~2: les
+divers types de flches sont de nouveau ceux de la figure ~1 tandis que les
+directions possibles et leur code sont donnŽes ˆ la figure~3.
+\begin{figure}
+\begin{diagram}[60]
+\XB¤\XA¤\V{0}{10}{nwnnw}¤\XA¤\V{0}{10}{nnnw}¤\XA¤\XB¤\XA¤\V{0}{10}{nnne}¤
+\XA¤\V{0}{10}{nenne}¤\XA¤\XB¤¤
+\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤¤
+\V{-10}{0}{\makebox[0pt][r]{$\scriptstyle nwwnw$}}¤\XA¤\XB¤\XA¤
+\V{-5}{10}{\boldface{nnw}}¤\XA¤\XB¤\XA¤\V{5}{10}{\boldface{nne}}¤\XA¤\XB¤\XA¤
+\V{10}{0}{\makebox[0pt][l]{$\scriptstyle
+neene$}}¤¤
+\XA¤\XA¤\XA¤\XA¤\cross{\XA}{\nwnnwar}¤\cross{\XA}{\nnnwar}¤\XA¤\cross{\XA}{\nnnear}¤
+\cross{\XA}{\nennear}¤\XA¤\XA¤\XA¤\XA¤¤
+\V{-10}{0}{\makebox[0pt][r]{$\scriptstyle
+wwnw$}}¤\XA¤\V{-10}{10}{\boldface{wnw}}¤\cross{\XA}{\nwwnwar}¤
+\V{-5}{10}{\boldface{nw}}¤\cross{\XA}{\bold\nnwar}¤\V{0}{10}{\boldface{n}}¤
+\cross{\XA}{\bold\nnear}¤\V{5}{10}{\boldface{ne}}¤\cross{\XA}{\neenear}¤
+\V{10}{10}{\boldface{ene}}¤\XA¤\V{10}{0}{\makebox[0pt][l]{$\scriptstyle
+eene$}}¤¤
+\XA¤\XA¤\XA¤\cross{\XA}{\wwnwar}¤\cross{\XA}{\bold\wnwar}¤\cross{\XA}{\bold\nwar}¤
+\cross{\XA}{\bold\nar}¤\cross{\XA}{\bold\near}¤\cross{\XA}{\bold\enear}¤
+\cross{\XA}{\eenear}¤\XA¤\XA¤\XA¤¤
+\XB¤\XA¤\XB¤\XA¤\V{-10}{0}{\boldface{w}}¤\cross{\XA}{\bold\war}¤\XB¤
+\cross{\XA}{\bold\ear}¤\V{10}{0}{\boldface{e}}¤\XA¤\XB¤\XA¤\XB¤¤
+\XA¤\XA¤\XA¤\cross{\XA}{\wwswar}¤\cross{\XA}{\bold\wswar}¤\cross{\XA}{\bold\swar}¤
+\cross{\XA}{\bold\sar}¤\cross{\XA}{\bold\sear}¤\cross{\XA}{\bold\esear}¤
+\cross{\XA}{\eesear}¤\XA¤\XA¤\XA¤¤
+\V{-10}{0}{\makebox[0pt][r]{$\scriptstyle
+wwsw$}}¤\XA¤\V{-10}{-10}{\boldface{wsw}}¤\cross{\XA}{\swwswar}¤
+\V{-5}{-10}{\boldface{sw}}¤\cross{\XA}{\bold\sswar}¤\V{0}{-10}{\boldface{s}}¤
+\cross{\XA}{\bold\ssear}¤\V{5}{-10}{\boldface{se}}¤\cross{\XA}{\seesear}¤
+\V{10}{-10}{\boldface{ese}}¤\XA¤\V{10}{0}{\makebox[0pt][l]{$\scriptstyle
+eese$}}¤¤
+\XA¤\XA¤\XA¤\XA¤\cross{\XA}{\swsswar}¤\cross{\XA}{\ssswar}¤\XA¤\cross{\XA}{\sssear}¤
+\cross{\XA}{\sessear}¤\XA¤\XA¤\XA¤\XA¤¤
+\V{-10}{0}{\makebox[0pt][r]{$\scriptstyle
+swwsw$}}¤\XA¤\XB¤\XA¤\V{-5}{-10}{\boldface{ssw}}¤\XA¤\XB¤\XA¤
+\V{5}{-10}{\boldface{sse}}¤\XA¤\XB¤\XA¤
+\V{10}{0}{\makebox[0pt][l]{$\scriptstyle seese$}}¤¤
+\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤¤
+\XB¤\XA¤\V{0}{-10}{swssw}¤\XA¤\V{0}{-10}{sssw}¤\XA¤\XB¤\XA¤\V{0}{-10}{ssse}¤
+\XA¤\V{0}{-10}{sesse}¤\XA¤\XB¤¤
+\end{diagram}
+\caption{Les 32 directions de flches dans un diagramme.}
+\end{figure}
+Prenant une certaine libertŽ avec la gŽographie et la trigonomŽtrie,
+les 32 directions considŽrŽes ont reu les noms habituels dans
+la rose des vents.
+\begin{itemize}
+\item Pour produire un type de flche dans une direction donnŽe, frappez un
+{\em backslash} suivi du code de la direction et du code de la flche.
+Par exemple
+\verb+\nemono+ founit un monomorphisme orientŽ au nord-est.
+\item Pour mettre un nom au-dessus d'une flche, frappez la premire lettre de
+la commande en majuscule et donnez le nom comme argument. Par exemple
+\verb+\Ssedist f+ fournit un distributeur $f$ orientŽ au sud-sud-est. Bien
+entendu dans le cas de doubles flches il faut donner deux noms: d'abord celui
+de la flche supŽrieure puis celui de la flche infŽrieure. Dans le cas de
+flches verticales, le nom appara”t ˆ gauche de la flche.
+\item La procŽdure pour mettre un nom en-dessous d'une flche est analogue:
+frappez cette fois la dernire lettre de la commande en majuscule et donnez le
+nom comme argument. Donc \verb+\wbimO f+ produit un bimorphisme $f$ orientŽ ˆ
+l'ouest. Dans le cas de flches verticales, le nom appara”t cette fois ˆ
+droite. Pour les doubles flches, les deux procŽdures pour insŽrer les noms
+sont Žquivalentes.
+\end{itemize}
+Les 12 types de flches de la figure~1 existent dans les 16 directions
+principales, imprimŽes en gras ˆ la figure~3; dans les 16 autres directions,
+seules les flches simples existent.
+
+Il reste ˆ expliquer la syntaxe pour frapper un diagramme. C'est simplement
+\begingroup%
+\catcode`\¤=\active\def¤{{\S}}%
+\begin{verbatim}
+\begin{diagram}
+...¤...¤...¤¤
+...¤...¤...¤...¤¤
+...¤...¤...¤...¤¤
+\end{diagram}
+\end{verbatim}%
+\endgroup%
+\noindent o \verb+...+ indiquent les ŽlŽments successifs. Donc un simple \S\
+est le dŽlimiteur entre deux ŽlŽments d'une mme ligne, tandis qu'un double
+\S\S\ indique la fin d'une ligne\footnote{Si l'utilisation du symbole \S\ vous
+cause un problme, remplacez-le par n'importe quel symbole que vous ne risquez
+gure d'utiliser dans un diagramme, par exemple ?; vous pouvez effectuer ce
+changement de manire globale et automatique dans le fichier {\em Diagram}.}. Il
+est impŽratif de frapper le double \S\S\ ˆ la fin de la dernire ligne et rien ne
+peut se trouver entre ce double \S\S\ et l'instruction \verb+\end{diagram}+ (il
+y a une seule exception, exposŽe dans la section~6). N'oubliez pas un espace
+blanc pour indiquer un ŽlŽment vide, car deux \S\S\ consŽcutifs seraient
+interprŽtŽs comme la fin de la ligne. Plusieurs blancs sont, comme toujours,
+Žquivalents ˆ un seul.
+
+
+Donc le diagramme~1,
+\begin{floatingdiagram}
+A¤¤
+ ¤\Sedotar x¤\eseaR y ¤\Eesear z¤¤
+ ¤\sseaR u ¤A ¤\Eepi a ¤B ¤\Emono b¤C ¤¤
+ ¤ ¤\saR c ¤ ¤\Sadjar de¤ ¤\seqL{1_C}¤¤
+ ¤ ¤D ¤\waR g ¤D\oplus E ¤\eaR h ¤C ¤¤
+\end{floatingdiagram}
+qui a exactement la forme ŽvoquŽe par la figure ~2, est produit
+par les instructions suivantes:
+\begingroup%
+\catcode`\¤=\active\def¤{{\S}}%
+\begin{verbatim}
+\begin{diagram}
+A¤¤
+ ¤\Sedotar x¤\eseaR y ¤\Eesear z¤¤
+ ¤\sseaR u ¤A ¤\Eepi a ¤B ¤\Emono b¤C ¤¤
+ ¤ ¤\saR c ¤ ¤\Sadjar de¤ ¤\seqL{1_C}¤¤
+ ¤ ¤D ¤\waR g ¤D\oplus E ¤\eaR h ¤C ¤¤
+\end{diagram}
+\end{verbatim}%
+\endgroup%
+
+Il existe un second environnement, parfaitement analogue, pour produire des
+diagrammes; il prend la forme
+\begingroup%
+\catcode`\¤=\active\def¤{{\S}}%
+\begin{verbatim}
+\begin{floatingdiagram}
+...¤...¤...¤¤
+...¤...¤...¤...¤¤
+...¤...¤...¤...¤¤
+\end{floatingdiagram}
+\end{verbatim}%
+\endgroup%
+\noindent Comme son nom l'indique, le diagramme est cette fois introduit comme
+corps flottant et se trouve numŽrotŽ automatiquement (cf.~diagrammes~1 ˆ~3). Le
+choix par dŽfaut est de numŽroter successivement les diagrammes ˆ travers tout
+le document. Vous pouvez prŽfŽrer un numŽro 3.12 pour, par exemple, le douzime
+diagramme du chapitre~3 (dans un style avec des chapitres!). Ceci s'obtient par
+l'instruction
+\begin{verbatim}
+\setdiagramcounter{chapter}
+\end{verbatim}
+o bien entendu {\em chapter} peut tre remplacŽ par tout autre niveau de
+sectionnement: {\em part, section,\ldots} Pour des textes rŽdigŽs dans une
+autre langue que l'anglais, vous pouvez traduire le mot {\em Diagram}
+prŽcŽdant le numŽro en donnant, par exemple, l'instruction
+\begin{verbatim}
+\diagramlabel{Diagramme}
+\end{verbatim}
+n'importe o dans le texte, mais pas ˆ l'intŽrieur d'un diagramme.
+
+Chaque diagramme, flottant ou non, peut en outre recevoir une lŽgende.
+Cela se fait via une instruction
+\begin{verbatim}
+\diagramcaption{...}
+\end{verbatim}
+qui peut se donner n'importe o dans le diagramme, mais avant les derniers
+\S\S. Dans le cas d'un diagramme flottant, cette lŽgende complte la
+numŽrotation automatique, comme au diagramme~4.
+
+\section{Modifications de tailles}
+
+Le pas du rŽseau formel de points sous-tendant un diagramme est de 40 unitŽs,
+o l'unitŽ par dŽfaut est le point. Un facteur d'Žchelle peut tre
+appliquŽ ˆ cette valeur par dŽfaut, via une instruction
+\begin{verbatim}
+\setdefaultscale{75}
+\end{verbatim}
+(facteur d'Žchelle 75\%); cette instruction s'applique ˆ tous les diagrammes
+ul\-tŽ\-rieurs et doit tre donnŽe en dehors de tout environnement {\em
+diagram} ou {\em floatingdiagram}. Si vous souhaitez appliquer un facteur
+d'Žchelle ˆ un seul diagramme, donnez ce facteur d'Žchelle comme argument
+optionnel de l'environnement correspondant; par exemple
+\begin{verbatim}
+\begin{diagram}[125]
+........
+\end{diagram}
+\end{verbatim}
+pour un agrandissement de 125\%, et de manire analogue pour les diagrammes
+flottants. Le facteur d'Žchelle donnŽ ainsi pour un diagramme spŽcifique se
+subsitue ˆ la valeur par dŽfaut en vigueur, juste le temps du digramme
+concernŽ. Par exemple le digramme~1 est ˆ l'Žchelle 100\% et le diagramme~2 ˆ
+l'Žchelle 75\%. Observez l'effet prŽcis d'un tel facteur d'Žchelle, qui n'est
+en rien une homthŽtie brutale.
+\begin{floatingdiagram}[75]
+A¤¤
+ ¤\Sedotar x¤\eseaR y ¤\Eesear z¤¤
+ ¤\sseaR u ¤A ¤\Eepi a ¤B ¤\Emono b¤C ¤¤
+ ¤ ¤\saR c ¤ ¤\Sadjar de¤ ¤\seqL{1_C}¤¤
+ ¤ ¤D ¤\waR g ¤D\oplus E ¤\eaR h ¤C ¤¤
+\end{floatingdiagram}
+
+Pour motiver les notions suivantes, considŽrons la conception d'un diagramme
+tri-dimensionnel, comme ˆ la figure~4. Comparez tout d'abord la dispositon
+des ``boulets'' par rapport ˆ celle de la figure~2.
+\begin{figure}
+\begin{diagram}[50]
+\XB¤\XA¤\cross{\XA}{\ear[130]}¤\XA¤\XB¤\XA¤\cross{\XA}{\ear[130]}¤\XA¤\XB¤\XA¤\XA¤¤
+\XA¤\cross{\XA}{\sear}¤\XA¤\XA¤\XA¤\cross{\XA}{\sear}¤\XA¤\XA¤\XA¤\cross{\XA}{\sear}¤\XA¤¤
+\cross{\XA}{\sar[130]}¤\XA¤\XB¤\XA¤\cross{\XA}{\cross{\ear[130]}{\sar[130]}}¤\XA
+ ¤\XB¤\XA¤\cross{\XA}{\cross{\ear[130]}{\sar[130]}}¤\XA¤\XB¤¤
+\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤¤
+\XB¤\XA¤\cross{\XA}{\cross{\ear[130]}{\sar[130]}}¤\XA¤\XB¤
+ ¤\cross{\XA}{\cross{\ear[130]}{\sar[130]}}¤\XA¤\XB¤\XA¤\cross{\XA}{\sar[130]}¤¤
+\XA¤\cross{\XA}{\sear}¤\XA¤\XA¤\XA¤\cross{\XA}{\sear}¤\XA¤\XA¤\XA¤\cross{\XA}{\sear}¤\XA¤¤
+\XA¤\XA¤\XB¤\XA¤\cross{\XA}{\ear[130]}¤\XA¤\XB¤\XA¤\cross{\XA}{\ear[130]}¤\XA¤\XB¤¤
+\end{diagram}
+\caption{Conception d'un diagramme tri-dimensionnel}
+\end{figure}
+Dans ce cas non seulement il faut ``croiser'' des flches en un mme point du
+rŽseau formel, mais il faut aussi considŽrer des flches traversant plusieurs
+points du rŽseau avant d'atteindre les objets qu'elles relient. En fait {\em
+Diagram} suppose toujours qu'une flche relie les deux points adjacents du
+rŽseau dans la direction de la flche. Si ce n'est pas le cas, c'est ˆ vous de
+dŽterminer la longueur de la flche correspondante.
+
+Pour imposer une longueur spŽcifique ˆ une flche d'un diagramme, donnez
+l'Žtendue correspondante de la flche comme argument optionnel\footnote{Cet
+argument doit impŽrativement tre un nombre entier positif; toute autre chose, y
+compris la valeur d'un compteur, troublerait profondŽment \TeX. Les flches ˆ
+inclure dans le texte (section~2) n'admettent pas cet argument optionnel.}:
+l'Žtendue d'une flche horizontale ou verticale est sa longueur; l'Žtendue des
+autres flches est la longueur de leur projection horizontale (voir le manuel
+\LaTeX, {\em Picture environment}, pour de plus amples dŽtails). Donc
+\verb+\Near[60]f+ dessine une flche $f$ d'Žtendue 60 unitŽs, orientŽe au
+nord-est. Voici les valeurs par dŽfaut des Žtendues des diverses flches: 50
+dans les directions n, s, e, w; 59 dans les directions ne, nw, se, sw; 133 dans
+les directions ene, ese, wnw, wsw; 67 dans les directions nne, sse, nnw, ssw;
+211 dans les directions eene, eese, wwnw, wwsw; 71 dans les directions nnne,
+ssse, nnnw, sssw; 215 dans les direction neene, seese, nwwnw, swwsw; 143 dans
+les directions nenne, sesse, nwnnw, swssw. Dans la plupart des cas, vous
+obtiendrez l'Žtendue requise en augmentant la valeur par dŽfaut d'autant de fois
+40 que la flche traverse de points supplŽmentaires du rŽseau.
+
+En ce qui concerne les flches ``croisŽes'', la commande
+\begin{verbatim}
+\cross{element 1}{element 2}
+\end{verbatim}
+vous permet d'introduire simultanŽment {\em element 1} et {\em element 2}
+en un mme point du rŽseau, sans perturber la construction gŽnŽrale
+du diagramme; ces deux {\em elements} peuvent tre indiffŽremment des
+objets ou des flches.
+Le diagramme~3, conu ˆ la figure~4, peut donc s'obtenir comme
+\begingroup
+\catcode`\¤=\active\def¤{{\S}}
+\begin{verbatim}
+\begin{floatingdiagram}[50]
+A¤ ¤\ear[130]¤ ¤B¤ ¤\ear[130]¤ ¤C¤¤
+¤\sear¤ ¤ ¤ ¤\sear¤ ¤ ¤ ¤\sear ¤¤
+\sar[130]¤ ¤D¤ ¤\cross{\ear[130]}{\sar[130]}¤
+ ¤E¤ ¤\cross{\ear[130]}{\sar[130]}¤ ¤F¤¤ ¤¤
+G¤ ¤\cross{\ear[130]}{\sar[130]}¤ ¤H¤
+ ¤\cross{\ear[130]}{\sar[130]}¤ ¤I¤ ¤\sar[130]¤¤
+¤\sear¤ ¤ ¤ ¤\sear¤ ¤ ¤ ¤\sear¤¤
+¤ ¤J¤ ¤\ear[130]¤ ¤K¤ ¤\ear[130]¤ ¤L¤¤
+\end{floatingdiagram}
+\end{verbatim}
+\endgroup
+\begin{floatingdiagram}[50]
+A¤ ¤\ear[130]¤ ¤B¤ ¤\ear[130]¤ ¤C¤¤
+¤\sear¤ ¤ ¤ ¤\sear¤ ¤ ¤ ¤\sear ¤¤
+\sar[130]¤ ¤D¤ ¤\cross{\ear[130]}{\sar[130]}¤
+ ¤E¤ ¤\cross{\ear[130]}{\sar[130]}¤ ¤F¤¤ ¤¤
+G¤ ¤\cross{\ear[130]}{\sar[130]}¤ ¤H¤
+ ¤\cross{\ear[130]}{\sar[130]}¤ ¤I¤ ¤\sar[130]¤¤
+¤\sear¤ ¤ ¤ ¤\sear¤ ¤ ¤ ¤\sear¤¤
+¤ ¤J¤ ¤\ear[130]¤ ¤K¤ ¤\ear[130]¤ ¤L¤¤
+\end{floatingdiagram}
+
+Enfin vous pouvez modifier l'Žpaisseur du trait d'une flche en frappant
+d'abord la commande \verb+\bold+; donc \verb+\bold\nar+ produit une flche
+grasse orientŽe au nord. Cette option \verb+\bold+ est supprimŽe
+automatiquement par le symbole \S\ suivant; vous pouvez aussi l'annuler plus
+t™t (par exemple dans une commande \verb+\cross+) par l'instruction
+\verb+\unbold+. Voyez la figure~3 pour des exemples de flches grasses.
+
+
+\section{Les flches courbes}
+
+{\em Diagram} fournit Žgalement huit flches courbes pouvant tre utilisŽes
+pour relier des points distants le long d'un bord d'un diagramme;
+le code pour une flche courbe est {\em curvar}. Ces flches sont prŽsentŽes ˆ
+la figure ~5, ˆ l'Žchelle 50\%,
+\begin{figure}
+\begin{diagram}[50]
+\cdot¤\ear¤\cross{\XB}{\Necurvar{ne}}¤\ear¤\cdot¤ ¤ ¤ ¤ ¤
+\cdot¤\ear¤\cross{\XB}{\Nwcurvar{nw}}¤\ear¤\cdot¤¤
+\sar¤ ¤\sar¤ ¤\sar¤ ¤ ¤ ¤ ¤\sar¤ ¤\sar¤ ¤\sar¤¤
+\cross{\XB}{\Wncurvar{wn}}¤\ear¤\cdot¤\ear¤\cross{\XB}{\Escurvar{es}}¤ ¤ ¤ ¤ ¤
+\cross{\XB}{\Wscurvar{ws}}¤\ear¤\cdot¤\ear¤\cross{\XB}{\Encurvar{en}}¤¤
+\sar¤ ¤\sar¤ ¤\sar¤ ¤ ¤ ¤ ¤\sar¤ ¤\sar¤ ¤\sar¤¤
+\cdot¤\ear¤\cross{\XB}{\Swcurvar{sw}}¤\ear¤\cdot¤ ¤ ¤ ¤ ¤
+\cdot¤\ear¤\cross{\XB}{\Securvar{se}}¤\ear¤\cdot¤¤
+\spacing(15,0,15)
+\end{diagram}
+\caption{Les huit flches courbes.}
+\end{figure}
+avec les codes de direction correspondants. La premire lettre du code de
+direction indique la position de la flche par rapport au diagramme; la seconde
+lettre prŽcise l'orientation globale de la flche. Ainsi \verb+\wscurvar+
+dessine une flche courbe, ˆ l'ouest du diagramme, orientŽe au sud. Comme pour
+les autres flches, une premire (ou dernire) lettre majuscule permet
+d'affubler la flche d'un nom.
+
+Les flches courbes sont des exemples typiques d'ŽlŽments qui sont
+gŽ\-nŽ\-ra\-le\-ment introduits via la commande \verb+\cross+ de la section~4, en
+un point du rŽseau partagŽ avec un objet ou une autre flche. Dans la figure~5,
+les ``boulets'' indiquent le centre formel des flches courbes, c'est-ˆ-dire le
+point du rŽseau en lequel elles sont attachŽes.
+
+La longueur par dŽfaut des flches courbes est 160 unitŽs, fournissant la
+situation de la figure~5. Comme les autres flches introduites dans un
+diagramme, une longueur arbitraire peut tre imposŽe comme premier argument
+optionnel.
+
+Les flches courbes sont Žgalement incluses dans {\em MiniDiagram} et {\em
+MicroDiagram}.
+
+
+\section{Corrections d'espacements}
+
+{\em Diagram} dŽtermine les dimensions d'un diagramme en comptant le nombre de
+lignes et de colonnes. Quand les dimensions rŽelles diffrent sensiblement de
+celles estimŽes par ce procŽdŽ, par exemple quand vous introduisez des flches
+courbes le long d'un diagramme, une correction d'espacement peut tre
+nŽcessaire. Elle se rŽalise via l'instruction \verb+\spacing(t,b,l)+ qui doit
+im\-pŽ\-ra\-ti\-ve\-ment tre donnŽe entre les derniers \S\S\ et l'instruction
+\verb+\end{diagram}+ (ou \verb+\end{floatingdiagram}+). Cette
+commande\footnote{N'abbrŽviez pas cette commande, cela troublerait profondŽment
+\TeX.} ajoute un espacement de $t$ points au dessus du diagramme, $l$ points ˆ
+gauche et $b$ points en dessous. $t$, $l$, $b$ sont des entiers positifs ou
+nŽgatifs.
+
+\begingroup%
+\catcode`\¤=\active\def¤{{\S}}%
+\begin{verbatim}
+\begin{diagram}[80]
+\diagramcaption{What a nice diagram!}
+...¤...¤...¤¤
+...¤...¤...¤...¤¤
+...¤...¤...¤...¤¤
+\spacing(10,-15,10)
+\end{diagram}
+\end{verbatim}%
+\endgroup%
+
+L'usage de la commande \verb+\cross+ peut provoquer des collisons
+entre une flche et le nom d'une autre flche. Ceci et d'autres situations
+inhabituelles peuvent tre corrigŽes par les instructions suivantes,
+qui ne perturbent pas la construction gŽnŽrale du diagramme.
+\begin{itemize}
+\item \verb+\movename(n,m){f}+ dŽplace le nom $f$ d'une flche $n$ points vers
+la droite et $m$ points vers le haut.
+\item \verb+\movearrow(n,m){\arrow}+ dŽplace la flche \verb+\arrow+ (et son
+nom Žventuel) $n$ points vers la droite et $m$ points vers le haut.
+\item
+\verb+\movevertex(n,m){XXX}+ dŽplace l'objet $XXX$ $n$ points vers la droite et
+$m$ points vers le haut.
+\item \verb+\movevertexleft{XXX}+ dŽplace un trop long objet $XXX$ situŽ ˆ
+gauche d'un diagramme de sorte que la flche horizontale suivante garde une
+longueur maximale.
+\item \verb+\movevertexright{XXX}+ dŽplace un trop long objet $XXX$
+situŽ ˆ droite d'un diagramme de sorte que la flche horizontale
+prŽcŽdente garde une longueur maximale.
+\end{itemize}
+
+Par exemple, le diagramme~4
+\begin{floatingdiagram}
+(A\oplus B)\otimes(C\oplus D) ¤ \Ear f¤ X\oplus V ¤¤
+\Sar g¤ ¤ \saR h¤¤
+Y\oplus W ¤ \eaR i¤ (E\oplus F)\otimes(G\oplus H) ¤¤
+\movevertexleft{(A\oplus B)\otimes(C\oplus D)} ¤ \Ear f¤ X\oplus V ¤¤
+\Sar g¤ ¤ \saR h¤¤
+Y\oplus W ¤ \eaR i¤ \movevertexright{(E\oplus F)\otimes(G\oplus H)}
+\diagramcaption{Ajustements automatiques et manuels.} ¤¤
+\end{floatingdiagram}
+a ŽtŽ obtenu en frappant
+\begingroup
+\catcode`\¤=\active\def¤{{\S}}
+\begin{verbatim}
+\begin{floatingdiagram}
+(A\oplus B)\otimes(C\oplus D)¤\Ear f¤X\oplus V¤¤
+\Sar g¤ ¤\saR h¤¤
+Y\oplus W¤\eaR i¤(E\oplus F)\otimes(G\oplus H)¤¤
+\movevertexleft{(A\oplus B)\otimes(C\oplus D)}¤\Ear f¤X\oplus V¤¤
+\Sar g¤ ¤\saR h¤¤
+Y\oplus W¤\eaR i¤\movevertexright{(E\oplus F)\otimes(G\oplus H)}
+\diagramcaption{Ajustements automatiques et manuels.}¤¤
+\end{floatingdiagram}
+\end{verbatim}
+\endgroup
+Le carrŽ supŽrieur est donc produit automatiquement par {\em Diagram}
+tandis que le carrŽ infŽrieur a ŽtŽ ajustŽ par l'utilisateur. A vous de
+choisir.\vfill
+
+\mbox{}\hfill{\footnotesize An English version of this user's guide is also
+available.}
+
+
+\end{document}
diff --git a/macros/generic/diagrams/borceux/user-guides/Diagram_Read_Me b/macros/generic/diagrams/borceux/user-guides/Diagram_Read_Me
new file mode 100644
index 0000000000..f15aefe8e4
--- /dev/null
+++ b/macros/generic/diagrams/borceux/user-guides/Diagram_Read_Me
@@ -0,0 +1,579 @@
+\documentstyle{article}
+
+\textheight520pt
+\textwidth349pt
+\footskip15pt
+
+\hoffset-35mm
+\voffset-35mm
+
+\title{User's guide for {\em Diagram 3}\thanks{With respect
+to versions 1 and 2, the shape of arrows has been improved, the variety of
+directions and arrows available has been more than doubled, all diagram arrows
+admit an optional length argument, the typing of diagrams has been shortened, error
+and help messages have been introduced. To typeset with {\em Diagram~3}, diagrams
+prepared with versions~1 or~2, read the file {\em OldDiagram} after the file {\em
+Diagram}.}}
+\author{Francis Borceux, Louvain-la-Neuve}
+
+\font\bldfc=cmmib10
+\def\boldface#1{\mbox{\bldfc#1}}
+
+\newcommand{\XA}%
+{\truex{300}%
+\begin{picture}(0,0)%
+\put(0,0){\circle{\value{x}}}%
+\end{picture}}
+
+\newcommand{\XB}%
+{\truex{500}%
+\begin{picture}(0,0)%
+\put(0,0){\circle*{\value{x}}}%
+\end{picture}}
+
+\newcommand{\V}[3]{\cross{\XB}{\movevertex(#1,#2){\scriptstyle#3}}}
+
+\begin{document}
+
+\maketitle
+
+\section{The {\em Diagram} macros}
+
+The {\em Diagram macros} realize the construction of diagrams as
+those appearing in category theory texts. The user gives the list
+of vertices and arrows to be included, just as when composing a
+matrix, and the program takes care of computing the dimensions of
+the arrows and realizing the pagesetting. All the user has to do
+about the arrows is precising their type (monomorphism, pair of
+adjoint arrows,\ldots) and their direction (north,
+south-east,\ldots): 12 types and 32 directions are available; see
+figures~1 and~3 for exhaustive lists.
+
+A file {\em MultipleArrows} exists, producing additional
+triple, quadruple and quintuple arrows, parallel or adjoint, but
+the size of those pictures is so big that severe restrictions apply
+to them.
+
+The {\em Diagram macros} make a big use of \LaTeX\ commands and
+cannot work without \LaTeX\ being loaded.
+
+Some small implementations of \TeX, essentially those limited to
+$2^{16}$ words of memory, are unable to handle the {\em Diagram
+macros}. For those cases, two levels of restricted files have been
+created, where the restriction applies just to the number of types
+of arrows:
+\begin{itemize}
+\item {\em MicroDiagram} is only able to design plain arrows;
+\item {\em MiniDiagram} designs plain arrows, pairs of
+plain arrows and adjoint pairs of plain arrows.
+\end{itemize}
+The restriction is even more subtle, since arrows are produced
+here in a more economical way.
+
+Big diagrams require much \TeX\ memory when typesetting; if you are
+badly limited, try to produce them as separate one-page documents. To save
+memory, you can also cancel from a file those macros you are not intending to
+use. Do not copy macros from {\em Diagram} to {\em MiniDiagram} or {\em
+MicroDiagram}\/: this would not work.
+
+The {\em Diagram macros} have been designed to give optimal results
+on printers with resolutions up to 300dpi. In the case of printers
+with higher resolutions, the parameter {\em printerresolution}
+given as a first instruction of the file {\em Diagram} must be changed
+accordingly. Notice that reducing this parameter is another way of
+saving \TeX\ memory. This parameter does not exist in the files
+{\em MicroDiagram} and {\em Minidiagram}.
+
+\section{Arrows in formulas}
+
+Arrows can be introduced in formulas, thus in a line of
+text between single dollars or in a displayed formula, between
+double dollars. While the command to be given is the same, the
+effect which is produced is different in the text and in a
+displayed formula. The variety of arrows available is described in
+figure~1.
+\begin{figure}
+\settextarrowlength{45}
+\begin{center}
+\begin{tabular}{|l|c|l|}
+\hline
+{\bf Name}&{\bf Arrow}&{\bf Code}\\
+\hline\hline
+plain arrow&$\ar$&ar\\
+dotted arrow&$\dotar$&dotar\\
+distributor&$\dist$&dist\\
+monomorphism&$\mono$&mono\\
+epimorphism&$\epi$&epi\\
+bimorphism&$\bimo$&bimo\\
+isomorphism&$\iso$&iso\\
+equality&$\eql$&eql\\ & & \\
+pair of arrows&$\biar$&biar\\ & & \\
+adjoint arrows&$\adjar$&adjar\\ & & \\
+pair of distributors&$\bidist$&bidist\\ & & \\
+adjoint distributors&$\adjdist$&adjdist\\
+\hline
+\end{tabular}
+\hspace{5mm}
+\begin{minipage}{30mm}
+The codes {\em iso, dist, bidist, adjdist} are generic:
+the marks $\cong$, $\circ$ can be changed anywhere in the document via the
+instructions \verb+\isomark{...}+, \verb+\distmark{...}+,
+where \verb+...+ are the new marks. The default marks are \verb+\cong+ and
+\verb+\distcircle+.
+\end{minipage}
+\end{center}
+\caption{The various types of arrows.}
+\settextarrowlength{20}
+\end{figure}
+\begin{itemize}
+\item To produce a given type of formula arrow
+in the forward direction (as in figure~1), just type a {\em
+backslash} followed by the code for this type of arrow: thus
+\verb+$f \colon A \mono B$+ will produce $f \colon A \mono B$.
+\item To produce a given type of formula arrow in the ``backward'' direction, type a
+command starting with \verb+\bk+ and ending with the code for the type of
+arrow: thus \verb+$g \colon B \bkepi C$+ produces $g \colon B \bkepi C$.
+\item To give an upper name to one of the previous arrows, just use
+a first uppercase letter and give the name as an argument: thus
+\verb+$C \Dist h D$+ will produce $C \Dist h D$. Of course, when
+the picture consists of two arrows, two names must be given, first
+the top one and next the bottom one; for example
+\verb+$D \Bkadjar ij E$+ to produce $D \Bkadjar ij E$. As usual, when
+the names are not single tokens, use curly brackets to delimit them.
+\end{itemize}
+To let you appreciate the difference between {\em textstyle} and
+{\em displaystyle}, here are the previous arrows in {\em display
+style}
+$$ A \Mono f B \Bkepi g C \Dist h D \Bkadjar ij E $$
+introduced via the commands
+\begin{verbatim}
+$$ A \Mono f B \Bkepi g C \Dist h D \Bkadjar ij E $$
+\end{verbatim}
+
+The default length of a {\em text arrow} is 20pt while the names
+are processed in {\em scriptstyle}; the default length of a {\em display
+arrow} is 30 pt and the names are processed in {\em textstyle}. The
+default lengthes can be changed at any time in the document via
+instructions of the form
+\begin{verbatim}
+\settextarrowlength{25}
+\setdisplayarrowlength{40}
+\end{verbatim}
+where 25 and 40 express the new lengthes in points.
+
+\section{Constructing a diagram}
+
+To construct a 2-dimensional diagram, imagine a pattern of
+points, visualized by circles and bullets as in figure~2:
+\begin{figure}
+\begin{diagram}
+\XB¤\XA¤\XB¤\XA¤\XB¤\XA¤\XB¤¤
+\XA¤\cross{\XA}{\sear}¤\cross{\XA}{\esear}¤\cross{\XA}{\eesear}¤\XA¤\XA¤\XA¤¤
+\XB¤\cross{\XA}{\ssear}¤\XB¤\cross{\XA}{\ear}¤\XB¤\cross{\XA}{\ear}¤\XB¤¤
+\XA¤\XA¤\cross{\XA}{\sar}¤\XA¤\cross{\XA}{\sar}¤\XA¤\cross{\XA}{\sar}¤¤
+\XB¤\XA¤\XB¤\cross{\XA}{\ear}¤\XB¤\cross{\XA}{\ear}¤\XB¤¤
+\end{diagram}
+\caption{Conceiving a 2-dimensional diagram.}
+\end{figure}
+the bullets indicate the points of this pattern where vertices
+could be expected. Each vertex and each arrow is attached by its center at a
+point of the pattern. It suffices now to enumerate the items, line by line and
+column by column, like for a matrix; in particular when all actual items of a
+line have been enumerated, you can pass directly to the next line. All items are
+processed in math mode. The program will take care of choosing correctly the
+length of each arrow.
+
+A vertex is typed as any mathematical formula. The rules for typing
+an arrow are completely analogous to those of section~2:
+the various types of arrows are again those of figure~1 while
+the possible directions and their codes are given in figure~3.
+\begin{figure}
+\begin{diagram}[60]
+\XB¤\XA¤\V{0}{10}{nwnnw}¤\XA¤\V{0}{10}{nnnw}¤\XA¤\XB¤\XA¤\V{0}{10}{nnne}¤
+\XA¤\V{0}{10}{nenne}¤\XA¤\XB¤¤
+\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤¤
+\V{-10}{0}{\makebox[0pt][r]{$\scriptstyle nwwnw$}}¤\XA¤\XB¤\XA¤
+\V{-5}{10}{\boldface{nnw}}¤\XA¤\XB¤\XA¤\V{5}{10}{\boldface{nne}}¤\XA¤\XB¤\XA¤
+\V{10}{0}{\makebox[0pt][l]{$\scriptstyle
+neene$}}¤¤
+\XA¤\XA¤\XA¤\XA¤\cross{\XA}{\nwnnwar}¤\cross{\XA}{\nnnwar}¤\XA¤\cross{\XA}{\nnnear}¤
+\cross{\XA}{\nennear}¤\XA¤\XA¤\XA¤\XA¤¤
+\V{-10}{0}{\makebox[0pt][r]{$\scriptstyle
+wwnw$}}¤\XA¤\V{-10}{10}{\boldface{wnw}}¤\cross{\XA}{\nwwnwar}¤
+\V{-5}{10}{\boldface{nw}}¤\cross{\XA}{\bold\nnwar}¤\V{0}{10}{\boldface{n}}¤
+\cross{\XA}{\bold\nnear}¤\V{5}{10}{\boldface{ne}}¤\cross{\XA}{\neenear}¤
+\V{10}{10}{\boldface{ene}}¤\XA¤\V{10}{0}{\makebox[0pt][l]{$\scriptstyle
+eene$}}¤¤
+\XA¤\XA¤\XA¤\cross{\XA}{\wwnwar}¤\cross{\XA}{\bold\wnwar}¤\cross{\XA}{\bold\nwar}¤
+\cross{\XA}{\bold\nar}¤\cross{\XA}{\bold\near}¤\cross{\XA}{\bold\enear}¤
+\cross{\XA}{\eenear}¤\XA¤\XA¤\XA¤¤
+\XB¤\XA¤\XB¤\XA¤\V{-10}{0}{\boldface{w}}¤\cross{\XA}{\bold\war}¤\XB¤
+\cross{\XA}{\bold\ear}¤\V{10}{0}{\boldface{e}}¤\XA¤\XB¤\XA¤\XB¤¤
+\XA¤\XA¤\XA¤\cross{\XA}{\wwswar}¤\cross{\XA}{\bold\wswar}¤\cross{\XA}{\bold\swar}¤
+\cross{\XA}{\bold\sar}¤\cross{\XA}{\bold\sear}¤\cross{\XA}{\bold\esear}¤
+\cross{\XA}{\eesear}¤\XA¤\XA¤\XA¤¤
+\V{-10}{0}{\makebox[0pt][r]{$\scriptstyle
+wwsw$}}¤\XA¤\V{-10}{-10}{\boldface{wsw}}¤\cross{\XA}{\swwswar}¤
+\V{-5}{-10}{\boldface{sw}}¤\cross{\XA}{\bold\sswar}¤\V{0}{-10}{\boldface{s}}¤
+\cross{\XA}{\bold\ssear}¤\V{5}{-10}{\boldface{se}}¤\cross{\XA}{\seesear}¤
+\V{10}{-10}{\boldface{ese}}¤\XA¤\V{10}{0}{\makebox[0pt][l]{$\scriptstyle
+eese$}}¤¤
+\XA¤\XA¤\XA¤\XA¤\cross{\XA}{\swsswar}¤\cross{\XA}{\ssswar}¤\XA¤\cross{\XA}{\sssear}¤
+\cross{\XA}{\sessear}¤\XA¤\XA¤\XA¤\XA¤¤
+\V{-10}{0}{\makebox[0pt][r]{$\scriptstyle
+swwsw$}}¤\XA¤\XB¤\XA¤\V{-5}{-10}{\boldface{ssw}}¤\XA¤\XB¤\XA¤
+\V{5}{-10}{\boldface{sse}}¤\XA¤\XB¤\XA¤
+\V{10}{0}{\makebox[0pt][l]{$\scriptstyle seese$}}¤¤
+\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤¤
+\XB¤\XA¤\V{0}{-10}{swssw}¤\XA¤\V{0}{-10}{sssw}¤\XA¤\XB¤\XA¤\V{0}{-10}{ssse}¤
+\XA¤\V{0}{-10}{sesse}¤\XA¤\XB¤¤
+\end{diagram}
+\caption{The 32 directions for {\em Diagram} arrows.}
+\end{figure}
+Taking some
+liberty with geography and trigonometry, the 32 directions considered
+by the {\em Diagram macros} are named after those of the compass card.
+\begin{itemize}
+\item To produce a type of arrow in a given direction, type a {\em
+backslash} followed by the code of the direction and the code of
+the arrow. For example \verb+\nemono+ draws a north-east
+monomorphism.
+\item To give an upper name to a diagram arrow, use a first upper case
+letter and give the name as an argument. For example
+\verb+\Ssedist f+ draws a south-sout-east distributor with upper
+name $f$. Of course, when the picture consists in two arrows,
+two names must be given: first the upper one and next the lower one.
+In the case of vertical arrows, read {\em left} instead of {\em
+upper}.
+\item The procedure for giving a lower name is analogous, but uses
+a last uppercase letter. Thus \verb+\wbimO f+ produces a west
+bimorphism with lower name $f$. In the case of vertical arrows,
+read {\em right} instead of {\em lower}. For two-arrow pictures,
+both naming procedures are equivalent.
+\end{itemize}
+All 12 types of arrows exist in all 16 principal directions printed in bold
+in figure~3; just plain arrows are provided in the 16 other
+directions.
+
+It remains to explain the syntax\footnote{This syntax uses the character \S. If
+this is a problem for you, just replace \S\ by any character you are unlikely to
+use in a digram, for example ?; you can safely make this change globally and
+automatically in the file {\em Diagram}.} for typing diagrams. This is just
+\begingroup%
+\catcode`\¤=\active\def¤{{\S}}%
+\begin{verbatim}
+\begin{diagram}
+...¤...¤...¤¤
+...¤...¤...¤...¤¤
+...¤...¤...¤...¤¤
+\end{diagram}
+\end{verbatim}%
+\endgroup%
+\noindent where \verb+...+ denote the various items of the diagram. So a
+single \S\ is the delimiter between two items of a same line, while
+a double \S\S\ indicate the end of a line. Typing the double \S\S\ at the end of the last line is
+compulsory and nothing should stand between this double \S\S\ and the
+\verb+\end{diagram}+ instruction (well, there is a single exception to this rule,
+explained in section~6). Do not forget a blank space to indicate an empty item,
+since two consecutive \S\S\ would be interpreted as an {\em end of line} symbol; of
+course several blank spaces are always equivalent to a single one.
+
+So diagram~1,
+\begin{floatingdiagram}
+A¤¤
+ ¤\Sedotar x¤\eseaR y ¤\Eesear z¤¤
+ ¤\sseaR u ¤A ¤\Eepi a ¤B ¤\Emono b¤C ¤¤
+ ¤ ¤\saR c ¤ ¤\Sadjar de¤ ¤\seqL{1_C}¤¤
+ ¤ ¤D ¤\waR g ¤D\oplus E ¤\eaR h ¤C ¤¤
+\end{floatingdiagram}
+which has the precise shape of the diagram conceived in figure~2, is produced by
+the following commands:
+\begingroup%
+\catcode`\¤=\active\def¤{{\S}}%
+\begin{verbatim}
+\begin{diagram}
+A¤¤
+ ¤\Sedotar x¤\eseaR y ¤\Eesear z¤¤
+ ¤\sseaR u ¤A ¤\Eepi a ¤B ¤\Emono b¤C ¤¤
+ ¤ ¤\saR c ¤ ¤\Sadjar de¤ ¤\seqL{1_C}¤¤
+ ¤ ¤D ¤\waR g ¤D\oplus E ¤\eaR h ¤C ¤¤
+\end{diagram}
+\end{verbatim}%
+\endgroup%
+
+There is a second, completely analogous environment for producing
+diagrams; it has the form
+\begingroup%
+\catcode`\¤=\active\def¤{{\S}}%
+\begin{verbatim}
+\begin{floatingdiagram}
+...¤...¤...¤¤
+...¤...¤...¤...¤¤
+...¤...¤...¤...¤¤
+\end{floatingdiagram}
+\end{verbatim}%
+\endgroup%
+\noindent As the name indicates, the diagram is then introduced as
+a floating body and will automatically receive a numbered label
+(cf.~diagrams~1~to~3). The default is to number successively the
+diagrams through all the document. You can prefer
+a number 3.12 for, let us say, the twelfth diagram of chapter~3
+(in a style which contains chapters!). This is forced
+by the instruction
+\begin{verbatim}
+\setdiagramcounter{chapter}
+\end{verbatim}
+where, of course, {\em chapter} can be replaced by any sectioning
+level, for example {\em part, section,\ldots} For non-English texts, you
+will also want to ``translate'' the word {\em Diagram} in the label: this
+is achieved by an instruction like
+\begin{verbatim}
+\diagramlabel{Diagramme}
+\end{verbatim}
+given anywhere in the text, but not inside a diagram.
+
+Every diagram, floating or not, can be given a caption. This is done
+by the instruction
+\begin{verbatim}
+\diagramcaption{...}
+\end{verbatim}
+which can be introduced anywhere in the diagram, but before the last two
+\S\S. In the case of a floating diagram, this caption completes the automatic
+label, as in diagram~4.
+
+\section{Changing the sizes}
+
+The step of the pattern
+underlying a diagram is 40~units, where the default value of the unit is 1pt.
+This default value can be ``scaled'' at any time in the document by giving an
+instruction like
+\begin{verbatim}
+\setdefaultscale{75}
+\end{verbatim}
+(scaling factor of 75\%); this instruction applies to all subsequent diagrams
+and must be given outside a diagram environment.
+If you want to apply a scaling factor to just one specific diagram, give the
+scaling factor as an optional argument of the corresponding environment; thus
+type
+\begin{verbatim}
+\begin{diagram}[125]
+........
+\end{diagram}
+\end{verbatim}
+for an enlargement of 125\%, and correspondingly for floating diagrams. The
+scaling factor given for a specific diagram overrides the {\em defaultscale}
+value just for this specific diagram. For example, diagram~1 is not scaled and
+diagram~2 is the same diagram, scaled at 75\%. Observe the precise
+effect of the scaling option: this is by no way a brute homothetic process.
+\begin{floatingdiagram}[75]
+A¤¤
+ ¤\Sedotar x¤\eseaR y ¤\Eesear z¤¤
+ ¤\sseaR u ¤A ¤\Eepi a ¤B ¤\Emono b¤C ¤¤
+ ¤ ¤\saR c ¤ ¤\Sadjar de¤ ¤\seqL{1_C}¤¤
+ ¤ ¤D ¤\waR g ¤D\oplus E ¤\eaR h ¤C ¤¤
+\end{floatingdiagram}
+
+To motivate the next features, consider the conception of a
+3-dimensional diagram, as in figure~4. Compare first the subpattern of bullets
+with that of figure~2.
+\begin{figure}
+\begin{diagram}[50]
+\XB¤\XA¤\cross{\XA}{\ear[130]}¤\XA¤\XB¤\XA¤\cross{\XA}{\ear[130]}¤\XA¤\XB¤\XA¤\XA¤¤
+\XA¤\cross{\XA}{\sear}¤\XA¤\XA¤\XA¤\cross{\XA}{\sear}¤\XA¤\XA¤\XA¤\cross{\XA}{\sear}¤\XA¤¤
+\cross{\XA}{\sar[130]}¤\XA¤\XB¤\XA¤\cross{\XA}{\cross{\ear[130]}{\sar[130]}}¤\XA
+ ¤\XB¤\XA¤\cross{\XA}{\cross{\ear[130]}{\sar[130]}}¤\XA¤\XB¤¤
+\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤\XA¤¤
+\XB¤\XA¤\cross{\XA}{\cross{\ear[130]}{\sar[130]}}¤\XA¤\XB¤
+ ¤\cross{\XA}{\cross{\ear[130]}{\sar[130]}}¤\XA¤\XB¤\XA¤\cross{\XA}{\sar[130]}¤¤
+\XA¤\cross{\XA}{\sear}¤\XA¤\XA¤\XA¤\cross{\XA}{\sear}¤\XA¤\XA¤\XA¤\cross{\XA}{\sear}¤\XA¤¤
+\XA¤\XA¤\XB¤\XA¤\cross{\XA}{\ear[130]}¤\XA¤\XB¤\XA¤\cross{\XA}{\ear[130]}¤\XA¤\XB¤¤
+\end{diagram}
+\caption{Conceiving a 3-dimensional diagram}
+\end{figure}
+In this case, not only you must
+``cross'' different arrows at a same point of the pattern,
+but you must also consider arrows which cross several points
+of the pattern before reaching the objects they connect. In fact, the {\em
+Diagram macros} assume that an arrow attached at some point of the
+pattern connects the two adjacent points of the pattern, in the direction of the
+arrow. When this is not the case, it is left on you to determine the length of
+the corresponding arrow.
+
+To impose a specific length to a diagram arrow, just give the corresponding extent as
+an optional argument\footnote{This argument should be an actual positive
+integer; anything else, including the value of a counter, could put \TeX\ in
+deep trouble. The formula arrows (section~2) do not admit this optional
+argument.}:the extent of vertical and horizontal arrows is their length; the extent
+of other arrows is the length of their horizontal projection (see \LaTeX\ manual,
+{\em Picture environment}, for further explanations). Thus \verb+\Near[60]f+ draws a
+north-east arrow of horizontal extent 60 units with upper name $f$. Here are
+the basic default extents of diagram arrows: 50 in the directions n, s, e, w;
+59 in the directions ne, nw, se, sw; 133 in the directions ene, ese, wnw,
+wsw; 67 in the directions nne, sse, nnw, ssw; 211 in the directions
+eene, eese, wwnw, wwsw; 71 in the directions nnne, ssse, nnnw,
+sssw; 215 in the direction neene, seese, nwwnw, swwsw; 143 in the
+directions nenne, sesse, nwnnw, swssw. In most circumstances, you will obtain
+the required extent by augmenting the basic default extent by 40 for
+each additional point of the formal pattern crossed by the arrow.
+
+As far as ``crossing arrows'' is concerned, the command
+\begin{verbatim}
+\cross{item 1}{item 2}
+\end{verbatim}
+allows you to introduce at the same time {\em item~1} and {\em
+item~2} at the same point of the pattern; those two items can be
+indifferently vertices or arrows. Diagram~3,
+conceived in figure~4, must thus be typed as
+\begingroup
+\catcode`\¤=\active\def¤{{\S}}
+\begin{verbatim}
+\begin{floatingdiagram}[50]
+A¤ ¤\ear[130]¤ ¤B¤ ¤\ear[130]¤ ¤C¤¤
+¤\sear¤ ¤ ¤ ¤\sear¤ ¤ ¤ ¤\sear ¤¤
+\sar[130]¤ ¤D¤ ¤\cross{\ear[130]}{\sar[130]}¤
+ ¤E¤ ¤\cross{\ear[130]}{\sar[130]}¤ ¤F¤¤ ¤¤
+G¤ ¤\cross{\ear[130]}{\sar[130]}¤ ¤H¤
+ ¤\cross{\ear[130]}{\sar[130]}¤ ¤I¤ ¤\sar[130]¤¤
+¤\sear¤ ¤ ¤ ¤\sear¤ ¤ ¤ ¤\sear¤¤
+¤ ¤J¤ ¤\ear[130]¤ ¤K¤ ¤\ear[130]¤ ¤L¤¤
+\end{floatingdiagram}
+\end{verbatim}
+\endgroup
+\begin{floatingdiagram}[50]
+A¤ ¤\ear[130]¤ ¤B¤ ¤\ear[130]¤ ¤C¤¤
+¤\sear¤ ¤ ¤ ¤\sear¤ ¤ ¤ ¤\sear ¤¤
+\sar[130]¤ ¤D¤ ¤\cross{\ear[130]}{\sar[130]}¤
+ ¤E¤ ¤\cross{\ear[130]}{\sar[130]}¤ ¤F¤¤ ¤¤
+G¤ ¤\cross{\ear[130]}{\sar[130]}¤ ¤H¤
+ ¤\cross{\ear[130]}{\sar[130]}¤ ¤I¤ ¤\sar[130]¤¤
+¤\sear¤ ¤ ¤ ¤\sear¤ ¤ ¤ ¤\sear¤¤
+¤ ¤J¤ ¤\ear[130]¤ ¤K¤ ¤\ear[130]¤ ¤L¤¤
+\end{floatingdiagram}
+
+Finally you can change the thickness of a diagram arrow by typing first the command
+\verb+\bold+; thus \verb+\bold\nar+ produces a bold north arrow. This
+\verb+\bold+ option will be cancelled by the next \S\ sign; you can cancel its
+effects earlier (for example during a \verb+\cross+ command) by the
+instruction \verb+\unbold+. See figure~3 for examples of bold arrows.
+
+\section{Curved arrows}
+
+The {\em Diagram macros} provide also eight curved arrows which can be used
+for connecting two rather distant points lying on a same edge of a diagram;
+the code for curved arrows is {\em curvar}.
+These arrows are presented in figure~5, scaled at 50\%,
+\begin{figure}
+\begin{diagram}[50]
+\cdot¤\ear¤\cross{\XB}{\Necurvar{ne}}¤\ear¤\cdot¤ ¤ ¤ ¤ ¤
+\cdot¤\ear¤\cross{\XB}{\Nwcurvar{nw}}¤\ear¤\cdot¤¤
+\sar¤ ¤\sar¤ ¤\sar¤ ¤ ¤ ¤ ¤\sar¤ ¤\sar¤ ¤\sar¤¤
+\cross{\XB}{\Wncurvar{wn}}¤\ear¤\cdot¤\ear¤\cross{\XB}{\Escurvar{es}}¤ ¤ ¤ ¤ ¤
+\cross{\XB}{\Wscurvar{ws}}¤\ear¤\cdot¤\ear¤\cross{\XB}{\Encurvar{en}}¤¤
+\sar¤ ¤\sar¤ ¤\sar¤ ¤ ¤ ¤ ¤\sar¤ ¤\sar¤ ¤\sar¤¤
+\cdot¤\ear¤\cross{\XB}{\Swcurvar{sw}}¤\ear¤\cdot¤ ¤ ¤ ¤ ¤
+\cdot¤\ear¤\cross{\XB}{\Securvar{se}}¤\ear¤\cdot¤¤
+\spacing(15,0,15)
+\end{diagram}
+\caption{The eight curved arrows}
+\end{figure}
+together with the
+corresponding direction codes. The first
+letter of the direction code indicates the position of the arrow with respect to the
+diagram; the second letter indicates the global direction of the arrow. So
+\verb+\wscurvar+ draws a curved arrow, on the west side of the diagram, oriented
+to the south. As for the other arrows, a first (or last) upper case letter allows you
+to name the curved arrows.
+
+Curved arrows are a typical example of items which are generally introduced
+via the \verb+\cross+ command of section~4, at a formal point of the pattern
+which they share with a vertex or another arrow. In figure~5, the bullets
+indicate the formal ``center'' of the curved arrows; i.e.~the point of the
+pattern where to attach them.
+
+The default extent of curved arrows is 160 units, yielding the situation of
+figure~5. As for other diagram arrows, an arbitary extent can be imposed as a
+first optional argument (again an actual positive integer!).
+
+Curved arrows are also part of the {\em MicroDiagram} and {\em Minidiagram}
+packages.
+
+\section{Spacing adjustments}
+
+The {\em Diagram macros} determine the dimensions of a diagram by counting the
+number of rows and columns in the formal pattern. When the actual dimensions
+are rather different from those estimated in this way, for example when you
+introduce curved arrows along a diagram, a spacing correction can be needed.
+This is realized via the command \verb+\spacing(t,l,b)+
+which must imperatively be given between the \S\S\ of the last line and the
+instruction \verb+\end{diagram}+ (or \verb+\end{floatingdiagram}+). This
+command\footnote{Do not
+abbreviate that command, this would put \TeX\ in deep trouble.}
+adds $t$ points space at the top of the diagram, $l$ points space at the left and
+$b$ points space at the bottom. $t$, $l$, $b$ should be positive or negative
+integers.
+\begingroup%
+\catcode`\¤=\active\def¤{{\S}}%
+\begin{verbatim}
+\begin{diagram}[80]
+\diagramcaption{What a nice diagram!}
+...¤...¤...¤¤
+...¤...¤...¤...¤¤
+...¤...¤...¤...¤¤
+\spacing(10,-15,10)
+\end{diagram}
+\end{verbatim}%
+\endgroup%
+
+When using the \verb+\cross+ command, it can also happen that an arrow
+collides with the name of another arrow. To take care of this and other
+unusual situations, commands exist to move elements of a diagram without
+disturbing the general construction.
+\begin{itemize}
+\item \verb+\movename(n,m){f}+ moves the name $f$ of an arrow $n$ points right
+and $m$ points up.
+\item \verb+\movearrow(n,m){\arrow}+ moves the arrow \verb+\arrow+ (and its
+name when there is one) $n$ points right and $m$ points up.
+\item \verb+\movevertex(n,m){XXX}+ moves the vertex $XXX$ $n$ points right and
+$m$ points up.
+\item \verb+\movevertexleft{XXX}+ moves a too long vertex $XXX$
+positioned on the left edge of a diagram,
+so that the next horizontal arrow keeps maximal length.
+\item \verb+\movevertexright{XXX}+ moves a too long vertex $XXX$
+positioned on the right edge of a diagram,
+so that the previous horizontal arrow keeps a maximal length.
+\end{itemize}
+
+For example, diagram~4
+\begin{floatingdiagram}
+(A\oplus B)\otimes(C\oplus D) ¤ \Ear f¤ X\oplus V ¤¤
+\Sar g¤ ¤ \saR h¤¤
+Y\oplus W ¤ \eaR i¤ (E\oplus F)\otimes(G\oplus H) ¤¤
+\movevertexleft{(A\oplus B)\otimes(C\oplus D)} ¤ \Ear f¤ X\oplus V ¤¤
+\Sar g¤ ¤ \saR h¤¤
+Y\oplus W ¤ \eaR i¤ \movevertexright{(E\oplus F)\otimes(G\oplus H)}
+\diagramcaption{Automatic and manual adjustments} ¤¤
+\end{floatingdiagram}
+has been obtained by just typing
+\begingroup
+\catcode`\¤=\active\def¤{{\S}}
+\begin{verbatim}
+\begin{floatingdiagram}
+(A\oplus B)\otimes(C\oplus D)¤\Ear f¤X\oplus V¤¤
+\Sar g¤ ¤ \saR h¤¤
+Y\oplus W¤\eaR i¤(E\oplus F)\otimes(G\oplus H)¤¤
+\movevertexleft{(A\oplus B)\otimes(C\oplus D)}¤\Ear f¤ X\oplus V¤¤
+\Sar g¤ ¤\saR h¤¤
+Y\oplus W¤\eaR i¤\movevertexright{(E\oplus F)\otimes(G\oplus H)}
+\diagramcaption{Automatic and manual adjustments}¤¤
+\end{floatingdiagram}
+\end{verbatim}
+\endgroup
+The upper square is thus produced automatically by the {\em Diagram macros},
+while the lower square has been adjusted by the user. Make your choice.
+\vfill
+
+\mbox{}\hfill{\footnotesize Une version fran\c caise de ce mode d'emploi est
+\'egalement disponible.}
+
+
+\end{document}
diff --git a/macros/generic/diagrams/circ/COPYING b/macros/generic/diagrams/circ/COPYING
new file mode 100644
index 0000000000..d60c31a97a
--- /dev/null
+++ b/macros/generic/diagrams/circ/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/macros/generic/diagrams/circ/Makefile b/macros/generic/diagrams/circ/Makefile
new file mode 100644
index 0000000000..00d731fbc9
--- /dev/null
+++ b/macros/generic/diagrams/circ/Makefile
@@ -0,0 +1,115 @@
+# Makefile to install CIRC
+# Copyright (C) 1998 Andreas Tille
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# -- Testversion --
+# It is very likely to contain errors!!!!!!!!!!!!
+# Use it only at your own risk!!
+# Please report errors in this file to tille@physik.uni-halle.de
+#
+# Andreas Tille 03/16/1998
+#
+INSTDIR=/usr/local/lib/texmf
+CIRCMF=$(INSTDIR)/mf/circ
+CIRCTEX=$(INSTDIR)/tex/circ
+FONTMAP=/usr/lib/texmf/fontname/special.map
+CIRCMFFILES=cibimos \
+ cicirc \
+ cidiod \
+ cioptic \
+ ciphysic\
+ cirest \
+ cisym \
+ ciwidko
+PKFONTDIR=/var/spool/texmf/pk
+TFMDIR=/var/spool/texmf/tfm
+
+all: circ.drv circ.dtx
+
+.PHONY: all
+
+doc: circ.dvi circ.dtx
+
+circ.drv: circ.dtx
+ tex circ.dtx
+
+install: circ.drv
+# delete old CIRC METAFONT files
+ if [ -d $(CIRCMF) ] ; then \
+ rm -rf $(CIRCMF)/ci*.mf $(CIRCMF)/csym.mf $(CIRCMF)/defcirc.mf ; \
+ else \
+ mkdir -p $(CIRCMF) ; \
+ fi
+# move new CIRC METAFONT files
+ mv *.mf $(CIRCMF)
+# delete old CIRC TeX files
+ if [ -d $(CIRCTEX) ] ; then \
+ rm -rf $(CIRCTEX)/*.def $(CIRCTEX)/circ.sty ; \
+ else \
+ mkdir -p $(CIRCTEX) ; \
+ fi
+# move new CIRC TeX files
+ mv *.def circ.sty $(CIRCTEX)
+# check fontmap special.map file for existing CIRC entries and
+# append the necessary entries if not available
+ if [ ! -f $(FONTMAP) ] ; then \
+ mkdir -p `dirname $(FONTMAP)` ; \
+ touch $(FONTMAP) ; \
+ fi
+ if [ `grep -i -s -c cicirc $(FONTMAP)` -eq 0 ] ; then \
+ echo "@c CIRC fonts written by Sebastian Tannert and Andreas Tille" >> $(FONTMAP) ; \
+ fi
+ for mffile in $(CIRCMFFILES) ; \
+ do \
+ if [ `grep -i -s -c $$mffile $(FONTMAP)` -eq 0 ] ; then \
+ echo "$$mffile public circ % CIRC-package" >> $(FONTMAP) ; \
+ fi \
+ done
+ make cleanpk
+ make cleantfm
+
+circ.dvi: circ.drv circ.dtx
+ latex circ.drv
+ makeindex -s circ.ist circ.idx
+ latex circ.drv
+ makeindex -s circ.ist circ.idx
+ latex circ.drv
+
+cleantfm:
+# delete old CIRC TFM files (according to entries in special.map)
+ if [ -d $(TFMDIR)/public ] ; then \
+ rm -rf $(TFMDIR)/public/circ ; \
+ fi
+
+cleanpk:
+# delete old CIRC PK files (according to entries in special.map)
+ if [ -d $(PKFONTDIR) ] ; then \
+ for deldir in `find $(PKFONTDIR) -name circ -type d | grep "public/circ"` ; \
+ do \
+ rm -rf $$deldir ; \
+ done \
+ fi
+
+clean:
+ rm -f circ.log circ.idx circ.aux circ.toc circ.ind circ.ilg circ.ist *.600pk *.tfm
+
+cleansource:
+ rm -f *.mf *.def circ.sty
+
+veryclean:
+ make clean
+ make cleansource
+ rm -f cidoc.tex circ.drv circ.dvi cisyms.tex index.hlp
diff --git a/macros/generic/diagrams/circ/README b/macros/generic/diagrams/circ/README
new file mode 100644
index 0000000000..de0f64d975
--- /dev/null
+++ b/macros/generic/diagrams/circ/README
@@ -0,0 +1,22 @@
+
+NEW VERSION OF CIRC
+
+This is CIRC version 1.0f.
+
+The package \CIRC is a tool for typesetting circuit diagrams. It
+defines several electrical symbols like resistor, capacitor,
+transistors etc. This symbols can be connected with wires in a
+very easy manner.
+
+For using \CIRC you only need \METAFONT and \LaTeX{}. You do not
+need postscript or any drawing tool. You can expand \CIRC easily
+with your own symbols, written in \METAFONT.
+
+CIRC is an open system. As an example in this package is an
+optics style with lenses, mirrors and so on to show, how to use
+the macros and expand the package.
+
+It runs with LaTeX2e.
+
+To install \CIRC first run TeX on "circ.dtx" or LaTeX on "circ.ins" !
+
diff --git a/macros/generic/diagrams/circ/circ.dtx b/macros/generic/diagrams/circ/circ.dtx
new file mode 100644
index 0000000000..1316a676e6
--- /dev/null
+++ b/macros/generic/diagrams/circ/circ.dtx
@@ -0,0 +1,6053 @@
+%^^A last update: Fri 03-13-1998
+%\iffalse
+%*******************************************************************
+%*** Please run tex circ.dtx to install the CIRC package ***
+%*** or run latex circ.dtx to generate a documentation. ***
+%*******************************************************************
+%<*installation>
+% Hint: Comment the next line out to force installation under LaTeX.
+% \let\documentclass\relax
+\expandafter\ifx\csname documentclass\endcsname\relax \input docstrip
+\askforoverwritefalse\maxoutfiles{10} %<-- change this if you have problems
+% CIRC is a LaTeX package to typeset circuit and optics diagrams.
+% Copyright (C) 1997,1998,2003,2009 Sebastian Tannert and Andreas Tille
+%
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, see <http://www.gnu.org/licenses/>.
+%
+% For error reports concerning UNCHANGED versions of this file no
+% more than one year old, see CIRC.DVI after installation.
+% If installation fails search thru this file for 'bug'.
+%
+%
+\preamble
+CIRC is a LaTeX package to typeset circuit and optics diagrams.
+Copyright (C) 1997,1998,2003 Sebastian Tannert and Andreas Tille
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+For error reports concerning UNCHANGED versions of this file no
+more than one year old, see CIRC.DVI after installation.
+If installation fails search thru this file for 'bug'.
+\endpreamble
+
+ \keepsilent
+ \generate{
+ \file{circ.sty} {\from{circ.dtx}{code}}
+ \file{ic.def} {\from{circ.dtx}{ic}}
+ \file{gate.def} {\from{circ.dtx}{gate}}
+ \file{oldgate.def} {\from{circ.dtx}{oldgate}}
+ \file{box.def} {\from{circ.dtx}{box}}
+ \file{basic.def} {\from{circ.dtx}{basic}}
+ \file{optics.def} {\from{circ.dtx}{optics}}
+ \file{physics.def} {\from{circ.dtx}{ciphysic}}
+ \file{cisyms.tex} {\from{circ.dtx}{doc}}
+ \file{cidoc.tex} {\from{circ.dtx}{docsty}}
+ \file{circ.drv} {\from{circ.dtx}{driver}}
+ }
+\postamble
+\endpostamble
+ \generate{
+ \file{defcirc.mf} {\from{circ.dtx}{defcircmf}}
+ \file{csym.mf} {\from{circ.dtx}{csym}}
+ \file{cioptic.mf} {\from{circ.dtx}{optic}}
+ \file{ciphysic.mf} {\from{circ.dtx}{ciphysicmf}}
+ \file{ciwidko.mf} {\from{circ.dtx}{csywidko}}
+ \file{cidiod.mf} {\from{circ.dtx}{csydiod}}
+ \file{cirest.mf} {\from{circ.dtx}{csyrest}}
+ \file{cicirc.mf} {\from{circ.dtx}{csycirc}}
+ \file{cibimos.mf} {\from{circ.dtx}{csybimos}}
+ \file{cisym.mf} {\from{circ.dtx}{csysym}}
+ \file{index.hlp} {\from{circ.dtx}{indexhlp}}
+ }
+\message{*********************************************************************}
+\message{^^JNow you should copy all *.def *.sty-files to your TEXINPUT-directory.}
+\message{^^JPlease run "latex circ.drv" and read the section installation.}
+\message{^^JAfter generating the fonts, please rerun "latex circ.drv".}
+\message{^^JThen you will get a complete documentation.}
+\message{^^JFor generating an index please read the file index.hlp.}
+\message{*********************************************************************}
+\csname fi\endcsname\end\endinput\fi
+%</installation> end-metacomment \fi
+% \def\filedate{2003/06/13}
+%^^A last update: Fri 03-13-1998
+% \def\fileversion{v1.0f}
+%
+% \title{Package
+% \raise8mm\hbox{\expandafter\ifx\csname circfonts\endcsname\relax\else
+% \circuit2 \CIRCLogo \endcircuit\fi}\\[5mm]
+% \fileversion\ last revised \filedate}
+% {
+% \def\thefootnote{\fnsymbol{footnote}}
+% \author{Sebastian Tannert\footnote{macro code}\\
+% Andreas Tille\footnote{documentation, optics}}}%
+% \parskip 1mm\parindent0pt
+%
+% \font\manual=logo10
+% \def\MF{{\manual METAFONT}\xspace}
+% \def\MP{{\manual METAPOST}\xspace}
+% \def\META{{\manual META}\xspace}
+% \def\CIRC{{\sf CIRC}\xspace}
+% \def\CB#1{{\tt\char'134 #1}\index{#1@\string\texttt{\string\char'134 #1}}}
+% \def\warp#1{{\tt\char'134 #1}}
+% \def\Blank{{\tt\char32}}
+% \def\einruck{\hspace*{1cm}}
+% \def\example#1{\par\medskip\einruck#1\par\medskip}
+% \def\kohm{$\,$k$\Omega$}
+% \newcommand{\Descriptionlabel}[1]{\mbox{\textsf{#1}}\hfil}
+% \newenvironment{Description}[1]%
+% {\begin{list}{}%
+% {\renewcommand{\makelabel}{\Descriptionlabel}%
+% \setlength{\parsep}{0pt}%
+% \setlength{\itemsep}{0pt}%
+% \setlength{\itemindent}{0pt}%
+% \setlength{\topsep}{0pt}%
+% \setbox0=\hbox{\Descriptionlabel{#1}}%
+% \setlength{\labelwidth}{\wd0}%
+% \dimen0=\labelwidth\advance\dimen0 by \labelsep%
+% \setlength{\leftmargin}{\dimen0}}}%
+% {\end{list}}
+%
+% \batchmode
+% \iffalse First we have to check the fonts. \fi
+% \font\checkcircfonts=cirest
+% \dimen0=\fontdimen6\checkcircfonts
+% \ifdim\dimen0>0pt \def\circfonts{exist}\fi
+% \errorstopmode
+% \maketitle
+%
+% \begin{abstract}
+% \noindent
+% The package \CIRC is a tool for typesetting circuit diagrams
+% and block schematics.
+% It defines several electrical symbols such as resistors, capacitors,
+% transistors etc. These symbols can be connected with wires in a
+% very easy way.
+%
+% To use \CIRC you only need \MF and \LaTeXe{}. You do not need
+% PostScript or any drawing tool. You can expand \CIRC easily with
+% your own symbols, written in \MF.
+% \end{abstract}
+%
+% \vskip 15mm
+% \expandafter\ifx\csname circfonts\endcsname\relax\else
+%\begin{circuit}{0}
+%\.1 \- 1 r \nl\cc\R1 {R} r
+%\frompin .1 \- 3 l \- 2 d \nl\R9 {2R} d
+%\- 10 d \.7
+%\frompin .7 \- 3 l \cc\U0 {} - u
+%\frompin .1 \- 2 d \nl\cc\R2 {2\,R} d \nl\SW1 {} s U
+%\frompin SW1c \vtopin U0+ \.8
+%\frompin SW1o \vtopin U0- \.9
+%\frompin R1r \- 1 r
+%\.3 \- 1 r \nl\cc\R5 {R} r
+%\frompin .3 \- 2 d \nl\cc\R6 {2\,R} d \nl\SW3 {} s u
+%\frompin SW3c \vtopin U0- \.12
+%\frompin SW3o \vtopin U0+ \.13
+%\frompin R5r \- 1 r
+%\.4 \- 2 r \nl\cc\R7 {R$_1$= 2R} r
+%\frompin .4 \- 2 d \nl\cc\R8 {2\,R} d \nl\SW4 {} s U
+%\frompin SW4c \vtopin U0+ \htopin U0+
+%\frompin SW4o \vtopin U0- \.15
+%\frompin R7r \- 1 r \nl\whatI1 {I} s r
+%\- 1 r \.5 \- 1 r \nl\OV1 {} - {} {} {}
+%\frompin .5 \- 3 u \centerto OV1 \nl\cc\R10 {R$_2$} r
+%\frompin R10l \htopin .5
+%\atpin OV1O \.6 \vtopin R10r \htopin R10r
+%\frompin .6 \- 1 r \connection1 {$U_a$} c r
+%\frompin OV1+ \- 1 l \- 3 d \nl\cc\R11 {R$_3$} d
+%\frompin R11b \vtopin .7 \.8 \GND1 \frompin .7 \htopin .8
+%\end{circuit}\fi
+% \clearpage
+% \tableofcontents
+% \enlargethispage{.5cm}
+% \section{Introduction}
+%
+% In several sciences circuit diagrams are necessary in publications.
+% Perhaps there are some PostScript tools for typesetting them or
+% a drawing program has to be used.
+% With \CIRC it is now possible to typeset circuit diagrams using
+% \TeX\ commands. The commands
+% describe the logical structure of the wiring scheme and \TeX\
+% builds the connections according to this structure.
+%
+% \CIRC defines several electrical symbols such as resistors, capacitors,
+% transistors etc. These symbols can be connected with wires in a
+% very easy way.
+%
+% To use \CIRC you only need \MF and \LaTeXe{}. You do not need
+% PostScript or any drawing tool. You can expand \CIRC with
+% your own symbols, written in \MF.
+%
+% \CIRC has been implemented as a turtle system. That means, there is
+% a current position from where the symbols and wires are drawn.
+% It is possible to choose the drawing direction and drawing position.
+%
+% \CIRC consists of commands in order to
+% \begin{Description}{position}
+% \item[draw] symbols and wires into the scheme,
+% \item[justify] symbols within the scheme,
+% \item[link] symbols with wires,
+% \item[position] symbols absolutely or relatively.
+% \end{Description}
+%
+% \section{Installation}
+%
+% Run |circ.ins| through \LaTeX. You will get a couple of
+% |*.mf| files. Use \MF to create |*.pk| fonts from all these files.
+% These steps depend on your installation.
+% For example, type:
+% \begin{verbatim}
+% mf \mode=localfont; input ciwidko.mf
+% gftopk ciwidko.300
+% \end{verbatim}
+% Do this with all the |*.mf| sources. Copy the resulting |*.tfm|
+% and |*.pk| files into appropriate directories.
+%
+% Copy the |*.sty|, |*.def| files, obtained from |circ.ins| into appropriate
+% directories in your |TEXINPUT| path.
+%
+% Read the documentation carefully.
+%
+% Enjoy \CIRC.
+%
+% We added a Makefile which is tested only under |Debian\GNU Linux|
+% (running |teTeX|). We would like to get comments whether it works
+% under other environments. {\bf Use it at your own risk!}. Type
+% \begin{verbatim}
+% make
+% \end{verbatim}
+% to get all files used by \CIRC. Before you type
+% \begin{verbatim}
+% make install
+% \end{verbatim}
+% you should check the correct PATH names in the Makefile. (Make sure
+% you run |make install| as root.) This will do the the following:
+% \begin{enumerate}
+% \item Delete old \CIRC files in |TEXINPUT| and |MFINPUT|.
+% \item Move the new |TEXINPUT| and |MFINPUT| to the appropriate
+% directories
+% \item Check the special.map file in the |Fontname| directory
+% whether there ary \CIRC related entries and create them
+% if failed. (This will ensure that \CIRC fonts will be
+% copied into reasonable directories when using |MakeTeXPK|
+% or |MakeTeXTFM|.)
+% \item Delete old PK and TFM files from \CIRC. (Using old TFM or
+% PK files is one of the "Top ten reasons" why failing \CIRC.)
+% \end{enumerate}
+% To get the documentation type
+% \begin{verbatim}
+% make doc
+% \end{verbatim}
+% (generally this is a good idea to create the needed fonts on the
+% fly).
+%
+% Once more: Please report any bug concerning this Makefile, because
+% this is the first test and not reliable at all.
+%
+%
+% \section{System requirements}
+%
+% \CIRC requires \LaTeXe\ and \MF.
+%
+%\section{Changes}
+% Unfortunately a change of the parameters for symbol drawing
+% commands had to be made. But now the rules are more consistent and
+% easier to remember. Please have a look at section~\ref{pars}.
+% Some new symbols were added and the font selection was modified
+% to work together with the slides class.
+% The appendix has a new design to be clearly arranged.
+% Font names have changed too.
+%
+% The |\<| command is obsolete now and should NOT used anymore.
+% A new |\_| command was defined, see section~\ref{position}.
+%
+% \section{Usage}
+%
+% \subsection{Preambel}
+%
+% \CIRC is divided into several parts. To use a part put the suitable
+% option in the |\usepackage| command. All parts are included
+% in the following example:
+%\example{\warp{usepackage[basic,box,gate,oldgate,ic,optics,physics]}\{|circ|\}}
+%
+% The parts contain:
+% \begin{Description}{physics\,:}
+% \item[basic\,:] a lot of symbols such as resistors, capacitors, switches,
+% diodes, transistors, etc.,
+% \item[box\,:] blackbox, oscilloscope, generator and amplifier,
+% \item[gate\,:] several logical circuits,
+% \item[oldgate\,:] old style logical gates,
+% \item[ic\,:] integrated circuits (flip flops, etc.) and
+% \item[optics\,:] the optical stuff with lenses, mirrors, etc.
+% (see section \ref{optic}),
+% \item[physics\,:] some mechanics stuff.
+% \end{Description}
+% A complete list of available symbols is given in the appendix.
+%
+% \subsection{Starting a circuit diagram}
+%
+% It is recommended to draw a sketch with pen and paper before using
+% \CIRC.
+%
+% Every circuit diagram is enclosed in the
+% |circuit| environment
+% \example{\CB{begin\{circuit\}}{\em size}}
+% where {\em size} is an integer
+% between 0 and 4 giving the size of symbols and describing text. A size
+% of 4 is useful for overhead foils.
+%
+% All \CIRC macros and the necessary parameters are separated by
+% spaces (\Blank). For a clearly arranged \CIRC diagram it is
+% advisable to put every command in a separate line (a linebreak
+% is interpreted as a blank as it is used in \TeX).
+%
+% \subsection{Drawing symbols}
+% \label{pars}
+% The table in the appendix contains a complete list of all
+% \CIRC symbols available and corresponding drawing commands.
+% The syntax of drawing commands is:
+% \example{\warp{}{\sf symbolname}{\em number\Blank
+% inscription\Blank{\tt[}specification\_parameter{\tt]}\Blank direction}}
+% or for more complex symbols:
+% \example{\warp{}{\sf symbolname}{\em number\Blank {\tt[}further\_parameters\tt ]}}
+% Note that you can leave out the blank between the symbol-command
+% and the following {\em number} parameter. This parameter has to
+% be unique in one drawing and is necessary for correct referring
+% (see |\atpin| in section \ref{poscmd}).
+%
+% The symbols can be classified into a lot of different symmetries
+% which are summarized in the appendix. There you will find more
+% detailed information about the parameters you have to use.
+% Generally the drawing direction of the symbol is given with the
+% {\em direction} parameter which is |l| (left), |r| (right),
+% |u| (up) or |d| (down).
+% If there exist 2 different alignments of a symbol for one
+% direction (e.g. if the LED-arrows show up or down) the second
+% alignment is chosen by capitalization of the {\em direction}
+% parameter (|L|, |R|, |U| or |D|).
+%
+%\iffalse
+% Due to the fact, that there are different symbols for different
+% drawing directions the right {\em direction} parameter is important.
+% The table in the appendix contains valid {\em direction} parameters
+% for every drawing command. This may be |h| (horizontal) or |v|
+% (vertical) for symbols with the symmetry two; |l| (left), |r| (right),
+% |u| (up) and |d| (down) for symbols with the symmetry four or
+% for symbols with the symmetry eight |l|, |L|, |r|, |R|, |u|, |U|,
+% |d| or |D|. The latter may need further {\em specification} parameter
+% in front of the {\em direction} parameter.
+% \fi
+% Symbols having two dissimilar or more connections may need
+% a further {\em specification} parameter in front of the {\em
+% direction} parameter.
+% This {\em specification} parameter marks the pin
+% that should be on the current drawing position (see variable resistor and
+% several transistors).
+%
+% In the appendix {\tt text} was used for the {\em inscription} and the
+% necessary {\em number} was set to {\tt n}. Note the position
+% at the symbol where the inscription is set.
+% The inscription can be suppressed by the \CB{nv} command in front
+% of the symbol-command.
+%
+% By default every \CIRC symbol is marked by a label.
+% This label consists of an abbreviation of the symbol indexed by
+% the {\em number}. To suppress
+% this labeling use \CB{nl} in front of the symbol-command.
+%
+% Another command affecting the inscription of a symbol is
+% \CB{cc}. It is also used in front of a symbol-command and causes the
+% change of label-position and inscription-position. By default the
+% inscription is typeset left or over the symbol while the labeling
+% is done right or under the symbol depending on the vertical or
+% horizontal orientation of the symbol.
+%
+% Some symbols need {\em further\_parameter}s. The usage
+% is selfdocumenting in the appendix table.
+%
+% Junctions can be made by the \CB{.} command
+% (\CB{junction})\footnote{Commands within
+% parenthesis are synonyms for the last introduced command.}.
+% The syntax is:
+% \example{\warp{.}{\em number}}
+% Every junction needs a {\em number} argument for further referencing.
+%
+% \subsection{Referencing symbols and pins}
+%
+% Some commands use reference parameters
+% to mark symbols or connections of symbols drawn before.
+%
+% The {\em symbol\_reference} parameters consist of two parts:
+% \example{{\sf symbolname}$\;${\em number}}
+%
+% The {\em pin\_reference} parameters consist of three parts:
+% \example{{\sf symbolname}$\;${\em number}$\;${\sf pinname}}
+% These three parts form the {\em reference} parameter.
+%
+% See the appendix for the pinnames, they are drawn nearby the pins.
+% If the symbol has no pregiven ones the standard names |l| for
+% the left connection, |r| for the right, |t| for the top and
+% |b| for the bottom one will be chosen.
+%
+% {\em Note that there is no blank between the parts!}
+%
+% For example, to refer to the \underline{l}eft connection of the
+% resistor with the {\em number} 1 the {\em pin\_reference} parameter
+% would be
+% \example{{\tt R1l}}
+% or to refer to the whole symbol the {\em symbol\_reference} is
+% \example{{\tt R1}\quad.}
+%
+%
+% At least it is possible to set markers which work like pin references.
+% \example{\CB{P}{\em number}}
+% sets a marker which can be referred to by |P|{\em number}.
+%
+% \subsection{Connecting symbols}
+%
+% Simple connections between the symbols can be made with the
+% \CB{-} command, which is an abbreviation of the \CB{wire}
+% command (see appendix). The syntax is
+% \example{\warp{-}\Blank{\em length}\Blank{\em direction}.}
+% The parameter {\em length} is an integer giving the number of
+% lengthsteps. In \CIRC wires are build as a queue of characters
+% 2.5\,mm each. Thus the length of wire is measured in multiples
+% of this length.
+%
+% The parameter {\em direction} determines the direction. Valid
+% values are |l| for left, |r| for right, |u| for up and |d| for
+% down. For instance, a wire is drawn to the left with a length of
+% 1\,cm (4 units) by typing
+% \example{\warp{-\Blank 4\Blank l}}
+%
+% There are some other line types to connect symbols. The command
+% \example{\CB{dashed}\Blank{\em length\Blank direction}}
+% draws a dashed line. It is written as the \warp{-} command.
+% With
+% \example{\CB{bundle}\Blank{\em text\Blank length\Blank direction} \\
+% \einruck\CB{wwire}\Blank{\em text\Blank length\Blank direction}}
+% a bundle of wire could be drawn or a pair of wire, respectively.
+% You can use \CB{=} as an abbreviation of |\wwire|.
+% The {\em text} may contain any comments.
+%
+% To connect the drawing position horizontally or vertically with
+% a certain pin of a symbol by using a reference, the useful
+% commands \CB{htopin} and \CB{vtopin} exist.
+% The syntax is:
+% \example{\warp{htopin}\Blank{\em pin\_reference} \\
+% \einruck\warp{vtopin}\Blank{\em pin\_reference}}
+% Provided that the resistor |R1| defined before by a |\R| command,
+% the command
+% \example{\warp{vtopin\Blank R1l}}
+% draws a vertical wire up to this height, where the resistor numbered
+% with |1| (|R1|) is situated. |\htopin| does the same but horizontally.
+%
+% The connection will be done by default with the \CB{wire} command.
+% To change the type of the connection use the \CB{by} command.
+% The syntax is:
+% \example{\warp{by\{}{\em command\/}|\}|}
+% where {\em command} can be one of the following: \CB{wire} (\CB{-}), \CB{dashed},
+% \mbox{\CB{bundle}\Blank{\em text}}, \mbox{\CB{wwire}\Blank{\em text}}
+% or \CB{oa} (which is declared in the optics part, see section \ref{optic}).
+%
+% For example, the command
+% \example{\warp{by\{}\warp{dashed\}}}
+% changes the drawing style from \warp{[hv]topin} to a dashed lines.
+% Do not forget to switch back to wires using
+% \example{\warp{by\{}\warp{wire\}}}
+% to end the dashed lines.
+%
+% Note that it is usually necessary to combine the |htopin|- and
+% |vtopin| commands, because these commands draw {\em only} horizontally
+% or vertically to the x- or the y-coordinates
+% of the given pin.
+%
+% \subsection{\label{poscmd}Positioning commands}
+% \label{position}
+% Positioning commands are used to change the current
+% drawing position.
+%
+% The direct positioning command \CB{at} (\CB{from}) sets the drawing position
+% to an absolute coordinate.
+% \example{\warp{at\{{\em x}\}\Blank\{{\em y}\}\Blank}}
+% sets the drawing position to the point ({\em x},{\em y}) in the coordinate
+% system, where {\em x} and {\em y} are integers counting the number of
+% arbitrary units (2.5\,mm). \CIRC starts drawing at $(0,0)$.
+%
+% It is recommended to avoid the absolute positioning of symbols, because
+% it tends to destroy the logical structure of the circuit diagram.
+%
+% The drawing position can be changed in relation to the current position
+% with the indirect positioning command \CB{moverel} (\CB{shift}).
+% \example{\warp{moverel\{{\em x}\}\Blank\{{\em y}\}\Blank}}
+% moves the drawing position {\em x} units to the right
+% and {\em y} units upwards.
+%
+% The command \CB{atpin} (\CB{frompin}) sets the drawing
+% position to a reference pin.
+% \example{\warp{atpin}\Blank{\em pin\_reference}}
+% allows further drawing starting from the reference pin. For example,
+% \example{\warp{atpin C2r}}
+% sets the drawing position to the right pin of the capacitor numbered 2.
+%
+% In a lot of cases a command like |\-| is useful, but it should
+% not draw the line. |\_| satisfy this need. As you know from
+% |\-| a {\em length} and a {\em direction} must be specified.
+%
+% \subsection{Justify commands}
+%
+% The command \CB{hcenterto} forces horizontal centering
+% according to a symbol referred to. The command \CB{vcenterto} does the
+% same but vertically.
+% The command \CB{centerto} centers the following symbol according to the
+% reference symbol
+% horizontally or vertically depending on the drawing direction of
+% the symbol beeing drawn.
+%
+% The syntax is:
+% \example{\warp{hcenterto}\Blank{\em symbol\_reference} \\
+% \einruck\warp{vcenterto}\Blank{\em symbol\_reference} \\
+% \einruck\warp{centerto}\Blank{\em symbol\_reference}}
+% For example,
+% \example{\warp{hcenterto L4}}
+% would force horizontal centering according to the coil numbered 4.
+%
+% \subsection{Text commands}
+%
+% The command
+% \example{\CB{put}|\{|{\em text}|\}|}
+% puts {\em text} at the current drawing position.
+% It can be used in the same way as the \warp{put} command of the
+% \LaTeX |picture| environment, but the coordinates have to be omitted
+% (because they are given by the current drawing position).
+%
+% To comment something the commands
+% \example{\CB{Utext}\Blank{\em text\Blank{\tt from}\Blank pin\_reference1\Blank{\tt to}\Blank pin\_reference2} \\
+% \einruck\CB{centertext}\Blank{\em text\Blank{\tt from}\Blank pin\_reference1\Blank{\tt to}\Blank pin\_reference2}}
+% can be used. \warp{centertext} prints {\em text} centered between
+% {\em pin\_reference1} and {\em pin\_reference2}.
+% \warp{Utext} additionally draws an arrow from
+% {\em pin\_reference1} to {\em pin\_reference2}.
+% Note that the reference pins must have the same x- or y-coordinate.
+%
+% To write overlapping information like the \TeX\ commands
+% \warp{rlap} and \warp{llap} the following commands are used:
+% \example{\CB{blap}|\{|{\em text}|\}| \\
+% \einruck\CB{tlap}|\{|{\em text}|\}|}
+% They put {\em text} which overlap to the bottom or the top, respectively.
+%
+% \expandafter\ifx\csname circfonts\endcsname\relax
+% \LARGE Please generate the fonts now. Then you will get a
+% complete documentation.\stop\fi
+%
+% \subsection{Example}
+%
+%A simple example is the diagram showing a circuit which is used for measuring
+%the amplification of current by a transistor.
+%\vskip 4mm
+%\begin{circuit}0
+%\npn1 {?} B l
+%\frompin npn1C
+%\- 1 u
+%\nl\A1 {$I_C$} u
+%\atpin npn1B
+%\- 1 l
+%\R1 {510\kohm} l
+%\- 1 l
+%\centerto A1
+%\nl\A2 {$I_B$} u
+%\frompin A2b
+%\vtopin R1l
+%\frompin A1t
+%\- 1 u \.1
+%\frompin A2t
+%\vtopin .1
+%\htopin .1
+%\- 1 u
+%\cc\connection1 {$U_b$} c u
+%\frompin npn1E
+%\- 1 d
+%\GND1
+%\end{circuit}
+%\vskip 4mm
+%
+%How to cope with such sketches?
+%
+%First of all, it is necessary to decide, which symbol should be the
+%first one.
+%The transistor seems to be a good choice to begin with in this
+%special case. The command \CB{npn} produces a npn-transistor
+%(see appendix); so the first line is
+%\example{\warp{npn1 {?} B l}}
+%which names the transistor |npn1| for further reference.
+%Instead of |{?}| any text describing the specific transistor
+%may be written. (Unfortunately this doesn't work today. See
+%future plans.) The third parameter |B| means, that the
+%\underline{b}ase of the transistor should be on the current
+%drawing position. Further more |C| for \underline{c}ollector
+%or |E| for the \underline{e}mitter contact would be possible.
+%The last parameter gives the direction, in this case the
+%base contact points to the \underline{l}eft (|l|).
+%
+%Use
+%\example{\warp{frompin npn1C}}
+%to continue drawing from the collector, and type
+%\example{\warp{- 1 u}}
+%to draw the needed wire \underline{u}pwards
+%to connect the amperemeter to measure $I_C$ which is created by the command
+%\example{\warp{nl}\warp{A1 \{\$I\_C\$\} u}}\qquad .
+%
+%The command \CB{nl} in front of the amperemeter avoids the default
+%inscription of "$I_1$" because this would not make any sense in this
+%case. Instead, the labeling is $I_C$. The last parameter {\tt u}
+%marks the direction (\underline{u}p).
+%
+%To draw the resistor connected with the base of the transistor
+%the proceeding is the same: use
+%
+%|\atpin npn1B |
+%to set drawing position (different from the current position),
+%
+%|\- 1 l |
+%to draw a piece of wire to the left and
+%
+%|\R1 {510\kohm} l |
+%for the resistor itself.
+%
+%A further horizontal piece of wire connects the resistor with the
+%second amperemeter: |\- 1 l |.
+%
+%The second amperemeter, measuring the current of the base ($I_B$),
+%would look nice at if drawn the same height as the first one,
+%measuring ($I_C$).
+%Measuring the length of wire needed to match the same height would be
+%difficult and a change of the diagram would cause further changes in
+%order to maintain the desired position.
+%Therefore it is advisable to use
+%\example{\CB{centerto} {\tt A1}\quad \warp{nl}\warp{A2 \{\$I\_B\$\} u}}
+%which leeds to the intended centering automatically. Because of the
+%\underline{u}p orientation of {\tt A2}, the centering is the same as
+%in the vertical direction.
+%
+%A vertical connection is needed to connect the amperemeter
+%with {$R_1$}. This may be done by
+%\example{\warp{frompin A2b} \\
+% \einruck\warp{vtopin R1l}}
+%which draw a wire down to the horizontal wire, starting at
+%|A2b|. Instead of the second line |\vtopin npn1B| would do the same job
+%because the horizontal position is irrelevant for \CB{vtopin}.
+%
+%To connect the two amperemeters the drawing position is set to |A1t|,
+%from where a wire is drawn upwards and a junction point is marked
+%at that point by using
+%\example{\warp{frompin A1t} \\
+% \einruck\warp{- 1 u} \\
+% \einruck\warp{.1}}
+%The commands for connecting the second amperemeter are:
+%\example{\warp{frompin A2t} \\
+% \einruck\warp{vtopin .1} \\
+% \einruck\warp{htopin .1}}
+%The combination of \CB{htopin} and \CB{vtopin} is very useful
+%to connect two points with an edge of wire.
+%The driving voltage is typeset by
+%\example{\warp{- 1 u} \\
+% \einruck\warp{cc}\warp{connection1 \{\$U\_b\$\} c u}}
+%because it looks better to put the inscription of the voltage on the
+%right. That is why the prefix \CB{cc} is used in front of
+%the \warp{connection} command.
+%
+%Finally the emitter contact leads to the ground:
+%\example{\warp{frompin npn1E} \\
+% \einruck\warp{- 1 d} \\
+% \einruck\warp{GND1}}
+%
+%The whole example once more in an overview:
+%\begin{verbatim}
+%\begin{circuit}0
+%\npn1 {?} B l % transistor
+%\frompin npn1C % draw from collector
+%\- 1 u % some wire
+%\nl\A1 {$I_C$} u % amperemeter for current of collector
+%\atpin npn1B % continue drawing from base
+%\- 1 l % some wire
+%\R1 {510\kohm} l % resistor
+%\- 1 l % some wire to the edge
+%\centerto A1 % draw centered to amperemeter 1
+%\nl\A2 {$I_B$} u % amperemeter 2
+%\frompin A2b % link amperemeter 2 with resistor
+%\vtopin R1l
+%\frompin A1t
+%\- 1 u
+%\.1 % junction
+%\frompin A2t % wire to amperemeter 2
+%\vtopin .1
+%\htopin .1
+%\- 1 u
+%\cc\connection1 {$U_b$} c u % driving voltage
+%\frompin npn1E
+%\- 1 d
+%\GND1 % ground
+%\end{circuit}
+%\end{verbatim}
+%
+%
+% \section{\label{optic}Optics}
+%
+% If the |optics| option is given in the |\usepackage| command, the
+% creation of simple optical diagrams is possible.
+%
+% The optical axis can be drawn with the \CB{oa} command, which
+% creates a dashed line.
+% The optical symbols
+% which are available are listed at the end of the appendix.
+%
+% Here is an example for using |optics|. With the knowledge
+% of drawing circuits the following code will speak for itself.
+% \vskip 4mm
+% \begin{circuit}{0}
+% \nl\Laser1 {} r
+% \oa 2 r
+% \Polar1 {} r
+% \oa 2 r
+% \nl\OM1 P1 {} {} {} {} h
+% \atpin OM1P3
+% \oa 4 r
+% \cc\BLens1 {} r
+% \oa 2 r
+% \nl\Pinhole1 {} r
+% \oa 7 r
+% \cc\SLens2 {} r
+% \oa 1 r
+% \Polar2 {} r
+% \oa 3 r
+% \oa 3 r
+% \nl\BSplit1 {} + d
+% \atpin BSplit1+
+% \oa 2 r
+% \nl\Cam1 {camera} . r
+% \atpin BLens1: \shift 0 2 \P3
+% \atpin Pinhole1: \shift 0 2 \P4
+% \atpin SLens2: \shift 0 2 \P5
+% \Dtext{\small $f_1$} from P3 to P4
+% \Dtext{\small $f_2$} from P4 to P5
+% \atpin BSplit1.
+% \oa 5 d
+% \Mirror1 {} * R
+% \oa 2 r
+% \nl\ScrL1 {screen} h
+% \end{circuit}
+% Here is the code:
+%
+% \begin{verbatim}
+% \begin{circuit}{0}
+% \nl\Laser1 {} r % laser
+% \oa 2 r % optical axis
+% \Polar1 {} r % polarizer
+% \oa 2 r
+% \nl\OM1 P1 {} {} {} {} h % optical modulator
+% \atpin OM1P3
+% \oa 4 r
+% \cc\BLens1 {} r % 1st lens
+% \oa 2 r
+% \nl\Pinhole1 {} r % pinhole
+% \oa 7 r
+% \cc\SLens2 {} r % 2nd lens
+% \oa 1 r
+% \Polar2 {} r % analyzer
+% \oa 3 r
+% \oa 3 r
+% \nl\BSplit1 {} + d % beam splitter
+% \atpin BSplit1+ % continue drawing right
+% \oa 2 r
+% \nl\Cam1 {camera} . r % camera
+% \atpin BLens1: \shift 0 2 \P3 % mark middle of 1st lens
+% \atpin Pinhole1: \shift 0 2 \P4 % mark middle of pinhole
+% \atpin SLens2: \shift 0 2 \P5 % mark middle of 2nd lens
+% \Dtext{\small $f_1$} from P3 to P4 % f_1
+% \Dtext{\small $f_2$} from P4 to P5 % f_2
+% \atpin BSplit1. % second part of beam down
+% \oa 5 d
+% \Mirror1 {} * R % mirror
+% \oa 2 r
+% \nl\ScrL1 {screen} h % white screen
+% \end{circuit}
+% \end{verbatim}
+%
+%
+% \section{Some hints for \CIRC programmers}
+%
+% Here are some hints to add further symbols to \CIRC.
+%
+% Before creating any new symbol consult very carefully the file |csym.mf|.
+% It contains a lot of very useful definitions to simplify writing new symbols.
+% Examples for the use of these definitions are given in the files
+% |ciwidko.mf| and |optic.mf|.
+% When possible it is strongly recommended to use the \MF commands
+% \begin{Description}{|fourfourchars|}
+% \item[|twochars|] for symbols with the symmetry two,
+% \item[|fourchars|] for symmetry four and
+% \item[|fourfourchars|] for symmetry eight,
+% \end{Description}
+% because the definition of the corresponding \TeX\ command
+% will need only one line! If there are any problems with \MF{}
+% do not hesitate to contact the authors.
+%
+% A new option file with the extension |def|,
+% for instance |newcirc.def|, has to be created to include
+% the written symbols. To include the new definitions add
+% |newcirc| to the options in the \warp{usepackage} command:
+% \example{\warp{usepackage[basic,newcirc]\{circ\}}\qquad .}
+%
+% The \CIRC-command \CB{freecirc} has to be used to start the
+% definitions of new commands in the file |newcirc.def|.
+% This ensures, that the asterix (`*') becomes active, because
+% all internal \CIRC commands contain the asterix. It is comparable to
+% \LaTeX 's \warp{makeatletter}. The \CIRC-command \CB{protectcirc}
+% has to be used at the end of the file |newcirc.def|
+% in order to restore the former
+% behaviour (comparable to \warp{makeatother}).
+%
+% The \CB{cdef*} commands are strongly recommended to declare commands
+% with the new symbols, because only one line is needed for the definition.
+% The files |basic.def| or |optics.def| contain examples for \warp{cdef} and
+% related commands, which are defined in |circ.sty|.
+%
+% To ensure that the new symbols are inserted in the right
+% magnification the command \CB{extracircinit} may be used.
+% It can be used in the same way as \warp{opticfontinit} is used
+% in |optics.def|. Both are defined in |circ.sty| as \warp{relax}
+% and are called when a new diagram is initialized. If it is necessary
+% to do any operations before starting a circuit diagram, then
+% it is possible to redefine \warp{extracircinit} to do the job.
+%
+% \section{Future plans}
+% \CIRC is still under development. A lot of users need
+% additional symbols or have other wishes. In most of the cases there is
+% a quick solution, but to give \CIRC the ability to be an easy
+% extendable tool (and to add more potentiality) it has to be rewritten.
+% Until this is done there could happen the following steps:
+%\begin{itemize}
+%\item solve the problem of inscriptions for transistors
+%\item redesign some symbols and reimplement the \MF sources
+%\item rewrite the font selection to fix some ugly effects
+%\item add color support and build a \MP port
+%\item use the NFSS2 to make different linethicknesses available
+%\item describe the link between \TeX\ and \META
+%\item update the documentation every time
+%\end{itemize}
+%
+%
+% \section{Contacting the authors}
+% Any bug reports, remarks, proposals for new options and symbols,
+% any improvements to both the code or the documentation
+% as well as some nice postcards are welcome.
+%
+% \medskip
+% \begin{tabular}{@{}p{.5\hsize}@{}p{.5\hsize}@{}}
+% Sebastian Tannert & Andreas Tille \\
+% WEN 67.02.01.06 & Gartenstra\ss e 8 \\
+% Harbigstra\ss e 14 & D-38855 Wernigerode \\
+% D-14055 Berlin & \\
+% &\\
+% tannert@physik.hu-berlin.de & tille@physik.uni-halle.de
+% \end{tabular}
+% \iffalse Some changes to the layout for the appendix. \fi
+%\advance\textheight\topmargin
+%\advance\textheight60pt
+%\advance\textheight\headsep
+%\advance\textheight\headheight
+%\newpage
+%\topmargin-30pt
+%\headsep0pt
+%\headheight0pt
+%\oddsidemargin10pt
+%\parindent 0pt
+%\lineskip4mm
+%^^A last update: Fri 03-13-1998
+% \section{\appendixname}
+%\def\spc{\,\texttt{\char'40}\,}
+%\def\num{\textit{number}}
+%\def\len{\textit{length}}
+%\def\dir{\textit{direction}}
+%\def\txt{\textit{text}}
+%\def\lab#1{\textit{label} \textrm{#1}\spc}
+% The symmetries and there parameters:\\[1mm]
+% \catcode`\|=12
+% \begin{tabular}{l|l}
+% symmetrie & parameter set \\[1mm]\hline
+% $\mathcal{OP}$ & \num\spc\\[1mm]
+% $\mathcal{LI}$ & \len\spc\dir\spc\\[1mm]
+% $\mathcal{LB}$ & \num\spc\txt\spc\dir\spc\\[1mm]
+% $\mathcal{TXT}$ & \txt\spc\texttt{from}\spc
+% \textit{pin\_reference1}\spc\texttt{to}\spc\textit{pin\_reference2}\spc\\[1mm]
+% $\mathcal{SO}$ & \num\spc\txt\spc\dir[l,r,u,d]\spc\\[1mm]
+% $\mathcal{SX}$ & \num\spc\txt\spc\dir[l,r,u,d,L,R,U,D]\spc\\[1mm]
+% $\mathcal{SXY}$ & \num\spc\txt\spc\dir[l,r,u,d]\spc\\[1mm]
+% $\mathcal{S\mathrm{3}P}$ & \num\spc\txt\spc\textit{pin\_name}\spc\dir[l,r,u,d,L,R,U,D]\spc\\[1mm]
+% $\mathcal{GI}$ & \num\spc\txt\spc\textit{pin\_name}\spc\lab a\lab b\\[1mm]
+% $\mathcal{GII}$ & \num\spc\txt\spc\textit{pin\_name}\spc\lab a\lab b\lab c\\[1mm]
+% $\mathcal{BX}$ & \num\spc\textit{pin\_name}\spc\lab a\lab b\lab c\lab d\\[1mm]
+% $\mathcal{BXT}$ & \num\spc\txt\spc\textit{pin\_name}\spc\lab a\lab b\lab c\lab d\\[1mm]
+% $\mathcal{IC}$ & \num\spc\txt\spc\textit{pin\_name}\spc\textit{style\footnote{Today this should be empty, like \{\}.}}\spc\\[1mm]
+% \end{tabular}\vskip 10mm
+% \MakePercentComment\input{cisyms}\MakePercentIgnore
+% \advance\hsize-4cm
+% \oddsidemargin35pt
+% \newpage
+% \PrintIndex
+% \iffalse DON'T process driver definitions!
+%<*driver>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\begin{filecontents}{circ.ist}
+delim_0 "\\hfill "
+delim_t "\\hbox to 7mm{\\hss}"
+\end{filecontents}
+\documentclass{ltxdoc}
+\usepackage[basic,box,gate,oldgate,ic,optics,physics]{circ}
+\usepackage{t1enc}
+\usepackage{xspace}
+\IndexPrologue{\section{Index}}
+\makeindex
+\begin{document}
+\DocInput{circ.dtx}
+\end{document}
+%</driver>
+% \fi
+%^^A last update: Fri 03-13-1998
+%\iffalse
+%<*docsty>
+%\fi
+\chardef\backslash="5C
+\catcode`\|=12
+\parindent 2mm
+\lineskip 0pt
+\advance\textwidth by 39.4pt
+
+\def\lpin#1{\shift -1.1 0 \put{\tlap{\llap{\tt#1$\rfloor$}\vss}}}
+\def\bpin#1{\shift 0 -1.5 \put{\blap{\llap{\tt#1\hss}}}}
+\def\tpin#1{\shift 0 1.5 \put{\tlap{\llap{\tt#1\hss}}}}
+\def\rpin#1{\shift 1.1 0 \put{\tlap{\rlap{$\lfloor$\tt#1}\vss}}}
+
+\def\cdef#1 #2 #3#4 #5 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #5\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname{n} {text} r \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{SXY}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+\def\cwdef#1 #2 #3 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #3\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname 6 r \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{LI}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+
+
+\def\cwwdef#1 #2 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #2\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname {text} 6 r \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{LB}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+\def\NgateIIO#1 #2#3 #4 #5 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #5\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname{n} {text} : a b c
+ \atpin{#1nI1} \lpin{I1} \atpin{#1nI2} \lpin{I2} \atpin{#1nO} \rpin{O}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{GII}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+\def\gateIIO#1 #2#3 #4#5 #6 #7 #8 {\noindent
+\hbox{\vbox to 3.8cm{\vskip 2mm
+ {\hsize 4.8cm \footnotesize #8\par}
+ \vfill
+ \hbox to 5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname{n} {text} : a b c
+ \atpin{#1n#5} \lpin{#5} \atpin{#1n#7} \lpin{#7} \atpin{#1n#6} \rpin{#6}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{GII}$}\quad}
+ \vskip 2mm
+ \hrule width 5cm height .1pt}%
+ \vrule width.1pt height 3.8cm depth 0pt}\linebreak[1]}
+
+\def\NgateIO#1 #2#3 #4 #5 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #5\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname{n} {text} : a b
+ \atpin{#1nI} \lpin{I} \atpin{#1nI} \atpin{#1nO} \rpin{O}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{GI}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+\def\cdefiv#1 #2 #3#4 #5 #6 #7 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #7\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname{n} {text} #5 r
+ \atpin {#1n#5} \lpin{#5}
+ \atpin {#1n#6} \rpin{#6}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{SX}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+\def\cdefivNL#1 #2#3 #4 #5 #6 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #6\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname{n} {text} #5 r
+ \atpin {#1n#4} \lpin{#4}
+ \atpin {#1n#5} \rpin{#5}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{SX}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+\def\cdefiviv#1 #2 #3#4 #5 #6 #7 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+{\hsize4.3cm \footnotesize #7\par}%
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname{n} {text} #5 r
+ \atpin {#1n#5} \lpin{#5}
+ \atpin {#1n#6} \rpin{#6}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{SO}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+\def\cdefivivNL#1 #2#3 #4 #5 #6 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+{\hsize4.3cm \footnotesize #6\par}%
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname{n} {text} #5 r
+ \atpin {#1n#4} \lpin{#4}
+ \atpin {#1n#5} \rpin{#5}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{SO}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+\def\cdefo#1 #2 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #2\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname{n} \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{OP}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+\def\optionline#1 {\vskip3mm
+ {\large Symbols provided by the option \fbox{\tt#1.def}}\\[3mm]}
+
+\def\bbdef#1 #2#3 #4 {\noindent
+\hbox{\vbox to 4.5cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #4\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname n {text} : a b c d
+ \atpin{#1nP1} \lpin{P1}
+ \atpin{#1nP2} \bpin{P2}
+ \atpin{#1nP4} \tpin{P4}
+ \atpin{#1nP3} \rpin{P3}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{BXT}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 4.5cm depth 0pt}\linebreak[1]}
+
+\def\bbdefNeT#1 #2#3 #4 #5 {\noindent
+\hbox{\vbox to 4.5cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #5\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname n : a b c d
+ \atpin{#1nP1} \lpin{P1}
+ \atpin{#1nP3} \rpin{P3}
+ \atpin{#1nP2} \bpin{P2}
+ \atpin{#1nP4} \tpin{P4}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{BX}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 4.5cm depth 0pt}\linebreak[1]}
+
+\def\bbdefNeTii#1 #2#3 #4 #5 {\noindent
+\hbox{\vbox to 4.5cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #5\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname n : a b c d h
+ \atpin{#1nP1} \lpin{P1}
+ \atpin{#1nP3} \rpin{P3}
+ \atpin{#1nP2} \bpin{P2}
+ \atpin{#1nP4} \tpin{P4}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{BX}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 4.5cm depth 0pt}\linebreak[1]}
+
+\def\sbdef#1 #2#3 #4 #5 {\noindent
+\hbox{\vbox to 4.5cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #5\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname n : a b c d h
+ \atpin{#1nP1} \lpin{P1}
+ \atpin{#1nP3} \rpin{P3}
+ \atpin{#1nP2} \bpin{P2}
+ \atpin{#1nP4} \tpin{P4}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{BX}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 4.5cm depth 0pt}\linebreak[1]}
+
+\def\textdef#1 #2 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #2\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0
+ \at 0 0 \P1 \at 6 0 \P2
+ \csname #1\endcsname {text} from P1 to P2 \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{TXT}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+\def\cdefviii#1 #2 #3#4 #5 #6 #7 #8 {\noindent
+\hbox{\vbox to 3cm{\vskip 2mm
+{\hsize4.3cm \footnotesize #8\par}%
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname{n} {text} : l
+ \atpin {#1n#5} \rpin{#5}
+ \atpin {#1n#6} \lpin{#6}
+ \atpin {#1n#7} \rpin{#7}
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{S\mathrm{3}P}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 3cm depth 0pt}\linebreak[1]}
+
+\def\Ccirc#1 #2 #3#4{\noindent
+ \def\Clpin##1{\atpin{#1n##1} \lpin{##1} }
+ \def\Crpin##1{\atpin{#1n##1} \rpin{##1} }
+\hbox{\vbox to 4.5cm{\vskip 2mm
+ {\hsize 4.3cm \footnotesize #3\par}
+ \vfill
+ \hbox to 4.5cm{\hfill
+ \begin{circuit}0 \csname #1\endcsname n {text} #2 {} #4
+ \end{circuit}
+ \hfill}\vfill
+ \hbox to 4.5cm{~~{\tt\backslash#1}\quad\hfill
+ \fbox{$\mathcal{IC}$}\quad}
+ \vskip 2mm
+ \hrule width 4.5cm height .1pt}%
+ \vrule width.1pt height 4.5cm depth 0pt}\linebreak[1]}
+%\iffalse
+%</docsty>
+%\fi
+%^^A last update: Fri 03-13-1998
+% \newpage
+% {\Large\bf The code of \CIRC.}\\\vskip 1mm
+% \begin{macrocode}
+%<*code>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesClass{circ}
+ [1997/04/23 v1.0d for typeset circuit diagrams]
+\DeclareOption*{\InputIfFileExists{\CurrentOption.def}{}%
+ {\PackageError{CIRC}{File \CurrentOption.def not found.}%
+ {Check spelling or think about the
+ location of file.\MessageBreak
+ I tried to load macros for the CIRC package.}}}
+% \end{macrocode}
+%
+% Sorry, but it's better to stop here.
+% The sourcecode is formatted worst. \endinput
+%
+% F"ur die interne Namensgebung m"ussen einige Zeichen
+% in ihrem Kategoriekode als Buchstaben (11) eingetragen werden.
+% Der jetzige Kode wird in Definitionen abgelegt.
+% Das betrifft die Zeichen \verb+* [ ] @+.
+%
+% \begin{macrocode*}
+\def\freecirc{\chardef\CIRCinternals\the\catcode`\*\catcode`\*=11
+ \chardef\cc@lb\the\catcode`\[
+ \chardef\cc@rb\the\catcode`\]
+ \chardef\cc@at\the\catcode`\@
+ \catcode`\[=11\catcode`\]=11\catcode`\@=11 }
+\def\protectcirc{\catcode`\[=\cc@lb\catcode`\]=\cc@rb\catcode`\@=\cc@at
+ \catcode`\*=\CIRCinternals\relax}
+\freecirc
+% \end{macrocode*}
+%^^A last update: Fri 03-13-1998
+% Zu Testzwecken kann "uber \verb+\showpointstrue+ die
+% Anzeige aller definierter Anschlu"spunkte eingestellt werden.
+% \begin{macrocode}
+\newif\ifshowpoints
+\showpointsfalse
+% \end{macrocode}
+%
+% Alle mit * gekennzeichneten Schalter werden nach jeder Zeichenoperation
+% auf den entsprechenden Standardwert gesetzt.
+%
+% Die Darstellung der Beschriftung mit Schaltzeichentyp und Nummer
+% wird "uber \verb+\iflab+ getsteuert. *
+% \begin{macrocode}
+\newif\iflab*
+\lab*true
+% \end{macrocode}
+%
+% Schaltzeichenwerte k"onnen auch ausgeblendet werden. *
+% \begin{macrocode}
+\newif\ifval*
+\val*true
+% \end{macrocode}
+%
+% Die Zeichenrichtung wird durch \verb+\ifld+ bestimmt.
+% \begin{macrocode}
+\newif\ifld*
+\ld*false
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newif\ifcc*
+\cc*false
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\newif\ifpin
+\pintrue
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newif\ifxoutofgrid
+\newif\ifyoutofgrid
+\xoutofgridfalse
+\youtofgridfalse
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newif\ifcen*
+\cen*false
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newif\ifhvcen*
+\hvcen*false
+% \end{macrocode}
+\newif\ifcheck*
+%
+% F"ur die Ermittlung der kleinsten Umschlie"senden Box werden die
+% beiden Variablen \verb+\X*max+ und \verb+\X*min+ bei jeder
+% Zeichenoperation aktualisiert. Sie enthalten die minimale und die
+% maximale Ausdehnung der Zeichenfl"ache in horizontaler Richtung.
+% \begin{macrocode}
+\newdimen\X*max
+\newdimen\X*min
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newdimen\*X*
+\newdimen\*Y*
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newdimen\**X
+\newdimen\**Y
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newdimen\***X
+\newdimen\***Y
+% \end{macrocode}
+%
+% In der Box \verb+\*bbox+ wird f"ur eine Zeichenoperation
+% das entsprechende horizontale Material gesammelt.
+% Diese Box wird dann durch \verb+\put*bbox+ entsprechend
+% der aktuellen Zeichenposition in die Box der entstehenden
+% Zeichnung "ubernommen.
+% \begin{macrocode}
+\newbox\*bbox
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newbox\box*
+\newdimen\ic*
+\newdimen\ht*
+\newdimen\wd*
+\newdimen\dp*
+%
+\newcount\cc*
+\newdimen\*spc
+\newtoks\ldd* %linke untere Beschriftung
+\newtoks\rud* %rechte obere Beschriftung
+%
+\newtoks\llpos*
+\newtoks\ldpos*
+\newtoks\rlpos*
+\newtoks\rdpos*
+\newtoks\ulpos*
+\newtoks\udpos*
+\newtoks\dlpos*
+\newtoks\ddpos*
+%
+\newcount\cnta*
+\newcount\cntb*
+%
+\newtoks\name* %Bauelementname
+\newtoks\ld*pin %Bezeichnung linker Anschlu"s
+\newtoks\ru*pin % ...
+\newtoks\m*pin % ...
+% \end{macrocode}
+%
+\newtoks\rmacros
+%
+% \begin{macrocode}
+\newdimen\outerspace
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newtoks\*Ilist
+\newtoks\*Olist
+% \end{macrocode}
+
+% \begin{macrocode}
+\newdimen\pin*spc
+\newdimen\pin*ind
+\newdimen\io*ind
+\newdimen\mid*ind
+\newdimen\pinnum*spc
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+\def\CIRCredef{}
+\def\safedef#1{\expandafter\ifx\csname#1\endcsname\relax
+\toks0{\expandafter\def\csname#1\endcsname}\else
+\edef\CIRCredef{\CIRCredef\expandafter\string\csname#1\endcsname\space}%
+\toks0{\expandafter\def\csname.#1.\endcsname}\rmacros
+\expandafter{\the\rmacros\let}\rmacros\expandafter\expandafter\expandafter
+{\expandafter\the\expandafter\rmacros\csname#1\endcsname}\rmacros\expandafter
+\expandafter\expandafter
+{\expandafter\the\expandafter\rmacros\csname.#1.\endcsname}\fi
+\the\toks0}
+\def\safedefs#1{\expandafter\ifx\csname#1\endcsname\relax
+\toks0{\expandafter\def\csname#1\endcsname}\else
+\edef\CIRCredef{\CIRCredef\expandafter\string\csname#1\endcsname\space}%
+\toks0{\expandafter\def\csname.#1.\endcsname}\rmacros
+\expandafter{\the\rmacros\let}\rmacros\expandafter\expandafter\expandafter
+{\expandafter\the\expandafter\rmacros\csname#1\endcsname}\rmacros\expandafter
+\expandafter\expandafter
+{\expandafter\the\expandafter\rmacros\csname.#1.\endcsname}\fi
+\the\toks0 }
+%^^A last update: Fri 03-13-1998
+% \begin{macrocode}
+\def\getc*#1 {\advance\cc* by #1%
+ \ifcc*
+ \toks0\ldd*\ldd*\rud*\rud*\toks0
+ \ifval*
+ \iflab*\val*true\else\val*false\fi
+ \lab*true
+ \else
+ \iflab*\val*true\else\val*false\fi
+ \lab*false
+ \fi
+ \fi
+ \global\setbox\box*=\hbox{\char\cc*\/\global\ic*=\lastkern\unkern}%
+ \global\ht*\ht\box*\global\wd*\wd\box*\global\dp*\dp\box*}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+% \begin{macrocode}
+\def\check*max#1{\dimen0=#1\advance\dimen0\*X*
+ \ifdim\dimen0>\X*max\global\X*max\dimen0\fi}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\check*X{\ifcheck*\ifdim\*X*<\X*min\global\X*min\*X*\fi
+ \ifdim\*X*>\X*max\global\X*max\*X*\fi\fi}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\check*min#1{\dimen0=-#1\advance\dimen0\*X*
+ \ifdim\dimen0<\X*min\global\X*min\dimen0\fi}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\check*#1{\check*min{#1}\check*max{#1}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\check*cen{\ifcen*\errhelp{Use `\hcenterto' or `\vcenterto'.}%
+ \errmessage{You can't use `\string\centerto' to center `\the\name*'}\fi}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+% Jede Zeichenoperation ruft \verb+\put*box+ auf, dieses
+% Makro setzt die Box \verb+\*bbox+ an die aktuelle Zeichenposition.
+% \begin{macrocode}
+\def\put*box{\hbox to 0pt{\kern\*X*\raise\*Y*\box\*bbox\hss}}
+% \end{macrocode}
+%
+%
+% In Erweiterung zu \verb+\llap+ und \verb+\rlap+ werden
+% hier weitere Abk"urzungen definiert.
+% \begin{macrocode}
+\def\hc*#1{\hbox to 0pt{\hss#1\hss}}
+\def\vc*#1{\vbox to 0pt{\vss#1\vss}}
+\def\tlap#1{\vbox to 0pt{\vss#1}}
+\def\blap#1{\vbox to 0pt{#1\vss}}
+\def\ac*#1{\vc*{\hc*{#1}}}
+% \end{macrocode}
+%
+%
+% Zur"ucksetzen der auf eine Zeichenoperation wirkenden Schalter.
+% \begin{macrocode}
+\def\reset*ifs{\ld*false\cen*false\hvcen*false\lab*true\val*true\cc*false}
+% \end{macrocode}
+%
+% Das Kernmakro f"ur die Speicherung von Anschlu"spunkten.
+% \begin{macrocode}
+\def\store*XY#1{\ifshowpoints\message{#1}\fi
+ \expandafter\xdef\csname#1\endcsname{\*X*\the\*X*\*Y*\the\*Y*}}
+% \end{macrocode}
+%
+% Retten der aktuellen Zeichenposition.
+% \begin{macrocode}
+\def\save*XY{\**X\*X*\**Y\*Y*}
+\def\save*xy{\***X\*X*\***Y\*Y*}
+% \end{macrocode}
+%
+% Wiederherstellen der aktuellen Zeichenposition
+% \begin{macrocode}
+\def\restore*XY{\*X*\**X\*Y*\**Y}
+\def\restore*xy{\*X*\***X\*Y*\***Y}
+% \end{macrocode}
+%
+% Abstand zwischen dem gespeichertem Punkt und dem aktuellen
+% in x- und y-Richtung bestimmen
+% \begin{macrocode}
+\def\diff*XY{\advance\**X-\*X*\advance\**Y-\*Y*}
+% \end{macrocode}
+%
+% Zentrierung auf angegebenes Schaltzeichen einschalten.
+% Richtung ist durch die folgende Zeichenoperation bestimmt.
+% \begin{macrocode}
+\def\centerto#1 {\cen*true\save*XY\frompin#1: }
+% \end{macrocode}
+%
+% Zentrierung auf angegebenes Schaltzeichen einschalten.
+% Die aktuelle y-Position wird beibehalten.
+% \begin{macrocode}
+\def\hcenterto#1 {\hvcen*true\**Y\*Y*\frompin#1: \*Y*\**Y}
+% \end{macrocode}
+%
+% Zentrierung auf angegebenes Schaltzeichen einschalten.
+% Die aktuelle x-Position wird beibehalten.
+% \begin{macrocode}
+\def\vcenterto#1 {\hvcen*true\**X\*X*\frompin#1: \*X*\**X}
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\def\do*Ilist{\ifshowpoints\message{|<}\fi
+ \check*true
+ \save*XY\the\*Ilist\ifshowpoints\message{>|}\fi\restore*XY\*Ilist={}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\shift*Ilist#1{\ifshowpoints\message{|<}\fi
+ \check*false
+ \save*XY\the\*Ilist\frompin{\the\name*#1}
+ \ifshowpoints\message{| shift \the\name*#1 |}\fi
+ \advance\**X\**X\advance\**X-\*X*\*X*\**X
+ \advance\**Y\**Y\advance\**Y-\*Y*\*Y*\**Y
+ \check*true
+ \save*XY\the\*Ilist\restore*XY
+ \ifshowpoints\message{>|}\fi\*Ilist={}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\shift*IOlist#1{\ifshowpoints\message{|<}\fi
+ \check*false
+ \save*XY\the\*Ilist\restore*XY\advance\*X*\wd\*bbox\the\*Olist
+ \frompin{\the\name*#1}
+ \ifshowpoints\message{| shift \the\name*#1 |}\fi
+ \advance\**X\**X\advance\**X-\*X*\*X*\**X
+ \advance\**Y\**Y\advance\**Y-\*Y*\*Y*\**Y
+ \check*true
+ \save*XY\the\*Ilist\restore*XY\advance\*X*\wd\*bbox\the\*Olist
+ \restore*XY\ifshowpoints\message{>|}\fi\*Ilist={}\*Olist={}}
+% \end{macrocode}
+%
+% \Ladd*x erweitert die Tokenliste \argi um Makros, die das
+% Dimensionsregister \XXX um \argii erh"ohen.
+% \argii wird als aktueller
+% Zahlenwert in die Tokenliste "ubernommen, \argiii wird
+% expandiert.
+% \begin{macrocode}
+\def\Ladd*x#1#2{\dimen9=#2%
+ \edef\next{{\the#1\advance\*X*\the\dimen9 }}%
+ \global#1\next}
+% \end{macrocode}
+%
+% \Ladd*y ist \verb+\Ladd*x+ in seiner Funktion gleich, das Makro
+% ver"andert jedoch \YYY.
+% \begin{macrocode}
+\def\Ladd*y#1#2{\dimen9=#2%
+ \edef\next{{\the#1\advance\*Y*\the\dimen9 }}%
+ \global#1\next}
+% \end{macrocode}
+%
+% \Lstore* f"ugt in die Tokenliste \argi Makros ein, die die Position unter
+% \argii speichern.
+% \begin{macrocode}
+\def\Lstore*#1#2{\edef\next{{\the#1\noexpand\store*XY{\the\name*#2}}}%
+ \global#1\next}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\Lstopos*#1{\global#1\expandafter{\the#1\save*xy}}
+\def\Lrstpos*#1{\global#1\expandafter{\the#1\restore*xy}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\LX*check#1{\global#1\expandafter{\the#1\check*X}}
+% \end{macrocode}
+%
+% Die folgenden Makros sind schon auf die Tokenliste \verb+\*Ilist+
+% festgelegt, da fast alle Anschlu"sdefinitionen nur eine Liste
+% benutzen.
+% \begin{macrocode}
+\def\add*x{\Ladd*x\*Ilist}
+\def\add*y{\Ladd*y\*Ilist}
+\def\store*{\Lstore*\*Ilist}
+\def\stopos*{\Lstopos*\*Ilist}
+\def\rstpos*{\Lrstpos*\*Ilist}
+\def\X*check{\LX*check\*Ilist}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\Cadd*#1{\Ladd*y#1{-\pin*spc}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\Cstore*#1#2{\ifx{#2}*\else\Lstore*#1{#2}\fi}
+% \end{macrocode}
+%
+% Um einen Anschlu"spunkt zur neuen Zeichenposition zu erkl"aren,
+% wird nur das entsprechende Makro aufgerufen, nachdem zuvor
+% getestet wurde ob es existiert.
+% \begin{macrocode}
+\def\frompin#1 {\expandafter\ifx\csname#1\endcsname\relax
+ \errhelp{Check spelling! Look up in the description of circuits.}%
+ \errmessage{Point >#1< is not defined}\else\csname#1\endcsname\fi}
+% \end{macrocode}
+%
+% F"ur eine sch"onere Lesbarkeit wird neben {\em von Punkt}
+% auch noch {\em am Punkt} definiert.
+% \begin{macrocode}
+\let\atpin\frompin
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\def\h*twopins#1{\getc*#1 \ifcen*\*Y*\**Y\hvcen*true\fi
+\wd\box*=.5\wd*
+\advance\ht*\*spc
+%
+\X*check\store*{\the\ld*pin}\add*x{.5\wd*}\store*:\add*x{.5\wd*}%
+\store*{\the\ru*pin}\X*check
+\ifhvcen*\shift*Ilist:\else\ifld*\shift*Ilist{\the\ru*pin}\else\do*Ilist\fi\fi
+%
+\labelfont
+\setbox0=\hbox{\the\rud*}\setbox1=\hbox{\the\ldd*}%
+\**X\*X*\advance\*X*.5\wd*
+\iflab*\check*{.5\wd0}\fi%
+\ifval*\check*{.5\wd1}\fi%
+\*X*\**X
+%
+\setbox\*bbox=\hbox{\box\box*
+ \iflab*\raise\ht*\hc*{\unhbox0}\fi
+ \ifval*\lower\dp*\vtop{\kern\*spc\hc*{\unhbox1}}\fi
+ \add*cmds}%
+\put*box
+\ifld*\else\advance\*X*\wd*\fi\reset*ifs}
+% \end{macrocode}
+%
+%
+%
+% \begin{macrocode}
+\def\v*twopins#1{\getc*#1 \ifcen*\*X*\**X\hvcen*true\fi
+%
+\labelfont
+\setbox0=\hbox{\ifval*\the\ldd*\kern\*spc\fi\kern\dp*}\dimen1\wd0
+\setbox1=\hbox{\kern\wd*\iflab*\kern\*spc\the\rud*\fi}\dimen0\wd1
+\dp0=0pt\dp1=0pt
+%
+\wd\box*=0pt\dp\box*=0pt
+\setbox\*bbox=\hbox{\box\box*
+ \raise.5\ht*\hbox{\vc*{\hbox{\llap{\box0}\rlap{\box1}}}\add*cmds}}%
+%
+\store*{\the\ld*pin}\add*y{.5\ht*}\store*:\add*y{.5\ht*}\store*{\the\ru*pin}%
+\ifhvcen*\shift*Ilist:\else\ifld*\shift*Ilist{\the\ru*pin}\else\do*Ilist\fi\fi
+%
+\check*X
+\check*max{\dimen0}%
+\check*min{\dimen1}%
+%
+\put*box
+\ifld*\else\advance\*Y*\ht*\fi\reset*ifs}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+% \begin{macrocode}
+\def\ii*#1 {\if#1h\ld*pin{l}\ru*pin{r}\h*twopins0\relax\else
+ \if#1v\ld*pin{b}\ru*pin{t}\v*twopins1\relax\else
+ \if#1u\ld*pin{b}\ru*pin{t}\v*twopins1\relax\else
+ \if#1d\ld*pin{b}\ru*pin{t}\ld*true\v*twopins1\relax\else
+ \if#1l\ld*pin{l}\ru*pin{r}\ld*true\h*twopins0\relax\else
+ \if#1r\ld*pin{l}\ru*pin{r}\h*twopins0\relax\else
+ \errhelp{Direction >h<, >v<, >l<, >u<, >r< or >d< expected.}%
+ \errmessage{Bad direction specified! You typed:>#1<.}%
+ \fi\fi\fi\fi\fi\fi}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+% \begin{macrocode}
+\def\change*pins{\toks0\ld*pin\ld*pin\ru*pin\ru*pin\toks0}
+% \end{macrocode}
+%
+\def\CiRCl{1}\def\CiRCr{2}\def\CiRCu{3}\def\CiRCd{4}
+\def\CiRCL{5}\def\CiRCR{6}\def\CiRCU{7}\def\CiRCD{8}
+\def\CIRCiErr{\PackageError{CIRC}{Internal Error}%
+ {You are great, please send all files to the author and wait for
+ answer.}}
+% \begin{macrocode}
+\def\iv*#1 #2 {\cnta*=0\csname CiRC#2\endcsname\relax
+ \ifnum\cnta*=0
+ \PackageError{CIRC}{Bad direction}%
+ {Please check spelling}\fi
+ \ifcase\CIRCpintoN{#1}\relax\CIRCiErr \or
+ \ifcase\cnta*
+ \CIRCiErr\or\<\change*pins\h*twopins2\relax
+ \or\h*twopins0\relax
+ \or\v*twopins1\relax
+ \or\change*pins\<\v*twopins3\relax\else
+ \PackageError{CIRC}{Bad direction}%
+ {Please check spelling, only [l r u d] expected}\fi\or
+ \ifcase\cnta*
+ \CIRCiErr\or\<\h*twopins0\relax
+ \or\change*pins\h*twopins2\relax
+ \or\change*pins\v*twopins3\relax
+ \or\<\v*twopins1\relax\else
+ \PackageError{CIRC}{Bad direction}%
+ {Please check spelling, only [l r u d] expected}\fi\fi}
+\def\iviv*#1 #2 {\cnta*=0\csname CiRC#2\endcsname\relax
+ \ifnum\cnta*=0
+ \PackageError{CIRC}{Bad direction}%
+ {Please check spelling}\fi
+ \ifcase\CIRCpintoN{#1}\relax\CIRCiErr \or
+ \ifcase\cnta*
+ \CIRCiErr\or\<\change*pins\h*twopins6\relax
+ \or\h*twopins0\relax
+ \or\v*twopins5\relax
+ \or\change*pins\<\v*twopins3\relax
+ \or\<\change*pins\h*twopins2\relax
+ \or\h*twopins4\relax
+ \or\v*twopins1\relax
+ \or\change*pins\<\v*twopins7\relax\fi\or
+ \ifcase\cnta*
+ \CIRCiErr\or\<\h*twopins0\relax
+ \or\change*pins\h*twopins6\relax
+ \or\change*pins\v*twopins3\relax
+ \or\<\v*twopins5\relax
+ \or\<\h*twopins4\relax
+ \or\change*pins\h*twopins2\relax
+ \or\change*pins\v*twopins7\relax
+ \or\<\v*twopins1\relax\fi\fi}
+%
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+% \begin{macrocode}
+\def\lviii*#1{\store*{\the\m*pin}\X*check
+ \add*x\wd*\stopos*\add*y{-\dp*}\store*{\the\ld*pin}\X*check
+ \rstpos*\add*y\ht*\store*{\the\ru*pin}\rstpos*
+ \dimen0\ht*\advance\dimen0-\dp*\add*y{.5\dimen0}\store*:
+ \rstpos*\add*x\ic*\X*check
+ \ifhvcen*\shift*Ilist:\else\shift*Ilist{#1}\fi
+ \setbox\*bbox=\hbox{\labelfont
+ \the\llpos*\box\box*\the\ldpos*}\put*box}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\rviii*#1{\store*{\the\m*pin}\X*check
+ \add*x{-\wd*}\stopos*\add*y\ht*\store*{\the\ru*pin}\X*check
+ \rstpos*\add*y{-\dp*}\store*{\the\ld*pin}\rstpos*
+ \dimen0\ht*\advance\dimen0-\dp*\add*y{.5\dimen0}\store*:
+ \rstpos*\add*x{-\ic*}\X*check
+ \ifhvcen*\shift*Ilist:\else\shift*Ilist{#1}\fi
+ \setbox\*bbox=\hbox{\labelfont
+ \the\rdpos*\box\box*\the\rlpos*}\put*box}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\dviii*#1{\store*{\the\m*pin}%
+ \add*y\dp*\stopos*\add*x\ic*\store*{\the\ru*pin}\X*check
+ \rstpos*\add*x{-\wd*}\store*{\the\ld*pin}\X*check
+ \rstpos*\dimen0-\wd*\advance\dimen0\ic*\add*x{.5\dimen0}\store*:
+ \ifhvcen*\shift*Ilist:\else\shift*Ilist{#1}\fi
+ \wd\box*=0pt\dp\box*=0pt
+ \setbox\*bbox=\hbox{\labelfont
+ \the\dlpos*\box\box*\the\ddpos*}\put*box}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\uviii*#1{\store*{\the\m*pin}%
+ \add*y{-\ht*}\stopos*\add*x\ic*\store*{\the\ru*pin}\X*check
+ \rstpos*\add*x{-\wd*}\store*{\the\ld*pin}\X*check
+ \rstpos*\dimen0-\wd*\advance\dimen0\ic*\add*x{.5\dimen0}\store*:
+ \ifhvcen*\shift*Ilist:\else\shift*Ilist{#1}\fi
+ \wd\box*=0pt\ht\box*=0pt
+ \setbox\*bbox=\hbox{\labelfont
+ \the\ulpos*\box\box*\the\udpos*}\put*box}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\viii*#1 #2 {\check*cen
+ \if#2l \getc*0 \lviii*{#1}\else
+ \if#2r \getc*1 \rviii*{#1}\else
+ \if#2d \getc*3 \dviii*{#1}\else
+ \if#2u \getc*2 \uviii*{#1}\else
+ \if#2L\change*pins\getc*4 \lviii*{#1}\else
+ \if#2R\change*pins\getc*5 \rviii*{#1}\else
+ \if#2D\change*pins\getc*7 \dviii*{#1}\else
+ \if#2U\change*pins\getc*6 \uviii*{#1}\else
+ \errhelp{Direction >l<, >r<, >u<, >d<, >L<, >R<, >U< or >D<
+ expected.}%
+ \errmessage{Bad direction >#2<}\fi\fi\fi\fi\fi\fi\fi\fi
+ \reset*ifs}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+%
+%
+\def\CIRCpintoN#1{\if\the\ld*pin#1 1\else
+ \if\the\ru*pin#1 2\else
+ \if\the\m*pin#1 3\else
+ \PackageError{CIRC}{Bad pin name}%
+ {Please check spelling or look up in the documentation}
+\fi\fi\fi}
+%
+% \begin{macrocode}
+\def\cdef#1 #2 #3#4 {\safedef{#1}##1 ##2 {%
+ \name*{#1##1}\rud*{$#2_{##1}$}\ldd*{##2}\cc*#4 #3\ii*}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\cdefiv#1 #2 #3#4 #5 #6 {\safedef{#1}##1 ##2 {%
+ \name*{#1##1}\rud*{$#2_{##1}$}\ldd*{##2}\m*pin{@}%
+ \ld*pin{#5}\ru*pin{#6}\cc*#4 #3\iv*}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\cdefivNL#1 #2#3 #4 #5 {\safedef{#1}##1 ##2 {%
+ \name*{#1##1}\rud*{}\ldd*{##2}\ld*pin{#4}\ru*pin{#5}\m*pin{@}%
+ \cc*#3 #2\iv*}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\cdefiviv#1 #2 #3#4 #5 #6 {\safedef{#1}##1 ##2 {%
+ \name*{#1##1}\rud*{$#2_{##1}$}\ldd*{##2}\ld*pin{#5}\ru*pin{#6}\m*pin{@}%
+ \cc*#4 #3\iviv*}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\cdefivivNL#1 #2#3 #4 #5 {\safedef{#1}##1 ##2 {%
+ \name*{#1##1}\rud*{}\ldd*{##2}\ld*pin{#4}\ru*pin{#5}\m*pin{@}%
+ \cc*#3 #2\iviv*}}
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\def\cdefNL#1 #2#3 {\safedef{#1}##1 ##2 {%
+ \name*{#1##1}\rud*{}\ldd*{##2}\cc*#3 #2\ii*}}
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\def\cdefviii#1 #2 #3#4 #5 #6 #7 {\safedef{#1}##1 ##2 {\name*{#1##1}%
+ \rud*{$#2_{##1}$}\ldd*{##2}\ld*pin{#5}\m*pin{#6}\ru*pin{#7}\cc*#4 #3\viii*}}
+% \end{macrocode}
+% \begin{macrocode}
+\def\cwdef#1 #2 {\safedef{#1}##1 ##2 {\cc*#2
+ \cnta*##1\toks2{}\toks4{}\dimen2=##1em\test*xygrid
+ \csname line*##2\endcsname}}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+% \begin{macrocode}
+\def\black*boxii#1 #2 #3 #4 #5 #6 #7 {\check*cen
+ \if#7h\getc*0
+ \store*{P1}\X*check\add*x{.5\wd*}\stopos*\X*check\store*:
+ \add*y\ht*\store*{P4}\rstpos*\add*y{-\dp*}\store*{P2}\rstpos*
+ \add*x{.5\wd*}\X*check\store*{P3}%
+ \ifhvcen*\shift*Ilist:\else\shift*Ilist{#2}\fi
+ \setbox\*bbox=\hbox{\ifpin\pinnumberfont
+ \setbox0=\hbox{#3\kern\*spc}\check*min{\wd0}%
+ \raise\pinnum*spc\llap{#3\kern\*spc}%
+ \setbox0=\hbox{\kern\*spc\kern\wd*#5}\check*max{\wd0}\wd0=0pt
+ \raise\pinnum*spc\box0
+ \setbox0=\hbox{\kern\pinnum*spc\kern.5\wd*#6}\check*max{\wd0}\wd0=0pt
+ \dimen0\ht*\advance\dimen0\*spc
+ \raise\dimen0\box0
+ \setbox0=\hbox{\kern\pinnum*spc\kern.5\wd*#4}\check*max{\wd0}\wd0=0pt
+ \dimen0\dp*\advance\dimen0\*spc
+ \lower\dimen0\vtop{\kern0pt\box0}\fi
+ \hc*{\kern\wd*\ctextfont\vc*{\hbox{#1}}}\box\box*}\put*box\reset*ifs
+ \else\if#7v\getc*1
+ \store*{P4}\X*check\add*x{.5\wd*}\stopos*\X*check\store*:
+ \add*y\ht*\store*{P3}\rstpos*\add*y{-\dp*}\store*{P1}\rstpos*
+ \add*x{.5\wd*}\X*check\store*{P2}%
+ \ifhvcen*\shift*Ilist:\else\shift*Ilist{#2}\fi
+ \setbox\*bbox=\hbox{\ifpin\pinnumberfont
+ \setbox0=\hbox{#6\kern\*spc}\check*min{\wd0}%
+ \raise\pinnum*spc\llap{#6\kern\*spc}%
+ \setbox0=\hbox{\kern\*spc\kern\wd*#4}\check*max{\wd0}\wd0=0pt
+ \raise\pinnum*spc\box0
+ \setbox0=\hbox{\kern\pinnum*spc\kern.5\wd*#5}\check*max{\wd0}\wd0=0pt
+ \dimen0\ht*\advance\dimen0\*spc
+ \raise\dimen0\box0
+ \setbox0=\hbox{\kern\pinnum*spc\kern.5\wd*#3}\check*max{\wd0}\wd0=0pt
+ \dimen0\dp*\advance\dimen0\*spc
+ \lower\dimen0\vtop{\kern0pt\box0}\fi
+ \hc*{\kern\wd*\ctextfont\vc*{\hbox{#1}}}\box\box*}\put*box\reset*ifs
+ \else\errhelp{Direction >h< or >v< expected.}%
+ \errmessage{ >#1< Bad direction specified}\fi\fi}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\black*box#1 #2 #3 #4 #5 #6 {\black*boxii{#1} {#2} {#3} {#4} {#5} {#6} h }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\sym*box#1 #2 {\check*cen
+ \getc*0
+ \store*{P1}\X*check\stopos*
+ \add*x{.5\wd*}\store*:\add*x{.5\wd*}\store*{P3}\X*check\rstpos*
+ \add*y{-1em}\store* b
+ \add*x{\wd*}\store* e\rstpos*
+ \add*y{1em}\store* a
+ \add*x{\wd*}\store* f\rstpos*
+ \add*x{.5\wd*}\stopos*
+ \add*y\ht*\store*{P4}%
+ \add*x{1em}\store* g
+ \rstpos*\add*y\ht*
+ \add*x{-1em}\store* h
+ \rstpos*\add*y{-\dp*}\store*{P2}%
+ \add*x{1em}\store* d
+ \rstpos*\add*y{-\dp*}%
+ \add*x{-1em}\store* c
+ \ifhvcen*\shift*Ilist:\else\shift*Ilist{#2}\fi
+ \setbox\*bbox=
+ \hbox{\hc*{\kern\wd*\ctextfont\vc*{\hbox{#1}}}\box\box*}\put*box
+ \reset*ifs}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\bbdef#1 #2#3 {\safedef{#1}##1
+{\name*{#1##1}\cc*#3 #2\black*box}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\bbdefNeT#1 #2#3 #4 {\safedef{#1}##1
+{\name*{#1##1}\cc*#3#2\black*box{#4} }}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\bbdefNeTii#1 #2#3 #4 {\safedef{#1}##1
+{\name*{#1##1}\cc*#3#2\black*boxii{#4} }}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\sbdef#1 #2#3 #4 {\safedef{#1}##1
+{\name*{#1##1}\cc*#3#2\sym*box{#4} }}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+% ^^A beschr p l1 l2 l3
+%
+% ^^A\cc*
+% ^^A\name*
+% ^^A\**pin
+% ^^A\ldd* -> innenbeschriftung
+%
+%</code>
+%<+gate>\ProvidesFile{gate.def}
+%<+gate>\freecirc
+%<*gate>
+% \begin{macrocode}
+\def\g*iio#1 #2 #3 #4 #5 {\dimen4\*X*\dimen5\*Y*
+ \rud*{#1}\getc*0
+ \stopos*\add*y\ic*\X*check\store*{\the\ru*pin}\rstpos*
+ \add*y{-\ic*}\store*{\the\ld*pin}\rstpos*
+ \add*x{.5\wd*}\store*:\add*x{.5\wd*}\X*check\store*{\the\m*pin}%
+ \ifhvcen*\shift*Ilist:\else\shift*Ilist{#2}\fi
+ \setbox\*bbox=\hbox{\ifpin\pinnumberfont
+ \dimen0\ic*\advance\dimen0\pinnum*spc
+ \raise\dimen0\rlap{\kern\pin*ind\hc*{#3}}%
+ \dimen0-\ic*\advance\dimen0\pinnum*spc
+ \raise\dimen0\rlap{\kern\pin*ind\hc*{#4}}%
+ \raise\pinnum*spc\rlap{\kern\wd*\kern-\pin*ind\hc*{#5}}\fi
+ \the\ldd*\box\box*}\put*box\reset*ifs
+ \*X*\dimen4\*Y*\dimen5}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\g*io#1 #2 #3 #4 {\dimen4\*X*\dimen5\*Y*
+ \rud*{#1}\getc*0
+ \store*{\the\ld*pin}%
+ \add*x{.5\wd*}\store*:\add*x{.5\wd*}\X*check\store*{\the\m*pin}%
+ \ifhvcen*\shift*Ilist:\else\shift*Ilist{#2}\fi
+ \setbox\*bbox=\hbox{\ifpin\pinnumberfont
+ \raise\pinnum*spc\rlap{\kern\pin*ind\hc*{#3}}%
+ \raise\pinnum*spc\rlap{\kern\wd*\kern-\pin*ind\hc*{#4}}\fi
+ \the\ldd*\box\box*}\put*box\reset*ifs
+ \*X*\dimen4\*Y*\dimen5}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\gateIIO#1 #2#3 #4#5 #6 #7 {\expandafter
+ \def\csname#1\endcsname##1 {\name*{#1##1}\ldd*{#4}%
+ \ld*pin{#5}\m*pin{#6}\ru*pin{#7}\cc*#3 #2\g*iio}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\ldd*gN#1{\raise\fontdimen10\c*fntb
+ \blap{\hc*{\kern\wd*\symfont\,#1}}%
+ \lower\dp*
+ \vtop{\kern\*spc\hc*{\labelfont\kern\wd*\the\rud*}}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\ldd*OV{\ac*{\kern.8\wd*\ctextfont\the\rud*}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\NgateIIO#1 #2#3 #4 {\expandafter
+ \def\csname#1\endcsname##1 {\name*{#1##1}\ldd*{\ldd*gN{#4}}%
+ \ld*pin{I2}\m*pin{O}\ru*pin{I1}\cc*#3 #2\g*iio}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\gateIO#1 #2#3 #4#5 #6 {\expandafter
+ \def\csname#1\endcsname##1 {\name*{#1##1}\ldd*{#4}%
+ \ld*pin{#4}\m*pin{#5}\cc*#3 #2\g*io}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\NgateIO#1 #2#3 #4 {\expandafter
+ \def\csname#1\endcsname##1 {\name*{#1##1}\ldd*{\ldd*gN{#4}}%
+ \ld*pin{I}\m*pin{O}\cc*#3 #2\g*io}}
+% \end{macrocode}
+%</gate>
+%<*code>
+%^^A last update: Sat 06-13-2003
+%</code>
+%<*doc>
+\input cidoc
+\freecirc
+\hbox{\circuit0 \CIRCLogo \endcircuit\hskip3cm
+ \verb|\CIRCLogo|}\vskip5mm
+%</doc>
+%<*code,doc>
+\cwdef wire {128\c*fnt}
+%<+doc> {wire}
+\cwdef dashed {120\c*fnt}
+%<+doc> {dashed wire}
+%<+doc>\cwwdef bundle {bundle}
+%<+doc>\cwwdef wwire {double wire}
+%<+doc>\textdef Utext {text with arrow}
+%<+doc>\textdef centertext {centered text}
+%</code,doc>
+%<*basic>
+\ProvidesFile{basic.def}
+\freecirc
+\def\GND#1 {\setbox\*bbox=\hbox{\c*fnt\char254}%
+ \check*min{\wd\*bbox}\check*max{\wd\*bbox}\put*box
+ \store*XY{GND#1}\store*XY{GND#1:}\reset*ifs}
+\def\gnd#1 {\setbox\*bbox=\hbox{\c*fnt\char253}%
+ \check*min{\wd\*bbox}\check*max{\wd\*bbox}\put*box
+ \store*XY{gnd#1}\store*XY{gnd#1:}\reset*ifs}
+\def\junction#1 {\setbox\*bbox=\hbox{\c*fnt\char255}\check*{\wd\*bbox}\check*X
+ \put*box\store*XY{.#1:}\store*XY{junction#1:}%
+ \store*XY{junction#1}\store*XY{.#1}\reset*ifs}
+%</basic>
+%<*basic,doc>
+%<+doc>\optionline basic
+%<+doc>\cdefo GND ground
+%<+doc>\cdefo gnd ground
+%<+doc>\cdefo . junction \par
+\cdef R R \c*fntw 0
+%<+doc> {resistor}
+\cdef Rus R \c*fntw 24
+%<+doc> {US resistor}
+\cdefviii Rvar R \c*fntw 8 . S *
+%<+doc> {variable resistor}
+\cdefviii Rusvar R \c*fntw 32 . S *
+%<+doc> {variable resistor}
+\cdef C C \c*fntw 128
+%<+doc> {capacitor}
+\cdef Cvar C \c*fntw 130
+%<+doc> {variable capacitor}
+\cdefiv Cel C \c*fntw 136 - +
+%<+doc> {electrolytic capacitor}
+\cdefiv D D \c*fntd 0 K A
+%<+doc> {diode}
+\cdefiv ZD D \c*fntd 4 K A
+%<+doc> {Zener diode}
+\cdefiviv LED D \c*fntd 8 K A
+%<+doc> {light emitting diode}
+\cdefiv Dcap D \c*fntd 16 K A
+%<+doc> {capacitance variation diode}
+\cdefiv whatI I \c*fnt 248 d s
+%<+doc> {current flow}
+\cdefiv U U \c*fnt 16 + -
+%<+doc> {voltage source}
+\cdef varU U \c*fnt 44
+%<+doc> {voltage source, variant}
+\cdef varI I \c*fnt 46
+%<+doc> {current source variant}
+\cdefiv Uvar U \c*fnt 20 + -
+%<+doc> {variable voltage source}
+\cdef I I \c*fnt 12
+%<+doc> {current source}
+\cdef Ivar I \c*fnt 14
+%<+doc> {variable current source}
+\cdef V U {\def\add*cmds{\clr*acmds
+ \ac*{\symfont V}}\c*fnt}8
+%<+doc> {voltmeter}
+\cdef A I {\def\add*cmds{\clr*acmds
+ \ac*{\symfont A}}\c*fnt}8
+%<+doc> {amperemeter}
+\cdefiv L L \c*fnt 0 . *
+%<+doc> {coil}
+\cdef xtal Q \c*fnt 4
+%<+doc> {quartz crystal}
+\cdef La La \c*fnt 6
+%<+doc> {incandescent lamp} % electric bulb
+\cdef GasLa {} \c*fnt 40
+%<+doc> {gas lamp}
+\cdef S S \c*fnt 24
+%<+doc> {switch}
+\cdefviii SW S \c*fnt 32 o s c
+%<+doc> {changeover switch}
+\cdefivNL mconnection \c*fnt 232 o c
+%<+doc> {connection (pointed)}
+\cdefivNL connection \c*fnt 240 o c
+%<+doc> {connection (round empty)}
+\cdefivNL fconnection \c*fnt 244 o c
+%<+doc> {connection (round full)}
+\cdefiviv npnPH T \c*fntt 80 E C
+%<+doc> {phototransistor}
+\cdefviii npnEC T \c*fntt 0 E . C
+%<+doc> {npn-transistor without base}
+\cdefviii pnpEC T \c*fntt 8 E . C
+%<+doc> {pnp-transistor without base}
+\cdefviii npn T \c*fntt 16 E B C
+%<+doc> {npn-transistor}
+\cdefviii pnp T \c*fntt 24 E B C
+%<+doc> {pnp-transistor}
+\cdefviii nfet T \c*fntt 32 S G D
+%<+doc> {n-channel field effect transistor}
+\cdefviii pfet T \c*fntt 40 S G D
+%<+doc> {p-channel field effect transistor}
+\cdefviii nvmos T \c*fntt 48 S G D
+%<+doc> {}
+\cdefviii pvmos T \c*fntt 56 S G D
+%<+doc> {}
+\cdefviii namos T \c*fntt 64 S G D
+%<+doc> {}
+\cdefviii pamos T \c*fntt 72 S G D
+%<+doc> {}
+%<+basic>\protectcirc
+%</basic,doc>
+%<*gate,doc>
+%<+doc>\pagebreak
+%<+doc>\optionline gate
+\gateIIO OV \c*fntb 255 \ldd*OV + O -
+%<+doc> {operational amplifier}
+\gateIIO ov \c*fntb 254 \ldd*OV - O +
+%<+doc> {operational amplifier}
+%<+doc>
+\NgateIIO NAND \c*fntb 132 {$\&$}
+%<+doc> {NAND-gate}
+\NgateIIO AND \c*fntb 131 {$\&$}
+%<+doc> {AND-gate}
+\NgateIIO OR \c*fntb 131 {$\ge$1}
+%<+doc> {OR-gate}
+\NgateIIO NOR \c*fntb 132 {$\ge$1}
+%<+doc> {NOR-gate}
+\NgateIIO XOR \c*fntb 131 {$=$1}
+%<+doc> {XOR-gate}
+\NgateIIO XNOR \c*fntb 131 {$=$\vrule width 0pt height 1.5ex\,}
+%<+doc> {XNOR-gate}
+\NgateIO INV \c*fntb 130 {1\,}
+%<+doc> {NOT-gate}
+\NgateIO ST \c*fntb 128 {{\c*fnts\char7}}
+%<+doc> {Schmitt trigger}
+\NgateIO STINV \c*fntb 130 {{\c*fnts\char7}}
+%<+doc> {inverted Schmitt trigger}
+\NgateIO BUF \c*fntb 130 {{\c*fnts\char25}}
+%<+doc> {buffer}
+%<+gate>\protectcirc
+%</gate,doc>
+%<*oldgate,doc>
+%<+doc>\optionline oldgate
+%<+oldgate>\freecirc
+\NgateIIO oldAND \c*fntb 133 {}
+%<+doc> {old AND-gate}
+\NgateIIO oldNAND \c*fntb 134 {}
+%<+doc> {old NAND-gate}
+\NgateIIO oldOR \c*fntb 135 {}
+%<+doc> {old OR-gate}
+\NgateIIO oldNOR \c*fntb 136 {}
+%<+doc> {old NOR-gate}
+\NgateIIO oldXOR \c*fntb 137 {}
+%<+doc> {old XOR-gate}
+%<+oldgate>\protectcirc
+%</oldgate,doc>
+%<*box,doc>
+%<+box>\ProvidesFile{box.def}
+%<+box>\freecirc
+%<+doc>\optionline box
+\bbdef BBa \c*fntb 252
+%<+doc> {black box analog}
+\bbdef BBd \c*fntb 253
+%<+doc> {black box digital}
+%<+doc>\pagebreak
+\bbdefNeT oscillograph \c*fnt 142 {}
+%<+doc> {oscillograph}
+\bbdefNeT G \c*fntb 250 \vbox{\hc*{\symfont G}\kern1.5\*spc%
+ \hc*{\c*fnts\char16}}
+%<+doc> {generator}
+\bbdefNeT Gvar \c*fntb 250 \vbox{\hc*{\symfont G}\kern1.5\*spc%
+ \hc*{\c*fnts\char17}}
+%<+doc> {generator, variable}
+\bbdefNeT Impulse \c*fntb 250 \c*fnts\char13
+%<+doc> {generator, pulses}
+\bbdefNeT Amp \c*fntb 250 \c*fnts\char24
+%<+doc> {amplifier}
+\sbdef ACtoDC \c*fntb 251 \hbox{\raise.6\ht*\hbox{\c*fnts\char16}%
+ \lower.6\dp*\hbox{\symfont$=$}}
+%<+doc> {AC to DC converter}
+%<+box>\protectcirc
+%</box,doc>
+%<*doc>
+\optionline ic
+\Ccirc RSFF S {RS flip flop}{\Clpin{S}\Clpin{R}\Crpin{Q}\Crpin{NQ}}
+\Ccirc NRSFF S {RS flip flop}{\Clpin{S}\Clpin{R}\Crpin{Q}\Crpin{NQ}}
+\Ccirc DFF C {D flip flop}{\Clpin{C}\Clpin{D}\Crpin{Q}\Crpin{NQ}}
+\Ccirc JKMSFF R {JK master slave flip flop}{\Clpin{S}\Clpin{J}\Clpin{C}\Clpin{K}\Clpin{R}\Crpin{Q}\Crpin{NQ}}
+\Ccirc fff R {timer NE\,555}{\Clpin{IS}\Clpin{IT}\Clpin{R}\Crpin{OK}\Crpin{O}\Crpin{OD}}
+\Ccirc NULL i+ {nullor}{\Clpin{i+}\Clpin{i-}\Crpin{o+}\Crpin{o-}}
+%</doc>
+%^^A last update: Fri 03-13-1998
+%<*optics>
+% First lets define the header of module OPTICS.
+% \begin{macrocode}
+\ProvidesFile{optics.def}
+\freecirc
+% \end{macrocode}
+% \begin{macrocode}
+\safedef{Dtext}#1 from #2 to #3 {{
+ \frompin{#2} \save*XY\frompin{#3} \diff*XY
+ \ifdim\**X=0pt
+ \dimen0\**Y
+ \ifdim\**Y<0pt\dimen0-\dimen0\fi
+ \c*fnts\setbox0=\hbox{\char9}\setbox1=\hbox{\char11}%
+ \c*fnt\setbox2=\hbox{\char132}\dp1=0pt
+ \advance\dimen0-\ht0\calc*u
+ \setbox\*bbox=
+ \vtop{\box1\loop\ifnum\cntb*>0\copy2
+ \advance\cntb*-1\repeat\box0}%
+ \put*box\advance\*X*\*spc\advance\*Y*.5\**Y\put\vc*{\hbox{#1}}
+ \else
+ \ifdim\**Y=0pt
+ \advance\*X*\**X
+ \dimen0\**X
+ \ifdim\**X<0pt\dimen0-\dimen0\fi
+ \c*fnts\setbox0=\hbox{\char8}\setbox1=\hbox{\char10}%
+ \c*fnt\advance\dimen0-\wd0\calc*u
+ \setbox\*bbox=\hbox{\box0\loop\ifnum\cntb*>0\advance\cntb*-1
+ \char129\repeat\box1}%
+ \put*box\advance\*X*-.5\**X\advance\*Y*\*spc\put\hc*{#1}
+ \else\errhelp{Only horizontal or vertical labeling allowed.}%
+ \errmessage{Bad points!}\fi\fi}}
+% \end{macrocode}
+%
+% We need a new font for the optic symbols.
+% \begin{macrocode}
+\addCIRCfont cioptic
+% \end{macrocode}
+%
+%</optics>
+%<*optics,doc>
+%<+doc>\optionline optics
+%<+doc>\textdef Dtext {text measuring a length}
+% \begin{macrocode}
+\cwdef oa {128\CIRCcioptic}
+%<+doc> {optical axis}
+\cdef SLens L \CIRCcioptic 0
+%<+doc> {thin lens}
+\cdefiv HSLens L \CIRCcioptic 2 | )
+%<+doc> {half thin lens}
+\cdef BLens L \CIRCcioptic 6
+%<+doc> {thick lens}
+\cdefiv HBLens L \CIRCcioptic 8 | )
+%<+doc> {half thick lens}
+\cdef VLens L \CIRCcioptic 12
+%<+doc> {concave lens}
+\cdefiv HVLens L \CIRCcioptic 14 | (
+%<+doc> {half concave lens}
+\cdefviii Mirror M \CIRCcioptic 85 * . +
+%<+doc> {mirror}
+\cdefviii BSplit BS \CIRCcioptic 36 * . +
+%<+doc> {beam splitter}
+\cdef Polar P \CIRCcioptic 44
+%<+doc> {polarizer}
+\cdef Pinhole {} \CIRCcioptic 46
+%<+doc> {pinhole}
+\cdefiv Cam {} \CIRCcioptic 66 . |
+%<+doc> {camera}
+\cdef ScrL {} \CIRCcioptic 72
+%<+doc> {screen, look at the left side}
+\cdef ScrR {} \CIRCcioptic 74
+%<+doc> {screen, look at the right side}
+\cdef ScrBL {} \CIRCcioptic 76
+%<+doc> {screen, look behind the left side}
+\cdef ScrBR {} \CIRCcioptic 78
+%<+doc> {screen, look behind the right side}
+\cdef ScrTL {} \CIRCcioptic 80
+%<+doc> {screen, look trough the left side}
+\cdef ScrTR {} \CIRCcioptic 82
+%<+doc> {screen, look trough the right side}
+\cdef Laser {} \CIRCcioptic 160
+%<+doc> {laser}
+\cdef PM {} \CIRCcioptic 162
+%<+doc> {photometer, -multiplyer, etc.}
+\bbdefNeTii OM \CIRCcioptic 164 {}
+%<+doc> {optical modulator}
+%</optics,doc>
+%<*optics>
+\protectcirc
+% \end{macrocode}
+%</optics>
+%^^A last update: Fri 03-13-1998
+%<*ciphysic>
+\freecirc
+\addCIRCfont ciphysic
+%</ciphysic>
+%<+doc>\optionline physics
+%<*ciphysic,doc>
+\cdef spring k \CIRCciphysic 0
+%<+doc> {spring}
+\cdef lspring k \CIRCciphysic 2
+%<+doc> {long spring}
+\cdef fdmass m \CIRCciphysic 4
+%<+doc> {mass with two forces; full drawn}
+\cdef dmass m \CIRCciphysic 6
+%<+doc> {mass with two forces; outlined}
+\cdefiv fmass m \CIRCciphysic 8 . *
+%<+doc> {mass; full drawn}
+\cdefiv mass m \CIRCciphysic 12 . *
+%<+doc> {mass; outlined}
+\cdefivNL wall \CIRCciphysic 16 . |
+%<+doc> {wall}
+\cdefivNL tile \CIRCciphysic 20 . *
+%<+doc> {tile}
+\cdef spinu S \CIRCciphysic 24
+%<+doc> {spin up}
+\cdef spind S \CIRCciphysic 26
+%<+doc> {spin down}
+%</ciphysic,doc>
+%<*ciphysic>
+\protectcirc
+%</ciphysic>
+%^^A last update: Fri 03-13-1998
+%<*doc>
+\protectcirc
+% \end{macrocode}
+%</doc>
+%<*code>
+%^^A last update: Fri 03-13-1998
+%
+% \begin{macrocode}
+\def\line*r{\check*X\ifnum\cnta*=0\else\check*max{\dimen2}\ifxoutofgrid
+ \advance\dimen2-.5\fontdimen6\c*fnt\fi
+ \setbox\*bbox=\hbox{\ifxoutofgrid\else\char\cc*\fi\advance\cc*1%
+ \loop\ifnum\cnta*>1\char\cc*
+ \advance\cnta*-1\repeat}\put*box
+ \advance\*X*.5\dimen2\the\toks2\advance\*X*.5\dimen2
+ \advance\cc*2\setbox\*bbox=\hbox{\char\cc*}\put*box\xoutofgridfalse\fi}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\line*l{\advance\*X*-\dimen2
+ \ifxoutofgrid\advance\*X*.5\fontdimen6\c*fnt\fi
+ \**X\*X*\line*r\*X*\**X}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\line*u{\check*X\ifnum\cnta*=0\else\advance\cc*4\ifyoutofgrid
+ \advance\dimen2-.5\fontdimen6\c*fnt\fi
+ \setbox\box*=\hbox{\char\cc*}\advance\cc*-1%
+ \setbox\*bbox=\vbox{\loop\ifnum\cnta*>1\copy\box*
+ \advance\cnta*-1\repeat
+ \ifyoutofgrid\else\hbox{\char\cc*}\fi}\put*box
+ \advance\*Y*.5\dimen2\the\toks4\advance\*Y*.5\dimen2
+ \advance\cc*2\setbox\*bbox=\vbox{\hbox{\char\cc*}}\put*box\youtofgridfalse\fi}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\line*d{\advance\*Y*-\dimen2
+ \ifyoutofgrid\advance\*Y*.5\fontdimen6\c*fnt\fi
+ \**Y\*Y*\line*u\*Y*\**Y}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\test*xygrid{\dimen9\fontdimen6\c*fnt\count@\dimen9
+ \cntb*\*X*\divide\cntb*\count@
+ \dimen0\*X*\advance\dimen0-\cntb*\dimen9
+ \advance\dimen9-.1pt
+ \ifdim\dimen0<0pt \dimen0-\dimen0 \fi
+ \ifdim\dimen0>0.1pt \ifdim\dimen0<\dimen9 \xoutofgridtrue\fi\fi
+ \cntb*\*Y*\divide\cntb*\count@
+ \dimen0\*Y*\advance\dimen0-\cntb*\fontdimen6\c*fnt
+ \ifdim\dimen0<0pt \dimen0-\dimen0 \fi
+ \ifdim\dimen0>0.1pt \ifdim\dimen0<\dimen9 \youtofgridtrue\fi\fi}
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\def\bundle#1 #2 #3 {\cc*136\c*fnt\cnta*#2\dimen2=#2em
+ \toks2{\setbox\box*=\hbox{\char134}%
+ \setbox\*bbox=\rlap{\raise\ht\box*
+ \hc*{\labelfont#1}\unhbox\box*}\put*box}%
+ \toks4{\setbox\*bbox=\hbox{\char135\labelfont
+ \vc*{\hbox{#1}}}%
+ \check*max{\wd\*bbox}\put*box}%
+ \test*xygrid\csname line*#3\endcsname}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\wwire#1 #2 #3 {\cc*112\c*fnt\cnta*#2\dimen2=#2em
+ \toks2{\setbox\*bbox=\rlap{\raise\*spc
+ \hc*{\labelfont#1}}\put*box}%
+ \toks4{\setbox\*bbox=\hbox{\kern\*spc\labelfont
+ \vc*{\hbox{#1}}}%
+ \check*max{\wd\*bbox}\put*box}%
+ \test*xygrid\csname line*#3\endcsname}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\by#1 {\def\by*cmd{#1}}
+\by{\wire}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\calc*u{\cnta*\fontdimen6\c*fnt\advance\dimen0 .5\fontdimen6\c*fnt
+ \cntb*\dimen0\divide\cntb*\cnta*}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\vtopin#1 {\save*XY\frompin{#1} \test*xygrid
+ \dimen0\**Y\advance\dimen0-\*Y*\restore*XY
+ \ifdim\dimen0<0pt\dimen0-\dimen0
+ \calc*u\by*cmd {\cntb*} u
+ \else\calc*u\by*cmd {\cntb*} d \fi}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\htopin#1 {\save*XY\frompin{#1} \test*xygrid
+ \dimen0\**X\advance\dimen0-\*X*\restore*XY
+ \ifdim\dimen0<0pt\dimen0-\dimen0
+ \calc*u\by*cmd {\cntb*} r
+ \else\calc*u\by*cmd {\cntb*} l \fi}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+% \begin{macrocode}
+\safedef{Utext}#1 from #2 to #3 {{%
+ \frompin{#2} \save*XY\frompin{#3} \diff*XY
+ \ifdim\**X=0pt
+ \setbox1=\hbox{\c*fnt\char132}%
+ \ifdim\**Y<0pt
+ \dimen0-\**Y
+ \setbox0=\hbox{\c*fnt\char'373}\advance\dimen0-\ht0\dp0=0pt
+ \calc*u
+ \setbox\*bbox=
+ \vtop to -\**Y{\vfill\box0\loop\ifnum\cntb*>2\copy1
+ \advance\cntb*-1\repeat\vfill}%
+ \else
+ \dimen0\**Y
+ \setbox0=\hbox{\c*fnt\char'371}\advance\dimen0-\ht0\dp0=0pt
+ \calc*u
+ \setbox\*bbox=
+ \vbox to \**Y{\vfill\loop\ifnum\cntb*>2\copy1
+ \advance\cntb*-1\repeat\box0\vfill}%
+ \fi
+ \put*box\advance\*X*\*spc\advance\*Y*.5\**Y\put\vc*{\hbox{#1}}
+ \else
+ \ifdim\**Y=0pt
+ \ifdim\**X<0pt
+ \dimen0-\**X
+ \setbox0=\hbox{\c*fnt\char'372}\advance\dimen0-\wd0
+ \calc*u
+ \setbox\*bbox=\llap{\hbox to -\**X{\hfill\loop\ifnum\cntb*>2\char129
+ \advance\cntb*-1\repeat\box0\hfill}}%
+ \else
+ \dimen0\**X
+ \setbox0=\hbox{\c*fnt\char'370}\advance\dimen0-\wd0
+ \calc*u
+ \setbox\*bbox=\hbox to \**X{\hfill\box0\loop\ifnum\cntb*>2\char129
+ \advance\cntb*-1\repeat\hfill}%
+ \fi
+ \put*box\advance\*X*.5\**X\advance\*Y*\*spc\put\hc*{#1}
+ \else\errhelp{Only horizontal or vertical labeling allowed.}%
+ \errmessage{Bad points!}\fi\fi}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\safedef{centertext}#1 from #2 to #3 {%
+ {\frompin{#2} \save*XY\frompin{#3} \diff*XY
+ \ifdim\**X=0pt
+ \advance\*Y*.5\**Y\put\vc*{\hbox{#1}}
+ \else
+ \ifdim\**Y=0pt
+ \advance\*X*.5\**X\put\hc*{#1}
+ \else\errhelp{Only horizontal or vertical labeling allowed.}%
+ \errmessage{Bad points}\fi\fi}}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+% Die absolute Positionierung in einem Raster von 7\,pt wird durch
+% das direkte Setzen der aktuellen Zeichenposition realisiert.
+% Die x-, und y-Position bezieht sich dabei auf den Punkt der
+% ersten Zeichenoperation, dem die Werte $(0,0)$ zugeordnet wurden.
+% \begin{macrocode}
+\def\from#1 #2 {\c*fnt\*X*=#1em\*Y*=#2em\check*X}
+\let\at\from
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\moverel#1 #2 {\c*fnt\advance\*X* #1em\advance\*Y* #2em\check*X}
+\let\shift\moverel
+% \begin{macrocode}
+%
+% \begin{macrocode}
+\safedef{put}#1 {\setbox\*bbox=\hbox{\ctextfont#1}\check*X
+ \check*max{\wd\*bbox}\put*box}
+
+% \end{macrocode}
+\safedef{P}#1 {\store*XY{P#1}\check*X\reset*ifs}
+%
+\safedefs{_} #1 #2 {\c*fnt\cnta*=0\csname CiRC#2\endcsname\relax
+ \ifnum\cnta*=0\relax
+ \PackageError{CIRC}{Bad direction}{Please check spelling}\fi
+ \ifcase \cnta* \relax
+ \or \advance\*X* -#1em
+ \or \advance\*X* #1em
+ \or \advance\*Y* #1em
+ \or \advance\*Y* -#1em
+ \or \advance\*X* -#1em
+ \or \advance\*X* #1em
+ \or \advance\*Y* #1em
+ \or \advance\*Y* -#1em \fi}
+%^^A last update: Fri 03-13-1998
+% \begin{macrocode}
+\def\nl{\lab*false}
+\def\nv{\val*false}
+\def\cc{\cc*true}
+\def\clr*acmds{\global\let\add*cmds\relax}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+% \begin{macrocode}
+\def\*fdef#1 {\expandafter\xdef\csname#1\endcsname{\the\toks0}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newtoks\CIRCfinit
+\CIRCfinit={}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\addCIRCfont#1 {\expandafter\CIRCfinit=\expandafter{\the\CIRCfinit
+ \expandafter\font\csname CIRC#1\endcsname=#1 scaled \*mag}}
+% \end{macrocode}
+% \begin{macrocode}
+\def\CIusefont#1#2#3{\fontencoding{\encodingdefault}\fontfamily{#1}%
+ \fontseries{\seriesdefault}\fontshape{\shapedefault}%
+ \fontsize{#2}{#3}\selectfont}
+\def\circuit#1 {\PackageInfo{CIRC}{`\CIRCredef' redefined}%
+ \let\add*cmds\relax
+ \*Ilist{}\*Olist{}\check*true
+ \xdef\*mag{\magstep{#1}}%
+ \global\X*max-\maxdimen
+ \global\X*min\maxdimen
+\ifcase#1 % magstep 0
+ \toks0={\CIusefont{\rmdefault}{10}{12pt}}%
+ \*fdef outlabelfont
+ \*fdef labelfont
+ \*fdef ctextfont
+ \toks0={\CIusefont{\sfdefault}{10}{12pt}}%
+ \*fdef symfont
+ \toks0={\CIusefont{\rmdefault}{7}{8pt}}%
+ \*fdef pinnumberfont
+ \*fdef functionfont
+ \toks0={\CIusefont{\rmdefault}{8}{9.5pt}}%
+ \*fdef circlabelfont
+ \toks0={\CIusefont{\sfdefault}{8}{9.5pt}}%
+ \*fdef inlabelfont
+\or % magstep 1
+ \toks0={\CIusefont{\rmdefault}{12}{14pt}}%
+ \*fdef outlabelfont
+ \*fdef labelfont
+ \*fdef ctextfont
+ \toks0={\CIusefont{\sfdefault}{12}{14pt}}%
+ \*fdef symfont
+ \toks0={\CIusefont{\rmdefault}{8}{9.5pt}}%
+ \*fdef pinnumberfont
+ \toks0={\CIusefont{\rmdefault}{9}{11pt}}%
+ \*fdef functionfont
+ \*fdef circlabelfont
+ \toks0={\CIusefont{\sfdefault}{9}{11pt}}%
+ \*fdef inlabelfont
+\or % magstep 2
+ \toks0={\CIusefont{\rmdefault}{14.4}{18pt}}%
+ \*fdef outlabelfont
+ \*fdef labelfont
+ \*fdef ctextfont
+ \toks0={\CIusefont{\sfdefault}{14.4}{18pt}}%
+ \*fdef symfont
+ \toks0={\CIusefont{\rmdefault}{9}{11pt}}%
+ \*fdef pinnumberfont
+ \toks0={\CIusefont{\rmdefault}{10}{12pt}}%
+ \*fdef functionfont
+ \*fdef circlabelfont
+ \toks0={\CIusefont{\sfdefault}{10}{12pt}}%
+ \*fdef inlabelfont
+\or % magstep 3
+ \toks0={\CIusefont{\rmdefault}{17.28}{22pt}}%
+ \*fdef outlabelfont
+ \*fdef labelfont
+ \*fdef ctextfont
+ \toks0={\CIusefont{\sfdefault}{17.28}{22pt}}%
+ \*fdef symfont
+ \toks0={\CIusefont{\sfdefault}{10}{12pt}}%
+ \*fdef pinnumberfont
+ \toks0={\CIusefont{\rmdefault}{12}{14pt}}%
+ \*fdef functionfont
+ \*fdef circlabelfont
+ \toks0={\CIusefont{\sfdefault}{12}{14pt}}%
+ \*fdef inlabelfont
+\or % magstep 4
+ \toks0={\CIusefont{\rmdefault}{20.74}{25pt}}%
+ \*fdef outlabelfont
+ \*fdef labelfont
+ \*fdef ctextfont
+ \toks0={\CIusefont{\sfdefault}{20.74}{25pt}}%
+ \*fdef symfont
+ \toks0={\CIusefont{\rmdefault}{12}{14pt}}%
+ \*fdef pinnumberfont
+ \toks0={\CIusefont{\rmdefault}{14.4}{18pt}}%
+ \*fdef functionfont
+ \*fdef circlabelfont
+ \toks0={\CIusefont{\sfdefault}{14.4}{18pt}}%
+ \*fdef inlabelfont
+\else\errhelp{0 ... 4 expected.}\errmessage{Bad magnification!}\fi
+%
+{\outlabelfont
+\global\*spc 0.4em}%
+%
+\font\c*fnt=cirest scaled \*mag
+\font\c*fntb=cicirc scaled \*mag
+\font\c*fntd=cidiod scaled \*mag
+\font\c*fntt=cibimos scaled \*mag
+\font\c*fntw=ciwidko scaled \*mag
+\font\c*fnts=cisym scaled \*mag
+%
+\outerspace1mm
+\pinnum*spc.7mm
+\pin*ind\fontdimen12\c*fntb
+\pin*spc\fontdimen13\c*fntb
+\io*ind\fontdimen14\c*fntb
+\mid*ind\fontdimen16\c*fntb
+\X*min\maxdimen
+\X*max-\maxdimen
+%
+\the\CIRCfinit
+\begingroup
+%
+ \the\rmacros
+ \let\.\junction
+ \def\- ##1 ##2 {\wire##1 ##2 }%
+ \def\= ##1 ##2 ##3 {\bundle##1 ##2 ##3 }%
+ \def\<{\ld*true}%
+%
+\parindent0pt
+\offinterlineskip\setbox\*bbox=\hbox\bgroup\at 0 0 }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\endcircuit{\egroup\leavevmode
+ \hbox{\kern-\X*min\unhbox\*bbox\kern\X*max}\endgroup
+ \PackageInfo{CIRC}{`\CIRCredef' restored}}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+%
+\safedef{fallingEdge}{{\c*fnts\char3}}
+\safedef{raisingEdge}{{\c*fnts\char2}}
+\safedef{spike}{{\c*fnts\char4}}
+\safedef{ispike}{{\c*fnts\char12}}
+\safedef{squarePulse}{{\c*fnts\char1}}
+\safedef{squarePulses}{{\c*fnts\char5}}
+\safedef{sawtoothPuls}{{\c*fnt\char6}}
+%
+%^^A last update: Fri 03-13-1998
+% The last thing we define is the logo of CIRC.
+% This pretty small grey elephant was choosen and then digitized as a
+% result of a discussion about the incomming of new symbols into
+% CIRC. Idea by Andreas Tille.
+% \begin{macrocode}
+\def\CIRCLogo{\c*fnt\cc*0\getc*252 \check*max{.5\wd*}\check*min{.5\wd*}%
+ \setbox\*bbox=\hbox to \wd*{\hss\lower\ht*\hbox to 0pt{\hss
+ \symfont\raise1.5ex\rlap{\kern1ex CIRC}\box\box*}\hss}\put*box\reset*ifs}
+% \end{macrocode}
+%^^A last update: Fri 03-13-1998
+% Alle internen Buchstaben werden wieder auf ihren vormaligen
+% Kategoriekode gesetzt.
+% \begin{macrocode}
+\protectcirc
+% \end{macrocode}
+% Now we are ready to process all options of CIRC.
+% That means to load all modules.
+% \begin{macrocode}
+\ProcessOptions
+% \end{macrocode}
+%</code>
+%^^A last update: Fri 03-13-1998
+%<*ic>
+% \begin{macrocode}
+\ProvidesFile{ic.def}
+% \end{macrocode}
+% \begin{macrocode}
+\freecirc
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\**[#1 #2 #3 #4 {\cc*\cnta*\advance\cc*32 \advance\cc*#1
+ \Cstore*\*Ilist{#2}\Cadd*\*Ilist
+ \rlap{\kern\pin*ind\ifpin\raise\pinnum*spc\hc*{\pinnumberfont{#3}}\fi
+ \kern\io*ind\c*fntb\vc*{\hc*{\inlabelfont{#4}}}}\char\cc*
+ \cc*\cnta*\advance\cc*97\char\cc*}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\**]#1 #2 #3 #4 {\cc*\cnta*\advance\cc*48 \advance\cc*#1
+ \Cstore*\*Olist{#2}\Cadd*\*Olist
+ \rlap{\kern.5\mid*ind\vc*{\hc*{\inlabelfont{#3}}}\kern\io*ind
+ \ifpin\raise\pinnum*spc\hc*{\pinnumberfont{#4}}\fi}\char\cc*}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\*F[#1 #2 #3 #4 #5 {\cc*\cnta*\advance\cc*#1
+ \X*check\Cstore*\*Ilist{#2}\Cadd*\*Ilist
+ \rlap{\kern\pin*ind\ifpin\raise\pinnum*spc\hc*{\pinnumberfont{#3}}\fi
+ \kern\io*ind\c*fntb\vc*{\hc*{\inlabelfont{#4}}}}%
+ \rlap{\kern\io*ind\kern\mid*ind
+ \blap{\kern0pt\hc*{\functionfont{#5}}}}\char\cc*
+ \cc*\cnta*\advance\cc*96\char\cc*}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\*F]#1 #2 #3 #4 {\cc*\cnta*\advance\cc*16 \advance\cc*#1
+ \LX*check\*Olist\Cstore*\*Olist{#2}\Cadd*\*Olist
+ \rlap{\kern.5\mid*ind\vc*{\hc*{\inlabelfont{#3}}}\kern\io*ind
+ \ifpin\raise\pinnum*spc\hc*{\pinnumberfont{#4}}\fi}\char\cc*}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\*L[#1 #2 #3 #4 #5 {\cc*\cnta*\advance\cc*64 \advance\cc*#1
+ \Cstore*\*Ilist{#2}\Cadd*\*Ilist
+ \rlap{\kern\pin*ind\ifpin\raise\pinnum*spc\hc*{\pinnumberfont{#3}}\fi
+ \kern\io*ind\c*fntb\vc*{\hc*{\inlabelfont{#4}}}}%
+ \rlap{\iflab*\kern\io*ind\kern\mid*ind
+ \vtop{\kern\fontdimen17\c*fntb\kern\outerspace
+ \hc*{\circlabelfont{#5}}}\fi}\char\cc*
+ \cc*\cnta*\advance\cc*98\char\cc*}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\*L]#1 #2 #3 #4 {\cc*\cnta*\advance\cc*80 \advance\cc*#1
+ \Cstore*\*Olist{#2}\Cadd*\*Olist
+ \rlap{\kern.5\mid*ind\vc*{\hc*{\inlabelfont{#3}}}\kern\io*ind
+ \ifpin\raise\pinnum*spc\hc*{\pinnumberfont{#4}}\fi}\char\cc*}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\*H#1 {\cc*\cnta*\X*check\Cadd*\*Ilist
+ \rlap{\kern\io*ind\kern\mid*ind\blap{\kern-\*spc\labelfont\hc*{#1\ }}}%
+ \char\cc*\cc*\cnta*\advance\cc*96\char\cc*\cc*\cnta*\advance\cc*16
+ \LX*check\*Olist\Cadd*\*Olist\char\cc*}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\C*init{\dimen4\*X*\dimen5\*Y*
+ \setbox\*bbox=\vtop\bgroup\c*fntb\cnta*=0 \ignorespaces}
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\def\C*exit#1{\egroup\shift*IOlist{#1}\put*box\*X*\dimen4\*Y*\dimen5}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\*o#1{$\overline{\hbox{#1}}$}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\*|#1| {\hbox{#1}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\JKMSFF#1 #2 #3 #4 {\name*{JKMSFF#1}\C*init
+\*|\*F[2 S {} S {} \*F]0 . {} {} |
+\*|\**[1 J {} 1J \**]1 Q $\neg$ {} |
+\*|\**[3 C {} C1 \**]0 . {} {} |
+\*|\**[1 K {} 1K \**]2 NQ $\neg$ {} |
+\*|\*L[2 R {} R {#2} \*L]0 . {} {} |
+\C*exit{#3}}
+% \end{macrocode}
+% \begin{macrocode}
+\def\DFF#1 #2 #3 #4 {\name*{DFF#1}\C*init
+\*|\*F[1 D {} 1D {} \*F]1 Q {} {} |
+\*|\**[0 . {} {} \**]0 . {} {} |
+\*|\*L[3 C {} C1 {#2} \*L]2 NQ {} {} |
+\C*exit{#3}}
+% \end{macrocode}
+% \begin{macrocode}
+\def\RSFF#1 #2 #3 #4 {\name*{RSFF#1}\C*init
+\*|\*F[1 R {} R {} \*F]1 Q {} {} |
+\*|\**[0 . {} {} \**]0 . {} {} |
+\*|\*L[1 S {} S {#2} \*L]2 NQ {} {} |
+\C*exit{#3}}
+% \end{macrocode}
+% \begin{macrocode}
+\def\NRSFF#1 #2 #3 #4 {\name*{NRSFF#1}\C*init
+\*|\*F[2 R {} R {} \*F]1 Q {} {} |
+\*|\**[0 . {} {} \**]0 . {} {} |
+\*|\*L[2 S {} S {#2} \*L]2 NQ {} {} |
+\C*exit{#3}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\fff#1 #2 #3 #4 {\name*{fff#1}\C*init
+\*|\*F[1 IS {6} IS { } \*F]1 OK OK 5 |
+\*|\**[0 . {} {} \**]0 . {} {} |
+\*|\**[1 IT {2} IT \**]1 O O 3 |
+\*|\**[0 . {} {} \**]0 . {} {} |
+\*|\*L[2 R {4} R {#2} \*L]1 OD OD 7 |
+\C*exit{#3}}
+% \end{macrocode}
+% \begin{macrocode}
+\def\NULL#1 #2 #3 #4 {\name*{NULL#1}\C*init
+\*|\*H{$\vcenter{\hbox{\c*fnts\char25}}\ \infty$} |
+\*|\**[1 i+ {} + \**]1 o+ + {} |
+\*|\**[0 . {} {} \**]0 . {} {} |
+\*|\*L[1 i- {} $-$ {#2} \*L]1 o- $-$ {} |
+\C*exit{#3}}
+% \end{macrocode}
+% \begin{macrocode}
+\protectcirc
+% \end{macrocode}
+%</ic>
+%^^A last update: Fri 03-13-1998
+%<*ciphysicmf>
+font_identifier:="ciphysic";
+
+string optionname; optionname:="physics";
+
+input defcirc.mf;
+
+
+%% SPRING
+
+spring_lt#= 5CIu#;
+lspring_lt#= 7CIu#;
+spring_th#= 1CIu#;
+define_whole_pixels(lspring_lt,spring_lt,spring_th);
+spring_gap= .6CIu;
+spring_n=11;
+spring_swd=(spring_lt-2spring_gap)/spring_n;
+lspring_swd=(lspring_lt-2spring_gap)/spring_n;
+
+twopinchar("spring")("k")("spring")
+ (spring_lt#, .5spring_th#, .5spring_th#)
+( pickup pensquare scaled normalline;
+ z0=(0,0);
+ shiftpoint:=z0+(spring_lt,0);
+ z1=z0+(spring_gap,0);
+ draw z0--z1;
+ pickup pencircle scaled normalline;
+ for i:=1 upto spring_n:
+ x[i+1]=x[i]+spring_swd; y[i+1]=y[0]+if odd(i): 1 else: -1 fi*.5spring_th;
+ if i=spring_n: y[i+1]:=y[i+1]-if odd(i): 1 else: -1 fi*.5spring_th fi;
+ draw z[i]--z[i+1];
+ endfor;
+ z[spring_n+2]=z0+(spring_lt,0);
+ pickup pensquare scaled normalline;
+ z[spring_n+2]=z0+(spring_lt,0);
+ draw z[spring_n+1]--z[spring_n+2];
+)
+
+twopinchar("lspring")("k")("long spring")
+ (lspring_lt#, .5spring_th#, .5spring_th#)
+( pickup pensquare scaled normalline;
+ z0=(0,0);
+ shiftpoint:=z0+(lspring_lt,0);
+ z1=z0+(spring_gap,0);
+ draw z0--z1;
+ pickup pencircle scaled normalline;
+ for i:=1 upto spring_n:
+ x[i+1]=x[i]+lspring_swd; y[i+1]=y[0]+if odd(i): 1 else: -1 fi*.5spring_th;
+ if i=spring_n: y[i+1]:=y[i+1]-if odd(i): 1 else: -1 fi*.5spring_th fi;
+ draw z[i]--z[i+1];
+ endfor;
+ z[spring_n+2]=z0+(lspring_lt,0);
+ pickup pensquare scaled normalline;
+ draw z[spring_n+1]--z[spring_n+2];
+)
+
+%% MASS single/double
+
+dmass_lt#= 2CIu#;
+mass_r#= 1.5CIu#;
+define_whole_pixels(dmass_lt,mass_r);
+
+twopinchar("fdmass")("m")("mass with two forces; full drawn")
+ (dmass_lt#, .5mass_r#, .5mass_r#)
+( pickup pensquare scaled normalline;
+ z0=(0,0);
+ z1=z0+(dmass_lt,0);
+ shiftpoint:=z1;
+ draw z0--z1;
+ z2=.5[z0,z1];
+ pickup pencircle scaled mass_r;
+ drawdot z2;
+)
+
+twopinchar("dmass")("m")("mass with two forces; outlined")
+ (dmass_lt#, .5mass_r#, .5mass_r#)
+( pickup pensquare scaled normalline;
+ z0=(0,0);
+ z1=z0+(.5(dmass_lt-mass_r),0);
+ draw z0--z1;
+ z3=z0+(dmass_lt,0);
+ shiftpoint:=z3;
+ z4=z3-(.5(dmass_lt-mass_r),0);
+ draw z3--z4;
+ z2=.5[z0,z3];
+ pickup pencircle scaled normalline;
+ draw fullcircle scaled mass_r shifted z2;
+)
+
+twopincharfour("fmass")("m")(".")("*")("mass; full drawn")
+ (dmass_lt#, .5mass_r#, .5mass_r#)
+( pickup pensquare scaled normalline;
+ z0=(0,0);
+ z1=z0+(dmass_lt,0);
+ z2=.5[z0,z1];
+ draw z0--z2;
+ pickup pencircle scaled mass_r;
+ drawdot z2;
+
+ shiftpoint:=z1;
+)
+
+twopincharfour("mass")("m")(".")("*")("mass; outlined")
+ (dmass_lt#, .5mass_r#, .5mass_r#)
+( pickup pensquare scaled normalline;
+ z0=(0,0);
+ z1=z0+(.5(dmass_lt-mass_r),0);
+ draw z0--z1;
+ z3=z0+(dmass_lt,0);
+ z2=.5[z0,z3];
+ pickup pencircle scaled normalline;
+ draw fullcircle scaled mass_r shifted z2;
+
+ shiftpoint:=z3;
+)
+
+%% WALL
+
+wall_lt#= 1.5CIu#;
+wall_ht#= 2.5CIu#;
+define_whole_pixels(wall_ht, wall_lt);
+wall_f=1/3;
+wall_n=6;
+wall_alpha=40;
+
+twopincharfour("wall")("{}")(".")("|")("wall")
+ (wall_lt#,.5wall_ht#
+ +wall_lt#*(1-wall_f)*sind(wall_alpha),.5wall_ht#)
+( pickup pensquare scaled normalline;
+ z0=(0,0);
+ z1=z0+(wall_f*wall_lt,0);
+ draw z0--z1;
+ z1=.5[z2,z3]; y3-y2=wall_ht; x3=x2;
+ pickup pensquare scaled verythickline;
+ draw z2--z3;
+ path a;
+ a=(0,0)--(1-wall_f)*wall_lt*dir(wall_alpha);
+ pickup pencircle scaled normalline;
+ for i:=0 upto wall_n: draw a shifted (i/wall_n)[z2,z3]; endfor
+
+ shiftpoint:=z0+(wall_lt,0);
+)
+
+tile_lt#= 2CIu#;
+tile_ht#= .4CIu#;
+tile_f=0.1;
+
+define_whole_pixels(tile_lt,tile_ht);
+
+twopincharfour("tile")("{}")(".")("*")("tile")
+ (wall_lt#,.5tile_ht#,.5tile_ht#)
+( pickup pensquare scaled normalline;
+ z0=(0,0);
+ z1=z0+(tile_lt,0);
+ z2=tile_f[z0,z1];
+ draw z0--z1;
+ pickup pensquare scaled verythickline;
+ draw z1--z2;
+ shiftpoint:=z1;
+)
+
+spin_lt#= 2CIu#;
+spin_r#= .7CIu#;
+spin_ht#= 2CIu#;
+spin_alt= .5CIu;
+spin_awd= .1CIu;
+define_whole_pixels(spin_lt,spin_r, spin_ht);
+
+twopinchar("spinu")("S")("spin up")
+ (spin_lt#, .6spin_ht#, .6spin_ht#)
+( pickup pensquare scaled normalline;
+ z0=(0,0);
+ z1=z0+(spin_lt,0);
+ draw z0--z1;
+ z2=.5[z0,z1];
+ y3-y4=spin_ht;
+ x3=x4=x2;
+ y2=.6[y3,y4];
+ y5=y6=y3-spin_alt;
+ x5=x2-spin_awd;
+ x6=x2+spin_awd;
+% pickup pencircle scaled thinline;
+ draw z3--z4;
+ filldraw z5--z3--z6--cycle;
+ pickup pencircle scaled spin_r;
+ drawdot z2;
+ shiftpoint:=z1;
+)
+
+twopinchar("spind")("S")("spin down")
+ (spin_lt#, .6spin_ht#, .6spin_ht#)
+( pickup pensquare scaled normalline;
+ z0=(0,0);
+ z1=z0+(spin_lt,0);
+ draw z0--z1;
+ z2=.5[z0,z1];
+ y3-y4=-spin_ht;
+ x3=x4=x2;
+ y2=.6[y3,y4];
+ y5=y6=y3+spin_alt;
+ x5=x2-spin_awd;
+ x6=x2+spin_awd;
+% pickup pencircle scaled thinline;
+ draw z3--z4;
+ filldraw z5--z3--z6--cycle;
+ pickup pencircle scaled spin_r;
+ drawdot z2;
+ shiftpoint:=z1;
+)
+
+endCIRCfont
+%</ciphysicmf>
+%^^A last update: Fri 03-13-1998
+%
+%<*csybimos>
+font_identifier:="cibimos";
+
+string optionname; optionname:="";
+
+input defcirc.mf;
+
+input csym;
+designsize:=1lLE#;
+
+def mosfet = % ok
+ z0=(0,0);
+ x1=x2=x3=x4;
+ y2-y1=mos_SD;
+ y4-y3=mos_sd;
+ .5[z2,z1]=.5[z4,z3];
+ y6=y4; y7=y3;
+ x4-x6=x3-x7;
+ .5[z8,z9]=.5[z6,z7]=z5;
+ x9=x8;
+ y8-y6=mos_soSD;
+ x10=x11;
+ x0+mos_Gsub=x10+mos_ox=x7;
+ x1-x0=mos_GSx;
+ y0=y10=y1+mos_GSy;
+ y6-y11=y10-y7;
+ z12=.5[z1,z2];
+ z6=.5[z13,z8];
+ z7=.5[z14,z9];
+ z15-z16=z8-z13;
+ z5=.5[z15,z16];
+ pickup pencircle scaled mos_rad;
+ drawdot round(z3);
+ pickup pensquare scaled normalline;
+ draw z1--z3--z7;
+ draw z2--z4--z6;
+ draw z0--z10--z11;
+ draw z5--z12--z3;
+ pickup pensquare scaled thickline;
+enddef;
+
+def mosfet_V = % ok
+ mosfet;
+ draw z8--z9;
+enddef;
+
+def mosfet_A = % ok
+ mosfet;
+ draw z8--z13;
+ draw z9--z14;
+ draw z15--z16;
+enddef;
+
+def fet = % ok
+ z0=(0,0);
+ z1=z0+(fet_Gsub,0);
+ y2=y1;
+ x2=x3=x4=x0+fet_GSx;
+ y3=y2-fet_GSy;
+ z2-z3=z4-z5;
+ y4-y3=fet_SD;
+ y6=y5;
+ x1=x6;
+ x8=x7;
+ y8=y1-fet_soSD;
+ .5[z4,z3]=.5[z5,z2];
+ .5[z7,z8]=.5[z1,z6];
+ z9=z1-(fet_sarr+tri_lt,0);
+ pickup pensquare scaled normalline;
+ draw z0--z1--z2--z3;
+ draw z6--z5--z4;
+ pickup pensquare scaled thickline;
+ draw z7--z8;
+enddef;
+
+def transistor_without_basis = % "uberarbeiten
+ numeric pl;
+ pl:=.5(tst_ht-tst_iht);
+ z1-z2=(0,tst_iht);
+ z0=.5[z1,z2];
+ z3=tst_fac[z0,z1];
+ z4=tst_fac[z0,z2];
+ z5=z1+(tst_wd,0);
+ z6=z2+(tst_wd,0);
+ z7=z5+(0,pl);
+ z8=z6+(0,-pl);
+ z9=tst_dis[z4,z6];
+ pickup pensquare scaled normalline;
+ draw z1--z2;
+ draw z3--z5--z7;
+ draw z4--z6--z8;
+ pickup pencircle scaled thinline;
+ triangle(z9,tst_rad,tri_phi,angle(z6-z4));
+enddef;
+
+def npn_no_basis = % "uberarbeiten
+ numeric tst_rad,tst_dis;
+ tst_rad:=-tri_lt;
+ tst_dis:=npn_dis;
+ z0=(0,0);
+ transistor_without_basis;
+enddef;
+
+def npn_photo = % "uberarbeiten
+numeric pl;
+ z0=(0,0);
+ pl:=.5(tst_ht-tst_iht);
+ y0=y1=y2=y3;
+ x1=x0+tst_ht;
+ x2-x0=x1-x3=pl;
+ y5=y4=y6=y7=y8=y0+tst_wd;
+ x5-x6=tst_iht;
+ x4=.5[x5,x6]=.5[x0,x1];
+ x7=tst_fac[x4,x5];
+ x8=tst_fac[x4,x6];
+ z9=tst_dis[z2,z8];
+ pickup pensquare scaled normalline;
+ draw z0--z2--z8--z7--z3--z1;
+ draw z5--z6;
+ pickup pencircle scaled thinline;
+ triangle(z9,tst_rad,tri_phi,angle(z8-z2));
+enddef;
+
+def pnp_no_basis = % "uberarbeiten
+ numeric tst_rad,tst_dis;
+ tst_rad:=tri_lt;
+ tst_dis:=pnp_dis;
+ z0=(0,0);
+ transistor_without_basis;
+enddef;
+
+def npn = % "uberarbeiten
+ numeric tst_rad,tst_dis;
+ tst_rad:=-tri_lt;
+ tst_dis:=npn_dis;
+ z0=(tst_wd,0);
+ z20=(0,0);
+ transistor_without_basis;
+ pickup pensquare scaled normalline;
+ draw z20--z0;
+enddef;
+
+def pnp = % "uberarbeiten
+ numeric tst_rad,tst_dis;
+ tst_rad:=tri_lt;
+ tst_dis:=pnp_dis;
+ z0=(tst_wd,0);
+ z20=(0,0);
+ transistor_without_basis;
+ pickup pensquare scaled normalline;
+ draw z20--z0;
+enddef;
+
+
+"Transistor NPN ohne Basis";
+eightchars(0)
+ (npn_no_basis)
+ (tst_wd#,.5tst_ht#,.5tst_ht#,0);
+
+"Transistor PNP ohne Basis";
+eightchars(8)
+ (pnp_no_basis)
+ (tst_wd#,.5tst_ht#,.5tst_ht#,0);
+
+"Transistor NPN";
+eightchars(16)
+ (npn)
+ (tst_wd#+tst_wd#,.5tst_ht#,.5tst_ht#,0);
+
+"Transistor PNP";
+eightchars(24)
+ (pnp)
+ (tst_wd#+tst_wd#,.5tst_ht#,.5tst_ht#,0);
+
+"FET n-Kanal";
+eightchars(32)
+ (fet;
+ pickup pencircle scaled thinline;
+ triangle(z1,tri_lt,tri_phi,180);
+ )
+ (fet_GSx#,fet_GSy#,fet_SD#-fet_GSy#,0);
+
+"FET p-Kanal";
+eightchars(40)
+ (fet;
+ pickup pencircle scaled thinline;
+ triangle(z9,tri_lt,tri_phi,0);
+ )
+ (fet_GSx#,fet_GSy#,fet_SD#-fet_GSy#,0);
+
+"MOSFET n-Kanal V";
+eightchars(48)
+ (mosfet_V;
+ pickup pencircle scaled thinline;
+ triangle(z5,tri_lt,tri_phi,0);
+ )
+ (mos_GSx#,mos_GSy#,mos_SD#-mos_GSy#,0);
+
+"MOSFET p-Kanal V";
+eightchars(56)
+ (mosfet_V;
+ pickup pencircle scaled thinline;
+ triangle(z12,tri_lt,tri_phi,180);
+ )
+ (mos_GSx#,mos_GSy#,mos_SD#-mos_GSy#,0);
+
+"MOSFET n-Kanal A";
+eightchars(64)
+ (mosfet_A;
+ pickup pencircle scaled thinline;
+ triangle(z5,tri_lt,tri_phi,0);
+ )
+ (mos_GSx#,mos_GSy#,mos_SD#-mos_GSy#,0);
+
+"MOSFET p-Kanal A";
+eightchars(72)
+ (mosfet_A;
+ pickup pencircle scaled thinline;
+ triangle(z12,tri_lt,tri_phi,180);
+ )
+ (mos_GSx#,mos_GSy#,mos_SD#-mos_GSy#,0);
+
+current_char_code:=80;
+
+twopincharfourfour("npnPH")("T")("E")("C")("photo transistor")
+ (tst_ht#,tst_wd#+1.6lLE#,0)
+(
+shiftpoint:=z1;
+npn_photo;
+lightarrows(z4+(.8lLE,1.7lLE),240);
+)
+
+end;
+%</csybimos>
+%
+%^^A last update: Fri 03-13-1998
+%
+%<*csysym>
+input csym;
+designsize:=.5lLE#;
+
+def eqtriangle(expr l)=
+ x1=x2=x0=x3-l;
+ y3=y0;
+ z1-z2=(z3-z2) rotated 60;
+enddef;
+
+def sinus(expr A, k, s) =
+ j:=0;
+ for i:=0 step s until 360:
+ z[j]=(k*i,A*sind(i));
+ j:=j+1;
+ endfor
+ draw for i:=0 upto floor(360/s)-1: z[i].. endfor z[floor(360/s)];
+enddef;
+
+def disarrow =
+ z0=(0,0);
+ x0=x1=x2;
+ y1-y2=darr_ht;
+ .5[z1,z2]=z0;
+ y0=y3;
+ x3-x0=darr_lt;
+ pickup pensquare scaled normalline;
+ draw z0--z3;
+ draw z1--z2;
+ triangle(z0,darr_rad,darr_phi,0);
+enddef;
+
+def trigger =
+ z0=(0,0);
+ x1=x2; x3=x4;
+ y2=y4=y5; y0=y1=y3;
+ x3-x1=.17sym;
+ x1-x0=x5-x4=.3sym;
+ y2-y1=sym;
+enddef;
+
+def impuls =
+ z0=(0,0);
+ y0=y1=y4=y5=y7=y8=y9;
+ x1-x0=x3-x2=x5-x4=x8-x7=.6sym;
+ x9-x0=x6-x2=.2sym;
+ x1=x2; x3=x4; x6=x7;
+ y2-y1=y3-y4=y6-y7=sym;
+ x10=x0; y11=y10=y2;
+ x11=x8;
+enddef;
+
+
+
+ "Rechteckimpuls";
+ beginchar(1,1.9sym#,sym#,0);
+ impuls
+ pickup pensquare scaled normalline;
+ draw z0--z1--z2--z3--z4--z5;
+ endchar;
+
+ "positive Flanke";
+ beginchar(2,1.3sym#,sym#,0);
+ impuls
+ pickup pensquare scaled normalline;
+ draw z0--z1--z2--z3;
+ endchar;
+
+ "negative Flanke";
+ beginchar(3,1.3sym#,sym#,0);
+ impuls
+ pickup pensquare scaled normalline;
+ draw (z2--z3--z4--z5) shifted (x0-x1,0);
+ endchar;
+
+ "Nadelimpuls";
+ beginchar(4,1.5sym#,sym#,0);
+ impuls
+ pickup pensquare scaled normalline;
+ draw (z0--z1--z2--z6--z7--z8);
+ endchar;
+
+ "inverser Nadelimpuls";
+ beginchar(12,1.5sym#,sym#,0);
+ impuls
+ pickup pensquare scaled normalline;
+ draw (z10--z2--z1--z7--z6--z11);
+ endchar;
+
+ "Rechteckspannung";
+ beginchar(5,3.1sym#,sym#,0);
+ impuls
+ pickup pensquare scaled normalline;
+ draw z0--z1--z2--z3--z4--z5;
+ draw (z0--z1--z2--z3--z4--z5) shifted z4;
+ endchar;
+
+ "Rechteckimpulse";
+ beginchar(13,2.6sym#,sym#,0);
+ impuls
+ pickup pensquare scaled normalline;
+ draw z0--z1--z2--z6--z7--z8;
+ draw (z0--z1--z2--z6--z7--z8) shifted z4;
+
+ endchar;
+
+ "S"&ditto&"agezahn";
+ beginchar(6,1.9sym#,sym#,0);
+ impuls
+ pickup pensquare scaled normalline;
+ draw z0--z9--z3--z4--z5;
+ endchar;
+
+ "Trigger";
+ beginchar(7,.87sym#,sym#,0);
+ trigger
+ pickup pensquare scaled normalline;
+ draw z0--z1--z2--z5;
+ draw z1--z3--z4;
+ endchar;
+
+ "Abstandsst"&ditto&"uck";
+ fourchars(8)(disarrow)(z0)(.5darr_ht#,darr_lt#,.5darr_ht#);
+
+"sinus wave";
+beginchar(16,1.6sym#,9/35*sym#,9/35*sym#);
+ pickup pencircle scaled normalline;
+ sinus(9/35*sym,1.6sym/360,45);
+endchar;
+
+"variable sinus wave";
+beginchar(17,1.6sym#,9/35*sym#,9/35*sym#);
+ pickup pencircle scaled normalline;
+ sinus(9/35*sym,1.6sym/360,45);
+ fillarrow((.8*sym,0),20/35*sym,15/35*sym,45,15/35*sym,15)();
+endchar;
+
+"symbol of amplifier";
+beginchar(24,cosd(30)*1.9sym#,.95sym#,.95sym#);
+ z0=(0,0);
+ eqtriangle(1.9sym);
+ pickup pencircle scaled normalline;
+ draw z1--z2--z3--cycle;
+endchar;
+
+"symbol of buffer";
+beginchar(25,cosd(30)*1sym#,.5sym#,.5sym#);
+ z0=(0,0);
+ eqtriangle(1sym);
+ pickup pencircle scaled normalline;
+ draw z1--z2--z3--cycle;
+endchar;
+
+bye;
+%</csysym>
+%
+%^^A last update: Fri 03-13-1998
+%<*defcircmf>
+mode_setup;
+font_coding_scheme:="CIRC symbols";
+
+message("CIRC %<*"&font_identifier_&">");
+message("CIRC \freecirc");
+message("CIRC \addCIRCfont "&font_identifier_);
+message("CIRC %</"&font_identifier_&">");
+message("CIRC %<+doc> \optionline "&optionname);
+message("CIRC %<*"&font_identifier_&",doc>");
+message("");
+
+inner bye;
+def endCIRCfont =
+ message("CIRC %</"&font_identifier_&",doc>");
+ message("CIRC %<*"&font_identifier_&">");
+ message("CIRC \protectcirc");
+ message("CIRC %</"&font_identifier_&">");
+ message("");
+ bye;
+enddef;
+
+CIu#:=7pt#; define_whole_pixels(CIu);
+% define all symbols by a 7pt grid --> CIRC unit
+
+current_char_code:=0;
+% start with character code 0
+
+pair shiftpoint;
+
+linethickness#:= 0.45pt#;
+thinline# := 0.5linethickness#;
+normalline# := 1.0linethickness#;
+thickline# := 1.5linethickness#;
+verythickline#:= 2.5linethickness#;
+define_whole_blacker_pixels(normalline,thinline,thickline,verythickline);
+
+fontdimen6: 1CIu#;
+%export the CIRC unit to TeX
+
+extra_endchar:=extra_endchar & "labels(range 0 thru 100);";
+% for proofing mark all points
+
+def {{ =
+ begingroup
+ save T; transform T;
+ T:=currenttransform;
+ save currenttransform;
+ transform currenttransform;
+ currenttransform:=T;
+enddef;
+
+def }} = endgroup; enddef;
+
+def addTF(text t) = currenttransform:=currenttransform t; enddef;
+
+def twopinchar(text name, lab, doc)(expr wd, ht, dp)(text body) =
+ message("CIRC \cdef "&name&" "&lab&" \CIRC"&
+ font_identifier_&" "&decimal(current_char_code));
+ message("CIRC %<+doc> {"&doc&"}");
+ message("");
+ beginchar(current_char_code, wd, ht, dp);
+ body;
+ endchar;
+ current_char_code:=current_char_code+1;
+ beginchar(current_char_code,dp,wd,ht);
+ {{addTF(shifted -shiftpoint rotated -90); body;}}
+ endchar;
+ current_char_code:=current_char_code+1;
+enddef;
+
+def twopincharfour(text name, lab, pini, pinii, doc)
+ (expr wd, ht, dp)(text body) =
+ message("CIRC \cdefiv "&name&" "&lab&" \CIRC"&
+ font_identifier_&" "&decimal(current_char_code)&" "&
+ pini&" "&pinii);
+ message("CIRC %<+doc> {"&doc&"}");
+ message("");
+ beginchar(current_char_code,wd,ht,dp);
+ body;
+ endchar;
+ current_char_code:=current_char_code+1;
+ beginchar(current_char_code,dp,wd,ht);
+ {{addTF(rotated 90); body;}}
+ endchar;
+ current_char_code:=current_char_code+1;
+ beginchar(current_char_code,wd,dp,ht);
+ {{addTF(shifted -shiftpoint rotated 180); body;}}
+ endchar;
+ current_char_code:=current_char_code+1;
+ beginchar(current_char_code,ht,wd,dp);
+ {{addTF(shifted -shiftpoint rotated -90); body;}}
+ endchar;
+ current_char_code:=current_char_code+1;
+enddef;
+
+def twopincharfourfour(text name, lab, pini, pinii, doc)
+ (expr wd, ht, dp)(text body) =
+ message("CIRC \cdefiviv "&name&" "&lab&" \CIRC"&
+ font_identifier_&" "&decimal(current_char_code)&" "&
+ pini&" "&pinii);
+ message("CIRC %<+doc> {"&doc&"}");
+ message("");
+ beginchar(current_char_code,wd,ht,dp);
+ body;
+ endchar;
+ current_char_code:=current_char_code+1;
+ beginchar(current_char_code,dp,wd,ht);
+ {{addTF(rotated 90); body;}}
+ endchar;
+ current_char_code:=current_char_code+1;
+ beginchar(current_char_code,wd,dp,ht);
+ {{addTF(shifted -shiftpoint rotated 180); body;}}
+ endchar;
+ current_char_code:=current_char_code+1;
+ beginchar(current_char_code,ht,wd,dp);
+ {{addTF(shifted -shiftpoint rotated -90); body;}}
+ endchar;
+ current_char_code:=current_char_code+1;
+ beginchar(current_char_code,wd,dp,ht);
+ {{addTF(reflectedabout(left,right)); body;}}
+ endchar;
+ current_char_code:=current_char_code+1;
+ beginchar(current_char_code,ht,wd,dp);
+ {{addTF(reflectedabout(left,right) rotated 90); body;}}
+ endchar;
+ current_char_code:=current_char_code+1;
+ beginchar(current_char_code,wd,ht,dp);
+ {{addTF(reflectedabout (left,right) shifted -shiftpoint rotated 180); body;}}
+ endchar;
+ current_char_code:=current_char_code+1;
+ beginchar(current_char_code,dp,wd,ht);
+ {{addTF(reflectedabout(left,right) shifted -shiftpoint rotated -90); body;}}
+ endchar;
+ current_char_code:=current_char_code+1;
+enddef;
+%</defcircmf>
+%^^A last update: Sat 06-13-2003
+%
+%<*csywidko>
+input csym;
+designsize:=.5lLE#;
+
+def resistor =
+ numeric pl;
+ pl:=.5(res_lt-res_wd);
+ z0=(0,0);
+ z1=z0+(pl,0);
+ z2=z1+(res_wd,0);
+ z3=z2+(pl,0);
+ z4-z5=z6-z7=(0,res_ht);
+ z1=.5[z4,z5];
+ z2=.5[z6,z7];
+ z8=z0+(res_x,-res_y);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ draw z2--z3;
+ draw z4--z6--z7--z5--cycle;
+enddef;
+
+usR_iwd# = 3lLE#;
+usR_iht# = 1lLE#;
+usR_wd# = 4lLE#;
+usR_f = .25;
+define_pixels(usR_iwd, usR_iht, usR_wd);
+
+vardef usR =
+ z0=(0,0);
+ z1=z0;
+ y1=y2=y3=y4;
+ x2-x1=usR_wd;
+ x4-x3=usR_iwd;
+ .5[x1,x2]=.5[x3,x4];
+ y5=y7=y9;
+ y6=y8=y10;
+ y5-y6=usR_iht;
+ .5[y5,y6]=y1;
+ x7-x5=x9-x7=x11-x9=x8-x6=x10-x8;
+ x6=.5[x5,x7];
+ x8-x6=(usR_wd-usR_iwd);
+ x5-x3=usR_f*(x8-x6);
+ pickup pensquare scaled normalline;
+ draw z1--z3--z5--z6--z7--z8--z9--z10--z4--z2;
+enddef;
+
+vardef usR_var =
+ {{
+ addxTF(shifted -z6 rotated -90);
+ usR;
+ pickup pensquare scaled normalline;
+ arrow(z6,.8res_ara,.5usR_iht,res_phi,arr_lt,arr_phi)
+ (pickup pencircle scaled normalline);
+ }}
+enddef;
+
+def resistor_var =
+ {{
+ addxTF(shifted -z8 rotated -90);
+ resistor;
+ pickup pensquare scaled normalline;
+ arrow(z8,res_ara,0,res_phi,arr_lt,arr_phi)
+ (pickup pencircle scaled normalline);
+ }}
+enddef;
+
+def capacitor =
+ pickup pensquare scaled normalline;
+ numeric pl;
+ pl:=.5(cap_lt-cap_spc);
+ z0=(0,0);
+ z1=z0+(pl,0);
+ z2=z1+(cap_spc,0);
+ z3=z2+(pl,0);
+ z4-z5=z6-z7=(0,cap_ht);
+ z1=.5[z4,z5];
+ z2=.5[z6,z7];
+ draw z0--z1;
+ draw z2--z3;
+ draw z4--z5;
+ draw z6--z7;
+enddef;
+
+def capacitor_var =
+ capacitor;
+ noarrowTF;
+ pickup pencircle scaled thinline;
+ arrow(.5[z1,z2],cap_ara,cap_arb,cap_phi,arr_lt,arr_phi)();
+enddef;
+
+def electrolytic_capacitor =
+ pickup pensquare scaled normalline;
+ numeric pl;
+ pl:=.5(cap_lt-cap_spc-cap_wd);
+ z0=(0,0);
+ z1=z0+(pl,0);
+ z2=z1+(cap_spc,0);
+ z3=z2+(cap_wd,0);
+ z4=z3+(pl,0);
+ z5-z6=z7-z8=z9-z10=(0,cap_ht);
+ z1=.5[z5,z6];
+ z2=.5[z7,z8];
+ z3=.5[z9,z10];
+ draw z0--z1;
+ draw z3--z4;
+ draw z5--z6;
+ draw z7--z9--z10--z8--cycle;
+enddef;
+
+
+"Widerstand";
+twochars(0)(resistor)(.5res_ht#,res_lt#,.5res_ht#);
+
+"US Widerstand";
+twochars(24)(usR)(.5res_ht#,res_lt#,.5res_ht#);
+
+"Widerstand variabel";
+eightchars(8)(resistor_var)(res_y#,res_lt#-res_x#,res_x#,res_o#);
+
+"US Widerstand variabel";
+eightchars(32)(usR_var)(res_y#,res_lt#-res_x#,res_x#,res_o#);
+
+"Kondensator";
+twochars(128)(capacitor)(.5cap_ht#,cap_lt#,.5cap_ht#);
+
+"Kondensator variabel";
+twochars(130)(capacitor_var)(.5cap_ht#,cap_lt#,.5cap_ht#);
+
+"Elektrolyt-Kondensator";
+fourchars(136)(electrolytic_capacitor)(z4)(.5cap_ht#,cap_lt#,.5cap_ht#);
+
+end;
+%</csywidko>
+%
+%^^A last update: Fri 03-13-1998
+%
+%<*csym>
+mode_setup;
+
+% alle Symbole in einem 7pt Raster definieren
+lLE# :=7pt#;
+define_whole_pixels(lLE);
+
+% Liniest"arke und deren Variationen
+linethickness#:= 0.45pt#;
+thinline# := 0.5linethickness#;
+normalline# := 1.0linethickness#;
+thickline# := 1.5linethickness#;
+verythickline#:= 2.5linethickness#;
+define_whole_blacker_pixels(normalline,thinline,thickline,verythickline);
+
+fontdimen6: 1lLE#;
+
+% *_ht means the total height !!! only <integer>*lLE#
+% *_lt means the total length !!! only <integer>*lLE#
+
+% *_spc means an inner space
+% *_spx means an inner x-space
+% *_spy means an inner y-space
+% *_wd means an inner width
+% *_rad means a radius
+% *_dia means a diameter
+% *_phi means an angle
+% *_psi means an angle
+
+%box symbol
+box_wd# := 4lLE#;
+define_pixels(box_wd);
+
+%oscillograph
+osc_dia# := 3lLE#;
+osc_t := .75; % settings from Andreas Tille
+osc_spc := .5lLE;
+define_pixels(osc_dia);
+
+%wwire
+ww_spc := .25lLE;
+
+darr_ht# := 1.3lLE#;
+darr_lt# := 1lLE#;
+darr_phi := 10;
+darr_rad := 1lLE;
+define_pixels(darr_ht,darr_lt);
+
+
+bnd_lt# := 1lLE#;
+bnd_phi := 60;
+define_pixels(bnd_lt);
+
+dsw_wd# := 4lLE#;
+dsw_ht# := 2lLE#;
+dsw_ov := .2lLE;
+dsw_t := .2;
+dsw_cc := .35;
+dsw_c := .3;
+dsw_phi := 12;
+define_pixels(dsw_wd,dsw_ht);
+
+
+tri_lt := 0.8lLE;
+tri_phi := 18;
+
+arr_lt := 0.8lLE;
+arr_phi := 10;
+
+
+%capacitor
+cap_wd := .4lLE; %only for electrolytic capacitor
+cap_spx := .32lLE; %only for electrolytic capacitor
+cap_spy := .5lLE; %only for electrolytic capacitor
+cap_rad := .4lLE;
+cap_spc := .32lLE;
+cap_ht# := 2lLE#;
+cap_lt# := 2lLE#;
+cap_phi := 45;
+cap_ara := 1.4lLE;
+cap_arb := 1.2lLE;
+define_pixels(cap_lt,cap_ht);
+
+%resistor
+res_wd := 3lLE;
+res_ht# := 1lLE#;
+res_lt# := 4lLE#;
+res_ara# := 3.3lLE#;
+res_phi := 45;
+res_x# := 1lLE#;
+res_y# := 1lLE#;
+res_o# := res_ara#*cosd(res_phi)-res_y#;
+define_pixels(res_lt,res_ht,res_x,res_y,res_o,res_ara);
+
+%diode
+did_wd := 1.5lLE;
+did_ht# := 1.5lLE#;
+did_lt# := 3lLE#;
+did_zlt := .4lLE;
+Dcap_ht := .5lLE;
+Dcap_spc := .15lLE;
+Dcap_wd := .35lLE;
+define_pixels(did_lt,did_ht);
+
+thy_ht# := 1lLE#;
+define_pixels(thy_ht);
+
+%led
+% >wd ht lt< same as diode
+% led_* means values for the arrows
+led_lt# := 1.5lLE#;
+led_wd := .8lLE;
+led_phi := 10; %aperture-angle of arrows
+led_psi := 50; %angle of arrows from baseline
+led_spc := .4lLE; %space between arrows
+led_spx := .4lLE;
+led_spy# := .8lLE#;
+define_pixels(led_spy, led_lt);
+
+
+%transistor
+pnp_dis := 0.18;
+npn_dis := (1-pnp_dis);
+tst_fac := 0.23333;
+tst_phi := 20;
+tst_iht := 3lLE;
+tst_wd# := 1lLE#;
+tst_lt# := 2lLE#;
+tst_ht# := 4lLE#;
+define_pixels(tst_ht,tst_lt,tst_wd);
+
+%crystal
+cry_wd := .8lLE;
+cry_spc := .32lLE;
+cry_ht# := 2lLE#;
+cry_lt# := 4lLE#;
+define_pixels(cry_lt,cry_ht);
+
+%input/output connection
+ioc_dia := .5lLE;
+ioc_ht# := .5lLE#;
+ioc_lt# := 1lLE#;
+ioc_arr := 0.7lLE;
+ioc_phi := 12;
+define_pixels(ioc_ht,ioc_lt);
+
+%connection dot
+cdt_dia := .4lLE;
+cdt_ht# := .4lLE#;
+cdt_lt# := .2lLE#;
+define_pixels(cdt_ht,cdt_lt);
+
+%GND
+GND_wd# := 1.4res_ht#;
+gnd_wd# := 1.8lLE#;
+gnd_ht# := 1lLE#;
+gnd_spc# := .2lLE#;
+gnd_q := .7;
+define_pixels(gnd_ht,gnd_spc,gnd_wd,GND_wd);
+
+%gate
+inv_rad := .36lLE;
+gat_ht# := 5lLE#;
+gat_lt# := 7lLE#;
+define_pixels(gat_lt,gat_ht);
+
+bbd_wd# := 6lLE#;
+bbd_ht# := 10lLE#;
+bba_wd# := 8lLE#;
+bba_ht# := 4lLE#;
+define_pixels(bbd_wd,bbd_ht,bba_wd,bba_ht);
+
+%big integrated circuits
+pin_lt# := 2lLE#; % pin length
+ios_wd# := 2.5lLE#; % in out space
+mid_wd# := 0lLE#; % middle width
+pin_spc# := 2lLE#; % pin space
+out_spc# := 1lLE#; % outer space between pin and box
+
+define_pixels(pin_lt,ios_wd,mid_wd,pin_spc,pin_wht,out_spc);
+
+%value
+val_lt# := 2lLE#;
+val_phi := 7;
+val_lft := 0;
+val_rht := 0.9;
+val_ht# := .2lLE#;
+define_pixels(val_lt,val_ht);
+
+%circle
+cir_ht# := 1.2lLE#;
+cir_lt# := 4lLE#;
+cir_phi := 45;
+cir_ara := 2.2lLE;
+cir_arb := 1.8lLE;
+define_pixels(cir_ht,cir_lt);
+
+%usource
+uso_ht# := 1.5lLE#;
+uso_lt# := 4lLE#;
+uso_min := 1lLE;
+uso_pls := 3lLE;
+uso_spc := .5lLE;
+uso_rad := 3lLE;
+uso_dis := 0.2;
+uso_phi := 45;
+uso_ara := 1.6lLE;
+uso_arb := .8lLE;
+define_pixels(uso_ht,uso_lt);
+
+%isource
+iso_ht# := 1.2lLE#;
+iso_lt# := 4lLE#;
+iso_dis := 0.7;
+iso_rad := .8lLE;
+iso_phi := 45;
+iso_ara := 2.2lLE;
+iso_arb := 1.8lLE;
+define_pixels(iso_ht,iso_lt);
+
+%coil
+coi_ht# := .35lLE#;
+coi_lt# := 4lLE#;
+define_pixels(coi_ht,coi_lt);
+coi_rad := coi_ht;
+coi_num := 4;
+
+%switch
+swt_lt# := 4lLE#;
+swt_phi := 30;
+swt_dis := 0.3;
+swt_ind := 0.8;
+swt_slt := 0.4lLE;
+swt_ht# := (1-2swt_dis)*sind(swt_phi)*swt_lt#;
+define_pixels(swt_ht,swt_lt);
+
+%OPV
+opv_ht# := 4.5lLE#;
+opv_lt# := 14lLE#;
+opv_dis# := 3lLE#;
+opv_frc := 1.1;
+define_pixels(opv_lt,opv_ht,opv_dis);
+
+%FET
+fet_SD# := 4lLE#; % Source--Drain
+fet_GSx# := 2lLE#; % Gate--Source, x
+fet_GSy# := 1lLE#; % Gate--Source, y
+fet_Gsub := 1lLE; % Gate--Substrat
+fet_soSD := 0.3lLE; % Substrat "uber Source und Drain
+fet_sarr := 0.2lLE; % Substrat--Pfeil
+define_pixels(fet_SD,fet_GSx,fet_GSy);
+
+
+%MOSFET
+mos_SD# := fet_SD#;
+mos_GSx# := fet_GSx#;
+mos_GSy# := fet_GSy#;
+
+mos_sd := 2.3lLE;
+mos_Gsub := fet_Gsub;
+mos_ox := 0.3lLE;
+mos_soSD := fet_soSD;
+mos_rad := 0.2lLE;
+define_pixels(mos_SD,mos_GSx,mos_GSy);
+
+sym# := 232/36pt#;
+define_pixels(sym);
+
+% ############
+% definitions
+% ############
+
+% for proofing mark all points
+extra_endchar:=extra_endchar & "labels(range 0 thru 30);";
+
+def {{ =
+ begingroup
+ save T; transform T;
+ T:=currenttransform;
+ save currenttransform;
+ transform currenttransform;
+ currenttransform:=T;
+enddef;
+
+def }} = endgroup; enddef;
+
+def noarrowTF =
+ transform _aT;
+ numeric _x[],_y[];
+ _aT:=currenttransform;
+ for $=1 upto 20 : _x[$]:=x[$]; _y[$]:=y[$]; endfor;
+ endgroup;
+ for $=1 upto 20 : x[$]:=_x[$]; y[$]:=_y[$]; endfor;
+ {{
+enddef;
+
+def addTF(text t) = currenttransform:=currenttransform t; enddef;
+def addxTF(text t) = currenttransform:=(identity t) transformed
+ currenttransform; enddef;
+
+def triangle(expr p, l, alpha, phi) =
+ pair iz[];
+ iz0=(0,0);
+ iz1=iz0+((l,0) rotated (alpha+phi));
+ iz2=iz0+((l,0) rotated (-alpha+phi));
+ fill ((iz0--iz1--iz2--cycle) shifted round(p));
+enddef;
+
+def arrow(expr p, a, b, phi, l, alpha)(text doother) =
+ pair iz[];
+ iz0=(0,0);
+ iz1=iz0-((l,0) rotated (alpha+phi));
+ iz2=iz0-((l,0) rotated (-alpha+phi));
+ iz3=p transformed if known _aT : _aT; else: identity; fi;
+ iz3-iz4=(b,0) rotated phi;
+ iz5-iz3=(a,0) rotated phi;
+ iz6-iz3=(a-3*rt(0),0) rotated phi;
+ draw iz4--iz6;
+ doother;
+ draw ((iz1--iz0--iz2) shifted round(iz5));
+ transform _aT; %Transformation l"oschen
+enddef;
+
+def fillarrow(expr p, a, b, phi, l, alpha)(text doother) =
+ pair iz[];
+ iz0=(0,0);
+ iz1=iz0-((l,0) rotated (alpha+phi));
+ iz2=iz0-((l,0) rotated (-alpha+phi));
+ iz3=p transformed if known _aT : _aT; else: identity; fi;
+ iz3-iz4=(b,0) rotated phi;
+ iz5-iz3=(a,0) rotated phi;
+ iz6-iz3=(a-3*rt(0),0) rotated phi;
+ draw iz4--iz6;
+ doother;
+ fill ((iz1--iz0--iz2--cycle) shifted round(iz5));
+ transform _aT; %Transformation l"oschen
+enddef;
+
+lightarr_spc#=.5lLE#;
+lightarr_lt#=1.5lLE#;
+lightarr_alt=round(.7lLE);
+lightarr_awd=round(.2lLE);
+define_pixels(lightarr_spc,lightarr_lt);
+def lightarrows(expr zpoint,lightarr_psi) =
+ z100=zpoint;
+ x100=x103=x105;
+ x101=x104=x106=x100+lightarr_lt;
+ y103=y104=y100+.5lightarr_spc;
+ y105=y106=y100-.5lightarr_spc;
+ x107=x108=x109=x110=x104-lightarr_alt;
+ y107-y108=y109-y110=good.y(lightarr_awd);
+ .5[y107,y108]=y104;
+ .5[y109,y110]=y106;
+ pickup pensquare scaled normalline rotated lightarr_psi;
+ draw (z107--z104--z108--cycle) rotatedaround(z100,lightarr_psi);
+ draw (z109--z106--z110--cycle) rotatedaround(z100,lightarr_psi);
+ draw (z103--z104) rotatedaround(z100,lightarr_psi);
+ draw (z105--z106) rotatedaround(z100,lightarr_psi);
+
+enddef;
+
+
+def eightchars(expr cfchar) % erster Zeichenkode
+ (text dochar) % Zeichenkommandos
+ (expr x, yf, ys, o) = % Abst"ande
+
+ beginchar(cfchar,x,ys,yf); charic:=o;
+ dochar;
+ endchar;
+ beginchar(cfchar+1,x,ys,yf); charic:=o;
+ {{addTF(reflectedabout(up,down)); dochar;}}
+ endchar;
+ beginchar(cfchar+2,yf,x,o+x); charic:=ys;
+ {{addTF(rotated 270); dochar;}}
+ endchar;
+ beginchar(cfchar+3,yf,x+o,x); charic:=ys;
+ {{addTF(rotated 270); addTF(reflectedabout(left,right)); dochar;}}
+ endchar;
+ beginchar(cfchar+4,x,yf,ys); charic:=o;
+ {{addTF(reflectedabout(left,right)); dochar;}}
+ endchar;
+ beginchar(cfchar+5,x,yf,ys); charic:=o;
+ {{addTF(rotated 180); dochar;}}
+ endchar;
+ beginchar(cfchar+6,ys,x,x+o); charic:=yf;
+ {{addTF(rotated 270); addTF(reflectedabout(up,down)); dochar;}}
+ endchar;
+ beginchar(cfchar+7,ys,x+o,x); charic:=yf;
+ {{addTF(rotated 90); dochar;}}
+ endchar;
+enddef;
+
+def twochars(expr cfchar)(text dochar)(expr ht, wd, dp) =
+ beginchar(cfchar,wd,ht,dp);
+ dochar;
+ endchar;
+ beginchar(cfchar+1,dp,wd,ht);
+ {{addTF(rotated 90); dochar;}}
+ endchar;
+enddef;
+
+def fourchars(expr cfchar)(text dochar)(text op)(expr ht, wd, dp) =
+ beginchar(cfchar,wd,ht,dp);
+ dochar;
+ endchar;
+ beginchar(cfchar+1,dp,wd,ht);
+ {{addTF(rotated 90); dochar;}}
+ endchar;
+ beginchar(cfchar+2,wd,dp,ht);
+ {{addTF(shifted -op rotated 180); dochar;}}
+ endchar;
+ beginchar(cfchar+3,ht,wd,dp);
+ {{addTF(shifted -op rotated -90); dochar;}}
+ endchar;
+enddef;
+
+def fourfourchars(expr cfchar)(text dochar)(text op)(expr ht, wd, dp) =
+ beginchar(cfchar,wd,ht,dp);
+ dochar;
+ endchar;
+ beginchar(cfchar+1,dp,wd,ht);
+ {{addTF(rotated 90); dochar;}}
+ endchar;
+ beginchar(cfchar+2,wd,dp,ht);
+ {{addTF(shifted -op rotated 180); dochar;}}
+ endchar;
+ beginchar(cfchar+3,ht,wd,dp);
+ {{addTF(shifted -op rotated -90); dochar;}}
+ endchar;
+ beginchar(cfchar+4,wd,dp,ht);
+ {{addTF(reflectedabout(left,right)); dochar;}}
+ endchar;
+ beginchar(cfchar+5,ht,wd,dp);
+ {{addTF(reflectedabout(left,right) rotated 90); dochar;}}
+ endchar;
+ beginchar(cfchar+6,wd,ht,dp);
+ {{addTF(reflectedabout (left,right) shifted -op rotated 180); dochar;}}
+ endchar;
+ beginchar(cfchar+7,dp,wd,ht);
+ {{addTF(reflectedabout(left,right) shifted -op rotated -90); dochar;}}
+ endchar;
+enddef;
+
+% small description of >hshade< and >vshade<
+%
+% The shade macros fill areas with a 'patternpath'.
+%
+% >vshade< expect that the area is bound left and right by vertical
+% lines, the upper and lower boundary is build by the two pathes
+% >pa< and >pb<.
+%
+% >hshade< expect it vice versa.
+%
+% The >patternpath< is used to draw it on invisible points of a grid.
+% These gridpoints have a distance of 'di'.
+
+primarydef x gridmod y = if x>0: (x mod y) else: -(-x mod y) fi enddef;
+
+def vshade(suffix pa, pb)(expr di, patternpath) = begingroup
+ path vl;
+ boolean ifshift;
+
+ if not cycle patternpath:
+ errmessage "patternpath has to be a cyclic path!" fi;
+
+ interim smoothing:=0; %change local only
+ interim autorounding:=0;
+
+ ifshift:=true;
+ ydi:=round(1.41di); % round against pattern in
+ xdi:=round(di); % pattern
+ if xdi<2: errmessage "di to small! di>=2" fi;
+ xs:=xpart(point 0 of pa);
+ xe:=xpart(point infinity of pa);
+ if xs>xe: ye:=xe; xe:=xs; xs:=ye; fi %force xs<xe
+ xs:=xs+((xe-xs) mod xdi) / 2; %adjust grid horizontally
+ vl:=(xs,infinity)--(xs,-infinity);
+ oys:=ypart(pa intersectionpoint vl);
+ oys:=oys-.5ydi; %adjust grid vertically
+ for xs:=xs step xdi until xe:
+ vl:=(xs,infinity)--(xs,-infinity); % new cut line
+ ys:=ypart(pa intersectionpoint vl);
+ ye:=ypart(pb intersectionpoint vl);
+ ifshift:=not(ifshift); %shift periodically
+ sy:=ydi-((ys-oys) gridmod ydi);
+ ys:=ys+sy if ifshift: if sy-.5ydi<0:+else:-fi .5ydi fi;
+ for ys:=ys step if ys>ye:-fi ydi until ye:
+ fill patternpath shifted (xs,ys);
+ endfor
+ endfor;
+ endgroup
+enddef;
+
+def hshade(suffix pa, pb)(expr di, patternpath) = begingroup
+ path hl;
+ boolean ifshift;
+
+ if not cycle patternpath:
+ errmessage "patternpath has to be a cyclic path!" fi;
+
+ interim smoothing:=0; %change local only
+ interim autorounding:=0;
+
+ ifshift:=true;
+ xdi:=round(1.41di); % round against pattern in
+ ydi:=round(di); % pattern
+ if ydi<2: errmessage "di to small! di>=2" fi;
+ ys:=ypart(point 0 of pa);
+ ye:=ypart(point infinity of pa);
+ if ys>ye: xe:=ye; ye:=ys; ys:=xe; fi %force ys<ye
+ ys:=ys+((ye-ys) mod ydi) / 2; %adjust grid vertically
+ hl:=(infinity,ys)--(-infinity,ys);
+ oxs:=xpart(pa intersectionpoint hl);
+ oxs:=oxs-.5ydi; %adjust grid horizontally
+ for ys:=ys step ydi until ye:
+ hl:=(infinity,ys)--(-infinity,ys); % new cut line
+ xs:=xpart(pa intersectionpoint hl);
+ xe:=xpart(pb intersectionpoint hl);
+ ifshift:=not(ifshift); %shift periodically
+ sx:=xdi-((xs-oxs) gridmod xdi);
+ xs:=xs+sx if ifshift: if sx-.5xdi<0:+else:-fi .5xdi fi;
+ for xs:=xs step if xs>xe:-fi xdi until xe:
+ fill patternpath shifted (xs,ys);
+ endfor
+ endfor;
+ endgroup
+enddef;
+
+
+endinput;
+%</csym>
+%
+%^^A last update: Fri 03-13-1998
+%
+%<*csydiod>
+input csym;
+designsize:=1lLE#;
+
+def diode = % "uberarbeiten
+ numeric pl;
+ pl:=.5(did_lt-did_wd);
+ z0=(0,0);
+ z1=z0+(pl,0);
+ z2=z1+(did_wd,0);
+ z3=z2+(pl,0);
+ z4-z5=z6-z7=(0,did_ht);
+ z1=.5[z4,z5];
+ z2=.5[z6,z7];
+ z8=z4+(did_zlt,0);
+ z9=z0+(0,thy_ht);
+
+ z10=.35[z5,z7];
+ z11=z10-(.5Dcap_spc,0);
+ z12=z10+(.5Dcap_spc,0);
+ y13=y15; y14=y16;
+ x13=x14; x15=x16;
+ y13-y14=Dcap_ht;
+ z11=.5[z13,z14];
+ z12=.5[z15,z16];
+ z17=z11-(Dcap_wd,0);
+ z18=z12+(Dcap_wd,0);
+
+ pickup pensquare scaled normalline;
+ draw z0--z3;
+ draw z4--z5;
+ draw z1--z6--z7--cycle;
+enddef;
+
+def Dcap =
+ pickup pensquare scaled normalline;
+ draw z17--z11;
+ draw z13--z14;
+ draw z15--z16;
+ draw z12--z18;
+enddef;
+
+def led_arrows = % "uberarbeiten
+ numeric pl;
+ numeric x[],y[];
+ transform arr_a,arr_b;
+ pickup pencircle scaled thickline;
+ pl:=.5(did_lt-did_wd);
+ z0=(0,0);
+ z4=z0+(pl,0);
+ z1=z0+(led_lt,0);
+ (z1-z2)=(led_wd,0) rotated led_phi;
+ (z1-z3)=(led_wd,0) rotated -led_phi;
+ arr_a:=identity rotated led_psi shifted
+ (z4+(led_spx+.5led_spc*cosd(led_psi),led_spy-.5led_spc*sind(led_psi)));
+ arr_b:=identity rotated led_psi shifted
+ (z4+(led_spx-.5led_spc*cosd(led_psi),led_spy+.5led_spc*sind(led_psi)));
+ draw (z0--z1) transformed arr_a;
+ draw (z0--z1) transformed arr_b;
+ fill (z2--z1--z3--cycle) transformed arr_a;
+ fill (z2--z1--z3--cycle) transformed arr_b;
+enddef;
+
+"Diode";
+fourchars(0)(diode)(z3)(.5did_ht#,did_lt#,.5did_ht#);
+
+"Z-Diode";
+fourchars(4)(diode; draw z4--z8)(z3)(.5did_ht#,did_lt#,.5did_ht#);
+
+"LED";
+fourfourchars(8)(diode; lightarrows(.5[z1,z6]+(0,.5lLE),120))(z3)
+(.5did_ht#+.5led_spy#+led_lt#*sind(led_psi),did_lt#,.5did_ht#);
+
+"Kapazit"&ditto&"atsdiode";
+fourchars(16)(diode; Dcap)(z3)(.5did_ht#,did_lt#,.65did_ht#);
+
+"Thyristor";
+
+end;
+%</csydiod>
+%^^A last update: Fri 03-13-1998
+%
+%<*csyrest>
+input csym;
+designsize:=.5lLE#;
+
+def gaslamp =
+ z0=(0,0);
+ z4=z0+(.5,0)*lLE;
+ y4=y3;
+ x2=x1;
+ x3=x4+3lLE;
+ y2=y1+2lLE;
+ y4=.5[y1,y2];
+ x1=.5[x4,x3];
+
+ x5=x0+1.1lLE;
+ y5=y0;
+ x7=x6=x5; y7-y6=.5lLE;
+ .5[y7,y6]=y0;
+
+
+ y8=y9=y0;
+ x8=x0+4lLE;
+
+ x9=x8-1.1lLE;
+
+ pickup pencircle scaled normalline;
+ draw superellipse(z3,z2,z4,z1,.75);
+ draw z0--z5;
+ draw z6--z7;
+ draw z8--z9;
+ pickup pencircle scaled .3lLE;
+ drawdot z9;
+enddef;
+
+def switch = %"uberarbeiten
+ numeric pl;
+ pl:=swt_lt*swt_dis;
+ sl:=(1-2swt_dis)*swt_lt;
+ z0=(0,0);
+ z1=z0+(pl,0);
+ z2=z1+((sl,0) rotated swt_phi);
+ z3=z1+(swt_ind*sl,0);
+ z4=z0+(swt_lt,0);
+ z5=z3+(0,swt_slt);
+ pickup pensquare scaled normalline;
+ draw z0--z1--z2;
+ draw z3--z4;
+ draw z3--z5;
+enddef;
+
+
+def dswitch =
+ z0=(0,0);
+ z1=dsw_t[z0,z0+(dsw_wd,0)];
+ x2=x3=x4=x5=x0+((1-dsw_c)*dsw_wd);
+ y0=.5[y2,y3]=.5[y4,y5];
+ y2-y3=dsw_ht;
+ y2-y4=dsw_cc*dsw_ht;
+ y2=y6; y3=y7;
+ x6-x3=x7-x3=dsw_c*dsw_wd;
+ x8=x1+dsw_ov+((1-dsw_c-dsw_t)*dsw_wd);
+ y8=sind(dsw_phi)*x8/cosd(dsw_phi);
+ pickup pensquare scaled normalline;
+ draw z0--z1--z8;
+ draw z4--z2--z6;
+ draw z5--z3--z7;
+enddef;
+
+def circle = % "uberarbeiten
+ numeric pl;
+ pl:=.5cir_lt-cir_ht;
+ z0=(0,0);
+ z1=z0+(pl,0);
+ z2=z0+(.5cir_lt,0);
+ z3=z1+(2cir_ht,0);
+ z4=z3+(pl,0);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ draw z3--z4;
+ pickup pencircle scaled thickline;
+ draw fullcircle scaled 2cir_ht shifted z2;
+enddef;
+
+def lamp =
+ circle
+ z10-z11=(2cir_ht,0) rotated 45;
+ z12-z13=(2cir_ht,0) rotated -45;
+ .5[z10,z11]=z2=.5[z12,z13];
+ pickup pencircle scaled normalline;
+ draw z10--z11;
+ draw z12--z13;
+enddef;
+
+def circle_var =
+ circle;
+ pickup pencircle scaled thinline;
+ noarrowTF;
+ arrow(z2,cir_ara,cir_arb,cir_phi,arr_lt,arr_phi)();
+enddef;
+
+def usource = %"uberarbeiten
+ numeric pl;
+ pl:=.5(uso_lt-uso_spc);
+ z0=(0,0);
+ z1=z0+(pl,0);
+ z2=z1+(uso_spc,0);
+ z3=z2+(pl,0);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ draw z2--z3;
+ z1=.5[z4,z5]; x4-x5=0; y5-y4=uso_pls;
+ z2=.5[z6,z7]; x6-x7=0; y7-y6=uso_min;
+ pickup pensquare scaled thickline;
+ draw z4--z5;
+ draw z6--z7;
+enddef;
+
+def usource_var =
+ usource;
+ noarrowTF;
+ pickup pencircle scaled thinline;
+ arrow(.5[z1,z2],uso_ara,cir_arb,uso_phi,arr_lt,arr_phi)();
+enddef;
+
+
+def isource = %"uberarbeiten
+ numeric pl;
+ pl:=.5(iso_lt-(4-iso_dis)*iso_rad);
+ z0=(0,0);
+ z1=z0+(pl,0);
+ z2=z1+(iso_rad,0);
+ z3=z2+((2-iso_dis)*iso_rad,0);
+ z4=z3+(iso_rad,0);
+ z5=z4+(pl,0);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ draw z4--z5;
+ pickup pencircle scaled thickline;
+ draw fullcircle scaled (2*iso_rad) shifted z2;
+ draw fullcircle scaled (2*iso_rad) shifted z3;
+enddef;
+
+def isource_var =
+ isource;
+ noarrowTF;
+ pickup pencircle scaled thinline;
+ arrow(.5[z2,z3],iso_ara,iso_arb,iso_phi,arr_lt,arr_phi)();
+enddef;
+
+def value = % "uberarbeiten
+ z0=(0,0);
+ z1=z0+(val_lt,0);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ z2=val_lft[z0,z1];
+ z3=val_rht[z0,z1];
+ triangle(z2,abs(z3-z2),val_phi,0);
+enddef;
+
+def coil = %"uberarbeiten
+ numeric pl;
+ pl:=.5(coi_lt-2coi_num*coi_rad);
+ z0=(0,0);
+ z1=z0+(pl,0);
+ z2=z1+(coi_rad,0);
+ for m=1 upto coi_num-1: z[m+2]=z[m+1]+(2coi_rad,0); endfor;
+ z[2+coi_num]=z[1+coi_num]+(coi_rad,0);
+ z[3+coi_num]=z[2+coi_num]+(pl,0);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ draw z[2+coi_num]--z[3+coi_num];
+ pickup pencircle scaled normalline;
+ for m=1 upto coi_num: draw halfcircle scaled 2coi_rad shifted z[m+1]; endfor;
+enddef;
+
+def crystal = %"uberarbeiten
+ pickup pensquare scaled normalline;
+ numeric pl;
+ pl:=.5(cry_lt-2cry_spc-cry_wd);
+ z0=(0,0); z1=z0+(pl,0);
+ z2=z1+(cry_spc,0);
+ z3=z2+(cry_wd,0);
+ z4=z3+(cry_spc,0);
+ z5=z4+(pl,0);
+ z6-z7=z8-z9=z10-z11=z12-z13=(0,cry_ht);
+ z2=.5[z6,z7]; z3=.5[z8,z9]; z1=.5[z10,z11]; z4=.5[z12,z13];
+ draw z0--z1; draw z4--z5; draw z10--z11; draw z12--z13;
+ draw z7--z9--z8--z6--cycle;
+enddef;
+
+def inout = % "uberarbeiten
+ z0=(ioc_lt,0);
+ pickup pensquare scaled normalline;
+ z2=z0+(ioc_lt,0);
+ lft(z1)=z0+(.5ioc_dia,0);
+ draw z1--z2;
+enddef;
+
+def minout =
+ z0=(0,0);
+ z1=z0+(ioc_lt,0);
+ pickup pensquare scaled normalline;
+ arrow(z0,0,ioc_lt,180,ioc_arr,ioc_phi)(pickup pencircle scaled normalline);
+enddef;
+
+def ground = % Masse z0 z11
+ z0=(0,0); x1=x0=x2=x3;
+ y0-y1=gnd_ht;
+ y1-y2=y2-y3=gnd_spc;
+ y4=y1=y10; y2=y6; y3=y8;
+ z1=.5[z4,z5]; x5-x4=gnd_wd;
+ z1=.5[z10,z11]; x11-x10=GND_wd;
+ z2=.5[z6,z7]; x7-x6=gnd_wd*gnd_q;
+ z3=.5[z8,z9]; x9-x8=gnd_wd*gnd_q*gnd_q*gnd_q;
+enddef;
+
+"Spule";
+fourchars(0)(coil)(z[3+coi_num])(coi_ht#,coi_lt#,0);
+
+"Quarz";
+twochars(4)(crystal)(.5cry_ht#,cry_lt#,.5cry_ht#);
+
+"Lampe";
+twochars(6)(lamp)(cir_ht#,cir_lt#,cir_ht#);
+
+"Kreise mit Anschl"&ditto&"ussen";
+twochars(8)(circle)(cir_ht#,cir_lt#,cir_ht#);
+
+"Kreise mit Anschl"&ditto&"ussen variabel";
+twochars(10)(circle_var)(cir_ht#,cir_lt#,cir_ht#);
+
+"Stromquelle";
+twochars(12)(isource)(iso_ht#,iso_lt#,iso_ht#);
+
+"Stromquelle variabel";
+twochars(14)(isource_var)(iso_ht#,iso_lt#,iso_ht#);
+
+"Spannungsquelle";
+fourchars(16)(usource)(z3)(uso_ht#,uso_lt#,uso_ht#);
+
+"Spannungsquelle variabel";
+fourchars(20)(usource_var)(z3)(uso_ht#,uso_lt#,uso_ht#);
+
+"Schalter";
+twochars(24)(switch)(swt_ht#,swt_lt#,0);
+
+"Umschalter";
+eightchars(32)(dswitch)(dsw_wd#,.5dsw_ht#,.5dsw_ht#,0);
+
+"Stromquelle variante";
+twochars(44)(circle;
+ pickup pencircle scaled normalline;
+ draw z1--z3;)(cir_ht#,cir_lt#,cir_ht#);
+
+"Spannungsquelle variante";
+twochars(46)(circle;
+ pickup pencircle scaled normalline;
+ draw (z1--z3) rotatedaround (z2,90);)(cir_ht#,cir_lt#,cir_ht#);
+
+
+"Gas-Lamp";
+fourchars(40)(gaslamp)(z0)(1.5lLE#,4lLE#,1.5lLE#);
+
+"Stromquelle variante";
+twochars(44)(circle;
+ pickup pencircle scaled normalline;
+ draw z1--z3;)(cir_ht#,cir_lt#,cir_ht#);
+
+"Spannungsquelle variante";
+twochars(46)(circle;
+ pickup pencircle scaled normalline;
+ draw (z1--z3) rotatedaround (z2,90);)(cir_ht#,cir_lt#,cir_ht#);
+
+"Anschl"&ditto&"usse Pfeil";
+fourchars(232)
+ (minout;)(z1)(.5ioc_ht#,2ioc_lt#,.5ioc_ht#);
+
+"Anschl"&ditto&"usse leer";
+fourchars(240)
+ (inout;
+ pickup pencircle scaled thinline;
+ draw fullcircle scaled ioc_dia shifted z0;
+ )(z2)(.5ioc_ht#,2ioc_lt#,.5ioc_ht#);
+
+"Anschl"&ditto&"usse voll";
+fourchars(244)
+ (inout;
+ pickup pencircle scaled ioc_dia;
+ draw z0;
+ )(z2)(.5ioc_ht#,2ioc_lt#,.5ioc_ht#);
+
+"Str"&ditto&"ome";
+fourchars(248)(value;)(z1)(val_ht#,val_lt#,val_ht#);
+
+"wwire half R";
+beginchar(112,.5lLE#,0pt,0pt);
+ z0=(0,0);
+ y4-y3=y2-y1=ww_spc;
+ x3-x1=.5lLE;
+ x0=x1=x2;
+ x3=x4;
+ y0=.5[y1,y2]=.5[y3,y4];
+ pickup pensquare scaled normalline;
+ draw z1--z3;
+ draw z2--z4;
+endchar;
+
+"wwire R";
+beginchar(113,1lLE#,0pt,0pt);
+ z0=(0,0);
+ y4-y3=y2-y1=ww_spc;
+ x3-x1=1lLE;
+ x0=x1=x2;
+ x3=x4;
+ y0=.5[y1,y2]=.5[y3,y4];
+ pickup pensquare scaled normalline;
+ draw z1--z3;
+ draw z2--z4;
+endchar;
+
+"wwire half L";
+beginchar(114,.5lLE#,0pt,0pt);
+ z0=(0,0);
+ y4-y3=y2-y1=ww_spc;
+ x3-x1=.5lLE;
+ x0=x3=x4;
+ x1=x2;
+ y0=.5[y1,y2]=.5[y3,y4];
+ pickup pensquare scaled normalline;
+ draw z1--z3;
+ draw z2--z4;
+endchar;
+
+"wwire half U";
+beginchar(115,0pt,.5lLE#,0pt);
+ z0=(0,0);
+ x4-x3=x2-x1=ww_spc;
+ y3-y1=.5lLE;
+ y0=y1=y2;
+ y3=y4;
+ x0=.5[x1,x2]=.5[x3,x4];
+ pickup pensquare scaled normalline;
+ draw z1--z3;
+ draw z2--z4;
+endchar;
+
+"wwire U";
+beginchar(116,0pt,1lLE#,0pt);
+ z0=(0,0);
+ x4-x3=x2-x1=ww_spc;
+ y3-y1=1lLE;
+ y0=y1=y2;
+ y3=y4;
+ x0=.5[x1,x2]=.5[x3,x4];
+ pickup pensquare scaled normalline;
+ draw z1--z3;
+ draw z2--z4;
+endchar;
+
+"wwire half D";
+beginchar(117,0pt,0pt,.5lLE#);
+ z0=(0,0);
+ x4-x3=x2-x1=ww_spc;
+ y3-y1=.5lLE;
+ y0=y3=y4;
+ y1=y2;
+ x0=.5[x1,x2]=.5[x3,x4];
+ pickup pensquare scaled normalline;
+ draw z1--z3;
+ draw z2--z4;
+endchar;
+
+
+"dashed halfline R";
+beginchar(120,.5lLE#,0pt,0pt);
+ z0=(0,0);
+ z1=z0+(.25lLE,0);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+endchar;
+
+"dashed line R";
+beginchar(121,1lLE#,0pt,0pt);
+ z0=(0,0);
+ z1=z0+(1lLE,0);
+ z2=.25[z0,z1];
+ z3=.75[z0,z1];
+ pickup pensquare scaled normalline;
+ draw z2--z3;
+endchar;
+
+"dashed halfline L";
+beginchar(122,.5lLE#,0pt,0pt);
+ z0=(0,0);
+ z1=z0-(.25lLE,0);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+endchar;
+
+"dashed halfline U";
+beginchar(123,0pt,.5lLE#,0pt);
+ z0=(0,0);
+ z1=z0+(0,.25lLE);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+endchar;
+
+"dashed line U";
+beginchar(124,0pt,1lLE#,0pt);
+ z0=(0,0);
+ z1=z0+(0,1lLE);
+ z2=.25[z0,z1];
+ z3=.75[z0,z1];
+ pickup pensquare scaled normalline;
+ draw z2--z3;
+endchar;
+
+"dashed halfline D";
+beginchar(125,0pt,0pt,.5lLE#);
+ z0=(0,0);
+ z1=z0-(0,.25lLE);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+endchar;
+
+"Linie horizontal halb R";
+beginchar(128,.5lLE#,0pt,0pt);
+ z0=(0,0);
+ z1=z0+(.5lLE,0);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+endchar;
+
+"Linie horizontal R";
+beginchar(129,1lLE#,0pt,0pt);
+ z0=(0,0);
+ z1=z0+(1lLE,0);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+endchar;
+
+"Linie horizontal halb L";
+beginchar(130,.5lLE#,0pt,0pt);
+ z0=(0,0);
+ z1=z0-(.5lLE,0);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+endchar;
+
+"Linie vertikal halb U";
+beginchar(131,0pt,.5lLE#,0pt);
+ z0=(0,0);
+ z1=z0+(0,.5lLE);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+endchar;
+
+"Linie vertikal U";
+beginchar(132,0pt,1lLE#,0pt);
+ z0=(0,0);
+ z1=z0+(0,1lLE);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+endchar;
+
+"Linie vertikal halb D";
+beginchar(133,0pt,0pt,.5lLE#);
+ z0=(0,0);
+ z1=z0-(0,.5lLE);
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+endchar;
+
+"B"&ditto&"undel horizontal";
+beginchar(134,0,.8bnd_lt#,0pt);
+ z0=(0,0);
+ z0=.5[z2,z3];
+ z3-z2=(bnd_lt,0) rotated bnd_phi;
+ pickup pencircle scaled thinline;
+ draw z2--z3;
+endchar;
+
+"B"&ditto&"undel vertikal";
+beginchar(135,.8bnd_lt#,0pt,0pt);
+ z0=(0,0);
+ z0=.5[z2,z3];
+ z3-z2=(bnd_lt,0) rotated (90-bnd_phi);
+ pickup pencircle scaled thinline;
+ draw z2--z3;
+endchar;
+
+"Linie fett horizontal R";
+beginchar(136,.5lLE#,0pt,0pt);
+ z0=(0,0);
+ z1=z0+(.5lLE,0);
+ pickup pensquare scaled 2normalline;
+ draw z0--z1;
+endchar;
+
+"Linie fett horizontal R";
+beginchar(137,1lLE#,0pt,0pt);
+ z0=(0,0);
+ z1=z0+(1lLE,0);
+ pickup pensquare scaled 2normalline;
+ draw z0--z1;
+endchar;
+
+"Linie fett horizontal halb L";
+beginchar(138,.5lLE#,0pt,0pt);
+ z0=(0,0);
+ z1=z0-(.5lLE,0);
+ pickup pensquare scaled 2normalline;
+ draw z0--z1;
+endchar;
+
+"Linie fett vertikal halb U";
+beginchar(139,0pt,.5lLE#,0pt);
+ z0=(0,0);
+ z1=z0+(0,.5lLE);
+ pickup pensquare scaled 2normalline;
+ draw z0--z1;
+endchar;
+
+"Linie fett vertikal U";
+beginchar(140,0pt,1lLE#,0pt);
+ z0=(0,0);
+ z1=z0+(0,1lLE);
+ pickup pensquare scaled 2normalline;
+ draw z0--z1;
+endchar;
+
+"Linie fett vertikal halb D";
+beginchar(141,0pt,0pt,.5lLE#);
+ z0=(0,0);
+ z1=z0-(0,.5lLE);
+ pickup pensquare scaled 2normalline;
+ draw z0--z1;
+endchar;
+
+"Oscillograph";
+beginchar(142,osc_dia#,.5osc_dia#,.5osc_dia#);
+ z0=(0,0);
+ z1=z0;
+ z5=.5[z1,z3]=.5[z2,z4];
+ x2=x4;
+ y1=y3;
+ x3-x1=y4-y2=osc_dia;
+ .5osc_gt+osc_spc+osc_stm=.5osc_dia;
+ osc_stm=osc_t*osc_gt;
+ z6=z1+(osc_stm,0);
+ z7=z2+(0,osc_stm);
+ z8=z3+(-osc_stm,0);
+ z9=z4+(0,-osc_stm);
+ z6=.5[z10,z11]; x10=x11; x16-x17=y14-y15=x12-x13=y11-y10=osc_gt;
+ z7=.5[z12,z13]; y12=y13;
+ z8=.5[z14,z15]; x14=x15;
+ z9=.5[z16,z17]; y16=y17;
+ pickup pensquare scaled normalline; %drawing style by Andreas Tille
+ draw z1--z6; %code rewritten by SeTa
+ draw z2--z7;
+ draw z3--z8;
+ draw z4--z9;
+ pickup pencircle scaled normalline;
+ draw fullcircle scaled osc_dia shifted z5;
+ pickup pensquare scaled thickline;
+ draw z10--z11;
+ draw z12--z13;
+ draw z14--z15;
+ draw z16--z17;
+endchar;
+
+"a small grey elephant: Thanks to Andreas Tille.";
+%
+% The code is a little bit crazy.
+%
+LE#:=.03mm#;
+define_pixels(LE);
+numeric nPnt;
+def p(expr px,py) = x[nPnt]:=px*LE; y[nPnt]:=py*LE; nPnt:=nPnt+1 enddef;
+
+beginchar(252,540LE#,265LE#,274LE#);
+ pickup pencircle scaled 0.4pt;
+ path a, b;
+ picture cutpic;
+ nPnt:=0;
+
+p( 0, 0); % copyright by Sebastian Tannert
+p( 0, 18); % Please think of the hard work!
+%
+p( -2, 46);p( -3, 92);p( 8,117);p( 28,152);
+p( 38,171);p( 71,195);p(107,218);p(138,240);p(159,255);p(181,261);
+p(193,264);p(211,268);p(231,263);p(249,264);p(273,259);p(292,255);
+p(311,249);p(336,240);p(380,222);p(414,208);p(437,198);p(449,193);
+p(461,190);p(473,185);p(490,173);p(506,157);p(519,125);p(526, 91);
+p(530, 56);p(530, 35);p(523, 17);p(518, 1);p(509,-22);p(511,-46);
+p(515,-71);p(514,-96);p(512,-112);p(511,-135);p(507,-150);p(498,-171);
+p(485,-184);p(465,-197);p(448,-200);p(429,-194);p(418,-177);p(414,-168);
+p(420,-159);p(427,-157);p(435,-163);p(439,-171);p(449,-164);p(461,-165);
+p(470,-152);p(476,-139);p(476,-118);p(475,-97);p(465,-76);p(450,-62);
+p(442,-50);p(427,-36);p(417,-29);p(409,-27);p(392,-12);p(383,-10);
+p(374,-18);p(370,-34);p(363,-58);p(347,-92);p(343,-106);p(341,-126);
+p(330,-162);p(323,-196);p(322,-210);p(317,-237);p(327,-257);p(325,-268);
+p(310,-270);p(301,-272);p(284,-266);p(269,-258);p(268,-236);p(270,-210);
+p(282,-185);p(300,-151);p(315,-119);p(322,-93);p(325,-79);p(326,-63);
+p(315,-75);p(303,-101);p(292,-134);p(281,-164);p(269,-189);p(258,-220);
+p(259,-250);p(260,-266);p(252,-269);p(235,-260);p(221,-266);p(203,-261);
+p(194,-242);p(201,-227);p(206,-213);p(207,-190);p(215,-162);p(222,-147);
+p(225,-123);p(229,-96);p(234,-77);p(234,-65);p(236,-47);p(236,-30);
+p(236,-12);p(240,6);p(248,19);p(264,37);p(146,41);p(158,24);
+p(176,-3);p(188,-29);p(193,-53);p(185,-80);p(175,-106);p(165,-137);
+p(152,-173);p(143,-202);p(142,-222);p(136,-232);p(141,-253);p(132,-255);
+p(125,-255);p(105,-240);p(91,-239);p(75,-228);p(68,-205);p(70,-178);
+p(85,-156);p(96,-127);p(100,-112);p(95,-88);p(79,-62);p(60,-38);
+p(48,-16);p(36,18);p(28,63);p(24,41);p(28,17);p(29,-6);p(31,-32);
+p(26,-43);p(17,-65);p(15,-83);p(12,-106);p(7,-126);p(0,-141);
+p(-9,-147);p(-16,-131);p(-24,-110);p(-22,-94);p(-17,-75);p(-6,-55);
+p(-2,-34);p(2,-19);p(190,-63);p(209,-75);p(234,-69);p(31,-32);
+p(31,-44);p(26,-67);p(37,-95);p(45,-117);p(43,-158);p(38,-193);
+p(25,-224);p(29,-249);p(52,-266);p(71,-264);p(88,-266);p(113,-273);
+p(133,-273);p(138,-268);p(132,-255);p(457,48);p(462,30);p(481,21);
+p(477,40);p(449,32);p(456,11);p(478,5);p(464,60);p(486,61);
+p(499,37);p(363,93);p(352,110);p(348,129);p(358,149);p(386,162);
+p(414,173);p(427,178);p(443,167);p(456,157);p(461,142);p(450,126);
+p(436,110);p(419,74);p(409,53);p(396,40);p(372,51);p(365,67);
+p(358,148);p(375,139);p(387,124);p(401,128);p(411,146);p(418,163);
+p(427,168);p(443,167);p(444,161);p(434,152);p(432,135);p(440,124);
+p(451,128);p(460,141);p(455,157);p(350,138);p(459,138);p(-30,276);
+p(539,-283);p(539,276);p(-30,-283);p(427,-41);p(436,-54);
+
+draw for i:=0 upto 109: z[i]..endfor
+z110{up}..z167{curl.7}..z166..z165{curl.7}..z123{down}..
+for i:=124 upto 144: z[i]..endfor z145---z146..z147{down}..
+for i:=148 upto 164: z[i]..endfor z0;
+
+draw for i:=110 upto 116: z[i].. endfor z117;
+draw for i:=118 upto 122: z[i].. endfor z123{down};
+
+draw for i:=168 upto 182: z[i].. endfor z183;
+
+
+draw for i:=194 upto 210: z[i].. endfor cycle;
+
+draw for i:=211 upto 217: z[i].. endfor z218;
+
+a:= z226..z197..z198..z199..z200..z201..z202..z203..z227;
+b:= z226--z227;
+vshade(b,a,4,unitsquare scaled 1.8);
+
+a:= z227..z206..z207..z208..z209..z210..z194..
+ z195..z196..z226;
+b:= z227--z226;
+vshade(b,a,4,unitsquare scaled 1.8);
+
+a:= z228--z230;
+b:= z231--z229;
+vshade(a,b,4,unitsquare);
+
+cutpic=nullpicture;
+
+addto cutpic contour(z228+(0,10)--z230+(10,10)--z229--z231--cycle);
+
+pickup pencircle scaled 0.7pt
+
+addto cutpic contour (for i:=0 upto 109: z[i].. endfor
+ z110{up}..z167{curl.7}..z166..z165{curl.7}..z123{down}..
+ for i:=124 upto 144: z[i].. endfor z145---z146..z147{down}..
+ for i:=148 upto 164: z[i].. endfor cycle) withweight -1;
+
+addto cutpic doublepath
+ (for i:=0 upto 109: z[i].. endfor
+ z110{up}..z167{curl.7}..z166..z165{curl.7}..z123{down}..
+ for i:=124 upto 144: z[i].. endfor z145---z146..z147{down}..
+ for i:=148 upto 164: z[i].. endfor z0) withpen currentpen
+ withweight -1;
+
+addto cutpic doublepath z232..z233 withpen currentpen withweight -1;
+
+addto cutpic contour (for i:=168 upto 182: z[i].. endfor z183..z146..cycle)
+ withpen currentpen withweight -1;
+
+cull cutpic keeping (1,infinity) withweight -3;
+
+addto currentpicture also cutpic;
+
+pickup pencircle scaled .7pt;
+draw z184..z185{z186-z184}..z186;
+draw z186..z187{z184-z186}..z184;
+
+draw z188..z189..z190;
+draw z191..z192..z193;
+draw z232..z233;
+
+endchar;
+
+
+"Masse";
+beginchar(253,.5gnd_wd#,0,gnd_ht#+gnd_spc#+gnd_spc#);
+ ground
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ draw z4--z5;
+ draw z6--z7;
+ draw z8--z9;
+endchar;
+
+"MASSE";
+beginchar(254,.5GND_wd#,0,gnd_ht#);
+ ground
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ pickup pensquare scaled verythickline;
+ draw z10--z11;
+endchar;
+
+"Verbindungspunkt";
+beginchar(255,cdt_lt#,.5cdt_ht#,.5cdt_ht#);
+ pickup pencircle scaled cdt_dia;
+ z0=(0,0);
+ drawdot z0;
+endchar;
+
+end;
+%</csyrest>
+%
+%^^A last update: Fri 03-13-1998
+%<*optic>
+input csym;
+
+string optionname; optionname="optics";
+
+font_identifier="cioptic";
+
+input defcirc;
+
+% half of linelength of optical axis
+hsoa:=.128CIu;
+
+% lenses
+% thin convex lens
+slens_ht# := 2CIu#;
+slens_lt# := 2CIu#;
+slens_phi := 60;
+% lensthickness:
+slens_spc := .55CIu;
+define_pixels(slens_lt,slens_ht);
+
+% thick convex lens
+blens_ht# := 2CIu#;
+blens_lt# := 2CIu#;
+blens_phi := 45;
+blens_spc := .88CIu;
+define_pixels(blens_lt,blens_ht);
+
+% thin concave lens
+sklens_ht# := 2CIu#;
+sklens_lt# := 2CIu#;
+sklens_phi := 60;
+sklens_spc := .58CIu;
+sklens_bt := 1CIu; % Breite Bottom und Top
+define_pixels(sklens_lt,sklens_ht);
+
+% mirror
+mir_ht# := 2CIu#;
+mir_lt# := 2CIu#;
+mir_wd := .5CIu; % Schraffurl"ange
+define_pixels(mir_ht,mir_lt);
+
+% boxes for optical modulator and laser
+omb_wd# := 3CIu#;
+omb_ht# := 2CIu#;
+lab_wd# := 4CIu#;
+lab_ht# := 2CIu#;
+define_pixels(omb_wd,omb_ht,lab_wd,lab_ht);
+
+% polarizer
+pol_ht# := 2CIu#;
+pol_lt# := 2CIu#;
+pol_spc := .2CIu;
+define_pixels(pol_ht,pol_lt);
+
+% pinhole
+pin_ht# := 2CIu#;
+pin_lt# := 2CIu#;
+pin_spx := .16CIu;
+pin_spy := .08CIu;
+pin_spz := .5CIu;
+define_pixels(pin_ht,pin_lt);
+
+% camera
+cam_ht# := 2CIu#;
+cam_lt# := 3CIu#;
+cam_spx := 2CIu;
+cam_spy := 1CIu;
+define_pixels(cam_ht,cam_lt);
+
+% screen
+scr_ht# := 4CIu#;
+scr_lt# := 2CIu#;
+scr_spx := 1CIu;
+scr_spy := 1CIu;
+define_pixels(scr_ht,scr_lt);
+
+def rectangle(expr width, height, xs, ys) =
+ draw (xs,.5height+ys)--(width+xs,.5height+ys)--(width+xs,-.5height+ys)--
+ (xs,-.5height+ys)--cycle;
+enddef;
+
+def small_lens =
+ pickup pensquare scaled normalline;
+ numeric pl;
+ pl:=.5(slens_lt-slens_spc);
+ z0=(.5slens_lt,-.5slens_ht);
+ z1=(.5slens_lt,.5slens_ht);
+ z2=(.5CIu,0); z3=z2+(hsoa,0);
+ z4=(slens_lt-.5CIu,0); z5=z4-(hsoa,0);
+ draw z0{dir slens_phi}..z1;
+ draw z0{dir (180-slens_phi)}..z1;
+ opticalaxis(normalline)(0);
+ opticalaxis(normalline)(1CIu);
+enddef;
+
+def half_small_lens =
+ pickup pensquare scaled normalline;
+ numeric pl;
+ pl:=.5(slens_lt-slens_spc);
+ z0=(.5slens_lt,-.5slens_ht);
+ z1=(.5slens_lt,.5slens_ht);
+ z4=(slens_lt-.5CIu,0); z5=z4-(hsoa,0);
+ draw z0{dir slens_phi}..z1;
+ draw z1--z0;
+ opticalaxis(normalline)(0);
+ opticalaxis(normalline)(1CIu);
+enddef;
+
+def bold_lens =
+ pickup pensquare scaled normalline;
+ numeric pl;
+ pl:=.5(blens_lt-blens_spc);
+ z0=(.5blens_lt,-.5blens_ht);
+ z1=(.5blens_lt,.5blens_ht);
+ draw z0{dir blens_phi}..z1;
+ draw z0{dir (180-blens_phi)}..z1;
+ opticalaxis(normalline)(0);
+ opticalaxis(normalline)(1CIu);
+enddef;
+
+def half_bold_lens =
+ pickup pensquare scaled normalline;
+ numeric pl;
+ pl:=.5(blens_lt-blens_spc);
+ z0=(.5blens_lt,-.5blens_ht);
+ z1=(.5blens_lt,.5blens_ht);
+ draw z0{dir blens_phi}..z1;
+ draw z1--z0;
+ opticalaxis(normalline)(0);
+ opticalaxis(normalline)(1CIu);
+enddef;
+
+def small_konkav_lens =
+ pickup pensquare scaled normalline;
+ numeric pl, ql;
+ pl:=.5(sklens_lt-sklens_spc);
+ ql:=.5(sklens_lt-sklens_bt);
+ z0=(ql,-.5sklens_ht);
+ z1=(sklens_lt-ql,-.5sklens_ht);
+ z2=(ql,.5sklens_ht);
+ z3=(sklens_lt-ql,.5sklens_ht);
+ z4=(.5CIu,0); z5=z4+(hsoa,0);
+ z6=(sklens_lt-.5CIu,0); z7=z6-(hsoa,0);
+ draw z0{dir sklens_phi}..z2--z3{dir (180+sklens_phi)}..z1--z0;
+ draw z4--z5; draw z6--z7;
+ opticalaxis(normalline)(0);
+ opticalaxis(normalline)(1CIu);
+enddef;
+
+def half_small_konkav_lens =
+ pickup pensquare scaled normalline;
+ numeric pl, ql;
+ pl:=.5(sklens_lt-sklens_spc);
+ ql:=.5(sklens_lt+sklens_bt);
+ z0=(.5sklens_lt,-.5sklens_ht);
+ z1=(ql,-.5sklens_ht);
+ z2=(.5sklens_lt,.5sklens_ht);
+ z3=(ql,.5sklens_ht);
+ draw z0--z2--z3{dir (180+sklens_phi)}..z1--z0;
+ opticalaxis(normalline)(0);
+ opticalaxis(normalline)(1CIu);
+enddef;
+
+def mirror =
+ pickup pensquare scaled normalline;
+ opticalaxis(normalline)(0);
+ opticalaxisdown(normalline)(.5mir_lt,0);
+ halfmirror;
+ pickup pensquare scaled thinline;
+ for i=.125 step .125 until .875:
+ draw (i*mir_lt,(.5-i)*mir_ht)--(mir_wd+i*mir_lt,mir_wd+(.5-i)*mir_ht);
+ endfor
+enddef;
+
+def halfmirror =
+ pickup pensquare scaled thickline;
+ draw (.5mir_wd,.5(mir_ht-mir_wd))--(mir_lt-.5mir_wd,.5(mir_wd-mir_ht));
+enddef;
+
+def halfmirrorline =
+ pickup pensquare scaled normalline;
+ opticalaxis(normalline)(0);
+ opticalaxisdown(normalline)(.5mir_lt,.5mir_ht);
+ opticalaxisdown(normalline)(.5mir_lt,0);
+enddef;
+
+def polarizer =
+ pickup pensquare scaled thinline;
+ numeric pl;
+ pl:=.5(pol_lt-pol_spc);
+ z0=(pl,.5pol_ht);
+ z1=z0+(0,-pol_ht);
+ z2=z1+(pol_spc,0);
+ z3=z0+(pol_spc,0);
+ draw z0--z1--z2--z3--cycle;
+ % optical axis
+ opticalaxis(normalline)(0);
+ opticalaxis(normalline)(1CIu);
+enddef;
+
+def pinhole =
+ pickup pensquare scaled thinline;
+ numeric pl;
+ pl:=.5(pin_lt-pin_spx);
+ fill (.5pin_lt,.5pin_spy)--(pl,.5pin_spz)--(pl,.5pin_ht)--
+ (pl+pin_spx,.5pin_ht)--(pl+pin_spx,.5pin_spz)--cycle;
+ fill (.5pin_lt,-.5pin_spy)--(pl,-.5pin_spz)--(pl,-.5pin_ht)--
+ (pl+pin_spx,-.5pin_ht)--(pl+pin_spx,-.5pin_spz)--cycle;
+ % optical axis
+ opticalaxis(normalline)(0);
+ opticalaxis(normalline)(1CIu);
+enddef;
+
+def screenleft (expr gray) =
+ pickup pensquare scaled normalline;
+ path a, b;
+ numeric pl;
+ pl:=.5(scr_lt-scr_spx);
+ z0=(pl,.5scr_ht);
+ z1=(pl+scr_spx,scr_spy);
+ z2=(pl+scr_spx,-.5scr_ht);
+ z3=(pl,-scr_spy);
+ draw z0--z1--z2--z3--cycle;
+ a:=z0--z1;
+ b:=z2--z3;
+ vshade(b, a, gray, unitsquare);
+enddef;
+
+def screenright (expr gray) =
+ pickup pensquare scaled normalline;
+ path a, b;
+ numeric pl;
+ pl:=.5(scr_lt-scr_spx);
+ z0=(pl,-.5scr_ht);
+ z1=(pl,scr_spy);
+ z2=(pl+scr_spx,.5scr_ht);
+ z3=(pl+scr_spx,-scr_spy);
+ draw z0--z1--z2--z3--cycle;
+ a:=z1--z2;
+ b:=z3--z0;
+ vshade(b, a, gray, unitsquare);
+enddef;
+
+% optical Axis as dashed line
+def opticalaxis(expr linethickness)(expr offset) =
+ pickup pensquare scaled linethickness;
+ draw (offset,0)--(offset+hsoa,0);
+ draw (offset+3hsoa,0)--(offset+5hsoa,0);
+ draw (offset+7hsoa,0)--(offset+1CIu,0);
+enddef;
+
+% half optical Axis as dashed line
+def halfopticalaxis(expr linethickness)(expr offset) =
+ pickup pensquare scaled linethickness;
+ draw (offset,0)--(offset+hsoa,0);
+ draw (offset+3hsoa,0)--(offset+.5CIu,0);
+enddef;
+
+% optical Axis as dashed line downwards
+def opticalaxisdown(expr linethickness)(expr xoffset, yoffset) =
+ pickup pensquare scaled linethickness;
+ draw (xoffset,yoffset)--(xoffset,yoffset-hsoa);
+ draw (xoffset,yoffset-3hsoa)--(xoffset,yoffset-5hsoa);
+ draw (xoffset,yoffset-7hsoa)--(xoffset,yoffset-1CIu);
+enddef;
+
+% half optical Axis as dashed line downwards
+def halfopticalaxisdown(expr linethickness)(expr xoffset, yoffset) =
+ pickup pensquare scaled linethickness;
+ draw (xoffset,yoffset)--(xoffset,yoffset-hsoa);
+ draw (xoffset,yoffset-3hsoa)--(xoffset,yoffset-.5CIu);
+enddef;
+
+% Camera
+def camera =
+ pickup pensquare scaled thickline;
+ numeric pl;
+ pl:=cam_lt-cam_spx;
+ draw (pl,.25cam_spy)--(0,.5cam_spy)--(0,-.5cam_spy)--(pl,-.25cam_spy);
+ draw (pl,.5cam_ht)--(pl,-.5cam_ht)--(cam_lt,-.5cam_ht)--(cam_lt,.5cam_ht)--cycle;
+enddef;
+
+"SmalCIuns";
+twochars(0)(small_lens)(.5slens_ht#,slens_lt#,.5slens_ht#);
+
+"HalfSmalCIuns";
+fourchars(2)(half_small_lens)((slens_lt,0))(.5slens_ht#,slens_lt#,.5slens_ht#);
+
+"BoldLens";
+twochars(6)(bold_lens)(.5blens_ht#,blens_lt#,.5blens_ht#);
+
+"HalfBoldLens";
+fourchars(8)(half_bold_lens)((blens_lt,0))(.5blens_ht#,blens_lt#,.5blens_ht#);
+
+"SmallKonkavLens";
+twochars(12)(small_konkav_lens)(.5sklens_ht#,sklens_lt#,.5sklens_ht#);
+
+"HalfSmallKonkavLens";
+fourchars(14)(half_small_konkav_lens)((sklens_lt,0))(.5sklens_ht#,sklens_lt#,.5sklens_ht#);
+
+"Mirror";
+eightchars(85)(mirror)(.5mir_lt#,.5mir_ht#,.5mir_ht#,.5mir_lt#);
+
+"BeamSplitter";
+eightchars(36)(halfmirror;halfmirrorline)(.5mir_lt#,.5mir_ht#,.5mir_ht#,.5mir_lt#);
+
+"Polarizer";
+twochars(44)(polarizer)(.5pol_ht#,pol_lt#,.5pol_ht#);
+
+"Pinhole";
+twochars(46)(pinhole)(.5pin_ht#,pin_lt#,.5pin_ht#);
+
+"Camera";
+fourchars(66)(camera)((cam_lt,0))(.5cam_ht#,cam_lt#,.5cam_ht#);
+
+"ScreenLeft";
+twochars(72)(screenleft(2);opticalaxis(normalline)(0))(.5scr_ht#,scr_lt#,.5scr_ht#);
+
+"ScreenRight";
+twochars(74)(screenright(2);opticalaxis(normalline)(1CIu))(.5scr_ht#,scr_lt#,.5scr_ht#);
+
+"ScreenLeftBehind";
+twochars(76)(screenleft(2);halfopticalaxis(normalline)(1.5CIu))(.5scr_ht#,scr_lt#,.5scr_ht#);
+
+"ScreenRightBehind";
+twochars(78)(screenright(2);halfopticalaxis(normalline)(0))(.5scr_ht#,scr_lt#,.5scr_ht#);
+
+"VScreenLeft";
+twochars(80)(screenleft(4);opticalaxis(normalline)(0);halfopticalaxis(normalline)(1.5CIu))(.5scr_ht#,scr_lt#,.5scr_ht#);
+
+"VScreenRight";
+twochars(82)(screenright(4);opticalaxis(normalline)(1CIu);halfopticalaxis(normalline)(0))(.5scr_ht#,scr_lt#,.5scr_ht#);
+
+"horizontal dashed half line to the right";
+beginchar(128,.5CIu#,0pt,0pt);
+ halfopticalaxis(normalline)(0);
+endchar;
+
+"horizontal dashed long line to the right";
+beginchar(129,1CIu#,0pt,0pt);
+ opticalaxis(normalline)(0);
+endchar;
+
+"horizontal dashed half line to the left";
+beginchar(130,.5CIu#,0pt,0pt);
+ halfopticalaxis(normalline)(-.5CIu);
+endchar;
+
+"horizontal dashed half line up";
+beginchar(131,0pt,.5CIu#,0pt);
+ halfopticalaxisdown(normalline)(0,.5CIu);
+endchar;
+
+"horizontal dashed long line up";
+beginchar(132,0pt,1CIu#,0pt);
+ opticalaxisdown(normalline)(0,1CIu);
+endchar;
+
+"horizontal dashed half line down";
+beginchar(133,0pt,0pt,.5CIu#);
+ halfopticalaxisdown(normalline)(0,0);
+endchar;
+
+"bold horizontal dashed half line to the right";
+beginchar(136,.5CIu#,0pt,0pt);
+ halfopticalaxis(2normalline)(0);
+endchar;
+
+"bold horizontal dashed long line to the right";
+beginchar(137,1CIu#,0pt,0pt);
+ opticalaxis(2normalline)(0);
+endchar;
+
+"bold horizontal dashed half line to the left";
+beginchar(138,.5CIu#,0pt,0pt);
+ halfopticalaxis(2normalline)(-.5CIu);
+endchar;
+
+"bold horizontal dashed half line up";
+beginchar(139,0pt,.5CIu#,0pt);
+ halfopticalaxisdown(2normalline)(0,.5CIu);
+endchar;
+
+"bold horizontal dashed long line up";
+beginchar(140,0pt,1CIu#,0pt);
+ opticalaxisdown(2normalline)(0,1CIu);
+endchar;
+
+"bold horizontal dashed half line down";
+beginchar(141,0pt,0pt,.5CIu#);
+ halfopticalaxisdown(2normalline)(0,0);
+endchar;
+
+% This is a part of mf-output from Gnuplot. It adds the possibility to
+% use Text within METAFONT-Symbols
+if unknown cmbase: input cmbase fi
+
+tracingstats:=1;
+picture r[];
+
+def put_text(expr ts,xstart,ystart,rot,justification) =
+ begingroup
+ text_width:=0;text_height:=0;
+ for ind:=0 step 1 until length(ts)-1:
+ dec_num:=ASCII substring (ind,ind+1) of ts;
+ if unknown r[dec_num]: dec_num:=32; fi
+ if dec_num=32:
+ text_width:=text_width+wd[65];
+ text_height:=max(text_height,ht[65]+dp[65]);
+ elseif dec_num>=0:
+ text_width:=text_width+wd[dec_num];
+ text_height:=max(text_height,ht[dec_num]+dp[dec_num]);
+ fi
+ endfor
+ if rot=90:
+ if justification=1: ynext:=ystart;
+ elseif justification=2: ynext:=round(ystart-text_width/2);
+ else: ynext:=round(ystart-text_width);
+ fi
+ xnext:=xstart+text_height/2;
+ else:
+ if justification=1: xnext:=xstart;
+ elseif justification=2: xnext:=round(xstart-text_width/2);
+ else: xnext:=round(xstart-text_width);
+ fi
+ ynext:=ystart-text_height/2;
+ fi
+ for ind:=0 step 1 until length(ts)-1:
+ dec_num:=ASCII substring (ind,ind+1) of ts;
+ if unknown r[dec_num]: dec_num:=32; fi
+ if dec_num=32:
+ xnext:=xnext+wd[65]*cosd rot;
+ ynext:=ynext+wd[65]*sind rot;
+ elseif dec_num>=0:
+ currentpicture:=currentpicture+r[dec_num] shifted(xnext,ynext)
+ rotatedaround ((xnext,ynext),rot);
+ xnext:=xnext+wd[dec_num]*cosd rot;
+ ynext:=ynext+wd[dec_num]*sind rot;
+ fi
+ endfor
+ endgroup
+enddef;
+
+def endchar =
+ r[charcode]:=currentpicture;
+ wd[charcode]:=w;ht[charcode]:=h;dp[charcode]:=d;
+ endgroup;
+enddef;
+let endchar_ = endchar;
+let generate = relax;
+let roman = relax;
+input cmss10.mf
+if ligs>1: font_coding_scheme:="TeX text";
+else: font_coding_scheme:=
+ if ligs=0: "TeX typewriter text"
+ else: "TeX text without f-ligatures" fi;
+fi
+font_setup;
+input romanu.mf %Roman uppercase.
+input romanl.mf %Roman lowerrcase.
+
+def endchar =
+ % Next line should probably be removed if CM base is used
+% l:=0; r:=w;
+ %Include the next two lines if you want to
+ %rotate the picture 90 deg.(Portrait to Landscape)
+ %currentpicture:=currentpicture rotated 90 shifted (h,0);
+ %tmp:=charht; charht:=charwd; charwd:=tmp;
+ scantokens extra_endchar;
+ if proofing>0: makebox(proofrule); fi
+ chardx:=w;
+ shipit;
+ if displaying>0: makebox(screenrule); showit; fi
+ endgroup
+enddef;
+let endchar_ = saveendchar;
+let generate = input;
+let roman = roman;
+def t_ = transformed currenttransform enddef;
+% End of Gnuplot-Part
+
+"Laser Box horizontal";
+beginchar(160,lab_wd#,.5lab_ht#,.5lab_ht#);
+ pickup pensquare scaled thickline;
+ rectangle(lab_wd,lab_ht,0,0);
+ pickup pencircle scaled normalline;
+ put_text("Laser",.5lab_wd,0,0,2);
+endchar;
+
+"Laser Box vertical";
+beginchar(161,.5lab_ht#,lab_wd#,.5lab_ht#);
+ pickup pensquare scaled thickline;
+ rectangle(lab_ht,lab_wd,-.5lab_ht,.5lab_wd);
+ pickup pencircle scaled normalline;
+ put_text("Laser",0,.5lab_wd,90,2);
+endchar;
+
+"Photometer Box horizontal";
+beginchar(162,omb_wd#,.5omb_ht#,.5omb_ht#);
+ pickup pensquare scaled thickline;
+ rectangle(omb_wd,omb_ht,0,0);
+ pickup pencircle scaled normalline;
+ put_text("PM",.5omb_wd,0,0,2);
+endchar;
+
+"Photometer Box vertical";
+beginchar(163,.5omb_ht#,omb_wd#,.5omb_ht#);
+ pickup pensquare scaled thickline;
+ rectangle(omb_ht,omb_wd,-.5omb_ht,.5omb_wd);
+ pickup pencircle scaled normalline;
+ put_text("PM",0,.5omb_wd,90,2);
+endchar;
+
+"Optical Modulator Box horizontal";
+beginchar(164,omb_wd#,.5omb_ht#,.5omb_ht#);
+ pickup pensquare scaled thickline;
+ rectangle(omb_wd,omb_ht,0,0);
+ pickup pensquare scaled normalline;
+ put_text("OM",.5omb_wd,0,0,2);
+endchar;
+
+"Optical Modulator Box vertical";
+beginchar(165,omb_ht#,.5omb_wd#,.5omb_wd#);
+ pickup pensquare scaled thickline;
+ rectangle(omb_ht,omb_wd,0,0); %-.5omb_ht,.5omb_wd);
+ pickup pensquare scaled normalline;
+ put_text("OM",.5omb_ht,0,90,2);
+endchar;
+
+end;
+%</optic>
+%^^A last update: Fri 03-13-1998
+%
+%<*csycirc>
+input csym;
+
+designsize:=2lLE#;
+
+fontdimen10: .4gat_ht#;
+fontdimen11: .65gat_lt#;
+
+fontdimen12: .5pin_lt#;
+fontdimen13: pin_spc#;
+fontdimen14: .5ios_wd#+.5pin_lt#;
+fontdimen15: mid_wd#+ios_wd#;
+fontdimen16: ios_wd#;
+fontdimen17: out_spc#;
+
+%fontdimen7: .4gat_ht#;
+%fontdimen8: .5pin_lt#;
+%fontdimen9: .5(pin_lt#+ios_wd#);
+%fontdimen10: .5mid_wd#;
+%fontdimen11: .5ios_wd#;
+%fontdimen16: pin_spc#;
+
+def defcircleabout(expr p, rad)=
+ z[p]=.5[z[p+1],z[p+3]]=.5[z[p+2],z[p+4]];
+ y[p+1]=y[p+3];
+ x[p+2]=x[p+4];
+ x[p]=lft(x[p+1])-rad;
+ y[p]=top(y[p+4])+rad;
+enddef;
+
+def gate=
+ charic:=.5pin_spc#;
+ z0=(0,0);
+ x20=x15=x1=x6=x7= x0+pin_lt;
+ y8=y6=-y7= y0+.5gat_ht;
+ x8=x9=x10= x1+gat_lt-2pin_lt;
+ y15=-y20= y0+.5pin_spc;
+ x25-x0= gat_lt;
+
+ y9=y7; y25=y10=y1=y0;
+ x0=x26=x27;
+ y26=y15; y27=y20;
+
+ pickup pencircle scaled thickline;
+ defcircleabout(1,inv_rad);
+ defcircleabout(10,inv_rad);
+ defcircleabout(15,inv_rad);
+ defcircleabout(20,inv_rad);
+enddef;
+
+def segment =
+ z0=(0,0);
+ x1-x0=pin_lt; y0=y1;
+ defcircleabout(1,inv_rad); % z2 z3 z4 z5 defined
+ z1=.5[z6,z7]; x6=x7=x8;
+ y7-y6=pin_spc;
+ y8-y1=out_spc;
+ x9-x8=ios_wd; y8=y9;
+enddef;
+
+
+def topbotsegs(expr fc, myht, mydp) =
+ beginchar(fc+0,pin_lt#+ios_wd#,myht,mydp);
+ pickup pensquare scaled thickline;
+ segment
+ draw z6--z8--z9;
+ endchar;
+ beginchar(fc+1,pin_lt#+ios_wd#,myht,mydp);
+ pickup pensquare scaled thickline;
+ segment
+ draw z6--z8--z9;
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ endchar;
+ beginchar(fc+2,pin_lt#+ios_wd#,myht,mydp);
+ pickup pensquare scaled thickline;
+ segment
+ draw z6--z5;
+ draw z3--z8--z9;
+ pickup pencircle scaled normalline;
+ draw fullcircle scaled 2inv_rad shifted z1;
+ pickup pensquare scaled normalline;
+ draw z0--z4;
+ endchar;
+ beginchar(fc+3,pin_lt#+ios_wd#,myht,mydp);
+ pickup pensquare scaled thickline;
+ segment
+ draw z6--z8--z9;
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ pickup pencircle scaled normalline;
+ draw z3--z2--z5;
+ endchar;
+enddef;
+
+def midsegs(expr fc, myht, mydp) =
+ beginchar(fc+0,pin_lt#+ios_wd#,myht,mydp);
+ pickup pensquare scaled thickline;
+ segment
+ draw z6--z8;
+ endchar;
+ beginchar(fc+1,pin_lt#+ios_wd#,myht,mydp);
+ pickup pensquare scaled thickline;
+ segment
+ draw z6--z8;
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ endchar;
+ beginchar(fc+2,pin_lt#+ios_wd#,myht,mydp);
+ pickup pensquare scaled thickline;
+ segment
+ draw z6--z5;
+ draw z3--z8;
+ pickup pencircle scaled thickline;
+ draw fullcircle scaled 2inv_rad shifted z1;
+ pickup pensquare scaled normalline;
+ draw z0--z4;
+ endchar;
+ beginchar(fc+3,pin_lt#+ios_wd#,myht,mydp);
+ pickup pensquare scaled thickline;
+ segment
+ draw z6--z8;
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ pickup pencircle scaled normalline;
+ draw z3--z2--z5;
+ endchar;
+enddef;
+
+
+"obere Segmente Eing"&ditto&"ange";
+topbotsegs(0,out_spc#,.5pin_spc#);
+
+"obere Segmente Ausg"&ditto&"ange";
+{{
+ addTF(reflectedabout((.5(ios_wd+pin_lt),0),(.5(ios_wd+pin_lt),1)));
+ topbotsegs(16,out_spc#,.5pin_spc#);
+}}
+
+"mittlere Segmente Eing"&ditto&"ange";
+midsegs(32,.5pin_spc#,.5pin_spc#);
+
+"mittlere Segmente Eing"&ditto&"ange";
+{{
+ addTF(reflectedabout((.5(ios_wd+pin_lt),0),(.5(ios_wd+pin_lt),1)));
+ midsegs(48,.5pin_spc#,.5pin_spc#);
+}}
+
+"untere Segmente Eing"&ditto&"ange";
+{{
+ addTF(reflectedabout(left,right));
+ topbotsegs(64,.5pin_spc#,out_spc#);
+}}
+
+"untere Segmente Ausg"&ditto&"ange";
+{{
+ addTF(reflectedabout(left,right));
+ addTF(reflectedabout((.5(ios_wd+pin_lt),0),(.5(ios_wd+pin_lt),1)));
+ topbotsegs(80,.5pin_spc#,out_spc#);
+}}
+
+"oberes Zwischensegment";
+beginchar(96,mid_wd#,out_spc#,.5pin_spc#);
+ pickup pensquare scaled thickline;
+ draw (0,out_spc)--(mid_wd,out_spc);
+endchar;
+
+"Zwischensegment";
+beginchar(97,mid_wd#,.5pin_spc#,.5pin_spc#);
+endchar;
+
+"unteres Zwischensegment";
+beginchar(98,mid_wd#,.5pin_spc#,out_spc#);
+ pickup pensquare scaled thickline;
+ draw (0,-out_spc)--(mid_wd,-out_spc);
+endchar;
+
+
+"Gatter: Eingang, Ausgang";
+beginchar(128,gat_lt#,.5gat_ht#,.5gat_ht#);
+ gate;
+ pickup pensquare scaled thickline;
+ draw z6--z8--z9--z7--cycle;
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ draw z10--z25;
+endchar;
+
+"Gatter: Eingang negiert, Ausgang";
+beginchar(129,gat_lt#,.5gat_ht#,.5gat_ht#);
+ gate;
+ pickup pensquare scaled thickline;
+ draw z3--z6--z8--z9--z7--z5;
+ pickup pencircle scaled thickline;
+ draw fullcircle scaled 2inv_rad shifted z1;
+ pickup pensquare scaled normalline;
+ draw z0--z4;
+ draw z10--z25;
+endchar;
+
+"Gatter: Eingang, Ausgang negiert";
+beginchar(130,gat_lt#,.5gat_ht#,.5gat_ht#);
+ gate;
+ pickup pensquare scaled thickline;
+ draw z14--z9--z7--z6--z8--z12;
+ pickup pencircle scaled thickline;
+ draw fullcircle scaled 2inv_rad shifted z10;
+ pickup pensquare scaled normalline;
+ draw z0--z1;
+ draw z11--z25;
+endchar;
+
+"Gatter: zwei Eing"&ditto&"ange, Ausgang";
+beginchar(131,gat_lt#,.5gat_ht#,.5gat_ht#);
+ gate;
+ pickup pensquare scaled thickline;
+ draw z6--z8--z9--z7--cycle;
+ pickup pensquare scaled normalline;
+ draw z15--z26;
+ draw z20--z27;
+ draw z10--z25;
+endchar;
+
+"Gatter: zwei Eing"&ditto&"ange, Ausgang negiert";
+beginchar(132,gat_lt#,.5gat_ht#,.5gat_ht#);
+ gate;
+ pickup pensquare scaled thickline;
+ draw z14--z9--z7--z6--z8--z12;
+ pickup pencircle scaled thickline;
+ draw fullcircle scaled 2inv_rad shifted z10;
+ pickup pensquare scaled normalline;
+ draw z15--z26;
+ draw z20--z27;
+ draw z11--z25;
+endchar;
+
+"Gatter alt AND: zwei Eing"&ditto&"ange, Ausgang";
+beginchar(133,gat_lt#,.5gat_ht#,.5gat_ht#);
+ gate;
+ pickup pensquare scaled thickline;
+ draw z1--z6{right}..z10{down}..{left}z7--cycle;
+ pickup pensquare scaled normalline;
+ draw z15--z26;
+ draw z20--z27;
+ draw z10--z25;
+endchar;
+
+"Gatter alt NAND: zwei Eing"&ditto&"ange, Ausgang";
+beginchar(134,gat_lt#,.5gat_ht#,.5gat_ht#);
+ gate;
+ pickup pensquare scaled thickline;
+ draw z1--z6{right}..z10{down}..{left}z7--cycle;
+ pickup pensquare scaled normalline;
+ draw z15--z26;
+ draw z20--z27;
+ draw z10--z25;
+ pickup pencircle scaled 2inv_rad;
+ drawdot z10;
+endchar;
+
+"Gatter alt OR: zwei Eing"&ditto&"ange, Ausgang";
+beginchar(135,gat_lt#,.5gat_ht#,.5gat_ht#);
+ gate;
+ z30=5[z26,z15];
+ z31=5[z27,z20];
+ z32= (z26--z30) intersectionpoint (z6{right}..{down}z10);
+ z33= (z27--z31) intersectionpoint (z10{down}..{left}z7);
+ pickup pensquare scaled thickline;
+ draw z1--z6{right}..z10{down}..{left}z7--cycle;
+ pickup pensquare scaled normalline;
+ draw z26--z32;
+ draw z27--z33;
+ draw z10--z25;
+endchar;
+
+"Gatter alt NOR: zwei Eing"&ditto&"ange, Ausgang";
+beginchar(136,gat_lt#,.5gat_ht#,.5gat_ht#);
+ gate;
+ z30=5[z26,z15];
+ z31=5[z27,z20];
+ z32= (z26--z30) intersectionpoint (z6{right}..{down}z10);
+ z33= (z27--z31) intersectionpoint (z10{down}..{left}z7);
+ pickup pensquare scaled thickline;
+ draw z1--z6{right}..z10{down}..{left}z7--cycle;
+ pickup pensquare scaled normalline;
+ draw z26--z32;
+ draw z27--z33;
+ draw z10--z25;
+ pickup pencircle scaled 2inv_rad;
+ drawdot z10;
+endchar;
+
+"Gatter alt EQ: zwei Eing"&ditto&"ange, Ausgang";
+beginchar(137,gat_lt#,.5gat_ht#,.5gat_ht#);
+ gate;
+ pickup pensquare scaled thickline;
+ draw z1--z6{right}..z10{down}..{left}z7--cycle;
+ pickup pensquare scaled normalline;
+ draw z15--z26;
+ draw z20--z27;
+ draw z10--z25;
+ x30=x31=x34=.2[x2,x13];
+ y30=.7[y16,y2]; y30=y32;
+ y31=.7[y21,y2]; y31=y33;
+ x32=x33=x35=.8[x2,x13];
+ y35=y34=y2;
+ pickup pencircle scaled normalline;
+ draw z30--z32;
+ draw z31--z33;
+ draw z34--z35;
+endchar;
+
+"box symbol empty";
+beginchar(250,box_wd#,.5box_wd#,.5box_wd#);
+ z0=(0,0);
+ x0=x1=x2; x3=x4;
+ y0=.5[y2,y1];
+ y1=y3; y2=y4;
+ y2-y1=x3-x1=box_wd;
+ pickup pensquare scaled thickline;
+ draw z1--z2--z4--z3--cycle;
+endchar;
+
+"box symbol cutted by line";
+beginchar(251,box_wd#,.5box_wd#,.5box_wd#);
+ z0=(0,0);
+ x0=x1=x2; x3=x4;
+ y0=.5[y2,y1];
+ y1=y3; y2=y4;
+ y2-y1=x3-x1=box_wd;
+ pickup pensquare scaled thickline;
+ draw z1--z2--z4--z3--cycle;
+ pickup pencircle scaled normalline;
+ draw z1--z4;
+endchar;
+
+"Black Box analog";
+beginchar(252,bba_wd#,.5bba_ht#,.5bba_ht#);
+ z0=(0,0); x1=x0=x2;
+ z0=.5[z1,z2];
+ y1-y2=y3-y4=bba_ht; y1=y3;
+ x3=x4=x0+bba_wd;
+ pickup pensquare scaled thickline;
+ draw z1--z2--z4--z3--cycle;
+endchar;
+
+"Black Box digital";
+beginchar(253,bbd_wd#,.5bbd_ht#,.5bbd_ht#);
+ z0=(0,0); x1=x0=x2;
+ z0=.5[z1,z2];
+ y1-y2=y3-y4=bbd_ht; y1=y3;
+ x3=x4=x0+bbd_wd;
+ pickup pensquare scaled thickline;
+ draw z1--z2--z4--z3--cycle;
+endchar;
+
+"OPV";
+beginchar(254,opv_lt#,opv_ht#,opv_ht#);
+ charic:=opv_dis#;
+ numeric pl;
+ pl:=pin_lt;
+ z0=(0,0);
+ z1=z0+(pl,opv_dis);
+ z2=z0+(pl,opv_ht);
+ z3=z0+(pl+opv_frc*2opv_ht,0);
+ x4=x2; y4=-y2;
+ x5=x1; y5=-y1;
+ z6=z1-(pl,0);
+ z7=z5-(pl,0);
+ z8=z0+(opv_lt,0);
+ z9=z5+(3pt,0);
+ z10=z9+(4pt,0);
+ z11=z1+(3pt,0);
+ z12=z11+(4pt,0);
+ z13=z11+(2pt,2pt);
+ z14=z11+(2pt,-2pt);
+ pickup pensquare scaled thickline;
+ draw z2--z3--z4--cycle;
+ pickup pensquare scaled normalline;
+ draw z9--z10;
+ draw z11--z12;
+ draw z13--z14;
+ draw z6--z1;
+ draw z7--z5;
+ draw z3--z8;
+endchar;
+
+"OPV";
+beginchar(255,opv_lt#,opv_ht#,opv_ht#);
+ charic:=opv_dis#;
+ numeric pl;
+ pl:=pin_lt;
+ z0=(0,0);
+ z1=z0+(pl,opv_dis);
+ z2=z0+(pl,opv_ht);
+ z3=z0+(pl+opv_frc*2opv_ht,0);
+ x4=x2; y4=-y2;
+ x5=x1; y5=-y1;
+ z6=z1-(pl,0);
+ z7=z5-(pl,0);
+ z8=z0+(opv_lt,0);
+ z9=z1+(3pt,0);
+ z10=z9+(4pt,0);
+ z11=z5+(3pt,0);
+ z12=z11+(4pt,0);
+ z13=z11+(2pt,2pt);
+ z14=z11+(2pt,-2pt);
+ pickup pensquare scaled thickline;
+ draw z2--z3--z4--cycle;
+ pickup pensquare scaled normalline;
+ draw z9--z10;
+ draw z11--z12;
+ draw z13--z14;
+ draw z6--z1;
+ draw z7--z5;
+ draw z3--z8;
+endchar;
+
+end;
+%</csycirc>
+%
+%<*indexhlp>
+If you want to generate an index for the circ-package please
+run "makeindex" with the style-file "circ.ist" on "circ.idx".
+
+Using EM-TeX the command line is: makeindx -s circ.ist circ.idx
+
+To get the right pagenumbers in the index and the table of
+contents, run LaTeX on "circ.drv" and makeindex in the following
+way:
+
+latex circ.drv
+makeindx -s circ.ist circ.idx
+latex circ.drv
+makeindx -s circ.ist circ.idx
+latex circ.drv
+%</indexhlp>
diff --git a/macros/generic/diagrams/circ/circ.ins b/macros/generic/diagrams/circ/circ.ins
new file mode 100644
index 0000000000..4209495d81
--- /dev/null
+++ b/macros/generic/diagrams/circ/circ.ins
@@ -0,0 +1,19 @@
+% CIRC Installation file for LaTeX.
+% Copyright (C) 1997,1998 Sebastian Tannert and Andreas Tille
+%
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+%
+\let\documentclass\relax
+\input circ.dtx
diff --git a/macros/generic/diagrams/circ/circ.pdf b/macros/generic/diagrams/circ/circ.pdf
new file mode 100644
index 0000000000..f2ab86d7e2
--- /dev/null
+++ b/macros/generic/diagrams/circ/circ.pdf
Binary files differ
diff --git a/macros/generic/diagrams/circ/circ.txt b/macros/generic/diagrams/circ/circ.txt
new file mode 100644
index 0000000000..b629330aad
--- /dev/null
+++ b/macros/generic/diagrams/circ/circ.txt
@@ -0,0 +1,11 @@
+%^^A last update: Sat 05-24-2003
+%
+% These are the files you should expect to be extracted from: CIRC.DTX
+%
+% circ.dtx circ.sty circ.ins circ.drv circ.txt
+% ic.def gate.def box.def basic.def
+% physics.def optics.def cirsyms.tex csym.mf
+% cioptic.mf ciwidko.mf cidiod.mf cirest.mf
+% cicirc.mf cibimos.mf cisym.mf defcirc.mf
+% ciphysic.mf index.hlp oldgate.def cidoc.tex
+%
diff --git a/macros/generic/diagrams/circuit b/macros/generic/diagrams/circuit
new file mode 120000
index 0000000000..dcec825543
--- /dev/null
+++ b/macros/generic/diagrams/circuit
@@ -0,0 +1 @@
+circ \ No newline at end of file
diff --git a/macros/generic/diagrams/dcpic/README b/macros/generic/diagrams/dcpic/README
new file mode 100644
index 0000000000..34e8945af0
--- /dev/null
+++ b/macros/generic/diagrams/dcpic/README
@@ -0,0 +1,9 @@
+DCpic is a package of TeX macros for graph modeling (e.g.
+commutative diagrams) in a (La)TeX or ConTeXt document.
+Its distinguishing features are: the use of PiCTeX a
+powerful graphical engine, and a simple specification
+syntax. A graph is described in terms of its objects and
+its edges. The objects are textual elements and the edges
+can have various straight or curved forms.
+
+It is under the LaTeX Project Public License \ No newline at end of file
diff --git a/macros/generic/diagrams/dcpic/dcpic.sty b/macros/generic/diagrams/dcpic/dcpic.sty
new file mode 100644
index 0000000000..d6b4709a26
--- /dev/null
+++ b/macros/generic/diagrams/dcpic/dcpic.sty
@@ -0,0 +1,1412 @@
+%% DC-PiCTeX
+%% Copyright (c) 1990-2013 Pedro Quaresma, University of Coimbra, Portugal
+%% 11/1990 (version 1.0);
+%% 10/1991 (version 1.1);
+%% 9/1993 (version 1.2);
+%% 3/1995 (version 1.3);
+%% 7/1996 (version 2.1);
+%% 5/2001 (version 3.0);
+%% 11/2001 (version 3.1);
+%% 1/2002 (version 3.2)
+%% 5/2002 (version 4.0);
+%% 3/2003 (version 4.1);
+%% 12/2004 (version 4.1.1)
+%% 3/2007 (version 4.2)
+%% 5/2008 (version 4.2.1)
+%% 8/2008 (version 4.3)
+%% 12/2008 (version 4.3.1)
+%% 12/2009 (version 4.3.2)
+%% 4/2013 (version 4.4.0)
+%% 5/2013 (version 5.0)
+
+\immediate\write10{Package DCpic 2013/05/01 v5.0}
+
+\ProvidesPackage{dcpic}[2013/05/01 v5.0]
+
+%% Version X.Y.Z
+%% X - major versions
+%% Y - minor versions
+%% Z - bug corrections
+%%
+%% Copyright (c) 1990-2013 Pedro Quaresma <pedro@mat.uc.pt>
+%%
+% 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 Pedro Quaresma (pedro@mat.uc.pt).
+%
+% This work consists of the files dcpic.sty.
+%%
+%% Coimbra, 1st of May, 2013 (2013/05/01)
+%% Pedro Quaresma
+%%
+%% DCpic is a package of \TeX\ macros for graph modelling in a
+%% (La)\TeX\ or Con\TeX t document. Its distinguishing features are:
+%% the use of \PiCTeX\ a powerful graphical engine, and a simple
+%% specification syntax. A graph is described in terms of its objects
+%% and its edges. The objects are textual elements and the edges can
+%% have various straight or curved forms.
+%%
+%%
+%% A graph in DCpic is a "picture" in \PiCTeX, in which we place our
+%% {\em objects} and {\em morphisms} (edges). The user's commands in
+%% DCpic are: {\tt begindc} and {\tt enddc} which establishe the
+%% coordinate system where the objects will by placed; {\tt obj}, the
+%% command which defines the place and the contents of each object;
+%% {\tt mor}, and {\tt cmor}, the commands which define the
+%% morphisms, linear and curved edges, and its labels.
+%%
+%% Example:
+%% \begindc{\commdiag}[30]
+%% \obj(10,15){$A$}
+%% \obj(25,15){$B$}
+%% \obj(40,15){$C$}
+%% \mor{$A$}{$B$}{$f$}
+%% \mor{$B$}{$C$}{$g$}
+%% \cmor((10,11)(11,7)(15,6)(25,6)(35,6)(39,7)(40,11))
+%% \pup(25,3){$g\circ f$}
+%% \enddc
+%%
+%% NOTES:
+%% all the numeric values should be integer values.
+%%
+%% Available commands:
+%%
+%% The environment:
+%% \begindc{#1}[#2]
+%% #1 - Graph type
+%% 0 = "commdiag" (commutative diagram)
+%% 1 = "digraph" (direct graph)
+%% 2 = "undigraph" (undirect graph)
+%% 3 = "cdigraph" with incircled objects
+%% 4 = "cundigraph" with incircled objects
+%% (optional) #2 - magnification factor (default value, 300)
+%%
+%% \enddc
+%%
+%% Objects:
+%% \obj(#1,#2)[#3]{#4}[#5]
+%% #1 and #2 - coordenates
+%% (optional) #3 - Label, to be used in the morphims command, if not
+%% present the #4 will be used to that purpose
+%% #4 - Object contents
+%% (optional) #5 - placement of the object (default value \north)
+%% 0="\pcent", center
+%% 1="\north", north
+%% 2="\northeast", northeast
+%% 3="\east", east
+%% 4="\southeast", southeast
+%% 5="\south", south
+%% 6="\southwest", southwest
+%% 7="\west", west
+%% 8="\northwest", northwest
+%% !!! Note !!!
+%% if you omit the #3 argument (label) and the #4 argument is a
+%% complex LaTeX command this can cause this command to crash. In
+%% this case you must specify a label (the empty label [], if you do
+%% needed it it for nothing).
+%%
+%% Morphims (linear edges). This commando has to two major variants
+%% i) Starting and Ending objects specification
+%% \mor{#1}{#2}[#5,#6]{#7}[#8,#9]
+%%
+%% As you can see this first form is (intencionaly) badly formed, the
+%% arguments #3 and #4 are missing (the actual command is correctly
+%% formed).
+%%
+%% #1 - The starting object reference
+%% #2 - The ending object reference
+%%
+%% from this two we will obtain the objects coordinates, and also the
+%% dimensions of the enclosing box.
+%%
+%% The objects box dimensions are used to do an automatic adjustment of
+%% the edge width.
+%%
+%% from #1 we obtain (x,y), (#1,#2) in the second form
+%% from #2 we obtain (x',y'), (#3,#4) in the second form
+%%
+%% this values will be passed to the command second form
+%%
+%%ii) Two points coordinates specification
+%% \mor(#1,#2)(#3,#4)[#5,#6]{#7}[#8,#9]
+%%
+%% Now we can describe all the arguments
+%%
+%% #1 and #2 - coordinates (beginning)
+%% #3 and #4 - coordinates (ending)
+%%(optional)#5,#6 - correction factors (defaul values, 100 and 100 (10pt))
+%% #5 - actual beginning of the edge
+%% #6 - actual ending of the edge
+%% #7 - text (morphism label)
+%%(optional)#8,#9
+%% #8 - label placement
+%% 1 = "\atright", at right, default value
+%% -1 = "\atleft", at left
+%% #9 - edge type
+%% 0 = "\solidarrow", default edge
+%% 1 = "\dashArrow"
+%% 2 = "\dotArrow (thanks to Xingliang Liang <jkl9543@gmail.com>)
+%% 3 = "\solidline"
+%% 4 = "\dashline"
+%% 5 = "\dotline"
+%% 6 = "\injectionarrow"
+%% 7 = "\aplicationarrow"
+%% 8 = "\surjectivearrow"
+%% 9 = "\equalline" (thanks to Ruben Debeerst <debeerst@mathematik.uni-kassel.de>)
+%% 10 = "\doublearrow"
+%% 11 = "\doubleopposite"
+%% 12 = "\nullarrow" (to allow adding labels to existing arrows)
+%%
+%% Notes: the equalline "arrow" does not provide a second label.
+%%
+%% Curved Morphisms (quadratic edges):
+%% \cmor(#1) #2(#3,#4){#5}[#6]
+%% #1 - list of points (odd number)
+%% #2 - tip direction
+%% 0 = "\pup", pointing up
+%% 1 = "\pdown", pointing down
+%% 2 = "\pright", pointing right
+%% 3 = "\pleft", pointing left
+%% #3 and #4 - coordenates of the label
+%% #5 - morphism label
+%%(optional)#6 - edge type
+%% 0 ="\solidarrow", default value
+%% 1 = "\dashArrow"
+%% 2 = "\solidline"
+%%
+%% Notes: insert a space after the command.
+%% the space after the list of points is mandatory
+%%
+%% Examples:
+%% \documentclass[a4paper,11pt]{article}
+%% \usepackage{dcpic,pictexwd}
+%%
+%% \begin{document}
+%% \begindc[3]
+%% \obj(14,11){$A$}
+%% \obj(39,11){$B$}
+%% \mor(14,12)(39,12){$f$}%[\atright,\solidarrow]
+%% \mor(39,10)(14,10){$g$}%[\atright,\solidarrow]
+%% \cmor((10,10)(6,11)(5,15)(6,19)(10,20)(14,19)(15,15))
+%% \pdown(2,20){$id_A$}
+%% \cmor((40,7)(41,3)(45,2)(49,3)(50,7)(49,11)(45,12))
+%% \pleft(54,3){$id_B$}
+%% \enddc
+%%
+%% \begindc{\commdiag}[3]
+%% \obj(10,15)[A]{$A$}
+%% \obj(40,15)[Aa]{$A$}
+%% \obj(25,15)[B]{$B$}
+%% \mor{A}{B}{$f$}%[\atright,\solidarrow]
+%% \mor{B}{Aa}{$g$}%[\atright,\solidarrow]
+%% \cmor((10,11)(11,7)(15,6)(25,6)(35,6)(39,7)(40,11))
+%% \pup(25,3){$id_A$}
+%% \enddc
+%%
+%% \newcommand{\barraA}{\vrule height2em width0em depth0em}
+%% \newcommand{\barraB}{\vrule height1.6em width0em depth0em}
+%% \begindc{\commdiag}[35]
+%% \obj(1,1)[Gr]{$G$}
+%% \obj(3,1)[Grstar]{$G_{r^*}$}
+%% \obj(5,1)[H]{$H$}
+%% \obj(2,2)[SigmaG]{$\Sigma^G$}
+%% \obj(6,2)[SigmaH]{$\Sigma^H$}
+%% \obj(1,3)[Lm]{$L_m$}
+%% \obj(3,3)[Krm]{$K_{r,m}$}
+%% \obj(5,3)[Rmstar]{$R_{m^*}$}
+%% \obj(1,5)[L]{$L$}
+%% \obj(3,5)[Lr]{$L_r$}
+%% \obj(5,5)[R]{$R$}
+%% \obj(2,6)[SigmaL]{$\Sigma^L$}
+%% \obj(6,6)[SigmaR]{$\Sigma^R$}
+%% \mor{Gr}{SigmaG}{$\lambda^G$}
+%% \mor{Grstar}{Gr}{$i_5$}[\atleft,\aplicationarrow]
+%% \mor{Grstar}{H}{$r^*$}[\atright,\solidarrow]
+%% \mor{H}{SigmaH}{$\lambda^H$}[\atright,\dashArrow]
+%% \mor{SigmaG}{SigmaH}{$\varphi^{r^*}$}[\atright,\solidarrow]
+%% \mor{Lm}{Gr}{$m$}[\atright,\solidarrow]
+%% \mor{Lm}{L}{$i_2$}[\atleft,\aplicationarrow]
+%% \mor{Krm}{Lm}{$i_3\quad$}[\atright,\aplicationarrow]
+%% \mor{Krm}{Rmstar}{$r$}
+%% \mor{Krm}{Lr}{$i_4$}[\atright,\aplicationarrow]
+%% \mor{Krm}{Grstar}{$m$}
+%% \mor{Rmstar}{R}{$i_6$}[\atright,\aplicationarrow]
+%% \mor{Rmstar}{H}{$m^*$}
+%% \mor{L}{SigmaL}{$\lambda^L$}
+%% \mor{Lr}{L}{$i_1\quad$}[\atright,\aplicationarrow]
+%% \mor{Lr}{R}{$r$}
+%% \mor{R}{SigmaR}{$\lambda^R$}[\atright,\solidarrow]
+%% \mor{SigmaL}{SigmaG}{$\varphi^m$}[\atright,\solidarrow]
+%% \mor{SigmaL}{SigmaR}{$\varphi^r$}
+%% \mor{SigmaR}{SigmaH}{$\varphi^{m^*}$}
+%% \enddc
+%%
+%% \end{document}
+%%-----------------//-------------
+%% Modifications (9/1993)
+%% argument "distance" between de tip of the arrow and the objects
+%% became optional; a new option for the "arrows" (option 3)
+%%
+%% 2/3/1995 (version 1.3)
+%% adds "the aplication arrow" (option 4); the distance between
+%% the label and the "arrow" is now a fixed value (100 units).
+%% 15/7/1996 (version 2.1)
+%% The comand "\mor" has a new sintax. The 5th and 6th
+%% parameters are now the distance between the two objects and
+%% the arrow tips. The 7th parameter is the label. The 8th e 9th
+%% parameters (label position and type of arrow) are now optional
+%%
+%% 5/2001 (version 3.0)
+%% Implementation of the comand "\cmor" based on the quadratic
+%% curver comand of PiCTeX
+%%
+%% 11/2001 (version 3.1)
+%% Changes on the tips of the arrow to became more LaTeX style
+%% (after a conversation on EuroTeX 2001).
+%%
+%% 1/2002 (version 3.2)
+%% Modification of the commands "obj" and "mor" in such a way
+%% that allows the logical specification of the morphisms, that
+%% is, it is now possible to specify the starting object and the
+%% ending object instead of specify the coordinates.
+%%
+%% The length of the arrows is automatically trimmed to the
+%% objects' size.
+%%
+%% 5/2002 (version 4.0)
+%% New syntax for the commands "begindc" e "obj"
+%% !!! New syntax !!!
+%% The command "begindc" now have an obligatory argument, this
+%% argument allows the specification of the graph type
+%% "commdiag" (0), commutative diagrams
+%% "digraph" (1), directed graphs
+%% "undigraph" (2), undirected graphs
+%% The command "obj" has a new syntax: after the coordinates
+%% specification, an optional argument specifying a label, an
+%% obligatory argument given the "value" of the object and the
+%% final optional argument used in the graphs to set the
+%% relative position of the "value" to the "dot" defining the
+%% objects position, the default value is "north".
+%%
+%% 3/2003 (version 4.1)
+%% Responding to a request of Jon Barker <jeb1@soton.ac.uk> I
+%% create a new type of arrow, the surjective arrow.
+%% For now only horizontal and vertical versions, other angles
+%% are poorly rendered.
+%% 12/2004 (version 4.1.1)
+%% New version for the surjective arrows, solve the problems
+%% with the first implementation of this option.
+%% 3/2007 (version 4.2)
+%% Adds the "providespackage" directive that was missing.
+%% Adds dashed lines, and dotted lines.
+%% 5/2008 (version 4.2.1)
+%% Deleting some counters, trying to avoid the problem "running
+%% out of counters", that occurs because of the use of PiCTeX
+%% and DCpic (only two...)
+%% 8/2008 (version 4.3)
+%% Thanks to Ruben Debeerst (debeerst@mathematik.uni-kassel.de),
+%% he added a new arrow "equalline". After that I
+%% decided to add: the doublearrow; the doublearrow with
+%% opposite directions; the null arrow. This last can be used as
+%% a simple form of adding new labels.
+%%12/2008 (version 4.3.1)
+%% The comand \id is internalised (\!id), it should be that way
+%% from the begining because it is not to be used from the
+%% outside.
+%% The comand \dasharrow was changed to \dashArrow to avoid a
+%% clash with the AMS command with the same name.
+%%12/2009 (version 4.3.2)
+%% There is a conflict between dcpic.sty and hyperref in current
+%% texlive-2009 due to the one letter macro \d (thanks Thorsten
+%% S <thorsten.schwander@gmail.com>).
+%% The \d changed to \deuc (Euclidian Distance). The \x and \y
+%% changed to \xO \yO
+%% 4/2013 (version 4.4.0)
+%% Thanks to Xingliang Liang <jkl9543@gmail.com>. He added a new
+%% arrow "dotarrow".
+%% 5/2013 (version 5.0)
+%% The base scale of the graph has changed from 1pt to .1pt to
+%% solve a problem with the implementation of the oblique
+%% equalline (Thanks to Antonio de Nicola).
+%% The LaTeX circle and oval commands where replaced by the
+%% PiCTeX circulararc and ellipticalarc commands to avoid
+%% differences in scales.
+%%-----------------//-------------
+
+\catcode`!=11 % ***** THIS MUST NEVER BE OMITTED (See PiCTeX)
+
+\newcount\aux%
+\newcount\auxa%
+\newcount\auxb%
+\newcount\xO%
+\newcount\yO%
+\newcount\xl%
+\newcount\yl%
+\newcount\deuc%
+\newcount\dnm%
+\newcount\xa%
+\newcount\xb%
+\newcount\xmed%
+\newcount\xc%
+\newcount\xd%
+\newcount\xe
+\newcount\xf
+\newcount\ya%
+\newcount\yb%
+\newcount\ymed%
+\newcount\yc%
+\newcount\yd
+\newcount\ye
+\newcount\yf
+%% "global variables"
+\newcount\expansao%
+\newcount\tipografo% version 4.0
+\newcount\distanciaobjmor% version 4.0
+\newcount\tipoarco% version 4.0
+\newif\ifpara%
+%% version 3.2
+\newbox\caixa%
+\newbox\caixaaux%
+\newif\ifnvazia%
+\newif\ifvazia%
+\newif\ifcompara%
+\newif\ifdiferentes%
+\newcount\xaux%
+\newcount\yaux%
+\newcount\guardaauxa%
+\newcount\alt%
+\newcount\larg%
+\newcount\prof%
+%% for the triming
+\newcount\auxqx
+\newcount\auxqy
+\newif\ifajusta%
+\newif\ifajustadist
+\def\objPartida{}%
+\def\objChegada{}%
+\def\objNulo{}%
+
+%%
+%% Stack specification
+%%
+
+%%
+%% Emtpy stack
+%%
+\def\!vazia{:}
+
+%%
+%% Is Empty? : Stack -> Bool
+%%
+%% nvazia - True if Not Empy
+%% vazia - True if Empty
+\def\!pilhanvazia#1{\let\arg=#1%
+\if:\arg\ \nvaziafalse\vaziatrue \else \nvaziatrue\vaziafalse\fi}
+
+%%
+%% Push : Elems x Stack -> Stack
+%%
+\def\!coloca#1#2{\edef\pilha{#1.#2}}
+
+%%
+%% Top : Stack -> Elems
+%%
+%% the empty stack is not taken care
+%% the element is "kept" ("guardado")
+\def\!guarda(#1)(#2,#3)(#4,#5,#6){\def\!id{#1}%
+\xaux=#2%
+\yaux=#3%
+\alt=#4%
+\larg=#5%
+\prof=#6%
+}
+
+\def\!topaux#1.#2:{\!guarda#1}
+\def\!topo#1{\expandafter\!topaux#1}
+
+%%
+%% Pop : Stack -> Stack
+%%
+%% the empty stack is not taken care
+\def\!popaux#1.#2:{\def\pilha{#2:}}
+\def\!retira#1{\expandafter\!popaux#1}
+
+%%
+%% Compares words : Word x Word -> Bool
+%%
+%% compara - True if equal
+%% diferentes - True if not equal
+\def\!comparaaux#1#2{\let\argA=#1\let\argB=#2%
+\ifx\argA\argB\comparatrue\diferentesfalse\else\comparafalse\diferentestrue\fi}
+
+\def\!compara#1#2{\!comparaaux{#1}{#2}}
+
+%% Private Macro
+%% Absolute Value)
+%% \absoluto{n}{absn}
+%% input
+%% n - integer
+%% output
+%% absn - |n|
+\def\!absoluto#1#2{\aux=#1%
+ \ifnum \aux > 0
+ #2=\aux
+ \else
+ \multiply \aux by -1
+ #2=\aux
+ \fi}
+
+%% Name definitions for edge types and directions
+\def\solidarrow{0}
+\def\dashArrow{1}
+\def\dotArrow{2}
+\def\solidline{3}
+\def\dashline{4}
+\def\dotline{5}
+\def\injectionarrow{6}
+\def\aplicationarrow{7}
+\def\surjectivearrow{8}
+\def\equalline{9}
+\def\doublearrow{10}
+\def\doubleopposite{11}
+\def\nullarrow{12}
+
+%% Name definitions for edge label placement
+\def\atright{-1}
+\def\atleft{1}
+%% Tip direction for curved edges
+\def\pup{0}
+\def\pdown{1}
+\def\pright{2}
+\def\pleft{3}
+%% Type of graph
+\def\commdiag{0}
+\def\digraph{1}
+\def\undigraph{2}
+\def\cdigraph{3}
+\def\cundigraph{4}
+%% Positioning of labels in graphs
+\def\pcent{0}
+\def\north{1}
+\def\northeast{2}
+\def\east{3}
+\def\southeast{4}
+\def\south{5}
+\def\southwest{6}
+\def\west{7}
+\def\northwest{8}
+
+%%Private Macro
+%% Adjust the distance between the arrows and the objects regarding
+%% the dimensions of the objects.
+%%
+%% \ajusta{x}{xl}{y}{yl}{d}{Object} (ajusta = adjust)
+%%
+%% Input
+%% (x,y) e (xl,yl) - start, end coordinates of arrow
+%% d - distance specified by the user (default value, 100)
+%% Objecto - reference of the object pointed by the arrow
+%% Output
+%% d - adjusted distance
+%%
+%% The adjusted distance is the greatest value between 100 and the
+%% object's box dimensions. If the user specify a value this is not
+%% altered.
+%%
+%% If the arrow is horizontal the length is used.
+%% If the arrow is vertical the height is used for arrows in the 1st
+%% or 2nd quadrante, or the depth if the arrow is in the 3rd or 4th
+%% quadrante. If the arrow is oblique the value is chosen accordingly:
+%% from 315 to 45 degrees length is used
+%% from 45 to 135 degrees height is used
+%% from 135 to 225 degrees length is used
+%% from 225 to 315 degrees depth is used
+\def\!ajusta#1#2#3#4#5#6{\aux=#5%
+ \let\auxobj=#6%
+ \ifcase \tipografo % commutative diagrams
+ \ifnum\number\aux=100
+ \ajustadisttrue % if needed, adjust
+ \else
+ \ajustadistfalse % if not, keeps unchanged
+ \fi
+ \else % graphs (directed, undirected, with frames)
+ \ajustadistfalse
+ \fi
+ \ifajustadist
+ \let\pilhaaux=\pilha%
+ \loop%
+ \!topo{\pilha}%
+ \!retira{\pilha}%
+ \!compara{\!id}{\auxobj}%
+ \ifcompara\nvaziafalse \else\!pilhanvazia\pilha \fi%
+ \ifnvazia%
+ \repeat%
+%% push the values into the stack
+ \let\pilha=\pilhaaux%
+ \ifvazia%
+ \ifdiferentes%
+%%
+%% It is not possible to make de adjustment given the fact that the
+%% user did not provide a label for the object in question. We set a
+%% value equal to the default value (100)
+%%
+ \larg=131072% these values are for unit of .1pt
+ \prof=65536%
+ \alt=65536%
+ \fi%
+ \fi%
+ \divide\larg by 13107% these values are for unit of .1pt
+ \divide\prof by 6553%
+ \divide\alt by 6553%
+ \ifnum\number\yO=\number\yl
+%% Case 1 -- horizontal arrow
+%%
+%% with the division by 13107 we get half the size of the box, for a
+%% centered text, the adding of 30 is an empirical adjustment.
+ \advance\larg by 30
+ \ifnum\number\larg>\aux
+ #5=\larg
+ \fi
+ \else
+ \ifnum\number\xO=\number\xl
+ \ifnum\number\yl>\number\yO
+%% Case 2.1 -- vertical arrow, down direction
+%%
+ \ifnum\number\alt>\aux
+ #5=\alt
+ \fi
+ \else
+%% Case 2.2 -- vertical arrow, up direction
+%%
+%% with the division by 6553 we get the box height. The adjustment
+%% of 50 is an empirical adjustment.
+ \advance\prof by 50
+ \ifnum\number\prof>\aux
+ #5=\prof
+ \fi
+ \fi
+ \else
+%% Case 3 -- oblique arrow
+%% Case 3.1 --- from 315o to 45o; |x-xl|>|y-yl|
+%% Case 3.3 --- from 135o to 225o; |x-xl|>|y-yl|; Length
+ \auxqx=\xO
+ \advance\auxqx by -\xl
+ \!absoluto{\auxqx}{\auxqx}%
+ \auxqy=\yO
+ \advance\auxqy by -\yl
+ \!absoluto{\auxqy}{\auxqy}%
+ \ifnum\auxqx>\auxqy
+ \ifnum\larg<100
+ \larg=100
+ \fi
+ \advance\larg by 30
+ #5=\larg
+ \else
+%% Case 3.2 --- from 45o to 135o; |x-xl|<|y-yl| e y>0; Length
+ \ifnum\yl>\yO
+ \ifnum\larg<100
+ \larg=100
+ \fi
+ \advance\alt by 60
+ #5=\alt
+ \else
+%% Case 3.4 -- from 225o to 315o; |x-xl|<|y-yl| e y<0; Depth
+ \advance\prof by 110
+ #5=\prof
+ \fi
+ \fi
+ \fi
+ \fi
+\fi} % the branch else is missing
+
+%%Private Macro
+%% Square root
+%% raiz{n}{m} (raiz = root)
+%% ->
+%% n - natural number
+%% <-
+%% n - natural number
+%% m - greatest natural number less then the square root of n
+\def\!raiz#1#2{\auxa=#1%
+ \auxb=1%
+ \loop
+ \aux=\auxb%
+ \advance \aux by 1%
+ \multiply \aux by \aux%
+ \ifnum \aux < \auxa%
+ \advance \auxb by 1%
+ \paratrue%
+ \else\ifnum \aux=\auxa%
+ \advance \auxb by 1%
+ \paratrue%
+ \else\parafalse%
+ \fi
+ \fi
+ \ifpara%
+ \repeat
+#2=\auxb}
+
+%%Private Macro
+%% Find the starting and ending points of the "arrow" and also the
+%% label position (one coordinate at a time)
+%%
+%% ucoord{x1}{x2}{x3}{x4}{x5}{x6}{+|- 1}
+%% Input
+%% x1,x2,x3,x4,x5
+%% Output
+%% x6
+%%
+%% x2 - x1
+%% x6 = x3 +|- ------- x4
+%% x5
+\def\!ucoord#1#2#3#4#5#6#7{\aux=#2%
+ \advance \aux by -#1%
+ \multiply \aux by #4%
+ \divide \aux by #5%
+ \ifnum #7 = -1 \multiply \aux by -1 \fi%
+ \advance \aux by #3%
+#6=\aux}
+
+%%Private Macro
+%% Euclidean distance between two points
+%%
+%% quadrado = square
+%%
+%% quadrado{n}{m}{l}
+%% Input
+%% n - natural number
+%% m - natural number
+%% Output
+%% l = (n-m)*(n-m)
+\def\!quadrado#1#2#3{\aux=#1%
+ \advance \aux by -#2%
+ \multiply \aux by \aux%
+#3=\aux}
+
+%%Private Macro
+%% Euclidean distance between arrows and its tags
+%%
+%% Input
+%% (x,y), (x',y') morphism's name (tag)
+%% Output
+%% dnm - distance between an arrow and its tags
+%% (with a trim given by the tag's size
+%% Observations
+%% The trimming is for horizontal and vertical arrows
+%% only. Oblique arrows are dealt in a different way
+%%
+%% Algorithm
+%% caixa0 <- morfism name
+%% if x-xl = 0 then {vertical arrow}
+%% aux <- caixa0 width
+%% dnm <- converstion-sp-pt(aux)/2+3
+%% else {non-vertical arrow}
+%% if y-yl = 0 then {horizontal arrow}
+%% aux <- caixa0 height+depth
+%% dnm <- converstion-sp-pt(aux)/2+3
+%% else {oblique arrow}
+%% dnm <- 3
+%% endif
+%% endif
+%% endalgorithm
+\def\!distnomemor#1#2#3#4#5#6{\setbox0=\hbox{#5}%
+ \aux=#1
+ \advance \aux by -#3
+ \ifnum \aux=0
+ \aux=\wd0 \divide \aux by 13107%2
+ \advance \aux by 30
+ #6=\aux
+ \else
+ \aux=#2
+ \advance \aux by -#4
+ \ifnum \aux=0
+ \aux=\ht0 \advance \aux by \dp0 \divide \aux by 13107%2
+ \advance \aux by 30
+ #6=\aux%
+ \else
+ #6=30
+ \fi
+ \fi
+}
+
+%%
+%% The environment "begindc...enddc"
+%%
+\def\begindc#1{\!ifnextchar[{\!begindc{#1}}{\!begindc{#1}[30]}}
+\def\!begindc#1[#2]{\beginpicture
+ \let\pilha=\!vazia
+ \setcoordinatesystem units <.1pt,.1pt>
+ \expansao=#2
+ \ifcase #1
+ \distanciaobjmor=100
+ \tipoarco=0 % arrow
+ \tipografo=0 % commutative diagram
+ \or
+ \distanciaobjmor=20
+ \tipoarco=0 % arrow
+ \tipografo=1 % directed graph
+ \or
+ \distanciaobjmor=10
+ \tipoarco=3 % line
+ \tipografo=2 % undirected graph
+ \or
+ \distanciaobjmor=80
+ \tipoarco=0 % arrow
+ \tipografo=3 % directed graph
+ \or
+ \distanciaobjmor=80
+ \tipoarco=3 % line
+ \tipografo=4 % undirected graph
+ \fi}
+
+\def\enddc{\endpicture}
+
+\def\drawarrowhead <#1> [#2,#3]{%
+ \!ifnextchar<{\!drawarrowhead{#1}{#2}{#3}}{\!drawarrowhead{#1}{#2}{#3}<\!zpt,\!zpt> }}
+
+% Xingliang Liang <jkl9543@gmail.com>
+% ** \!ljoin (XCOORD,YCOORD)
+% ** Draws a straight line starting at the last point specified
+% ** by the most recent \!start, \!ljoin, or \!qjoin, and
+% ** ending at (XCOORD,YCOORD).
+\def\!ljoindummy (#1,#2){%
+ \advance\!intervalno by 1
+ \!xE=\!M{#1}\!xunit \!yE=\!M{#2}\!yunit
+ \!rotateaboutpivot\!xE\!yE
+ \!xdiff=\!xE \advance \!xdiff by -\!xS%** xdiff = xE - xS
+ \!ydiff=\!yE \advance \!ydiff by -\!yS%** ydiff = yE - yS
+ \!Pythag\!xdiff\!ydiff\!arclength% ** arclength = sqrt(xdiff**2+ydiff**2)
+ \global\advance \totalarclength by \!arclength%
+ %\!drawlinearsegment% ** set by dashpat to \!linearsolid or \!lineardashed
+ \!xS=\!xE \!yS=\!yE% ** shift ending points to starting points
+ \ignorespaces}
+
+%%
+%% \!drawarrowhead{4pt}{DimC}{DimD} <xshift,yshift> from {\xa} {\ya} to {\xb} {\yb}
+%%
+\def\!drawarrowhead#1#2#3<#4,#5> from #6 #7 to #8 #9 {%
+%
+% ** convert to dimensions
+ \!xloc=\!M{#8}\!xunit
+ \!yloc=\!M{#9}\!yunit
+ \!dxpos=\!xloc \!dimenA=\!M{#6}\!xunit \advance \!dxpos -\!dimenA
+ \!dypos=\!yloc \!dimenA=\!M{#7}\!yunit \advance \!dypos -\!dimenA
+ \let\!MAH=\!M% ** save current c/d mode
+ \!setdimenmode% ** go into dimension mode
+%
+ \!xshift=#4\relax \!yshift=#5\relax% ** pick up shift
+ \!reverserotateonly\!xshift\!yshift% ** back rotate shift
+ \advance\!xshift\!xloc \advance\!yshift\!yloc
+%
+% ** draw shaft of arrow
+ \!xS=-\!dxpos \advance\!xS\!xshift
+ \!yS=-\!dypos \advance\!yS\!yshift
+ \!start (\!xS,\!yS)
+ \!ljoindummy (\!xshift,\!yshift)
+%
+% ** find 32*cosine and 32*sine of angle of rotation
+ \!Pythag\!dxpos\!dypos\!arclength
+ \!divide\!dxpos\!arclength\!dxpos
+ \!dxpos=32\!dxpos \!removept\!dxpos\!!cos
+ \!divide\!dypos\!arclength\!dypos
+ \!dypos=32\!dypos \!removept\!dypos\!!sin
+%
+% ** construct arrowhead
+ \!halfhead{#1}{#2}{#3}% ** draw half of arrow head
+ \!halfhead{#1}{-#2}{-#3}% ** draw other half
+%
+ \let\!M=\!MAH% ** restore old c/d mode
+ \ignorespaces}
+
+%% Public macro: "mor"
+%%
+%% Funtion to built the "arrow" between two points
+%%
+%% The points that are uses to built all the elements of the "arrows"
+%% are:
+%%
+%% (xc,yc)
+%% o
+%% |
+%% o------o---------o---------o------o
+%%(x,y) (xa,ya) (xm,ym) (xb,yb)(xl,yl)
+%%
+%% auxa - distance between (x,y) and (xa,ya), 10pt by default
+%% auxb - distance between (xl,yl) and (xb,yb), 10pt by default
+%%
+\def\mor{%
+ \!ifnextchar({\!morxy}{\!morObjA}}
+\def\!morxy(#1,#2){%
+ \!ifnextchar({\!morxyl{#1}{#2}}{\!morObjB{#1}{#2}}}
+\def\!morxyl#1#2(#3,#4){%
+ \!ifnextchar[{\!mora{#1}{#2}{#3}{#4}}{\!mora{#1}{#2}{#3}{#4}[\number\distanciaobjmor,\number\distanciaobjmor]}}%
+\def\!morObjA#1{%
+ \let\pilhaaux=\pilha%
+ \def\objPartida{#1}%
+ \loop%
+ \!topo\pilha%
+ \!retira\pilha%
+ \!compara{\!id}{\objPartida}%
+ \ifcompara \nvaziafalse \else \!pilhanvazia\pilha \fi%
+ \ifnvazia%
+ \repeat%
+ \ifvazia%
+ \ifdiferentes%
+%%
+%% error message and ficticious parameters
+%%
+ Error: Incorrect label specification%
+ \xaux=1%
+ \yaux=1%
+ \fi%
+ \fi%
+ \let\pilha=\pilhaaux%
+ \!ifnextchar({\!morxyl{\number\xaux}{\number\yaux}}{\!morObjB{\number\xaux}{\number\yaux}}}
+\def\!morObjB#1#2#3{%
+ \xO=#1
+ \yO=#2
+ \def\objChegada{#3}%
+ \let\pilhaaux=\pilha%
+ \loop
+ \!topo\pilha %
+ \!retira\pilha%
+ \!compara{\!id}{\objChegada}%
+ \ifcompara \nvaziafalse \else \!pilhanvazia\pilha \fi
+ \ifnvazia
+ \repeat
+ \ifvazia
+ \ifdiferentes%
+%%
+%% error message and ficticious parameters
+%%
+ Error: Incorrect label specification
+ \xaux=\xO%
+ \advance\xaux by \xO%
+ \yaux=\yO%
+ \advance\yaux by \yO%
+ \fi
+ \fi
+ \let\pilha=\pilhaaux
+ \!ifnextchar[{\!mora{\number\xO}{\number\yO}{\number\xaux}{\number\yaux}}{\!mora{\number\xO}{\number\yO}{\number\xaux}{\number\yaux}[\number\distanciaobjmor,\number\distanciaobjmor]}}
+\def\!mora#1#2#3#4[#5,#6]#7{%
+ \!ifnextchar[{\!morb{#1}{#2}{#3}{#4}{#5}{#6}{#7}}{\!morb{#1}{#2}{#3}{#4}{#5}{#6}{#7}[1,\number\tipoarco] }}
+\def\!morb#1#2#3#4#5#6#7[#8,#9]{\xO=#1%
+ \yO=#2%
+ \xl=#3%
+ \yl=#4%
+ \multiply \xO by \expansao%
+ \multiply \yO by \expansao%
+ \multiply \xl by \expansao%
+ \multiply \yl by \expansao%
+%%
+%% Euclidean distance between two points
+%% d = \sqrt((x-xl)^2+(y-yl)^2)
+%%
+ \!quadrado{\number\xO}{\number\xl}{\auxa}%
+ \!quadrado{\number\yO}{\number\yl}{\auxb}%
+ \deuc=\auxa%
+ \advance \deuc by \auxb%
+ \!raiz{\deuc}{\deuc}%
+%%
+%% the point (xa,ya) is at a distance #5 (default value 100) from the
+%% point (x,y)
+%%
+%% given the fact that we have two points (start,end) we need to
+%% recover their value searching the stack
+ \auxa=#5
+ \!compara{\objNulo}{\objPartida}%
+ \ifdiferentes% adjusting only when needed
+ \!ajusta{\xO}{\xl}{\yO}{\yl}{\auxa}{\objPartida}%
+ \ajustatrue
+ \def\objPartida{}% reset the value of the starting object
+ \fi
+%% save the value of aux (after adjustment) to be used in the case of
+%% an injective morphism
+ \guardaauxa=\auxa
+%%
+ \!ucoord{\number\xO}{\number\xl}{\number\xO}{\auxa}{\number\deuc}{\xa}{1}%
+ \!ucoord{\number\yO}{\number\yl}{\number\yO}{\auxa}{\number\deuc}{\ya}{1}%
+%% auxa has the value of the distance between the objects minus the
+%% distance between the arrow and the objects (100 default value)
+ \auxa=\deuc%
+%%
+%% the point (xb,yb) is at a distance #6 (default value 100) from the
+%% point (xl,yl)
+%%
+ \auxb=#6
+ \!compara{\objNulo}{\objChegada}%
+ \ifdiferentes% adjusting only when needed
+% adjustment
+ \!ajusta{\xO}{\xl}{\yO}{\yl}{\auxb}{\objChegada}%
+ \def\objChegada{}% reset the value of the end object
+ \fi
+ \advance \auxa by -\auxb%
+ \!ucoord{\number\xO}{\number\xl}{\number\xO}{\number\auxa}{\number\deuc}{\xb}{1}%
+ \!ucoord{\number\yO}{\number\yl}{\number\yO}{\number\auxa}{\number\deuc}{\yb}{1}%
+ \xmed=\xa%
+ \advance \xmed by \xb%
+ \divide \xmed by 2
+ \ymed=\ya%
+ \advance \ymed by \yb%
+ \divide \ymed by 2
+%%
+%% find the coordinates of the label position: (xc,yc)
+%%
+%% after this the values of xmed and ymed are no longer important
+%%
+ \!distnomemor{\number\xO}{\number\yO}{\number\xl}{\number\yl}{#7}{\dnm}%
+ \!ucoord{\number\yO}{\number\yl}{\number\xmed}{\number\dnm}{\number\deuc}{\xc}{-#8}%
+ \!ucoord{\number\xO}{\number\xl}{\number\ymed}{\number\dnm}{\number\deuc}{\yc}{#8}%
+%%
+%% draw the "arrow"
+%%
+\ifcase #9 % 0=solid arrow
+ \arrow <4pt> [.2,1.1] from {\xa} {\ya} to {\xb} {\yb}
+\or % 1=dashed arrow
+ \setdashes <2pt>
+ \plot {\xa} {\ya} {\xb} {\yb} /
+ \setsolid%
+ \drawarrowhead <4pt> [.2,1.1] from {\xa} {\ya} to {\xb} {\yb}
+\or % 2=dotted arrow (Xingliang Liang <jkl9543@gmail.com> - 4.4.0)
+ \setdots <2pt>
+ \plot {\xa} {\ya} {\xb} {\yb} /
+ \setsolid%
+ \drawarrowhead <4pt> [.2,1.1] from {\xa} {\ya} to {\xb} {\yb}
+\or % 3=solid line
+ \setlinear
+ \plot {\xa} {\ya} {\xb} {\yb} /
+\or % 4=dashed line
+ \setdashes <2pt>
+ \setlinear
+ \plot {\xa} {\ya} {\xb} {\yb} /
+ \setsolid
+\or % 5=dotted line
+ \setdots <2pt>
+ \setlinear
+ \plot {\xa} {\ya} {\xb} {\yb} /
+ \setsolid
+\or % 6=injective arrow
+%%
+%% 30 units, the radius for the tail of the arrow
+%%
+%% recover the value of auxa
+ \auxa=\guardaauxa
+%% makes an adjustment to cope with the tail of the arrow, giving
+%% space to the semi-circle
+ \advance \auxa by 30%
+%%
+%% Note: the values of (xa,ya) will be modified, they will be
+%% "pushed" further away from (x,y) in order to acomodate the tail
+%% of the "arrow"
+%%
+%% find the point (xd,yd), the center of a 2pt (20*0.1) circle
+%%
+ \!ucoord{\number\xO}{\number\xl}{\number\xO}{\number\auxa}{\number\deuc}{\xa}{1}%
+ \!ucoord{\number\yO}{\number\yl}{\number\yO}{\number\auxa}{\number\deuc}{\ya}{1}%
+ \!ucoord{\number\yO}{\number\yl}{\number\xa}{20}{\number\deuc}{\xd}{-1}%
+ \!ucoord{\number\xO}{\number\xl}{\number\ya}{20}{\number\deuc}{\yd}{1}%
+%% building the "arrow"
+ \arrow <4pt> [.2,1.1] from {\xa} {\ya} to {\xb} {\yb}
+%% and its "tail"
+ \circulararc -180 degrees from {\xa} {\ya} center at {\xd} {\yd}
+\or % 7=maps "arrow" ("|-->")
+ \auxa=20 %
+%%
+%% Note: the values of xmed and ymed will be modified
+%%
+%% find the two points that defines the tail of the arrow (segment
+%% (xmed,ymed)(xd,yd))
+ \!ucoord{\number\yO}{\number\yl}{\number\xa}{\number\auxa}{\number\deuc}{\xmed}{-1}%
+ \!ucoord{\number\xO}{\number\xl}{\number\ya}{\number\auxa}{\number\deuc}{\ymed}{1}%
+ \!ucoord{\number\yO}{\number\yl}{\number\xa}{\number\auxa}{\number\deuc}{\xd}{1}%
+ \!ucoord{\number\xO}{\number\xl}{\number\ya}{\number\auxa}{\number\deuc}{\yd}{-1}%
+%% building the "arrow"
+ \arrow <4pt> [.2,1.1] from {\xa} {\ya} to {\xb} {\yb}
+%% and its "tail"
+ \setlinear
+ \plot {\xmed} {\ymed} {\xd} {\yd} /
+\or % 8=surjective arrow ("-->>")
+%% building arrow with the first tip
+ \arrow <4pt> [.2,1.1] from {\xa} {\ya} to {\xb} {\yb}
+%% and the second tip
+ \setlinear
+ \arrow <6pt> [0,.72] from {\xa} {\ya} to {\xb} {\yb}
+\or % 9=equalline
+%% by Ruben Debeerst: equal-line
+%%
+%% sets the separation (distance) between the two parallel lines, if
+%% horizontal or vertical 1pt (10*0.1) is enough, if not 1.1pt (11*0.1)
+\auxa=11
+\ifnum\number\yO=\number\yl
+\auxa=10
+\fi
+\ifnum\number\xO=\number\xl
+\auxa=10
+\fi
+%% the two parallel lines will be given by (xmed,ymed)(xd,yd), and
+%% (xe,ye)(xf,yf)
+ \!ucoord{\number\yO}{\number\yl}{\number\xa}{\number\auxa}{\number\deuc}{\xmed}{-1}%
+ \!ucoord{\number\xO}{\number\xl}{\number\ya}{\number\auxa}{\number\deuc}{\ymed}{1}%
+ \!ucoord{\number\yO}{\number\yl}{\number\xa}{\number\auxa}{\number\deuc}{\xd}{1}%
+ \!ucoord{\number\xO}{\number\xl}{\number\ya}{\number\auxa}{\number\deuc}{\yd}{-1}%
+
+ \!ucoord{\number\yO}{\number\yl}{\number\xb}{\number\auxa}{\number\deuc}{\xe}{-1}%
+ \!ucoord{\number\xO}{\number\xl}{\number\yb}{\number\auxa}{\number\deuc}{\ye}{1}%
+ \!ucoord{\number\yO}{\number\yl}{\number\xb}{\number\auxa}{\number\deuc}{\xf}{1}%
+ \!ucoord{\number\xO}{\number\xl}{\number\yb}{\number\auxa}{\number\deuc}{\yf}{-1}%
+ \setlinear
+ \plot {\xmed} {\ymed} {\xe} {\ye} /
+ \plot {\xd} {\yd} {\xf} {\yf} /
+\or % 10=double arrow
+%%
+%% sets the separation (distance) between the two parallel lines, if
+%% horizontal or vertical 2pt is enough, if not 2.5pt. The extra space
+%% is needed because of the arrow tip.
+\auxa=25
+\ifnum\number\yO=\number\yl
+\auxa=20
+\fi
+\ifnum\number\xO=\number\xl
+\auxa=20
+\fi
+%% the two parallel lines will be given by (xmed,ymed)(xd,yd), and
+%% (xe,ye)(xf,yf)
+ \!ucoord{\number\yO}{\number\yl}{\number\xa}{\number\auxa}{\number\deuc}{\xmed}{-1}%
+ \!ucoord{\number\xO}{\number\xl}{\number\ya}{\number\auxa}{\number\deuc}{\ymed}{1}%
+ \!ucoord{\number\yO}{\number\yl}{\number\xa}{\number\auxa}{\number\deuc}{\xd}{1}%
+ \!ucoord{\number\xO}{\number\xl}{\number\ya}{\number\auxa}{\number\deuc}{\yd}{-1}%
+
+ \!ucoord{\number\yO}{\number\yl}{\number\xb}{\number\auxa}{\number\deuc}{\xe}{-1}%
+ \!ucoord{\number\xO}{\number\xl}{\number\yb}{\number\auxa}{\number\deuc}{\ye}{1}%
+ \!ucoord{\number\yO}{\number\yl}{\number\xb}{\number\auxa}{\number\deuc}{\xf}{1}%
+ \!ucoord{\number\xO}{\number\xl}{\number\yb}{\number\auxa}{\number\deuc}{\yf}{-1}%
+ \arrow <4pt> [.2,1.1] from {\xmed} {\ymed} to {\xe} {\ye}
+ \arrow <4pt> [.2,1.1] from {\xd} {\yd} to {\xf} {\yf}
+\or % 10=double arrow, opposite directions
+%%
+%% sets the separation (distance) between the two parallel lines, if
+%% horizontal or vertical 2pt is enough, if not 2.5pt. The extra space
+%% is needed because of the arrow tip.
+\auxa=22
+\ifnum\number\yO=\number\yl
+\auxa=20
+\fi
+\ifnum\number\xO=\number\xl
+\auxa=20
+\fi
+%% the two parallel lines will be given by (xmed,ymed)(xd,yd), and
+%% (xe,ye)(xf,yf)
+ \!ucoord{\number\yO}{\number\yl}{\number\xa}{\number\auxa}{\number\deuc}{\xmed}{-1}%
+ \!ucoord{\number\xO}{\number\xl}{\number\ya}{\number\auxa}{\number\deuc}{\ymed}{1}%
+ \!ucoord{\number\yO}{\number\yl}{\number\xa}{\number\auxa}{\number\deuc}{\xd}{1}%
+ \!ucoord{\number\xO}{\number\xl}{\number\ya}{\number\auxa}{\number\deuc}{\yd}{-1}%
+
+ \!ucoord{\number\yO}{\number\yl}{\number\xb}{\number\auxa}{\number\deuc}{\xe}{-1}%
+ \!ucoord{\number\xO}{\number\xl}{\number\yb}{\number\auxa}{\number\deuc}{\ye}{1}%
+ \!ucoord{\number\yO}{\number\yl}{\number\xb}{\number\auxa}{\number\deuc}{\xf}{1}%
+ \!ucoord{\number\xO}{\number\xl}{\number\yb}{\number\auxa}{\number\deuc}{\yf}{-1}%
+ \arrow <4pt> [.2,1.1] from {\xmed} {\ymed} to {\xe} {\ye}
+ \arrow <4pt> [.2,1.1] from {\xf} {\yf} to {\xd} {\yd}
+\or % 11=null arrow (no arrow, only a label)
+%%
+%% does not draw the arrow, it allows to put two labels in one "arrow"
+%%
+\fi
+%% The label positioning.
+%% If the arrows are horizontal or verticals the box is built centered
+%% in the object center. If the arrows are oblique the box is built in
+%% such a way to avoid the arrow label, having in account the
+%% quadrante and the relative position of the arrow and the
+%% corresponding label
+\auxa=\xl
+\advance \auxa by -\xO%
+\ifnum \auxa=0
+ \put {#7} at {\xc} {\yc}
+\else
+ \auxb=\yl
+ \advance \auxb by -\yO%
+ \ifnum \auxb=0 \put {#7} at {\xc} {\yc}
+ \else
+ \ifnum \auxa > 0
+ \ifnum \auxb > 0
+ \ifnum #8=1
+ \put {#7} [rb] at {\xc} {\yc}
+ \else
+ \put {#7} [lt] at {\xc} {\yc}
+ \fi
+ \else
+ \ifnum #8=1
+ \put {#7} [lb] at {\xc} {\yc}
+ \else
+ \put {#7} [rt] at {\xc} {\yc}
+ \fi
+ \fi
+ \else
+ \ifnum \auxb > 0
+ \ifnum #8=1
+ \put {#7} [rt] at {\xc} {\yc}
+ \else
+ \put {#7} [lb] at {\xc} {\yc}
+ \fi
+ \else
+ \ifnum #8=1
+ \put {#7} [lt] at {\xc} {\yc}
+ \else
+ \put {#7} [rb] at {\xc} {\yc}
+ \fi
+ \fi
+ \fi
+ \fi
+\fi
+}
+
+%%
+%% Curved arrow command
+%%
+%% \cmor(<list of points (n. odd)>){<label>}
+%%
+%% The plot must be changed in such a way that its syntax is coherent
+%% with the other commands
+%%
+\def\modifplot(#1{\!modifqcurve #1}
+\def\!modifqcurve(#1,#2){\xO=#1%
+ \yO=#2%
+ \multiply \xO by \expansao%
+ \multiply \yO by \expansao%
+ \!start (\xO,\yO)
+ \!modifQjoin}
+\def\!modifQjoin(#1,#2)(#3,#4){\xO=#1%
+ \yO=#2%
+ \xl=#3%
+ \yl=#4%
+ \multiply \xO by \expansao%
+ \multiply \yO by \expansao%
+ \multiply \xl by \expansao%
+ \multiply \yl by \expansao%
+ \!qjoin (\xO,\yO) (\xl,\yl) % \!qjoin is defined in QUADRATIC
+ \!ifnextchar){\!fim}{\!modifQjoin}}
+\def\!fim){\ignorespaces}
+
+%%
+%% The command to draw the arrow tip receives the list of points, get
+%% from it the last pair of points and depending of the user choice
+%% the arrow tip is drawn.
+%%
+\def\setaxy(#1{\!pontosxy #1}
+\def\!pontosxy(#1,#2){%
+ \!maispontosxy}
+\def\!maispontosxy(#1,#2)(#3,#4){%
+ \!ifnextchar){\!fimxy#3,#4}{\!maispontosxy}}
+\def\!fimxy#1,#2){\xO=#1%
+ \yO=#2
+ \multiply \xO by \expansao
+ \multiply \yO by \expansao
+ \xl=\xO%
+ \yl=\yO%
+ \aux=1%
+ \multiply \aux by \auxa%
+ \advance\xl by \aux%
+ \aux=1%
+ \multiply \aux by \auxb%
+ \advance\yl by \aux%
+ \arrow <4pt> [.2,1.1] from {\xO} {\yO} to {\xl} {\yl}}
+
+
+%%
+%% The definition of the command "cmor"
+%%
+\def\cmor#1 #2(#3,#4)#5{%
+ \!ifnextchar[{\!cmora{#1}{#2}{#3}{#4}{#5}}{\!cmora{#1}{#2}{#3}{#4}{#5}[0] }}
+\def\!cmora#1#2#3#4#5[#6]{%
+ \ifcase #2% "\pup" (pointing up)
+ \auxa=0% x do not change
+ \auxb=1% y "up"
+ \or% \pdown" (pointing down)
+ \auxa=0% x do not change
+ \auxb=-1% y "down"
+ \or% "\pright" (pointing right)
+ \auxa=1% x "right"
+ \auxb=0% y do not change
+ \or% "\pleft" (pointing left)
+ \auxa=-1% x "left"
+ \auxb=0% y do not change
+ \fi % the line
+ \ifcase #6 % arrow solid
+ \modifplot#1% draw the line
+ % and the arrow tip
+ \setaxy#1
+ \or % arrow (with tip) dashed
+ \setdashes
+ \modifplot#1% draw the line
+ \setaxy#1
+ \setsolid
+ \or % arrow (without tip)
+ \modifplot#1% draw the line
+ \fi % injection morphism
+%% label
+ \xO=#3%
+ \yO=#4%
+ \multiply \xO by \expansao%
+ \multiply \yO by \expansao%
+ \put {#5} at {\xO} {\yO}}
+
+%%
+%% Command to build the objects
+%% \obj(x,y){<text>}[<label>]
+%%
+\def\obj(#1,#2){%
+ \!ifnextchar[{\!obja{#1}{#2}}{\!obja{#1}{#2}[Nulo]}}
+\def\!obja#1#2[#3]#4{%
+ \!ifnextchar[{\!objb{#1}{#2}{#3}{#4}}{\!objb{#1}{#2}{#3}{#4}[1]}}
+\def\!objb#1#2#3#4[#5]{%
+ \xO=#1%
+ \yO=#2%
+ \def\!pinta{\normalsize$\bullet$}% sets the normal size of the bullet
+ \def\!nulo{Nulo}%
+ \def\!arg{#3}%
+ \!compara{\!arg}{\!nulo}%
+ \ifcompara\def\!arg{#4}\fi%
+ \multiply \xO by \expansao%
+ \multiply \yO by \expansao%
+ \setbox\caixa=\hbox{#4}%
+ \!coloca{(\!arg)(#1,#2)(\number\ht\caixa,\number\wd\caixa,\number\dp\caixa)}{\pilha}%
+ \auxa=\wd\caixa \divide \auxa by 13107%2
+ \advance \auxa by 50
+ \auxb=\ht\caixa
+ \advance \auxb by \number\dp\caixa
+ \divide \auxb by 13107%2
+ \advance \auxb by 50
+ \ifcase \tipografo % commutative diagrams
+ \put{#4} at {\xO} {\yO}
+ \or % directed graphs
+ \ifcase #5 % c=0, placement of the object (c=center)
+ \put{#4} at {\xO} {\yO}
+ \or % n=1
+ \put{\!pinta} at {\xO} {\yO}
+ \advance \yO by \number\auxb % height+depth+5
+ \put{#4} at {\xO} {\yO}
+ \or % ne=2
+ \put{\!pinta} at {\xO} {\yO}
+ \advance \auxa by -2 % para fazer o ajuste (imperfeito)
+ \advance \auxb by -2 % ao raio da circunferencia de centro (x,y)
+ \advance \xO by \number\auxa % width+5
+ \advance \yO by \number\auxb % height+depth+5
+ \put{#4} at {\xO} {\yO}
+ \or % e=3
+ \put{\!pinta} at {\xO} {\yO}
+ \advance \xO by \number\auxa % width+5
+ \put{#4} at {\xO} {\yO}
+ \or % se=4
+ \put{\!pinta} at {\xO} {\yO}
+ \advance \auxa by -2 % para fazer o ajuste (imperfeito)
+ \advance \auxb by -2 % ao raio da circunferencia de centro (x,y)
+ \advance \xO by \number\auxa % width+5
+ \advance \yO by -\number\auxb % height+depth+5
+ \put{#4} at {\xO} {\yO}
+ \or % s=5
+ \put{\!pinta} at {\xO} {\yO}
+ \advance \yO by -\number\auxb % height+depth+5
+ \put{#4} at {\xO} {\yO}
+ \or % sw=6
+ \put{\!pinta} at {\xO} {\yO}
+ \advance \auxa by -20 % adjusting to the radius of the circle
+ \advance \auxb by -20 % with center in (x,y)
+ \advance \xO by -\number\auxa % width+5
+ \advance \yO by -\number\auxb % height+depth+5
+ \put{#4} at {\xO} {\yO}
+ \or % w=7
+ \put{\!pinta} at {\xO} {\yO}
+ \advance \xO by -\number\auxa % width+5
+ \put{#4} at {\xO} {\yO}
+ \or % nw=8
+ \put{\!pinta} at {\xO} {\yO}
+ \advance \auxa by -20 % adjusting to the radius of the circle
+ \advance \auxb by -20 % with center in (x,y)
+ \advance \xO by -\number\auxa % width+5
+ \advance \yO by \number\auxb % height+depth+5
+ \put{#4} at {\xO} {\yO}
+ \fi
+ \or % undirect graphs
+ \ifcase #5 % c=0
+ \put{#4} at {\xO} {\yO}
+ \or % n=1
+ \put{\!pinta} at {\xO} {\yO}
+ \advance \yO by \number\auxb % height+depth+5
+ \put{#4} at {\xO} {\yO}
+ \or % ne=2
+ \put{\!pinta} at {\xO} {\yO}
+ \advance \auxa by -20 % adjusting to the radius of the circle
+ \advance \auxb by -20 % with center in (x,y)
+ \advance \xO by \number\auxa % width+5
+ \advance \yO by \number\auxb % height+depth+5
+ \put{#4} at {\xO} {\yO}
+ \or % e=3
+ \put{\!pinta} at {\xO} {\yO}
+ \advance \xO by \number\auxa % width+5
+ \put{#4} at {\xO} {\yO}
+ \or % se=4
+ \put{\!pinta} at {\xO} {\yO}
+ \advance \auxa by -20 % see above
+ \advance \auxb by -20
+ \advance \xO by \number\auxa % width+5
+ \advance \yO by -\number\auxb % height+depth+5
+ \put{#4} at {\xO} {\yO}
+ \or % s=5
+ \put{\!pinta} at {\xO} {\yO}
+ \advance \yO by -\number\auxb % height+depth+5
+ \put{#4} at {\xO} {\yO}
+ \or % sw=6
+ \put{\!pinta} at {\xO} {\yO}
+ \advance \auxa by -20 % see above
+ \advance \auxb by -20
+ \advance \xO by -\number\auxa % width+5
+ \advance \yO by -\number\auxb % height+depth+5
+ \put{#4} at {\xO} {\yO}
+ \or % w=7
+ \put{\!pinta} at {\xO} {\yO}
+ \advance \xO by -\number\auxa % width+5
+ \put{#4} at {\xO} {\yO}
+ \or % nw=8
+ \put{\!pinta} at {\xO} {\yO}
+ \advance \auxa by -20 % see above
+ \advance \auxb by -20
+ \advance \xO by -\number\auxa % width+5
+ \advance \yO by \number\auxb % height+depth+5
+ \put{#4} at {\xO} {\yO}
+ \fi
+ \else % graphs with circular frames
+ \ifnum\auxa<\auxb % set aux to be the greatest dimension
+ \aux=\auxb
+ \else
+ \aux=\auxa
+ \fi
+% if the length of the box is less then 1em, the size of the circle is
+% adjust in order not to be less then 10pt
+ \ifdim\wd\caixa<1em
+ \dimen99 = 10pt
+ \aux=\dimen99
+ \divide \aux by 13107
+ \advance \aux by 50
+ \fi
+ \advance\aux by -20
+ \xl=\xO
+ \advance\xl by \aux
+ \ifnum\aux<120 % gives (more or less) three digits
+ \circulararc 360 degrees from {\xl} {\yO} center at {\xO} {\yO}
+ \else
+ \ellipticalarc axes ratio {\auxa}:{\auxb} 360 degrees from {\xl} {\yO} center at {\xO} {\yO}
+ \fi
+ \put{#4} at {\xO} {\yO}
+ \fi
+}
+
+
+\catcode`!=12 % ***** THIS MUST NEVER BE OMITTED (see PiCTeX)
diff --git a/macros/generic/diagrams/dcpic/europroc.cls b/macros/generic/diagrams/dcpic/europroc.cls
new file mode 100644
index 0000000000..9a17e0a23e
--- /dev/null
+++ b/macros/generic/diagrams/dcpic/europroc.cls
@@ -0,0 +1,332 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% LaTeX classfile for EuroTeX 2001 proceedings
+%
+% Copyright 2001 NTG / MAPS
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% provide for pdftex
+
+\newif\ifpdf
+\ifx \pdfoutput \undefined
+ \pdffalse
+\else
+ \ifnum \pdfoutput=1
+ \pdftrue
+ \pdfhorigin=1in
+ \pdfvorigin=1in
+ \else
+ \pdffalse
+ \fi
+\fi
+\paperwidth=21cm
+\paperheight=29.7cm
+\ifpdf
+ \pdfpagewidth=21cm
+ \pdfpageheight=29.7cm
+\fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% option processing and class loading
+
+\let\pagetopbot\null
+\def\paget@pb@t{%
+ \smash{\rlap{%
+ \rule[-3cm]{\paperwidth}{.4pt}}}%
+ \smash{\rlap{%
+ \rule[23.5cm]{\paperwidth}{.4pt}}}%
+}
+\DeclareOption{pagebounds}{\AtBeginDocument{\let\pagetopbot=\paget@pb@t}}
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
+\ProcessOptions\relax
+\LoadClass[twoside,a4paper,10pt]{article}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% general typography
+
+\parindent=1em
+
+% dropcaps
+\newdimen\dropht
+\newdimen\dropwd
+\newcount\dropct
+\newcount\dropctm
+\long\def\initial#1#2{%
+ \dropct=#1
+ \dropctm=#1\advance\dropctm-1%
+ \dropht=\dropctm\baselineskip
+ \advance\dropht1ex
+ \advance\dropht1pt
+ \sbox\@tempboxa{\resizebox{!}{\dropht}{#2}}%
+ \hangindent=\wd\@tempboxa
+ \advance\hangindent2pt
+ \hangafter=-\dropct
+ \noindent
+ \llap{\vbox{\null\vskip\dropct\baselineskip
+ \box\@tempboxa\vskip-\dropct\baselineskip\null
+ }}%
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% logos
+
+\def\logo#1{\mbox{\textsc{#1}}}
+\def\eurotex{\logo{eurotex}}
+\let\Eurotex\eurotex
+\let\EuroTex\eurotex
+\let\EuroTeX\eurotex
+\let\euroTeX\eurotex
+\let\euroTex\eurotex
+\def\LaTeX{\logo{latex}}
+\def\LaTeXe{\logo{latex}2$\epsilon$}
+\def\Context{\logo{context}}
+\let\ConTeXt\Context
+\let\conTeXt\Context
+\let\context\Context
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% page layout
+
+% copied/adapted from size10.clo
+\newdimen\le@ding\le@ding=12pt
+\topmargin=.5in
+\headheight=\le@ding
+\headsep=26pt
+\topskip=10pt
+\textheight=44\baselineskip
+\advance\textheight\topskip
+\textwidth=31pc
+\oddsidemargin=.5\paperwidth
+\advance\oddsidemargin-.5\textwidth
+\advance\oddsidemargin-1in
+\let\evensidemargin\oddsidemargin
+
+\raggedbottom
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% page styles
+
+% \pagetopbot defined at start of file
+\def\ps@empty{%
+ \let\@oddhead\@empty\let\@evenhead\@empty
+ \def\@oddfoot{%
+ \null\hskip-\oddsidemargin
+ \null\hskip-1in
+ \pagetopbot\hfil\null}%
+ \def\@evenfoot{%
+ \null\hskip-\evensidemargin
+ \null\hskip-1in
+ \pagetopbot\hfil\null}%
+}
+\let\ps@plain\ps@empty
+\def\ps@headings{%
+ \let\@mkboth\@gobbletwo
+ \def\@oddhead{%
+ \reset@font\hfil{\scshape\rightmark}\hfil\llap{\thepage}}%
+ \def\@evenhead{%
+ \reset@font\rlap{\thepage}\hfil{\scshape\leftmark}\hfil}%
+ \def\@oddfoot{%
+ \null\hskip-\oddsidemargin
+ \null\hskip-1in
+ \pagetopbot\hfil\null}%
+ \def\@evenfoot{%
+ \null\hskip-\evensidemargin
+ \null\hskip-1in
+ \pagetopbot\hfil\null}%
+% \let\@evenfoot\@empty\let\@oddfoot\@empty
+}
+\pagestyle{headings}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% maketitle
+
+\renewcommand\date[1]{\relax}
+\renewcommand\author[2][\@empty]{%
+ \gdef\@author{#2}\xdef\r@nauthor{\lowercase{#1}}%
+ \ifx\r@nauthor \@empty
+ \xdef \r@nauthor{\lowercase{#2}}%
+ \fi
+}
+\renewcommand\title[2][\@empty]{%
+ \gdef\@title{#2}\xdef\r@ntitle{\lowercase{#1}}%
+ \ifx\r@ntitle \@empty
+ \xdef \r@ntitle{\lowercase{#2}}%
+ \fi
+}
+\def\titleornament{%
+ \fontfamily{cmr}\fontencoding{OMS}\itshape
+ \char125\quad \char125\quad \char125%
+}
+%\def\titleornament{%
+% \fontfamily{pzd}\fontencoding{U}\small\selectfont F F F%
+%}
+\def\@maketitle{%
+ \newpage
+ \markboth{\lowercase{\r@nauthor}}{\lowercase{\@title}}%
+ \null
+ \reset@font
+ \vskip\baselineskip
+ \begin{center}
+ \reset@font
+ \vskip.7\baselineskip
+ {\titleornament\par}
+ \vskip1.3\baselineskip
+ \let\footnote\thanks
+ {\LARGE \itshape \@title \par}%
+ \vskip.5\baselineskip
+ {\scshape \@author}
+ \end{center}
+ \vskip2\baselineskip
+}
+\renewenvironment{abstract}{%
+ \begin{center}
+ \rightskip=1em plus 1fil
+ \leftskip=\rightskip\small
+ {\scshape abstract.}
+}{\par\end{center}}
+\newcommand\keywords[1]{{%
+ \rightskip=\parindent\leftskip=\parindent\small
+ \begin{center}
+ {\scshape keywords:} #1
+ \end{center}}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% sectioning
+
+\setcounter{secnumdepth}{-10}
+
+% parameters \@startsection:
+% 1 name, 2 level, 3 indent, 4 beforeskip, 5 afterskip, 6 style
+% beforeskip <0 -> no indent after
+% afterskip <0 -> run-in head
+\renewcommand{\section}{%
+ \@startsection{section}{1}{\z@}%
+ {-2.0\le@ding}{.5\le@ding}{\normalsize\sc\centering}%
+}
+\renewcommand{\subsection}{%
+ \@startsection{subsection}{2}{\z@}%
+ {-.8\le@ding}{1sp}{\large\itshape}%
+}
+\renewcommand{\subsubsection}{%
+ \@startsection{subsubsection}{3}{\z@}%
+ {-.4\le@ding}{-.5em}{\scshape}%
+}
+\def\appendixname{appendix}
+
+\def\midornament{%
+ \begin{center}
+ \vskip.5\le@ding
+ \rule{10pc}{.4pt}\\[-10pt]
+ \rule{6pc}{.2pt}\par
+ \vskip.5\le@ding
+ \end{center}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% enumerate/itemize/description
+
+\leftmargini=1.5em
+\leftmarginii=1.25em
+\leftmarginiii=1em
+\def\enumerate{%
+ \ifnum \@enumdepth >\thr@@\@toodeep\else
+ \advance\@enumdepth\@ne
+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}%
+ \expandafter
+ \list
+ \csname label\@enumctr\endcsname
+ {\usecounter\@enumctr\def\makelabel##1{\rlap{##1}}}%
+ \fi}
+\let\endenumerate =\endlist
+\def\itemize{%
+ \ifnum \@itemdepth >\thr@@\@toodeep\else
+ \advance\@itemdepth\@ne
+ \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
+ \expandafter
+ \list
+ \csname\@itemitem\endcsname
+ {\def\makelabel##1{\rlap{##1}}}%
+ \fi}
+\def\@listi{\leftmargin\leftmargini
+ \labelwidth0pt\labelsep\leftmargin
+ \parsep 0pt
+ \topsep 3\p@
+ \itemsep3\p@}
+\let\@listI\@listi
+\@listi
+\def\@listii {\leftmargin\leftmarginii
+ \labelwidth0pt\labelsep\leftmargin
+ \topsep 3\p@
+ \parsep 0\p@
+ \itemsep \parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth0pt\labelsep\leftmargin
+ \topsep 2\p@
+ \parsep \z@
+ \partopsep \p@
+ \itemsep \topsep}
+
+%\renewcommand\labelitemi{%
+% {\fontfamily{pzd}\fontencoding{U}\selectfont\char226}%
+%}
+\renewcommand\labelitemi{%
+ {\fontfamily{cmr}\fontencoding{OMS}\itshape\char5}%
+}
+\renewcommand\labelenumii{{\itshape\theenumii})}
+\renewcommand*\descriptionlabel[1]{%
+ \hspace\labelsep\normalfont\itshape #1%
+}
+
+\renewenvironment{quotation}
+ {\list{}{\rightmargin \leftmargin
+ \listparindent1.5em
+ \parsep \z@ \@plus\p@}%
+ \item\relax}
+ {\endlist}
+\renewenvironment{quote}
+ {\list{}{\rightmargin\leftmargin}%
+ \item\relax}
+ {\endlist}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% footnotes
+
+\let\footnoterule\relax
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% tabulars
+
+\arrayrulewidth.2pt
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% floats and captions
+
+\renewenvironment{figure}
+ {\@float{figure}\begin{center}\footnotesize}
+ {\par\end{center}\end@float}
+\renewenvironment{figure*}
+ {\@dblfloat{figure}\begin{center}\footnotesize}
+ {\par\end{center}\end@dblfloat}
+\renewenvironment{table}
+ {\@float{table}\begin{center}\footnotesize}
+ {\par\end{center}\end@float}
+\renewenvironment{table*}
+ {\@dblfloat{table}\begin{center}\footnotesize}
+ {\par\end{center}\end@dblfloat}
+\def\mystrut{\rule[-.3\baselineskip]{0pt}{\baselineskip}}
+\long\def\@makecaption#1#2{%
+ \vskip\abovecaptionskip\footnotesize
+ \sbox\@tempboxa{\mystrut\scshape #1: #2}%
+ \ifdim \wd\@tempboxa >\hsize
+ \mystrut\scshape #1: #2\par
+ \else
+ \global \@minipagefalse
+ \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
+ \fi
+ \vskip\belowcaptionskip}
+\renewcommand\figurename{figure}
+\renewcommand\tablename{table}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% bibliography
+
+\def\refname{references}
diff --git a/macros/generic/diagrams/dcpic/eurotex2001.pdf b/macros/generic/diagrams/dcpic/eurotex2001.pdf
new file mode 100644
index 0000000000..b115f62a5e
--- /dev/null
+++ b/macros/generic/diagrams/dcpic/eurotex2001.pdf
Binary files differ
diff --git a/macros/generic/diagrams/dcpic/eurotex2001.tex b/macros/generic/diagrams/dcpic/eurotex2001.tex
new file mode 100644
index 0000000000..4b54ad718c
--- /dev/null
+++ b/macros/generic/diagrams/dcpic/eurotex2001.tex
@@ -0,0 +1,916 @@
+% $Id: eurotex2001-pqa-article.tex,v 1.9 2001/11/12 09:53:59 pedro Exp pedro $
+\documentclass{europroc}
+\usepackage[dvips]{graphicx}
+\usepackage{dcpic,pictex}
+\usepackage{calrsfs}
+\usepackage{dsfont}
+\usepackage{alltt}
+
+
+
+\begin{document}
+
+\title[DCpic]{DCpic, Commutative Diagrams in a (La)\TeX\ Document}
+\author[Pedro Quaresma]{Pedro Quaresma\thanks{This work was partially
+supported by the Portuguese Ministry of Science and Technology (MCT),
+under the programme PRAXIS XXI.}\\ CISUC\\ Departamento de
+Matem{\'a}tica, Universidade de Coimbra\\ 3001-454 COIMBRA, PORTUGAL}
+
+
+\maketitle
+
+\begin{abstract}
+ DCpic is a package of \TeX\ macros for graphing Commutative Diagrams
+ in a (La)\TeX\ or Con\TeX t document. Its distinguishing features
+ are: the use of \PiCTeX\ a powerful graphical engine, and a simple
+ specification syntax. A commutative diagram is described in
+ terms of its objects and its arrows. The objects are
+ textual elements and the arrows can have various straight or curved
+ forms.
+
+ We describe the syntax and semantics of the user's commands, and
+ present many examples of their use.
+\end{abstract}
+
+\keywords{Commutative Diagrams, (La)\TeX, \PiCTeX}
+
+\section{Introduction}
+
+\initial{3}{C}{\scshape ommutative Diagrams} (Diagramas Comutativos,
+in Portuguese), are a kind of graphs which are widely used in Category
+Theory~\cite{Herrlich73,MacLane71,Pierce98}, not only as a concise and
+convenient notation but also for ``arrow chasing'', a powerful tool
+for mathematical thought. For example, the fact that in a Category we
+have arrow composition is easily expressed by the following
+commutative diagram.
+
+$$
+\begindc{\commdiag}[30]
+\obj(10,15){$A$}
+\obj(25,15){$B$}
+\obj(40,15){$C$}
+\mor(10,15)(25,15){$f$}
+\mor(25,15)(40,15){$g$}
+\cmor((10,11)(11,7)(15,6)(25,6)(35,6)(39,7)(40,11))
+\pup(25,3){$g\circ f$}
+\enddc
+$$
+
+The word commutative means that the result from going throught the
+path $f$ plus $g$ is equal to the result from going throught the path
+$g\circ f$. Most of the graphs used in Category Theory are digraphs which
+we can specify in terms of its objects, and its arrows.
+
+The (La)\TeX\ approach to typesetting can be characterized as
+``logical design''~\cite{Knuth86,Lamport94,Otten99}, but commutative
+diagrams are pieces of ``visual design'', and that, in our opinion is
+the {\em piece de resistance} of commutative diagrams package
+implementation in (La)\TeX. In a commutative diagrams package a user
+seeks the simplest notation, a logical notation, with the most
+powerful graphical engine possible, the visual part. The DCpic
+package, along with the package by John
+Reynolds~\cite{Feruglio94,Reynolds87}, has the simplest notation off
+all the commutative diagrams packages described in the Feruglio
+article~\cite{Feruglio94}. In terms of graphical capabilities the
+\PiCTeX~\cite{Wichura87} package provides us with the best
+\TeX-graphics engine, that is, without going to {\em Postscript}
+specials.
+
+The DCpic package depends only of \PiCTeX\ and \TeX,
+which means that you can use it in all formats that are based on these
+two. We have tested DCpic with \LaTeX, \TeX\ plain, pdf\LaTeX,
+pdf\TeX~\cite{Thanh99}, and Con\TeX t~\cite{Otten99}; we are confident
+that it can be used under many other formats.
+
+The present version (3.1) of DCpic package is available in CTAN and in
+the author's Web-page\footnote{http://www.mat.uc.pt/{\~{}}pedro/LaTeX/}.
+
+
+\section{Constructing Commutative Diagrams}
+
+DCpic depends on \PiCTeX, thus you must include an apropriate command
+to load \PiCTeX\ and DCpic in your document,
+e.g. ``{\tt $\backslash$usepackage\{dcpic,pictex\}}'', in a \LaTeX\ document.
+
+A commutative diagram in DCpic is a ``picture'' in \PiCTeX, in which
+we place our {\em objects} and {\em morphisms} (arrows). The user's
+commands in DCpic are: {\tt begindc} and {\tt enddc} which establishe
+the coordinate system where the objects will by placed; {\tt obj}, the
+command which defines the place and the contents of each object; {\tt
+mor}, and {\tt cmor}, the commands which define the morphisms, linear
+and curved arrows, and its labels.
+
+Now we will describe each of these commands in greater detail.
+
+\subsection{The Diagram Environment}
+
+The command {\tt begindc}, establishes a Cartesian coordinate system
+with 1pt units,
+
+\begin{alltt}
+ \(\backslash\)begindc[{\em<magnification factor>}] \dots \(\backslash\)enddc
+\end{alltt}
+such a small unit gives us a good control over the placement of the
+graphical objects, but in most of the diagrams not involving curved
+arrows such a ``fine grain'' is not desirable, so the optional
+argument specifies a magnifying factor $m\in\mathds{N}$, with a default
+value of 30. The advantage of this decision is twofold: we can define
+the ``grain'' of the diagram, and we can adjust the size of the
+diagram to the available space.
+\begin{itemize}
+\item a ``course grain'' diagram is specified almost as a table, with
+the numbers giving us the lines and the columns were the objects will
+be placed, the following diagram has the default magnification factor:
+
+\begin{center}
+ \begin{tabular}{cc}
+ \begindc{\commdiag}[300]
+ \obj(1,1){$A$}
+ \obj(3,1){$B$}
+ \obj(3,3){$C$}
+ \mor(1,1)(3,1){$f$}[\atright,\solidarrow]
+ \mor(1,1)(3,3){$g$}
+ \mor(3,1)(3,3){$h$}[\atright,\solidarrow]
+ \enddc &\tt
+ \begin{tabular}[b]{l}
+ $\backslash$begindc\{$\backslash$commdiag\}\\
+ $\backslash$obj(1,1)\{\$A\$\}\\
+ $\backslash$obj(3,1)\{\$B\$\}\\
+ $\backslash$obj(3,3)\{\$C\$\}\\
+ $\backslash$mor(1,1)(3,1)\{\$f\$\}[$\backslash$atright,$\backslash$solidarrow]\\
+ $\backslash$mor(1,1)(3,3)\{\$g\$\}\\
+ $\backslash$mor(3,1)(3,3)\{\$h\$\}[$\backslash$atright,$\backslash$solidarrow]\\
+ $\backslash$enddc
+ \end{tabular}
+ \end{tabular}
+\end{center}
+\item a ``fine grain'' diagram is a bit harder to design but it gives
+us a better control over the objects placement, the following diagram
+has a magnification factor of three, this gives us the capability of
+drawing the arrows $f$ and $f^\prime$ very close together:
+\begin{center}
+ \begin{tabular}{cc}
+ \begindc{\commdiag}[30]
+ \obj(10,10){$A$}
+ \obj(30,10){$B$}
+ \obj(30,30){$C$}
+ \mor(10,9)(30,9){$f$}[\atright,\solidarrow]
+ \mor(10,11)(30,11){$f^\prime$}
+ \mor(10,10)(30,30){$g$}
+ \mor(30,10)(30,30){$h$}[\atright,\solidarrow]
+ \enddc &\tt
+ \begin{tabular}[b]{l}
+ $\backslash$begindc\{$\backslash$commdiag\}[30]\\
+ $\backslash$obj(10,10)\{\$A\$\}\\
+ $\backslash$obj(30,10)\{\$B\$\}\\
+ $\backslash$obj(30,30)\{\$C\$\}\\
+ $\backslash$mor(10,9)(30,9)\{\$f\$\}[$\backslash$atright,$\backslash$solidarrow]\\
+ $\backslash$mor(10,11)(30,11)\{\$f{\^{}}$\backslash$prime\$\}\\
+ $\backslash$mor(10,10)(30,30)\{\$g\$\}\\
+ $\backslash$mor(30,10)(30,30)\{\$h\$\}[$\backslash$atright,$\backslash$solidarrow]\\
+ $\backslash$enddc
+ \end{tabular}
+ \end{tabular}
+\end{center}
+\item the magnification factor gives us the capability of adapting the
+ size of the diagram to the available space, without having to
+ redesign the diagram, for example the specification of the
+ next two diagrams differs only in the magnification factor: 30 for
+ the first; and 25 for the second.
+\begin{center}
+ \begin{tabular}{cc}
+ \begindc{\commdiag}[300]
+ \obj(1,1){$A$}
+ \obj(3,1){$B$}
+ \obj(3,3){$C$}
+ \mor(1,1)(3,1){$f$}[\atright,\solidarrow]
+ \mor(1,1)(3,3){$g$}
+ \mor(3,1)(3,3){$h$}[\atright,\solidarrow]
+ \enddc &
+ \begindc{\commdiag}[250]
+ \obj(1,1){$A$}
+ \obj(3,1){$B$}
+ \obj(3,3){$C$}
+ \mor(1,1)(3,1){$f$}[\atright,\solidarrow]
+ \mor(1,1)(3,3){$g$}
+ \mor(3,1)(3,3){$h$}[\atright,\solidarrow]
+ \enddc
+ \end{tabular}
+\end{center}
+\end{itemize}
+
+Note that the magnification factor does not interfere with the size of
+the objects, but only with the size of the diagram as a whole.
+
+After establishing our ``drawing board'' we can begin placing our
+``objects'' on it, we have three commands to do so, the {\tt obj},
+{\tt mor}, and {\tt cmor}, for objects, morphisms, and ``curved''
+morphisms respectively.
+
+
+\subsection{Objects}
+
+Each object has a place and a content
+
+\begin{alltt}
+ \(\backslash\)obj({\em<x>},{\em<y>})\{{\em<contents>}\}
+\end{alltt}
+the $x$ and $y$, integer values, will be multiplied by the magnifying
+factor. The {\em contents} will be put in the centre of an ``hbox''
+expanding to both sides of $(m\times x,m\times y)$.
+
+
+\subsection{Linear Arrows}
+
+
+Each linear arrow will have as mandatory arguments two pairs of
+coordinates, the beginning and the ending points, and a label,
+
+{\small\begin{alltt}
+\(\backslash\)mor({\em<x1>},{\em<y1>})({\em<x2>},{\em<y2>})[{\em<d1>},{\em<d2>}]\{{\em<label>}\}[{\em<label placement>},{\em<arrow type>}]
+\end{alltt}}%
+\noindent the other arguments are opcional. The two pairs of coordinates should
+coincide with the coordinates of two objects in the diagram, but no
+verification of this fact is made. The line connecting the two points
+is constructed in the following way: the beginning is given by a point
+10pt away from the point $(m\times x_1,m\times y_1)$, likewise the end point is
+10 points away from $(m\times x_2,m\times y_2)$. If the ``arrow type'' specifies
+that, a tail, and a pointer (arrow) will be added. If the arrow is
+horizontal (vertical) the label is placed in a ``hbox'' with centre
+point, $(x_l,y_l)$, at a distance of 10 points plus a correction
+factor depending of the ``hbox'' width (height) from the middle point
+of the arrow. If the arrow is obliquos the point $(x_l,y_l)$, at a
+distance of 10 points from the middle point of the arrow, will be the
+bottom-right corner or the top-left corner of the ``hbox'' containing
+the label, depending of the angle of the arrow, and the label
+placement. In all cases the position of the
+``hbox'' is such that the contents of it will not interfere with the
+line.
+
+The distance from the point $(m\times x_1,m\times y_1)$ to the actual beginning of the
+arrow may be modified by the user with the specification of $d_1$, the
+same thing happens for the arrow actual ending in which case the
+user-value will be $d_2$. The specification of $d_1$ and $d_2$ is
+optional.
+
+The placement of the label, to the left (default value), or to the
+right, and the type of the arrow: a solid arrow (default value), a
+dashed arrow, a line, an injection arrow, or an application arrow, are
+the last optional arguments of this command.
+
+
+\subsection{Quadratic Arrows}
+
+The command that draws curved lines in DCpic uses the {\tt
+setquadratic} command of \PiCTeX, this will imply a quadratic
+curve specified by an odd-number of points,
+
+{\small\begin{alltt}
+ \(\backslash\)cmor({\em<list of points>}){\textvisiblespace}{\em<arrow direction>}({\em<x>},{\em<y>})\{{\em<label>}\}[{\em<arrow type>}]
+\end{alltt}}
+\noindent the space after the list of points is mandatory. After drawing the
+curved line we must put the tip of the arrow on it, at present it is
+only possible to choose from: up, down, left, or right pointing arrow,
+and we must explicitly specify what type we want. The next thing to
+draw it is the arrow label, the placement of that label is determined
+by the $x$, and $y$ values which give us the coordinates, after being
+magnified, of the centre of the ``hbox'' that will contain the label
+itself.
+
+The arrow type is an optional argument, its default value is a solid
+arrow, the other possible values are a dashed arrow and a line, in
+this last case the arrow tip is omitted. The arrow type values are a
+subset of those of the {\tt mor} command.
+
+A rectangular curve with rounded corners is easy to specify and should
+cater for most needs, with this in mind we give the following tip to
+the user: to specify a rectangular, with rounded corners, curve we
+choose the points which give us the {\em expanded chess-horse
+movement}, that is, $(x,y)$, $(x\pm4,y\mp1)$, $(x\mp1,y\pm4)$, or
+$(x,y)$,$(x\pm1,y\mp4)$, $(x\mp4,y\pm1)$, those sets of points will give us
+the four corners of the rectangle; to form the whole line it is only
+necessary to add an odd number of points joining the two (or more)
+corners.
+
+
+\section{Examples}
+
+We now present some examples that give an idea of the DCpic package
+capabilities. We will present here the diagrams, and in the appendix
+the code which produced such diagrams.
+
+\subsection{The Easy Ones}
+
+The diagrams presented in this section are very easy to specify in the
+DCpic syntax, just a couple of objects and the arrows joining them.
+
+\begin{description}
+\item[Push-out and Exponentials:]
+
+
+$$
+\begindc{\commdiag}[260]
+\obj(1,1){$Z$}
+\obj(1,3){$X$}
+\obj(3,1){$Y$}
+\obj(3,3){$P$}
+\obj(5,5){$P^\prime$}
+\mor(1,1)(1,3){$f$}
+\mor(1,1)(3,1){$g$}[\atright,\solidarrow]
+\mor(1,3)(3,3){$r$}[\atright,\solidarrow]
+\mor(3,1)(3,3){$s$}
+\mor(1,3)(5,5){$r^\prime$}
+\mor(3,1)(5,5){$s^\prime$}[\atright,\solidarrow]
+\mor(3,3)(5,5){$h$}[\atright,\dashArrow]
+\enddc
+\qquad
+\begindc{\commdiag}[350]
+\obj(1,3)[A]{$Z^Y\times Y$}
+\obj(3,3)[B]{$Z$}
+\obj(3,1)[C]{$X\times{}Y$}
+\obj(4,1)[D]{$X$}
+\obj(4,3)[E]{$Z^Y$}
+\mor{A}{B}{$ev$}
+\mor{C}{A}{$f\times{}\mathrm{id}$}
+\mor{C}{B}{$\overline{f}$}[\atright,\dashArrow]
+\mor{D}{E}{$f$}[\atright,\solidarrow]
+\enddc
+$$
+
+\item[Function Restriction and the {\em CafeOBJ\/}
+Cube~\cite{Diaconescu98}]
+
+%\footnotetext{R. Diaconescu and K. Futatsugi, The CafeOBJ Report,
+%World Scientific, 1998}
+
+$$
+\begindc{\commdiag}[280]
+\obj(1,1){$X$}
+\obj(1,3){$X^\prime$}
+\obj(4,1){$Y$}
+\obj(4,3){$Y^\prime$}
+\mor(1,1)(4,1){$f$}
+\mor(1,3)(1,1){}[\atright,\injectionarrow]
+\mor(4,3)(4,1){}[\atright,\injectionarrow]
+\mor(1,3)(4,3){$g=f|^{Y^\prime}_{X^\prime}$}
+\enddc
+\qquad
+\begindc{\commdiag}[170]
+\obj(1,1){MSA}
+\obj(5,1){RWL}
+\obj(3,3){OSA}
+\obj(7,3){OSRWL}
+\obj(1,4){HSA}
+\obj(5,4){HSRWL}
+\obj(3,6){HOSA}
+\obj(7,6){HOSRWL}
+\mor{MSA}{RWL}{}
+\mor{MSA}{HSA}{}
+\mor{MSA}{OSA}{}
+\mor{RWL}{HSRWL}{}
+\mor{RWL}{OSRWL}{}
+\mor{OSA}{HOSA}{}
+\mor{OSA}{OSRWL}{}
+\mor{OSRWL}{HOSRWL}{}
+\mor{HSA}{HSRWL}{}
+\mor{HSA}{HOSA}{}
+\mor{HOSA}{HOSRWL}{}
+\mor{HSRWL}{HOSRWL}{}
+\enddc
+$$
+\end{description}
+
+\subsection{The Not so Easy}
+
+The diagrams presented in this section are a bit harder to specify. We
+have curved arrows, and also double arrows. The construction of the
+former was already explained. The double arrow (and triple, and \dots)
+is made with two distinct arrows drawn close to each other in a
+diagram with a very ``fine grain'', that is, using a magnifying factor
+of just 2 or 3.
+
+All the diagrams were made completely within DCpic.
+
+\begin{description}
+\item[Equaliser, and a 3-Category:]
+
+$$
+\begindc{\commdiag}[20]
+\obj(1,1){$Z$}
+\obj(1,36){$\overline{ X}$}
+\obj(36,36){$X$}
+\obj(52,36){$Y$}
+\mor(1,1)(1,36){$\overline{ h}$}[\atleft,\dashArrow]
+\mor(1,1)(36,36){$h$}[\atright,\solidarrow]
+\mor(1,36)(36,36){$e$}
+\mor(36,37)(52,37)[80,80]{$f$}
+\mor(36,35)(52,35)[80,80]{$g$}[\atright,\solidarrow]
+\enddc
+\qquad
+\begindc{\commdiag}[30]
+\obj(14,11){$A$}
+\obj(39,11){$C$}
+\obj(26,35){$B$}
+\mor(14,11)(39,11){$h$}[\atright,\solidarrow]
+\mor(14,11)(26,35){$f$}
+\mor(26,35)(39,11){$g$}
+\cmor((11,10)(10,10)(9,10)(5,11)(4,15)(5,19)(9,20)(13,19)(14,15))
+ \pdown(1,20){$id_A$}
+\cmor((42,10)(43,10)(44,10)(48,11)(49,15)(48,19)(44,20)(40,19)(39,15))
+ \pdown(52,20){$id_C$}
+\cmor((26,39)(27,43)(31,44)(35,43)(36,39)(35,36)(31,35))
+ \pleft(40,40){$id_B$}
+\enddc
+$$
+
+
+\item[Isomorfisms:]
+
+$$
+\begindc{\commdiag}[30]
+\obj(10,15){$A$}
+\obj(40,15){$A$}
+\obj(25,15){$B$}
+\mor(10,15)(25,15){$f$}
+\mor(25,15)(40,15){$g$}
+\cmor((10,11)(11,7)(15,6)(25,6)(35,6)(39,7)(40,11)) \pup(25,3){$id_A$}
+\obj(55,15){$B$}
+\obj(85,15){$B$}
+\obj(70,15){$A$}
+\mor(55,15)(70,15){$g$}
+\mor(70,15)(85,15){$f$}
+\cmor((55,11)(56,7)(60,6)(70,6)(80,6)(84,7)(85,11)) \pup(70,3){$id_B$}
+\enddc
+$$
+
+
+\item[Godement's ``five'' rules~\cite{Herrlich73}:]
+%\footnotetext{H. Herrlich and G. Strecker, Category Theory, Allyn and
+%Bacon Inc, 1973}
+
+$$
+\begindc{\commdiag}[70]
+\obj(12,10)[A]{$\mathcal{A}$}
+\obj(19,10)[B]{$\mathcal{B}$}
+\obj(26,10)[C]{$\mathcal{C}$}
+\obj(34,10)[D]{$\mathcal{D}$}
+\obj(41,10)[E]{$\mathcal{E}$}
+\obj(48,10)[F]{$\mathcal{F}$}
+\mor(12,10)(19,10){$L$}
+\mor(19,10)(26,10){$K$}
+\mor(26,10)(34,10){$V\qquad\ $}
+\mor(26,12)(34,12){$U$}
+\mor(26,12)(34,12){$\downarrow\xi$}[\atright,\solidarrow]
+\mor(26,8)(34,8){$\downarrow\eta$}
+\mor(26,8)(34,8){$W$}[\atright,\solidarrow]
+\mor(34,11)(41,11){$F$}
+\mor(34,9)(41,9){$\downarrow\mu$}
+\mor(34,9)(41,9){$H$}[\atright,\solidarrow]
+\mor(41,10)(48,10){$G$}
+\enddc
+$$
+\end{description}
+
+\subsection{The others \dots}
+
+It was already stated that some kinds of arrows are not supported in
+DCpic, e.g., $\Rightarrow$, but we can put a \PiCTeX\ command inside a DCpic
+diagram, so we can produce a diagram like the one that we will show
+now. Its complete specification within DCpic is not possible, at least
+for the moment.
+
+\begin{description}
+\item[Lax coproduct~\cite{Abramsky92}]
+
+$$
+\begindc{\commdiag}[30]
+\obj(10,50){$A$}
+\obj(50,50){$A\oplus B$}
+\obj(90,50){$B$}
+\obj(50,10){$C$}
+\obj(50,37){$[\sigma,\tau]$}
+\mor(10,50)(50,10){$f$}[\atright,\solidarrow]
+\mor(10,50)(50,50)[100,160]{$inl$}
+\mor(90,50)(50,50)[100,160]{$inr$}[\atright,\solidarrow]
+\mor(90,50)(50,10){$g$}
+\cmor((480,460)(440,300)(480,140)) \pdown(40,40){}[\solidline]
+\cmor((520,460)(560,300)(520,140)) \pdown(60,42){$[f,g]$}[\solidline]
+\arrow <6pt> [.2,.4] from 143 44 to 144 42
+\arrow <6pt> [.2,.4] from 157 44 to 156 42
+\setlinear
+% primeira implica{\c c}{\~a}o (simples)
+\plot 160 100 141 91 /
+\plot 160 104 140 94 /
+\arrow <8pt> [.4,.8] from 137 91 to 135 90
+% segunda implica{\c c}{\~a}o (quebrada)
+\plot 123 66 168 90 /
+\plot 122 69 168 94 /
+\plot 168 90 203 90 /
+\plot 168 94 203 94 /
+\arrow <8pt> [.4,.8] from 207 92 to 208 92
+\arrow <8pt> [.4,.8] from 120 66 to 118 65
+\obj(39,27)[inlfg]{\small $inl_{f,g}$}
+\obj(63,34)[inrfg]{\small $inr_{f,g}$}
+% terceira implica{\c c}{\~a}o (quebrada)
+\plot 132 55 136 60 /
+\plot 132 59 136 64 /
+\plot 136 60 173 60 /
+\plot 136 64 173 64 /
+\arrow <8pt> [.4,.8] from 178 62 to 179 62
+\arrow <8pt> [.4,.8] from 130 55 to 129 54
+\obj(45,17){$\sigma$}
+\obj(50,18){$\tau$}
+\enddc
+$$
+%\footnotetext{Handbook of Logic in Computer Science, Volume 1, Clarendon
+%Press, Oxford, 1992, pg. 511}
+
+\end{description}
+
+\section{DCpic compared}
+
+If one took the Feruglio article~\cite{Feruglio94} about typesetting
+commutative diagrams in (La)\TeX\ we can say that:
+
+\begin{itemize}
+\item the graphical capabilities of DCpic are among the
+ best. Excluding packages which use Postscript specials the DCpic
+ package is the best among available packages.
+\item the specification syntax is one of the simplest, the package by
+ John Reynolds has a very similar syntax.
+\end{itemize}
+
+We did not try to take any measure of computational performance.
+
+The following diagram is one of the test-diagrams used by Feruglio, as
+we can see DCpic performs very well, drawing the complete diagram
+based on a very simple specification.
+
+\newcommand{\barraA}{\vrule height2em width0em depth0em}
+\newcommand{\barraB}{\vrule height1.6em width0em depth0em}
+
+\centerline{
+\begindc{\commdiag}[350]
+\obj(1,1){$G$}
+\obj(3,1){$G_{r^*}$}
+\obj(5,1){$H$}
+\obj(2,2){$\Sigma^G$}
+\obj(6,2){$\Sigma^H$}
+\obj(1,3){$L_m$}
+\obj(3,3){$K_{r,m}$}
+\obj(5,3){$R_{m^*}$}
+\obj(1,5){$L$}
+\obj(3,5){$L_r$}
+\obj(5,5){$R$}
+\obj(2,6){$\Sigma^L$}
+\obj(6,6){$\Sigma^R$}
+\mor(1,1)(2,2){$\lambda^G$}
+\mor(3,1)(1,1){$i_5$}[\atleft,\aplicationarrow]
+\mor(3,1)(5,1){$r^*$}[\atright,\solidarrow]
+\mor(5,1)(6,2){$\lambda^H$}[\atright,\dashArrow]
+\mor(2,2)(6,2){$\varphi^{r^*}$}[\atright,\solidarrow]
+\mor(1,3)(1,1){$m$}[\atright,\solidarrow]
+\mor(1,3)(1,5){$i_2$}[\atleft,\aplicationarrow]
+\mor(3,3)(1,3)[140,100]{$i_3\quad$}[\atright,\aplicationarrow]
+\mor(3,3)(5,3)[140,100]{$r$}
+\mor(3,3)(3,5){$i_4$}[\atright,\aplicationarrow]
+\mor(3,3)(3,1){$\stackrel{\displaystyle m}{\barraB}$}
+\mor(5,3)(5,5){$i_6$}[\atright,\aplicationarrow]
+\mor(5,3)(5,1){$\stackrel{\displaystyle m^*}{\barraA}$}
+\mor(1,5)(2,6){$\lambda^L$}
+\mor(3,5)(1,5){$i_1\quad$}[\atright,\aplicationarrow]
+\mor(3,5)(5,5){$r$}
+\mor(5,5)(6,6){$\lambda^R$}[\atright,\solidarrow]
+\mor(2,6)(2,2){$\varphi^m$}[\atright,\solidarrow]
+\mor(2,6)(6,6){$\varphi^r$}
+\mor(6,6)(6,2){$\varphi^{m^*}$}
+\enddc
+}
+
+
+\section{Conclusions}
+
+We think that DCpic performs well in the ``commutative diagrams
+arena'', it is easy to use, with its commands we can produce
+the most usual types of commutative diagrams, and if we accept the use
+of \PiCTeX\ commands, we are capable of producing any kind of
+diagram. It is also a (La)\TeX -only package, that is, the file
+produced by DCpic does not contain any Postscript special, neither
+any special font, which in terms of portability is an advantage.
+
+The author and his colleagues in the Mathematics Department of Coimbra
+University have been using the (now) old version (2.1) of DCpic for
+some time with much success, some of the missing capabilities of the
+older version were incorporated in the new version (3.1), and the
+missing capabilities of the new version will be taken care in future
+versions.
+
+%\bibliographystyle{plain}
+
+%\bibliography{pedro}
+
+\newcommand{\noopsort}[1]{} \newcommand{\singleletter}[1]{#1}
+\begin{thebibliography}{10}
+
+\bibitem{Abramsky92}
+S.~Abramsky, Dov Gabbay, and T.~Maibaum, editors.
+\newblock {\em Handbook of Logic in Computer Science}, volume~1 of {\em Oxford
+ Science Publications}.
+\newblock Claredon Press, Oxford, 1992.
+
+\bibitem{Diaconescu98}
+R{\~a}zvan Diaconescu and Kokichi Futatsugi.
+\newblock {\em CafeOBJ Report: The Language, Proof Techniques, and
+ Methodologies for Object-Oriented Algebraic Specification}, volume~6 of {\em
+ AMAST series in Computing}.
+\newblock World Scientific, 1998.
+
+\bibitem{Feruglio94}
+{Gabriel Valiente} Feruglio.
+\newblock Typesetting commutative diagrams.
+\newblock {\em TUGboat}, 15(4):466--484, 1994.
+
+\bibitem{Herrlich73}
+Horst Herrlich and George Strecker.
+\newblock {\em Category Theory}.
+\newblock Allyn and Bacon Inc., 1973.
+
+\bibitem{Knuth86}
+Donald~E. Knuth.
+\newblock {\em The TeXbook}.
+\newblock Addison-Wesley Publishing Company, Reading,Massachusetts, 1986.
+
+\bibitem{Lamport94}
+Leslie Lamport.
+\newblock {\em {\LaTeX}: A Document Preparation System}.
+\newblock Addison-Wesley Publishing Company, Reading, Massachusetts, 2nd
+ edition, 1994.
+
+\bibitem{MacLane71}
+S.~MacLane.
+\newblock {\em Categories for the Working Mathematician}.
+\newblock Springer-Verlag, New York, 1971.
+
+\bibitem{Otten99}
+Ton Otten and Hans Hagen.
+\newblock {\em Con\TeX t an excursion}.
+\newblock Pragma ADE, Hasselt, 1999.
+
+\bibitem{Pierce98}
+Benjamin Pierce.
+\newblock {\em Basic Category Theory for Computer Scientists}.
+\newblock Foundations of Computing. The MIT Press, London, England, 1998.
+
+\bibitem{Reynolds87}
+John Reynolds.
+\newblock {\em User's Manual for Diagram Macros}.
+\newblock http://www.cs.cmu.edu/{\~{}}jcr/, 1987.
+\newblock {\tt diagmac.doc}.
+
+\bibitem{Thanh99}
+{H\`{a}n Th{$\acute{\hat{\mathrm e}}$}} Th\`{a}nh, Sebastian Rahtz, and Hans
+ Hagen.
+\newblock {\em The pdfTeX manual}, 1999.
+
+\bibitem{Wichura87}
+Michael Wichura.
+\newblock {\em The {\PiCTeX} Manual}.
+\newblock M. Pfeffer \& Co., New York, 1987.
+
+\end{thebibliography}
+
+\section{Appendix: The DCpic Specifications}
+
+\begin{description}
+
+\item[Push-out:] {\ }
+
+{\footnotesize
+\begin{verbatim}
+ \begindc{\commdiag}[260]
+ \obj(1,1){$Z$}
+ \obj(1,3){$X$}
+ \obj(3,1){$Y$}
+ \obj(3,3){$P$}
+ \obj(5,5){$P^\prime$}
+ \mor(1,1)(1,3){$f$}
+ \mor(1,1)(3,1){$g$}[\atright,\solidarrow]
+ \mor(1,3)(3,3){$r$}[\atright,\solidarrow]
+ \mor(3,1)(3,3){$s$}
+ \mor(1,3)(5,5){$r^\prime$}
+ \mor(3,1)(5,5){$s^\prime$}[\atright,\solidarrow]
+ \mor(3,3)(5,5){$h$}[\atright,\dashArrow]
+ \enddc
+\end{verbatim}
+}
+
+
+\item[Exponentials:] {\ }
+
+{\footnotesize
+\begin{verbatim}
+\begindc{\commdiag}[300]
+\obj(1,3){$Z^Y\times Y$}
+\obj(3,3){$Z$}
+\obj(3,1){$X\times{}Y$}
+\obj(4,1){$X$}
+\obj(4,3){$Z^Y$}
+\mor(1,3)(3,3)[20,10]{$ev$}
+\mor(3,1)(1,3){$f\times{}\mathrm{id}$}
+\mor(3,1)(3,3){$\overline{f}$}[\atright,\dashArrow]
+\mor(4,1)(4,3){$f$}[\atright,\solidarrow]
+\enddc
+\end{verbatim}
+}
+
+\item[Function Restriction:] {\ }
+
+{\footnotesize
+\begin{verbatim}
+\begindc{\commdiag}[280]
+\obj(1,1){$X$}
+\obj(1,3){$X^\prime$}
+\obj(3,1){$Y$}
+\obj(3,3){$Y^\prime$}
+\mor(1,1)(3,1){$f$}
+\mor(1,3)(1,1){}[\atright,\injectionarrow]
+\mor(3,3)(3,1){}[\atright,\injectionarrow]
+\mor(1,3)(3,3){$g=f|^{Y^\prime}_{X^\prime}$}
+\enddc
+\end{verbatim}
+}
+
+\item[{\em CafeOBJ\/} Cube:] {\ }
+
+{\footnotesize
+\begin{verbatim}
+\begindc{\commdiag}[170]
+\obj(1,1){MSA}
+\obj(5,1){RWL}
+\obj(3,3){OSA}
+\obj(7,3){OSRWL}
+\obj(1,4){HSA}
+\obj(5,4){HSRWL}
+\obj(3,6){HOSA}
+\obj(7,6){HOSRWL}
+\mor(1,1)(5,1)[15,15]{}
+\mor(1,1)(1,4){}
+\mor(1,1)(3,3){}
+\mor(5,1)(5,4){}
+\mor(5,1)(7,3){}
+\mor(3,3)(3,6){}
+\mor(3,3)(7,3)[15,22]{}
+\mor(7,3)(7,6){}
+\mor(1,4)(5,4)[15,22]{}
+\mor(1,4)(3,6){}
+\mor(3,6)(7,6)[17,26]{}
+\mor(5,4)(7,6){}
+\enddc
+\end{verbatim}
+}
+
+
+\item[Equaliser:] {\ }
+
+{\footnotesize
+\begin{verbatim}
+\begindc{\commdiag}[20]
+\obj(1,1){$Z$}
+\obj(1,36){$\overline{ X}$}
+\obj(36,36){$X$}
+\obj(52,36){$Y$}
+\mor(1,1)(1,36){$\overline{ h}$}[\atleft,\dashArrow]
+\mor(1,1)(36,36){$h$}[\atright,\solidarrow]
+\mor(1,36)(36,36){$e$}
+\mor(36,37)(52,37)[8,8]{$f$}
+\mor(36,35)(52,35)[8,8]{$g$}[\atright,\solidarrow]
+\enddc
+\end{verbatim}
+}
+
+
+\item[A 3-Category:] {\ }
+
+{\footnotesize
+\begin{verbatim}
+\begindc{\commdiag}[30]
+\obj(14,11){$A$}
+\obj(39,11){$C$}
+\obj(26,35){$B$}
+\mor(14,11)(39,11){$h$}[\atright,\solidarrow]
+\mor(14,11)(26,35){$f$}
+\mor(26,35)(39,11){$g$}
+\cmor((11,10)(10,10)(9,10)(5,11)(4,15)(5,19)(9,20)(13,19)(14,15))
+ \pdown(1,20){$id_A$}
+\cmor((42,10)(43,10)(44,10)(48,11)(49,15)(48,19)(44,20)(40,19)(39,15))
+ \pdown(52,20){$id_C$}
+\cmor((26,39)(27,43)(31,44)(35,43)(36,39)(35,36)(31,35)) \pleft(40,40){$id_B$}
+\enddc
+\end{verbatim}
+}
+
+\item[Isomorfisms:] {\ }
+
+{\footnotesize
+\begin{verbatim}
+\begindc{\commdiag}[30]
+\obj(10,15){$A$}
+\obj(40,15){$A$}
+\obj(25,15){$B$}
+\mor(10,15)(25,15){$f$}
+\mor(25,15)(40,15){$g$}
+\cmor((10,11)(11,7)(15,6)(25,6)(35,6)(39,7)(40,11)) \pup(25,3){$id_A$}
+\obj(55,15){$B$}
+\obj(85,15){$B$}
+\obj(70,15){$A$}
+\mor(55,15)(70,15){$g$}
+\mor(70,15)(85,15){$f$}
+\cmor((55,11)(56,7)(60,6)(70,6)(80,6)(84,7)(85,11)) \pup(70,3){$id_B$}
+\enddc
+\end{verbatim}
+}
+
+
+
+\item[Godement's ``five'' rules:] {\ }
+
+{\footnotesize
+\begin{verbatim}
+\begindc{\commdiag}[70]
+\obj(12,10){$\mathcal{A}$}
+\obj(19,10){$\mathcal{B}$}
+\obj(26,10){$\mathcal{C}$}
+\obj(34,10){$\mathcal{D}$}
+\obj(41,10){$\mathcal{E}$}
+\obj(48,10){$\mathcal{F}$}
+\mor(12,10)(19,10){$L$}
+\mor(19,10)(26,10){$K$}
+\mor(26,10)(34,10){$V\qquad\ $}
+\mor(26,12)(34,12){$U$}
+\mor(26,12)(34,12){$\downarrow\xi$}[\atright,\solidarrow]
+\mor(26,8)(34,8){$\downarrow\eta$}
+\mor(26,8)(34,8){$W$}[\atright,\solidarrow]
+\mor(34,11)(41,11){$F$}
+\mor(34,9)(41,9){$\downarrow\mu$}
+\mor(34,9)(41,9){$H$}[\atright,\solidarrow]
+\mor(41,10)(48,10){$G$}
+\enddc
+\end{verbatim}
+}
+
+\item[Lax coproduct:] Guess how.
+
+\item[DCpic and the others:] {\ }
+
+{\footnotesize
+\begin{verbatim}
+
+\begindc{\commdiag}[350]
+\obj(1,1){$G$}
+\obj(3,1){$G_{r^*}$}
+\obj(5,1){$H$}
+\obj(2,2){$\Sigma^G$}
+\obj(6,2){$\Sigma^H$}
+\obj(1,3){$L_m$}
+\obj(3,3){$K_{r,m}$}
+\obj(5,3){$R_{m^*}$}
+\obj(1,5){$L$}
+\obj(3,5){$L_r$}
+\obj(5,5){$R$}
+\obj(2,6){$\Sigma^L$}
+\obj(6,6){$\Sigma^R$}
+\mor(1,1)(2,2){$\lambda^G$}
+\mor(3,1)(1,1){$i_5$}[\atleft,\aplicationarrow]
+\mor(3,1)(5,1){$r^*$}[\atright,\solidarrow]
+\mor(5,1)(6,2){$\lambda^H$}[\atright,\dashArrow]
+\mor(2,2)(6,2){$\varphi^{r^*}$}[\atright,\solidarrow]
+\mor(1,3)(1,1){$m$}[\atright,\solidarrow]
+\mor(1,3)(1,5){$i_2$}[\atleft,\aplicationarrow]
+\mor(3,3)(1,3)[140,100]{$i_3\quad$}[\atright,\aplicationarrow]
+\mor(3,3)(5,3)[140,100]{$r$}
+\mor(3,3)(3,5){$i_4$}[\atright,\aplicationarrow]
+\mor(3,3)(3,1){$\stackrel{\displaystyle m}{\barraB}$}
+\mor(5,3)(5,5){$i_6$}[\atright,\aplicationarrow]
+\mor(5,3)(5,1){$\stackrel{\displaystyle m^*}{\barraA}$}
+\mor(1,5)(2,6){$\lambda^L$}
+\mor(3,5)(1,5){$i_1\quad$}[\atright,\aplicationarrow]
+\mor(3,5)(5,5){$r$}
+\mor(5,5)(6,6){$\lambda^R$}[\atright,\solidarrow]
+\mor(2,6)(2,2){$\varphi^m$}[\atright,\solidarrow]
+\mor(2,6)(6,6){$\varphi^r$}
+\mor(6,6)(6,2){$\varphi^{m^*}$}
+\enddc
+\end{verbatim}
+}
+
+\end{description}
+
+
+\end{document}
+
+
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: t
+%%% End:
diff --git a/macros/generic/diagrams/dcpic/examples.pdf b/macros/generic/diagrams/dcpic/examples.pdf
new file mode 100644
index 0000000000..48b8781577
--- /dev/null
+++ b/macros/generic/diagrams/dcpic/examples.pdf
Binary files differ
diff --git a/macros/generic/diagrams/dcpic/examples.tex b/macros/generic/diagrams/dcpic/examples.tex
new file mode 100644
index 0000000000..cf74991a03
--- /dev/null
+++ b/macros/generic/diagrams/dcpic/examples.tex
@@ -0,0 +1,776 @@
+\documentclass[12pt,a4paper]{article}
+\usepackage{pictexwd,dcpic}
+\usepackage{listings}
+\usepackage{a4wide}
+\usepackage{svn-multi}
+
+\svnidlong
+{$HeadURL: svn+ssh://gentzen.mat.uc.pt/var/lib/svn/DCPiC/CTAN5.0/examples.tex $}
+{$LastChangedDate: 2013-05-01 19:49:49 +0100 (Qua, 01 Mai 2013) $}
+{$LastChangedRevision: 15 $}
+{$LastChangedBy: pedro $}
+
+\svnid{$Id: manDCPiC.tex 11 2013-04-20 23:01:43Z pedro $}
+
+\voffset=-2cm
+%\hoffset=-1cm
+%\addtolength{\textwidth}{2cm}
+\addtolength{\textheight}{4cm}
+
+\newcommand{\barraA}{\vrule height2em width0em depth0em}
+\newcommand{\barraB}{\vrule height1.6em width0em depth0em}
+
+\newcommand{\docver}{\svnyear/\svnmonth/\svnday\ (v\svnrev)}
+
+
+\begin{document}
+
+
+% definição da linguagem de programação
+\lstset{language=TeX,
+ frame = single,
+ morekeywords={begindc,enddc,cmor,pup,commdiag,undigraph,digraph,cdigraph,cundigraph,obj,mor,pleft,pup,pdown,pright,north,northeast,east,southeast,south,southwest,west,northwest,atright,atleft,solidarrow,dashArrow,dotArrow,solidline,dashline,dotline,injectionarrow,aplicationarrow,surjectivearrow,equalline,doublearrow,doubleopposite,nullarrow},
+ basicstyle=\tiny}
+
+\begin{center}
+ \huge\bf DCpic - Examples - \docver
+\end{center}
+
+\section{Commutative Diagrams}
+
+\subsection{Curved Arrows}
+
+A rectangular curve with rounded corners is easy to specify and should
+cater for most needs. With this in mind we give the following tip to
+the user: to specify a rectangular, with rounded corners, curve we
+choose the points which give us the {\em expanded chess-horse
+ movement}, that is, $(x,y)$, $(x\pm4,y\mp1)$, $(x\mp1,y\pm4)$, or
+$(x,y)$,$(x\pm1,y\mp4)$, $(x\mp4,y\pm1)$, those sets of points will give us
+the four corners of the rectangle; to form the whole line it is only
+necessary to add an odd number of points joining the two (or more)
+corners.
+
+\begin{lstlisting}
+\begindc{\commdiag}
+\cmor((10,20)(6,21)(5,25)) \pup(5,15){$x$}
+\enddc
+\end{lstlisting}
+
+{\ }
+
+$$
+\begindc{\commdiag}
+\cmor((10,20)(6,21)(5,25)) \pup(5,15){$x$}
+\enddc
+$$
+
+
+
+\begin{lstlisting}
+\begindc{\commdiag}
+\obj(10,15){$A$}
+\obj(40,15)[Al]{$A$}
+\obj(25,15){$B$}
+\mor{$A$}{$B$}{$f$} \mor{$B$}{Al}{$g$}
+\cmor((10,11)(11,7)(15,6)(25,6)(35,6)(39,7)(40,11)) \pup(25,3){$id_A$}
+\enddc
+\end{lstlisting}
+
+$$
+\begindc{\commdiag}
+\obj(10,15){$A$}
+\obj(40,15)[Al]{$A$}
+\obj(25,15){$B$}
+\mor{$A$}{$B$}{$f$}
+\mor{$B$}{Al}{$g$}
+\cmor((10,11)(11,7)(15,6)(25,6)(35,6)(39,7)(40,11)) \pup(25,3){$id_A$}
+\enddc
+$$
+
+\begin{lstlisting}
+\begindc{\commdiag}
+\obj(14,11){$A$}
+\obj(39,11){$B$}
+\mor(14,12)(39,12){$f$} \mor(39,10)(14,10){$g$}
+\cmor((10,10)(6,11)(5,15)(6,19)(10,20)(14,19)(15,15)) \pdown(2,20){$id_A$}
+\cmor((40,7)(41,3)(45,2)(49,3)(50,7)(49,11)(45,12)) \pleft(54,3){$id_B$}
+\enddc
+\end{lstlisting}
+
+$$
+\begindc{\commdiag}
+\obj(14,11){$A$}
+\obj(39,11){$B$}
+\mor(14,12)(39,12){$f$}
+\mor(39,10)(14,10){$g$}
+\cmor((10,10)(6,11)(5,15)(6,19)(10,20)(14,19)(15,15)) \pdown(2,20){$id_A$}
+\cmor((40,7)(41,3)(45,2)(49,3)(50,7)(49,11)(45,12)) \pleft(54,3){$id_B$}
+\enddc
+$$
+
+
+\begin{lstlisting}
+\begindc{\commdiag}
+\obj(10,18){$A$}
+\obj(40,18){$B$}
+\cmor((10,20)(15,25)(20,20)(25,15)(30,20)(35,25)(40,20))
+\pdown(25,12){$f$}[2]
+\cmor((10,15)(15,10)(20,15)(25,20)(30,15)(35,10)(40,15))
+\pup(25,22){$g$}[2]
+\enddc
+\end{lstlisting}
+
+$$
+\begindc{\commdiag}
+\obj(10,18){$A$}
+\obj(40,18){$B$}
+\cmor((10,20)(15,25)(20,20)(25,15)(30,20)(35,25)(40,20))
+\pdown(25,12){$f$}[2]
+\cmor((10,15)(15,10)(20,15)(25,20)(30,15)(35,10)(40,15))
+\pup(25,22){$g$}[2]
+\enddc
+$$
+
+
+\vfill
+\pagebreak
+
+
+\subsection{Size Adjusting}
+
+In version 4 (v4.0) two new features are introduced, relative
+specification {\tt $\backslash$mor\{objA\}\{objB\}} instead of {\tt
+ $\backslash$mor(1,3)(4,5)}, and the arrows now automatically adjust
+their size to the object's box size.
+
+
+
+\begin{lstlisting}[basicstyle=\tiny]
+\begindc{\commdiag}[300]
+\obj(1,3)[objSum]{$\displaystyle\sum_{k=2}^n\left\lfloor\frac{\phi(k)}{k-1}\right\rfloor}$}
+\obj(4,5)[objB]{$B$}
+\obj(4,3)[objA]{$A$}
+\obj(4,1)[objBp]{$B$}
+\mor{objSum}{objB}{$f$}
+\mor{objB}{objA}{$g$}
+\mor{objSum}{objA}{$f\circ g$}[\atright,\solidarrow]
+\mor{objSum}{objBp}{$f$}[\atright,\solidarrow]
+\mor{objA}{objBp}{$g$}[\atright,\solidarrow]
+\enddc
+\end{lstlisting}
+
+$$
+\begindc{\commdiag}[300]
+\obj(1,3)[objSum]{$\displaystyle \sum_{k=2}^n \left\lfloor\frac{\phi(k)}{k-1}\right\rfloor$}
+\obj(4,5)[objB]{$B$}
+\obj(4,3)[objA]{$A$}
+\obj(4,1)[objBp]{$B$}
+\mor{objSum}{objB}{$f$}
+\mor{objB}{objA}{$g$}
+\mor{objSum}{objA}{$f\circ g$}[\atright,\solidarrow]
+\mor{objSum}{objBp}{$f$}[\atright,\solidarrow]
+\mor{objA}{objBp}{$g$}[\atright,\solidarrow]
+\enddc
+$$
+
+
+\begin{lstlisting}
+\begindc{\commdiag}[250]
+\obj(10,10)[A]{$OOOOOO$}\obj(15,10)[Aa]{$XXXX$}\obj(14,11)[Ab]{$XXXX$}
+\obj(13,12)[Ac]{$XXXX$}\obj(12,13)[Ad]{$XXXX$}\obj(11,14)[Ae]{$XXXX$}
+\obj(10,15)[Af]{$XXXX$}\obj(9,14)[Ag]{$BBBB$}\obj(8,13)[Ah]{$XXXX$}
+\obj(7,12)[Ai]{$XXXX$}\obj(6,11)[Aj]{$XXXX$}\obj(5,10)[Ak]{$XXXX$}
+\obj(6,9)[Al]{$XXXX$}\obj(7,8)[Am]{$XXXX$}\obj(8,7)[An]{$BBBB$}
+\obj(9,6)[Ao]{$CCCC$}\obj(10,5)[Ap]{$DDDD$}\obj(11,6)[Aq]{$EEEE$}
+\obj(12,7)[Ar]{$EEEE$}\obj(13,8)[As]{$EEEE$}\obj(14,9)[At]{$EEEE$}
+\mor{A}{Aa}{$a1$}\mor{A}{Ab}{$a2$}\mor{A}{Ac}{$a3$}\mor{A}{Ad}{$a4$}
+\mor{A}{Ae}{$a5$}\mor{A}{Af}{$a6$}\mor{A}{Ag}{$a7$}\mor{A}{Ah}{$a8$}
+\mor{A}{Ai}{$a9$}\mor{A}{Aj}{$a10$}\mor{A}{Ak}{$a11$}\mor{A}{Al}{$a12$}
+\mor{A}{Am}{$a13$}\mor{A}{An}{$a14$}\mor{A}{Ao}{$a15$}\mor{A}{Ap}{$a16$}
+\mor{A}{Aq}{$a17$}\mor{A}{Ar}{$a18$}\mor{A}{As}{$a19$}\mor{A}{At}{$a20$}
+\enddc
+\end{lstlisting}
+
+$$
+\begindc{\commdiag}[250]
+\obj(10,10)[A]{$OOOOOO$}\obj(15,10)[Aa]{$XXXX$}\obj(14,11)[Ab]{$XXXX$}
+\obj(13,12)[Ac]{$XXXX$}\obj(12,13)[Ad]{$XXXX$}\obj(11,14)[Ae]{$XXXX$}
+\obj(10,15)[Af]{$XXXX$}\obj(9,14)[Ag]{$BBBB$}\obj(8,13)[Ah]{$XXXX$}
+\obj(7,12)[Ai]{$XXXX$}\obj(6,11)[Aj]{$XXXX$}\obj(5,10)[Ak]{$XXXX$}
+\obj(6,9)[Al]{$XXXX$}\obj(7,8)[Am]{$XXXX$}\obj(8,7)[An]{$BBBB$}
+\obj(9,6)[Ao]{$CCCC$}\obj(10,5)[Ap]{$DDDD$}\obj(11,6)[Aq]{$EEEE$}
+\obj(12,7)[Ar]{$EEEE$}\obj(13,8)[As]{$EEEE$}\obj(14,9)[At]{$EEEE$}
+\mor{A}{Aa}{$a1$}\mor{A}{Ab}{$a2$}\mor{A}{Ac}{$a3$}\mor{A}{Ad}{$a4$}
+\mor{A}{Ae}{$a5$}\mor{A}{Af}{$a6$}\mor{A}{Ag}{$a7$}\mor{A}{Ah}{$a8$}
+\mor{A}{Ai}{$a9$}\mor{A}{Aj}{$a10$}\mor{A}{Ak}{$a11$}\mor{A}{Al}{$a12$}
+\mor{A}{Am}{$a13$}\mor{A}{An}{$a14$}\mor{A}{Ao}{$a15$}\mor{A}{Ap}{$a16$}
+\mor{A}{Aq}{$a17$}\mor{A}{Ar}{$a18$}\mor{A}{As}{$a19$}\mor{A}{At}{$a20$}
+\enddc
+$$
+
+\vfill
+\pagebreak
+
+
+\subsection{A Complex Diagram} {\ }
+
+\begin{lstlisting}
+\begindc{\commdiag}[350]
+\obj(1,1)[Gr]{$G$}
+\obj(3,1)[Grstar]{$G_{r^*}$}
+\obj(5,1)[H]{$H$}
+\obj(2,2)[SigmaG]{$\Sigma^G$}
+\obj(6,2)[SigmaH]{$\Sigma^H$}
+\obj(1,3)[Lm]{$L_m$}
+\obj(3,3)[Krm]{$K_{r,m}$}
+\obj(5,3)[Rmstar]{$R_{m^*}$}
+\obj(1,5)[L]{$L$}
+\obj(3,5)[Lr]{$L_r$}
+\obj(5,5)[R]{$R$}
+\obj(2,6)[SigmaL]{$\Sigma^L$}
+\obj(6,6)[SigmaR]{$\Sigma^R$}
+\mor{Gr}{SigmaG}{$\lambda^G$}
+\mor{Grstar}{Gr}{$i_5$}[\atleft,\aplicationarrow]
+\mor{Grstar}{H}{$r^*$}[\atright,\solidarrow]
+\mor{H}{SigmaH}{$\lambda^H$}[\atright,\dashArrow]
+\mor{SigmaG}{SigmaH}{$\varphi^{r^*}$}[\atright,\solidarrow]
+\mor{Lm}{Gr}{$m$}[\atright,\solidarrow]
+\mor{Lm}{L}{$i_2$}[\atleft,\aplicationarrow]
+\mor{Krm}{Lm}{$i_3\quad$}[\atright,\aplicationarrow]
+\mor{Krm}{Rmstar}{$r$}
+\mor{Krm}{Lr}{$i_4$}[\atright,\aplicationarrow]
+\mor{Krm}{Grstar}{$m$}
+\mor{Rmstar}{R}{$i_6$}[\atright,\aplicationarrow]
+\mor{Rmstar}{H}{$m^*$}
+\mor{L}{SigmaL}{$\lambda^L$}
+\mor{Lr}{L}{$i_1\quad$}[\atright,\aplicationarrow]
+\mor{Lr}{R}{$r$}
+\mor{R}{SigmaR}{$\lambda^R$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaG}{$\varphi^m$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaR}{$\varphi^r$}
+\mor{SigmaR}{SigmaH}{$\varphi^{m^*}$}
+\enddc
+\end{lstlisting}
+
+$$
+\begindc{\commdiag}[350]
+\obj(1,1)[Gr]{$G$}
+\obj(3,1)[Grstar]{$G_{r^*}$}
+\obj(5,1)[H]{$H$}
+\obj(2,2)[SigmaG]{$\Sigma^G$}
+\obj(6,2)[SigmaH]{$\Sigma^H$}
+\obj(1,3)[Lm]{$L_m$}
+\obj(3,3)[Krm]{$K_{r,m}$}
+\obj(5,3)[Rmstar]{$R_{m^*}$}
+\obj(1,5)[L]{$L$}
+\obj(3,5)[Lr]{$L_r$}
+\obj(5,5)[R]{$R$}
+\obj(2,6)[SigmaL]{$\Sigma^L$}
+\obj(6,6)[SigmaR]{$\Sigma^R$}
+\mor{Gr}{SigmaG}{$\lambda^G$}
+\mor{Grstar}{Gr}{$i_5$}[\atleft,\aplicationarrow]
+\mor{Grstar}{H}{$r^*$}[\atright,\solidarrow]
+\mor{H}{SigmaH}{$\lambda^H$}[\atright,\solidarrow] %dashArrow]
+\mor{SigmaG}{SigmaH}{$\varphi^{r^*}$}[\atright,\solidarrow]
+\mor{Lm}{Gr}{$m$}[\atright,\solidarrow]
+\mor{Lm}{L}{$i_2$}[\atleft,\aplicationarrow]
+\mor{Krm}{Lm}{$i_3\quad$}[\atright,\aplicationarrow]
+\mor{Krm}{Rmstar}{$r$}
+\mor{Krm}{Lr}{$i_4$}[\atright,\aplicationarrow]
+\mor{Krm}{Grstar}{$m$}
+\mor{Rmstar}{R}{$i_6$}[\atright,\aplicationarrow]
+\mor{Rmstar}{H}{$m^*$}
+\mor{L}{SigmaL}{$\lambda^L$}
+\mor{Lr}{L}{$i_1\quad$}[\atright,\aplicationarrow]
+\mor{Lr}{R}{$r$}
+\mor{R}{SigmaR}{$\lambda^R$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaG}{$\varphi^m$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaR}{$\varphi^r$}
+\mor{SigmaR}{SigmaH}{$\varphi^{m^*}$}
+\enddc
+$$
+
+\vfill
+\pagebreak
+
+\begin{lstlisting}[basicstyle=\tiny]
+\begindc{\commdiag}[40]
+\obj(10,10){$G$}[Gr]
+\obj(30,10){$G_{r^*}$}[Grstar]
+\obj(50,10){$H$}[H]
+\obj(20,20){$\Sigma^G$}[SigmaG]
+\obj(60,20){$\Sigma^H$}[SigmaH]
+\obj(10,30){$L_m$}[Lm]
+\obj(30,30){$K_{r,m}$}[Krm]
+\obj(50,30){$R_{m^*}$}[Rmstar]
+\obj(10,50){$L$}[L]
+\obj(30,50){$L_r$}[Lr]
+\obj(50,50){$R$}[R]
+\obj(20,60){$\Sigma^L$}[SigmaL]
+\obj(60,60){$\Sigma^R$}[SigmaR]
+\mor{Gr}{SigmaG}{$\lambda^G$}
+\mor{Grstar}{Gr}{$i_5$}[\atleft,\aplicationarrow]
+\mor{Grstar}{H}{$r^*$}[\atright,\solidarrow]
+\mor{H}{SigmaH}{$\lambda^H$}[\atright,\dashArrow]
+\mor{SigmaG}{SigmaH}{$\varphi^{r^*}$}[\atright,\solidarrow]
+\mor{Lm}{Gr}{$m$}[\atright,\solidarrow]
+\mor{Lm}{L}{$i_2$}[\atleft,\aplicationarrow]
+\mor{Krm}{Lm}{$i_3\quad$}[\atright,\aplicationarrow]
+\mor{Krm}{Rmstar}{$r$}
+\mor{Krm}{Lr}{$i_4$}[\atright,\aplicationarrow]
+\mor{Krm}{Grstar}{$m$}
+\mor{Rmstar}{R}{$i_6$}[\atright,\aplicationarrow]
+\mor{Rmstar}{H}{$m^*$}
+\mor{L}{SigmaL}{$\lambda^L$}
+\mor{Lr}{L}{$i_1\quad$}[\atright,\aplicationarrow]
+\mor{Lr}{R}{$r$}
+\mor{R}{SigmaR}{$\lambda^R$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaG}{$\varphi^m$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaR}{$\varphi^r$}
+\mor{SigmaR}{SigmaH}{$\varphi^{m^*}$}
+\cmor((10,7)(11,3)(15,2)(40,2)(65,2)(69,3)(70,7)(70,10)(70,14)(69,18)(65,19))
+\pleft(75,10){$\varphi^{r^*}\lambda^G$}
+\cmor((10,53)(10,58)(10,63)(11,67)(15,68)(45,68)(65,68)(69,67)(70,63)(70,44)(70,25)(69,21)(65,20))
+\pleft(76,40){$\varphi^{m^*}\varphi^r\lambda^L$}
+\enddc
+\end{lstlisting}
+
+{\ }
+
+$$
+\begindc{\commdiag}[40]
+\obj(10,10)[Gr]{$G$}
+\obj(30,10)[Grstar]{$G_{r^*}$}
+\obj(50,10)[H]{$H$}
+\obj(20,20)[SigmaG]{$\Sigma^G$}
+\obj(60,20)[SigmaH]{$\Sigma^H$}
+\obj(10,30)[Lm]{$L_m$}
+\obj(30,30)[Krm]{$K_{r,m}$}
+\obj(50,30)[Rmstar]{$R_{m^*}$}
+\obj(10,50)[L]{$L$}
+\obj(30,50)[Lr]{$L_r$}
+\obj(50,50)[R]{$R$}
+\obj(20,60)[SigmaL]{$\Sigma^L$}
+\obj(60,60)[SigmaR]{$\Sigma^R$}
+\mor{Gr}{SigmaG}{$\lambda^G$}
+\mor{Grstar}{Gr}{$i_5$}[\atleft,\aplicationarrow]
+\mor{Grstar}{H}{$r^*$}[\atright,\solidarrow]
+\mor{H}{SigmaH}{$\lambda^H$}[\atright,\dashArrow]
+\mor{SigmaG}{SigmaH}{$\varphi^{r^*}$}[\atright,\solidarrow]
+\mor{Lm}{Gr}{$m$}[\atright,\solidarrow]
+\mor{Lm}{L}{$i_2$}[\atleft,\aplicationarrow]
+\mor{Krm}{Lm}{$i_3\quad$}[\atright,\aplicationarrow]
+\mor{Krm}{Rmstar}{$r$}
+\mor{Krm}{Lr}{$i_4$}[\atright,\aplicationarrow]
+\mor{Krm}{Grstar}{$m$}
+\mor{Rmstar}{R}{$i_6$}[\atright,\aplicationarrow]
+\mor{Rmstar}{H}{$m^*$}
+\mor{L}{SigmaL}{$\lambda^L$}
+\mor{Lr}{L}{$i_1\quad$}[\atright,\aplicationarrow]
+\mor{Lr}{R}{$r$}
+\mor{R}{SigmaR}{$\lambda^R$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaG}{$\varphi^m$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaR}{$\varphi^r$}
+\mor{SigmaR}{SigmaH}{$\varphi^{m^*}$}
+\cmor((10,7)(11,3)(15,2)(40,2)(65,2)(69,3)(70,7)(70,10)(70,14)(69,18)(65,19))
+\pleft(75,10){$\varphi^{r^*}\lambda^G$}
+\cmor((10,53)(10,58)(10,63)(11,67)(15,68)(45,68)(65,68)(69,67)(70,63)(70,44)(70,25)(69,21)(65,20)) \pleft(76,40){$\varphi^{m^*}\varphi^r\lambda^L$}
+\enddc
+$$
+
+\vfill
+\pagebreak
+
+\begin{lstlisting}[basicstyle=\tiny]
+\begindc{\commdiag}[40]
+\obj(10,10)[Gr]{$G$}
+\obj(30,10)[Grstar]{$G_{r^*}$}
+\obj(50,10)[H]{$H$}
+\obj(20,20)[SigmaG]{$\Sigma^G$}
+\obj(60,20)[SigmaH]{$\Sigma^H$}
+\obj(10,30)[Lm]{$L_m$}
+\obj(30,30)[Krm]{$K_{r,m}$}
+\obj(50,30)[Rmstar]{$R_{m^*}$}
+\obj(10,50)[L]{$L$}
+\obj(30,50)[Lr]{$L_r$}
+\obj(50,50)[R]{$R$}
+\obj(20,60)[SigmaL]{$\Sigma^L$}
+\obj(60,60)[SigmaR]{$\Sigma^R$}
+\mor{Gr}{SigmaG}{$\lambda^G$}
+\mor{Grstar}{Gr}{$i_5$}[\atleft,\aplicationarrow]
+\mor{Grstar}{H}{$r^*$}[\atright,\solidarrow]
+\mor{H}{SigmaH}{$\lambda^H$}[\atright,\dashArrow]
+\mor{SigmaG}{SigmaH}{$\varphi^{r^*}$}[\atright,\solidarrow]
+\mor{Lm}{Gr}{$m$}[\atright,\solidarrow]
+\mor{Lm}{L}{$i_2$}[\atleft,\aplicationarrow]
+\mor{Krm}{Lm}{$i_3\quad$}[\atright,\aplicationarrow]
+\mor{Krm}{Rmstar}{$r$}
+\mor{Krm}{Lr}{$i_4$}[\atright,\aplicationarrow]
+\mor{Krm}{Grstar}{$m$}
+\mor{Rmstar}{R}{$i_6$}[\atright,\aplicationarrow]
+\mor{Rmstar}{H}{$m^*$}
+\mor{L}{SigmaL}{$\lambda^L$}
+\mor{Lr}{L}{$i_1\quad$}[\atright,\aplicationarrow]
+\mor{Lr}{R}{$r$}
+\mor{R}{SigmaR}{$\lambda^R$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaG}{$\varphi^m$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaR}{$\varphi^r$}
+\mor{SigmaR}{SigmaH}{$\varphi^{m^*}$}
+\cmor((10,7)(11,3)(15,2)(33,2)(53,2)(56,3)(61,8)(66,13)(69,16)(69,18)(65,19))
+\pleft(75,10){$\varphi^{r^*}\lambda^G$}
+\cmor((10,53)(10,54)(10,55)(11,59)(15,64)(19,67)(23,68)(44,68)(65,68)(69,67)%
+(70,63)(70,44)(70,25)(69,21)(65,20))
+\pleft(76,40){$\varphi^{m^*}\varphi^r\lambda^L$}
+\enddc
+\end{lstlisting}
+
+{\ }
+
+$$
+\begindc{\commdiag}[40]
+\obj(10,10)[Gr]{$G$}
+\obj(30,10)[Grstar]{$G_{r^*}$}
+\obj(50,10)[H]{$H$}
+\obj(20,20)[SigmaG]{$\Sigma^G$}
+\obj(60,20)[SigmaH]{$\Sigma^H$}
+\obj(10,30)[Lm]{$L_m$}
+\obj(30,30)[Krm]{$K_{r,m}$}
+\obj(50,30)[Rmstar]{$R_{m^*}$}
+\obj(10,50)[L]{$L$}
+\obj(30,50)[Lr]{$L_r$}
+\obj(50,50)[R]{$R$}
+\obj(20,60)[SigmaL]{$\Sigma^L$}
+\obj(60,60)[SigmaR]{$\Sigma^R$}
+\mor{Gr}{SigmaG}{$\lambda^G$}
+\mor{Grstar}{Gr}{$i_5$}[\atleft,\aplicationarrow]
+\mor{Grstar}{H}{$r^*$}[\atright,\solidarrow]
+\mor{H}{SigmaH}{$\lambda^H$}[\atright,\dashArrow]
+\mor{SigmaG}{SigmaH}{$\varphi^{r^*}$}[\atright,\solidarrow]
+\mor{Lm}{Gr}{$m$}[\atright,\solidarrow]
+\mor{Lm}{L}{$i_2$}[\atleft,\aplicationarrow]
+\mor{Krm}{Lm}{$i_3\quad$}[\atright,\aplicationarrow]
+\mor{Krm}{Rmstar}{$r$}
+\mor{Krm}{Lr}{$i_4$}[\atright,\aplicationarrow]
+\mor{Krm}{Grstar}{$m$}
+\mor{Rmstar}{R}{$i_6$}[\atright,\aplicationarrow]
+\mor{Rmstar}{H}{$m^*$}
+\mor{L}{SigmaL}{$\lambda^L$}
+\mor{Lr}{L}{$i_1\quad$}[\atright,\aplicationarrow]
+\mor{Lr}{R}{$r$}
+\mor{R}{SigmaR}{$\lambda^R$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaG}{$\varphi^m$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaR}{$\varphi^r$}
+\mor{SigmaR}{SigmaH}{$\varphi^{m^*}$}
+\cmor((10,7)(11,3)(15,2)(33,2)(53,2)(56,3)(61,8)(66,13)(69,16)(69,18)(65,19))
+\pleft(75,10){$\varphi^{r^*}\lambda^G$}
+\cmor((10,53)(10,54)(10,55)(11,59)(15,64)(19,67)(23,68)(44,68)(65,68)(69,67)(70,63)(70,44)(70,25)(69,21)(65,20))
+\pleft(76,40){$\varphi^{m^*}\varphi^r\lambda^L$}
+\enddc
+$$
+
+\vfill
+\pagebreak
+
+\section{Graphs}
+
+\subsection{Undirected Graphs --- Magnification Factor,}
+
+The magnification factor gives us the capability of adapting the size
+of the graph to the available space, without having to redesign the
+graph, for example the specification of the next two graphs differs
+only in the magnification factor: 200 for the first; and 160 for the
+second.
+
+\begin{center}
+ \begin{tabular}{cc}
+ \begindc{\undigraph}[200]
+ \obj(1,1)[1]{}
+ \obj(3,2)[2]{}
+ \obj(5,1)[3]{}
+ \obj(3,4)[4]{}
+ \mor{1}{2}{}
+ \mor{1}{3}{}
+ \mor{2}{3}{}
+ \mor{4}{1}{}
+ \mor{4}{3}{}
+ \mor{2}{4}{}
+ \enddc &\qquad
+ \begindc{\undigraph}[160]
+ \obj(1,1)[1]{}
+ \obj(3,2)[2]{}
+ \obj(5,1)[3]{}
+ \obj(3,4)[4]{}
+ \mor{1}{2}{}
+ \mor{1}{3}{}
+ \mor{2}{3}{}
+ \mor{4}{1}{}
+ \mor{4}{3}{}
+ \mor{2}{4}{}
+ \enddc
+ \end{tabular}
+\end{center}
+
+\begin{lstlisting}
+ \begindc{\undigraph}[200] \begindc{\undigraph}[160]
+ \obj(1,1)[1]{} \obj(1,1)[1]{}
+ \obj(3,2)[2]{} \obj(3,2)[2]{}
+ \obj(5,1)[3]{} \obj(5,1)[3]{}
+ \obj(3,4)[4]{} \obj(3,4)[4]{}
+ \mor{1}{2}{} \mor{1}{2}{}
+ \mor{1}{3}{} \mor{1}{3}{}
+ \mor{2}{3}{} \mor{2}{3}{}
+ \mor{4}{1}{} \mor{4}{1}{}
+ \mor{4}{3}{} \mor{4}{3}{}
+ \mor{2}{4}{} \mor{2}{4}{}
+ \enddc \enddc
+\end{lstlisting}
+
+\subsection{Undirected Graphs --- ``Around the World''}
+
+$$
+\begindc{\undigraph}[70]
+\obj(6,4){18}[\south]
+\obj(18,4){17}[\south]
+\obj(8,7){11}[\west]
+\obj(12,8){12}[\south]
+\obj(16,7){13}[\east]
+\obj(8,11){10}[\west]
+\obj(10,12){6}[\northwest]
+\obj(12,10){5}
+\obj(14,12){4}[\northeast]
+\obj(16,11){14}[\east]
+\obj(2,16){19}
+\obj(6,15){9}
+\obj(9,16){8} \obj(11,14){7}
+\obj(13,14){3}
+\obj(15,16){2}
+\obj(18,15){15}
+\obj(22,16){16}
+\obj(12,19){1}[\northeast]
+\obj(12,22){20}
+\mor{18}{17}{}
+\mor{18}{11}{}
+\mor{18}{19}{}
+\mor{11}{12}{}\mor{11}{10}{}\mor{12}{13}{}
+\mor{12}{5}{}\mor{10}{6}{}\mor{10}{9}{}
+\mor{5}{6}{}\mor{5}{4}{}
+\mor{13}{17}{}
+\mor{13}{14}{}\mor{9}{19}{}\mor{9}{8}{}
+\mor{6}{7}{}\mor{4}{3}{}\mor{4}{14}{}
+\mor{19}{20}{}\mor{8}{1}{}\mor{8}{7}{}
+\mor{7}{3}{}\mor{3}{2}{}\mor{2}{1}{}
+\mor{2}{15}{}\mor{14}{15}{}\mor{17}{16}{}
+\mor{16}{20}{}\mor{1}{20}{}\mor{15}{16}{}
+\enddc
+$$
+\begin{lstlisting}
+\begindc{\undigraph}[70]
+\obj(6,4){18}[\south]
+\obj(18,4){17}[\south]
+\obj(8,7){11}[\west]
+\obj(12,8){12}[\south]
+\obj(16,7){13}[\east]
+\obj(8,11){10}[\west]
+\obj(10,12){6}[\northwest]
+\obj(12,10){5}
+\obj(14,12){4}[\northeast]
+\obj(16,11){14}[\east]
+\obj(2,16){19} \obj(6,15){9} \obj(9,16){8} \obj(11,14){7}
+\obj(13,14){3} \obj(15,16){2} \obj(18,15){15} \obj(22,16){16}
+\obj(12,19){1}[\northeast]
+\obj(12,22){20}
+\mor{18}{17}{}\mor{18}{11}{}\mor{18}{19}{}\mor{11}{12}{}\mor{11}{10}{}\mor{12}{13}{}
+\mor{12}{5}{}\mor{10}{6}{}\mor{10}{9}{}\mor{5}{6}{}\mor{5}{4}{}\mor{13}{17}{}
+\mor{13}{14}{}\mor{9}{19}{}\mor{9}{8}{}\mor{6}{7}{}\mor{4}{3}{}\mor{4}{14}{}
+\mor{19}{20}{}\mor{8}{1}{}\mor{8}{7}{}\mor{7}{3}{}\mor{3}{2}{}\mor{2}{1}{}
+\mor{2}{15}{}\mor{14}{15}{}\mor{17}{16}{}\mor{16}{20}{}\mor{1}{20}{}\mor{15}{16}{}
+\enddc
+\end{lstlisting}
+
+\vfill
+\pagebreak
+
+
+\subsection{Directed Graphs}
+
+$$
+\begindc{\digraph}[250]
+\obj(1,5){A}[\west]
+\obj(1,3){B}[\west]
+\obj(1,1){C}[\west]
+\obj(5,5){E}[\east]
+\obj(5,3){F}[\east]
+\obj(5,1){G}[\east]
+\mor{A}{E}{5}
+\mor{A}{F}{3}
+\mor{B}{F}{6}[\atright,\solidarrow]
+\mor{C}{E}{1}
+\mor{C}{F}{5}
+\mor{C}{G}{7}
+\enddc
+$$
+
+
+\begin{lstlisting}
+\begindc{\digraph}[250]
+\obj(1,5){A}[\west]
+\obj(1,3){B}[\west]
+\obj(1,1){C}[\west]
+\obj(5,5){E}[\east]
+\obj(5,3){F}[\east]
+\obj(5,1){G}[\east]
+\mor{A}{E}{5} \mor{A}{F}{3}
+\mor{B}{F}{6}[\atright,\solidarrow]
+\mor{C}{E}{1} \mor{C}{F}{5} \mor{C}{G}{7}
+\enddc
+\end{lstlisting}
+
+\subsection{Circled Directed Graphs}
+
+$$
+\begindc{\cdigraph}[200]
+\obj(6,6)[A]{1800000}
+\obj(12,6){17}
+\obj(10,9){16}
+\mor{A}{17}[240,90]{}
+\mor{16}{17}[90,90]{}
+\mor{16}{A}[95,125]{}
+\enddc
+$$
+
+\begin{lstlisting}
+\begindc{\cdigraph}[200]
+\obj(6,6)[A]{1800000}
+\obj(12,6){17}
+\obj(10,9){16}
+\mor{A}{17}[240,90]{}
+\mor{16}{17}[90,90]{}
+\mor{16}{A}[95,125]{}
+\enddc
+\end{lstlisting}
+
+\subsection{Circled Undirected Graphs}
+
+Some fine adjustment is nedeeded in some lines.
+
+$$
+\begindc{\cundigraph}[130]
+\obj(6,4)[A]{18}[\south]\obj(18,4){17}[\south]
+\obj(8,7){11}[\west]\obj(12,8){12}[\south]
+\obj(16,7){13}[\east]\obj(8,11){10}[\west]
+\obj(10,12)[6]{6}[\south]\obj(12,10)[5]{5}[\east]
+\obj(14,12){4}[\northeast]\obj(16,11){14}[\east]
+\obj(2,16){19}[\west]\obj(6,15){9}
+\obj(9,16){8}\obj(11,14){7}[\west]
+\obj(13,14){3}\obj(15,16){2}
+\obj(18,15){15}\obj(22,16){16}[\east]
+\obj(12,19){1}[\west]\obj(12,22){20}[\north]
+\mor{A}{17}[80,80]{}\mor{A}{11}{}\mor{A}{19}{}\mor{11}{12}{}
+\mor{11}{10}{}\mor{12}{13}{}\mor{12}{5}{}\mor{10}{6}{}
+\mor{10}{9}{}\mor{5}{6}{}\mor{5}{4}{}\mor{13}{17}[80,80]{}
+\mor{13}{14}{}\mor{9}{19}{}\mor{9}{8}{}\mor{6}{7}{}
+\mor{4}{3}{}\mor{4}{14}{}\mor{19}{20}{}\mor{8}{1}{}
+\mor{8}{7}{}\mor{7}{3}{}\mor{3}{2}{}\mor{2}{1}{}
+\mor{2}{15}{}\mor{14}{15}{}\mor{17}{16}{}\mor{16}{20}{}
+\mor{1}{20}{}\mor{15}{16}{}
+\enddc
+$$
+
+
+\begin{lstlisting}
+\begindc{\cundigraph}[130]
+\obj(6,4)[A]{18}[\south]\obj(18,4){17}[\south]
+\obj(8,7){11}[\west]\obj(12,8){12}[\south]
+\obj(16,7){13}[\east]\obj(8,11){10}[\west]
+\obj(10,12)[6]{6}[\south]\obj(12,10)[5]{5}[\east]
+\obj(14,12){4}[\northeast]\obj(16,11){14}[\east]
+\obj(2,16){19}[\west]\obj(6,15){9}
+\obj(9,16){8}\obj(11,14){7}[\west]
+\obj(13,14){3}\obj(15,16){2}
+\obj(18,15){15}\obj(22,16){16}[\east]
+\obj(12,19){1}[\west]\obj(12,22){20}[\north]
+\mor{A}{17}[80,80]{}\mor{A}{11}{}\mor{A}{19}{}\mor{11}{12}{}
+\mor{11}{10}{}\mor{12}{13}{}\mor{12}{5}{}\mor{10}{6}{}
+\mor{10}{9}{}\mor{5}{6}{}\mor{5}{4}{}\mor{13}{17}[80,80]{}
+\mor{13}{14}{}\mor{9}{19}{}\mor{9}{8}{}\mor{6}{7}{}
+\mor{4}{3}{}\mor{4}{14}{}\mor{19}{20}{}\mor{8}{1}{}
+\mor{8}{7}{}\mor{7}{3}{}\mor{3}{2}{}\mor{2}{1}{}
+\mor{2}{15}{}\mor{14}{15}{}\mor{17}{16}{}\mor{16}{20}{}
+\mor{1}{20}{}\mor{15}{16}{}
+\enddc
+\end{lstlisting}
+
+\section{New Arrows and Lines in v4 and v5}
+
+\subsection{Dashed, Dotted Lines, Dotted Arrows, Equaline, \ldots}
+$$
+\begindc{\commdiag}[250]
+\obj(10,10)[A]{$OOOOOO$}
+\obj(15,10)[A0]{$A_0$}
+\obj(14,11)[A1]{$A_1$}
+\obj(13,12)[A2]{$A_2$}
+\obj(12,13)[A3]{$A_3$}
+\obj(10,14)[A4]{$A_4$}
+\obj(9,13)[A5]{$A_5$}
+\obj(8,12)[A6]{$A_6$}
+\obj(7,11)[A7]{$A_7$}
+\obj(6,10)[A8]{$A_8$}
+\obj(7,9)[A9]{$A_9$}
+\obj(9,8)[A10]{$A_{10}$}
+\obj(12,8)[A11]{$A_{11}$}
+\mor{A}{A0}{$a_0$}[\atright,\solidarrow]
+\mor{A}{A1}{$a_1$}[\atright,\dashArrow]
+\mor{A}{A2}{$a_2$}[\atright,\dotArrow]
+\mor{A}{A3}{$a_3$}[\atright,\solidline]
+\mor{A}{A4}{$a_4$}[\atright,\dashline]
+\mor{A}{A5}{$a_5$}[\atleft,\dotline]
+\mor{A}{A6}{$a_6$}[\atleft,\injectionarrow]
+\mor{A}{A7}{$a_7$}[\atleft,\aplicationarrow]
+\mor{A}{A8}{$a_8$}[\atleft,\surjectivearrow]
+\mor{A}{A9}{$a_9$}[\atleft,\equalline]
+\mor{A}{A10}{$a_{10}$}[\atleft,\doublearrow]
+\mor{A}{A11}{$a_{11}$}[\atleft,\doubleopposite]
+\mor{A}{A11}{$a_{12}$}[\atright,\nullarrow]
+\enddc
+$$
+
+
+\begin{lstlisting}
+\begindc{\commdiag}[250]
+\obj(10,10)[A]{$OOOOOO$}
+\obj(15,10)[A0]{$A_0$}
+\obj(14,11)[A1]{$A_1$}
+\obj(13,12)[A2]{$A_2$}
+\obj(12,13)[A3]{$A_3$}
+\obj(10,14)[A4]{$A_4$}
+\obj(9,13)[A5]{$A_5$}
+\obj(8,12)[A6]{$A_6$}
+\obj(7,11)[A7]{$A_7$}
+\obj(6,10)[A8]{$A_8$}
+\obj(7,9)[A9]{$A_9$}
+\obj(9,8)[A10]{$A_{10}$}
+\obj(12,8)[A11]{$A_{11}$}
+\mor{A}{A0}{$a_0$}[\atright,\solidarrow]
+\mor{A}{A1}{$a_1$}[\atright,\dashArrow]
+\mor{A}{A2}{$a_2$}[\atright,\dotArrow]
+\mor{A}{A3}{$a_3$}[\atright,\solidline]
+\mor{A}{A4}{$a_4$}[\atright,\dashline]
+\mor{A}{A5}{$a_5$}[\atleft,\dotline]
+\mor{A}{A6}{$a_6$}[\atleft,\injectionarrow]
+\mor{A}{A7}{$a_7$}[\atleft,\aplicationarrow]
+\mor{A}{A8}{$a_8$}[\atleft,\surjectivearrow]
+\mor{A}{A9}{$a_9$}[\atleft,\equalline]
+\mor{A}{A10}{$a_{10}$}[\atleft,\doublearrow]
+\mor{A}{A11}{$a_{11}$}[\atleft,\doubleopposite]
+\mor{A}{A11}{$a_{12}$}[\atright,\nullarrow]
+\enddc
+\end{lstlisting}
+
+
+
+\end{document}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: t
+%%% End:
diff --git a/macros/generic/diagrams/dcpic/manDCPiC.pdf b/macros/generic/diagrams/dcpic/manDCPiC.pdf
new file mode 100644
index 0000000000..92d8cbdf8f
--- /dev/null
+++ b/macros/generic/diagrams/dcpic/manDCPiC.pdf
Binary files differ
diff --git a/macros/generic/diagrams/dcpic/manDCPiC.tex b/macros/generic/diagrams/dcpic/manDCPiC.tex
new file mode 100644
index 0000000000..d621bf8ce9
--- /dev/null
+++ b/macros/generic/diagrams/dcpic/manDCPiC.tex
@@ -0,0 +1,723 @@
+% $Id: manDCPiC.tex 12 2013-04-21 15:22:57Z pedro $
+\documentclass[11pt]{article}
+\usepackage{dcpic,pictex}
+\usepackage{verbatim}
+\usepackage{url}
+\usepackage{svn-multi}
+\usepackage{listings}
+\usepackage{a4wide}
+
+\svnidlong
+{$HeadURL: svn+ssh://gentzen.mat.uc.pt/var/lib/svn/DCPiC/CTAN5.0/manDCPiC.tex $}
+{$LastChangedDate: 2013-05-01 19:49:49 +0100 (Qua, 01 Mai 2013) $}
+{$LastChangedRevision: 15 $}
+{$LastChangedBy: pedro $}
+
+\svnid{$Id: manDCPiC.tex 12 2013-04-21 15:22:57Z pedro $}
+
+\newcommand{\docversion}{\svnyear/\svnmonth/\svnday\ (v\svnrev)}
+
+\def\dcpicversion{v5.0.0}
+
+\lstset{language=TeX,
+ frame = single,
+ morekeywords={begindc,enddc,cmor,pup,commdiag,undigraph,digraph,cdigraph,cundigraph,obj,mor,pleft,pup,pdown,pright,north,northeast,east,southeast,south,southwest,west,northwest,atright,atleft,solidarrow,dashArrow,dotArrow,solidline,dashline,dotline,injectionarrow,aplicationarrow,surjectivearrow,equalline,doublearrow,doubleopposite,nullarrow},
+ basicstyle=\scriptsize}
+
+
+\begin{document}
+
+\title{DCpic \dcpicversion\\
+\docversion}
+\author{Pedro Quaresma\\ CISUC/Mathematics Department,
+ University of Coimbra\\ 3001-454 COIMBRA, PORTUGAL\\ {\tt
+ pedro@mat.uc.pt}\quad phone: +351-239~791~170\quad fax:
+ +351-239~832~568}
+\date{2013/05/01}
+
+% Esta defini\c c\~ao \'e \'util para a convers\~ao LaTeX2HTML
+%\def\PiCTeX{PiC\TeX}
+
+\maketitle
+
+\vfill
+\begin{quotation}
+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 Pedro Quaresma (pedro@mat.uc.pt).
+
+This work consists of the files dcpic.sty, examples.tex,
+manDCPiC.tex, manDCPiCpt.tex
+\end{quotation}
+
+\vspace*{2cm}
+\noindent Coimbra, 2013/05/01\\
+Pedro Quaresma
+
+\pagebreak
+\section{History}
+
+
+\begin{description}
+\item[11/1990 - Version 1.0]
+\item[10/1991 - Version 1.1]
+\item[9/1993 - Version 1.2:] the distance from the arrow end
+ points and the objects became a fixed number (10units), the distance
+ arguments became optional. A new option for the arrows was introduced.
+\item[3/1995 - Version 1.3:] the distance from the arrow to its
+ label became fixed in 10units. A new option for the arrows was introduced.
+\item[7/1996 - Version 2.1:] a new syntax for the ``{\tt mor}''
+ command was introduced.
+\item[5/2001 - Version 3.0:] implementation of the command {\tt cmor}
+ for curved arrows.
+\item[11/2001 - Version{\~a}o 3.1:] the arrow's tips became more \TeX-like.
+\item[1/2002 - Version 3.2:] introduction of the ``Logical
+ specification of diagrams'', the commands ``{\tt obj}'' and
+ ``{\tt mor}'' were modified accordingly.
+\item[5/2002 - Version 4.0:] {\bf new syntax, non-compatible with past
+ versions}. The commands {\tt begindc}, {\tt obj}, and {\tt mor}
+ were modified.
+\item[3/2003 - Version 4.1:] new kind of arrows, ``surjective
+ arrows'', was added. The drawing of the double tip only works well
+ in the vertical, or horizontal case.
+\item[12/2004 - Version 4.1.1:] new version for the drawing of
+ surjective arrows, it solves the previous problem with it.
+\item[3/2007 - version 4.2:] adds the ``providespackage'' directive
+ that was missing. Adds dashed lines, and dotted lines.
+\item[5/2008 - version 4.2.1:] deleting some counters, trying to
+ avoid the problem ``running out of counters'', that occurs because of
+ the use of PiCTeX and DCpic (only two...)
+\item[8/2008 - version 4.3:] thanks to Ruben Debeerst
+ (\url{debeerst@mathematik.uni-kassel.de}), he added a new arrow
+ ``equalline''. After that I decided to add: the doublearrow; the
+ doublearrow with opposite directions; the null arrow. This last can
+ be used as a simple form of adding new labels.
+\item[12/2008 - version 4.3.1:] the comand ``id'' is internalised
+ (``!id''), it should be that way from the begining because it is not
+ to be used from the outside. The comand ``dasharrow'' was changed
+ to ``dashArrow'' to avoid a clash with the AMS command with the same
+ name.
+\item[12/2009 - version 4.3.2:] there was a conflict between dcpic.sty
+ and hyperref in current texlive-2009 due to the one letter macro
+ ``$\backslash$d'' (thanks to Thorsten S
+ \url{<thorsten.schwander@gmail.com>}). The ``d'' changed to
+ ``deuc'' (Euclidian Distance). The ``x'' and ``y'' changed to ``xO''
+ ``yO''
+\item[4/2013 - version 4.4.0:] thanks to Xingliang Liang
+ \url{<jkl9543@gmail.com>}. He added a new arrow ``dotarrow''.
+\item[5/2013 - version 5.0:] {\bf new unit for the coordinate system},
+ 1/10th of the previous one. This allow a better implementation of
+ the double line arrows and also a more fine specification of the
+ diagrams/graphs (Thanks to Antonio de Nicola
+ \url{<adenicola@mat.uc.pt>}).
+\end{description}
+
+
+\section{Introduction}
+
+DCpic is a package of \TeX~\cite{Knuth86} macros for graph modelling
+in a (La)\TeX~\cite{Lamport94} or Con\TeX t~\cite{Otten99}
+document. Its distinguishing features are: the use of
+\PiCTeX~\cite{Wichura92} a powerful graphical engine, and a simple
+specification syntax. A graph is described in terms of its objects and
+its edges. The objects are textual elements and the edges can have
+various straight or curved forms.
+
+A graph~\cite{Harary72} in DCpic is a ``picture'' in \PiCTeX, in which
+we place our {\em objects} and {\em morphisms} (edges). The user's
+commands in DCpic are: {\tt begindc} and {\tt enddc} which establish
+the coordinate system where the objects will by placed; {\tt obj}, the
+command which defines the place and the contents of each object; {\tt
+mor}, and {\tt cmor}, the commands which define the morphisms, linear
+and curved edges, and its labels.
+
+Until version 3.2 DCpic ``Commutative Diagrams in \PiCTeX'' was
+dedicated to commutative diagrams~\cite{Pierce98} (``{\bf D}iagramas
+{\bf C}omutativos'' in Portuguese) drawing, that is the reason for the
+name ``obj'' (objects) and ``mor'' (morphism) for the nodes and edges.
+
+%\pagebreak[3]
+Example:
+\begin{lstlisting}
+ \begindc{\commdiag}
+ \obj(10,10){$A$}
+ \obj(30,10){$B$}
+ \obj(30,30){$C$}
+ \mor{$A$}{$B$}{$f$}[\atright,\solidarrow]
+ \mor{$B$}{$C$}{$g$}[\atright,\solidarrow]
+ \mor{$A$}{$C$}{$h$}
+ \enddc
+\end{lstlisting}
+
+$$
+ \begindc{\commdiag}
+ \obj(10,10){$A$}
+ \obj(30,10){$B$}
+ \obj(30,30){$C$}
+ \mor{$A$}{$B$}{$f$}[\atright,\solidarrow]
+ \mor{$B$}{$C$}{$g$}[\atright,\solidarrow]
+ \mor{$A$}{$C$}{$h$}
+ \enddc
+$$
+
+{\bf Note:} all the numeric values should be integer values.
+
+
+\section{Description}
+
+
+\subsection{Available Commands}
+
+
+\begin{description}
+\item[The environment:] {\ }
+
+\begin{verbatim}
+ \begindc{#1}[#2]
+ #1 - Graph type
+ 0 = "commdiag", commutative diagram
+ 1 = "digraph", direct graph
+ 2 = "undigraph", undirect graph
+ 3 = "cdigraph", direct graph with incircled objects
+ 4 = "cundigraph", undirect graph with incircled objects
+ (optional) #2 - magnification factor (default value, 300)
+ \enddc
+\end{verbatim}
+
+\item[Objects:] {\ }
+
+\begin{verbatim}
+ \obj(#1,#2)[#3]{#4}[#5]
+ #1 and #2 - coordinates
+ (optional) #3 - Label, to be used in the morphims command, if not
+ present the #4 will be used for that purpose
+ #4 - Object contents
+ (optional) #5 - placement of the object (default value \north)
+ 0="\pcent", center
+ 1="\north", north
+ 2="\northeast", northeast
+ 3="\east", east
+ 4="\southeast", southeast
+ 5="\south", south
+ 6="\southwest", southwest
+ 7="\west", west
+ 8="\northwest", northwest
+\end{verbatim}
+
+ {\bf Note:} if you omit the \#3 argument (label), and the \#4 argument
+ is a complex (and long) \LaTeX\ command, then this command can
+ crash. In this case you must specify a label (the empty label [], if
+ you do not intend to use the label).
+
+\item[Morphism (linear edges).] This commando has two major
+ variants:
+ \begin{enumerate}
+ \item Starting and Ending objects specification
+\begin{verbatim}
+ \mor{#1}{#2}[#5,#6]{#7}[#8,#9]
+\end{verbatim}
+
+ As you can see this first form is (intentionally) badly formed, the
+ arguments \#3 and \#4 are missing (the actual command is correctly
+ formed).
+
+ \#1 - The starting object reference
+
+ \#2 - The ending object reference
+
+ from this two we will obtain the objects coordinates, and also the
+ dimensions of the enclosing box.
+
+ The objects box dimensions are used to do an automatic adjustment of
+ the edge width.
+
+ from \#1 we obtain $(x,y)$, (\#1,\#2) in the second form
+
+ from \#2 we obtain $(x^\prime,y^\prime)$, (\#3,\#4) in the second form
+
+ this values will be passed to the command second form
+
+ \item Two points coordinates specification
+\begin{verbatim}
+ \mor(#1,#2)(#3,#4)[#5,#6]{#7}[#8,#9]
+\end{verbatim}
+ \end{enumerate}
+
+ Now we can describe all the arguments
+\begin{verbatim}
+ #1 and #2 - coordinates (beginning)
+ #3 and #4 - coordinates (ending)
+(optional)#5,#6 - correction factors (defaul values, 10 and 10)
+ #5 - actual beginning of the edge
+ #6 - actual ending of the edge
+ #7 - text (morphism label)
+(optional)#8,#9
+ #8 - label placement
+ 1 = \atright, at right, default value
+ -1 = \atleft, at left
+ #9 - edge type
+ 0 = "\solidarrow", default value
+ 1 = "\dashArrow"
+ 2 = "\dotArrow
+ 3 = "\solidline"
+ 4 = "\dashline"
+ 5 = "\dotline"
+ 6 = "\injectionarrow"
+ 7 = "\aplicationarrow"
+ 8 = "\surjectivearrow"
+ 9 = "\equalline"
+ 10 = "\doublearrow"
+ 11 = "\doubleopposite"
+ 12 = "\nullarrow" (to allow adding labels to existing arrows)
+\end{verbatim}
+
+ {\bf Note:} insert a space after the command.
+
+
+\item[Curved Morphisms (quadratic edges):] {\ }\\
+\begin{verbatim}
+ \cmor(#1) #2(#3,#4){#5}[#6]
+ #1 - list of points (odd number)
+ #2 - tip direction
+ 0 = "\pup", pointing up
+ 1 = "\pdown", pointing down
+ 2 = "\pright", pointing right
+ 3 = "\pleft", pointing left
+ #3 and #4 - coordenates of the label
+ #5 - morphism label
+(optional) #6 - edge type
+ 0 ="\solidarrow", default value
+ 1 = "\dashArrow"
+ 2 = "\solidline"
+\end{verbatim}
+
+ {\bf Notes:} Insert a space after the command. The space after the
+ list of points is mandatory.
+
+\end{description}
+
+
+\section{Examples}
+
+
+\subsection{Different Types of Lines/Arrows}
+
+\begin{lstlisting}
+\begindc{\commdiag}[250]
+\obj(10,10)[A]{$OOOOOO$}
+\obj(15,10)[A0]{$A_0$}
+\obj(14,11)[A1]{$A_1$}
+\obj(13,12)[A2]{$A_2$}
+\obj(12,13)[A3]{$A_3$}
+\obj(10,14)[A4]{$A_4$}
+\obj(9,13)[A5]{$A_5$}
+\obj(8,12)[A6]{$A_6$}
+\obj(7,11)[A7]{$A_7$}
+\obj(6,10)[A8]{$A_8$}
+\obj(7,9)[A9]{$A_9$}
+\obj(9,8)[A10]{$A_{10}$}
+\obj(12,8)[A11]{$A_{11}$}
+\mor{A}{A0}{$a_0$}[\atright,\solidarrow]
+\mor{A}{A1}{$a_1$}[\atright,\dashArrow]
+\mor{A}{A2}{$a_2$}[\atright,\dotArrow]
+\mor{A}{A3}{$a_3$}[\atright,\solidline]
+\mor{A}{A4}{$a_4$}[\atright,\dashline]
+\mor{A}{A5}{$a_5$}[\atleft,\dotline]
+\mor{A}{A6}{$a_6$}[\atleft,\injectionarrow]
+\mor{A}{A7}{$a_7$}[\atleft,\aplicationarrow]
+\mor{A}{A8}{$a_8$}[\atleft,\surjectivearrow]
+\mor{A}{A9}{$a_9$}[\atleft,\equalline]
+\mor{A}{A10}{$a_{10}$}[\atleft,\doublearrow]
+\mor{A}{A11}{$a_{11}$}[\atleft,\doubleopposite]
+\mor{A}{A11}{$a_{12}$}[\atright,\nullarrow]
+\enddc
+\end{lstlisting}
+
+$$
+\begindc{\commdiag}[250]
+\obj(10,10)[A]{$OOOOOO$}
+\obj(15,10)[A0]{$A_0$}
+\obj(14,11)[A1]{$A_1$}
+\obj(13,12)[A2]{$A_2$}
+\obj(12,13)[A3]{$A_3$}
+\obj(10,14)[A4]{$A_4$}
+\obj(9,13)[A5]{$A_5$}
+\obj(8,12)[A6]{$A_6$}
+\obj(7,11)[A7]{$A_7$}
+\obj(6,10)[A8]{$A_8$}
+\obj(7,9)[A9]{$A_9$}
+\obj(9,8)[A10]{$A_{10}$}
+\obj(12,8)[A11]{$A_{11}$}
+\mor{A}{A0}{$a_0$}[\atright,\solidarrow]
+\mor{A}{A1}{$a_1$}[\atright,\dashArrow]
+\mor{A}{A2}{$a_2$}[\atright,\dotArrow]
+\mor{A}{A3}{$a_3$}[\atright,\solidline]
+\mor{A}{A4}{$a_4$}[\atright,\dashline]
+\mor{A}{A5}{$a_5$}[\atleft,\dotline]
+\mor{A}{A6}{$a_6$}[\atleft,\injectionarrow]
+\mor{A}{A7}{$a_7$}[\atleft,\aplicationarrow]
+\mor{A}{A8}{$a_8$}[\atleft,\surjectivearrow]
+\mor{A}{A9}{$a_9$}[\atleft,\equalline]
+\mor{A}{A10}{$a_{10}$}[\atleft,\doublearrow]
+\mor{A}{A11}{$a_{11}$}[\atleft,\doubleopposite]
+\mor{A}{A11}{$a_{12}$}[\atright,\nullarrow]
+\enddc
+$$
+
+
+\subsection{Diagrams with Curved Edges, Double Arrows, \ldots }
+
+
+\paragraph{Curved edges} {\ }
+
+
+\begin{lstlisting}
+\begindc{0}
+\obj(14,11){$A$}
+\obj(39,11){$B$}
+\mor(14,12)(39,12){$f$}
+\mor(39,10)(14,10){$g$}
+\cmor((10,10)(6,11)(5,15)(6,19)(10,20)(14,19)(15,15))
+ \pdown(2,20){$id_A$}
+\cmor((40,7)(41,3)(45,2)(49,3)(50,7)(49,11)(45,12))
+ \pleft(54,3){$id_B$}
+\enddc
+
+\begindc{\commdiag}
+\obj(10,15)[A]{$A$}
+\obj(40,15)[Aa]{$A$}
+\obj(25,15)[B]{$B$}
+\mor{A}{B}{$f$}
+\mor{B}{Aa}{$g$}
+\cmor((10,11)(11,7)(15,6)(25,6)(35,6)(39,7)(40,11))
+ \pup(25,3){$id_A$}
+\enddc
+\end{lstlisting}
+
+
+$$
+\begindc{0}
+\obj(14,11){$A$}
+\obj(39,11){$B$}
+\mor(14,12)(39,12){$f$}%[\atright,\solidarrow]
+\mor(39,10)(14,10){$g$}%[\atright,\solidarrow]
+\cmor((10,10)(6,11)(5,15)(6,19)(10,20)(14,19)(15,15))
+ \pdown(2,20){$id_A$}
+\cmor((40,7)(41,3)(45,2)(49,3)(50,7)(49,11)(45,12))
+ \pleft(54,3){$id_B$}
+\enddc
+\qquad
+\begindc{\commdiag}
+\obj(10,15)[A]{$A$}
+\obj(40,15)[Aa]{$A$}
+\obj(25,15)[B]{$B$}
+\mor{A}{B}{$f$}%[\atright,\solidarrow]
+\mor{B}{Aa}{$g$}%[\atright,\solidarrow]
+\cmor((10,11)(11,7)(15,6)(25,6)(35,6)(39,7)(40,11))
+ \pup(25,3){$id_A$}
+\enddc
+$$
+
+\paragraph{Double Arrows and Natural Transformations} {\ }
+
+\begin{lstlisting}
+\begindc{\commdiag}
+\obj(5,5){$A$}
+\obj(20,5){$B$}
+\mor(5,4)(20,4){$f$}[\atright,\solidarrow]
+\mor(5,6)(20,6){$g$}
+\enddc
+
+\begindc{\commdiag}
+\obj(5,5){$A$}
+\obj(9,5){$B$}
+\mor(5,6)(9,6){$\downarrow\sigma$}[\atright,\solidarrow]
+\mor{$A$}{$B$}{}
+\mor(5,4)(9,4){$\downarrow\tau$}
+\enddc
+\end{lstlisting}
+
+
+
+$$
+\begindc{\commdiag}
+\obj(5,5){$A$}
+\obj(20,5){$B$}
+\mor(5,4)(20,4){$f$}[\atright,\solidarrow]
+\mor(5,6)(20,6){$g$}
+\enddc
+\qquad\qquad\qquad
+\begindc{\commdiag}[140]
+\obj(5,5){$A$}
+\obj(9,5){$B$}
+\mor(5,6)(9,6){$\downarrow\sigma$}[\atright,\solidarrow]
+\mor{$A$}{$B$}{}
+\mor(5,4)(9,4){$\downarrow\tau$}
+\enddc
+$$
+
+
+
+
+
+
+\subsection{A Complex Diagram}
+
+The following diagram is one of the test-diagrams used by
+Feruglio~\cite{Feruglio94}, as we can see DCpic performs very well,
+drawing the complete diagram based on a very simple specification.
+
+\begin{lstlisting}
+\newcommand{\barraA}{\vrule height2em width0em depth0em}
+\newcommand{\barraB}{\vrule height1.6em width0em depth0em}
+\begindc{\commdiag}[350]
+\obj(1,1)[Gr]{$G$}
+\obj(3,1)[Grstar]{$G_{r^*}$}
+\obj(5,1)[H]{$H$}
+\obj(2,2)[SigmaG]{$\Sigma^G$}
+\obj(6,2)[SigmaH]{$\Sigma^H$}
+\obj(1,3)[Lm]{$L_m$}
+\obj(3,3)[Krm]{$K_{r,m}$}
+\obj(5,3)[Rmstar]{$R_{m^*}$}
+\obj(1,5)[L]{$L$}
+\obj(3,5)[Lr]{$L_r$}
+\obj(5,5)[R]{$R$}
+\obj(2,6)[SigmaL]{$\Sigma^L$}
+\obj(6,6)[SigmaR]{$\Sigma^R$}
+\mor{Gr}{SigmaG}{$\lambda^G$}
+\mor{Grstar}{Gr}{$i_5$}[\atleft,\aplicationarrow]
+\mor{Grstar}{H}{$r^*$}[\atright,\solidarrow]
+\mor{H}{SigmaH}{$\lambda^H$}[\atright,\dashArrow]
+\mor{SigmaG}{SigmaH}{$\varphi^{r^*}$}[\atleft,\solidarrow]
+\mor{Lm}{Gr}{$m$}[\atright,\solidarrow]
+\mor{Lm}{L}{$i_2$}[\atleft,\aplicationarrow]
+\mor{Krm}{Lm}{$i_3\quad$}[\atright,\aplicationarrow]
+\mor{Krm}{Rmstar}{$r$}
+\mor{Krm}{Lr}{$i_4$}[\atright,\aplicationarrow]
+\mor{Krm}{Grstar}{\barraA$m$}
+\mor{Rmstar}{R}{$i_6$}[\atright,\aplicationarrow]
+\mor{Rmstar}{H}{\barraB$m^*$}
+\mor{L}{SigmaL}{$\lambda^L$}
+\mor{Lr}{L}{$i_1\quad$}[\atright,\aplicationarrow]
+\mor{Lr}{R}{$r$}
+\mor{R}{SigmaR}{$\lambda^R$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaG}{$\varphi^m$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaR}{$\varphi^r$}
+\mor{SigmaR}{SigmaH}{$\varphi^{m^*}$}
+\enddc
+\end{lstlisting}
+
+\newcommand{\barraA}{\vrule height2em width0em depth0em}
+\newcommand{\barraB}{\vrule height1.6em width0em depth0em}
+$$\begindc{\commdiag}[350]
+\obj(1,1)[Gr]{$G$}
+\obj(3,1)[Grstar]{$G_{r^*}$}
+\obj(5,1)[H]{$H$}
+\obj(2,2)[SigmaG]{$\Sigma^G$}
+\obj(6,2)[SigmaH]{$\Sigma^H$}
+\obj(1,3)[Lm]{$L_m$}
+\obj(3,3)[Krm]{$K_{r,m}$}
+\obj(5,3)[Rmstar]{$R_{m^*}$}
+\obj(1,5)[L]{$L$}
+\obj(3,5)[Lr]{$L_r$}
+\obj(5,5)[R]{$R$}
+\obj(2,6)[SigmaL]{$\Sigma^L$}
+\obj(6,6)[SigmaR]{$\Sigma^R$}
+\mor{Gr}{SigmaG}{$\lambda^G$}
+\mor{Grstar}{Gr}{$i_5$}[\atleft,\aplicationarrow]
+\mor{Grstar}{H}{$r^*$}[\atright,\solidarrow]
+\mor{H}{SigmaH}{$\lambda^H$}[\atright,\dashArrow]
+\mor{SigmaG}{SigmaH}{$\varphi^{r^*}$}[\atleft,\solidarrow]
+\mor{Lm}{Gr}{$m$}[\atright,\solidarrow]
+\mor{Lm}{L}{$i_2$}[\atleft,\aplicationarrow]
+\mor{Krm}{Lm}{$i_3\quad$}[\atright,\aplicationarrow]
+\mor{Krm}{Rmstar}{$r$}
+\mor{Krm}{Lr}{$i_4$}[\atright,\aplicationarrow]
+\mor{Krm}{Grstar}{\barraA$m$}
+\mor{Rmstar}{R}{$i_6$}[\atright,\aplicationarrow]
+\mor{Rmstar}{H}{\barraB$m^*$}
+\mor{L}{SigmaL}{$\lambda^L$}
+\mor{Lr}{L}{$i_1\quad$}[\atright,\aplicationarrow]
+\mor{Lr}{R}{$r$}
+\mor{R}{SigmaR}{$\lambda^R$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaG}{$\varphi^m$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaR}{$\varphi^r$}
+\mor{SigmaR}{SigmaH}{$\varphi^{m^*}$}
+\enddc
+$$
+
+
+
+\subsection{``Around the Word''~\cite{Harary72}}
+
+\begin{lstlisting}
+\begindc{\undigraph}[70]
+\obj(6,4){18}[\south]
+\obj(18,4){17}[\south]
+\obj(8,7){11}[\west]
+\obj(12,8){12}[\south]
+\obj(16,7){13}[\east]
+\obj(8,11){10}[\west]
+\obj(10,12){6}[\northwest]
+\obj(12,10){5}
+\obj(14,12){4}[\northeast]
+\obj(16,11){14}[\east]
+\obj(2,16){19}
+\obj(6,15){9}
+\obj(9,16){8}
+\obj(11,14){7}
+\obj(13,14){3}
+\obj(15,16){2}
+\obj(18,15){15}
+\obj(22,16){16}
+\obj(12,19){1}[\northeast]
+\obj(12,22){20}
+\mor{18}{17}{}\mor{18}{11}{}\mor{18}{19}{}
+\mor{11}{12}{}\mor{11}{10}{}\mor{12}{13}{}
+\mor{12}{5}{}\mor{10}{6}{}\mor{10}{9}{}
+\mor{5}{6}{}\mor{5}{4}{}\mor{13}{17}{}
+\mor{13}{14}{}\mor{9}{19}{}\mor{9}{8}{}
+\mor{6}{7}{}\mor{4}{3}{}\mor{4}{14}{}
+\mor{19}{20}{}\mor{8}{1}{}\mor{8}{7}{}
+\mor{7}{3}{}\mor{3}{2}{}\mor{2}{1}{}
+\mor{2}{15}{}\mor{14}{15}{}\mor{17}{16}{}
+\mor{16}{20}{}\mor{1}{20}{}\mor{15}{16}{}
+\enddc
+\end{lstlisting}
+
+
+$$
+\begindc{\undigraph}[70]
+\obj(6,4){18}[\south]
+\obj(18,4){17}[\south]
+\obj(8,7){11}[\west]
+\obj(12,8){12}[\south]
+\obj(16,7){13}[\east]
+\obj(8,11){10}[\west]
+\obj(10,12){6}[\northwest]
+\obj(12,10){5}
+\obj(14,12){4}[\northeast]
+\obj(16,11){14}[\east]
+\obj(2,16){19}
+\obj(6,15){9}
+\obj(9,16){8}
+\obj(11,14){7}
+\obj(13,14){3}
+\obj(15,16){2}
+\obj(18,15){15}
+\obj(22,16){16}
+\obj(12,19){1}[\northeast]
+\obj(12,22){20}
+\mor{18}{17}{}\mor{18}{11}{}\mor{18}{19}{}
+\mor{11}{12}{}\mor{11}{10}{}\mor{12}{13}{}
+\mor{12}{5}{}\mor{10}{6}{}\mor{10}{9}{}
+\mor{5}{6}{}\mor{5}{4}{}\mor{13}{17}{}
+\mor{13}{14}{}\mor{9}{19}{}\mor{9}{8}{}
+\mor{6}{7}{}\mor{4}{3}{}\mor{4}{14}{}
+\mor{19}{20}{}\mor{8}{1}{}\mor{8}{7}{}
+\mor{7}{3}{}\mor{3}{2}{}\mor{2}{1}{}
+\mor{2}{15}{}\mor{14}{15}{}\mor{17}{16}{}
+\mor{16}{20}{}\mor{1}{20}{}\mor{15}{16}{}
+\enddc
+$$
+
+\subsection{Incircled Objects}
+
+
+\begin{lstlisting}
+\begindc{\cdigraph}[250]
+\obj(1,5){A}
+\obj(1,4){B}
+\obj(1,1){C}
+\obj(5,5){E}
+\obj(5,3){F}
+\obj(5,1){G}
+\mor{A}{E}[80,80]{5}
+\mor{A}{F}[80,80]{3}
+\mor{B}{F}[80,80]{6}[\atright,\solidarrow]
+\mor{B}{E}[80,80]{1}
+\mor{C}{F}[80,80]{5}
+\mor{C}{G}[80,80]{7}
+\enddc
+\end{lstlisting}
+
+
+$$
+\begindc{\cdigraph}[250]
+\obj(1,5){A}
+\obj(1,4){B}
+\obj(1,1){C}
+\obj(5,5){E}
+\obj(5,3){F}
+\obj(5,1){G}
+\mor{A}{E}[80,80]{5}
+\mor{A}{F}[80,80]{3}
+\mor{B}{F}[80,80]{6}[\atright,\solidarrow]
+\mor{B}{E}[80,80]{1}
+\mor{C}{F}[80,80]{5}
+\mor{C}{G}[80,80]{7}
+\enddc
+$$
+
+\newcommand{\noopsort}[1]{} \newcommand{\singleletter}[1]{#1}
+\begin{thebibliography}{10}
+
+\bibitem{Feruglio94}
+Feruglio, {Gabriel Valiente}.
+\newblock Typesetting commutative diagrams.
+\newblock {\em TUGboat}, 15(4):466--484, 1994.
+
+\bibitem{Harary72}
+Harary, Frank. 1972.
+\newblock {\em Graph Theory}.
+\newblock Reading, Massachusetts: Addison-Wesley.
+
+\bibitem{Knuth86}
+Knuth, Donald~E.
+\newblock {\em The TeXbook}.
+\newblock Addison-Wesley Publishing Company, Reading,Massachusetts, 1986.
+
+\bibitem{Lamport94}
+ Lamport, Leslie.
+\newblock {\em {\LaTeX}: A Document Preparation System}.
+\newblock Addison-Wesley Publishing Company, Reading, Massachusetts, 2nd
+ edition, 1994.
+
+\bibitem{Otten99}
+Otten, Ton and Hagen, Hans .
+\newblock {\em Con\TeX t an excursion}.
+\newblock Pragma ADE, Hasselt, 1999.
+
+\bibitem{Pierce98}
+ Pierce, Benjamin.
+\newblock {\em Basic Category Theory for Computer Scientists}.
+\newblock Foundations of Computing. The MIT Press, London, England, 1998.
+
+\bibitem{Wichura92}
+ Wichura, Michael.
+\newblock {\em The {\PiCTeX} Manual}.
+\newblock Personal \TeX\ Inc, 12 Madrona Avenue, Mill Valley, CA
+94941 - USA, 3rd edition, March 1992
+
+\end{thebibliography}
+
+
+\section{The Code}
+
+{\scriptsize
+\verbatiminput{dcpic.sty}
+}
+
+\end{document}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: t
+%%% End:
diff --git a/macros/generic/diagrams/dcpic/manDCPiCpt.pdf b/macros/generic/diagrams/dcpic/manDCPiCpt.pdf
new file mode 100644
index 0000000000..7952f91565
--- /dev/null
+++ b/macros/generic/diagrams/dcpic/manDCPiCpt.pdf
Binary files differ
diff --git a/macros/generic/diagrams/dcpic/manDCPiCpt.tex b/macros/generic/diagrams/dcpic/manDCPiCpt.tex
new file mode 100644
index 0000000000..01e8649810
--- /dev/null
+++ b/macros/generic/diagrams/dcpic/manDCPiCpt.tex
@@ -0,0 +1,846 @@
+% $Id: manDCPiCpt.tex 13 2013-04-21 15:28:45Z pedro $
+\documentclass[a4paper,11pt]{article}
+\usepackage{a4wide}
+\usepackage[portuguese]{babel}
+\usepackage{ae} % Virtual fonts for PDF-files with T1 encoded CMR-fonts.
+\usepackage[T1]{fontenc}
+\usepackage[utf8x]{inputenc}
+\usepackage{dcpic,pictex}
+\usepackage{alltt}
+\usepackage{verbatim}
+\usepackage{longtable}
+\usepackage{svn-multi}
+\usepackage{listings}
+\usepackage{url}
+
+\svnidlong
+{$HeadURL: svn+ssh://gentzen.mat.uc.pt/var/lib/svn/DCPiC/CTAN5.0/manDCPiCpt.tex $}
+{$LastChangedDate: 2013-05-01 19:49:49 +0100 (Qua, 01 Mai 2013) $}
+{$LastChangedRevision: 15 $}
+{$LastChangedBy: pedro $}
+
+\svnid{$Id: manDCPiCpt.tex 13 2013-04-21 15:28:45Z pedro $}
+
+\newcommand{\docversion}{\svnyear/\svnmonth/\svnday\ (v\svnrev)}
+
+\def\dcpicversion{v5.0.0}
+
+\lstset{language=TeX,
+ frame = single,
+ morekeywords={begindc,enddc,cmor,pup,commdiag,undigraph,digraph,cdigraph,cundigraph,obj,mor,pleft,pup,pdown,pright,north,northeast,east,southeast,south,southwest,west,northwest,atright,atleft,solidarrow,dashArrow,dotArrow,solidline,dashline,dotline,injectionarrow,aplicationarrow,surjectivearrow,equalline,doublearrow,doubleopposite,nullarrow},
+ basicstyle=\scriptsize}
+
+
+\title{DCpic (5.0) --- Manual de Utilização\\
+\docversion}
+
+\author{Pedro Quaresma\\ CISUC/Departamento de Matemática,
+ Universidade de Coimbra\\ 3001-454 COIMBRA, PORTUGAL\\
+ \url{pedro@mat.uc.pt}\quad phone: +351-239~791~137\quad fax:
+ +351-239~832~568}
+
+\date{2013/05/01}
+
+\begin{document}
+
+\maketitle
+
+\begin{abstract}
+ O {\em DCpic\/} é um conjunto de comandos para a escrita de grafos,
+ para tal desenvolveu-se um conjunto de comandos, com uma sintaxe
+ simples, que permite a construção de quase todo o tipo de grafos.
+
+ Originalmente o {\em DCpic\/} ({\bf D}iagramas {\bf C}omutativos
+ utilizando o {\bf PiC}TeX) foi concebido para a construção de
+ diagramas comutativos tal como são usados em Teoria das
+ Categorias~\cite{Herrlich73,Pierce98}, temos então grafos etiquetados
+ e com elementos nos nós. A partir da versão 4.0 o conjunto de
+ comandos foi alterada de forma a considerar-se também a construção de
+ grafos dirigidos, e grafos não dirigidos. A forma de os especificar
+ recorre à colocação dos diferentes objectos (nós e arestas) num dado
+ referencial ortonormado,
+
+ O {\em DCpic} está baseado no \PiCTeX\ necessitando deste para poder
+ ser usado.
+\end{abstract}
+
+\vfill
+\begin{quotation}
+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 Pedro Quaresma (\url{pedro@mat.uc.pt}).
+
+This work consists of the files dcpic.sty.
+\end{quotation}
+
+\vspace*{2cm}
+\noindent Coimbra, 2013/04/21\\
+Pedro Quaresma
+
+\pagebreak
+\section{Hist\'oria}
+
+\begin{description}
+\item[11/1990 - versão 1.0]
+\item[10/1991 - versão 1.1]
+\item[9/1993 - versão 1.2:] argumento ``distância entre as
+ extremidades da seta e os objectos'' passou a ser opcional; uma nova
+ opção para as ``setas'' (opção 3).
+\item[2/3/1995 - versão 1.3:] foi acrescentado o tipo de seta de
+ aplicação (opção 4) a distância da etiqueta
+ à seta respectiva passou a ser fixa (10 unidades de medida).
+
+\item[15/7/1996 - vers\~ao 2.1:] o comando {\tt mor} passou a ter uma
+ sintaxe distinta. Os parâmetros 5 e 6 passaram a ser a
+ distância entre os objectos e os extremos da seta o
+ parâmetro 7 é o nome do morfismo e os parâmetros 8 e 9,
+ colocação do morfismo e tipo de morfismo passaram a ser
+ opcionais.
+
+\item[5/2001 - versão 3.0:] implementação do comando
+ {\tt cmor} baseado no comando de desenho de curvas quadráticas pelo
+ \PiCTeX.
+
+\item[11/2001 - versão 3.1:] modificação das pontas das
+ setas de forma a estas ficarem semelhantes às setas
+ (símbolos) dos TeX.
+
+\item[1/2002 - versão 3.2:] modificação dos comandos {\tt obj}
+ e {\tt mor} de forma a introduzir a especificação lógica
+ dos morfismos, isto é, passa-se a dizer qual é o objecto de
+ partida e/ou o objecto de chegada em vez de ter de especificar o
+ morfismo em termos de coordenadas. Por outro lado o tamanho das
+ setas passa a ser ajustado automaticamente em relação ao
+ tamanho dos objectos.
+
+\item[5/2002 - vers\~ao 4.0:] {\bf vers\~ao incompatível com as
+ anteriores}. Modificação dos comandos {\tt begindc} e {\tt obj}. O
+ primeiro passou a ter um argumento (obrigat\'orio) que nos
+ permite especificar o tipo de grafo que estamos a querer
+ especificar:
+ \begin{itemize}
+ \item {\tt commdiag} (0), para diagramas comutativos;
+ \item {\tt digraph} (1), para grafos orientados;
+ \item {\tt undigraph} (2), para grafos n\~ao orientados.
+ \end{itemize}
+
+ O comando {\tt obj} modificou a sua sintaxe passou a ter um (após a
+ especifica\c c\~ao das coordenadas, um argumento opcional, um argumento
+ obrigat\'orio, e um argumento opcional. O primeiro argumento opcional
+ d\'a-nos a etiqueta que serve como refer\^encia para a especifica\c c\~ao dos
+ morfismos, na sua aus\^encia usa-se o argumento obrigat\'orio para esse
+ efeito, o argumento obrigat\'orio d\'a-nos o ``conte\'udo'' do objecto, nos
+ diagramas comutativos \'e centrado no ponto dado pelas coordenadas
+ sendo o argumento seguinte simplesmente ignorado, nos grafos o
+ ``conte\'udo'' \'e colocado numa posi\c c\~ao a norte, a noroeste, a este, \ldots,
+ sendo que a posi\c c\~ao concreta \'e especificada pelo \'ultimo dos
+ argumentos deste comando, o valor por omiss\~ao \'e o {\tt norte}.
+
+\item[3/2003 - vers\~ao 4.1:] a pedido de Jon Barker \url{<jeb1@soton.ac.uk>}
+ criei um novo tipo de seta, a seta de sobrejec\c c\~ao. Para j\'a a dupla
+ seta s\'o fica bem nas setas horizontais ou verticais.
+
+\item[12/2004 - vers\~ao 4.1.1:] nova vers\~ao das setas de sobrejec\c c\~ao que
+ corrigue completamente os problemas da solu\c c\~ao anterior.
+
+\item[3/2007 - vers\~ao 4.2:] acrescenta a directiva
+ ``providespackage''. Acrescenta linhas a ponteado e a tracejado.
+
+\item[5/2008 - vers\~ao 4.2.1:] apaga alguns contadores para tentar
+ diminuir o excessivo uso dos mesmos por parte do PiCTeX.
+
+\item[8/2008 - vers\~ao 4.3:] gra\c cas a Ruben Debeerst
+ \url{<debeerst@mathematik.uni-kassel.de>}, acrescentei uma nova
+ ``seta'' a ``equalline''. Ap\'os isso decidi tamb\'em acrescentar
+ setas duplas, com o mesmo ou diferentes sentidos. Acrescentou-se
+ também a seta nula, isto é, sem representação gráfica, a qual pode
+ ser usada para acrescentar etiquetas a outras ``setas''.
+
+\item[12/2008 - version 4.3.1:] para evitar conflitos com outros
+ pacotes o comando ``id'' \'e internalizado. O comando ``dasharrow'' \'e
+ modificado para ``dashArrow'' para evitar um conflito com o AMSTeX.
+
+\item[12/2009 - version 4.3.2:] para evitar um conflito com o pacote
+ ``hyperref'' mudou-se o contador ``d'' para ``deuc'', aproveitei e
+ mudei os contadores ``x'' e ``y'' para ``xO'' e ``yO''
+
+\item[4/2013 - version 4.4.0:] graças a Xingliang Liang
+ \url{jkl9543@gmail.com>} acrescentou-se uma nova seta ``dotarrow''.
+
+\item[4/2013 - version 5.0:] {\bf uma nova unidade para o sistema de
+ coordenadas}, 1/10 da anterior. Esta nova unidade permite
+ corriguir um problema com a construção das setas duplas, além de
+ permitir uma especificação mais fina dos diagramas.
+\end{description}
+
+\section{Introdução}
+
+O conjunto de comandos {\em DCpic} é um conjunto de comandos
+\TeX~\cite{Knuth86} dedicado à escrita de diagramas tal como são
+usados em Teoria das Categorias~\cite{Herrlich73,Pierce98}, assim como
+de grafos dirigidos e não dirigidos~\cite{Harary72}.
+
+Pretendeu-se com a sua escrita ter uma forma simples de especificar
+grafos, fazendo-o através da especificação de um conjunto de
+``objectos'' (nós do grafo) colocados num dado referencial
+ortonormado, e através de um conjuntos de morfismos (arestas) que os
+são posicionados explicitamente no referido referencial, ou então,
+a são posição é dada especificando qual é o seu nó de
+partida e qual é o seu nó de chegada.
+
+O gráfico em si é construído recorrendo aos comandos gráficos
+do \PiCTeX.
+
+\section{Utilização}
+
+Antes de mais é necessário carregar os dois conjuntos de comandos
+acima referidos, no caso de um documento \LaTeX~\cite{Lamport94} isso
+pode ser feito com o seguinte comando (no preâmbulo).
+
+\begin{verbatim}
+\usepackage{dcpic,pictex}
+\end{verbatim}
+
+Nos outros formatos ter-se-á de usar um comando equivalente. Após
+isso os diagramas podem ser escritos através dos comandos
+disponibilizados pelo {\em DCpic}. Por exemplo, os comandos:
+
+
+\begin{lstlisting}
+\begindc{\commdiag}[200]
+ \obj(1,4){$A^B$}
+ \obj(1,1){$C$}
+ \obj(3,4){$A$}
+ \obj(3,1){$C\times{}B$}
+ \obj(6,4){$A^B\times{}B$}
+ \mor{$C$}{$A^B$}{$f$}
+ \mor{$C\times{}B$}{$A$}{$\bar f$}[\atleft,\dashArrow]
+ \mor{$A^B\times{}B$}{$A$}{$ev$}[\atright,\solidarrow]
+ \mor{$C\times{}B$}{$A^B\times{}B$}{$f\times{}id$}[\atright,\solidarrow]
+\enddc
+\end{lstlisting}
+
+produzem o seguinte diagrama:
+
+$$
+\begindc{\commdiag}[200]
+ \obj(1,4){$A^B$}
+ \obj(1,1){$C$}
+ \obj(3,4){$A$}
+ \obj(3,1){$C\times{}B$}
+ \obj(6,4){$A^B\times{}B$}
+ \mor{$C$}{$A^B$}{$f$}
+ \mor{$C\times{}B$}{$A$}{$\bar f$}[\atleft,\dashArrow]
+ \mor{$A^B\times{}B$}{$A$}{$ev$}[\atright,\solidarrow]
+ \mor{$C\times{}B$}{$A^B\times{}B$}{$f\times{}id$}[\atright,\solidarrow]
+\enddc
+$$
+
+O meio ambiente {\tt begindc}, {\tt enddc} permite-nos construir um
+grafo por colocação dos objectos num referencial ortonormado tendo
+a origem em (0,0). As arestas (morfismos) vão ligar pares de nós
+(objectos) entre si.
+
+\section{Comandos Disponíveis}
+
+De seguida apresenta-se a descrição dos comandos, a sua sintaxe e
+a sua funcionalidade. Os argumentos entre parêntesis rectos são
+opcionais.
+
+\begin{description}
+\item[\tt $\backslash$begindc\{\#1\}[\#2\mbox{]}] -- entrada no ambiente de
+ escrita de grafos:
+
+ \begin{tabular}{r@{ -- }l}
+ {\tt \#1} & tipo de grafo\\
+ \multicolumn{2}{l}{\quad $0\equiv\backslash$commdiag, diagrama comutativo;}\\
+ \multicolumn{2}{l}{\quad $1\equiv\backslash$digraph, grafo orientado;}\\
+ \multicolumn{2}{l}{\quad $2\equiv\backslash$undigraph, grafo não orientado;}\\
+ \multicolumn{2}{l}{\quad $3\equiv\backslash$cdigraph, grafo orientado, com
+ objectos circunscritos;}\\
+ \multicolumn{2}{l}{\quad $4\equiv\backslash$cundigraph, grafo não orientado,
+ com objectos circunscritos.}\\
+ {\tt \#2} & factor de escala (opcional)\\
+ \multicolumn{2}{l}{\quad valor por omissão: 300}
+ \end{tabular}
+
+\item[\tt $\backslash$enddc] -- saída do meio ambiente para a
+ escrita de grafos.
+
+\item[{\tt $\backslash$obj(\#1,\#2)[\#3]\{\#4\}[\#5]}:] comando de colocação
+ dos nós (objectos).
+
+ \begin{tabular}{r@{ -- }l}
+ {\tt \#1} e {\tt \#2}& coordenadas do centro da caixa que vai
+ conter o texto\\
+ {\tt \#3} & etiqueta para identificar o objecto (opcional)\\
+ {\tt \#4} & texto (conte{\'u}do do nó)\\
+ {\tt \#5} & colocação relativa do objecto (opcional)\\
+ \multicolumn{2}{l}{\qquad\quad $0\doteq\backslash$pcent, centrado}\\
+ \multicolumn{2}{l}{\qquad\quad $1\doteq\backslash$north, norte}\\
+ \multicolumn{2}{l}{\qquad\quad $2\doteq\backslash$northeast, nordeste}\\
+ \multicolumn{2}{l}{\qquad\quad $3\doteq\backslash$east, este}\\
+ \multicolumn{2}{l}{\qquad\quad $4\doteq\backslash$southeast, sudeste}\\
+ \multicolumn{2}{l}{\qquad\quad $5\doteq\backslash$south, sul}\\
+ \multicolumn{2}{l}{\qquad\quad $6\doteq\backslash$southwest, sudoeste}\\
+ \multicolumn{2}{l}{\qquad\quad $7\doteq\backslash$west, oeste}\\
+ \multicolumn{2}{l}{\qquad\quad $8\doteq\backslash$northwest, noroeste}
+ \end{tabular}
+
+A etiqueta explícita-se quando não é possível usar o objecto como
+forma de identificação do nó, por exemplo num dado grafo não orientado
+os nós podem não ter conteúdo e como tal serem todos iguais em termos
+de identificação:
+
+Em alguns casos, por exemplo comandos dos \LaTeX\ complexos, pode ser
+necessário explicitar o argumento {\tt \#3} mesmo que seja através da
+etiqueta vazia {\tt []}. Esse especificar da etiqueta vazia torna-se
+necessário para que o mecanismo interno do DCpic de comunicação entre
+comandos (pilhas) não se baralhe e entre num ciclo infinito.
+
+
+$$
+\begindc{\undigraph}[200]
+\obj(1,1)[1]{}
+\obj(3,2)[2]{}
+\obj(5,1)[3]{}
+\obj(3,4)[4]{}
+\mor{1}{2}{}
+\mor{1}{3}{}
+\mor{2}{3}{}
+\mor{4}{1}{}
+\mor{4}{3}{}
+\mor{2}{4}{}
+\enddc
+$$
+foi produzido por:
+\begin{lstlisting}
+\begindc{\undigraph}[200]
+\obj(1,1)[1]{}
+\obj(3,2)[2]{}
+\obj(5,1)[3]{}
+\obj(3,4)[4]{}
+\mor{1}{2}{}
+\mor{1}{3}{}
+\mor{2}{3}{}
+\mor{4}{1}{}
+\mor{4}{3}{}
+\mor{2}{4}{}
+\enddc
+\end{lstlisting}
+
+
+O parâmetro referente à colocação do objecto só é relevante quando se
+pensa na identificação dos nós num dado grafo orientado (ou não), por
+exemplo o grafo ``Around the Word''~\cite{Harary72}:
+
+$$
+\begindc{\undigraph}[70]
+\obj(6,4){18}[\south]
+\obj(18,4){17}[\south]
+\obj(8,7){11}[\west]
+\obj(12,8){12}[\south]
+\obj(16,7){13}[\east]
+\obj(8,11){10}[\west]
+\obj(10,12){6}[\northwest]
+\obj(12,10){5}
+\obj(14,12){4}[\northeast]
+\obj(16,11){14}[\east]
+\obj(2,16){19}
+\obj(6,15){9}
+\obj(9,16){8}
+\obj(11,14){7}
+\obj(13,14){3}
+\obj(15,16){2}
+\obj(18,15){15}
+\obj(22,16){16}
+\obj(12,19){1}[\northeast]
+\obj(12,22){20}
+\mor{18}{17}{}\mor{18}{11}{}\mor{18}{19}{}
+\mor{11}{12}{}\mor{11}{10}{}\mor{12}{13}{}
+\mor{12}{5}{}\mor{10}{6}{}\mor{10}{9}{}
+\mor{5}{6}{}\mor{5}{4}{}\mor{13}{17}{}
+\mor{13}{14}{}\mor{9}{19}{}\mor{9}{8}{}
+\mor{6}{7}{}\mor{4}{3}{}\mor{4}{14}{}
+\mor{19}{20}{}\mor{8}{1}{}\mor{8}{7}{}
+\mor{7}{3}{}\mor{3}{2}{}\mor{2}{1}{}
+\mor{2}{15}{}\mor{14}{15}{}\mor{17}{16}{}
+\mor{16}{20}{}\mor{1}{20}{}\mor{15}{16}{}
+\enddc
+$$
+foi produzido por
+\begin{lstlisting}
+\begindc{\undigraph}[70]
+\obj(6,4){18}[\south]
+\obj(18,4){17}[\south]
+\obj(8,7){11}[\west]
+\obj(12,8){12}[\south]
+\obj(16,7){13}[\east]
+\obj(8,11){10}[\west]
+\obj(10,12){6}[\northwest]
+\obj(12,10){5}
+\obj(14,12){4}[\northeast]
+\obj(16,11){14}[\east]
+\obj(2,16){19}
+\obj(6,15){9}
+\obj(9,16){8}
+\obj(11,14){7}
+\obj(13,14){3}
+\obj(15,16){2}
+\obj(18,15){15}
+\obj(22,16){16}
+\obj(12,19){1}[\northeast]
+\obj(12,22){20}
+\mor{18}{17}{}\mor{18}{11}{}\mor{18}{19}{}
+\mor{11}{12}{}\mor{11}{10}{}\mor{12}{13}{}
+\mor{12}{5}{}\mor{10}{6}{}\mor{10}{9}{}
+\mor{5}{6}{}\mor{5}{4}{}\mor{13}{17}{}
+\mor{13}{14}{}\mor{9}{19}{}\mor{9}{8}{}
+\mor{6}{7}{}\mor{4}{3}{}\mor{4}{14}{}
+\mor{19}{20}{}\mor{8}{1}{}\mor{8}{7}{}
+\mor{7}{3}{}\mor{3}{2}{}\mor{2}{1}{}
+\mor{2}{15}{}\mor{14}{15}{}\mor{17}{16}{}
+\mor{16}{20}{}\mor{1}{20}{}\mor{15}{16}{}
+\enddc
+\end{lstlisting}
+
+
+
+\item[{\tt $\backslash$mor\{\#1\}\{\#2\}[\#5,\#6]\{\#7\}[\#8,\#9]}:]
+ Comando de colocação da seta (morfismo) de ligação de dois objectos
+ -- Primeira variante.
+
+ A numeração errada dos argumentos é aqui feita propositadamente,
+ aquando da explicação da segunda variante deste comando
+ compreender-se-á o porquê desta opção de escrita.
+
+ \begin{longtable}{r@{ -- }p{32em}}
+ {\tt \#1} & referência do nó de partida\\
+ {\tt \#2} & referência do nó de chegada\\
+ {\tt \#5} e {\tt \#6} & distância do centro dos objectos às
+ extremidades inicial e final respectivamente da seta. Valores por
+ omissão: 10, 10 (para diagramas) 2, 2 (para os grafos)\\
+ {\tt \#7} & texto, ``nome'' do morfismo\\
+ {\tt \#8} & colocação do nome do morfismo em relação à seta. Valor
+ por omissão, $\backslash$atleft. \\
+ \multicolumn{2}{l}{\hspace*{4.5em} 1 $\doteq\backslash$atright, à direita}\\
+ \multicolumn{2}{l}{\hspace*{4.5em} -1 $\doteq\backslash$atleft, à esquerda}\\
+ {\tt \#9} & tipo da seta. Valor por omissão, $\backslash$solidarrow.\\
+ \multicolumn{2}{l}{\hspace*{4.5em} 0 $\doteq\backslash$solidarrow, seta sólida} \\
+ \multicolumn{2}{l}{\hspace*{4.5em} 1 $\doteq\backslash$dashArrow, seta tracejada} \\
+ \multicolumn{2}{l}{\hspace*{4.5em} 2 $\doteq\backslash$dotArrow, seta ponteada} \\
+ \multicolumn{2}{l}{\hspace*{4.5em} 3 $\doteq\backslash$solidline, linha sólida} \\
+ \multicolumn{2}{l}{\hspace*{4.5em} 4 $\doteq\backslash$dashline, linha a tracejado} \\
+ \multicolumn{2}{l}{\hspace*{4.5em} 5 $\doteq\backslash$dotline, linha a ponteado} \\
+ \multicolumn{2}{l}{\hspace*{4.5em} 6 $\doteq\backslash$injectionarrow, seta de
+ injecção. Valor anterior 3 (vers\~ao $<$ 4.2) } \\
+ \multicolumn{2}{l}{\hspace*{4.5em} 7 $\doteq\backslash$aplicationarrow, seta de
+ aplicação. Valor anterior 4 (vers\~ao $<$ 4.2) } \\
+ \multicolumn{2}{l}{\hspace*{4.5em} 8 $\doteq\backslash$surjectivearrow, seta de
+ função sobrejectiva. Valor anterior 5 (vers\~ao $<$ 4.2) }\\
+ \multicolumn{2}{l}{\hspace*{4.5em} 9 $\doteq\backslash$equalline, linha dupla}\\
+ \multicolumn{2}{l}{\hspace*{4.5em} 10
+ $\doteq\backslash$doublearrow, seta dupla}\\
+ \multicolumn{2}{l}{\hspace*{4.5em} 11
+ $\doteq\backslash$doubleopposite, seta dupla em sentidos opostos}\\
+ \multicolumn{2}{l}{\hspace*{4.5em} 12
+ $\doteq\backslash$nullarrow, seta nula, serve o propósito de
+ acrescentar etiquetas as outras ``setas''.}\\
+ \end{longtable}
+
+\item[{\tt $\backslash$mor(\#1,\#2)(\#3,\#4)[\#5,\#6]\{\#7\}[\#8,\#9]}:]
+ Comando de colocação da seta (morfismo) de ligação de dois objectos
+ -- Segunda variante.
+
+ \begin{longtable}{r@{ -- }p{32em}}
+ {\tt \#1} e {\tt \#2} & coordenadas do nó de partida\\
+ {\tt \#3} e {\tt \#4} & coordenadas do nó de chegada\\
+ \end{longtable}
+
+ Todos os outros argumentos têm o significado já explicado (por
+ isso a numeração errada). É de notar que para a primeira variante é
+ feito o cálculo das coordenadas dos nós de forma automática e depois
+ são passados esses valores para a segunda variante do comando.
+
+
+\item[{\tt $\backslash$cmor(\#1) \#2(\#3,\#4)\{\#5\}[\#6]}] comando para a
+ especificação de setas curvas. O algoritmo de construção das setas é
+ o do \PiCTeX\ o que implica que se está a especificar uma linha
+ quadrática através de um número ímpar de pontos.
+
+ \begin{tabular}{c@{---}l}
+ {\tt \#1} & lista de pontos, em número ímpar \\
+ {\tt \#2} & direccionamento da seta \\
+ \multicolumn{2}{l}{\qquad 0 $\doteq\backslash$pup, apontar para cima}\\
+ \multicolumn{2}{l}{\qquad 1 $\doteq \backslash$pdown, apontar para
+ baixo}\\
+ \multicolumn{2}{l}{\qquad 2 $\doteq \backslash$pright, apontar para a
+ direita}\\
+ \multicolumn{2}{l}{\qquad 3 $\doteq \backslash$pleft, apontar para a
+ esquerda}\\
+ {\tt \#3} & abcissa do morfismo\\
+ {\tt \#4} & ordenada do morfismo\\
+ {\tt \#5} & morfismo\\
+ {\tt \#6} & tipo de ``seta'', valor por omissão: 0, seta
+ sólida.\\
+ \multicolumn{2}{l}{\hspace*{4.5em} Os restantes valores poss\'\i veis
+ s\~ao os descritos na variante anterior.}\\
+
+ \end{tabular}
+
+ O comando {\tt cmor} no caso em que não tem o último parâmetro opcional
+ tem de ser seguido por um espaço. O espaço antes do direccionamento
+ da seta é obrigatório.
+
+ No caso de se ter o valor 2 (``$\backslash$solidline'') o valor para o
+ direccionamento da seta não é tipo em conta, no entanto dado se
+ tratar de um do parâmetro obrigatório é necessário dar-lhe um valor
+\end{description}
+
+
+\section{Alguns Exemplos}
+
+
+\subsection{Setas Duplas, Transformações Naturais, \ldots}
+
+É de notar que alguns casos aparentemente omissos na actual versão
+podem perfeitamente ser construídos através de uma utilização
+imaginativa dos actuais comandos. Por exemplo os seguintes diagramas:
+
+$$
+\begindc{\commdiag}[30]
+\obj(5,5){$A$}
+\obj(20,5){$B$}
+\mor{$A$}{$B$}{$f$}[\atright,\doublearrow]
+\mor{$A$}{$B$}{$g$}[\atleft,\nullarrow]
+\enddc
+\qquad\qquad\qquad
+\begindc{\commdiag}[140]
+\obj(5,5){$A$}
+\obj(9,5){$B$}
+\mor(5,6)(9,6){$\downarrow\sigma$}[\atright,\solidarrow]
+\mor{$A$}{$B$}{}
+\mor(5,4)(9,4){$\downarrow\tau$}
+\enddc
+$$
+
+Podem ser construídos com a actual versão. Eis como:
+
+
+\begin{lstlisting}
+\begindc{\commdiag}[30]
+\obj(5,5){$A$}
+\obj(20,5){$B$}
+\mor{$A$}{$B$}{$f$}[\atright,\doublearrow]
+\mor{$A$}{$B$}{$g$}[\atleft,\nullarrow]
+
+\begindc{\commdiag}[14]
+\obj(5,5){$A$}
+\obj(9,5){$B$}
+\mor(5,6)(9,6){$\downarrow\sigma$}[\atright,\solidarrow]
+\mor{$A$}{$B$}{}
+\mor(5,4)(9,4){$\downarrow\tau$}
+\enddc
+\end{lstlisting}
+
+
+\subsection{Grafos Orientados com Objectos Circunscritos}
+
+
+$$
+\begindc{\cdigraph}[250]
+\obj(1,5){A}
+\obj(1,4){B}
+\obj(1,1){C}
+\obj(5,5){E}
+\obj(5,3){F}
+\obj(5,1){G}
+\mor{A}{E}[80,80]{5}
+\mor{A}{F}[80,80]{3}
+\mor{B}{F}[80,80]{6}[\atright,\solidarrow]
+\mor{B}{E}[80,80]{1}
+\mor{C}{F}[80,80]{5}
+\mor{C}{G}[80,80]{7}
+\enddc
+$$
+
+Foi produzido através dos seguintes comandos:
+
+
+\begin{lstlisting}
+\begindc{\commdiag}[250]
+\obj(1,5){A}
+\obj(1,4){B}
+\obj(1,1){C}
+\obj(5,5){E}
+\obj(5,3){F}
+\obj(5,1){G}
+\mor{A}{E}[80,80]{5}
+\mor{A}{F}[80,80]{3}
+\mor{B}{F}[80,80]{6}[\atright,\solidarrow]
+\mor{B}{E}[80,80]{1}
+\mor{C}{F}[80,80]{5}
+\mor{C}{G}[80,80]{7}
+\enddc
+\end{lstlisting}
+
+\subsection{Diferentes Tipos de Setas/Linhas}
+
+
+\begin{lstlisting}
+\begindc{\commdiag}[250]
+\obj(10,10)[A]{$OOOOOO$}
+\obj(15,10)[A0]{$A_0$}
+\obj(14,11)[A1]{$A_1$}
+\obj(13,12)[A2]{$A_2$}
+\obj(12,13)[A3]{$A_3$}
+\obj(10,14)[A4]{$A_4$}
+\obj(9,13)[A5]{$A_5$}
+\obj(8,12)[A6]{$A_6$}
+\obj(7,11)[A7]{$A_7$}
+\obj(6,10)[A8]{$A_8$}
+\obj(7,9)[A9]{$A_9$}
+\obj(9,8)[A10]{$A_{10}$}
+\obj(12,8)[A11]{$A_{11}$}
+\mor{A}{A0}{$a_0$}[\atright,\solidarrow]
+\mor{A}{A1}{$a_1$}[\atright,\dashArrow]
+\mor{A}{A2}{$a_2$}[\atright,\dotArrow]
+\mor{A}{A3}{$a_3$}[\atright,\solidline]
+\mor{A}{A4}{$a_4$}[\atright,\dashline]
+\mor{A}{A5}{$a_5$}[\atleft,\dotline]
+\mor{A}{A6}{$a_6$}[\atleft,\injectionarrow]
+\mor{A}{A7}{$a_7$}[\atleft,\aplicationarrow]
+\mor{A}{A8}{$a_8$}[\atleft,\surjectivearrow]
+\mor{A}{A9}{$a_9$}[\atleft,\equalline]
+\mor{A}{A10}{$a_{10}$}[\atleft,\doublearrow]
+\mor{A}{A11}{$a_{11}$}[\atleft,\doubleopposite]
+\mor{A}{A11}{$a_{12}$}[\atright,\nullarrow]
+\enddc
+\end{lstlisting}
+
+$$
+\begindc{\commdiag}[250]
+\obj(10,10)[A]{$OOOOOO$}
+\obj(15,10)[A0]{$A_0$}
+\obj(14,11)[A1]{$A_1$}
+\obj(13,12)[A2]{$A_2$}
+\obj(12,13)[A3]{$A_3$}
+\obj(10,14)[A4]{$A_4$}
+\obj(9,13)[A5]{$A_5$}
+\obj(8,12)[A6]{$A_6$}
+\obj(7,11)[A7]{$A_7$}
+\obj(6,10)[A8]{$A_8$}
+\obj(7,9)[A9]{$A_9$}
+\obj(9,8)[A10]{$A_{10}$}
+\obj(12,8)[A11]{$A_{11}$}
+\mor{A}{A0}{$a_0$}[\atright,\solidarrow]
+\mor{A}{A1}{$a_1$}[\atright,\dashArrow]
+\mor{A}{A2}{$a_2$}[\atright,\dotArrow]
+\mor{A}{A3}{$a_3$}[\atright,\solidline]
+\mor{A}{A4}{$a_4$}[\atright,\dashline]
+\mor{A}{A5}{$a_5$}[\atleft,\dotline]
+\mor{A}{A6}{$a_6$}[\atleft,\injectionarrow]
+\mor{A}{A7}{$a_7$}[\atleft,\aplicationarrow]
+\mor{A}{A8}{$a_8$}[\atleft,\surjectivearrow]
+\mor{A}{A9}{$a_9$}[\atleft,\equalline]
+\mor{A}{A10}{$a_{10}$}[\atleft,\doublearrow]
+\mor{A}{A11}{$a_{11}$}[\atleft,\doubleopposite]
+\mor{A}{A11}{$a_{12}$}[\atright,\nullarrow]
+\enddc
+$$
+
+\subsection{Diagramas com Setas Curvas}
+
+
+
+\begin{lstlisting}
+\begindc{\commdiag}[30]
+\obj(14,11){$A$}
+\obj(39,11){$B$}
+\mor(14,12)(39,12){$f$}
+\mor(39,10)(14,10){$g$}
+\cmor((10,10)(6,11)(5,15)(6,19)(10,20)(14,19)(15,15))
+ \pdown(2,20){$id_A$}
+\cmor((40,7)(41,3)(45,2)(49,3)(50,7)(49,11)(45,12))
+ \pleft(54,3){$id_B$}
+\enddc
+
+\begindc{\commdiag}[30]
+\obj(10,15)[A]{$A$}
+\obj(40,15)[Aa]{$A$}
+\obj(25,15)[B]{$B$}
+\mor{A}{B}{$f$}
+\mor{B}{Aa}{$g$}
+\cmor((10,11)(11,7)(15,6)(25,6)(35,6)(39,7)(40,11))
+ \pup(25,3){$id_A$}
+\enddc
+\end{lstlisting}
+
+$$
+\begindc{\commdiag}[30]
+\obj(14,11){$A$}
+\obj(39,11){$B$}
+\mor(14,12)(39,12){$f$}%[\atright,\solidarrow]
+\mor(39,10)(14,10){$g$}%[\atright,\solidarrow]
+\cmor((10,10)(6,11)(5,15)(6,19)(10,20)(14,19)(15,15))
+ \pdown(2,20){$id_A$}
+\cmor((40,7)(41,3)(45,2)(49,3)(50,7)(49,11)(45,12))
+ \pleft(54,3){$id_B$}
+\enddc
+\qquad
+\begindc{\commdiag}[30]
+\obj(10,15)[A]{$A$}
+\obj(40,15)[Aa]{$A$}
+\obj(25,15)[B]{$B$}
+\mor{A}{B}{$f$}%[\atright,\solidarrow]
+\mor{B}{Aa}{$g$}%[\atright,\solidarrow]
+\cmor((10,11)(11,7)(15,6)(25,6)(35,6)(39,7)(40,11))
+ \pup(25,3){$id_A$}
+\enddc
+$$
+
+\subsection{Um Exemplo Complexo}
+
+O diagrama seguinte foi proposto por Feruglio~\cite{Feruglio94} como
+um caso de teste. Como \'e poss\'\i vel ver o DCpic produz o diagrama
+correctamente a partir de uma especifica\c c\~ao simples.
+
+
+\begin{lstlisting}
+\newcommand{\barraA}{\vrule height2em width0em depth0em}
+\newcommand{\barraB}{\vrule height1.6em width0em depth0em}
+\begindc{\commdiag}[350]
+\obj(1,1)[Gr]{$G$}
+\obj(3,1)[Grstar]{$G_{r^*}$}
+\obj(5,1)[H]{$H$}
+\obj(2,2)[SigmaG]{$\Sigma^G$}
+\obj(6,2)[SigmaH]{$\Sigma^H$}
+\obj(1,3)[Lm]{$L_m$}
+\obj(3,3)[Krm]{$K_{r,m}$}
+\obj(5,3)[Rmstar]{$R_{m^*}$}
+\obj(1,5)[L]{$L$}
+\obj(3,5)[Lr]{$L_r$}
+\obj(5,5)[R]{$R$}
+\obj(2,6)[SigmaL]{$\Sigma^L$}
+\obj(6,6)[SigmaR]{$\Sigma^R$}
+\mor{Gr}{SigmaG}{$\lambda^G$}
+\mor{Grstar}{Gr}{$i_5$}[\atleft,\aplicationarrow]
+\mor{Grstar}{H}{$r^*$}[\atright,\solidarrow]
+\mor{H}{SigmaH}{$\lambda^H$}[\atright,\dashArrow]
+\mor{SigmaG}{SigmaH}{$\varphi^{r^*}$}[\atleft,\solidarrow]
+\mor{Lm}{Gr}{$m$}[\atright,\solidarrow]
+\mor{Lm}{L}{$i_2$}[\atleft,\aplicationarrow]
+\mor{Krm}{Lm}{$i_3\quad$}[\atright,\aplicationarrow]
+\mor{Krm}{Rmstar}{$r$}
+\mor{Krm}{Lr}{$i_4$}[\atright,\aplicationarrow]
+\mor{Krm}{Grstar}{\barraA$m$}
+\mor{Rmstar}{R}{$i_6$}[\atright,\aplicationarrow]
+\mor{Rmstar}{H}{\barraB$m^*$}
+\mor{L}{SigmaL}{$\lambda^L$}
+\mor{Lr}{L}{$i_1\quad$}[\atright,\aplicationarrow]
+\mor{Lr}{R}{$r$}
+\mor{R}{SigmaR}{$\lambda^R$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaG}{$\varphi^m$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaR}{$\varphi^r$}
+\mor{SigmaR}{SigmaH}{$\varphi^{m^*}$}
+\enddc
+\end{lstlisting}
+
+\newcommand{\barraA}{\vrule height2em width0em depth0em}
+\newcommand{\barraB}{\vrule height1.6em width0em depth0em}
+$$\begindc{\commdiag}[350]
+\obj(1,1)[Gr]{$G$}
+\obj(3,1)[Grstar]{$G_{r^*}$}
+\obj(5,1)[H]{$H$}
+\obj(2,2)[SigmaG]{$\Sigma^G$}
+\obj(6,2)[SigmaH]{$\Sigma^H$}
+\obj(1,3)[Lm]{$L_m$}
+\obj(3,3)[Krm]{$K_{r,m}$}
+\obj(5,3)[Rmstar]{$R_{m^*}$}
+\obj(1,5)[L]{$L$}
+\obj(3,5)[Lr]{$L_r$}
+\obj(5,5)[R]{$R$}
+\obj(2,6)[SigmaL]{$\Sigma^L$}
+\obj(6,6)[SigmaR]{$\Sigma^R$}
+\mor{Gr}{SigmaG}{$\lambda^G$}
+\mor{Grstar}{Gr}{$i_5$}[\atleft,\aplicationarrow]
+\mor{Grstar}{H}{$r^*$}[\atright,\solidarrow]
+\mor{H}{SigmaH}{$\lambda^H$}[\atright,\dashArrow]
+\mor{SigmaG}{SigmaH}{$\varphi^{r^*}$}[\atleft,\solidarrow]
+\mor{Lm}{Gr}{$m$}[\atright,\solidarrow]
+\mor{Lm}{L}{$i_2$}[\atleft,\aplicationarrow]
+\mor{Krm}{Lm}{$i_3\quad$}[\atright,\aplicationarrow]
+\mor{Krm}{Rmstar}{$r$}
+\mor{Krm}{Lr}{$i_4$}[\atright,\aplicationarrow]
+\mor{Krm}{Grstar}{\barraA$m$}
+\mor{Rmstar}{R}{$i_6$}[\atright,\aplicationarrow]
+\mor{Rmstar}{H}{\barraB$m^*$}
+\mor{L}{SigmaL}{$\lambda^L$}
+\mor{Lr}{L}{$i_1\quad$}[\atright,\aplicationarrow]
+\mor{Lr}{R}{$r$}
+\mor{R}{SigmaR}{$\lambda^R$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaG}{$\varphi^m$}[\atright,\solidarrow]
+\mor{SigmaL}{SigmaR}{$\varphi^r$}
+\mor{SigmaR}{SigmaH}{$\varphi^{m^*}$}
+\enddc
+$$
+
+
+%\bibliographystyle{plain}
+%\bibliography{pedro}
+
+\newcommand{\noopsort}[1]{} \newcommand{\singleletter}[1]{#1}
+\begin{thebibliography}{1}
+
+\bibitem{Feruglio94}
+{Gabriel Valiente} Feruglio.
+\newblock Typesetting commutative diagrams.
+\newblock {\em TUGboat}, 15(4):466--484, 1994.
+
+\bibitem{Harary72}
+Frank Harary.
+\newblock {\em Graph Theory}.
+\newblock Addison-Wesley, Reading, Massachusetts, 1972.
+
+\bibitem{Herrlich73}
+Horst Herrlich and George Strecker.
+\newblock {\em Category Theory}.
+\newblock Allyn and Bacon Inc., 1973.
+
+\bibitem{Knuth86}
+Donald~E. Knuth.
+\newblock {\em The {\TeX}book}.
+\newblock Addison-Wesley Publishing Company, Reading, Massachusetts, 1986.
+
+\bibitem{Lamport94}
+Leslie Lamport.
+\newblock {\em {\LaTeX}: A Document Preparation System}.
+\newblock Addison-Wesley Publishing Company, Reading,Massachusetts, 2nd
+ edition, 1994.
+
+\bibitem{Pierce98}
+Benjamin Pierce.
+\newblock {\em Basic Category Theory for Computer Scientists}.
+\newblock Foundations of Computing. The MIT Press, London, England, 1998.
+
+\end{thebibliography}
+
+\appendix
+\section{O Código}
+
+{\scriptsize
+\verbatiminput{dcpic.sty}}
+
+\end{document}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: t
+%%% End:
diff --git a/macros/generic/diagrams/diagxy/README b/macros/generic/diagrams/diagxy/README
new file mode 100644
index 0000000000..b9e9795913
--- /dev/null
+++ b/macros/generic/diagrams/diagxy/README
@@ -0,0 +1,8 @@
+This is a set of macros that are a front end to xy-pic that make it
+(relatively) easy to use it to set the kind of diagrams that are
+especially interesting to category theorists. There are two modes of
+macros: the first kind uses shapes such as squares and various triangles
+that fit together like Lego blocks; the second sets the nodes on an
+xy-grid and labels them and then sets arrows between the nodes. All the
+arrow types of xy are allowed in either mode. For the latest upgrade
+(if any) look at http://www.math.mcgill.ca/barr/papers/.
diff --git a/macros/generic/diagrams/diagxy/diagxy.tex b/macros/generic/diagrams/diagxy/diagxy.tex
new file mode 100644
index 0000000000..255be7888c
--- /dev/null
+++ b/macros/generic/diagrams/diagxy/diagxy.tex
@@ -0,0 +1,1259 @@
+ %% diagxy.tex
+ %% Copyright 2001 Michael Barr
+ %
+ % 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 Michael Barr
+ %
+ % This work consists of this file diagxy.tex and the
+ % documentation/tutorial file diaxydoc.tex
+ %
+
+ % This package has been tested and used under plain tex and latex2e
+ % without compatibility problems. There is one known incompatibility with
+ % amstex: the macro \square, which is central the package and I have been
+ % using since the first package before 1990, is also used by amstex for a
+ % small box (e.g. end of proof box). The way to overcome this is to load
+ % amstex first, then if you need that macro, place
+ %
+ % \let\Box\square
+ %
+ % in your file and then input diagxy. This is a front end for xy-pic and
+ % you must have that package installed to load this one.
+
+\def\dated#1{\def\thedate{#1}}%
+\dated{2015-09-26}%
+\newcount\atcode \atcode=\catcode`\@%
+\catcode`\@=12%
+\input xy
+\xyoption{arrow}
+\xyoption{curve}
+\catcode`\@=11
+ \newdimen\xydashw@@
+ \xydashw@@\xydashw@
+ \multiply\xydashw@@ by 7
+ \divide\xydashw@@ by 4
+\setbox\zerodotbox@=\hbox{\dimen@=.5\xydashw@@
+ \kern-\dimen@ \vrule width\xydashw@@ height\dimen@ depth\dimen@}
+\wd\zerodotbox@=\z@ \ht\zerodotbox@=\z@ \dp\zerodotbox@=\z@
+\catcode`\@=12
+
+\newdir{ >>}{{}*!/-2.6667\jot/\dir{>>}}
+\newdir{ >}{{ }*!/-.9em/@{>}}%
+ % \newdir{ (}{{ }*!/-.5em/@{(}}%
+\newdir^{ (}{{ }*!/-.5em/@^{(}}%
+\newdir{< }{!/.9em/@{<}*{ }}%
+\newdir{) }{!/.9em/@^{)}*{ }}%
+\newdir{ (}{{ }*!/-.5em/@^{(}}%
+\newdir{d}{\object{.}}
+\newdir{into}{{ }*!/-1em/@^{(}}% Usage: into->
+
+\newdimen\high%
+\newdimen\ul%
+\newcount\deltax%
+\newcount\deltay%
+\newcount\deltaX%
+\newcount\deltaXprime%
+\newcount\deltaY%
+\newcount\deltaYprime%
+
+\newdimen\wdth%
+\newcount\xend%
+\newcount\yend%
+\newcount\Xend%
+\newcount\Yend%
+\newcount\xpos%
+\newcount\ypos%
+\newcount\default \default=500%
+\newcount\defaultmargin \defaultmargin=150%
+\newcount\topw%
+\newcount\botw%
+\newcount\Xpos%
+\newcount\Ypos%
+\def\ratchet#1#2{\ifnum#1<#2\global #1=#2\fi}%
+
+\catcode`\@=11%
+\expandafter\ifx\csname @ifnextchar\endcsname\relax%
+\def\ifnextchar#1#2#3{\let\@tempe%
+#1\def\@tempa{#2}\def\@tempb{#3}\futurelet%
+ \@tempc\@ifnch}%
+\def\@ifnch{\ifx \@tempc \@sptoken \let\@tempd\@xifnch%
+ \else \ifx \@tempc \@tempe\let\@tempd\@tempa\else\let\@tempd\@tempb\fi%
+ \fi \@tempd}%
+\def\:{\let\@sptoken= } \: % this makes \@sptoken a space token%
+\def\:{\@xifnch} \expandafter\def\: {\futurelet\@tempc\@ifnch}%
+\else%
+\let\ifnextchar\@ifnextchar%
+\fi%
+ % \ifx\check@mathfonts\undefined%
+ % \else \check@mathfonts%
+ % \fi%
+\setbox0=\hbox{$x$}
+\newdimen\axis \axis=\fontdimen22\textfont2%
+\ul=.01em%
+\X@xbase =.01em%
+\Y@ybase =.01em%
+\def\scalefactor#1{\ul=#1\ul \X@xbase=#1\X@xbase \Y@ybase=#1\Y@ybase}%
+\catcode`\@=12%
+
+\def\fontscale#1{%
+\if#1h\relax%
+\font\xydashfont=xydash10 scaled \magstephalf%
+\font\xyatipfont=xyatip10 scaled \magstephalf%
+\font\xybtipfont=xybtip10 scaled \magstephalf%
+\font\xybsqlfont=xybsql10 scaled \magstephalf%
+\font\xycircfont=xycirc10 scaled \magstephalf%
+\else%
+\font\xydashfont=xydash10 scaled \magstep#1%
+\font\xyatipfont=xyatip10 scaled \magstep#1%
+\font\xybtipfont=xybtip10 scaled \magstep#1%
+\font\xybsqlfont=xybsql10 scaled \magstep#1%
+\font\xycircfont=xycirc10 scaled \magstep#1%
+\fi}%
+
+\def\bfig{\vcenter\bgroup\xy}%
+\def\efig{\endxy\egroup}%
+
+\def\car#1#2\nil{#1}%
+
+\def\morphism{\ifnextchar({\morphismp}{\morphismp(0,0)}}%
+\def\morphismp(#1){\ifnextchar|{\morphismpp(#1)}{\morphismpp(#1)|a|}}%
+\def\morphismpp(#1)|#2|{\ifnextchar/{\morphismppp(#1)|#2|}%
+ {\morphismppp(#1)|#2|/>/}}%
+\def\morphismppp(#1)|#2|/#3/{%
+ \ifnextchar<{\morphismpppp(#1)|#2|/#3/}%
+ {\morphismpppp(#1)|#2|/#3/<\default,0>}}%
+
+\def\morphismpppp(#1,#2)|#3|/#4/<#5,#6>[#7`#8;#9]{%
+\xend#1\advance \xend by #5%
+\yend#2\advance \yend by #6%
+\domorphism(#1,#2)|#3|/#4/<#5,#6>[{#7}`{#8};{#9}]}%
+
+
+\def\domorphism(#1,#2)|#3|/#4/<#5,#6>[#7`#8;#9]{%
+ % Check if arrow arg has an @; then don't add it.%
+\def\next{\car#4.\nil}%
+\if@\next\relax%
+ \if#3l%
+ \ifnum #6>0%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else \if#3m%
+ \setbox0\hbox{$#9$}%
+ \ifdim \wd0=0pt%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4 (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4|-*+<1pt,4pt>{\labelstyle#9}%
+ (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else \if#3r%
+ \ifnum #6<0%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else \if#3a%
+ \ifnum #5>0%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else \if#3b%
+ \ifnum #5<0%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4 (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi\fi\fi\fi\fi%
+ %% Otherwise, have to add @{..}%
+\else%
+ \if#3l%
+ \ifnum #6>0%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else \if#3m%
+ \setbox0\hbox{$#9$}%
+ \ifdim \wd0=0pt%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}|-*+<1pt,4pt>{\labelstyle#9}%
+ (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else \if#3r%
+ \ifnum #6<0%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else \if#3a%
+ \ifnum #5>0%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else \if#3b%
+ \ifnum #5<0%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi\fi\fi\fi\fi%
+\fi\ignorespaces}%
+
+\def\vect(#1,#2)/#3/<#4,#5>{%
+ \xend#1 \yend#2 \advance\xend by #4 \advance\yend by #5%
+ \POS(#1,#2)\ar#3 (\xend,\yend)}%
+
+\def\squarepppp(#1,#2)|#3|/#4`#5`#6`#7/<#8>[#9]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3##4|{%
+ \def\xa{##1}\def\xb{##2}\def\xc{##3}\def\xd{##4}\ignorespaces}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#8>%
+\def\next[##1`##2`##3`##4;##5`##6`##7`##8]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}%
+ \def\labela{##5}\def\labelb{##6}\def\labelc{##7}\def\labeld{##8}\ignorespaces}%
+\next[#9]%
+\morphism(\xpos,\ypos)|\xd|/{#7}/<\deltax,0>[\nodec`\noded;\labeld]%
+\advance \ypos by \deltay%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<0,-\deltay>[\nodea`\nodec;\labelb]%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<\deltax,0>[\nodea`\nodeb;\labela]%
+ \advance \xpos by \deltax%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<0,-\deltay>[\nodeb`\noded;\labelc]%
+\ignorespaces}%
+
+\def\square{\ifnextchar({\squarep}{\squarep(0,0)}}%
+\def\squarep(#1){\ifnextchar|{\squarepp(#1)}{\squarepp(#1)|alrb|}}%
+\def\squarepp(#1)|#2|{\ifnextchar/{\squareppp(#1)|#2|}%
+ {\squareppp(#1)|#2|/>`>`>`>/}}%
+\def\squareppp(#1)|#2|/#3`#4`#5`#6/{%
+ \ifnextchar<{\squarepppp(#1)|#2|/#3`#4`#5`#6/}%
+ {\squarepppp(#1)|#2|/#3`#4`#5`#6/<\default,\default>}}%
+
+\def\diamondpppp(#1,#2)|#3|/#4`#5`#6`#7/<#8>[#9]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3##4|{%
+ \def\xa{##1}\def\xb{##2}\def\xc{##3}\def\xd{##4}\ignorespaces}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#8>%
+\def\next[##1`##2`##3`##4;##5`##6`##7`##8]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}%
+ \def\labela{##5}\def\labelb{##6}\def\labelc{##7}%
+\def\labeld{##8}\ignorespaces}%
+\next[#9]%
+\advance\ypos\deltay
+\morphism(\xpos,\ypos)|\xc|/{#6}/<\deltax,-\deltay>[\nodeb`\noded;\labelc]%
+\advance\xpos \deltax
+\advance\xpos \deltax
+\morphism(\xpos,\ypos)|\xd|/{#7}/<-\deltax,-\deltay>[\nodec`\noded;\labeld]%
+\advance\ypos\deltay \advance\xpos -\deltax
+\morphism(\xpos,\ypos)|\xa|/{#4}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]%
+}
+\def\Diamond{\ifnextchar({\diamondp}{\diamondp(0,0)}}%
+\def\diamondp(#1){\ifnextchar|{\diamondpp(#1)}{\diamondpp(#1)|lrlr|}}%
+\def\diamondpp(#1)|#2|{\ifnextchar/{\diamondppp(#1)|#2|}%
+ {\diamondppp(#1)|#2|/>`>`>`>/}}%
+\def\diamondppp(#1)|#2|/#3`#4`#5`#6/{%
+ \ifnextchar<{\diamondpppp(#1)|#2|/#3`#4`#5`#6/}%
+ {\diamondpppp(#1)|#2|/#3`#4`#5`#6/<400,400>}}%
+
+\def\ptrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#7>%
+\def\next[##1`##2`##3;##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}%
+\next[#8]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<\deltax,0>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<0,-\deltay>[\nodea`\nodec;\labelb]%
+\advance\xpos by \deltax%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<-\deltax,-\deltay>[\nodeb`\nodec;\labelc]%
+\ignorespaces}%
+
+\def\qtrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#7>%
+\def\next[##1`##2`##3;##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}%
+\next[#8]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<\deltax,0>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]%
+\advance\xpos by \deltax%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<0,-\deltay>[\nodeb`\nodec;\labelc]%
+\ignorespaces}%
+
+\def\dtrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#7>%
+\def\next[##1`##2`##3;##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}%
+\next[#8]%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<\deltax,0>[\nodeb`\nodec;\labelc]%
+\advance\ypos by \deltay\advance \xpos by \deltax%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<0,-\deltay>[\nodea`\nodec;\labelb]%
+\ignorespaces}%
+
+\def\btrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#7>%
+\def\next[##1`##2`##3;##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}%
+\next[#8]%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<\deltax,0>[\nodeb`\nodec;\labelc]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<0,-\deltay>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]%
+\ignorespaces}%
+
+\def\Atrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#7>%
+\def\next[##1`##2`##3;##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}%
+\next[#8]%
+\multiply\deltax by 2%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<\deltax,0>[\nodeb`\nodec;\labelc]%
+\divide\deltax by 2%
+\advance\ypos by \deltay\advance\xpos by \deltax%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]%
+\ignorespaces}%
+
+\def\Vtrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#7>%
+\def\next[##1`##2`##3;##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}%
+\next[#8]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]%
+\multiply\deltax by 2%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<\deltax,0>[\nodea`\nodeb;\labela]%
+\advance\xpos by \deltax \divide \deltax by 2%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<-\deltax,-\deltay>[\nodeb`\nodec;\labelc]%
+\ignorespaces}%
+
+\def\Ctrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#7>%
+\def\next[##1`##2`##3;##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}%
+\next[#8]%
+\advance \ypos by \deltay%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<\deltax,-\deltay>[\nodeb`\nodec;\labelc]%
+\advance\ypos by \deltay \advance \xpos by \deltax%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]%
+\multiply\deltay by 2%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<0,-\deltay>[\nodea`\nodec;\labelb]%
+\ignorespaces}%
+
+\def\Dtrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#7>%
+\def\next[##1`##2`##3;##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}%
+\next[#8]%
+\advance\xpos by \deltax \advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<-\deltax,-\deltay>[\nodeb`\nodec;\labelc]%
+\advance\xpos by -\deltax \advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodeb;\labelb]%
+\multiply \deltay by 2%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<0,-\deltay>[\nodea`\nodec;\labela]%
+\ignorespaces}%
+
+\def\ptriangle{\ifnextchar({\ptrianglep}{\ptrianglep(0,0)}}%
+\def\ptrianglep(#1){\ifnextchar|{\ptrianglepp(#1)}{\ptrianglepp(#1)|alr|}}%
+\def\ptrianglepp(#1)|#2|{\ifnextchar/{\ptriangleppp(#1)|#2|}%
+ {\ptriangleppp(#1)|#2|/>`>`>/}}%
+\def\ptriangleppp(#1)|#2|/#3`#4`#5/{%
+ \ifnextchar<{\ptrianglepppp(#1)|#2|/#3`#4`#5/}%
+ {\ptrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%
+
+\def\qtriangle{\ifnextchar({\qtrianglep}{\qtrianglep(0,0)}}%
+\def\qtrianglep(#1){\ifnextchar|{\qtrianglepp(#1)}{\qtrianglepp(#1)|alr|}}%
+\def\qtrianglepp(#1)|#2|{\ifnextchar/{\qtriangleppp(#1)|#2|}%
+ {\qtriangleppp(#1)|#2|/>`>`>/}}%
+\def\qtriangleppp(#1)|#2|/#3`#4`#5/{%
+ \ifnextchar<{\qtrianglepppp(#1)|#2|/#3`#4`#5/}%
+ {\qtrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%
+
+\def\dtriangle{\ifnextchar({\dtrianglep}{\dtrianglep(0,0)}}%
+\def\dtrianglep(#1){\ifnextchar|{\dtrianglepp(#1)}{\dtrianglepp(#1)|lrb|}}%
+\def\dtrianglepp(#1)|#2|{\ifnextchar/{\dtriangleppp(#1)|#2|}%
+ {\dtriangleppp(#1)|#2|/>`>`>/}}%
+\def\dtriangleppp(#1)|#2|/#3`#4`#5/{%
+ \ifnextchar<{\dtrianglepppp(#1)|#2|/#3`#4`#5/}%
+ {\dtrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%
+
+\def\btriangle{\ifnextchar({\btrianglep}{\btrianglep(0,0)}}%
+\def\btrianglep(#1){\ifnextchar|{\btrianglepp(#1)}{\btrianglepp(#1)|lrb|}}%
+\def\btrianglepp(#1)|#2|{\ifnextchar/{\btriangleppp(#1)|#2|}%
+ {\btriangleppp(#1)|#2|/>`>`>/}}%
+\def\btriangleppp(#1)|#2|/#3`#4`#5/{%
+ \ifnextchar<{\btrianglepppp(#1)|#2|/#3`#4`#5/}%
+ {\btrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%
+
+\def\Atriangle{\ifnextchar({\Atrianglep}{\Atrianglep(0,0)}}%
+\def\Atrianglep(#1){\ifnextchar|{\Atrianglepp(#1)}{\Atrianglepp(#1)|lrb|}}%
+\def\Atrianglepp(#1)|#2|{\ifnextchar/{\Atriangleppp(#1)|#2|}%
+ {\Atriangleppp(#1)|#2|/>`>`>/}}%
+\def\Atriangleppp(#1)|#2|/#3`#4`#5/{%
+ \ifnextchar<{\Atrianglepppp(#1)|#2|/#3`#4`#5/}%
+ {\Atrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%
+
+\def\Vtriangle{\ifnextchar({\Vtrianglep}{\Vtrianglep(0,0)}}%
+\def\Vtrianglep(#1){\ifnextchar|{\Vtrianglepp(#1)}{\Vtrianglepp(#1)|alb|}}%
+\def\Vtrianglepp(#1)|#2|{\ifnextchar/{\Vtriangleppp(#1)|#2|}%
+ {\Vtriangleppp(#1)|#2|/>`>`>/}}%
+\def\Vtriangleppp(#1)|#2|/#3`#4`#5/{%
+ \ifnextchar<{\Vtrianglepppp(#1)|#2|/#3`#4`#5/}%
+ {\Vtrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%
+
+\def\Ctriangle{\ifnextchar({\Ctrianglep}{\Ctrianglep(0,0)}}%
+\def\Ctrianglep(#1){\ifnextchar|{\Ctrianglepp(#1)}{\Ctrianglepp(#1)|arb|}}%
+\def\Ctrianglepp(#1)|#2|{\ifnextchar/{\Ctriangleppp(#1)|#2|}%
+ {\Ctriangleppp(#1)|#2|/>`>`>/}}%
+\def\Ctriangleppp(#1)|#2|/#3`#4`#5/{%
+ \ifnextchar<{\Ctrianglepppp(#1)|#2|/#3`#4`#5/}%
+ {\Ctrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%
+
+\def\Dtriangle{\ifnextchar({\Dtrianglep}{\Dtrianglep(0,0)}}%
+\def\Dtrianglep(#1){\ifnextchar|{\Dtrianglepp(#1)}{\Dtrianglepp(#1)|lab|}}%
+\def\Dtrianglepp(#1)|#2|{\ifnextchar/{\Dtriangleppp(#1)|#2|}%
+ {\Dtriangleppp(#1)|#2|/>`>`>/}}%
+\def\Dtriangleppp(#1)|#2|/#3`#4`#5/{%
+ \ifnextchar<{\Dtrianglepppp(#1)|#2|/#3`#4`#5/}%
+ {\Dtrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%
+
+
+\def\Atrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<#8>[#9]{%
+\def\next(##1,##2){\xpos##1\ypos##2}%
+\next(#1)%
+\def\next|##1##2##3##4##5|{\def\xa{##1}\def\xb{##2}%
+\def\xc{##3}\def\xd{##4}\def\xe{##5}}%
+\next|#2|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#8>%
+\def\next[##1`##2`##3`##4;##5`##6`##7`##8`##9]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}%
+ \def\labela{##5}\def\labelb{##6}\def\labelc{##7}\def\labeld{##8}\def\labele{##9}}%
+\next[#9]%
+\morphism(\xpos,\ypos)|\xd|/{#6}/<\deltax,0>[\nodeb`\nodec;\labeld]%
+\advance\xpos by \deltax%
+\morphism(\xpos,\ypos)|\xe|/{#7}/<\deltax,0>[\nodec`\noded;\labele]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xa|/{#3}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#4}/<0,-\deltay>[\nodea`\nodec;\labelb]%
+\morphism(\xpos,\ypos)|\xc|/{#5}/<\deltax,-\deltay>[\nodea`\noded;\labelc]%
+\ignorespaces}%
+
+\def\Vtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<#8>[#9]{%
+\def\next(##1,##2){\xpos##1\ypos##2}%
+\next(#1)%
+\def\next|##1##2##3##4##5|{\def\xa{##1}\def\xb{##2}%
+\def\xc{##3}\def\xd{##4}\def\xe{##5}}%
+\next|#2|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#8>%
+\def\next[##1`##2`##3`##4;##5`##6`##7`##8`##9]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}%
+ \def\labela{##5}\def\labelb{##6}\def\labelc{##7}\def\labeld{##8}\def\labele{##9}}%
+\next[#9]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xa|/{#3}/<\deltax,0>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xc|/{#5}/<\deltax,-\deltay>[\nodea`\noded;\labelc]%
+\advance\xpos by \deltax%
+\morphism(\xpos,\ypos)|\xb|/{#4}/<\deltax,0>[\nodeb`\nodec;\labelb]%
+\morphism(\xpos,\ypos)|\xd|/{#6}/<0,-\deltay>[\nodeb`\noded;\labeld]%
+\advance\xpos by \deltax%
+\morphism(\xpos,\ypos)|\xe|/{#7}/<-\deltax,-\deltay>[\nodec`\noded;\labele]%
+\ignorespaces}%
+
+\def\Ctrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<#8>[#9]{%
+\def\next(##1,##2){\xpos##1\ypos##2}%
+\next(#1)%
+\def\next|##1##2##3##4##5|{\def\xa{##1}\def\xb{##2}%
+\def\xc{##3}\def\xd{##4}\def\xe{##5}}%
+\next|#2|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#8>%
+\def\next[##1`##2`##3`##4;##5`##6`##7`##8`##9]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}%
+ \def\labela{##5}\def\labelb{##6}\def\labelc{##7}\def\labeld{##8}\def\labele{##9}}%
+\next[#9]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xe|/{#7}/<0,-\deltay>[\nodec`\noded;\labele]%
+\advance\xpos by -\deltax%
+\morphism(\xpos,\ypos)|\xc|/{#5}/<\deltax,0>[\nodeb`\nodec;\labelc]%
+\morphism(\xpos,\ypos)|\xd|/{#6}/<\deltax,-\deltay>[\nodeb`\noded;\labeld]%
+\advance\ypos by \deltay%
+\advance\xpos by \deltax%
+\morphism(\xpos,\ypos)|\xa|/{#3}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#4}/<0,-\deltay>[\nodea`\nodec;\labelb]%
+\ignorespaces}%
+
+\def\Dtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<#8>[#9]{%
+\def\next(##1,##2){\xpos##1\ypos##2}%
+\next(#1)%
+\def\next|##1##2##3##4##5|{\def\xa{##1}\def\xb{##2}%
+\def\xc{##3}\def\xd{##4}\def\xe{##5}}%
+\next|#2|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#8>%
+\def\next[##1`##2`##3`##4;##5`##6`##7`##8`##9]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}%
+ \def\labela{##5}\def\labelb{##6}\def\labelc{##7}\def\labeld{##8}\def\labele{##9}}%
+\next[#9]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xc|/{#5}/<\deltax,0>[\nodeb`\nodec;\labelc]%
+\morphism(\xpos,\ypos)|\xd|/{#6}/<0,-\deltay>[\nodeb`\noded;\labeld]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xa|/{#3}/<0,-\deltay>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#4}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]%
+\advance\ypos by -\deltay%
+\advance\xpos by \deltax%
+\morphism(\xpos,\ypos)|\xe|/{#7}/<-\deltax,-\deltay>[\nodec`\noded;\labele]%
+\ignorespaces}%
+\def\Atrianglepair{\ifnextchar({\Atrianglepairp}{\Atrianglepairp(0,0)}}%
+\def\Atrianglepairp(#1){\ifnextchar|{\Atrianglepairpp(#1)}%
+{\Atrianglepairpp(#1)|lmrbb|}}%
+\def\Atrianglepairpp(#1)|#2|{\ifnextchar/{\Atrianglepairppp(#1)|#2|}%
+ {\Atrianglepairppp(#1)|#2|/>`>`>`>`>/}}%
+\def\Atrianglepairppp(#1)|#2|/#3`#4`#5`#6`#7/{%
+ \ifnextchar<{\Atrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/}%
+ {\Atrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<\default,\default>}}%
+
+\def\Vtrianglepair{\ifnextchar({\Vtrianglepairp}{\Vtrianglepairp(0,0)}}%
+\def\Vtrianglepairp(#1){\ifnextchar|{\Vtrianglepairpp(#1)}%
+{\Vtrianglepairpp(#1)|aalmr|}}%
+\def\Vtrianglepairpp(#1)|#2|{\ifnextchar/{\Vtrianglepairppp(#1)|#2|}%
+ {\Vtrianglepairppp(#1)|#2|/>`>`>`>`>/}}%
+\def\Vtrianglepairppp(#1)|#2|/#3`#4`#5`#6`#7/{%
+ \ifnextchar<{\Vtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/}%
+ {\Vtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<\default,\default>}}%
+
+\def\Ctrianglepair{\ifnextchar({\Ctrianglepairp}{\Ctrianglepairp(0,0)}}%
+\def\Ctrianglepairp(#1){\ifnextchar|{\Ctrianglepairpp(#1)}%
+{\Ctrianglepairpp(#1)|lrmlr|}}%
+\def\Ctrianglepairpp(#1)|#2|{\ifnextchar/{\Ctrianglepairppp(#1)|#2|}%
+ {\Ctrianglepairppp(#1)|#2|/>`>`>`>`>/}}%
+\def\Ctrianglepairppp(#1)|#2|/#3`#4`#5`#6`#7/{%
+ \ifnextchar<{\Ctrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/}%
+ {\Ctrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<\default,\default>}}%
+
+\def\Dtrianglepair{\ifnextchar({\Dtrianglepairp}{\Dtrianglepairp(0,0)}}%
+\def\Dtrianglepairp(#1){\ifnextchar|{\Dtrianglepairpp(#1)}%
+{\Dtrianglepairpp(#1)|lrmlr|}}%
+\def\Dtrianglepairpp(#1)|#2|{\ifnextchar/{\Dtrianglepairppp(#1)|#2|}%
+ {\Dtrianglepairppp(#1)|#2|/>`>`>`>`>/}}%
+\def\Dtrianglepairppp(#1)|#2|/#3`#4`#5`#6`#7/{%
+ \ifnextchar<{\Dtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/}%
+ {\Dtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<\default,\default>}}%
+
+\def\pplace[#1](#2,#3)[#4]{\POS(#2,#3)*+!!<0ex,\axis>!#1{#4}\ignorespaces}%
+\def\cplace(#1,#2)[#3]{\POS(#1,#2)*+!!<0ex,\axis>{#3}\ignorespaces}%
+\def\place{\ifnextchar[{\pplace}{\cplace}}%
+
+\def\pullback#1]#2]{\square#1]\trident#2]\ignorespaces}%
+
+\def\tridentppp|#1#2#3|/#4`#5`#6/<#7,#8>[#9]{%
+\def\next[##1;##2`##3`##4]{\def\nodee{##1}\def\labele{##2}%
+ \def\labelf{##3}\def\labelg{##4}}%
+\next[#9]%
+\advance \xpos by -\deltax%
+\advance \xpos by -#7\advance \ypos by #8%
+\advance\deltax by #7%
+\morphism(\xpos,\ypos)|#1|/{#4}/<\deltax,-#8>[\nodee`\nodeb;\labele]%
+\advance\deltax by -#7%
+\morphism(\xpos,\ypos)|#2|/{#5}/<#7,-#8>[\nodee`\nodea;\labelf]%
+\advance\deltay by #8%
+\morphism(\xpos,\ypos)|#3|/{#6}/<#7,-\deltay>[\nodee`\nodec;\labelg]%
+\ignorespaces}%
+
+\def\trident{\ifnextchar|{\tridentp}{\tridentp|amb|}}%
+\def\tridentp|#1|{\ifnextchar/{\tridentpp|#1|}{\tridentpp|#1|/{>}`{>}`{>}/}}%
+\def\tridentpp|#1|/#2/{\ifnextchar<{\tridentppp|#1|/#2/}%
+ {\tridentppp|#1|/#2/<500,500>}}%
+
+\def\setmorphismwidth#1#2#3#4{%
+ \setbox0=\hbox{$#1{\labelstyle#3#3}#2$}#4=\wd0%
+ \divide #4 by 2 \divide #4 by \ul%
+ \advance #4 by 350 \ratchet{#4}{500}}%
+
+\def\setSquarewidth[#1`#2`#3`#4;#5`#6`#7`#8]{%
+ \setmorphismwidth{#1}{#2}{#5}{\topw}%
+ \setmorphismwidth{#3}{#4}{#8}{\botw}%
+\ratchet{\topw}{\botw}}%
+
+\def\Squarepppp(#1)|#2|/#3/<#4>[#5]{%
+ \setSquarewidth[#5]%
+ \squarepppp(#1)|#2|/#3/<\topw,#4>[#5]%
+\ignorespaces}%
+
+\def\Square{\ifnextchar({\Squarep}{\Squarep(0,0)}}%
+\def\Squarep(#1){\ifnextchar|{\Squarepp(#1)}{\Squarepp(#1)|alrb|}}%
+\def\Squarepp(#1)|#2|{\ifnextchar/{\Squareppp(#1)|#2|}%
+ {\Squareppp(#1)|#2|/>`>`>`>/}}%
+\def\Squareppp(#1)|#2|/#3`#4`#5`#6/{%
+ \ifnextchar<{\Squarepppp(#1)|#2|/#3`#4`#5`#6/}%
+ {\Squarepppp(#1)|#2|/#3`#4`#5`#6/<\default>}}%
+
+\def\hsquarespppp(#1,#2)|#3|/#4/<#5>[#6;#7]{%
+\Xpos=#1\Ypos=#2%
+\def\next|##1##2##3##4##5##6##7|{%
+ \def\Xa{##1}\def\Xb{##2}\def\Xc{##3}\def\Xd{##4}%
+ \def\Xe{##5}\def\Xf{##6}\def\Xg{##7}}%
+\next|#3|%
+\def\next<##1,##2,##3>{\deltaX=##1\deltaXprime=##2\deltaY=##3}%
+\next<#5>%
+\def\next[##1`##2`##3`##4`##5`##6]{%
+ \def\Nodea{##1}\def\Nodeb{##2}\def\Nodec{##3}%
+ \def\Noded{##4}\def\Nodee{##5}\def\Nodef{##6}}%
+\next[#6]%
+\def\next[##1`##2`##3`##4`##5`##6`##7]{%
+ \def\Labela{##1}\def\Labelb{##2}\def\Labelc{##3}\def\Labeld{##4}%
+ \def\Labele{##5}\def\Labelf{##6}\def\Labelg{##7}}%
+\next[#7]%
+\dohsquares/#4/}%
+
+\def\dohsquares/#1`#2`#3`#4`#5`#6`#7/{%
+\squarepppp(\Xpos,\Ypos)|\Xa\Xc\Xd\Xf|/#1`#3`#4`#6/<\deltaX,\deltaY>%
+ [\Nodea`\Nodeb`\Noded`\Nodee;\Labela`\Labelc`\Labeld`\Labelf]%
+ \advance \Xpos by \deltaX%
+\squarepppp(\Xpos,\Ypos)|\Xb\Xd\Xe\Xg|/#2``#5`#7/<\deltaXprime,\deltaY>%
+[\Nodeb`\Nodec`\Nodee`\Nodef;\Labelb``\Labele`\Labelg]%
+\ignorespaces}%
+
+\def\hsquares{\ifnextchar({\hsquaresp}{\hsquaresp(0,0)}}%
+\def\hsquaresp(#1){\ifnextchar|{\hsquarespp(#1)}{\hsquarespp%
+(#1)|aalmrbb|}}%
+\def\hsquarespp(#1)|#2|{\ifnextchar/{\hsquaresppp(#1)|#2|}%
+ {\hsquaresppp(#1)|#2|/>`>`>`>`>`>`>/}}%
+\def\hsquaresppp(#1)|#2|/#3/{%
+ \ifnextchar<{\hsquarespppp(#1)|#2|/#3/}%
+ {\hsquarespppp(#1)|#2|/#3/<\default,\default,\default>}}%
+
+\def\hSquarespppp(#1,#2)|#3|/#4/<#5>[#6;#7]{%
+\Xpos=#1\Ypos=#2%
+\def\next|##1##2##3##4##5##6##7|{%
+ \def\Xa{##1}\def\Xb{##2}\def\Xc{##3}\def\Xd{##4}%
+ \def\Xe{##5}\def\Xf{##6}\def\Xg{##7}}%
+\next|#3|%
+\deltaY=#5%
+\def\next[##1`##2`##3`##4`##5`##6]{%
+ \def\Nodea{##1}\def\Nodeb{##2}\def\Nodec{##3}%
+ \def\Noded{##4}\def\Nodee{##5}\def\Nodef{##6}}%
+\next[#6]%
+\def\next[##1`##2`##3`##4`##5`##6`##7]{%
+ \def\Labela{##1}\def\Labelb{##2}\def\Labelc{##3}\def\Labeld{##4}%
+ \def\Labele{##5}\def\Labelf{##6}\def\Labelg{##7}}%
+\next[#7]%
+\dohSquares/#4/}%
+
+\def\dohSquares/#1`#2`#3`#4`#5`#6`#7/{%
+\Squarepppp(\Xpos,\Ypos)|\Xa\Xc\Xd\Xf|/#1`#3`#4`#6/<\deltaY>%
+ [\Nodea`\Nodeb`\Noded`\Nodee;\Labela`\Labelc`\Labeld`\Labelf]%
+ \advance \Xpos by \topw%
+\Squarepppp(\Xpos,\Ypos)|\Xb\Xd\Xe\Xg|/#2``#5`#7/<\deltaY>%
+[\Nodeb`\Nodec`\Nodee`\Nodef;\Labelb``\Labele`\Labelg]%
+\ignorespaces}%
+
+\def\hSquares{\ifnextchar({\hSquaresp}{\hSquaresp(0,0)}}%
+\def\hSquaresp(#1){\ifnextchar|{\hSquarespp(#1)}{\hSquarespp%
+(#1)|aalmrbb|}}%
+\def\hSquarespp(#1)|#2|{\ifnextchar/{\hSquaresppp(#1)|#2|}%
+ {\hSquaresppp(#1)|#2|/>`>`>`>`>`>`>/}}%
+\def\hSquaresppp(#1)|#2|/#3/{%
+ \ifnextchar<{\hSquarespppp(#1)|#2|/#3/}%
+ {\hSquarespppp(#1)|#2|/#3/<\default>}}%
+
+\def\vsquarespppp(#1,#2)|#3|/#4/<#5>[#6;#7]{%
+\Xpos=#1\Ypos=#2%
+\def\next|##1##2##3##4##5##6##7|{%
+ \def\Xa{##1}\def\Xb{##2}\def\Xc{##3}\def\Xd{##4}%
+ \def\Xe{##5}\def\Xf{##6}\def\Xg{##7}}%
+\next|#3|%
+\def\next<##1,##2,##3>{\deltaX=##1\deltaY=##2\deltaYprime=##3}%
+\next<#5>%
+\def\next[##1`##2`##3`##4`##5`##6]{%
+ \def\Nodea{##1}\def\Nodeb{##2}\def\Nodec{##3}%
+ \def\Noded{##4}\def\Nodee{##5}\def\Nodef{##6}}%
+\next[#6]%
+\def\next[##1`##2`##3`##4`##5`##6`##7]{%
+ \def\Labela{##1}\def\Labelb{##2}\def\Labelc{##3}\def\Labeld{##4}%
+ \def\Labele{##5}\def\Labelf{##6}\def\Labelg{##7}}%
+\next[#7]%
+\dovsquares/#4/}%
+
+\def\dovsquares/#1`#2`#3`#4`#5`#6`#7/{%
+\squarepppp(\Xpos,\Ypos)|\Xd\Xe\Xf\Xg|/`#5`#6`#7/<\deltaX,\deltaYprime>%
+[\Nodec`\Noded`\Nodee`\Nodef;`\Labele`\Labelf`\Labelg]%
+ \advance\Ypos by \deltaYprime%
+\squarepppp(\Xpos,\Ypos)|\Xa\Xb\Xc\Xd|/#1`#2`#3`#4/<\deltaX,\deltaY>%
+ [\Nodea`\Nodeb`\Nodec`\Noded;\Labela`\Labelb`\Labelc`\Labeld]%
+\ignorespaces}%
+
+\def\vsquares{\ifnextchar({\vsquaresp}{\vsquaresp(0,0)}}%
+\def\vsquaresp(#1){\ifnextchar|{\vsquarespp(#1)}{\vsquarespp%
+(#1)|aalmrbb|}}%
+\def\vsquarespp(#1)|#2|{\ifnextchar/{\vsquaresppp(#1)|#2|}%
+ {\vsquaresppp(#1)|#2|/>`>`>`>`>`>`>/}}%
+\def\vsquaresppp(#1)|#2|/#3/{%
+ \ifnextchar<{\vsquarespppp(#1)|#2|/#3/}%
+ {\vsquarespppp(#1)|#2|/#3/<\default,\default,\default>}}%
+
+
+\def\vSquarespppp(#1,#2)|#3|/#4/<#5,#6>[#7;#8]{%
+\Xpos=#1\Ypos=#2%
+\def\next|##1##2##3##4##5##6##7|{%
+ \def\Xa{##1}\def\Xb{##2}\def\Xc{##3}\def\Xd{##4}%
+ \def\Xe{##5}\def\Xf{##6}\def\Xg{##7}}%
+\next|#3|%
+\deltaX=#5%
+\deltaY=#6%
+\def\next[##1`##2`##3`##4`##5`##6]{%
+ \def\Nodea{##1}\def\Nodeb{##2}\def\Nodec{##3}%
+ \def\Noded{##4}\def\Nodee{##5}\def\Nodef{##6}}%
+\next[#7]%
+\def\next[##1`##2`##3`##4`##5`##6`##7]{%
+ \def\Labela{##1}\def\Labelb{##2}\def\Labelc{##3}\def\Labeld{##4}%
+ \def\Labele{##5}\def\Labelf{##6}\def\Labelg{##7}}%
+\next[#8]%
+\dovSquares/#4/\ignorespaces}%
+
+\def\dovSquares/#1`#2`#3`#4`#5`#6`#7/{%
+\setmorphismwidth{\Nodea}{\Nodeb}{\Labela}{\topw}%
+\setmorphismwidth{\Nodec}{\Noded}{\Labeld}{\botw}%
+\ratchet{\topw}{\botw}%
+\setmorphismwidth{\Nodee}{\Nodef}{\Labelg}{\botw}%
+\ratchet{\topw}{\botw}%
+\square(\Xpos,\Ypos)|\Xd\Xe\Xf\Xg|/`#5`#6`#7/<\topw,\deltaY>%
+ [\Nodec`\Noded`\Nodee`\Nodef;`\Labele`\Labelf`\Labelg]%
+\advance \Ypos by \deltaY%
+\square(\Xpos,\Ypos)|\Xa\Xb\Xc\Xd|/#1`#2`#3`#4/<\topw,\deltaX>%
+ [\Nodea`\Nodeb`\Nodec`\Noded;\Labela`\Labelb`\Labelc`\Labeld]%
+}%
+
+\def\vSquares{\ifnextchar({\vSquaresp}{\vSquaresp(0,0)}}%
+\def\vSquaresp(#1){\ifnextchar|{\vSquarespp(#1)}{\vSquarespp%
+(#1)|alrmlrb|}}%
+\def\vSquarespp(#1)|#2|{\ifnextchar/{\vSquaresppp(#1)|#2|}%
+ {\vSquaresppp(#1)|#2|/>`>`>`>`>`>`>/}}%
+\def\vSquaresppp(#1)|#2|/#3/{%
+ \ifnextchar<{\vSquarespppp(#1)|#2|/#3/}%
+ {\vSquarespppp(#1)|#2|/#3/<\default,\default>}}%
+
+\def\osquarepppp(#1)|#2|/#3`#4`#5`#6/<#7>[#8]{\squarepppp%
+ (#1)|#2|/#3`#4`#5`#6/<#7>[#8]%
+ \let\Nodea\nodea\let\Nodeb\nodeb%
+\let\Nodec\nodec\let\Noded\noded\Xpos=\xpos\Ypos=\ypos%
+\deltaX=\deltax \deltaY=\deltay \isquare}%
+
+\def\cube{\ifnextchar({\osquarep}{\osquarep(0,0)}}%
+\def\osquarep(#1){\ifnextchar|{\osquarepp(#1)}{\osquarepp(#1)|alrb|}}%
+\def\osquarepp(#1)|#2|{\ifnextchar/{\osquareppp(#1)|#2|}%
+ {\osquareppp(#1)|#2|/>`>`>`>/}}%
+\def\osquareppp(#1)|#2|/#3`#4`#5`#6/{%
+ \ifnextchar<{\osquarepppp(#1)|#2|/#3`#4`#5`#6/}%
+ {\osquarepppp(#1)|#2|/#3`#4`#5`#6/<1500,1500>}}%
+
+\def\isquarepppp(#1)|#2|/#3`#4`#5`#6/<#7>[#8]{%
+ \squarepppp(#1)|#2|/#3`#4`#5`#6/<#7>[#8]%
+\ifnextchar|{\cubep}{\cubep|mmmm|}}%
+\def\cubep|#1|{\ifnextchar/{\cubepp|#1|}{\cubepp|#1|/>`>`>`>/}}%
+
+\def\isquare{\ifnextchar({\isquarep}{\isquarep(\default,\default)}}%
+\def\isquarep(#1){\ifnextchar|{\isquarepp(#1)}{\isquarepp(#1)|alrb|}}%
+\def\isquarepp(#1)|#2|{\ifnextchar/{\isquareppp(#1)|#2|}%
+ {\isquareppp(#1)|#2|/>`>`>`>/}}%
+\def\isquareppp(#1)|#2|/#3`#4`#5`#6/{%
+ \ifnextchar<{\isquarepppp(#1)|#2|/#3`#4`#5`#6/}%
+ {\isquarepppp(#1)|#2|/#3`#4`#5`#6/<500,500>}}%
+
+\def\cubepp|#1#2#3#4|/#5`#6`#7`#8/[#9]{%
+\def\next[##1`##2`##3`##4]{\gdef\Labela{##1}%
+\gdef\Labelb{##2}\gdef\Labelc{##3}\gdef\Labeld{##4}}\next[#9]%
+\xend\xpos \yend\ypos%
+\Xend\xend\advance\Xend by -\Xpos%
+\Yend\yend\advance\Yend by -\Ypos%
+\domorphism(\Xpos,\Ypos)|#2|/#6/<\Xend,\Yend>[\Nodeb`\nodeb;\Labelb]%
+\advance\Xpos by-\deltaX%
+\advance\xend by-\deltax%
+\Xend\xend\advance\Xend by -\Xpos%
+\domorphism(\Xpos,\Ypos)|#1|/#5/<\Xend,\Yend>[\Nodea`\nodea;\Labela]%
+\advance\Ypos by-\deltaY%
+\advance\yend by-\deltay%
+\Yend\yend\advance\Yend by -\Ypos%
+\domorphism(\Xpos,\Ypos)|#3|/#7/<\Xend,\Yend>[\Nodec`\nodec;\Labelc]%
+\advance\Xpos by\deltaX%
+\advance\xend by\deltax%
+\Xend\xend\advance\Xend by -\Xpos%
+\domorphism(\Xpos,\Ypos)|#4|/#8/<\Xend,\Yend>[\Noded`\noded;\Labeld]%
+\ignorespaces}%
+
+\def\setwdth#1#2{\setbox0\hbox{$\labelstyle#1$}\wdth=\wd0%
+\setbox0\hbox{$\labelstyle#2$}\ifnum\wdth<\wd0 \wdth=\wd0 \fi}%
+
+\def\topppp/#1/<#2>^#3_#4{\:%
+\ifnum#2=0%
+ \setwdth{#3}{#4}\deltax=\wdth \divide \deltax by \ul%
+ \advance \deltax by \defaultmargin \ratchet{\deltax}{100}%
+\else \deltax #2%
+\fi%
+\xy\ar@{#1}^{#3}_{#4}(\deltax,0) \endxy%
+\:}%
+
+\def\toppp/#1/<#2>^#3{\ifnextchar_{\topppp/#1/<#2>^{#3}}{\topppp/#1/<#2>^{#3}_{}}}%
+\def\topp/#1/<#2>{\ifnextchar^{\toppp/#1/<#2>}{\toppp/#1/<#2>^{}}}%
+\def\toop/#1/{\ifnextchar<{\topp/#1/}{\topp/#1/<0>}}%
+\def\to{\ifnextchar/{\toop}{\toop/>/}}%
+
+
+\def\mon{\to/ >->/}%
+\def\epi{\to/->>/}%
+\def\toleft{\to/<-/}%
+\def\monleft{\to/<-< /}%
+\def\epileft{\to/<<-/}%
+
+\def\rlimto{{%
+\font\xyatipfont=xyatip10 scaled 800
+\font\xybtipfont=xybtip10 scaled 800
+\raise 2pt\hbox{\,\xy\ar@{->}(100,0) \endxy}\,}}
+\def\llimto{{%
+\font\xyatipfont=xyatip10 scaled 800
+\font\xybtipfont=xybtip10 scaled 800
+\raise 2pt\hbox{\,\xy\ar@{<-}(100,0) \endxy}\,}}
+
+
+\def\twopppp/#1`#2/<#3>^#4_#5{\:%
+\ifnum0=#3%
+ \setwdth{#4}{#5}\deltax=\wdth \divide \deltax by \ul \advance \deltax%
+ by \defaultmargin \ratchet{\deltax}{200}%
+\else \deltax#3 \fi%
+\xy\ar@{#1}@<2.5pt>^{#4}(\deltax,0)%
+\ar@{#2}@<-2.5pt>_{#5}(\deltax,0)\endxy\:}%
+
+\def\twoppp/#1`#2/<#3>^#4{\ifnextchar_{\twopppp/#1`#2/<#3>^{#4}}%
+ {\twopppp/#1`#2/<#3>^{#4}_{}}}%
+\def\twopp/#1`#2/<#3>{\ifnextchar^{\twoppp/#1`#2/<#3>}{\twoppp/#1`#2/<#3>^{}}}%
+\def\twop/#1`#2/{\ifnextchar<{\twopp/#1`#2/}{\twopp/#1`#2/<0>}}%
+\def\two{\ifnextchar/{\twop}{\twop/>`>/}}%
+
+\def\twoleft{\two/<-`<-/}%
+
+\def\threeppppp/#1`#2`#3/<#4>^#5|#6_#7{\:%
+\ifnum0=#4%
+\setbox0\hbox{$\labelstyle#5$}\wdth=\wd0%
+\setbox0\hbox{$\labelstyle#6$}\ifnum\wdth<\wd0 \wdth=\wd0 \fi%
+\setbox0\hbox{$\labelstyle#7$}\ifnum\wdth<\wd0 \wdth=\wd0 \fi%
+\deltax=\wdth \divide \deltax by \ul \advance \deltax by%
+\defaultmargin \ratchet{\deltax}{300}%
+\else\deltax#4 \fi%
+ \xy \ifnum\wd0=0 \ar@{#2}(\deltax,0)%
+ \else \ar@{#2}|{#6}(\deltax,0)\fi%
+\ar@{#1}@<4.5pt>^{#5}(\deltax,0)%
+\ar@{#3}@<-4.5pt>_{#7}(\deltax,0)\endxy\:}%
+
+\def\threepppp/#1`#2`#3/<#4>^#5|#6{\ifnextchar_{\threeppppp%
+ /#1`#2`#3/<#4>^{#5}|{#6}}{\threeppppp/#1`#2`#3/<#4>^{#5}|{#6}_{}}}%
+\def\threeppp/#1`#2`#3/<#4>^#5{\ifnextchar|{\threepppp%
+ /#1`#2`#3/<#4>^{#5}}{\threepppp/#1`#2`#3/<#4>^{#5}|{}}}%
+\def\threepp/#1`#2`#3/<#4>{\ifnextchar^{\threeppp/#1`#2`#3/<#4>}%
+ {\threeppp/#1`#2`#3/<#4>^{}}}%
+\def\threep/#1`#2`#3/{\ifnextchar<{\threepp/#1`#2`#3/}%
+ {\threepp/#1`#2`#3/<0>}}%
+\def\three{\ifnextchar/{\threep}{\threep/>`>`>/}}%
+
+
+\def\twoar(#1,#2){{%
+ \scalefactor{0.1}%
+ \deltax#1\deltay#2%
+ \deltaX=\ifnum\deltax<0-\fi\deltax%
+ \deltaY=\ifnum\deltay<0-\fi\deltay%
+ \Xend\deltax \multiply \Xend by \deltax%
+ \Yend\deltay \multiply \Yend by \deltay%
+ \advance\Xend by \Yend \multiply \Xend by 3%
+ \ifnum \deltaX > \deltaY%
+ \multiply \deltaX by 3 \advance \deltaX by \deltaY%
+ \else%
+ \multiply \deltaY by 3 \advance \deltaX by \deltaY%
+ \fi%
+ \multiply\deltax by 500%
+ \multiply\deltay by 500%
+ \xpos\deltax \multiply \xpos by 3 \divide\xpos by \deltaX%
+ \Xpos\deltax \multiply \Xpos by \deltaX \divide \Xpos by \Xend%
+ \advance \xpos by \Xpos%
+ \ypos\deltay \multiply \ypos by 3 \divide\ypos by \deltaX%
+ \Ypos\deltay \multiply \Ypos by \deltaX \divide \Ypos by \Xend%
+ \advance \ypos by \Ypos%
+ \xy \ar@{=>}(\xpos,\ypos) \endxy%
+}\ignorespaces}%
+
+\def\iiixiiipppppp(#1,#2)|#3|/#4/<#5>#6<#7>[#8;#9]{%
+ \xpos#1\ypos#2\relax%
+ \def\next|##1##2##3##4##5##6##7|{\def\xa{##1}\def\xb{##2}%
+ \def\xc{##3}\def\xd{##4}\def\xe{##5}\def\xf{##6}\nextt|##7|}%
+ \def\nextt|##1##2##3##4##5##6|{\def\xg{##1}\def\xh{##2}%
+ \def\xi{##3}\def\xj{##4}\def\xk{##5}\def\xl{##6}}%
+ \next|#3|%
+ \def\next<##1,##2>{\deltax##1\deltay##2}%
+ \next<#5>%
+ \def\next<##1,##2>{\deltaX##1\deltaY##2}%
+ \next<#7>%
+ \def\next##1{\topw##1\relax%
+ \ifodd\topw \def\za{}\else\def\za{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zb{}\else\def\zb{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zc{}\else\def\zc{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zd{}\else\def\zd{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\ze{}\else\def\ze{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zf{}\else\def\zf{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zg{}\else\def\zg{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zh{}\else\def\zh{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zi{}\else\def\zi{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zj{}\else\def\zj{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zk{}\else\def\zk{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zl{}\else\def\zl{\relax}\fi}%
+ % \ifodd\topw \def\zl{}\else\def\zl{\relax}\fi \divide\topw by 2
+ % \ifodd\topw \def\zk{}\else\def\zk{\relax}\fi \divide\topw by 2
+ % \ifodd\topw \def\zj{}\else\def\zj{\relax}\fi \divide\topw by 2
+ % \ifodd\topw \def\zi{}\else\def\zi{\relax}\fi \divide\topw by 2
+ % \ifodd\topw \def\zh{}\else\def\zh{\relax}\fi \divide\topw by 2
+ % \ifodd\topw \def\zg{}\else\def\zg{\relax}\fi \divide\topw by 2
+ % \ifodd\topw \def\zf{}\else\def\zf{\relax}\fi \divide\topw by 2
+ % \ifodd\topw \def\ze{}\else\def\ze{\relax}\fi \divide\topw by 2
+ % \ifodd\topw \def\zd{}\else\def\zd{\relax}\fi \divide\topw by 2
+ % \ifodd\topw \def\zc{}\else\def\zc{\relax}\fi \divide\topw by 2
+ % \ifodd\topw \def\zb{}\else\def\zb{\relax}\fi \divide\topw by 2
+ % \ifodd\topw \def\za{}\else\def\za{\relax}\fi}%
+ \next{#6}%
+ \def\next[##1`##2`##3`##4`##5`##6`##7`##8`##9]{%
+ \def\nodeA{##1}\def\nodeB{##2}\def\nodeC{##3}%
+ \def\nodeD{##4}\def\nodeE{##5}\def\nodeF{##6}%
+ \def\nodeG{##7}\def\nodeH{##8}\def\nodeI{##9}}%
+ \next[#8]%
+ \def\next[##1`##2`##3`##4`##5`##6`##7]{%
+ \def\labela{##1}\def\labelb{##2}\def\labelc{##3}%
+ \def\labeld{##4}\def\labele{##5}\def\labelf{##6}\nextt[##7]}%
+ \def\nextt[##1`##2`##3`##4`##5`##6]{%
+ \def\labelg{##1}\def\labelh{##2}\def\labeli{##3}%
+ \def\labelj{##4}\def\labelk{##5}\def\labell{##6}}%
+ \next[#9]%
+ \def\next/##1`##2`##3`##4`##5`##6`##7`##8/{%
+ \advance\ypos\deltay
+ \ifx\zf\empty \morphism(\xpos,\ypos)/<-/<-\deltaX,0>[\nodeD`0;]\fi
+ \morphism(\xpos,\ypos)|\xf|/{##6}/<\deltax,0>[\nodeD`\nodeE;\labelf]%
+ \advance \xpos\deltax
+ \morphism(\xpos,\ypos)|\xg|/{##7}/<\deltax,0>[\nodeE`\nodeF;\labelg]%
+ \ifx\zg\empty \advance\xpos \deltax
+ \morphism(\xpos,\ypos)<\deltaX,0>[\nodeF`0;]\fi
+ \xpos#1 \advance\ypos\deltay
+ \ifx\zd\empty \morphism(\xpos,\ypos)/<-/<-\deltaX,0>[\nodeA`0;]\fi
+ \ifx\za\empty \morphism(\xpos,\ypos)/<-/<0,\deltaY>[\nodeA`0;]\fi
+ \morphism(\xpos,\ypos)|\xa|/{##1}/<\deltax,0>[\nodeA`\nodeB;\labela]%
+ \morphism(\xpos,\ypos)|\xc|/{##3}/<0,-\deltay>[\nodeA`\nodeD;\labelc]%
+ \advance \xpos\deltax
+ \morphism(\xpos,\ypos)|\xb|/{##2}/<\deltax,0>[\nodeB`\nodeC;\labelb]%
+ \morphism(\xpos,\ypos)|\xd|/{##4}/<0,-\deltay>[\nodeB`\nodeE;\labeld]%
+ \ifx\zb\empty \morphism(\xpos,\ypos)/<-/<0,\deltaY>[\nodeB`0;]\fi
+ \advance\xpos\deltax
+ \morphism(\xpos,\ypos)|\xe|/{##5}/<0,-\deltay>[\nodeC`\nodeF;\labele]%
+ \ifx\zc\empty \morphism(\xpos,\ypos)/<-/<0,\deltaY>[\nodeC`0;]\fi
+ \ifx\ze\empty \morphism(\xpos,\ypos)<\deltaX,0>[\nodeC`0;]\fi
+ \nextt/##8/}%
+ \def\nextt/##1`##2`##3`##4`##5/{%
+ \xpos#1\ypos#2\relax%
+ \ifx\zh\empty \morphism(\xpos,\ypos)/<-/<-\deltaX,0>[\nodeG`0;]\fi
+ \ifx\zj\empty \morphism(\xpos,\ypos)<0,-\deltaY>[\nodeG`0;]\fi
+ \morphism(\xpos,\ypos)|\xk|/{##4}/<\deltax,0>[\nodeG`\nodeH;\labelk]%
+ \advance\xpos\deltax
+ \morphism(\xpos,\ypos)|\xl|/{##5}/<\deltax,0>[\nodeH`\nodeI;\labell]%
+ \ifx\zk\empty \morphism(\xpos,\ypos)<0,-\deltaY>[\nodeH`0;]\fi
+ \advance\xpos\deltax
+ \ifx\zi\empty \morphism(\xpos,\ypos)<\deltaX,0>[\nodeI`0;]\fi
+ \ifx\zl\empty \morphism(\xpos,\ypos)<0,-\deltaY>[\nodeI`0;]\fi
+ \xpos#1 \advance\ypos\deltay
+ \morphism(\xpos,\ypos)|\xh|/{##1}/<0,-\deltay>[\nodeD`\nodeG;\labelh]%
+ \advance \xpos\deltax
+ \morphism(\xpos,\ypos)|\xi|/{##2}/<0,-\deltay>[\nodeE`\nodeH;\labeli]%
+ \advance \xpos\deltax
+ \morphism(\xpos,\ypos)|\xj|/{##3}/<0,-\deltay>[\nodeF`\nodeI;\labelj]}%
+ \next/#4/\ignorespaces}%
+
+\def\iiixiii{\ifnextchar({\iiixiiip}{\iiixiiip(0,0)}}%
+\def\iiixiiip(#1){\ifnextchar|{\iiixiiipp(#1)}%
+ {\iiixiiipp(#1)|aalmrmmlmrbb|}}%
+\def\iiixiiipp(#1)|#2|{\ifnextchar/{\iiixiiippp(#1)|#2|}%
+ {\iiixiiippp(#1)|#2|/>`>`>`>`>`>`>`>`>`>`>`>/}}%
+\def\iiixiiippp(#1)|#2|/#3/{%
+ \ifnextchar<{\iiixiiipppp(#1)|#2|/#3/}%
+ {\iiixiiipppp(#1)|#2|/#3/<\default,\default>}}%
+\def\iiixiiipppp(#1)|#2|/#3/<#4>{\ifnextchar[{\iiixiiippppp(#1)|#2|/#3/%
+ <#4>0<0,0>}{\iiixiiippppp(#1)|#2|/#3/<#4>}}%
+\def\iiixiiippppp(#1)|#2|/#3/<#4>#5{\ifnextchar<%
+ {\iiixiiipppppp(#1)|#2|/#3/<#4>{#5}}%
+ {\iiixiiipppppp(#1)|#2|/#3/<#4>{#5}<400,400>}}%
+
+
+\def\iiixiipppppp(#1,#2)|#3|/#4/<#5>#6<#7>[#8;#9]{%
+ \xpos#1\ypos#2\relax%
+ \def\next|##1##2##3##4##5##6##7|{\def\xa{##1}\def\xb{##2}%
+ \def\xc{##3}\def\xd{##4}\def\xe{##5}\def\xf{##6}\def\xg{##7}}%
+ \next|#3|%
+ \def\next<##1,##2>{\deltax##1\deltay##2}%
+ \next<#5>%
+ \deltaX#7
+ \topw#6
+ \def\next{%
+ \ifodd\topw \def\za{}\else\def\za{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zb{}\else\def\zb{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zc{}\else\def\zc{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zd{}\else\def\zd{\relax}\fi}%
+ \next%
+ \def\next[##1`##2`##3`##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\noded{##4}\def\nodee{##5}\def\nodef{##6}}%
+ \next[#8]%
+ \def\next[##1`##2`##3`##4`##5`##6`##7]{%
+ \def\labela{##1}\def\labelb{##2}\def\labelc{##3}%
+ \def\labeld{##4}\def\labele{##5}\def\labelf{##6}\def\labelg{##7}}%
+ \next[#9]%
+ \def\next/##1`##2`##3`##4`##5`##6`##7/{%
+ {\ifx\zc\empty\advance\xpos -\deltaX
+\relax\morphism(\xpos,\ypos)<\deltaX,0>[0`\noded;]\fi}%
+ \morphism(\xpos,\ypos)|\xf|/##6/<\deltax,0>[\noded`\nodee;\labelf]%
+ \advance\xpos by \deltax%
+ \morphism(\xpos,\ypos)|\xg|/##7/<\deltax,0>[\nodee`\nodef;\labelg]%
+ {\ifx\zd\empty \advance\xpos by \deltax
+\relax \morphism(\xpos,\ypos)<\deltaX,0>[\nodef`0;]\fi}%
+ \advance\xpos by -\deltax \advance\ypos by \deltay
+ {\ifx\za\empty\advance \xpos by -\deltaX
+\relax\morphism(\xpos,\ypos)<\deltaX,0>[0`\nodea;]\fi}%
+ \morphism(\xpos,\ypos)|\xa|/##1/<\deltax,0>[\nodea`\nodeb;\labela]%
+ \morphism(\xpos,\ypos)|\xc|/##3/<0,-\deltay>[\nodea`\noded;\labelc]%
+ \advance\xpos by \deltax%
+ \morphism(\xpos,\ypos)|\xb|/##2/<\deltax,0>[\nodeb`\nodec;\labelb]%
+ \morphism(\xpos,\ypos)|\xd|/##4/<0,-\deltay>[\nodeb`\nodee;\labeld]%
+ \advance\xpos by \deltax%
+ \morphism(\xpos,\ypos)|\xe|/##5/<0,-\deltay>[\nodec`\nodef;\labele]%
+ \ifx\zb\empty\relax \morphism(\xpos,\ypos)<\deltaX,0>[\nodec`0;]\fi}%
+ \next/#4/\ignorespaces}%
+
+\def\iiixii{\ifnextchar({\iiixiip}{\iiixiip(0,0)}}%
+\def\iiixiip(#1){\ifnextchar|{\iiixiipp(#1)}%
+ {\iiixiipp(#1)|aalmrbb|}}%
+\def\iiixiipp(#1)|#2|{\ifnextchar/{\iiixiippp(#1)|#2|}%
+ {\iiixiippp(#1)|#2|/>`>`>`>`>`>`>/}}%
+\def\iiixiippp(#1)|#2|/#3/{%
+ \ifnextchar<{\iiixiipppp(#1)|#2|/#3/}%
+ {\iiixiipppp(#1)|#2|/#3/<\default,\default>}}%
+\def\iiixiipppp(#1)|#2|/#3/<#4>{\ifnextchar[{\iiixiippppp(#1)|#2|/#3/%
+ <#4>{0}<0>}{\iiixiippppp(#1)|#2|/#3/<#4>}}%
+\def\iiixiippppp(#1)|#2|/#3/<#4>#5{\ifnextchar<%
+ {\iiixiipppppp(#1)|#2|/#3/<#4>{#5}}%
+ {\iiixiipppppp(#1)|#2|/#3/<#4>{#5}<400>}}%
+
+ % \def\node#1(#2,#3)[#4]{%
+ % \expandafter\gdef\csname x@#1\endcsname{#2}%
+ % \expandafter\gdef\csname y@#1\endcsname{#3}%
+ % \expandafter\gdef\csname ob@#1\endcsname{#4}%
+ % \ignorespaces}%
+ %
+ % \newcount\xfinish%
+ % \newcount\yfinish%
+ % \def\arrow{\ifnextchar|{\arrowp}{\arrowp|a|}}%
+ % \def\arrowp|#1|{\ifnextchar/{\arrowpp|#1|}{\arrowpp|#1|/>/}}%
+ % \def\arrowpp|#1|/#2/[#3`#4;#5]{%
+ % \xfinish=\csname x@#4\endcsname%
+ % \yfinish=\csname y@#4\endcsname%
+ % \advance\xfinish by -\csname x@#3\endcsname%
+ % \advance\yfinish by -\csname y@#3\endcsname%
+ % \morphism(\csname x@#3\endcsname,\csname y@#3\endcsname)|#1|/{#2}/%
+ % <\xfinish,\yfinish>[\csname ob@#3\endcsname`\csname ob@#4\endcsname;#5]%
+ % }%
+
+\def\node#1(#2,#3)[#4]{%
+\expandafter\gdef\csname x@#1\endcsname{#2}%
+\expandafter\gdef\csname y@#1\endcsname{#3}%
+\expandafter\gdef\csname ob@#1\endcsname{#4}%
+\place(#2,#3)[#4]\ignorespaces}%
+
+\newcount\xfinish%
+\newcount\yfinish%
+\def\arrow{\ifnextchar|{\arrowp}{\arrowp|a|}}%
+\def\arrowp|#1|{\ifnextchar/{\arrowpp|#1|}{\arrowpp|#1|/>/}}%
+\def\arrowpp|#1|/#2/[#3`#4;#5]{%
+\xfinish=\csname x@#4\endcsname%
+\yfinish=\csname y@#4\endcsname%
+\advance\xfinish by -\csname x@#3\endcsname%
+\advance\yfinish by -\csname y@#3\endcsname%
+\morphism(\csname x@#3\endcsname,\csname y@#3\endcsname)|#1|/{#2}/%
+<\xfinish,\yfinish>[\phantom{\csname ob@#3\endcsname}`\phantom{\csname
+ob@#4\endcsname};#5]%
+}%
+
+
+\def\Loop(#1,#2)#3(#4,#5){\POS(#1,#2)*+!!<0ex,\axis>{#3}\ar@(#4,#5)}%
+\def\iloop#1(#2,#3){\xy\Loop(0,0)#1(#2,#3)\endxy}%
+
+\catcode`\@=\atcode%
+\endinput%
+\entrymodifiers={+!!<0pt,\fontdimen22\textfont2>}%
+
+
+
+ the \xybox does not allow control over *where*,%
+inside the <object> that it builds,%
+the reference point is to be located.%
+
+Accordingly, I've just devised a variant that builds%
+the same kind of compound <object>, but also sets%
+its reference-point to be at the <coord> of the%
+last <POS> within the box; i.e., the <coord> for%
+the <object> that has been built is at the current%
+<POS> when the Xy-pic parsing has been completed.%
+The LRUD extents are the size of the complete box;%
+i.e., *not* the extents of the final <POS>.%
+
+Here is coding that should go in your document's%
+preamble -- eventually it should be added to xy.tex%
+
+
+
+--------- start of new Xy-pic definitions -------%
+
+
+> \makeatletter % adjust the \catcode of @%
+
+ this is a better definition for the new \xyobjbox%
+
+ \xydef@\xyobjbox#1{\xy%
+ \let \PATHafterPOS\PATHafterPOS@default%
+ \let \arsavedPATHafterPOS@@\relax%
+ \let\afterar@@\relax%
+ \POS#1\endxyobj\Edge@c={\rectangleEdge}\computeLeftUpness@}%
+
+> \xydef@\endxyobj{\if\inxy@\else\xyerror@{Unexpected \string\endxy}{}\fi%
+> \relax%
+> \dimen@=\Y@max \advance\dimen@-\Y@min%
+> \ifdim\dimen@<\z@ \dimen@=\z@ \Y@min=\z@ \Y@max=\z@ \fi%
+> \dimen@=\X@max \advance\dimen@-\X@min%
+> \ifdim\dimen@<\z@ \dimen@=\z@ \X@min=\z@ \X@max=\z@ \fi%
+> \edef\tmp@{\egroup%
+> \setboxz@h{\kern-\the\X@min \boxz@}%
+> \ht\z@=\the\Y@max \dp\z@=-\the\Y@min \wdz@=\the\dimen@%
+> \noexpand\maybeunraise@ \raise\dimen@\boxz@%
+> \noexpand\recoverXyStyle@ \egroup \noexpand\xy@end%
+> \U@c=\the\Y@max \advance\U@c-\the\Y@c%
+> \D@c=-\the\Y@min \advance\D@c\the\Y@c%
+> \L@c=-\the\X@min \advance\L@c\the\X@c%
+> \R@c=\the\X@max \advance\R@c-\the\X@c%
+> }\tmp@}%
+>%
+> \makeatother % revert \catcode of @%
+>%
+> --------- end of new Xy-pic definitions -------%
+\makeatletter%
+\gdef\xymerge@MinMax{}%
+\xydef@\twocell{\hbox\bgroup\xysave@MinMax\@twocell}%
+\xydef@\uppertwocell{\hbox\bgroup\xysave@MinMax\@uppertwocell}%
+\xydef@\lowertwocell{\hbox\bgroup\xysave@MinMax\@lowertwocell}%
+\xydef@\compositemap{\hbox\bgroup\xysave@MinMax\@compositemap}%
+\xydef@\twocelll#1#{\hbox\bgroup\xysave@MinMax\xy@\save\save@\@twocelll{%
+#1}}%
+
+\xydef@\xysave@MinMax{\xdef\xymerge@MinMax{%
+ \noexpand\ifdim\X@max<\the\X@max \X@max=\the\X@max\noexpand\fi%
+ \noexpand\ifdim\X@min>\the\X@min \X@min=\the\X@min\noexpand\fi%
+ \noexpand\ifdim\Y@max<\the\Y@max \Y@max=\the\Y@max\noexpand\fi%
+ \noexpand\ifdim\Y@min>\the\Y@min \Y@min=\the\Y@min\noexpand\fi%
+ }}%
+\xydef@\drop@Twocell{\boxz@ \xymerge@MinMax}%
+
+
+\xydef@\twocell@DONE{%
+ \edef\tmp@{\egroup%
+ \X@min=\the\X@min \X@max=\the\X@max%
+ \Y@min=\the\Y@min \Y@max=\the\Y@max}\tmp@%
+ \L@c=\X@c \advance\L@c-\X@min \R@c=\X@max \advance\R@c-\X@c%
+ \D@c=\Y@c \advance\D@c-\Y@min \U@c=\Y@max \advance\U@c-\Y@c%
+ \ht\z@=\U@c \dp\z@=\D@c \dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@%
+ \computeLeftUpness@%
+ \setboxz@h{\kern-\X@p \raise-\Y@c\boxz@ }%
+ \dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@ \ht\z@=\U@c \dp\z@=\D@c%
+ \Edge@c={\rectangleEdge}\Invisible@false \Hidden@false%
+ \edef\Drop@@{\noexpand\drop@Twocell%
+ \noexpand\def\noexpand\Leftness@{\Leftness@}%
+ \noexpand\def\noexpand\Upness@{\Upness@}}%
+ \edef\Connect@@{\noexpand\connect@Twocell%
+ \noexpand\ifdim\X@max<\the\X@max \X@max=\the\X@max\noexpand\fi%
+ \noexpand\ifdim\X@min>\the\X@min \X@min=\the\X@min\noexpand\fi%
+ \noexpand\ifdim\Y@max<\the\Y@max \Y@max=\the\Y@max\noexpand\fi%
+ \noexpand\ifdim\Y@min>\the\Y@min \Y@min=\the\Y@min\noexpand\fi }%
+ \xymerge@MinMax%
+}%
+\makeatother%
+
+\endinput
+tick:
+
+I write to mention, purely for your information, what finally worked
+out best for me, namely:
+
+\arrow/@{>}|-*@{|}/[a`b;f]
+
+Also functional but with a slightly smaller "tick" is
+\arrow/@{>}|-*@{+}/[a`b;f]
+
diff --git a/macros/generic/diagrams/diagxy/diaxydoc.pdf b/macros/generic/diagrams/diagxy/diaxydoc.pdf
new file mode 100644
index 0000000000..4552b61b66
--- /dev/null
+++ b/macros/generic/diagrams/diagxy/diaxydoc.pdf
Binary files differ
diff --git a/macros/generic/diagrams/diagxy/diaxydoc.tex b/macros/generic/diagrams/diagxy/diaxydoc.tex
new file mode 100644
index 0000000000..fdd013ba21
--- /dev/null
+++ b/macros/generic/diagrams/diagxy/diaxydoc.tex
@@ -0,0 +1,1797 @@
+\documentclass[12pt]{article}
+\usepackage[ocgcolorlinks=true,allcolors=blue]{hyperref}
+ \input diagxy
+ \textwidth 6in
+ \oddsidemargin 0pt
+ \makeindex
+\begin{document}
+\def\xypic{\hbox{\rm\Xy-pic}}
+
+\title{A new diagram package (Version 2015-09-26)}
+\author{Michael Barr\\Dept of Math and Stats, McGill University
+\\barr@math.mcgill.ca}
+ \date{}
+ \maketitle
+\tableofcontents
+
+
+\kern 40pt
+{\narrower
+For the fashion of Minas Tirith was such that it was built on seven levels,
+each delved into a hill, and about each was set a wall, and in each wall
+was a gate.
+
+-- J.R.R.\ Tolkien, ``The Return of the King''\footnote{These macros are
+at the seventh level of nesting. The first level is the code actually
+executed directly by the processor. The second is the microcode, burned
+into the chip, that interprets the assembly language instructions into
+the ones that are directly executed. Level three is the language,
+usually C, but originally Pascal, into which the Web code, the fourth
+level, is compiled. The fifth level is \TeX\ itself, which is best seen
+as a high level programming language for mathematical text processing.
+Level six is the \xypic\ code in which these macros, level seven, are
+written.}
+
+}
+
+
+\kern 5pt
+ Note: This is the first increase in functionality in a couple years.
+Following a suggestion of Gerd Zeibig (who implemented this in a very
+different way), I have added a new feature wherein you can create simple
+identifiers for nodes and then describe arrows between those nodes using
+the identifiers. See~\ref{nodes&arrows} for details, syntax and
+examples. I have also recently added support for loops, both inline and
+in diagrams.
+
+Note (2008-01-21): The main thing that is changed is in the arrow
+specification `.$>$'. What the standard package produces are very fine
+dots. They are actually tiny rules, about .4 pt square. I have changed
+them to being about .7 pt square, which makes them more visible. In
+addition, there is a newdir {d}, used as `{}{d}$>$' (otherwise the {d}
+gets treated as a tail, not a shaft) that substitutes . for those tiny
+rules. The only problem is it works well only for arrows that are
+horizontal or nearly so (up to about 30 degrees). I played with many
+variations of the definition, but could not make any of them work right.
+In principle, I would prefer to get this right, but several hours of
+playing with it did not succeed in solving the `Whack-a-Mole' problem.
+If it looked good at some angles, it was worse at others. I could get
+them looking good for both horizontal and vertical arrows, but then the
+45 degree ones looked awful. Aside from that there are some minor bug
+fixes.
+
+Note (2008-12-02) What has been added are new macros \verb+\Diamond+,
+\verb+\rlimto+, and \verb+\llimto+. \verb+\Diamond+ is capitalized to
+avoid clashing with a standard macro \verb+\diamond+. It has the same
+paramter sets as \verb+\square+. The other two have no parameters and
+are only for the purpose of putting a right, resp. left, arrow to the
+right of or under \verb+\lim+. They will go under in a display or if
+you follow \verb+\lim+ by \verb+\limits+.
+
+Note (2015-09-27) The details of handling \verb.\node. and \verb.\arrow.
+have been changed so that \verb.\node. lays down ink by itself and
+\verb.\arrow. no longer adds the nodes. There are two reasons for this
+change. Someone wrote me complaining that when a node was put in twice
+the regisration was not perfect. I could not see it, but I made the
+change and it satisfied him. Much more importantly, it allows a node to
+appear that has no arrow to or from it. This makes it possible to work
+well with the \verb.\uncover. macro in beamer (see ``Use with beamer''
+below).
+
+\section{Why another diagram package?}
+
+This started when a user of my old package, diagram, wrote to ask me if
+dashed lines were possible. The old package had dashed lines for
+horizontal and vertical arrows, but not any other direction. The reason
+for this was that \LaTeX\ used rules for horizontal and vertical arrows,
+but had its own fonts for other directions. While rules could be made
+any size, the smallest lines in other directions were too long for
+decent looking dashes. Presumably, Lamport was worried about compile
+time and file size if the lines were too short, considerations that have
+diminished over the years since. Also arrows could be drawn in only 48
+different directions, which is limiting. My macros were not very well
+implemented for slopes like 4 and 1/4, since I never used such lines.
+
+There was certainly an alternative, \xypic, for those who wanted
+something better. But it was hard to learn and I was not entirely happy
+with the results. The basic interface used an
+\index{\backslash halign}\verb.\halign.. This
+meant that no extra space was allotted to an arrow that had a large
+label. In addition, the different slots could have different horizontal
+size, which could result in a misshapen diagram. I used it in a paper
+that had a `W' shaped diagram whose nodes had different widths and the
+result was quite obviously misshapen. On the other hand, the graphics
+engine underlying \xypic\ is really quite remarkable and it occurred to
+me that I could try to redraft diagram as a front end. The result is
+the current package. It has been tested mainly with version 3.7, so
+there is no guarantee it would work with any earlier version (or, for
+that matter, later). A limited amount of testing with version 3.6
+suggests that the only thing that does not work is the 2-arrows; these
+come out vanishingly short.
+
+So despite the desire for logical programming, it still seems that for
+some purposes, it is desirable to have a system in which you specify
+what goes where and where the arrows are drawn.
+
+\subsection{The latest version}
+The latest version can be downloaded at
+\verb,ftp://ftp.math.mcgill.ca/pub/barr/diagxy.zip, or by anonymous ftp
+from \verb,ftp.math.mcgill.ca//pub/barr/diagxy.zip,.
+
+
+\subsection{Main features}
+
+\begin{itemize}
+ \item A general arrow drawing function
+\index{\backslash morphism}\verb.\morphism..
+ \item Various common diagram shapes such as squares, triangles, etc.
+ \item A few special shapes such as cube and $3\times3$ diagrams.
+ \item Small 2-arrows that can be placed anywhere in a diagram, much
+like \LaTeX's
+picture
+ environment.
+ \item A uniform syntax, while allowing access to all of \xypic's
+capabilities
+ \item Never expires and does not request acknowledgment.
+\end{itemize}
+
+\subsection{Compatibility}
+The syntax described below is not compatible with the original diagram
+package. Every front end of this sort represents a trade-off between
+simplicity and utility. A package that simply upgraded the syntax to
+allow more dashed (and dotted) lines would have been just as easy to
+implement, but would have made poor use of the wonderful possibilities
+of the underlying \xypic\ package. Also there would have been too many
+different arrow specifications (they would have had to go at least in
+the range $[-9,9]$) for easy memory) and still would not have included
+things like inclusion arrows. To those who would have liked a simpler
+syntax, I apologize. Those who would want more flexibility, I remind
+that the entire \xypic\ package is there for use.
+
+\subsection{Errant spaces}
+ There is one point that cannot be made too strongly. {\em Watch for
+errant spaces.} Unlike the old diagram package, which was carried out in
+math mode so that spaces were ignored, \xypic\ is not in math mode and
+spaces will mess up your diagrams. On the other hand, it will not be
+necessary to enclose duplicate nodes inside
+\index{\backslash phantom}\verb.\phantom., since the
+registration between different nodes is perfect. In the old package,
+for reasons that I now understand, objects did not always register
+properly. This was a flaw built in to the very heart of the package and
+is not worth correcting, although it could have been done better in the
+first place. If you see an object in double vision, then the almost
+certain cause is that a space has gotten in there somewhere. I have
+attempted to prevent this by liberal use of
+\index{\backslash ignorespaces}\verb.\ignorespaces. in the
+definitions, but one cannot always be sure and while testing, I found a
+number seemingly innocuous spaces that messed up diagrams. When in
+doubt, always terminate a specification with a
+\index{%}\verb.%.. See the
+examples.
+
+\subsection{Font sizes}
+ According to the documentation of \xypic, the declarations
+\begin{verbatim}
+\xyoption{tips}
+\SelectTips{xy}{12}
+\end{verbatim}
+ \index{tips} will cause 12 point tips to be used. This does not appear
+to be the case. The only way I can seem to get larger font sizes is to
+add \index{\backslash fontscale{x}}\verb.\fontscale{x}., with \index{x}\verb.x.
+taking on the values \verb.0,h,1,2,3,4,5., after \xypic\ is loaded.
+With \verb.11pt. you will want \verb.h. and with \verb.12pt. you will
+want 1. The others are in case you use larger sizes for transparencies
+or for later reduction, in conjunction with extarticle.cls. While on
+the subject, I might mention that if
+you want thicker arrow shafts without enlarging anything else you could
+add the declaration
+\begin{verbatim}
+\font\xydashfont=xydash scaled \magstep1
+\end{verbatim}
+or even larger. However, this does not thicken the arrow tips and is
+not really recommended. There is probably no way (short of creating
+your own fonts) to thicken the tips without also lengthening them.
+
+I had some trouble generating the font files at the larger sizes, so the
+file xyfonts.zip, found at my ftp site (ftp.math.mcgill.ca/pub/barr) has
+fonts for the ljfour generated at all sizes from 10--20 points.
+
+\subsection{Acknowledgments}
+ First, I would like to thank Kris Rose for a superb programming job
+that made this package possible. The original versions of \xypic\ were
+based on matrices, but this version includes code to place an arrow with
+two nodes (more precisely, their centers) a user-definable distance
+apart and that is exactly what I needed. Second I would like to thank
+Ross Moore who answered innumerable questions about the use of the
+macros that the documentation did not answer or at least I could not
+understand what it said. I thank Donald Arsenau answered several of my
+questions about the internals of \TeX\ that I did not understand
+clearly and Steve Bloom who found a couple
+of typos in the first version of these notes. Finally, I would like to
+thank all those, but especially Charles Wells, who gave me opinions on
+the best syntax. But I made the final decisions and if you have any
+complaints, you can direct them to me. Not that I am likely to change
+anything at this date.
+
+\subsection{License}
+ The use of this package is unrestricted. It may be freely distributed,
+unchanged, for non-commercial or commercial use. If changed, it must be
+renamed. Inclusion in a commercial software package is also permitted,
+but I would appreciate receiving a free copy for my personal examination
+and use. There are no guarantees that this package is good for
+anything. I have tested it with LaTeX 2e, LaTeX 2.09 and Plain TeX.
+Although I know of no reason it will not work with AMSTeX, I have not
+tested it.
+
+\section{The basic syntax}
+
+The basic syntax is built around an operation
+\index{\backslash morphism}\verb.\morphism. that is
+used as \index{\backslash morphism}
+ \begin{verbatim}
+ \morphism(x,y)|p|/{sh}/<dx,dy>[N`N;L]
+ \end{verbatim}
+ The last group of parameters is required. They are the source and
+target nodes of the arrow and the label. The remaining parameters are
+optional and default to commonly used values. Currently, the
+\verb.L.\index{label} is set in \index{\backslash scriptstyle}\verb.\scriptstyle.
+size, but this can easily be changed by putting
+\index{\backslash let\backslash labelstyle=\backslash textstyle}
+\verb.\let\labelstyle=\textstyle. in
+your file.
+
+ The parameters \verb.x. and \verb.y. give the location of the source
+node within a fixed local coordinate system and \verb-x+dx- and
+\verb-y+dy- locate the target. To be precise, the first coordinate is
+the horizontal center of the node and the second is that of the base
+line. These distances are given in terms of \index{\backslash ul}\verb.\ul.'s,
+(for unitlength), which is user assignable, but currectly is .01em. The
+placement parameter \verb.p. is one of \verb.a,b,l,r,m. that stand for
+above, below, left, right, or mid and describe the positioning of the
+arrow label on the arrow. If it is given any value other than those
+five, it is ignored. We describe below why you might want it ignored.
+The label \index{m}\verb.m. stands for a label positioned in the middle
+of a split arrow. When used on a non-vertical arrow, \index{a}\verb.a.
+positions the label above the arrow and \index{b}\verb.b. positions it
+below. On a vertical arrow, the positioning depends on whether the
+arrow points up or down. Similarly, when used on a non-horizontal
+arrow, \index{l}\verb.l. positions the label to the left and
+\index{r}\verb.r. positions it to the right, while on a horizontal arrow
+it depends on which way it points.
+
+The shape parameter \verb.sh. describes the shape of the arrow. An
+arrow is thought of as consisting of three parts, the tail, the shaft
+and the head. You may specify just the head, in which case the shaft
+will be an ordinary line, or all three. However, since the tail can be
+(and usually is) empty, in practice you can also describe the shaft and
+tail. In addition, it is possible to modify the arrow in various ways.
+Although the parameter is shown within braces, the braces can be omitted
+unless one of the modifier characters is \verb./., in which case, {\em
+the entire parameter} must be put in braces. It is important to note
+that it will not work just to put the \verb./. inside the braces, since
+this will interfere with the internal parsing of \xypic. The head and
+tail shapes are basically one of \index{>}\verb.>., \index{>>}\verb.>>.,
+\verb.(., \verb.)., \index{>}\verb*+>+, and \index{<}\verb*+<+. Each of
+these may also be preceded by \index{^}\verb.^. or \index{_}\verb._. and
+others are user definable. For details, see the \xypic\ reference
+manual. The first of these is an ordinary head, while the second is for
+an epic arrow. The third is not much used, but the superscripted
+version makes and inclusion tail, as will be illustrated below. The
+reverse ones give reversed arrowheads. The sign \verb*+ + stands for an
+obligatory space and it leaves extra space for a tailed (monic) arrow,
+which otherwise runs into the source node. Although there are many
+possibilities for shafts, including alphanumeric characters, the ones
+that mainly interest us are: \index{-}\verb.-., which is an ordinary
+shaft, \index{--}\verb.--., which produces a dashed arrow,
+\index{=}\verb.=., which gives a double arrow (although with only one
+arrowhead), and ., which makes a dotted arrow. Thus \index{>}\verb.>.
+or \index{->}\verb.->. will produce an ordinary arrow,
+\index{->>}\verb.->>. an epic arrow, \index{ >->}\verb*+ >->+ makes a
+monic arrow, and \index{-->>}\verb.-->>. would make a dashed epic arrow.
+The descriptions \index{<-}\index{<<-}\verb.<-,<<-,. \index{<-<
+}\verb*+<-< +, and \index{<<--}\verb.<<--. give the reversed versions.
+Note that \index{<}\verb.<. does not give a reversed arrow, since
+\xypic\ interprets that as a reversed head, not a tail.
+
+If the shape parameter begins with an \index{@}\verb.@., it is
+interpreted differently. In that case, it has the form
+\index{@{shape}@}\verb.@{shape}@. modifier, where the modifier is as
+described in the \xypic\ reference guide. I just mention a couple of
+them. The parameter \index{@{->}@<3pt>}\verb.@{->}@<3pt>., for example,
+would give an ordinary arrow moved three points in the direction
+perpendicular to that of the arrow. If you give
+\index{{@{->>}@/^5pt/}}\verb.{@{->>}@/^5pt/}., you will get an epic
+arrow that is curved in the direction perpendicular to the direction of
+the arrow by five points. It is imperative that a specification such as
+\index{@{>}@/5pt/}\verb.@{>}@/5pt/. be enclosed in braces because of the
+\index{/}\verb./.s.
+
+\subsection{A word about parameters}
+ I have already mentioned the necessity of enclosing certain arrow shape
+specifications in braces. Because of the way \TeX\ operates, I have
+used a number of different delimiters: \index{(}\verb.(.,
+\index{)}\verb.)., \index{|}\verb.|., \index{/}\verb./.,
+\index{<}\verb.<., \index{>}\verb.>., \index{[}\verb.[.,
+\index{]}\verb.]., \index{`}\verb.`., and \index{;}\verb.;.. Any of
+these that appear inside an argument could conceivably cause problems.
+They were chosen as the least likely to appear inside mathematics
+(except for \index{(,)}\verb.(,). which appear in positions that are
+unlikely to cause problems). However, be warned that this is a possible
+cause of mysterious error messages. If this happens, enclosing the
+offending parameter in braces should cure the problem. The exceptions
+come when the braces interfere with \xypic's somewhat arcane parsing
+mechanism. One place it imperative to use braces is if you attempt to
+use a disk as a tip. Although most tips do not have to be enclosed in
+braces, you get a small solid disk tip from \index{{*}}\verb.{*}. and
+not from \index{*}\verb.*. (see the note at the bottom of the first
+column of page 42 in the reference manual. The first three of
+\begin{verbatim}
+\morphism(0,300)|a|/-*/<500,0>[A`B;f]
+\morphism(0,0)|a|/{-*}/<500,0>[A`B;f]
+\morphism(0,0)|a|/{*}/<500,0>[A`B;f]
+\morphism(0,0)|a|/-{*}/<500,0>[A`B;f]
+\end{verbatim}
+ give error messages. Only the fourth works:
+ $$\bfig
+\morphism(0,0)|a|/-{*}/<500,0>[A`B;f]
+ \efig$$
+
+In addition to the diagrams, there are macros that are intended to be
+used inline to make horizontal arrows, pointing left or right, plain,
+monic, epic, or user-definable shapes, and calculating their own length
+to fit the label. Finally, there is a macro for making short 2-arrows
+that may be placed (actually, \index{\backslash place}\verb.\place.d) anywhere in
+a diagram.
+
+
+\section{Defined diagrams}
+
+Using the basic
+\index{\backslash morphism}\verb.\morphism. macro, I have a defined a number of
+diagrams: squares (really rectangles) and variously oriented triangles
+and a few compound diagrams. The basic shapes are exactly the same as
+in the old diagram package, but the options are done entirely
+differently. Here is the syntax of the
+\index{\backslash square}\verb.\square. macro:
+ \begin{verbatim}
+ \square(x,y)|pppp|/{sh}`{sh}`{sh}`{sh}/<dx,dy>[N`N`N`N;L`L`L`L]
+ \end{verbatim}
+ Each of the first four sets of parameters is optional and any subset of
+them can be omitted. (Note that only the sets can be omitted, once you
+give \index{dx}\verb.dx., you also have to give \index{dy}\verb.dy. and
+so on.) The first set gives the horizontal and vertical position (in a
+local coordinate system) of the lower left corner of the square, the
+next four give the label placements using the same five characters
+previously described. The next four give the shapes of the arrows using
+the same syntax as discussed above. The last group is horizontal and
+vertical size of the square. More precisely, the \index{x}\verb.x.
+coordinate is that of the midpoint of the node, while the
+\index{y}\verb.y. coordinate is that of the baseline of the node. This
+is entirely based on \xypic.
+
+In the case of other shapes, discussed below, the positioning parameter
+may be different. The \index{x}\verb.x. coordinate is the midpoint of
+the leftmost node and the \index{y}\verb.y. coordinate is the baseline
+of the lowest node. In the case of the
+\index{\backslash qtriangle}\verb.\qtriangle.,
+\index{\backslash Vtriangle}\verb.\Vtriangle., and
+\index{\backslash Ctriangle}\verb.\Ctriangle. described below, these are different
+nodes. What this positioning means is that if you specify the
+coordinates and sizes correctly the shapes will automatically fit
+together. The last example on Page~\pageref{TTTdiag} illustrates this.
+
+Here is a listing of the shapes, together with the groups of parameters.
+In all cases, the first four groups are optional and any subset of them
+will work. However, they must come in the order given. Note that the
+names of the triangles are related to the shape as the shape that best
+approximates the shape of the letter. For example, a
+\index{\backslash ptriangle}\verb.\ptriangle. is a right triangle that has its
+hypotenuse going from upper right to lower left. Triangles with lower
+case names have their legs horizontal and vertical and the dimension
+parameters are the lengths of the legs. Those with capitalized names
+have their hypotenuse horizontal or vertical. In those cases, one of
+\index{dx}\verb.dx. or \index{dy}\verb.dy. is the length of a leg and
+the other is {\em half} the length of the hypotenuse. In all cases, the
+order of the nodes and of the arrows is linguistic, first moving from
+left to right and then down. The defaults are reasonable, but with
+triangles, there is not always a natural direction for arrows. I always
+made mistakes in the order with my macros and this is certainly a
+defect. But the order is the same. In every case the braces around the
+shape specification can be removed unless it includes the following
+delimiter (that is, \index{`}\verb.`. or \index{/}\verb./., as the case
+may be.)
+ \begin{verbatim}
+\square(x,y)|pppp|/{sh}`{sh}`{sh}`{sh}/<dx,dy>%
+ [N`N`N`N;L`L`L`L]
+\ptriangle(x,y)|ppp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L]
+\qtriangle(x,y)|ppp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L]
+\dtriangle(x,y)|ppp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L]
+\btriangle(x,y)|ppp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L]
+\Atriangle(x,y)|ppp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L]
+\Vtriangle(x,y)|ppp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L]
+\Ctriangle(x,y)|ppp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L]
+\Dtriangle(x,y)|ppp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L]
+\Atrianglepair(x,y)|ppppp|/{sh}`{sh}`{sh}`{sh}`{sh}/%
+<dx,dy>[N`N`N`N;L`L`L`L`L]
+\Vtrianglepair(x,y)|ppppp|/{sh}`{sh}`{sh}`{sh}`{sh}/%
+<dx,dy>[N`N`N`N;L`L`L`L`L]
+\Ctrianglepair(x,y)|ppppp|/{sh}`{sh}`{sh}`{sh}`{sh}/%
+<dx,dy>[N`N`N`N;L`L`L`L`L]
+\Dtrianglepair(x,y)|ppppp|/{sh}`{sh}`{sh}`{sh}`{sh}/%
+<dx,dy>[N`N`N`N;L`L`L`L`L]
+\end{verbatim}
+ \index{\backslash square} \index{\backslash ptriangle} \index{\backslash qtriangle} \index{\backslash dtriangle}
+\index{\backslash btriangle} \index{\backslash Atriangle} \index{\backslash Vtriangle}
+\index{\backslash Ctriangle} \index{\backslash Dtriangle} \index{\backslash Atrianglepair}
+\index{\backslash Vtrianglepair} \index{\backslash Ctrianglepair} \index{\backslash Dtrianglepair}
+Note that the
+\verb.%. signs are required if you break the
+macro at such points. See also the discussion of errant spaces above.
+
+To make a diagram, you have to enclose it inside \index{\backslash xy ...
+\backslash endxy}.\verb,\xy ... \endxy,. You will usually want it
+displayed,
+for which the simplest way is to enclose it in \index{$$\xy ...
+\endxy$$}\verb,$$\xy...\endxy$$,. In previous versions of this, the
+macros
+\index{\backslash bfig}\verb.\bfig. and \index{\backslash efig}\verb.\efig. be synonyms for
+ were synonyms for
+\index{\backslash xy}\verb.\xy. and \index{\backslash endxy}\verb.\endxy.,
+resp. They have now been redefined to also put the box produced by
+\verb.\xy. into a \verb.\vcenter. box. The effect of this is that when
+\index{\backslash eqno}\verb.\eqno. is used with a diagram, the
+resulting equation number will be vertically centered.
+
+
+\section{Examples}
+
+Many people---including me---learn mainly by example and
+I will give a number of examples here. The formal
+syntax that is not given here can be learned in the \xypic\ reference
+manual. More samples from an actual paper can be found in
+\verb,ftp.math.mcgill.ca/pub/barr/derfun.tex,. If you want to compile
+that paper, you will need \verb,tac.cls,, available from \verb,tac.ca,.
+We begin with \index{\backslash morphism}
+\begin{verbatim}
+ $$\bfig
+ \morphism[A`B;f]
+ \morphism(0,300)[A`B;f]
+ \morphism(0,600)|m|[A`B;f]
+ \morphism(0,900)/<-/[A`B;f]
+ \morphism(900,500)<0,-500>[A`B;f]
+ \morphism(1200,0)<0,500>[A`B;f]
+ \efig$$
+\end{verbatim}
+which gives the diagram
+ $$\bfig
+ \morphism[A`B;f]
+ \morphism(0,300)[A`B;f]
+ \morphism(0,600)|m|[A`B;f]
+ \morphism(0,900)/<-/[A`B;f]
+ \morphism(900,500)<0,-500>[A`B;f]
+ \morphism(1200,0)<0,500>[A`B;f]
+ \efig$$
+\begin{verbatim}
+ $$\bfig
+\square[A`B`C`D;e`f`g`m]
+ \efig$$
+\end{verbatim}
+ produces
+ $$\bfig
+\square[A`B`C`D;e`f`g`m]
+ \efig$$
+ This can be modified, for example
+\begin{verbatim}
+ $$\bfig
+\square/>>`>`>` >->/[A`B`C`D;e`f`g`m]
+ \efig$$
+\end{verbatim}
+ produces
+ $$\bfig
+\square/>>`>`>` >->/[A`B`C`D;e`f`g`m]
+ \efig$$
+ This can be put together with a morphism as follows:
+\begin{verbatim}
+ $$\bfig
+\square/>>`>`>` >->/[A`B`C`D;e`f`g`m]
+ \morphism(500,500)|m|/.>/<-500,-500>[B`C;h]
+ \efig$$
+\end{verbatim}
+ \index{\backslash square}
+ which makes a familiar diagram:
+ $$\bfig
+\square/>>`>`>` >->/[A`B`C`D;e`f`g`m]
+ \morphism(500,500)|m|/.>/<-500,-500>[B`C;h]
+ \efig$$
+ The same diagram could have been made by
+\begin{verbatim}
+ $$\bfig
+ \ptriangle|alm|/>>`>`.>/[A`B`C;e`f`h]
+ \dtriangle/`>` >->/[B`C`D;`g`m]
+ \efig$$
+\end{verbatim}
+\index{\backslash ptriangle} \index{\backslash dtriangle}
+
+There are four macros for making pairs of triangles put together:
+ $$\bfig
+ \Vtrianglepair[A`B`C`D;f`g`h`k`l]
+ \efig$$
+ comes from
+\begin{verbatim}
+ $$\bfig
+ \Vtrianglepair[A`B`C`D;f`g`h`k`l]
+ \efig$$
+\end{verbatim}
+ \index{\backslash Vtrianglepair}
+ \index{\backslash Atrianglepair}
+ \index{\backslash Ctrianglepair}
+ \index{\backslash Dtrianglepair}
+
+ The other three are called \verb.\Atrianglepair.,
+\verb.\Ctrianglepair., and \verb.\Dtrianglepair..
+
+ You can fit two squares together, horizontally:
+\begin{verbatim}
+ $$\bfig
+\square|almb|[A`B`C`D;f`g`h`k]
+\square(500,0)/>``>`>/[B`E`D`F;l``m`n]
+ \efig$$
+\end{verbatim}
+ $$\bfig
+\square|almb|[A`B`C`D;f`g`h`k]
+\square(500,0)/>``>`>/[B`E`D`F;l``m`n]
+ \efig$$
+ or vertically
+\begin{verbatim}
+ $$\bfig
+\square(0,500)|alrm|[A`B`C`D;f`g`h`k]
+\square/`>`>`>/[C`D`E`F;`l`m`n]
+ \efig$$
+\end{verbatim}
+ $$\bfig
+\square(0,500)|alrm|[A`B`C`D;f`g`h`k]
+\square/`>`>`>/[C`D`E`F;`l`m`n]
+ \efig$$
+or a square and a triangle
+\begin{verbatim}
+ $$\bfig
+\Ctriangle/<-`>`>/<400,400>[\hbox{\rm rec}(A,B)`B`X;r_0(A,B)`f`t_0]
+ \square(400,0)/<-``>`<-/<1000,800>[\hbox{\rm rec}(A,B)`A\times\hbox{\rm
+ rec}(A,B)`X`A\times X;r(A,B)``\hbox{\rm id}_A\times f`t]
+ \efig$$
+\end{verbatim}
+ gives the diagram
+ $$\bfig
+\Ctriangle/<-`>`>/<400,400>[\hbox{\rm rec}(A,B)`B`X;r_0(A,B)`f`t_0]
+ \square(400,0)/<-``>`<-/<1000,800>[\hbox{\rm rec}(A,B)`A\times\hbox{\rm
+ rec}(A,B)`X`A\times X;r(A,B)``\hbox{\rm id}_A\times f`t]
+ \efig$$
+ This diagram is on page 361 of the third edition of Category Theory for
+Computing Science to describe recursion.
+ Here is an example using the procedure for sliding an arrow sideways.
+This one could even be used in a text,
+ \index{sliding arrows}
+$\xy \morphism(0,0)|a|/@{>}@<3pt>/<400,0>[A`B;d]
+\morphism(0,0)|b|/@{>}@<-3pt>/<400,0>[A`B;e]\endxy$
+ which was made using
+\begin{verbatim}
+$\xy \morphism(0,0)|a|/@{>}@<3pt>/<400,0>[A`B;d]
+\morphism(0,0)|b|/@{>}@<-3pt>/<400,0>[A`B;e]\endxy$
+\end{verbatim}
+ Indidentally, if you don't put this in math mode, the diagram will come
+out too low, for reasons I do not understand but must be buried within
+the \xypic\ code.
+Later we will introduce a number of inline procedures.
+
+Something a bit different that illustrates the use of another shaft
+
+\index{=}\verb.=. that gives a 2-arrow, as well as curved arrows:
+\begin{verbatim}
+ $$\bfig
+\morphism(0,0)|a|/{@{>}@/^1em/}/<500,0>[A`B;f]
+\morphism(0,0)|b|/{@{>}@/_1em/}/<500,0>[A`B;g]
+\morphism(250,50)|a|/=>/<0,-100>[``]
+ \efig$$
+\end{verbatim}
+ $$\bfig
+\morphism(0,0)|a|/{@{>}@/^1em/}/<500,0>[A`B;f]
+\morphism(0,0)|b|/{@{>}@/_1em/}/<500,0>[A`B;g]
+\morphism(250,50)|a|/=>/<0,-100>[`;]
+ \efig$$
+ In order to use curved arrows, you must insert
+\index{\backslash xyoption{curve}}\verb.\xyoption{curve}.
+into your file. Here are two ways of doing three arrows between two
+objects, depending on what you like:
+\begin{verbatim}
+ $$\bfig
+ \morphism(0,0)|a|/@{>}@<5pt>/<500,0>[A`B;f]
+ \morphism(0,0)|m|/@{>}/<500,0>[A`B;g]
+ \morphism(0,0)|b|/@{>}@<-5pt>/<500,0>[A`B;h]
+ \efig$$
+\end{verbatim}
+ which gives
+ $$\bfig
+ \morphism(0,0)|a|/@{>}@<5pt>/<500,0>[A`B;f]
+ \morphism(0,0)|m|/@{>}/<500,0>[A`B;g]
+ \morphism(0,0)|b|/@{>}@<-5pt>/<500,0>[A`B;h]
+ \efig$$
+and
+\begin{verbatim}
+ $$\bfig
+ \morphism(0,0)|a|/{@{>}@/^5pt/}/<500,0>[A`B;f]
+ \morphism(0,0)|m|/@{>}/<500,0>[A`B;g]
+ \morphism(0,0)|b|/{@{>}@/^-5pt/}/<500,0>[A`B;h]
+ \efig$$
+\end{verbatim}
+ which gives
+ $$\bfig
+ \morphism(0,0)|a|/{@{>}@/^5pt/}/<500,0>[A`B;f]
+ \morphism(0,0)|m|/@{>}/<500,0>[A`B;g]
+ \morphism(0,0)|b|/{@{>}@/^-5pt/}/<500,0>[A`B;h]
+ \efig$$
+ Either of these could also be used inline.
+
+ There is a macro
+\index{\backslash place}\verb.\place.
+that places that object anywhere. I have changed the name from
+\verb.\put. in order to avoid clashing with the \LaTeX\ picture mode's
+\index{\backslash put}\verb.\put.. The syntax is
+\verb.\place(x,y)[object]. that places the object at \verb.(x,y)..
+There is also an optional parameter that can be used to add any of
+\xypic's positioning parameters: L, R, D, U, CL, CR, CD, CU, C, LD, RD,
+LU, RU. For example
+\verb.\place[L](x,y)[object]. will left align the object. The default
+is to center align it.
+Here is an example that uses a construction that is undocumented here,
+but uses a documented \Xy\ construction:
+\begin{verbatim}
+\newbox\anglebox
+\setbox\anglebox=\hbox{\xy \POS(75,0)\ar@{-} (0,0) \ar@{-} (75,75)\endxy}
+ \def\angle{\copy\anglebox}
+ $$\bfig
+ \square[A`B`C`D;f`g`h`k]
+ \place(100,400)[\angle]
+ \efig$$
+\end{verbatim}
+\newbox\anglebox
+\setbox\anglebox=\hbox{\xy \POS(75,0)\ar@{-} (0,0) \ar@{-} (75,75)\endxy}
+ \def\angle{\copy\anglebox}
+ $$\bfig
+ \square[A`B`C`D;f`g`h`k]
+ \place(100,400)[\angle]
+ \efig$$
+ Notice that you get a headless arrow by using
+\index{\backslash ar@{-}}\verb.\ar@{-}..
+
+Here is a special code installed at the request of Jonathon Funk:
+\begin{verbatim}
+ $$\bfig
+\pullback|brrb|<800,800>[P`X`Y`Z;t`u`v`w]%
+|amb|/>`-->`>/<500,500>[A;f`g`h]
+ \efig$$
+\end{verbatim}
+ \index{\backslash pullback}
+ $$\bfig
+\pullback|brrb|<800,800>[P`X`Y`Z;t`u`v`w]%
+|amb|/>`-->`>/<500,500>[A;f`g`h]
+ \efig$$
+The full syntax for this is
+\begin{verbatim}
+\pullback(x,y)|pppp|/{sh}`{sh}`{sh}`{sh}/<dx`dy>[N`N`N`N;L`L`L]%
+ |ppp|/{sh}`{sh}`{sh}/<dx,dy>[N;L`L`L]
+\end{verbatim}
+ Of these only the nodes placed inside brackets are obligatory. The
+first sets of parameters are exactly as for
+\index{\backslash square}\verb.\square. and the
+remaining parameters are for the nodes and labels of the outer arrows.
+There is no positioning parameters for them; rather you set the
+horizontal and vertical separations of the outer node from the square.
+
+Here are some more special constructions. In general, if you are doing
+a square, you should use
+\index{\backslash Square}\verb.\Square. instead of
+\index{\backslash square}\verb.\square.
+because if figures its own width. The syntax is almost the same, except
+that
+\index{dx}\verb.dx. is omitted. For example,
+\begin{verbatim}
+ $$\bfig
+ \Square/^{ (}->`>`>`^{ (}->/<350>[{\rm Hom}(A,2^B)`{\rm Sub}(A\times B)`
+ {\rm Hom}(A',2^{B'})`{\rm Sub}(A'\times B');\alpha(A,B)```\alpha(A',B')]
+ \efig$$
+\end{verbatim}
+ will produce the square
+ $$\bfig
+ \Square/^{ (}->`>`>`^{ (}->/<350>[{\rm Hom}(A,2^B)`{\rm Sub}(A\times B)`
+ {\rm Hom}(A',2^{B'})`{\rm Sub}(A'\times B');\alpha(A,B)```\alpha(A',B')]
+ \efig$$
+ There are a couple of points to note here. Note the use of the
+argument
+\index{^{ (}->}\verb.^{ (}->. to get the inclusion arrow. The
+complication is
+created by the necessity of adding a bit of extra space before the hook.
+You get pretty much the same effect by putting a bit of extra space
+after the node:
+\begin{verbatim}
+ $$\bfig
+ \Square/^(->`>`>`^(->/<350>[{\rm Hom}(A,2^B)\,`{\rm Sub}(A\times B)`
+ {\rm Hom}(A',2^{B'})\,`{\rm Sub}(A'\times B');\alpha(A,B)```\alpha(A',B')]
+ \efig$$
+\end{verbatim}
+ The full syntax is
+\begin{verbatim}
+ \Square(x,y)|pppp|/{sh}`{sh}`{sh}`{sh}/<dy>[N`N`N`N;L`L`L`L]
+\end{verbatim}
+
+There are also macros for placing two
+\index{\backslash Square}\verb.\Square.s together
+horizontally or vertically. The first is
+\index{\backslash hSquares}\verb.\hSquares. with the
+syntax
+\begin{verbatim}
+\hSquares(x,y)|ppppppp|/{sh}`{sh}`{sh}`{sh}`{sh}`{sh}`{sh}/%
+<dy>[N`N`N`N`N`N;L`L`L`L`L`L`L]
+\end{verbatim}
+The second is
+\index{\backslash vSquares}\verb.\vSquares. with a similar syntex except that there
+are two
+\index{dy}\verb.dy. parameters, one for each square:
+\begin{verbatim}
+\hSquares(x,y)|ppppppp|/{sh}`{sh}`{sh}`{sh}`{sh}`{sh}`{sh}/%
+<dy,dy>[N`N`N`N`N`N;L`L`L`L`L`L`L]
+\end{verbatim}
+ Similarly, there are four macros for making pairs of triangles put
+together. For example,
+ $$\bfig
+ \Vtrianglepair[A`B`C`D;f`g`h`k`l]
+ \efig$$
+ comes from
+\begin{verbatim}
+ $$\bfig
+ \Vtrianglepair[A`B`C`D;f`g`h`k`l]
+ \efig$$
+\end{verbatim}
+
+There is a macro for making cubes\index{\backslash cube}. The syntax is
+\begin{verbatim}
+ \cube(x,y)|pppp|/{sh}`{sh}`{sh}`{sh}/<dx,dy>[N`N`N`N;L`L`L`L]%
+ (x,y)|pppp|/{sh}`{sh}`{sh}`{sh}/<dx,dy>[N`N`N`N;L`L`L`L]%
+ |pppp|/{sh}`{sh}`{sh}`{sh}/[L`L`L`L]
+\end{verbatim}
+ The first line of parameters is for the outer square and the second for
+the inner square, while the remaining parameters are for the arrows
+between the squares. Only the parameters in square brackets are
+required; there are defaults for the others. Here is an example:
+\begin{verbatim}
+ $$\bfig
+\cube(0,0)|arlb|/ >->` >->`>`>/<1500,1500>[A`B`C`D;f`g`h`k]%
+(300,300)|arlb|/>`>`>`>/<400,400>[A'`B'`C'`D';f'`g'`h'`k']%
+ |mmmm|/<-`<-`<-`<-/[\alpha`\beta`\gamma`\delta]
+ \efig$$
+\end{verbatim}
+ gives the somewhat misshapen diagram
+ $$\bfig
+\cube(0,0)|arlb|/ >->` >->`>`>/<1500,1500>[A`B`C`D;f`g`h`k]%
+(300,300)|arlb|/>`>`>`>/<400,400>[A'`B'`C'`D';f'`g'`h'`k']%
+ |mmmm|/<-`<-`<-`<-/[\alpha`\beta`\gamma`\delta]
+ \efig$$
+ because the parameters were oddly chosen. The defaults center the
+squares. I discovered accidently, while debugging the cube that what I
+thought was an out-of-range choice of parameters would produce an offset
+cube:
+\begin{verbatim}
+ $$\bfig
+\cube|arlb|/ >->` >->`>`>/<1000,1000>[A`B`C`D;f`g`h`k]%
+(400,400)|arlb|/>`>`>`>/<900,900>[A'`B'`C'`D';f'`g'`h'`k']%
+ |rrrr|/<-`<-`<-`<-/[\alpha`\beta`\gamma`\delta]
+ \efig$$
+\end{verbatim}
+ gives
+ $$\bfig
+\cube|arlb|/ >->` >->`>`>/<1000,1000>[A`B`C`D;f`g`h`k]%
+(400,400)|arlb|/>`>`>`>/<900,900>[A'`B'`C'`D';f'`g'`h'`k']%
+ |rrrr|/<-`<-`<-`<-/[\alpha`\beta`\gamma`\delta]
+ \efig$$
+
+
+\subsection{Nodes and arrows}\label{nodes&arrows}
+Following a suggestion of Gerd Zeibig, who has implemented this in a
+very different way, I have added a feature wherein you can specify nodes
+and arrows between them. The nodes can be given simple identifiers and
+those used to specify the source and target of the arrows. The way it
+works is that \verb.\node id(x,y)[N]. assigns the node \verb.N. at
+position \verb.(x,y). to the identifier \verb.id. which is then used
+to refer to that node. Then \verb.\arrow[id`id;L]. is used to place
+arrows at the nodes identified by the identifiers and with label
+\verb.L.. There are also optional arguments for label position and
+arrowhead shape, so the full macro looks like \verb.|p|/sh/[id`id;L]..
+Here is an example. The code
+\begin{verbatim}
+$$\bfig
+\node a(0,0)[A\otimes B]
+\node 3b(700,300)[A'\otimes B']
+\node @(0,-500)[A''\otimes B'']
+\node xyzzy(500,0)[C\otimes D]
+\arrow/->>/[a`3b;f]
+\arrow|l|[a`@;g]
+\arrow|b|/<-/[xyzzy`@;i\otimes j]
+\efig$$
+\end{verbatim}
+produces the diagram
+$$\bfig
+\node a(0,0)[A\otimes B]
+\node 3b(700,300)[A'\otimes B']
+\node @(0,-500)[A''\otimes B'']
+\node xyzzy(500,0)[C\otimes D]
+\arrow/->>/[a`3b;f]
+\arrow|l|[a`@;g]
+\arrow|b|/<-/[xyzzy`@;i\otimes j]
+\efig$$
+
+Notice, incidentally, that the nodes can be defined either inside or
+outside math mode. If it is done outside, the definitions will persist
+(unless redefined) and may be reused. This is useful when there are two
+very similar diagrams. Also note that the identifiers can be any
+string.
+
+An example of a large diagram done this way appears in~
+
+\subsubsection{Use with beamer}
+ The way to get a diagram gradually grow within a slide is illustrated
+with the following code. Unfortunately, it cannot be displayed here for
+the document class has to be beamer, but you can see what is going on by
+compiling:
+
+\begin{verbatim}
+\documentclass{beamer}
+\pdfoutput1
+\input diagxy
+\begin{document}
+
+\begin{frame}
+ $$\bfig
+ \node 1(0,500)[A]
+ \node 2(500,500)[B]
+ \node 3(0,0)[C]
+ \node 4(500,0)[D]
+ \uncover<2,4>{\arrow[1`2;]}%
+ \uncover<3->{\arrow[1`3;]}%
+ \uncover<4>{\arrow[2`4;]}%
+ \uncover<5>{\arrow[3`4;]}%
+ \efig$$
+
+\end{frame}
+\end{document}
+\end{verbatim}
+Note that the \% at the end of the uncover lines are needed. I do not
+have any explanation, but the arrows get offset without them. This is
+odd because, generally speaking, extra spaces and even blank lines get
+ignored inside math displays.
+
+
+\subsection{Complex diagrams}\label{complex}
+In homological algebra one often has a $3\times3$ diagram, with or
+without 0's on the margins. There is a macro to do that:
+ \index{3 by 3}\index{\backslash iiixiii}
+\begin{verbatim}
+ $$\bfig
+\iiixiii(0,0)|aammbblmrlmr|/>`>`>`>`>`>`>`>`>`>`>`>/<500,500>{'5436}%
+ <400,400>[A'`B'`C'`A`B`C`A''`B''`C'';f'`g'`f`g`f''`g''`u`v`w`u'`v'`w']
+ \efig$$
+\end{verbatim}
+ that gives
+ $$\bfig
+\iiixiii(0,0)|aammbblmrlmr|/>`>`>`>`>`>`>`>`>`>`>`>/<500,500>{'5436}%
+ <400,400>[A'`B'`C'`A`B`C`A''`B''`C'';f'`g'`f`g`f''`g''`u`v`w`u'`v'`w']
+ \efig$$
+ Here is the explanation. The arrow parameters are not given in the
+usual order, but rather first all the horizontal arrows and then all the
+vertical ones, each in their usual order. The nodes are given in the
+usual order. The fifth parameter is the octal number
+\verb.`5436. (In
+\TeX, the
+\verb.'. introduces octal numbers and
+\verb.". introduces
+hexadecimal numbers) which corresponds to the binary number
+101,100,011,110 that describes the distribution of the 0's around the
+margins. The same results would have been obtained if the number had
+been the hexadecimal number
+\verb."B1E. or the decimal number
+
+\verb.2846.. The sixth parameter gives the horizontal and vertical
+offset of the 0's, which you often want smaller than the others. You
+must not give the sixth parameter unless you have given a value (which
+could be 0) to the fifth or an error condition will result. Note that
+the positioning parameters ignore the 0's so that it is the lower left
+node that appears at the position
+\verb.(x,y).. As usual, there are
+defaults.
+ \begin{verbatim}
+ $$\bfig
+\iiixiii[A'`B'`C'`A`B`C`A''`B''`C'';f'`g'`f`g`f''`g''`u`v`w`u'`v'`w']
+ \efig$$
+ $$\bfig
+\iiixiii%
+ {'5436}[A'`B'`C'`A`B`C`A''`B''`C'';f'`g'`f`g`f''`g''`u`v`w`u'`v'`w']
+ \efig$$
+ $$\bfig
+\iiixiii{'5436}<250,450>[A'`B'`C'`A`B`C`A''`B''`C'';%
+f'`g'`f`g`f''`g''`u`v`w`u'`v'`w']
+ \efig$$
+\end{verbatim}
+ $$\bfig
+\iiixiii[A'`B'`C'`A`B`C`A''`B''`C'';f'`g'`f`g`f''`g''`u`v`w`u'`v'`w']
+ \efig$$
+ $$\bfig
+\iiixiii%
+ {'5436}[A'`B'`C'`A`B`C`A''`B''`C'';f'`g'`f`g`f''`g''`u`v`w`u'`v'`w']
+ \efig$$
+ $$\bfig
+\iiixiii{'5436}<250,450>[A'`B'`C'`A`B`C`A''`B''`C'';%
+f'`g'`f`g`f''`g''`u`v`w`u'`v'`w']
+ \efig$$
+
+A similar macro\index{3 by 2}%
+\index{\backslash iiixii}\verb.\iiixii. has been added for a map between exact
+sequences, with parameters similar to the above. An actual example is
+\begin{verbatim}
+ $$\bfig
+ \iiixii|aaaalmr|<1000,800>[H`G`F`H\oplus H_0`G\oplus H_0\oplus F_0`
+F\oplus F_0; f`g`\pmatrix{f&0\cr0&1\cr0&0}`\pmatrix{g&0&0\cr0&0&1}`
+ \pmatrix{1\cr0}`\pmatrix{1\cr0\cr0}`\pmatrix{1\cr0}]
+\efig$$
+\end{verbatim}
+ which gives
+ $$\bfig
+ \iiixii|aaaalmr|<1000,800>[H`G`F`H\oplus H_0`G\oplus H_0\oplus F_0`
+F\oplus F_0; f`g`\pmatrix{f&0\cr0&1\cr0&0}`\pmatrix{g&0&0\cr0&0&1}`
+ \pmatrix{1\cr0}`\pmatrix{1\cr0\cr0}`\pmatrix{1\cr0}]
+\efig$$
+ The general syntax is
+\begin{verbatim}
+ \iiixii(x,y)|ppppppp|/1`2`3`4`5`6`7/<dx,dy>{n}<dx'>[...]
+\end{verbatim}
+ with the usual meaning. The number n is a number between 0 and 15
+(default 15) that specifies whether and where 0's appear (think binary,
+with the high bit at the upper left) and dx' specifies the separation of
+the zeroes. You get two squares side by side if both n and dx' are 0.
+
+\subsection{Empty placement and moving labels}
+ The label placements within \verb.|p|. is valid only for
+\verb.x=a,b,r,l,m.. If you use any other value (or leave it empty) the
+label entry is ignored, but you can use any valid \xypic\ label, as
+described in Figure 13 of the reference manual. One place you might
+want to use this is for the placement of the labels along an arrow. In
+\xypic\ the default placement of the label is midway between the
+midpoints of the nodes. If the two nodes are of widely different sizes,
+this can result in strange placements; therefore I always place them
+midway along the arrow. However, as the following illustrates, this can
+be changed.
+ \begin{verbatim}
+ $$\bfig
+\morphism(0,900)||/@{->}^<>(0.7){f}/<800,0>[A^B\times B^C\times C`C;]
+\morphism(0,600)||/@{->}^<(0.7){f}/<800,0>[A^B\times B^C\times C`C;]
+\morphism(0,300)||/@{->}^>(0.7){f}/<800,0>[A^B\times B^C\times C`C;]
+\morphism(0,0)||/@{->}^(0.7){f}/<800,0>[A^B\times B^C\times C`C;]
+ \efig$$
+\end{verbatim}
+ which produces
+ $$\bfig
+\morphism(0,900)||/@{->}^<>(0.7){f}/<800,0>[A^B\times B^C\times C`C;]
+\morphism(0,600)||/@{->}^<(0.7){f}/<800,0>[A^B\times B^C\times C`C;]
+\morphism(0,300)||/@{->}^>(0.7){f}/<800,0>[A^B\times B^C\times C`C;]
+\morphism(0,0)||/@{->}^(0.7){f}/<800,0>[A^B\times B^C\times C`C;]
+ \efig$$
+ Here is the explanation. The label placement argument is empty (it
+cannot be omitted) and the arrow entry is empty. However, placing
+\verb.^(0.7){f}. inside the arrow shape places the label $f$ 7/10 of the
+way between the nodes. Unmodified, this places it 7/10 of the way
+between the centers of the nodes. This may be modified by
+\index{<}\verb.<., which moves the first (here the left) reference point
+to the beginning of the arrow, \index{>}\verb.>. which moves the second
+reference point to the end of the arrow, or by both, which moves both
+reference points. In most cases, you will want both. Incidentally,
+\index{-}\verb.-. is a synonym for the sequence
+\index{<>(}5).\verb.<>(.5). and that is the default placement in my
+package.
+
+Here are some more examples that illustrates the special sequence
+\index{\backslash hole}\verb.\hole. used in conjunction with \index{|}\verb.|.
+that implements \index{m}\verb.m. as well as the fact that these things
+can be stacked. For more details, I must refer you to the \xypic\
+reference manual.
+ \begin{verbatim}
+ $$\bfig
+\morphism(0,600)||/@{->}|-\hole/<800,0>[A^B\times B^C\times C`C;]
+\morphism(0,300)||/@{->}|-\hole^<>(.7)f/<800,0>[A^B\times B^C\times C`C;]
+\morphism(0,0)||/@{->}|-\hole^<>(.7)f_<>(.3)g/<800,0>[A^B\times
+B^C\times C`C;]
+ \efig$$
+\end{verbatim}
+ produces
+ $$\bfig
+\morphism(0,600)||/@{->}|-\hole/<800,0>[A^B\times B^C\times C`C;]
+\morphism(0,300)||/@{->}|-\hole^<>(.7)f/<800,0>[A^B\times B^C\times C`C;]
+\morphism(0,0)||/@{->}|-\hole^<>(.7)f_<>(.3)g/<800,0>[A^B\times
+B^C\times C`C;]
+ \efig$$
+
+Here is another version of the cube we looked at above, using these
+special placements and\index{\backslash cube}
+\index{\backslash hole}\verb.\hole.'s to break some lines and make it
+neater.
+\begin{verbatim}
+ $$\bfig
+\cube|arlb|/@{ >->}^<>(.6){f}` >->`@{>}_<>(.4){h}`>/%
+<1000,1000>[A`B`C`D;`g``k]%
+(400,400)|axxb|/>`@{>}|!{(300,1000);(500,1000)}\hole^<>(.6){g'}`>`@{>}%
+|!{(1000,500);(1000,300)}\hole_<>(.4){k'}/<900,900>[A'`B'`C'`D';f'``h'`]%
+ |rrrr|/<-`<-`<-`<-/[\alpha`\beta`\gamma`\delta]
+ \efig$$
+\end{verbatim}
+ $$\bfig
+\cube|arlb|/@{ >->}^<>(.6){f}` >->`@{>}_<>(.4){h}`>/%
+<1000,1000>[A`B`C`D;`g``k]%
+(400,400)|axxb|/>`@{>}|!{(300,1000);(500,1000)}\hole^<>(.6){g'}`>`@{>}%
+|!{(1000,500);(1000,300)}\hole_<>(.4){k'}/<900,900>[A'`B'`C'`D';f'``h'`]%
+ |rrrr|/<-`<-`<-`<-/[\alpha`\beta`\gamma`\delta]
+ \efig$$
+ This one is probably worth saving as a template. Later I will explain
+the meaning of the strings \verb.!{(300,1000);(500,1000)}\hole. and
+ \verb.!{(1000,500);(1000,300)}\hole. along with a caveat on their use.
+If the nodes are unusually large, the cube may be magnified using
+\index{\backslash scalefactor}\verb.\scalefactor. .
+
+\subsection{Inline macros}
+ Here we illustrate a few of the macros for inline---or
+displayed---equations the package contains. In each case, the macro may
+have a superscript or subscript or both (in which case the superscript
+must come first) and the arrow(s) grow long enough to hold the super- or
+subscript. If you type\par\noindent
+\verb.$A\to B\to^f C\to_g D\to^h_{{\rm Hom}(X,Y)} E$., you get
+ $A\to B\to^f C\to_g D\to^h_{{\rm Hom}(X,Y)} E$. Similarly, the macro
+\index{\backslash toleft}\verb.\toleft. reverses the arrows. The remaining macros
+of this sort are \index{\backslash mon}\verb.\mon. which gives a monic arrow,
+\index{\backslash epi}\verb.\epi. which gives an epic arrow,
+\index{\backslash two}\verb.\two. that gives a pair of arrows, as well as
+leftwards pointing versions, \index{\backslash monleft}\verb.\monleft.,
+\index{\backslash epileft}\verb.\epileft., and \index{\backslash twoleft}\verb.\twoleft. of
+each of them. Here is one more example:
+\begin{verbatim}
+ $A\twoleft B\twoleft^f C\twoleft_g D\twoleft^h_{{\rm Hom}(X,Y)} E$
+\end{verbatim}
+ gives $A\twoleft B\twoleft^f C\twoleft_g D\twoleft^h_{{\rm Hom}(X,Y)} E$.
+There is an almost unlimited variety of such procedures possible. The
+ones that are provided can be used as templates to define new ones with,
+say, curved arrows or three arrows or whatever a user might have need
+of.
+
+\subsubsection{Added:}\label{added} The macros \index{\backslash to}\verb.\to. and
+\index{\backslash two}\verb.\two. can each have optional parameters of the form
+\index{/{sh}/<dx>}\verb./{sh}/<dx>. and
+\index{/{sh}`{sh}/<dx>}\verb./{sh}`{sh}/<dx>., resp. that allow you to
+specify the shapes of the arrows and to override the automatic
+computation of the lengths of the arrows. For example,
+ \begin{verbatim}
+$$A\to/<-/ B\to^f C \to/ >->/<500>_g D\to/<-< /^f_g E$$
+$$A\two/<-`->/<100> B\two^f C \two/ >->` >->/_g D\two/<-< `<-< /^f_g E$$
+\end{verbatim}
+ gives
+$$A\to/<-/ B\to^f C \to/ >->/<500>_g D\to/<-< /^f_g E$$
+$$A\two/<-`->/<100> B\two^f C \two/ >->` >->/_g D\two/<-< `<-< /^f_g E$$
+ This renders \index{\backslash mon}\verb.\mon., \index{\backslash epi}\verb.\epi.,
+\index{\backslash toleft}\verb.\toleft., \index{\backslash monleft}\verb.\monleft.,
+\index{\backslash epileft}\verb.\epileft., and \index{\backslash twoleft}\verb.\twoleft.
+obsolete, but they have been retained for back compatibility and
+convenience. A three arrow macro that works similarly has been added.
+For example
+ \begin{verbatim}
+ $$A\threepppp/>`<-`>/<400>^{d^0}|{s^0}_{d^1}B\three<100>
+C\three/->>`<-< `->>/ D$$
+\end{verbatim}
+ gives
+ $$A\threepppp/>`<-`>/<400>^{d^0}|{s^0}_{d^1}B\three<100>
+C\three/->>`<-< `->>/ D$$
+
+\subsection{2-arrows}
+ There is a macro for making 2-arrows of a fixed size, but varying
+orientation. They should be put at the appropriate position in a
+diagram. The two parameters are two integers \index{dx}\verb.dx. and
+\index{dy}\verb.dy. whose ratio is the slope of the arrow. They need
+not be relatively prime, but arithmetic overflow could occur if they are
+too large. Note that although \index{(dx,dy)}\verb.(dx,dy). and
+\index{(-dx,-dy)}\verb.(-dx,-dy). describe the same slope, the arrows
+point in opposite directions. Here is a sampler
+ \begin{verbatim}
+ $$\bfig
+ \place(0,0)[\twoar(1,0)]
+ \place(200,0)[\twoar(0,1)]
+ \place(400,0)[\twoar(1,1)]
+ \place(600,0)[\twoar(0,-1)]
+ \place(800,0)[\twoar(1,2)]
+ \place(1000,0)[\twoar(1,3)]
+ \place(1200,0)[\twoar(1,-3)]
+ \place(1400,0)[\twoar(-3,1)]
+ \place(1600,0)[\twoar(-1,-3)]
+ \place(1800,0)[\twoar(255,77)]
+ \efig$$
+\end{verbatim}
+ $$\bfig
+ \place(0,0)[\twoar(1,0)]
+ \place(200,0)[\twoar(0,1)]
+ \place(400,0)[\twoar(1,1)]
+ \place(600,0)[\twoar(0,-1)]
+ \place(800,0)[\twoar(1,2)]
+ \place(1000,0)[\twoar(1,3)]
+ \place(1200,0)[\twoar(1,-3)]
+ \place(1400,0)[\twoar(-3,1)]
+ \place(1600,0)[\twoar(-1,-3)]
+ \place(1800,0)[\twoar(255,77)]
+ \efig$$
+
+Here is little amusement.
+\begin{verbatim}
+ $$\bfig
+ \square/@3{->}`~)`=o`--x/[A`B`C`D;```]
+ \place(400,100)[\twoar(-1,-1)]
+ \place(100,400)[\twoar(1,1)]
+ \morphism(500,500)||/{*}.{*}/<-500,-500>[B`C;]
+ \efig$$
+\end{verbatim}
+ $$\bfig
+ \square/@3{->}`~)`=o`--x/[A`B`C`D;```]
+ \place(400,100)[\twoar(-1,-1)]
+ \place(100,400)[\twoar(1,1)]
+ \morphism(500,500)||/{*}.{*}/<-500,-500>[B`C;]
+ \efig$$
+
+\subsection{Mixing \xypic\ code}
+ Here is a sample in which I have mixed code from \xypic\ with my own.
+\let\tilde\widetilde
+\let\hat\widehat
+\begin{verbatim}
+ $$\bfig
+ \square(1500,500)/>`>`>`@{>}^<>(.2){r_{n-1}}/[T_{n-1}`T_{n-2}`R_{n-1}
+`R_{n-2}; t_{n-1}``\sigma_{n-2}`]
+ \square(1500,0)/`>`>`>/[R_{n-1}`R_{n-2}`S_{n-1}`S_{n-2};
+`f_{n-1}`f_{n-2}`s_{n-1}]
+ \morphism|b|[\tilde S_{n+1}`S_n;\tilde s_{n+1}]
+ \square(1000,500)/>`>`>`>/[\tilde T_n`T_{n-1}`\tilde
+R_n`{R_{n-1}};\tilde t_n`\tilde \sigma_n`\sigma_{n-1}`]
+ \square(1000,0)/>`>``>/[\tilde R_n`R_{n-1}`\tilde S_n`{S_{n-1}};\tilde
+r_n\quad ```\tilde s_n]
+ \square(500,0)/>`>``>/[R_n`{R_n}`{S_n}`{S_{n}};
+\hat r_n`f_n`\tilde f_n`\hat s_n]
+ \POS(1500,1000)*+!!<0ex,.75ex>{T_{n-1}}
+ \ar@{-}|!{(1000,500);(1500,500)}\hole(1167,334)%
+ \POS(1167,334)\ar|!{(1000,500);(1000,0)}\hole_<>(.6){h_{n-1}}
+ (500,0)*+!!<0ex,.75ex>{S_n}
+ \morphism(2000,1000)/@{>}|\hole^<>(.8){h_{n-2}}/%
+ <-500,-1000>[T_{n-2}`S_{n-1};]
+ \efig$$
+\end{verbatim}
+ $$\bfig
+ \square(1500,500)/>`>`>`@{>}^<>(.2){r_{n-1}}/[T_{n-1}`T_{n-2}`R_{n-1}
+`R_{n-2}; t_{n-1}``\sigma_{n-2}`]
+ \square(1500,0)/`>`>`>/[R_{n-1}`R_{n-2}`S_{n-1}`S_{n-2};
+`f_{n-1}`f_{n-2}`s_{n-1}]
+ \morphism|b|[\tilde S_{n+1}`S_n;\tilde s_{n+1}]
+ \square(1000,500)/>`>`>`>/[\tilde T_n`T_{n-1}`\tilde
+R_n`{R_{n-1}};\tilde t_n`\tilde \sigma_n`\sigma_{n-1}`]
+ \square(1000,0)/>`>``>/[\tilde R_n`R_{n-1}`\tilde S_n`{S_{n-1}};\tilde
+r_n\quad ```\tilde s_n]
+ \square(500,0)/>`>``>/[R_n`{R_n}`{S_n}`{S_{n}};
+\hat r_n`f_n`\tilde f_n`\hat s_n]
+ \POS(1500,1000)*+!!<0ex,.75ex>{T_{n-1}}
+ \ar@{-}|!{(1000,500);(1500,500)}\hole(1167,334)%
+ \POS(1167,334)\ar|!{(1000,500);(1000,0)}\hole_<>(.6){h_{n-1}}
+ (500,0)*+!!<0ex,.75ex>{S_n}
+ \morphism(2000,1000)/@{>}|\hole^<>(.8){h_{n-2}}/%
+ <-500,-1000>[T_{n-2}`S_{n-1};]
+ \efig$$
+ There are three points to note here in connection with the two lines
+that begin with \index{\backslash POS}\verb.\POS. First the objects that are the
+source of the first and the target of the second are preceded by
+\verb;!!<0ex,.75ex>;\verb;!!<0ex,.75ex>;. The effect is to reset the
+baseline to the baseline of the object (rather than the vertical center)
+and then to lower that by 3/4 of xheight so that the arrow goes in the
+right place. This string precedes all objects. Without that, an object
+like $\tilde R $ would be set lower that $R$. Second, the first arrow
+has no target and the second no source. This does not give the same
+result as empty source and target since in the latter cases, there would
+be spaces allowed around them and then the two lines would not meet. It
+would be possible to add code that tests for empty nodes, but it comes
+up so seldom that I have refrained. In the meantime, the only recourse
+is to revert to the underlying \xypic\ code. Thirdly the string
+\verb.|!{(1000,500);(1500,500)}\hole. specifies that the line should be
+broken at the place where the current arrow intersects the line between
+the nodes located at (1000,500) and (1500,500). One must be careful
+using this construction, however, as it does not seem to work correctly
+if the line segment fails to intersect the current line, or if it does
+intersect, but happens to be too long. I have not worked out how long
+is too long, but you can get odd results. I assume that this bug will
+be fixed eventually. (Ross Moore says that it works correctly in the
+version he has, which, however, has not been released.) There is a
+similar string, with similar effect, in the following line. The last
+line uses simply \index{|\hole}\verb.|\hole. which positions the gap in
+the middle of the arrow.
+
+
+\subsection{loops}
+ Two new procedures \verb.\Loop. and \verb.\iloop. have been added, the
+latter for inline loops. (Note: \verb.\loop. was changed to
+\verb.\Loop. as the former conflicted with amstex.) Here are
+examples:
+\begin{verbatim}
+ $$\bfig
+ \morphism[A`B;f]
+ \Loop(0,0)A(ur,ul)_g
+ \Loop(500,0)B(dl,dr)_h
+ \efig$$
+\end{verbatim}
+ $$\bfig
+ \morphism[A`B;f]
+ \Loop(0,0)A(ur,ul)_g
+ \Loop(500,0)B(dl,dr)_h
+ \efig$$
+
+Inline: Either \verb.$A\iloop B(ur,ul)C$.
+or \verb.$\xy\Loop(0,0)A(ur,ul)\endxy$. gives the output $\xy
+ \Loop(0,0)A(ur,ul)\endxy$. The direction indicators show what
+direction the loops start and end in.
+
+\subsection{Diagram from TTT}\label{tttdiag}
+ The last example is a complicated diagram from TTT. If you have the
+documentation from the old diagram macros (or the errata from TTT), you
+can see how much easier it is to describe this diagram with these
+macros. Note the use of \index{\backslash scalefactor}\verb.\scalefactor. to
+change the default length from 500 to 700 that made it unnecessary to
+specify the scales on the squares and triangles.
+ \begin{verbatim}
+ $$\bfig
+ \scalefactor{1.4}%
+ \qtriangle(0,1000)/>`>`/[TT`T`TTT';\mu`TT\eta'`]%
+ \btriangle(500,1000)/`>`@<-14\ul>/[T`TTT'`TT';`T\eta`T\sigma]%
+ \morphism(0,1500)|l|/>/<0,-1000>[TT`TT'T;T\eta'T]%
+ \square(500,500)|ammx|/@<14\ul>`>`>`/[TTT'`TT'`TT'TT'`TT'T';%
+ \mu T'`T\eta'TT'`T\eta'T'`]%
+ \morphism(1000,1000)|r|/>/<500,-500>[TT'`TT';\hbox{\rm id}]%
+ \square/>`>``>/[TT'T`TT'TT'`T'T`T'TT';TT'T\eta'`\sigma T``T'T\eta']%
+ \square(500,0)|ammb|[TT'TT'`TT'T'`T'TT'`T'T';%
+ TT'\sigma`\sigma TT'`\sigma T'`T'\sigma T']%
+ \square(1000,0)/>``>`>/[TT'T'`TT'`T'T'`T';T\mu'``\sigma`\mu']%
+\place(500,1250)[1]\place(215,1000)[2]\place(750,750)[3]%
+\place(215,250)[4]\place(750,250)[5]\place(1140,750)[6]%
+\place(1250,250)[7]%
+ \efig$$
+\end{verbatim}
+ $$\bfig\label{TTTdiag}
+ \scalefactor{1.4}%
+ \qtriangle(0,1000)/>`>`/[TT`T`TTT';\mu`TT\eta'`]%
+ \btriangle(500,1000)/`>`@<-14\ul>/[T`TTT'`TT';`T\eta`T\sigma]%
+ \morphism(0,1500)|l|/>/<0,-1000>[TT`TT'T;T\eta'T]%
+ \square(500,500)|ammx|/@<14\ul>`>`>`/[TTT'`TT'`TT'TT'`TT'T';\mu T'`%
+ T\eta'TT'`T\eta'T'`]%
+ \morphism(1000,1000)|r|/>/<500,-500>[TT'`TT';\hbox{\rm id}]%
+ \square/>`>``>/[TT'T`TT'TT'`T'T`T'TT';TT'T\eta'`\sigma T``T'T\eta']%
+ \square(500,0)|ammb|[TT'TT'`TT'T'`T'TT'`T'T';TT'\sigma`\sigma TT'%
+ `\sigma T'`T'\sigma T']%
+ \square(1000,0)/>``>`>/[TT'T'`TT'`T'T'`T';T\mu'``\sigma`\mu']%
+\place(500,1250)[1]\place(215,1000)[2]\place(750,750)[3]%
+\place(215,250)[4]\place(750,250)[5]\place(1140,750)[6]%
+\place(1250,250)[7]%
+ \efig$$
+
+Here is code that produces the same diagram using the new \verb.\arrow.
+feature:
+\begin{verbatim}
+\node a(0,1500)[TT]%
+\node b(500,1500)[T]%
+\node c(500,1000)[TTT']%
+\node d(1000,1000)[TT']%
+\node e(0,500)[TT'T]%
+\node f(500,500)[TT'TT']%
+\node g(1000,500)[TT'T']%
+\node h(1500,500)[TT']%
+\node i(0,0)[T'T]%
+\node j(500,0)[T'TT']%
+\node k(1000,0)[T'T']%
+\node l(1500,0)[T']%
+ $$\bfig
+\scalefactor{1.4}%
+\arrow[a`b;\mu]%
+\arrow|l|[a`e;T\eta'T]%
+\arrow|l|[a`c;TT\eta]%
+\arrow[b`d;T\eta]%
+\arrow/@<14\ul>/[c`d;\mu T']%
+\arrow|b|/@<-14\ul>/[c`d;T\sigma]%
+\arrow[d`h;\mbox{id}]%
+\arrow|m|[c`f;T\eta'TT']%
+\arrow|m|[d`g;T\eta'T']%
+\arrow[e`f;TT'T\eta']%
+\arrow[f`g;TT'\sigma]%
+\arrow[g`h;T\mu']%
+\arrow|l|[e`i;\sigma T]%
+\arrow|m|[f`j;\sigma TT']%
+\arrow|m|[g`k;\sigma T']%
+\arrow[h`l;\sigma]%
+\arrow|b|[i`j;T'T\eta']%
+\arrow|b|[j`k;T'\sigma T']%
+\arrow[k`l;\mu']%
+\place(500,1250)[1]\place(215,1000)[2]\place(750,750)[3]%%
+\place(215,250)[4]\place(750,250)[5]\place(1140,750)[6]%%
+\place(1250,250)[7]%
+ \efig$$
+\end{verbatim}
+ It is in some ways easier than the other, but more verbose. In the end
+it comes down to a matter of preference.
+
+
+
+\clearpage
+\def\lab(#1,#2)[#3]{\place(#1,#2)[\backslash\hbox{\texttt#3}]}
+\def\Lab[#1]{{\backslash\hbox{\texttt#1}}}
+
+
+\subsection{A few samples.}
+ These come from a paper that is being converted from MS-Word and are
+very complicated. The first shows two ways of doing the same thing.
+Notable are the use of Bezier curves as well as curved arrows. I now
+feel that the use of the node/arrow feature may be better, for complex
+diagrams, than the use of set shapes. Here is the same diagram set in
+each way. Compare the codes. (This is from a real paper,
+incidentally.)
+
+ $$\bfig
+ \def\f{\bar f}
+ \def\g{\bar g}
+ \def\h{\bar h}
+ \let\t\tau
+ \square(0,2400)/>`<-`<-`/<1200,400>[(\h(\g\f))\t_A`((\h\g)\f)\t_A`
+\h((\g\f)\t_A)`(\h\g(\f\t_A));```]
+ \morphism(0,2400)<600,0>[\h((\g\f)\t_A)`\h(\g(\f\t_A));]
+ \square(600,2000)/>`<-`<-`>/<600,400>[\h(\g(\f\t_A))`(\h\g(\f\t_A))
+`\h(\g(\t_Bf))`(\h\g)(\t_Bf);`\h(\g\t_f)`(\h\g)\t_f`]
+ \morphism(1200,2000)<600,0>[(\h\g)(\t_Bf)`((\h\g)\t_B)f;]
+ \square(600,1600)/`>`<-`>/<1200,400>[\h(\g(\t_Bf))`((\h\g)\t_B)f`
+\h((\g\t_B)f)`(\h(\g\t_B))f;```]
+\square(600,1200)|xllx|/>`<-`<-`>/<1200,400>[\h((\g\t_B)f)`
+(\h(\g\t_B))f`\h((\t_Cg)f)`(\h(\t_Cg))f;`\h(\t_gf)`(\h\t_g)f`]
+ \square(600,800)/>`<-`<-`/<1200,400>[\h((\t_Cg)f)`(\h(\t_Cg))f`
+\h(\t_C(gf))`\h(\t_C(gf));```]
+ \morphism(600,800)<600,0>[\h(\t_C(gf))`(\h\t_C)(gf);]
+ \morphism(1200,800)<600,0>[(\h\t_C)(gf)`\h(\t_C(gf));]
+ \square(1200,400)/>`<-`<-`>/<600,400>[(\h\t_C)(gf)`\h(\t_C(gf))`
+(\t_Dh)(gf)`((\t_Dh)g)f;`\t_h(gf)`(\t_hg)f`]
+ \morphism(1800,400)/<-/<600,0>[((\t_Dh)g)f`\t_D(hg)f;]
+ \square(1200,0)/`<-`<-`<-/<1200,400>[(\t_Dh)(gf)`\t_D(hg)f`
+\t_D(h(gf))`\t_D((hg)f);```]
+ \morphism(2400,400)/{@{>}@/^-15pt/}/<-600,1600>[\t_D(hg)f`
+((\h\g)\t_B)f;\t_{hg}f]
+ \morphism(600,800)|l|/{@{>}@/^15pt/}/<-600,1600>[\h(\t_C(gf))`
+\h((\g\f)\t_A);\h(\t_{gf})]
+ \morphism(1200,0)/{@{>}@`{c,(-300,0),(-600,2400),p}}/<-1200,2800>[
+\t_D(h(gf))`(\h(\g\f))\t_A;\t_h(gf)]
+ \morphism(2400,0)|l|/{@{>}@`{c,(3000,0),(2700,2800),p}}/<-1200,2800>[
+\t_D((hg)f)`((\h\g)\f)\tau_A;\t_{(hg)f}]
+ \efig$$
+
+$$\bfig
+ \def\f{\bar f}
+ \def\g{\bar g}
+ \def\h{\bar h}
+ \let\t\tau
+ \node 11(0,2800)[(\h(\g\f))\t_A]
+ \node 13(1200,2800)[((\h\g)\f)\t_A]
+ \node 21(0,2400)[\h((\g\f)\t_A)]
+ \node 22(600,2400)[\h(\g\f\t_A)]
+ \node 23(1200,2400)[(\h\g(\f\t_A))]
+ \node 32(600,2000)[\h(\g(\t_Bf))]
+ \node 33(1200,2000)[(\h\g)(\t_Bf)]
+ \node 34(1800,2000)[((\h\g)\t_B)f]
+ \node 42(600,1600)[\h((\g\t_B)f)]
+ \node 44(1800,1600)[(\h(\g\t_B))f]
+ \node 52(600,1200)[\h((\t_C)g)f]
+ \node 54(1800,1200)[(\h(\t_Cg))f]
+ \node 62(600,800)[\h(\t_C(gf))]
+ \node 63(1200,800)[(\h\t_C)(gf)]
+ \node 64(1800,800)[\h(\t_C(gf))]
+ \node 73(1200,400)[(\t_Dh)(gf)]
+ \node 74(1800,400)[((\t_D)h)g]
+ \node 75(2400,400)[(\t_D(hg))f]
+ \node 83(1200,0)[\t_D(h(gf))]
+ \node 85(2400,0)[\t_D((hg)f)]
+ \arrow[11`13;]
+ \arrow[21`11;]
+ \arrow[21`22;]
+ \arrow[22`23;]
+ \arrow[23`13;]
+ \arrow[32`22;\h(\g\t_f)]
+ \arrow[32`33;]
+ \arrow[33`23;(\h\g)\t_f]
+ \arrow[33`34;]
+ \arrow[42`44;]
+ \arrow[42`32;]
+ \arrow[44`34;]
+ \arrow[52`42;\h(\t_gf)]
+ \arrow[52`54;]
+ \arrow[54`44;(\h\t_g)f]
+ \arrow[62`52;]
+ \arrow[62`63;]
+ \arrow[63`64;]
+ \arrow[73`63;\t_h(gf)]
+ \arrow[73`74;]
+ \arrow[74`64;\t_{(hg)f}]
+ \arrow[74`75;]
+ \arrow[83`73;]
+ \arrow[83`85;]
+ \arrow[85`75;]
+ \arrow|r|/{@{>}@/_15pt/}/[75`34;\t_{hg}f]
+ \arrow|l|/{@{>}@/^15pt/}/[62`21;\h(\t_C(gf))]
+ \arrow|l|/{@{>}@`{c,(3000,0),(2700,2800),p}}/[85`13;\t_{hg}f]
+ \arrow|r|/{@{>}@`{c,(-300,0),(-600,2400),p}}/[83`11;\t_{h(fg)}]
+\efig$$
+
+Here are the codes:
+
+
+\begin{verbatim}
+
+
+ $$\bfig
+ \def\f{\bar f}
+ \def\g{\bar g}
+ \def\h{\bar h}
+ \let\t\tau
+ \square(0,2400)/>`<-`<-`/<1200,400>[(\h(\g\f))\t_A`((\h\g)\f)\t_A`
+\h((\g\f)\t_A)`(\h\g(\f\t_A));```]
+ \morphism(0,2400)<600,0>[\h((\g\f)\t_A)`\h(\g(\f\t_A));]
+ \square(600,2000)/>`<-`<-`>/<600,400>[\h(\g(\f\t_A))`(\h\g(\f\t_A))
+`\h(\g(\t_Bf))`(\h\g)(\t_Bf);`\h(\g\t_f)`(\h\g)\t_f`]
+ \morphism(1200,2000)<600,0>[(\h\g)(\t_Bf)`((\h\g)\t_B)f;]
+ \square(600,1600)/`>`<-`>/<1200,400>[\h(\g(\t_Bf))`((\h\g)\t_B)f`
+\h((\g\t_B)f)`(\h(\g\t_B))f;```]
+\square(600,1200)|xllx|/>`<-`<-`>/<1200,400>[\h((\g\t_B)f)`
+(\h(\g\t_B))f`\h((\t_Cg)f)`(\h(\t_Cg))f;`\h(\t_gf)`(\h\t_g)f`]
+ \square(600,800)/>`<-`<-`/<1200,400>[\h((\t_Cg)f)`(\h(\t_Cg))f`
+\h(\t_C(gf))`\h(\t_C(gf));```]
+ \morphism(600,800)<600,0>[\h(\t_C(gf))`(\h\t_C)(gf);]
+ \morphism(1200,800)<600,0>[(\h\t_C)(gf)`\h(\t_C(gf));]
+ \square(1200,400)/>`<-`<-`>/<600,400>[(\h\t_C)(gf)`\h(\t_C(gf))`
+(\t_Dh)(gf)`((\t_Dh)g)f;`\t_h(gf)`(\t_hg)f`]
+ \morphism(1800,400)/<-/<600,0>[((\t_Dh)g)f`\t_D(hg)f;]
+ \square(1200,0)/`<-`<-`<-/<1200,400>[(\t_Dh)(gf)`\t_D(hg)f`
+\t_D(h(gf))`\t_D((hg)f);```]
+ \morphism(2400,400)/{@{>}@/^-15pt/}/<-600,1600>[\t_D(hg)f`
+((\h\g)\t_B)f;\t_{hg}f]
+ \morphism(600,800)|l|/{@{>}@/^15pt/}/<-600,1600>[\h(\t_C(gf))`
+\h((\g\f)\t_A);\h(\t_{gf})]
+ \morphism(1200,0)/{@{>}@`{c,(-300,0),(-600,2400),p}}/<-1200,2800>[
+\t_D(h(gf))`(\h(\g\f))\t_A;\t_h(gf)]
+ \morphism(2400,0)|l|/{@{>}@`{c,(3000,0),(2700,2800),p}}/<-1200,2800>[
+\t_D((hg)f)`((\h\g)\f)\tau_A;\t_{(hg)f}]
+ \efig$$
+
+$$\bfig
+ \def\f{\bar f}
+ \def\g{\bar g}
+ \def\h{\bar h}
+ \let\t\tau
+ \node 11(0,2800)[(\h(\g\f))\t_A]
+ \node 13(1200,2800)[((\h\g)\f)\t_A]
+ \node 21(0,2400)[\h((\g\f)\t_A)]
+ \node 22(600,2400)[\h(\g\f\t_A)]
+ \node 23(1200,2400)[(\h\g(\f\t_A))]
+ \node 32(600,2000)[\h(\g(\t_Bf))]
+ \node 33(1200,2000)[(\h\g)(\t_Bf)]
+ \node 34(1800,2000)[((\h\g)\t_B)f]
+ \node 42(600,1600)[\h((\g\t_B)f)]
+ \node 44(1800,1600)[(\h(\g\t_B))f]
+ \node 52(600,1200)[\h((\t_C)g)f]
+ \node 54(1800,1200)[(\h(\t_Cg))f]
+ \node 62(600,800)[\h(\t_C(gf))]
+ \node 63(1200,800)[(\h\t_C)(gf)]
+ \node 64(1800,800)[\h(\t_C(gf))]
+ \node 73(1200,400)[(\t_Dh)(gf)]
+ \node 74(1800,400)[((\t_D)h)g]
+ \node 75(2400,400)[(\t_D(hg))f]
+ \node 83(1200,0)[\t_D(h(gf))]
+ \node 85(2400,0)[\t_D((hg)f)]
+ \arrow[11`13;]
+ \arrow[21`11;]
+ \arrow[21`22;]
+ \arrow[22`23;]
+ \arrow[23`13;]
+ \arrow[32`22;\h(\g\t_f)]
+ \arrow[32`33;]
+ \arrow[33`23;(\h\g)\t_f]
+ \arrow[33`34;]
+ \arrow[42`44;]
+ \arrow[42`32;]
+ \arrow[44`34;]
+ \arrow[52`42;\h(\t_gf)]
+ \arrow[52`54;]
+ \arrow[54`44;(\h\t_g)f]
+ \arrow[62`52;]
+ \arrow[62`63;]
+ \arrow[63`64;]
+ \arrow[73`63;\t_h(gf)]
+ \arrow[73`74;]
+ \arrow[74`64;\t_{(hg)f}]
+ \arrow[74`75;]
+ \arrow[83`73;]
+ \arrow[83`85;]
+ \arrow[85`75;]
+ \arrow|r|/{@{>}@/_15pt/}/[75`34;\t_{hg}f]
+ \arrow|l|/{@{>}@/^15pt/}/[62`21;\h(\t_C(gf))]
+ \arrow|l|/{@{>}@`{c,(3000,0),(2700,2800),p}}/[85`13;\t_{hg}f]
+ \arrow|r|/{@{>}@`{c,(-300,0),(-600,2400),p}}/[83`11;\t_{h(fg)}]
+\efig$$
+\end{verbatim}
+
+The following is a really ugly diagram that is really hard to make look
+good. Possibly all four diagonal arrows should be curved, with less
+curve but in opposite directions. Note the fact that double labels are
+permitted (though in this case, the second is \hole) and that - is a
+synonym for (.5) in the label positioning spec. This also features
+sliding arrows.
+ $$\bfig
+ \node 1(1000,800)[Y]
+ \node 21(0,0)[X]
+ \node 22(2000,0)[Z]
+ \node aa(300,400)[]
+ \node ab(450,400)[]
+ \node ba(1550,400)[]
+ \node bb(1700,400)[]
+ \arrow|a|/{@{>}@/^20pt/}/[21`1;f]
+ \arrow|b|[21`1;g]
+ \arrow[aa`ab;\beta]
+ \arrow[bb`ba;\delta]
+ \arrow|b|[1`22;i]
+ \arrow|a|/{@{>}@/^20pt/}/[1`22;h]
+ \arrow/{@{>}@/^15pt/@<5pt>^(.4)k}/[21`22;]
+ \arrow/{@{>}@/^15pt/@<5pt>^(.4)k}/[21`22;]
+ \arrow/{@{>}@<5pt>|(.4)j|(.5)\hole}/[21`22;]
+ \arrow/{@{>}@<-10pt>|(.4){hf}|-\hole}/[21`22;]
+ \arrow/{@{>}@/_15pt/@<-10pt>_(0.4){ig}}/[21`22;]
+ \node c(1000,150)[]
+ \node f(1000,-200)[]
+ \arrow|l|[f`c;t]
+ \node d(1100,25)[]
+ \node e(1100,-75)[]
+ \arrow|r|[e`d;s]
+ \efig$$
+
+
+\section{A few comparisons with {\tt xymatrix}}
+
+We give here a few diagrams to contrast the predefined shapes of
+\verb.diagxy. with those produced by \verb.xymatrix.. These are not
+intended to be invidious, but they are chosen to show \verb.xymatrix. in
+the worst light. The diagrams can be improved by using special options
+of \verb.xymatrix. but the second diagrams are the default in
+\verb.diagxy.. Of course, \verb.diagxy. uses \verb.xypic. but not the
+\verb.xymatrix. option., so this is not meant as a putdown of
+\verb.xypic., only as a comparison if you are trying to decide which to
+use. In the end, though you will probably decide on the basis of which
+you feel most comfortable with. Users of \verb.diagxy. like the
+predefined shapes and others find the native syntax of \verb.xypic. more
+comfortable.
+
+\xyoption{matrix}
+The first one illustrates what happens when the nodes are vertically
+unbalanced. Changing \verb.\xymatrix. to \verb.\xymatrix1@. improves
+the appearance, but it is still not perfect.
+
+\begin{verbatim}
+$$\xymatrix {A^{X^Y}\ar[r]&B_{Z_W}\ar[r]&C}
+\qquad A^{X^Y}\to B_{Z_W}\to C$$
+\end{verbatim}
+ produces
+$$\xymatrix {A^{X^Y}\ar[r]&B_{Z_W}\ar[r]&C}
+\qquad A^{X^Y}\to B_{Z_W}\to C$$
+
+The next sample shows what happens to the label when the nodes are of
+quite different length. Putting a - after the \verb.^. fixes this.
+\begin{verbatim}
+$$\xymatrix{A\ar[r]^{(f,g,h)}&B\times C\times D}\qquad
+A\to^{(f,g,h)}B\times C\times D$$
+\end{verbatim}
+ produces
+$$\xymatrix{A\ar[r]^{(f,g,h)}&B\times C\times D}\qquad
+A\to^{(f,g,h)}B\times C\times D$$
+
+
+However, it doesn't fix the problem of too short an arrow. Replacing
+\verb.[r]. by \verb.[rr]. and the \verb.&. by \verb.&&. fixes this.
+\begin{verbatim}
+$$\xymatrix{A\ar[r]^-{(f_1,g_2,h_3)}&B\times C\times D}\qquad
+A\to^{(f_1,g_2,h_3)}B\times C\times D$$
+\end{verbatim}
+ produces
+$$\xymatrix{A\ar[r]^-{(f_1,g_2,h_3)}&B\times C\times D}\qquad
+A\to^{(f_1,g_2,h_3)}B\times C\times D$$
+
+Unbalanced nodes in a triangle result in an unbalanced triangle. I do
+not know how to fix this one up, although \verb.xypic. has so many
+options that there is probably some way.
+\begin{verbatim}
+$$\xymatrix{A\ar[rr]\ar[dr]&&B\times C\times D\ar[dl]\\&E}$$
+$$\xy\Vtriangle[A`B\times C\times D`E;``]\endxy$$
+\end{verbatim}
+ produces
+$$\xymatrix{A\ar[rr]\ar[dr]&&B\times C\times D\ar[dl]\\&E}$$
+$$\xy\Vtriangle[A`B\times C\times D`E;``]\endxy$$
+
+\clearpage
+\section{Thumbnails}
+
+This page shows all the shapes that have been defined so far. In all
+cases, consult the documentation for the syntax and a discussion of the
+optional parameters. Note that \verb.\Square., along with
+\verb.\hSquares. and \verb.\vSquares. grow in width to accomodate the
+nodes and labels.
+
+\scalefactor{.4}
+ % \fontscale{}
+\let\.\cdot
+$\.\to_{\Lab[to]}\.\toleft_{\Lab[toleft]}\.
+\mon_{\Lab[mon]}\.\monleft_{\Lab[monleft]}\.\epi_{\Lab[epi]}\.\epileft_{\Lab[epileft]}\.
+\two_{\Lab[two]}\.\three_{\Lab[three]}\.$
+
+ $$\bfig
+ \square[\.`\.`\.`\.;```]
+ \lab(200,-250)[square]
+ \Atriangle(1000,0)[\.`\.`\.;``]
+ \lab(1400,-250)[Atriangle]
+ \Vtriangle(2500,0)[\.`\.`\.;``]
+ \lab(2900,-250)[Vtriangle]
+ \Ctriangle(4000,0)[\.`\.`\.;``]
+ \lab(4400,-250)[Ctriangle]
+ \Dtriangle(5000,0)[\.`\.`\.;``]
+ \lab(5400,-250)[Dtriangle]
+\def\ru{\.\.\.\.\.}
+ \square(0,-1500)<1000,500>[\ru`\ru`\ru`\ru;```]
+ \lab(400,-1750)[Square]
+ \ptriangle(1800,-1500)[\.`\.`\.;``]
+ \lab(2000,-1750)[ptriangle]
+ \qtriangle(2900,-1500)[\.`\.`\.;``]
+ \lab(3100,-1750)[qtriangle]
+ \dtriangle(4000,-1500)[\.`\.`\.;``]
+ \lab(4200,-1750)[dtriangle]
+ \btriangle(5100,-1500)[\.`\.`\.;``]
+ \lab(5400,-1750)[btriangle]
+ \Atrianglepair(0,-3000)[\.`\.`\.`\.;````]
+ \lab(400,-3250)[Atrianglepair]
+ \Vtrianglepair(1500,-3000)[\.`\.`\.`\.;````]
+ \lab(1900,-3250)[Vtrianglepair]
+ \Ctrianglepair(3500,-3000)[\.`\.`\.`\.;````]
+ \lab(3400,-3250)[Ctrianglepair]
+ \Dtrianglepair(4500,-3000)[\.`\.`\.`\.;````]
+ \lab(4900,-3250)[Dtrianglepair]
+ \hSquares(0,-4500)[\ru`\ru`\ru`\ru`\ru`\ru;``````]
+ \lab(600,-4750)[hSquares]
+ \pullback(2700,-4500)[\.`\.`\.`\.;```][\.;``]
+ \lab(3000,-4750)[pullback]
+ \iiixii(4000,-4500){15}<400>[\.`\.`\.`\.`\.`\.;``````]
+ \lab(4800,-4750)[iiixii]
+ \cube(0,-7000)[\.`\.`\.`\.;```](500,-6500)[\.`\.`\.`\.;```][```]
+ \lab(700,-7250)[cube]
+ \iiixiii(2500,-7000)[\.`\.`\.`\.`\.`\.`\.`\.`\.;```````````]
+ \lab(3000,-7250)[iiixiii]
+ \vSquares(4500,-7000)[\ru`\ru`\ru`\ru`\ru`\ru;``````]
+ \lab(4800,-7250)[vSquares]
+ \efig$$
+
+ \clearpage
+\section{Command summary}
+
+\def\v#1.{{\texttt{#1}}}
+ Below is a summary of the syntax of the supplied shapes. In this
+summary, optional parameters are enclosed in braces (\verb/{}/) because
+the more usual brackets are too much used. In only two cases below are
+braces to be used and they will be made clear. In all cases it is the
+set of parameters that is optional; you must accept the default for all,
+or set them all. But the different sets of parameters are independent.
+Note that continuation lines are marked with a \verb.%. sign. If you
+break one of these macros be sure to end the line with \verb.%., unless
+you are inside the \verb/[...]/, where everything is done in math mode
+and space characters are ignored.
+\begin{trivlist}
+ \item[\v(x,y).:] The coordinates of the lower left corner of the
+smallest rectangle that encloses the figure, whether or not that corner
+is actually in the shape.
+
+\item[\v p.:]
+One of the letters \v a., \v b., \v l.,
+\v m., or \v x. and describe the placement of an arrow label as above,
+below, right, left,in the middle of an arrow, or no label, resp.
+
+\item[\v a.:] The shape of the arrow.
+
+\item[\v <dx,dy>.:] The horizontal and vertical extent of the diagram.
+In a couple cases only one is specified.
+
+\item[\v O.:] An object or node.
+
+\item[\v L.:] An arrow label.
+
+\item[\v N.:] A number in the range 0..15. If it has more than one
+digit, must be placed inbraces.
+
+\item[\v M.:] A number in the range 0.."7777. Also in braces.
+
+\end{trivlist}
+
+
+\begin{verbatim}
+\to{/a/}{^A}{|A}{_A}
+\xar{^A}{|A}{_A}(xar = mon, epi, toleft, monleft, epileft)
+\square{(x,y)}{|pppp|}{/a`a`a`a/}{<dx,dy>}[O`O`O`O;L`L`L`L]
+\Ltriangle{(x,y)}{|ppp|}{/a`a`a/}{<dx,dy>}[O`O`O;L`L`L]
+\Vtriangle{(x,y)}{|ppp|}{/a`a`a/}{<dx,dy>}[O`O`O;L`L`L]
+\Ctriangle{(x,y)}{|ppp|}{/a`a`a/}{<dx,dy>}[O`O`O;L`L`L]
+\Dtriangle{(x,y)}{|ppp|}{/a`a`a/}{<dx,dy>}[O`O`O;L`L`L]
+\Square{(x,y)}{|pppp|}{/a`a`a`a/}{<dy>}[O`O`O`O;L`L`L`L]
+\ptriangle{(x,y)}{|ppp|}{/a`a`a/}{<dx,dy>}[O`O`O;L`L`L]
+\qtriangle{(x,y)}{|ppp|}{/a`a`a/}{<dx,dy>}[O`O`O;L`L`L]
+\dtriangle{(x,y)}{|ppp|}{/a`a`a/}{<dx,dy>}[O`O`O;L`L`L]
+\btriangle{(x,y)}{|ppp|}{/a`a`a/}{<dx,dy>}[O`O`O;L`L`L]
+\Ltrianglepair{(x,y)}{|ppppp|}{/a`a`a`a`a/}{<dx,dy>}%
+ [O`O`O`O;L`L`L`L`L]
+\Vtrianglepair{(x,y)}{|ppppp|}{/a`a`a`a`a/}{<dx,dy>}%
+ [O`O`O`O;L`L`L`L`L]
+\Ctrianglepair{(x,y)}{|ppppp|}{/a`a`a`a`a/}{<dx,dy>}%
+ [O`O`O`O;L`L`L`L`L]
+\Dtrianglepair{(x,y)}{|ppppp|}{/a`a`a`a`a/}{<dx,dy>}%
+ [O`O`O`O;L`L`L`L`L]
+\hSquares{(x,y)}{|ppppppp|}{/a`a`a`a`a`a`a/}{<dx,dy>}%
+ [O`O`O`O`O`O;L`L`L`L`L`L`L]
+\pullback{(x,y)}{|pppp|}{/a`a`a`a/}{<dx,dy>}[O`O`O`O;L`L`L`L]
+ {|ppp|}{/a`a`a/}{<#7,#8>}[O;L`L`L]
+\iiixii{(x,y)}{|ppppppp|}{/a`a`a`a`a`a`a/}{<dx,dy>}%
+ {N{<dx,dy>}}[O`O`O`O`O`O;L`L`L`L`L`L`L]
+\cube{(x,y)}{|pppp|}{/a`a`a`a/}{<dx,dy>}[O`O`O`O;L`L`L`L]%
+ {(x,y)}{|pppp|}{/a`a`a`a/}{<dx,dy>}[O`O`O`O;L`L`L`L]%
+ {|pppp|}{/a`a`a`a/}[L`L`L`L]
+\iiixiii{(x,y)}{|pppppppppppp|}{/a`a`a`a`a`a`a`a`a`a`a`a/}%
+ {<dx,dy>}{M{<dx>}}%
+ [O`O`O`O`O`O`O`O`O;L`L`L`L`L`L`L`L`L`L`L`L`L`L`L]
+\vSquares{(x,y)}{|ppppppp|}{/a`a`a`a`a`a`a/}{<dx,dy>}%
+ [O`O`O`O`O`O;L`L`L`L`L`L`L]
+\end{verbatim}
+
+
+\edef\backslash{\ensuremath{\backslash}}
+\catcode`\<=\active
+\catcode`\>=\active
+\catcode`\^=\active
+\catcode`\_=\active
+\def<{\mathhexbox13C}
+\def>{\mathhexbox13E}
+\def^{\mathhexbox362}
+\def_{\vrule width 10pt height .4pt depth 0pt}
+\addcontentsline{toc}{section}{Index}
+\newpage
+\input diaxydoc.ind
+
+
+\end{document}
+
+Color example:
+ $$\xy *[blue]{A} \ar@[red]@{->}^[green]{f}(20,0) *[magenta]{B}\endxy$$
+
+
+
+If the shape parameter begins with an \index{@}\verb.@., it is
+interpreted differently. In that case, it has the form
+\index{@{shape}@}\verb.@{shape}@. modifier, where the modifier is as
+described in the \xypic\ reference guide. I just mention a couple of
+them. The parameter \index{@{->}@<3pt>}\verb.@{->}@<3pt>., for example,
+would give an ordinary arrow moved three points in the direction
+perpendicular to that of the arrow. If you give
+\index{{@{->>}@/^5pt/}}\verb.{@{->>}@/^5pt/}., you will get an epic
+arrow that is curved in the direction perpendicular to the direction of
+the arrow by five points. It is imperative that a specification such as
+\index{@{>}@/5pt/}\verb.@{>}@/5pt/. be enclosed in braces because of the
+\index{/}\verb./.s.
diff --git a/macros/generic/diagrams/kuvio/COPYRIGHT b/macros/generic/diagrams/kuvio/COPYRIGHT
new file mode 100644
index 0000000000..3abd642ae0
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/COPYRIGHT
@@ -0,0 +1,17 @@
+Copyright (C) 1994-1996 Anders G S Svensson <svensson@math.ubc.ca>
+
+The file kuvio.tex may be freely distributed and used, with the
+following restrictions.
+
+1. Substantial use of kuvio.tex in any published work should be suitably
+ acknowledged.
+
+2. No changes or modifications are to be made to kuvio.tex.
+
+3. The documentation, "Typesetting diagrams with kuvio.tex", must
+ be distributed with kuvio.tex.
+
+I would enjoy receiving a copy of any book, journal article or thesis
+prepared using kuvio.tex.
+
+Thank you.
diff --git a/macros/generic/diagrams/kuvio/README b/macros/generic/diagrams/kuvio/README
new file mode 100644
index 0000000000..73cecbc8ea
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/README
@@ -0,0 +1,45 @@
+26 Jun 1995
+
+Welcome to my contribution to the exciting world of diagram macros. :^)
+
+The macros in kuvio.tex use PostScript code embedded in \special control
+sequences to rotate arrows from the horizontal. This means we depend on a dvi
+to ps translator to correctly interpret the PostScript. The translator I've
+used while writing this is Tomas Rokicki's excellent dvips. There is a control
+sequence \kuviospecial for changing the \special syntax so it may be possible
+to use kuvio.tex with other translators.
+
+A few features of kuvio.tex.
+
+ 1. Input uses an alignment syntax not unlike other packages.
+
+ 2. Rigid and flexible grids.
+
+ 3. Diagram compilation for improved performance.
+
+ 4. Almost every choice made by the macros in kuvio.tex is adjustable by
+ the user.
+
+ 5. A labelling scheme for typesetting material on top of diagrams or
+ included PostScript figures.
+
+ 6. Arrows can be attached to points on other arrows.
+
+ 7. Since arrows are rotated from the horizontal, anything which can
+ be typeset horizontally can be used as an arrow in a diagram. New arrow
+ types are easily defined.
+
+ 8. General purpose macros for rotation, reflection and framing.
+
+The documentation, "Typesetting diagrams with kuvio.tex", has more details.
+
+Be forewarned that dvi file previewers differ in how they handle the
+\special's used in kuvio.tex. On the NeXT, Rokicki's TeXview understands
+them just fine. (Note however that versions prior to that of February 1994
+sometimes chose the wrong font in certain situations. The latest should be
+available by ftp from labrea.stanford.edu as /pub/texview.tar.Z.)
+Xdvi gets thoroughly confused. Other previewers may die agonizing deaths.
+Of course, one can always preview a .ps file. Ghostview does an excellent job
+of this under X.
+
+Anders Svensson <svensson@math.ubc.ca>
diff --git a/macros/generic/diagrams/kuvio/README2 b/macros/generic/diagrams/kuvio/README2
new file mode 100644
index 0000000000..8831e3e03d
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/README2
@@ -0,0 +1,57 @@
+31 Oct 1995
+
+There is a survey of several diagram packages in the latest issue of TUGboat.
+
+ Gabriel Valiente Feruglio
+ Typesetting Commutative Diagrams
+ TUGboat, volume 15 (1994), no. 4, 466-484
+
+However, kuvio.tex and it's documentation has evolved quite substantially
+since this article appears to have been written; although not since vol. 15,
+no.4 arrived in my mailbox last week. :^.
+
+I have a few comments regarding this article.
+
+In the description of kuvio.tex on page 471, there is the following statement.
+
+ "It supports diagonal arrows of different shapes and in many different,
+ although not arbitrary, slopes ..."
+
+This is false, though the fault probably lies with the state of the
+documentation at the time - January 1995 according to the citation on page
+473. That is, the slope of arrows is, in fact, arbitrary.
+
+Numerous features have been added to kuvio.tex since January 1995. Among these
+are *diagram types* (\newDiagram, \newFigure and \newGraph) and the *flexible
+grid* (\flexible), both of which I would use when typesetting a diagram like
+the one on page 475. Another big one is *diagram compilation*.
+
+The use of the *rigid grid* inherent in the \Diagram \endDiagram pair
+certainly affects the appearence of the square typeset on page 482. To see
+this, try typesetting the following two "squares".
+
+ \def\A{A\times A\times A\times A}
+
+ \Diagram
+ \A & \rTo ^f & B \\
+ \dTo <g & & \dTo >{g'} \\
+ C & \rTo _{f'} & D \\
+ \endDiagram
+
+ \Dg
+ \A & \rTo ^f & B \\
+ \dTo <g & & \dTo >{g'} \\
+ C & \rTo _{f'} & D \\
+ \endDg
+
+It's still true that arrows don't stretch to match wide labels but I consider
+this a feature. :^)
+
+Anders
+
+******************************************************************************
+26 Jan 1996
+
+As of patchlevel 214, horizontal arrows are stretched to accomodate
+wide centered labels. (That is, the last sentence above no longer
+holds.)
diff --git a/macros/generic/diagrams/kuvio/arrsy/Makefile-dist b/macros/generic/diagrams/kuvio/arrsy/Makefile-dist
new file mode 100644
index 0000000000..2c72b4f8fe
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/arrsy/Makefile-dist
@@ -0,0 +1,50 @@
+# Anders G S Svensson
+# $Date: 1994/11/24 01:39:37 $
+# $Revision: 1.5 $
+
+# Installation directories.
+
+DESTDIR = /usr/local/lib
+
+# pk files go here.
+#
+PKDEST = $(DESTDIR)/tex/fonts/pk
+
+# tfm files go here.
+#
+TFMDEST = $(DESTDIR)/tex/fonts/tfm
+
+# mf files go here.
+#
+MFDEST = $(DESTDIR)/mf/inputs
+
+# tex files go here.
+#
+TEXDEST = $(DESTDIR)/tex/inputs
+
+##################################################
+
+INSTALL = install -c -m 644
+
+MFSOURCES = arrsy.mf arrsy10.mf arrsym.mf
+TEXSOURCES = arrsy.tex
+
+all:
+ make MFINPUTS=.:$(MFINPUTS) GFFONTS=. pk
+
+pk:
+ mf "\mode=localfont; input arrsy10"
+ @for file in *gf; do gftopk ./$$file; done
+
+install: install-src install-fonts
+
+install-src:
+ $(INSTALL) $(MFSOURCES) $(MFDEST)
+ $(INSTALL) $(TEXSOURCES) $(TEXDEST)
+
+install-fonts:
+ $(INSTALL) arrsy10.tfm $(TFMDEST)
+ $(INSTALL) arrsy10.*pk $(PKDEST)
+
+clean:
+ rm -f arrsy10.tfm arrsy10.*pk arrsy10.*gf *.log
diff --git a/macros/generic/diagrams/kuvio/arrsy/README b/macros/generic/diagrams/kuvio/arrsy/README
new file mode 100644
index 0000000000..ecb59c42a2
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/arrsy/README
@@ -0,0 +1,40 @@
+02 Dec 1995
+
+Added the files arrsy.sty and Uarrsy.fd for LaTeX. The fonts themselves are
+unchanged.
+
+%-----------------------------------------------------------------------------
+31 Mar 1995
+
+Added \cupp and \capp for cup and cap products (smaller than the smile and
+frown found in the msam font).
+
+------------------------------------------------------------------------------
+22 Nov 1994
+
+Here's a small font I put together, mainly for a few characters I wanted to
+use with my diagram macros, kuvio.tex. The font also contains reproductions
+of a few arrows from the pre-1992 versions of cmsy10 and cmmi10. (The
+arrowheads were made wider in '92, a change for the worse in my opinion.)
+There are probably only three characters in arrsy10 which people not
+using kuvio.tex may find useful: \of for function composition (smaller that
+the massive \circ), \vect for vectors (\vec doesn't do it for me) and
+\dotp for dot products (heavier than \cdot, lighter than \bullet). Who knows,
+versions of these may already exist somewhere else but here are mine.
+
+On a Unix box, you can install the font as follows.
+
+ 1. Copy Makefile-dist to Makefile and then edit this file, setting the
+ variables DESTDIR, PKDEST, TFMDEST, MFDEST and TEXDDEST appropriately.
+
+ 2. Do "make". If you don't have MFINPUTS set you should do
+ "make MFINPUTS=<path>" instead, where <path> is a path in which the file
+ cmbase.mf can be found (usually something like /usr/local/lib/mf/inputs).
+ If all goes well you should get one tfm file and one pk file and you can
+ then do "make install".
+
+ 3. Do "make clean" to clean up.
+
+If none of this works for you, mail me.
+
+Anders Svensson <svensson@math.ubc.ca>
diff --git a/macros/generic/diagrams/kuvio/arrsy/Uarrsy.fd b/macros/generic/diagrams/kuvio/arrsy/Uarrsy.fd
new file mode 100644
index 0000000000..57a40fafb8
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/arrsy/Uarrsy.fd
@@ -0,0 +1,8 @@
+% Uarrsy.fd
+% Anders G S Svensson
+
+\ProvidesFile{Uarrsy.fd}[1995/12/02]
+
+\DeclareFontFamily{U}{arrsy}{}
+\DeclareFontShape{U}{arrsy}{m}{n}{ <5> <6> <7> <8> <9> <10>
+ <10.95> <12> <14.4> <17.28> <20.74> <24.88> arrsy10 }{}
diff --git a/macros/generic/diagrams/kuvio/arrsy/arrsy.mf b/macros/generic/diagrams/kuvio/arrsy/arrsy.mf
new file mode 100644
index 0000000000..d48792b9f8
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/arrsy/arrsy.mf
@@ -0,0 +1,116 @@
+% arrsy.mf
+% Anders G S Svensson
+% $Date: 1993/08/29 06:19:19 $
+% $Revision: 1.1 $
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Computer Modern parameters from cmsy10.mf
+%%
+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#:=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#:=24/36pt#; % lowercase stem breadth
+curve#:=29/36pt#; % lowercase curve breadth
+ess#:=27/36pt#; % breadth in middle of lowercase s
+flare#:=32/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=38/36pt#; % diameter of dots
+cap_hair#:=11/36pt#; % uppercase hairline breadth
+cap_stem#:=30/36pt#; % uppercase stem breadth
+cap_curve#:=35/36pt#; % uppercase curve breadth
+cap_ess#:=33/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#:=30/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:=.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:=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?
+
+% Font parameters are explained in {\sl The \TeX book}, Appendix G
+%
+subs:=7/10; % subscripts to 10pt will normally be in 7pt type
+rth#:=.4pt#; % assume that rules will come from cmex10
+fontdimen 8: % parameters $\sigma_8$ through $\sigma_{22}$ will
+ % now be listed
+ math_axis#+3.51rth#+54/36pt#+subs*desc_depth#, % num1
+ math_axis#+1.51rth#+30/36pt#, % num2
+ math_axis#+1.51rth#+48/36pt#, % num3
+ -(math_axis#-3.51rth#-subs*fig_height#-124/36pt#), % denom1
+ -(math_axis#-1.51rth#-subs*fig_height#-30/36pt#), % denom2
+ 8.99pt#-subs*asc_height#, % sup1
+ 8.49pt#-subs*asc_height#, % sup2
+ 104/36pt#, % sup3
+ 54/36pt#, % sub1
+ -(8.49pt#-2subs*asc_height#-3.1rth#), % sub2
+ subs*asc_height#-36/36pt#, % sup\_drop
+ 18/36pt#, % sub\_drop
+ 23.9pt#, % delim1
+ 10.1pt#, % delim2
+ math_axis#; % axis\_height
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Modified from mathsy.mf
+%%
+font_coding_scheme:="TeX math symbols";
+mode_setup; font_setup;
+
+slant:=mono_charic#:=0; % Symbols shouldn't be slanted.
+
+font_slant slant;
+font_x_height x_height#;
+font_quad 18u#;
+
+currenttransform:=identity yscaled aspect_ratio scaled granularity;
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/generic/diagrams/kuvio/arrsy/arrsy.sty b/macros/generic/diagrams/kuvio/arrsy/arrsy.sty
new file mode 100644
index 0000000000..1a9df06107
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/arrsy/arrsy.sty
@@ -0,0 +1,137 @@
+% arrsy.sty
+% Anders G S Svensson
+% $Date: 1995/12/27 12:25:18 $
+% $Revision: 1.1 $
+
+\def\Revision@$#1 #2 ${v#2}
+\def\Date@$#1 #2 #3 ${#2}
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{arrsy}%
+ [\Date@$Date: 1995/12/27 12:25:18 $ \Revision@$Revision: 1.1 $]
+
+\DeclareOption{cmarrows}{\AtEndOfPackage{\cmarrows}}
+\ProcessOptions\relax
+
+\DeclareSymbolFont{Arrsy}{U}{arrsy}{m}{n}
+
+\let\cmrightarrow\rightarrow
+\let\cmleftarrow\leftarrow
+\let\cmleftrightarrow\leftrightarrow
+\let\cmleftharpoonup\leftharpoonup
+\let\cmleftharpoondown\leftharpoondown
+\let\cmrightharpoonup\rightharpoonup
+\let\cmrightharpoondown\rightharpoondown
+
+\DeclareMathSymbol{\A@Rightharpoonup}{\mathrel}{Arrsy}{"00}
+\DeclareMathSymbol{\A@Leftharpoondown}{\mathrel}{Arrsy}{"01}
+\DeclareMathSymbol{\A@Upharpoonleft}{\mathrel}{Arrsy}{"02}
+\DeclareMathSymbol{\A@Downharpoonright}{\mathrel}{Arrsy}{"03}
+\DeclareMathSymbol{\A@Rightharpoondown}{\mathrel}{Arrsy}{"04}
+\DeclareMathSymbol{\A@Leftharpoonup}{\mathrel}{Arrsy}{"05}
+\DeclareMathSymbol{\A@Upharpoonright}{\mathrel}{Arrsy}{"06}
+\DeclareMathSymbol{\A@Downharpoonleft}{\mathrel}{Arrsy}{"07}
+\DeclareMathSymbol{\A@Rrightarrow}{\mathrel}{Arrsy}{"08}
+\DeclareMathSymbol{\A@Lleftarrow}{\mathrel}{Arrsy}{"09}
+\DeclareMathSymbol{\A@Rrelbar}{\mathrel}{Arrsy}{"0A}
+\DeclareMathSymbol{\A@dashbar}{\mathrel}{Arrsy}{"0B}
+\DeclareMathSymbol{\A@shortrightarrow}{\mathrel}{Arrsy}{"0C}
+\DeclareMathSymbol{\A@shortleftarrow}{\mathrel}{Arrsy}{"0D}
+\DeclareMathSymbol{\A@rightmonotail}{\mathrel}{Arrsy}{"0E}
+\DeclareMathSymbol{\A@leftmonotail}{\mathrel}{Arrsy}{"0F}
+\DeclareMathSymbol{\A@squiggle}{\mathrel}{Arrsy}{"10}
+\DeclareMathSymbol{\A@rightarrow}{\mathrel}{Arrsy}{"11}
+\DeclareMathSymbol{\A@leftarrow}{\mathrel}{Arrsy}{"12}
+\DeclareMathSymbol{\A@leftrightarrow}{\mathrel}{Arrsy}{"13}
+\DeclareMathSymbol{\A@leftharpoonup}{\mathrel}{Arrsy}{"14}
+\DeclareMathSymbol{\A@leftharpoondown}{\mathrel}{Arrsy}{"15}
+\DeclareMathSymbol{\A@rightharpoonup}{\mathrel}{Arrsy}{"16}
+\DeclareMathSymbol{\A@rightharpoondown}{\mathrel}{Arrsy}{"17}
+
+\let\Rightharpoonup\A@Rightharpoonup
+\let\Leftharpoondown\A@Leftharpoondown
+\let\Upharpoonleft\A@Upharpoonleft
+\let\Downharpoonright\A@Downharpoonright
+\let\Rightharpoondown\A@Rightharpoondown
+\let\Leftharpoonup\A@Leftharpoonup
+\let\Upharpoonright\A@Upharpoonright
+\let\Downharpoonleft\A@Downharpoonleft
+\let\Rrightarrow\A@Rrightarrow
+\let\Lleftarrow\A@Lleftarrow
+\let\Rrelbar\A@Rrelbar
+\let\dashbar\A@dashbar
+\let\shortrightarrow\A@shortrightarrow
+\let\shortleftarrow\A@shortleftarrow
+\let\rightmonotail\A@rightmonotail
+\let\leftmonotail\A@leftmonotail
+\let\squiggle\A@squiggle
+\let\rightarrow\A@rightarrow
+\let\leftarrow\A@leftarrow
+\let\leftrightarrow\A@leftrightarrow
+\let\leftharpoonup\A@leftharpoonup
+\let\leftharpoondown\A@leftharpoondown
+\let\rightharpoonup\A@rightharpoonup
+\let\rightharpoondown\A@rightharpoondown
+
+\DeclareMathAccent{\vect}{\mathord}{Arrsy}{"18}
+\DeclareMathSymbol{\comp}{\mathrel}{Arrsy}{"19}
+\DeclareMathSymbol{\dotp}{\mathrel}{Arrsy}{"1A}
+\DeclareMathSymbol{\cupp}{\mathrel}{Arrsy}{"1B}
+\DeclareMathSymbol{\capp}{\mathrel}{Arrsy}{"1C}
+
+\let\of\comp
+
+\let\gets\leftarrow
+\let\to\rightarrow
+
+\def\cmarrows{\let\leftrightarrow\cmleftrightarrow
+ \let\rightarrow\cmrightarrow\let\leftarrow\cmleftarrow
+ \let\gets\leftarrow\let\to\rightarrow
+ \let\leftharpoonup\cmleftharpoonup
+ \let\leftharpoondown\cmleftharpoondown
+ \let\rightharpoonup\cmrightharpoonup
+ \let\rightharpoondown\cmrightharpoondown}
+
+\def\rightepi{\A@rightarrow\mkern-13mu\A@shortrightarrow\mkern3mu}
+\let\epito\rightepi
+\def\leftepi{\A@leftarrow\mkern-15mu\A@shortleftarrow\mkern5mu}
+\let\A@rightepi\rightepi \let\A@leftepi\leftepi
+
+\def\rightmono{\A@rightmonotail\mkern-8mu\relbar\mkern-8mu\A@shortrightarrow}
+\let\monoto\rightmono
+\def\leftmono{\A@shortleftarrow\mkern-8mu\relbar\mkern-8mu\A@leftmonotail}
+
+\def\rightiso{\A@rightmonotail\mkern-5mu\A@shortrightarrow
+ \mkern-7mu\A@shortrightarrow}
+\let\isoto\rightiso
+\def\leftiso{\A@shortleftarrow\mkern-7mu\A@shortleftarrow
+ \mkern-5mu\A@leftmonotail}
+
+\def\longrightepi{\relbar\joinrel\A@rightepi}
+\def\longleftepi{\A@leftepi\joinrel\relbar}
+
+\def\longrightmono{\A@rightmonotail\mkern-7mu\relbar\mkern-6mu\A@rightarrow}
+\def\longleftmono{\A@leftarrow\mkern-6mu\relbar\mkern-7mu\A@leftmonotail}
+
+\def\longrightiso{\A@rightmonotail\mkern-7mu\relbar\mkern-6mu\A@rightepi}
+\def\longleftiso{\A@leftepi\mkern-6mu\relbar\mkern-7mu\A@leftmonotail}
+
+\def\Longrightharpoonup{\Relbar\joinrel\A@Rightharpoonup}
+\def\Longrightharpoondown{\Relbar\joinrel\A@Rightharpoondown}
+\def\Longleftharpoonup{\A@Leftharpoonup\joinrel\Relbar}
+\def\Longleftharpoondown{\A@Leftharpoondown\joinrel\Relbar}
+\def\Llongrightarrow{\A@Rrelbar\joinrel\A@Rrightarrow}
+\def\Llongleftarrow{\A@Lleftarrow\joinrel\A@Rrelbar}
+\def\Llongrelbar{\A@Rrelbar\joinrel\A@Rrelbar}
+
+\let\Leftallo\Leftharpoondown
+\let\Leftpara\Leftharpoonup
+\let\Rightallo\Rightharpoonup
+\let\Rightpara\Rightharpoondown
+
+\let\Longleftallo\Longleftharpoondown
+\let\Longleftpara\Longleftharpoonup
+\let\Longrightallo\Longrightharpoonup
+\let\Longrightpara\Longrightharpoondown
+
+\let\inputarrsy\relax
diff --git a/macros/generic/diagrams/kuvio/arrsy/arrsy.tex b/macros/generic/diagrams/kuvio/arrsy/arrsy.tex
new file mode 100644
index 0000000000..842d082048
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/arrsy/arrsy.tex
@@ -0,0 +1,133 @@
+% arrsy.tex
+% Anders G S Svensson
+% $Date: 1995/03/31 21:55:00 $
+% $Revision: 1.13 $
+
+\chardef\ArrsycodE=\catcode`\@
+\catcode`\@=11
+
+\def\@@bailout@@{\message{again}\catcode`\@=\ArrsycodE\endinput}
+
+\ifx\@@agss@arrsy@@\relax
+\else
+ \let\@@agss@arrsy@@\relax
+ \let\@@bailout@@\relax
+\fi
+
+\@@bailout@@
+
+
+\font\A@tenarr=arrsy10
+\font\A@sevenarr=arrsy10 at 7pt
+\font\A@fivearr=arrsy10 at 5pt
+
+\newfam\arrfam
+
+\textfont\arrfam=\A@tenarr
+\scriptfont\arrfam=\A@sevenarr
+\scriptscriptfont\arrfam=\A@fivearr
+
+\let\cmrightarrow\rightarrow
+\let\cmleftarrow\leftarrow
+\let\cmleftrightarrow\leftrightarrow
+\let\cmleftharpoonup\leftharpoonup
+\let\cmleftharpoondown\leftharpoondown
+\let\cmrightharpoonup\rightharpoonup
+\let\cmrightharpoondown\rightharpoondown
+
+\def\hex#1{\ifcase#1 0\or 1\or 2\or 3\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}
+
+\edef\A@arrsy{\hex\arrfam}
+
+\def\A@newarrow#1#2#3#4{%
+ \expandafter\mathchardef\csname A@#1\endcsname="#2\A@arrsy#3#4
+ \expandafter\expandafter\expandafter\let\expandafter\expandafter
+ \csname #1\endcsname\csname A@#1\endcsname}
+
+\A@newarrow{Rightharpoonup}300
+\A@newarrow{Leftharpoondown}301
+\A@newarrow{Upharpoonleft}302
+\A@newarrow{Downharpoonright}303
+\A@newarrow{Rightharpoondown}304
+\A@newarrow{Leftharpoonup}305
+\A@newarrow{Upharpoonright}306
+\A@newarrow{Downharpoonleft}307
+\A@newarrow{Rrightarrow}308
+\A@newarrow{Lleftarrow}309
+\A@newarrow{Rrelbar}30A
+\A@newarrow{dashbar}30B
+\A@newarrow{shortrightarrow}30C
+\A@newarrow{shortleftarrow}30D
+\A@newarrow{rightmonotail}30E
+\A@newarrow{leftmonotail}30F
+\A@newarrow{squiggle}310
+\A@newarrow{rightarrow}311
+\A@newarrow{leftarrow}312
+\A@newarrow{leftrightarrow}313
+\A@newarrow{leftharpoonup}314
+\A@newarrow{leftharpoondown}315
+\A@newarrow{rightharpoonup}316
+\A@newarrow{rightharpoondown}317
+\edef\vect{\mathaccent"0\A@arrsy 18 }
+\mathchardef\comp="3\A@arrsy 19
+\mathchardef\dotp="3\A@arrsy 1A
+\mathchardef\cupp="3\A@arrsy 1B
+\mathchardef\capp="3\A@arrsy 1C
+
+\let\of\comp
+
+\let\gets\leftarrow
+\let\to\rightarrow
+
+\def\cmarrows{\let\leftrightarrow\cmleftrightarrow
+ \let\rightarrow\cmrightarrow\let\leftarrow\cmleftarrow
+ \let\gets\leftarrow\let\to\rightarrow
+ \let\leftharpoonup\cmleftharpoonup
+ \let\leftharpoondown\cmleftharpoondown
+ \let\rightharpoonup\cmrightharpoonup
+ \let\rightharpoondown\cmrightharpoondown}
+
+\def\rightepi{\A@rightarrow\mkern-13mu\A@shortrightarrow\mkern3mu}
+\let\epito\rightepi
+\def\leftepi{\A@leftarrow\mkern-15mu\A@shortleftarrow\mkern5mu}
+\let\A@rightepi\rightepi \let\A@leftepi\leftepi
+
+\def\rightmono{\A@rightmonotail\mkern-8mu\relbar\mkern-8mu\A@shortrightarrow}
+\let\monoto\rightmono
+\def\leftmono{\A@shortleftarrow\mkern-8mu\relbar\mkern-8mu\A@leftmonotail}
+
+\def\rightiso{\A@rightmonotail\mkern-5mu\A@shortrightarrow
+ \mkern-7mu\A@shortrightarrow}
+\let\isoto\rightiso
+\def\leftiso{\A@shortleftarrow\mkern-7mu\A@shortleftarrow
+ \mkern-5mu\A@leftmonotail}
+
+\def\longrightepi{\relbar\joinrel\A@rightepi}
+\def\longleftepi{\A@leftepi\joinrel\relbar}
+
+\def\longrightmono{\A@rightmonotail\mkern-7mu\relbar\mkern-6mu\A@rightarrow}
+\def\longleftmono{\A@leftarrow\mkern-6mu\relbar\mkern-7mu\A@leftmonotail}
+
+\def\longrightiso{\A@rightmonotail\mkern-7mu\relbar\mkern-6mu\A@rightepi}
+\def\longleftiso{\A@leftepi\mkern-6mu\relbar\mkern-7mu\A@leftmonotail}
+
+\def\Longrightharpoonup{\Relbar\joinrel\A@Rightharpoonup}
+\def\Longrightharpoondown{\Relbar\joinrel\A@Rightharpoondown}
+\def\Longleftharpoonup{\A@Leftharpoonup\joinrel\Relbar}
+\def\Longleftharpoondown{\A@Leftharpoondown\joinrel\Relbar}
+\def\Llongrightarrow{\A@Rrelbar\joinrel\A@Rrightarrow}
+\def\Llongleftarrow{\A@Lleftarrow\joinrel\A@Rrelbar}
+\def\Llongrelbar{\A@Rrelbar\joinrel\A@Rrelbar}
+
+\let\Leftallo\Leftharpoondown
+\let\Leftpara\Leftharpoonup
+\let\Rightallo\Rightharpoonup
+\let\Rightpara\Rightharpoondown
+
+\let\Longleftallo\Longleftharpoondown
+\let\Longleftpara\Longleftharpoonup
+\let\Longrightallo\Longrightharpoonup
+\let\Longrightpara\Longrightharpoondown
+
+\catcode`\@=\ArrsycodE
diff --git a/macros/generic/diagrams/kuvio/arrsy/arrsy10.mf b/macros/generic/diagrams/kuvio/arrsy/arrsy10.mf
new file mode 100644
index 0000000000..a73fa349a1
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/arrsy/arrsy10.mf
@@ -0,0 +1,45 @@
+% arrsy10.mf
+% Anders G S Svensson
+% $Date: 1995/03/31 21:55:19 $
+% $Revision: 1.10 $
+
+if unknown cmbase: input cmbase fi
+font_identifier:="ARRSY"; font_size 10pt#;
+
+input arrsy; % Computer modern parameters.
+input arrsym; % Macros for the symbols.
+
+% Encoding
+%
+rightallo(hex "00");
+leftallo(hex "01");
+upallo(hex "02");
+downallo(hex "03");
+rightpara(hex "04");
+leftpara(hex "05");
+uppara(hex "06");
+downpara(hex "07");
+righttriple(hex "08");
+lefttriple(hex "09");
+equiv(hex "0A");
+dashbar(hex "0B");
+rightarrow(hex "0C", 10);
+leftarrow(hex "0D", 10);
+rightmonotail(hex "0E");
+leftmonotail(hex "0F");
+squiggle(hex "10");
+rightarrow(hex "11", 18);
+leftarrow(hex "12", 18);
+leftrightarrow(hex "13");
+leftharpoonup(hex "14");
+leftharpoondown(hex "15");
+rightharpoonup(hex "16");
+rightharpoondown(hex "17");
+vector(hex "18");
+ofcirc(hex "19");
+dotp(hex "1A");
+cupp(hex "1B");
+capp(hex "1C");
+
+bye
+
diff --git a/macros/generic/diagrams/kuvio/arrsy/arrsym.mf b/macros/generic/diagrams/kuvio/arrsy/arrsym.mf
new file mode 100644
index 0000000000..81b113bc79
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/arrsy/arrsym.mf
@@ -0,0 +1,477 @@
+% arrsym.mf
+% Anders G S Svensson
+
+% This file was tangled from arrsym.fw.
+% $Revision: 1.9 $
+% $Date: 1995/04/01 02:31:13 $
+
+compute_spread(.45x_height#,.55y_height#);
+numeric thin_spread#; thin_spread#:=4/5spread#;
+define_pixels(thin_spread);
+
+def rightallo(expr code) =
+ beginchar(code, 18u#, v_center(spread#+rule_thickness#));
+ pickup rule.nib;
+ lft x1=hround u - eps; x2=x1; x7=x8=w-x1;
+ y1=y7; y2=y8; y1-y2=spread; .5[y1,y2]=math_axis;
+ draw z1--z7; draw z2--z8;
+ pickup crisp.nib; rt x0=hround(w-u)+eps; y0=y2;
+ pos3(rule_thickness,0);
+ y3-y1=y2-y4=.24asc_height+eps; x3=x4=x0-6u-eps;
+ pos5(rule_thickness,angle(z4-z0)); z5l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ erase filldraw z0..{z3-z9}z3--(w,y3)--z0&cycle;
+ filldraw z5l..{z3-z9}z3r---{z9-z3}z3l..z5r--cycle;
+ endchar;
+enddef;
+
+def rightpara(expr code) =
+ beginchar(code, 18u#, v_center(spread#+rule_thickness#));
+ pickup rule.nib;
+ lft x1=hround u - eps; x2=x1; x7=x8=w-x1;
+ y1=y7; y2=y8; y1-y2=spread; .5[y1,y2]=math_axis;
+ draw z1--z7; draw z2--z8;
+ pickup crisp.nib; rt x0=hround(w-u)+eps; y0=y1;
+ pos4(rule_thickness,0);
+ y3-y1=y2-y4=.24asc_height+eps; x3=x4=x0-6u-eps;
+ pos5(rule_thickness,angle(z3-z0)); z5l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ erase filldraw z0..{z4-z9}z4--(w,y4)--z0&cycle;
+ filldraw z5r..{z4-z9}z4l---{z9-z4}z4r..z5l--cycle;
+ endchar;
+enddef;
+
+def leftpara(expr code) =
+ beginchar(code, 18u#, v_center(spread#+rule_thickness#));
+ pickup rule.nib;
+ lft x7=hround u - eps; x8=x7; x1=x2=w-x7;
+ y1=y7; y2=y8; y1-y2=spread; .5[y1,y2]=math_axis;
+ draw z1--z7; draw z2--z8;
+ pickup crisp.nib; lft x0=hround u - eps; y0=y2;
+ pos3(rule_thickness,0);
+ y3-y1=y2-y4=.24asc_height+eps; x3=x4=x0+6u+eps;
+ pos5(rule_thickness,angle(z4-z0)); z5l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ erase filldraw z0..{z3-z9}z3--(0,y3)--z0&cycle;
+ filldraw z5r..{z3-z9}z3r---{z9-z3}z3l..z5l--cycle;
+ endchar;
+enddef;
+
+def leftallo(expr code) =
+ beginchar(code, 18u#, v_center(spread#+rule_thickness#));
+ pickup rule.nib;
+ lft x7=hround u - eps; x8=x7; x1=x2=w-x7;
+ y1=y7; y2=y8; y1-y2=spread; .5[y1,y2]=math_axis;
+ draw z1--z7; draw z2--z8;
+ pickup crisp.nib; lft x0=hround u - eps; y0=y1;
+ pos4(rule_thickness,0);
+ y3-y1=y2-y4=.24asc_height+eps; x3=x4=x0+6u+eps;
+ pos5(rule_thickness,angle(z3-z0)); z5l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ erase filldraw z0..{z4-z9}z4--(0,y4)--z0&cycle;
+ filldraw z5l..{z4-z9}z4l---{z9-z4}z4r..z5r--cycle;
+ endchar;
+enddef;
+
+def downallo(expr code) =
+ beginchar(code, 11u#, asc_height#, asc_depth#);
+ pickup rule.nib;
+ top y1=top y2=h+eps; bot y7=-d; y8=y7;
+ x1=x7; x2=x8; x1-x2=spread; .5[x1,x2]=crisp.lft hround(crisp.rt .5w);
+ draw z1--z7; draw z2--z8;
+ pickup crisp.nib;
+ bot y0=-d-eps; x0=x2;
+ pos4(rule_thickness,90);
+ x2-x3=x4-x1=3u+eps; y3=y4=y0+.48asc_height-eps;
+ pos6(rule_thickness,angle(z3-z0)); z6l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ erase filldraw z0..{z4-z9}z4--(x4,-d-eps)--z0&cycle;
+ filldraw z6l..{z4-z9}z4l---{z9-z4}z4r..z6r--cycle;
+ endchar;
+enddef;
+
+def downpara(expr code) =
+ beginchar(code, 11u#, asc_height#, asc_depth#);
+ pickup rule.nib;
+ top y1=top y2=h+eps; bot y7=-d; y8=y7;
+ x1=x7; x2=x8; x1-x2=spread; .5[x1,x2]=crisp.lft hround(crisp.rt .5w);
+ draw z1--z7; draw z2--z8;
+ pickup crisp.nib;
+ bot y0=-d-eps; x0=x1;
+ pos3(rule_thickness,90);
+ x2-x3=x4-x1=3u+eps; y3=y4=y0+.48asc_height-eps;
+ pos5(rule_thickness,angle(z4-z0)); z5l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ erase filldraw z0..{z3-z9}z3--(x3,-d-eps)--z0&cycle;
+ filldraw z5r..{z3-z9}z3r---{z9-z3}z3l..z5l--cycle;
+ endchar;
+enddef;
+
+def uppara(expr code) =
+ beginchar(code, 11u#, asc_height#, asc_depth#);
+ pickup rule.nib;
+ bot y1=bot y2=-d-eps; top y7=h; y8=y7;
+ x1=x7; x2=x8; x1-x2=spread; .5[x1,x2]=crisp.lft hround(crisp.rt .5w);
+ draw z1--z7; draw z2--z8;
+ pickup crisp.nib;
+ top y0=h+eps; x0=x2;
+ pos4(rule_thickness,90);
+ x2-x3=x4-x1=3u+eps; y3=y4=y0-.48asc_height-eps;
+ pos6(rule_thickness,angle(z3-z0)); z6l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ erase filldraw z0..{z4-z9}z4--(x4,h+eps)--z0&cycle;
+ filldraw z6r..{z4-z9}z4l---{z9-z4}z4r..z6l--cycle;
+ endchar;
+enddef;
+
+def upallo(expr code) =
+ beginchar(code, 11u#, asc_height#, asc_depth#);
+ pickup rule.nib;
+ bot y1=bot y2=-d-eps; top y7=h; y8=y7;
+ x1=x7; x2=x8; x1-x2=spread; .5[x1,x2]=crisp.lft hround(crisp.rt .5w);
+ draw z1--z7; draw z2--z8;
+ pickup crisp.nib;
+ top y0=h+eps; x0=x1;
+ pos3(rule_thickness,90);
+ x2-x3=x4-x1=3u+eps; y3=y4=y0-.48asc_height-eps;
+ pos5(rule_thickness,angle(z4-z0)); z5l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ erase filldraw z0..{z3-z9}z3--(x3,h+eps)--z0&cycle;
+ filldraw z5l..{z3-z9}z3r---{z9-z3}z3l..z5r--cycle;
+ endchar;
+enddef;
+
+def righttriple(expr code) =
+ beginchar(code, 18u#, v_center(2spread#+rule_thickness#));
+ pickup rule.nib;
+ lft x1=hround u - eps; x3=x5=x1; x2=x4=x6=w-x1;
+ y1=y2; y3=y4=math_axis; y5=y6; y1-y3=y3-y5=thin_spread;
+ draw z1--z2; draw z3--z4; draw z5--z6;
+ pickup crisp.nib; rt x0=hround(w-u)+eps; y0=y4;
+ pos7(rule_thickness,0); pos8(rule_thickness,0);
+ y7-y2=y6-y8=.24asc_height+eps; x7=x8=x0-6u-eps;
+ pos9(rule_thickness,angle(z8-z0)); z9l=z0;
+ pos10(rule_thickness,angle(z7-z0)); z10l=z0;
+ z11=.381966[.5[z7,z8],z0];
+ erase filldraw z0..{z7-z11}z7--(w,y7)--(w,y8)--
+ z8{z11-z8}..z0&cycle;
+ filldraw z9l..{z7-z11}z7r---z7l{z11-z7}..z9r--cycle;
+ filldraw z10r..{z8-z11}z8l---z8r{z11-z8}..z10l--cycle;
+ endchar;
+enddef;
+
+def lefttriple(expr code) =
+ beginchar(code, 18u#, v_center(2spread#+rule_thickness#));
+ pickup rule.nib;
+ lft x1=hround u - eps; x3=x5=x1; x2=x4=x6=w-x1;
+ y1=y2; y3=y4=math_axis; y5=y6; y1-y3=y3-y5=thin_spread;
+ draw z1--z2; draw z3--z4; draw z5--z6;
+ pickup crisp.nib; lft x0=hround u-eps; y0=y4;
+ pos7(rule_thickness,0); pos8(rule_thickness,0);
+ y7-y2=y6-y8=.24asc_height+eps; x7=x8=x0+6u+eps;
+ pos9(rule_thickness,angle(z8-z0)); z9l=z0;
+ pos10(rule_thickness,angle(z7-z0)); z10l=z0;
+ z11=.381966[.5[z7,z8],z0];
+ erase filldraw z0..{z7-z11}z7--(0,y7)--(0,y8)--
+ z8{z11-z8}..z0&cycle;
+ filldraw z9r..{z7-z11}z7r---z7l{z11-z7}..z9l--cycle;
+ filldraw z10l..{z8-z11}z8l---z8r{z11-z8}..z10r--cycle;
+ endchar;
+enddef;
+
+def equiv(expr code) =
+ beginchar(code, 14u#, v_center(2spread#+rule_thickness#));
+ pickup rule.nib;
+ lft x1=hround u - eps; x3=x5=x1; x2=x4=x6=w-x1;
+ y1=y2; y3=y4=math_axis; y5=y6; y1-y3=y3-y5=thin_spread;
+ draw z1--z2;
+ draw z3--z4;
+ draw z5--z6;
+ endchar;
+enddef;
+
+def dashbar(expr code) =
+ beginarithchar(code);
+ pickup rule.nib;
+ lft x1=hround u-eps;
+ x2=.3w; x3=.7w;
+ x4=w-x1;
+ y1=y2=y3=y4=math_axis;
+ draw z1--z2;
+ draw z3--z4;
+ endchar;
+enddef;
+
+def rightarrow(expr code, width) =
+ beginchar(code, width*u#, v_center(spread#+rule_thickness#));
+ adjust_fit(0,0); pickup crisp.nib;
+ pos1(rule_thickness,90); pos2(rule_thickness,90);
+ pos3(bar,0); pos4(bar,0);
+ y0=y1=y2=math_axis; x1-.5rule_thickness=hround u; rt x0=hround(w-u);
+ y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0-3u-eps;
+ pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ numeric t; path p; p=z4l{z9-z4}..z6r;
+ t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;
+ filldraw z0..{z4-z9}z4r--subpath (0,t) of\\(z4l{z9-z4}..z6r)
+ --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3l{z9-z3}..z5r)
+ --z3r{z9-z3}..z0 & cycle; % arrowhead and stem
+ endchar;
+enddef;
+
+def leftarrow(expr code, width) =
+ beginchar(code, width*u#, v_center(spread#+rule_thickness#));
+ adjust_fit(0,0); pickup crisp.nib;
+ pos1(rule_thickness,90); pos2(rule_thickness,90);
+ pos3(bar,0); pos4(bar,0);
+ y0=y1=y2=math_axis; x1+.5rule_thickness=hround(w-u); lft x0=hround u;
+ y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0+3u+eps;
+ pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ numeric t; path p; p=z4r{z9-z4}..z6r;
+ t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;
+ filldraw z0..{z4-z9}z4l--subpath (0,t) of\\(z4r{z9-z4}..z6r)
+ --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3r{z9-z3}..z5r)
+ --z3l{z9-z3}..z0 & cycle; % arrowhead and stem
+ endchar;
+enddef;
+
+def leftrightarrow(expr code) =
+ beginchar(code, 18u#, v_center(spread#+rule_thickness#));
+ adjust_fit(0,0); pickup crisp.nib;
+ pos1(rule_thickness,90); pos2(rule_thickness,90);
+ pos3(bar,0); pos4(bar,0);
+ y0=y1=y2=math_axis; lft x0=hround u;
+ x1=.5w;
+ y3-y0=y0-y4=.24asc_height+eps;
+ x3=x4=x0+3u+eps;
+ pos5(bar,angle(z4-z0)); z5l=z0;
+ pos6(bar,angle(z3-z0)); z6l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ numeric t; path p; p=z4r{z9-z4}..z6r;
+ t=xpart(p intersectiontimes((0,y2l)--(w,y2l)));
+ x2=xpart point t of p;
+ filldraw z0..{z4-z9}z4l--subpath (0,t) of\\(z4r{z9-z4}..z6r)
+ --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3r{z9-z3}..z5r)
+ --z3l{z9-z3}..z0 & cycle; % left arrowhead and stem
+ pos11(rule_thickness,90); pos12(rule_thickness,90);
+ pos13(bar,0); pos14(bar,0);
+ y10=y11=y12=math_axis;
+ rt x10=hround(w-u);
+ x11=.5w;
+ y13-y10=y10-y14=.24asc_height+eps;
+ x13=x14=x10-3u-eps;
+ pos15(bar,angle(z14-z10)); z15l=z10;
+ pos16(bar,angle(z13-z10)); z16l=z10;
+ z19=.381966[.5[z13,z14],z10];
+ numeric t; path p; p=z14l{z19-z14}..z16r;
+ t=xpart(p intersectiontimes((0,y12l)--(w,y12l)));
+ x12=xpart point t of p;
+ filldraw z10..{z14-z19}z14r--subpath (0,t) of\\(z14l{z19-z14}..z16r)
+ --z12l---z11l..z11r---z12r--subpath (t,0) of\\(z13l{z19-z13}..z15r)
+ --z13r{z19-z13}..z10 & cycle; % right arrowhead and stem
+ endchar;
+enddef;
+
+def rightmonotail(expr code) =
+ beginchar(code,10u#,v_center(spread#+rule_thickness#));
+ adjust_fit(0,0); pickup crisp.nib;
+ pos1(rule_thickness,90); pos2(rule_thickness,90);
+ pos3(bar,0); pos4(bar,0);
+ x3=x4=.5rule_thickness+hround u;
+ y0=y1=y2=math_axis;
+ y3-y0=y0-y4=.24asc_height+eps;
+ x0=x3+3u+eps;
+ rt x1=hround(w-u);
+ pos5(bar,angle(z4-z0)); z5l=z0;
+ pos6(bar,angle(z3-z0)); z6l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ numeric t; path p; p=z4l{z9-z4}..z6r;
+ t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;
+ filldraw z0..{z4-z9}z4r--subpath (0,t) of\\(z4l{z9-z4}..z6r)
+ --z2l---z2r--subpath (t,0) of\\(z3l{z9-z3}..z5r)
+ --z3r{z9-z3}..z0 & cycle;
+ filldraw z1l..z1r---z2r..z2l---z1l & cycle;
+ endchar;
+enddef;
+
+def leftmonotail(expr code) =
+ beginchar(code,10u#,v_center(spread#+rule_thickness#));
+ adjust_fit(0,0); pickup crisp.nib;
+ pos1(rule_thickness,90); pos2(rule_thickness,90);
+ pos3(bar,0); pos4(bar,0);
+ x3=x4=hround(w-u)-.5rule_thickness;
+ y0=y1=y2=math_axis;
+ y3-y0=y0-y4=.24asc_height+eps;
+ x0=x3-3u-eps;
+ lft x1=hround u;
+ pos5(bar,angle(z4-z0)); z5l=z0;
+ pos6(bar,angle(z3-z0)); z6l=z0;
+ z9=.381966[.5[z3,z4],z0];
+ numeric t; path p; p=z4r{z9-z4}..z6r;
+ t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;
+ filldraw z0..{z4-z9}z4l--subpath (0,t) of\\(z4r{z9-z4}..z6r)
+ --z2l---z2r--subpath (t,0) of\\(z3r{z9-z3}..z5r)
+ --z3l{z9-z3}..z0 & cycle; % arrowhead and stem
+ filldraw z1l..z1r---z2r..z2l---z1l & cycle;
+ endchar;
+enddef;
+
+def squiggle(expr code) =
+ beginarithchar(code);
+ pickup rule.nib;
+ x2=.12w; x3=.3w;
+ x4=.7w; x5=.88w;
+ y2=y5=math_axis;
+ y3-y2=y2-y4=.5spread;
+ draw z2{right}..z3{right}..z4{right}..z5{right};
+ endchar;
+enddef;
+
+def leftharpoonup(expr code) =
+ beginchar(code, 18u#, v_center(spread#+rule_thickness#));
+ adjust_fit(0,0); pickup crisp.nib;
+ pos1(rule_thickness,90); pos2(rule_thickness,90);
+ pos3(bar,0); pos4(bar,0);
+ y0=y1=y2=math_axis;
+ x1+.5rule_thickness=hround(w-u);
+ lft x0=hround u;
+ y3-y0=y0-y4=.24asc_height+eps;
+ x3=x4=x0+3u+eps;
+ pos5(bar,angle(z4-z0)); z5l=z0;
+ pos6(bar,angle(z3-z0)); z6l=z0;
+ numeric t; path p; p=z4r..{2(x0-x4),y0-y4}z6r;
+ t=xpart(p intersectiontimes((0,y2l)--(w,y2l)));
+ x2=xpart point t of p;
+ filldraw z0--(x0,y2l)---z1l..z1r---z2r
+ ..subpath (t,0) of\\(z3r..{2(x0-x3),y0-y3}z5r)
+ --z3l..{2(x0-x3),y0-y3}cycle; % arrowhead and stem
+ endchar;
+enddef;
+
+def leftharpoondown(expr code) =
+ beginchar(code, 18u#, v_center(spread#+rule_thickness#));
+ adjust_fit(0,0); pickup crisp.nib;
+ pos1(rule_thickness,90); pos2(rule_thickness,90);
+ pos3(bar,0); pos4(bar,0);
+ y0=y1=y2=math_axis;
+ x1+.5rule_thickness=hround(w-u);
+ lft x0=hround u;
+ y3-y0=y0-y4=.24asc_height+eps;
+ x3=x4=x0+3u+eps;
+ pos5(bar,angle(z4-z0)); z5l=z0;
+ pos6(bar,angle(z3-z0)); z6l=z0;
+ numeric t; path p; p=z4r..{2(x0-x4),y0-y4}z6r;
+ t=xpart(p intersectiontimes((0,y2l)--(w,y2l)));
+ x2=xpart point t of p;
+ filldraw z0{2(x4-x0),y4-y0}..z4l
+ --subpath (0,t) of\\(z4r..{2(x0-x4),y0-y4}z6r)
+ ..z2l---z1l..z1r---(x0,y2r)--cycle; % arrowhead and stem
+ endchar;
+enddef;
+
+def rightharpoonup(expr code) =
+ beginchar(code, 18u#, v_center(spread#+rule_thickness#));
+ adjust_fit(0,0); pickup crisp.nib;
+ pos1(rule_thickness,90); pos2(rule_thickness,90);
+ pos3(bar,0); pos4(bar,0);
+ y0=y1=y2=math_axis;
+ x1-.5rule_thickness=hround u;
+ rt x0=hround(w-u);
+ y3-y0=y0-y4=.24asc_height+eps;
+ x3=x4=x0-3u-eps;
+ pos5(bar,angle(z4-z0)); z5l=z0;
+ pos6(bar,angle(z3-z0)); z6l=z0;
+ numeric t; path p; p=z4l..{2(x0-x4),y0-y4}z6r;
+ t=xpart(p intersectiontimes((0,y2l)--(w,y2l)));
+ x2=xpart point t of p;
+ filldraw z0--(x0,y2l)---z1l..z1r---z2r
+ ..subpath (t,0) of\\(z3l..{2(x0-x3),y0-y3}z5r)
+ --z3r..{2(x0-x3),y0-y3}cycle; % arrowhead and stem
+ endchar;
+enddef;
+
+def rightharpoondown(expr code) =
+ beginchar(code, 18u#, v_center(spread#+rule_thickness#));
+ adjust_fit(0,0); pickup crisp.nib;
+ pos1(rule_thickness,90); pos2(rule_thickness,90);
+ pos3(bar,0); pos4(bar,0);
+ y0=y1=y2=math_axis;
+ x1-.5rule_thickness=hround u;
+ rt x0=hround(w-u);
+ y3-y0=y0-y4=.24asc_height+eps;
+ x3=x4=x0-3u-eps;
+ pos5(bar,angle(z4-z0)); z5l=z0;
+ pos6(bar,angle(z3-z0)); z6l=z0;
+ numeric t; path p; p=z4l..{2(x0-x4),y0-y4}z6r;
+ t=xpart(p intersectiontimes((0,y2l)--(w,y2l)));
+ x2=xpart point t of p;
+ filldraw z0{2(x4-x0),y4-y0}..z4r
+ --subpath (0,t) of\\(z4l..{2(x0-x4),y0-y4}z6r)
+ ..z2l---z1l..z1r---(x0,y2r)--cycle; % arrowhead and stem
+ endchar;
+enddef;
+
+def vector(expr code) =
+ beginchar(code, 9u#, asc_height#+.5rule_thickness#,0);
+ italcorr .7[x_height#,asc_height#]*slant;
+ adjust_fit(0,0); pickup rule.nib;
+ lft x1=hround .5u; x2=w-x1; y1=y2=good.x .7[x_height,asc_height];
+ draw z1--z2; % bar
+ rt x3=hround(x2-u);
+ y3=y2+.3(asc_height-x_height);
+ draw z3{x2-x3,2(y2-y3)}...{2(x2-x3),y2-y3}z2; % upper point
+ endchar;
+enddef;
+
+def ofcirc(expr code) =
+ beginchar(code, 7u#, v_center(7u#));
+ adjust_fit(0,0); pickup rule.nib; autorounded;
+ lft x6=hround u; x2=w-x6;
+ z0=.5[z2,z6];
+ y8-y0=x2-x0;
+ y2=math_axis;
+ circle_points; draw_circle; % circle
+ endchar;
+enddef;
+
+def dotp(expr code) =
+ beginchar(code, 5u#, v_center(7u#));
+ adjust_fit(0,0); pickup fine.nib;
+ numeric dot_diam#; dot_diam#=2dot_size#;
+ define_whole_blacker_pixels(dot_diam);
+ pos1(dot_diam,0); pos2(dot_diam,90);
+ lft x1l=hround(.5w-.5dot_diam);
+ y1+.5dot_diam=vround(math_axis+.5dot_diam);
+ z1=z2; dot(1,2); % dot
+ endchar;
+enddef;
+
+def cupp(expr code) =
+ beginchar(code, 10u#, v_center(7u#));
+ adjust_fit(0,0); pickup rule.nib; autorounded;
+ lft x1=hround u; y1=vround(math_axis+.15x_height);
+ x3=w-x1; y3=y1;
+ penpos2(rule_thickness,90); x2=.5w;
+ y2=good.y(math_axis-.15x_height);
+ numeric theta; theta=angle((z2-z1)yscaled 3);
+ penpos1(rule_thickness,90+theta);
+ penpos3(rule_thickness,90-theta);
+ draw z1{dir theta}...z2...{dir-theta}z3;
+ endchar;
+enddef;
+
+def capp(expr code) =
+ beginchar(code, 10u#, v_center(7u#));
+ adjust_fit(0,0); pickup rule.nib; autorounded;
+ lft x1=hround u; y1=vround(math_axis-.15x_height);
+ x3=w-x1; y3=y1;
+ penpos2(rule_thickness,90); x2=.5w;
+ y2=good.y(.15x_height+math_axis);
+ numeric theta; theta=angle((z2-z1)yscaled 3);
+ penpos1(rule_thickness,90+theta);
+ penpos3(rule_thickness,90-theta);
+ draw z1{dir theta}...z2...{dir-theta}z3;
+ endchar;
+enddef;
+
diff --git a/macros/generic/diagrams/kuvio/arrsy/patchlevel_19 b/macros/generic/diagrams/kuvio/arrsy/patchlevel_19
new file mode 100644
index 0000000000..22dba0647c
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/arrsy/patchlevel_19
@@ -0,0 +1 @@
+27 Dec 1995
diff --git a/macros/generic/diagrams/kuvio/arrsy/symbols.ps b/macros/generic/diagrams/kuvio/arrsy/symbols.ps
new file mode 100644
index 0000000000..22ef9e8585
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/arrsy/symbols.ps
@@ -0,0 +1,264 @@
+%!PS-Adobe-2.0
+%%Creator: dvips 5.516 Copyright 1986, 1993 Radical Eye Software
+%%Title: symbols.dvi
+%%CreationDate: Fri Apr 21 16:11:04 1995
+%%Pages: 1
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 612 792
+%%EndComments
+%DVIPSCommandLine: dvips -o symbols.ps symbols.dvi
+%DVIPSSource: TeX output 1995.04.21:1611
+%%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 400 400
+(/Riseberga/._homes/user/agss/Mathematics/TeX/src/arrsy/symbols.dvi)
+@start /Fa 29 29 df<0000000600000000000007000000000000070000000000000380
+00000000000380000000000001C0000000000001C0000000000000E000007FFFFFFFF000
+00FFFFFFFFF00000FFFFFFFFF80000000000001C0000000000000E0000000000000F0000
+000000000780000000000003C0000000000001E0000000000000F0000000000000380000
+000000001E00FFFFFFFFFFFF80FFFFFFFFFFFF807FFFFFFFFFFF0031177D9C01>0
+D<7FFFFFFFFFFF00FFFFFFFFFFFF80FFFFFFFFFFFF803C0000000000000E000000000000
+0780000000000003C0000000000001E0000000000000F000000000000078000000000000
+380000000000001C0000000000000FFFFFFFFF800007FFFFFFFF800007FFFFFFFF000003
+80000000000001C0000000000001C0000000000000E0000000000000E000000000000070
+00000000000070000000000000300000000031177D9402>I<00000C00000E00001E0000
+3E00003E00007E0000EE0001CE0003CE00078E000F0E001C0E00780E00F00E03E00E0FE0
+0E3FE00E7CE00EF8E00EC0E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0
+0E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0
+0E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00600C17317EA503>I<60
+0C00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0
+0E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0
+0E00E00E00E00E00E00E00E00E00E00E06E00E3EE00E7CE00FF8E00FE0E00F80E01E00E0
+3C00E07000E1E000E3C000E78000E70000EE0000FC0000F80000F80000F00000E0000060
+0000173176A504>I<7FFFFFFFFFFF00FFFFFFFFFFFF80FFFFFFFFFFFF8000000000001E
+00000000000038000000000000F0000000000001E0000000000003C00000000000078000
+000000000F0000000000000E0000000000001C0000FFFFFFFFF80000FFFFFFFFF000007F
+FFFFFFF0000000000000E0000000000001C0000000000001C00000000000038000000000
+000380000000000007000000000000070000000000000600000031177D9405>I<000030
+0000000000007000000000000070000000000000E0000000000000E0000000000001C000
+0000000001C000000000000380000000000007FFFFFFFF000007FFFFFFFF80000FFFFFFF
+FF80001C0000000000003800000000000078000000000000F0000000000001E000000000
+0003C00000000000078000000000000E0000000000003C000000000000FFFFFFFFFFFF80
+FFFFFFFFFFFF807FFFFFFFFFFF0031177D9C06>I<600000E00000F00000F80000F80000
+FC0000EE0000E70000E78000E3C000E1E000E07000E03C00E01E00E00F80E00FE0E00FF8
+E00E7CE00E3EE00E06E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00
+E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00
+E00E00E00E00E00E00E00E00E00E00E00E00E00E00600C00173176A507>I<00600C00E0
+0E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0
+0E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0
+0E00E00E00E00E00E00EC0E00EF8E00E7CE00E3FE00E0FE00E03E00E00F00E00780E001C
+0E000F0E00078E0003CE0001CE0000EE00007E00003E00003E00001E00000E00000C1731
+7EA508>I<00000006000000000000070000000000000700000000000003800000000000
+0380000000000001C0000000000001E0000000000000E000007FFFFFFFF00000FFFFFFFF
+F80000FFFFFFFFFC0000000000001E0000000000000F0000000000000780000000000003
+C0000000000001F00000000000007800FFFFFFFFFFFF00FFFFFFFFFFFF80FFFFFFFFFFFF
+00000000000078000000000001F0000000000003C00000000000078000000000000F0000
+000000001E0000FFFFFFFFFC0000FFFFFFFFF800007FFFFFFFF0000000000000E0000000
+000001E0000000000001C000000000000380000000000003800000000000070000000000
+00070000000000000600000031257D9F09>I<0000300000000000007000000000000070
+000000000000E0000000000000E0000000000001C0000000000003C00000000000038000
+0000000007FFFFFFFF00000FFFFFFFFF80001FFFFFFFFF80003C00000000000078000000
+000000F0000000000001E0000000000007C000000000000F0000000000007FFFFFFFFFFF
+80FFFFFFFFFFFF807FFFFFFFFFFF800F00000000000007C0000000000001E00000000000
+00F0000000000000780000000000003C0000000000001FFFFFFFFF80000FFFFFFFFF8000
+07FFFFFFFF00000380000000000003C0000000000001C0000000000000E0000000000000
+E00000000000007000000000000070000000000000300000000031257D9F0A>I<7FFFFF
+FFF0FFFFFFFFF8FFFFFFFFF8000000000000000000000000000000000000000000000000
+000000000000FFFFFFFFF8FFFFFFFFF8FFFFFFFFF8000000000000000000000000000000
+000000000000000000000000000000FFFFFFFFF8FFFFFFFFF87FFFFFFFF025157D970B>
+I<FFE0007FF0FFE0007FF0FFE0007FF024037D8E2B>I<00060000030000030000018000
+00C00000C00000600000387FFFFCFFFFFF7FFFFC0000380000600000C00000C000018000
+030000030000060018137D961F>I<00600000C00000C000018000030000030000060000
+1C00003FFFFEFFFFFF3FFFFE1C000006000003000003000001800000C00000C000006000
+18137D961F>I<C00000C00000C000006000003000001800001C00000E000007FFFE07FF
+FF07FFFE0E00001C0000180000300000600000C00000C00000C0000018137C961F>I<00
+000300000300000300000600000C0000180000380000707FFFE0FFFFE07FFFE000007000
+003800001800000C00000600000300000300000318137E961F>I<03F000000007FC0000
+000FFE0000001E0F0000003C07800000F803C001C0F001E003C0E000F007C00000780F00
+00003C1E0000001FFC0000000FF800000003F000220D7C932B>I<000000000600000000
+0003000000000003000000000001800000000000C00000000000C0000000000060000000
+0000387FFFFFFFFFFCFFFFFFFFFFFF7FFFFFFFFFFC000000000038000000000060000000
+0000C00000000000C000000000018000000000030000000000030000000000060030137D
+9637>I<00600000000000C00000000000C0000000000180000000000300000000000300
+000000000600000000001C00000000003FFFFFFFFFFEFFFFFFFFFFFF3FFFFFFFFFFE1C00
+0000000006000000000003000000000003000000000001800000000000C00000000000C0
+0000000000600000000030137D9637>I<00600000060000C00000030000C00000030001
+80000001800300000000C00300000000C00600000000601C00000000383FFFFFFFFFFCFF
+FFFFFFFFFF3FFFFFFFFFFC1C00000000380600000000600300000000C00300000000C001
+800000018000C00000030000C00000030000600000060030137D9637>I<006000000000
+00C00000000000C0000000000180000000000300000000000700000000000E0000000000
+1C00000000007FFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE300B7D9637>I<FFFFFFFFFF
+FEFFFFFFFFFFFF7FFFFFFFFFFE1C00000000000E00000000000700000000000300000000
+0001800000000000C00000000000C000000000006000000000300B7D8E37>I<00000000
+06000000000003000000000003000000000001800000000000C00000000000E000000000
+00700000000000387FFFFFFFFFFEFFFFFFFFFFFF7FFFFFFFFFFF300B7D9637>I<7FFFFF
+FFFFFFFFFFFFFFFFFF7FFFFFFFFFFE0000000000380000000000700000000000E0000000
+0000C0000000000180000000000300000000000300000000000600300B7D8E37>I<0001
+C00001C00000E00000F87FFFFEFFFFFE7FFFFE17077EA61C>I<07C01FF03FF8783C701C
+E00EE00EE00EE00EE00E701C783C3FF81FF007C00F0F7D9416>I<0F003FC07FE07FE0FF
+F0FFF0FFF0FFF07FE07FE03FC00F000C0C7F930F>I<E00007E0000770000E78001E3C00
+3C1E00780F81F007FFE001FF80007E00180A7D911F>I<007E0001FF8007FFE00F81F01E
+00783C003C78001E70000EE00007E00007180A7D921F>I E /Fb
+26 120 df<FFFF0000FFFFC000FFFFE0001E01F0001E00F8001E007C001E003C001E001E
+001E001E001E000F001E000F001E000F001E0007801E0007801E0007801E0007801E0007
+801E0007801E0007801E0007801E0007801E0007801E000F001E000F001E000F001E001F
+001E001E001E003E001E007C001E00F8001E01F800FFFFF000FFFFC000FFFF000019227F
+A11D>68 D<FFF800FFF800FFF8000F00000F00000F00000F00000F00000F00000F00000F
+00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F
+00000F00000F00000F000F0F000F0F000F0F000F0F000F0F000FFFFFFFFFFFFFFFFFFF18
+227EA11D>76 D<7FFE0000FFFF80007FFFE0000F03F0000F00F8000F0078000F007C000F
+003C000F003C000F003C000F003C000F007C000F0078000F00F8000F03F0000FFFE0000F
+FF80000FFFC0000F03E0000F00F0000F00F0000F0078000F0078000F0078000F0078000F
+0078000F0078000F0079E00F0079E00F0079E00F0039E07FE03FC0FFF01FC07FE007001B
+227FA11D>82 D<7FE07FE0FFF0FFF07FE07FE00F000F000F000F000F000F000F000F000F
+000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F
+000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F
+000F0007801E0007801E0003C03C0003C03C0001F0F80000FFF000007FE000001F80001C
+2280A11D>85 D<600000F00000F00000F800007800007C00003C00003E00001E00001F00
+000F00000F800007800007C00003C00003C00003E00001E00001F00000F00000F8000078
+00007C00003C00003E00001E00001F00000F00000F00000F800007800007C00003C00003
+E00001E00001F00000F00000F800007800007C00003C00003C000018162B7DA51D>92
+D<0FF800003FFF00007FFF80007C07C0007C03E0003801E0000000F0000000F0000000F0
+00003FF00003FFF0000FFFF0003FC0F0007E00F0007800F000F000F000F000F000F000F0
+00F000F0007801F0007C07F0003FFFFF800FFE7F8003F81F8019187D971D>97
+D<7F800000FF8000007F8000000780000007800000078000000780000007800000078000
+00078000000787C000079FF00007FFFC0007F83E0007E01F0007C00F0007C00780078007
+8007800380078003C0078003C0078003C0078003C0078003C0078003C007800380078007
+8007C0078007C00F0007E01E0007F07E0007FFFC0007BFF000038FC0001A2280A11D>I<
+007F8003FFE007FFF00F81F01E01F03C00E0780000780000780000F00000F00000F00000
+F00000F00000F000007800007800007800F03C00F01E01F00F83E007FFC003FF80007E00
+14187C971D>I<0007F800000FF8000007F8000000780000007800000078000000780000
+007800000078000000780000FC780003FF78000FFFF8001F83F8001E01F8003C00F80078
+0078007800780070007800F0007800F0007800F0007800F0007800F0007800F000780070
+007800780078007800F8003C01F8003E03F8001F07F8000FFF7F8003FE7FC000F87F801A
+227EA11D>I<00FC0003FF0007FFC01F83E01E01E03C00F07800F0780078700078F00078
+FFFFF8FFFFF8FFFFF8F00000F000007800007800003C00783C00781E00F80F81F007FFE0
+01FFC0007F0015187D971D>I<0001FC000FFE001FFF003E1F003C1F00780E0078000078
+000078000078007FFFFCFFFFFCFFFFFC0078000078000078000078000078000078000078
+000078000078000078000078000078000078000078000078000078000078000078003FFF
+F07FFFF83FFFF018227FA11D>I<00F83E0003FEFF0007FFFF800F8FC7801E03C7001E03
+C0003C01E0003C01E0003C01E0003C01E0003C01E0003C01E0001E03C0001E03C0000F8F
+80001FFF00001FFE00001CF800001C0000001C0000001E0000000FFF80000FFFF0003FFF
+FC003C007C0070000E0070000F00E0000700E0000700E0000700E000070070000E007800
+1E003F00FC001FFFF80007FFE00000FF000019257E971D>I<7F800000FF8000007F8000
+00078000000780000007800000078000000780000007800000078000000787E000079FF8
+0007BFFC0007F83C0007F01E0007E01E0007C01E0007801E0007801E0007801E0007801E
+0007801E0007801E0007801E0007801E0007801E0007801E0007801E0007801E0007801E
+0007801E007FF87FE0FFFCFFF07FF87FE01C2280A11D>I<00600000F00001F80001F800
+00F0000060000000000000000000000000000000007FF800FFF8007FF800007800007800
+007800007800007800007800007800007800007800007800007800007800007800007800
+0078000078000078000078007FFFF8FFFFF87FFFF815237CA21D>I<FFF800FFF800FFF8
+000078000078000078000078000078000078000078000078000078000078000078000078
+000078000078000078000078000078000078000078000078000078000078000078000078
+00007800007800007800007800FFFFFCFFFFFCFFFFFC16227DA11D>108
+D<FC781E00FDFC7F00FFFEFF801F8FE3801F07C1C01E0781C01E0781C01C0701C01C0701
+C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701
+C01C0701C01C0701C01C0701C0FF8FE3F8FF9FE7F8FF8FE3F81D1880971D>I<7F87E000
+FF9FF8007FBFFC0007F83C0007F01E0007E01E0007C01E0007801E0007801E0007801E00
+07801E0007801E0007801E0007801E0007801E0007801E0007801E0007801E0007801E00
+07801E0007801E007FF87FE0FFFCFFF07FF87FE01C1880971D>I<00FC0003FF000FFFC0
+1F87E03E01F03C00F0780078780078F0003CF0003CF0003CF0003CF0003CF0003CF0003C
+F8007C7800787C00F83C00F03E01F01F87E00FFFC003FF0000FC0016187D971D>I<7F87
+C000FF9FF0007FFFFC0007F83E0007E01F0007C00F0007C0078007800780078003800780
+03C0078003C0078003C0078003C0078003C0078003C0078003800780078007C0078007C0
+0F0007E01E0007F07E0007FFFC0007BFF000078FC0000780000007800000078000000780
+000007800000078000000780000007800000078000007FF80000FFFC00007FF800001A24
+80971D>I<007E3C0001FF3C0007FFFC000F83FC001E00FC003C007C003C007C0078003C
+0078003C00F0003C00F0003C00F0003C00F0003C00F0003C00F0003C0078003C0078003C
+0078007C003C00FC001E01FC001F83FC0007FFBC0003FF3C0000FC3C0000003C0000003C
+0000003C0000003C0000003C0000003C0000003C0000003C0000003C000003FFC00007FF
+E00003FFC01B247E971D>I<7FE07C00FFE1FF007FE7FF8001EF8F8001FE0F8001FC0700
+01F8000001F0000001F0000001F0000001E0000001E0000001E0000001E0000001E00000
+01E0000001E0000001E0000001E0000001E0000001E000007FFFE000FFFFE0007FFFE000
+19187F971D>I<03FCE01FFFE03FFFE07C07E07001E0E001E0E001E0F001E07800007FC0
+003FFE000FFF8001FFE00007F00000F0700078F00038F00038F80038FC0070FE01F0FFFF
+E0EFFF80E1FE0015187C971D>I<00E00001E00001E00001E00001E00001E00001E0007F
+FFFCFFFFFCFFFFFC01E00001E00001E00001E00001E00001E00001E00001E00001E00001
+E00001E00001E00001E01E01E01E01E01E01E01E01E01E00F07C00FFF8003FF0000FC017
+1F7F9E1D>I<7F81FE00FF83FE007F81FE0007801E0007801E0007801E0007801E000780
+1E0007801E0007801E0007801E0007801E0007801E0007801E0007801E0007801E000780
+1E0007801E0007803E0007807E0003C0FE0003FFFFE001FFDFF0007F1FE01C1880971D>
+I<7FE1FF80FFE1FFC07FE1FF800E001C000F003C00070038000700380007807800038070
+000380700003C0F00001C0E00001C0E00001E1E00000E1C00000E1C00000F3C000007380
+000073800000738000003F0000003F0000003F0000001E00001A187F971D>I<FFC0FFC0
+FFE1FFC0FFC0FFC01C000E001C000E001C000E001C000E001C000E001E001E000E001C00
+0E1E1C000E1E1C000E3F1C000E3F1C000E331C00073338000773B8000773B8000773B800
+0761B80007E1F80003E1F00003E1F00003C0F0001A187F971D>I
+E end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 400dpi
+TeXDict begin
+
+%%EndSetup
+%%Page: 1 1
+1 0 bop 0 55 a Fb(\\Rightharpoonup)167 b Fa(\000)0 177
+y Fb(\\Leftharpoondown)138 b Fa(\001)0 299 y Fb(\\Upharpoonleft)207
+b Fa(\002)0 421 y Fb(\\Downharpoonright)120 b Fa(\003)0
+542 y Fb(\\Rightharpoondown)109 b Fa(\004)0 664 y Fb(\\Leftharpoonup)
+196 b Fa(\005)0 786 y Fb(\\Upharpoonright)178 b Fa(\006)0
+908 y Fb(\\Downharpoonleft)149 b Fa(\007)0 1029 y Fb(\\Rrightarrow)254
+b Fa(\010)0 1151 y Fb(\\Lleftarrow)283 b Fa(\011)0 1273
+y Fb(\\Rrelbar)376 b Fa(\012)0 1395 y Fb(\\dashbar)g
+Fa(\013)0 1517 y Fb(\\shortrightarrow)151 b Fa(\014)0
+1638 y Fb(\\shortleftarrow)180 b Fa(\015)0 1760 y Fb(\\rightmonotail)
+209 b Fa(\016)0 1882 y Fb(\\leftmonotail)238 b Fa(\017)0
+2004 y Fb(\\squiggle)347 b Fa(\020)0 2125 y Fb(\\rightarrow)283
+b Fa(\021)0 2247 y Fb(\\leftarrow)312 b Fa(\022)0 2369
+y Fb(\\leftrightarrow)167 b Fa(\023)0 2491 y Fb(\\leftharpoonup)196
+b Fa(\024)0 2612 y Fb(\\leftharpoondown)138 b Fa(\025)0
+2734 y Fb(\\rightharpoonup)167 b Fa(\026)0 2856 y Fb
+(\\rightharpoondown)109 b Fa(\027)0 2978 y Fb(\\vect)471
+b Fa(\030)0 3099 y Fb(\\of)532 b Fa(\031)0 3221 y Fb(\\dotp)477
+b Fa(\032)0 3343 y Fb(\\cupp)470 b Fa(\033)0 3465 y Fb(\\capp)g
+Fa(\034)p eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/macros/generic/diagrams/kuvio/arrsy/symbols.tex b/macros/generic/diagrams/kuvio/arrsy/symbols.tex
new file mode 100644
index 0000000000..e7f5ef289b
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/arrsy/symbols.tex
@@ -0,0 +1,43 @@
+
+\input arrsy
+
+\parindent=0pt
+\nopagenumbers
+\parskip=10pt
+
+\def\disp#1{{\tt\string#1}\hfil\hbox to 0pt{\hss$#1$\hss}}
+\def\test#1{\leavevmode\hbox to 4cm{\disp#1}\par}
+
+\test\Rightharpoonup
+\test\Leftharpoondown
+\test\Upharpoonleft
+\test\Downharpoonright
+\test\Rightharpoondown
+\test\Leftharpoonup
+\test\Upharpoonright
+\test\Downharpoonleft
+\test\Rrightarrow
+\test\Lleftarrow
+\test\Rrelbar
+\test\dashbar
+\test\shortrightarrow
+\test\shortleftarrow
+\test\rightmonotail
+\test\leftmonotail
+\test\squiggle
+\test\rightarrow
+\test\leftarrow
+\test\leftrightarrow
+\test\leftharpoonup
+\test\leftharpoondown
+\test\rightharpoonup
+\test\rightharpoondown
+{\def\disp#1{#1}%
+ \leavevmode\test{{\tt \string\vect}\hfil\hbox to 0pt{\hss$\vect{ }$\hss}}
+}%
+\test\of
+\test\dotp
+\test\cupp
+\test\capp
+
+\bye
diff --git a/macros/generic/diagrams/kuvio/doc-src/README b/macros/generic/diagrams/kuvio/doc-src/README
new file mode 100644
index 0000000000..abd75abec4
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/README
@@ -0,0 +1,55 @@
+08 Jun 1996
+
+This is the source to my "Typesetting diagrams with kuvio.tex". In
+order to run tex (not latex!) on either tdwk.tex or tdwk-A4.tex,
+you'll first need to do the following.
+
+ 1. Get yourself on a really big TeX - tdwk.tex consumes an obscene amount
+ of memory. (I kid not.)
+
+ 2. Install the bbm family of fonts, available on any CTAN node.
+ In particular, you'll need bbm10 and bbmsl10. Please don't make
+ any substitutions if you're going to put the resulting .dvi or
+ .ps file in a public place.
+
+ 3. Install my arrsy10 font, available wherever kuvio.tex is.
+
+ 4. Include the subdirectories of ./macros in your TEXINPUTS path.
+
+ 5. Make sure the current patchlevel of kuvio.tex is on your TEXINPUTS.
+
+ 6. Make sure the directory ./tdwk exists and is writable.
+
+To speed things up, you can also do the following.
+
+ 7. Unpack either kuv.tar.gz or kuv-A4.tar.gz, depending on whether
+ you are using letter or A4 paper.
+
+With these files, you need only do "tex tdwk" or "tex tdwk-A4"
+to process the documentation. Otherwise you will have to do
+
+ tex file
+ makeindex -s tdwk.ist file.idx
+ tex file
+
+where file=tdwk or file=tdwk-A4, as appropriate.
+
+Unless you have a dvi previewer which understands dvips' \special
+syntax, you will not be able to properly preview tdwk.dvi or
+tdwk-A4.dvi. However, you can always do
+
+ dvips file -o
+
+and then preview the resulting .ps file. Also, you will need to keep
+the files in ./eps in their current location relative to tdwk.dvi and
+tdwk-A4.dvi should you move either of these two.
+
+If all this seems like too much work, a PostScript version of
+"Typesetting diagrams with kuvio.tex" can be obtained from
+
+ ftp://ftp.math.ubc.ca/pub/svensson/kuvio/
+
+in the files tdwk.ps.gz (letter) and tdwk-A4.ps.gz (A4). If this isn't
+available to you, send me an email.
+
+Anders <svensson@math.ubc.ca>
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg01b.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg01b.tex
new file mode 100644
index 0000000000..72a787ce44
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg01b.tex
@@ -0,0 +1,15 @@
+$$
+\let~\tilde
+\cellwidth+=17mm \columndist+=12mm
+\gravitateleft
+\Dg
+ & & K & \rMono && E_1^\alpha& \rEpi^{\eta'}&& A' \\
+ & \ldTo& & && & & \ruBar \\
+~K& & \dBar\rMono\br& ~E_1^\alpha&& \dTo\rEpi^{~\eta'}\br&
+ A' \\
+\dBar& & & && & & & \dTo>\alpha \\
+ & & K & \rMono\dTo\br&& E_1\ax{2mm}& \rEpi\dTo\br&& A \\
+ & \ldTo& & & \ldTo& & & \ldBar \\
+~K& & \rMono & ~E_1 & \rEpi_{~\eta}& & A \\
+\endDg
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg02.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg02.tex
new file mode 100644
index 0000000000..c0be43f6d9
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg02.tex
@@ -0,0 +1,23 @@
+$$
+\dotted
+\grid=7mm
+\yscale=2
+\Diagram
+&&&&&&&&&xz&&&&xyz&&&&xy^2z&&&&xy^3z&\\
+\\
+z&&&&zy&&&&zy^2&&&&zy^3\\
+\dy{-.2}
+&&&&&&&&&x&&&&xy&&&&xy^2&&&&xy^3\\
+\\
+&&&&y&&&&y^2&&&&y^3\\
+\Modify
+\Line (0,0) (4,0) \dt{1pt}
+\Line (4,0) (8,0)
+\Line (8,0) (12,0)
+\Line (12,0) (22.5,0)
+\Line (0,0) (0,3) \dt{1pt}
+\Line (0,3) (0,5.2)
+\To (9,2) (12,0)
+\To (9,5) (12,3)
+\endDiagram
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg02A4.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg02A4.tex
new file mode 100644
index 0000000000..919470e7b4
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg02A4.tex
@@ -0,0 +1,24 @@
+$$
+\dotted
+\grid=7mm
+\yscale=2
+\Diagrampad=0pt
+\Diagram
+&&&&&&&&&xz&&&&xyz&&&&xy^2z&&&&xy^3z&\\
+\\
+z&&&&zy&&&&zy^2&&&&zy^3\\
+\dy{-.2}
+&&&&&&&&&x&&&&xy&&&&xy^2&&&&xy^3\\
+\\
+&&&&y&&&&y^2&&&&y^3\\
+\Modify
+\Line (0,0) (4,0) \dt{1pt}
+\Line (4,0) (8,0)
+\Line (8,0) (12,0)
+\Line (12,0) (22.5,0)
+\Line (0,0) (0,3) \dt{1pt}
+\Line (0,3) (0,5.2)
+\To (9,2) (12,0)
+\To (9,5) (12,3)
+\endDiagram
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg03.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg03.tex
new file mode 100644
index 0000000000..f068b6acdc
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg03.tex
@@ -0,0 +1,30 @@
+$$
+\def\T{{\bf T}} \def\S{{\bf S}}
+\landscape \let\labelstyle\textstyle
+\cellpush=10pt \xscale=2.2
+\Diagram
+ & & H_n(X^+\cup\T A^+, X^+) &
+ \lTo ^{H_n(k_1)} & & H_n(\T A^+,A^+)
+ \aTo (-3,-2) _{H_n(p_1)}
+ \aTo (3,-4) ^{\partial_1} \\
+ & & \dTo >{H_n{q_1}} \\
+ & & H_n(\S A^+,P) &
+ & & * \dx{.7} \\
+ & \ruTo _{H_n(q_4)} \tx{15pt}
+ & \uTo >{H_n(t)} \\
+H_n(X^+\cup\T A^+,P) \aTo (2,4) ^{H_n(j_1)} \tx{15pt}
+ \aTo (2,-4) _{H_n(j_2)} \tx{15pt}
+ & & & & & & H_{n-1}(A) &
+ \rTo ^{H_{n-1}(i_A)} & H_{n-1}(A^+,P) \\
+ & \rdTo ^{H_n(q_2)} \tx{15pt}
+ & & & & \ruTo \\
+ & & H_n(X^+/A^+,P) &
+ \lTo ^{P_n(X,A)} & H_n(X,A)
+ \aTo (1,-2) >{H_n(i_X)} \\
+ & & \uTo >{H_n(q_3)} \\
+ & & H_n(X^+\cup\T A^+,\T A^+)&
+ \lTo _{H_n(k_2)} & & H_n(X^+,A^+)
+ \aTo (3,4) _{\partial_2}
+ \aTo (-3,2) _{H_n(p_X)} \\
+\endDiagram
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg04.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg04.tex
new file mode 100644
index 0000000000..f9b8c2024e
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg04.tex
@@ -0,0 +1,7 @@
+$$
+\Dg
+F\times K\times U & \rTo ^{\rm proj} & & K\times U \\
+\dTo & & & \dTo >{\rm proj} \\
+F\times_K (K\times U) & {} \approx F\times U & \rTo ^{\rm proj}& U \\
+\endDg
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg05.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg05.tex
new file mode 100644
index 0000000000..a2b3d0518c
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg05.tex
@@ -0,0 +1,22 @@
+$$
+\cellpush=4pt
+\let\labelstyle\textstyle
+\lpad=1in \bpad=1cm
+\Graph{4in,4}{3.5in,1in}
+\To (0,0) (3.3,0) \hd{p}
+\To (0,0) (0,3.5) \hd{q}
+\Line (2,0) (2,3.25) \Line (0,1) (3.2,1) \Dot (2,1)
+\Dot (0,0)
+%
+\Dot (2,0) \Dot (2.25,0) \Dot (2.5,0) \Dot (2.75,0) \Dot (3,0)
+%
+\Dot (0,1) \Dot (0,1.25) \Dot (0,1.5) \Dot (0,1.75)
+\Dot (0,2) \Dot (0,2.25) \Dot (0,2.5) \Dot (0,2.75) \Dot (0,3)
+%
+\Line (0,2.25) (2.5,0) ^{d^p} :{.35,5pt} \ro
+\Line (0,3) (3,0) ^{p + q = m + n} :{.35,5pt} \ro
+%
+\Math{q = n} (-.1,1) *1 \Math{E_{0,p-1}^2 = E_{0,p-1}^p} (-.1,2.25) *1
+\Math{p = m} (2,-.2) *{.55} \Math{E_{p,0}^2 = E_{p,0}^p} (2.75,-.2) *{.6}
+\endGraph
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg06a.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg06a.tex
new file mode 100644
index 0000000000..5f06e3915b
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg06a.tex
@@ -0,0 +1,15 @@
+$$
+\grid=.75cm
+\Diagram
+A' & & \rTo ^{f'} & & B' \\
+ & \rdTo <a \dh{2pt}& & & & \rdTo _b \\
+\dTo <{g'} & & A & & \dTo <{h'} :{.25}
+ \rTo ^f :{.25} \br
+ & & B \\
+ \\
+C' & & \rTo ^{k'} :{.75} \dTo <g :{.25} \br
+ & & D' & & \dTo >h \\
+ & \rdTo _c \dh{.5pt}&& & & \rdTo _d \\
+ & & C & & \rTo ^k & & D \\
+\endDiagram
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg09.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg09.tex
new file mode 100644
index 0000000000..402af15644
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg09.tex
@@ -0,0 +1,28 @@
+$$
+\rotatedlabels \let\labelstyle\textstyle \scale=2
+\Diagram
+ & & F(3,2) \aLine (1,-4) >{F(3,1,1)} :{.4} \br \\
+ & & & \rdLine >{F(1,2,2)} \pt{right,.75} \\
+ & & & & F(1,4) \\
+F(2,3) \aDash (4,1) ^{F(1,1,3)} :{.4} \pp \\
+ & & & F(4,1) \aLine (1,2) >{F(1,3,1)} \\
+\Modify
+\Pt{top} (2,4) \Pt{b1} (0,1) \Pt{b2} (3,0)
+\Pt{LeftF} (1.65,2) \Pt{BackF} (2,2.5)
+\Pt{BottomF} (2.5,1) \Pt{RightF} (3.1,2.25)
+\Nul \pt{b1} \pt{b2} \pt{bottom,.8}
+\Nul \pt{BottomF} \pt{bottom} \pt{BottomL,2}
+\Dash \pt{BottomF} \pt{bottom} \tl\circ \dt{3pt}
+\Line \pt{bottom} \pt{BottomL} \hd{F(1,1,2,1)}
+\Line \pt{b1} \pt{b2} _{F(2,2,1)} \br
+\Nul \pt{b1} \pt{top} \pt{left,.25} \pt{back,.75}
+\Nul \pt{BackF} \pt{back} \pt{BackL,2}
+\Nul \pt{LeftF} \pt{left} \pt{LeftL,2}
+\Dash \pt{BackF} \pt{back} \tl\circ \dt{3pt}
+\Line \pt{back} \pt{BackL} \hd{F(1,1,1,2)}
+\Line \pt{b1} \pt{top} <{F(2,1,2)} \br
+\Line \pt{LeftF} \pt{LeftL} \tl\bullet \hd{F(2,1,1,1)} \jt \br
+\Nul \pt{RightF} \pt{right} \pt{RightL,3}
+\Line \pt{RightF} \pt{RightL} \tl\bullet \hd{F(1,2,1,1)} \jt \br
+\endDiagram
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg12.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg12.tex
new file mode 100644
index 0000000000..383bdc4f63
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg12.tex
@@ -0,0 +1,13 @@
+$$
+\def\y#1#2{Y(#1,#2)} \def\RP{{\bb R}P}
+\gravitateright
+\Dg
+&&&\RP^1 = {}& \y11 & \rInto & \y21 & \rInto & \y31 & \rInto & \y41 & \rInto & \cdots \\
+&&& & & & \dTo & & \dTo & & \dTo & \\
+&&\RP^2 = {}&& & & \y12 & \rInto & \y22 & \rInto & \y32 & \rInto & \cdots \\
+&& && & & & & \dTo & & \dTo & \\
+&\RP^3 = {}&&& & & & & \y13 & \rInto & \y23 & \rInto & \cdots \\
+& &&& & & & & & & \dTo & \\
+\RP^4 = {}&&&& & & & & & & \y14 & \rInto & \cdots \\
+\endDg
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg13.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg13.tex
new file mode 100644
index 0000000000..be4727420f
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg13.tex
@@ -0,0 +1,15 @@
+$$
+\joined \let\labelstyle\textstyle
+\Graph{3cm,2}{3cm,4}
+\Line (0,0) (0,4) <{f(z,s)}
+\Line (0,4) (2,4) ^{H(z,t)}
+\Line (0,0) (2,0) _{*}
+\Line (2,0) (2,4)
+\Line (0,4) (2,2) _{\;\;H(z,0) = f(z,1)} \ro
+\endGraph
+\qquad\qquad
+H'(z,t,s) =
+\cases{f(z,2s/(2-t))& if $0\le 2s\le 2 - t$\cr
+ \cr
+ H(z,2s - 2 + t)& if $2 - t\le 2s\le 2$\cr}
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg15.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg15.tex
new file mode 100644
index 0000000000..7c5c0f3fa3
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg15.tex
@@ -0,0 +1,10 @@
+$$
+\def\mod{\mathrel{\big/}}
+\Dg
+{\rm Spin}(3) & & & & SU(2) \\
+ & \rdTo & & \ldTo \\
+ & & SO(3) \\
+ & & \dTo \\
+& O(3)\mod O(1)^3 = {} & SO(3)\mod(O(1)^3\cap SO(3)) \\
+\endDg
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg16.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg16.tex
new file mode 100644
index 0000000000..43a47a43d5
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg16.tex
@@ -0,0 +1,7 @@
+$$
+\Dg
+u & \rTo ^{e_1} & v & & \rTo \up{3pt} ^f \rTo \up{-3pt} _g & d \\
+\uDashto >s & & \dTo >e & & & \uTo \\
+w & \rTo ^{ee_1s} & w & {} = {\mit\Pi}k_i & \rTo & k_i \\
+\endDg
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg17.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg17.tex
new file mode 100644
index 0000000000..b2520a89fb
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg17.tex
@@ -0,0 +1,14 @@
+$$
+\def\cod{{\rm cod}\,} \def\dom{{\rm dom}\,}
+\cellwidth+=2mm
+\Dg
+& F & _{\cod u} & \rEq & F & _{\cod u} & & & F_i \\
+& \uTo >{p_u} & & & \uTo & & & \ruTo <{p_i} \tx{-5pt} &
+ \uDashto >{\mu_i} \\
+{\mit\Pi}_{u:j\to k}F_k = {\mit\Pi}_u &
+ F & _{\cod u} & \lTo ^f \up{3pt} \lTo _g \up{-3pt}
+ & {\mit\Pi}_i & & F_i & \lDashto ^e & d \\
+& \dTo >{p_u} & & & \dTo >{p_{\dom u}} \\
+& F & _{\cod u} & \lTo ^{Fu} & F & _{\dom u} \\
+\endDg
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg18.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg18.tex
new file mode 100644
index 0000000000..6d7791320e
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg18.tex
@@ -0,0 +1,10 @@
+$$
+\cellwidth+=3mm
+\Dg
+Y & \rMono ^y & A & \rLine \jh & \stop \\
+\dEpi & & \dEpi & & \mx{-1cm} \\
+D & \rMono ^d & i_A(A) & & \dLine >{\eta_A} \jn \\
+\dMono & & \dMono \\
+X & \rMono _x & \overline{i_A(A)} & \lTo \jt & \stop \\
+\endDg
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg19.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg19.tex
new file mode 100644
index 0000000000..b8e0400f20
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg19.tex
@@ -0,0 +1,20 @@
+$$
+\cellpush+=5pt
+\cellwidth+=2mm
+\Dg
+&&_{N+t'}X_p & \rTo ^{g_{p+q}} & _N X_{p+q} \\
+&& \dFillcell{\;\cdots\;\rightarrowfill} &
+ & \dFillcell{\;\cdots\;\rightarrowfill} \\
+ \\
+&& _{N+t'}X_1 & \rTo ^{g_{q+1}} & _N X_{q+1} \\
+&& \dTo & & \dTo \\
+S^{N+t+t'}X \aTo (2,5) ^{f_p} \tx{.7} \hx{5pt} & \rTo ^f &
+ S^{N+t'}X & \rTo ^{g_q} & _N X_q \\
+ \\
+&& & & \dFillcell{\rightarrowfill\;\cdots\;\rightarrowfill} \\
+ \\
+&& & & _N X_1 \\
+&& & & \dTo \\
+&& & & S^N X \bTo (-2,6) <g \hx{.2} \\
+\endDg
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg20.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg20.tex
new file mode 100644
index 0000000000..5f5b1d74a9
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg20.tex
@@ -0,0 +1,13 @@
+$$
+\let\^\widehat \let\~\widetilde
+\flexible \columndist=1cm
+\xgrid+=2mm \ygrid+=-2mm
+\Diagram
+ & & & &H^0 \bTo(-1,-4) \hx{-2pt}
+ &\cdots &H^{n-1} &H^n &H^{n+1} &H^{n+2} &\cdots \\
+\mx{5mm}& & & &\dTo & &\dTo &\dEpi&\dBar &\dBar &\mx{-2mm}\\
+\cdots &\^H^{-3} &\^H^{-2} &\^H^{-1}&\^H^0 &\cdots &\^H^{n-1}&\^H^n&\^H^{n+1}&\^H^{n+2}&\cdots\\
+ &\dBar &\dBar &\dInto &\dTo & &\dTo \dx{-2mm} \\
+\cdots &\~H_{n+2}&\~H_{n+1}&\~H_n &\~H_{n-1}&\cdots&\~H_0 \aTo(1,4) \hx{-2pt} \\
+\endDiagram
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg20A4.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg20A4.tex
new file mode 100644
index 0000000000..6be4f5a5d6
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg20A4.tex
@@ -0,0 +1,13 @@
+$$
+\let\^\widehat \let\~\widetilde
+\flexible \columndist=1cm
+\xgrid+=2mm \ygrid+=-2mm
+\Diagram
+ & & & &H^0 \bTo(-1,-4) \hx{-2pt}
+ &\cdots&H^{n-1} &H^n &H^{n+1}&H^{n+2} &\cdots \\
+\mx{5mm}& & & &\dTo & &\dTo &\dEpi&\dBar &\dBar &\mx{-2mm}\\
+\cdots&\^H^{-3} &\^H^{-2} &\^H^{-1}&\^H^0 &\cdots&\^H^{n-1}&\^H^n&\^H^{n+1}&\^H^{n+2}&\cdots\\
+ &\dBar &\dBar &\dInto &\dTo & &\dTo \dx{-2mm} \\
+\cdots&\~H_{n+2}&\~H_{n+1}&\~H_n&\~H_{n-1}&\cdots&\~H_0 \aTo(1,4) \hx{-2pt} \\
+\endDiagram
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eg/eg21.tex b/macros/generic/diagrams/kuvio/doc-src/eg/eg21.tex
new file mode 100644
index 0000000000..a93205708b
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eg/eg21.tex
@@ -0,0 +1,12 @@
+$$
+\def\M{{\cal M}\dot} \def\inv{^{-1}} \def\orlz#1{\langle#1\rangle}
+\let\labelstyle\textstyle
+\Dg
+[q(g,b),t] \aNul (1,-1) \aMapsto (2,-4) &&& \rMapsto &&&
+ q(g,\phi(b,t)) \aNul (-1,-1) \aMapsto (-2,-4) \mx{12pt} \\
+ & \M R_s & & \rTo & & \beta\inv(W_s) \\
+ & & \rdTo & & \ldTo >{R_s} \\
+ & & & \beta\inv\orlz{s} \\
+ & & q(g,r_s(b)) & {} = {} & q(g,r_s(\phi(b,t))) \\
+\endDg
+$$
diff --git a/macros/generic/diagrams/kuvio/doc-src/eps/face.eps b/macros/generic/diagrams/kuvio/doc-src/eps/face.eps
new file mode 100644
index 0000000000..47d51b7f84
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eps/face.eps
@@ -0,0 +1,211 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: UNTITLED1 - /Quantum/me
+%%Creator: Diagram
+%%CreationDate: Tue Oct 1 00:36:38 1991
+%%For: me
+%%DocumentFonts: (atend)
+%%Pages: 0 1
+%%BoundingBox: 201 314 384 450
+%%EndComments
+
+%%BeginDocument: /usr/lib/NextStep/printPackage.ps
+%!PS-Adobe-2.0
+%%Title: Printing Package
+%%EndComments
+%Version: 2.0
+%Copyright: 1988, NeXT, Inc.
+
+/__NXdef{1 index where{pop pop pop}{def}ifelse}bind def
+/__NXbdef{1 index where{pop pop pop}{bind def}ifelse}bind def
+/UserObjects 10 array __NXdef
+/defineuserobject{
+ exch dup 1 add dup UserObjects length gt{
+ array dup 0 UserObjects putinterval
+ /UserObjects exch def
+ }{pop}ifelse UserObjects exch 3 -1 roll put
+}__NXbdef
+/undefineuserobject{UserObjects exch null put}__NXbdef
+/execuserobject{UserObjects exch get exec}__NXbdef
+/__NXRectPath{4 2 roll moveto 1 index 0 rlineto
+0 exch rlineto neg 0 rlineto closepath}__NXbdef
+/__NXProcessRectArgs{
+ 1 index type /arraytype eq{
+ exch 0 4 2 index length 1 sub{
+ dup 3 add 1 exch{1 index exch get exch}for
+ 5 1 roll 5 index exec
+ }for pop pop
+ }{exec}ifelse
+}__NXbdef
+/rectfill{gsave newpath {__NXRectPath fill} __NXProcessRectArgs grestore}__NXbdef
+/rectclip{newpath {__NXRectPath} __NXProcessRectArgs clip newpath}__NXbdef
+/rectstroke{
+ gsave newpath dup type /arraytype eq{dup length 6 eq}{false}ifelse{
+ {gsave __NXRectPath null concat stroke grestore}
+ dup length array cvx copy dup 2 4 -1 roll put __NXProcessRectArgs
+ }{{__NXRectPath stroke} __NXProcessRectArgs}ifelse grestore
+}__NXbdef
+/xyshow{
+ 0 1 3 index length 1 sub{
+ currentpoint 4 index 3 index 1 getinterval show
+ 3 index 3 index 2 mul 1 add get add exch
+ 3 index 3 index 2 mul get add exch moveto pop
+ }for pop pop
+}__NXbdef
+/xshow{
+ 0 1 3 index length 1 sub{
+ currentpoint 4 index 3 index 1 getinterval show
+ exch 3 index 3 index get add exch moveto pop
+ }for pop pop
+}__NXbdef
+/yshow{
+ 0 1 3 index length 1 sub{
+ currentpoint 4 index 3 index 1 getinterval show
+ 3 index 3 index get add moveto pop
+ }for pop pop
+}__NXbdef
+/arct{arcto pop pop pop pop}__NXbdef
+/setbbox{pop pop pop pop}__NXbdef
+/ucache{}__NXbdef
+/ucachestatus{mark 0 0 0 0 0}__NXbdef
+/setucacheparams{cleartomark}__NXbdef
+/uappend{systemdict begin cvx exec end}__NXbdef
+/ueofill{gsave newpath uappend eofill grestore}__NXbdef
+/ufill{gsave newpath uappend fill grestore}__NXbdef
+/ustroke{
+ gsave newpath dup length 6 eq
+ {exch uappend concat}{uappend}ifelse
+ stroke grestore
+}__NXbdef
+/__NXustrokepathMatrix dup where {pop pop}{matrix def}ifelse
+/ustrokepath{
+ newpath dup length 6 eq{
+ exch uappend __NXustrokepathMatrix currentmatrix exch concat
+ strokepath setmatrix
+ }{uappend strokepath}ifelse
+} __NXbdef
+/upath{
+ [exch {/ucache cvx}if pathbbox /setbbox cvx
+ {/moveto cvx}{/lineto cvx}{/curveto cvx}{/closepath cvx}pathforall]cvx
+} __NXbdef
+/setstrokeadjust{pop}__NXbdef
+/currentstrokeadjust{false}__NXbdef
+/selectfont{exch findfont exch
+dup type /arraytype eq {makefont}{scalefont}ifelse setfont}__NXbdef
+/_NXCombineArrays{
+ counttomark dup 2 add index dup length 3 -1 roll {
+ 2 index length sub dup 4 1 roll 1 index exch 4 -1 roll putinterval exch
+ }repeat pop pop pop
+}__NXbdef
+/setcmykcolor{
+ 1.0 exch sub dup dup 6 -1 roll
+ sub dup 0 lt{pop 0}if 5 1 roll
+ 4 -1 roll sub dup 0 lt{pop 0}if 3 1 roll
+ exch sub dup 0 lt{pop 0}if setrgbcolor
+}__NXbdef
+/currentcmykcolor{currentrgbcolor 3{1.0 exch sub 3 1 roll}repeat 0}__NXbdef
+/flushgraphics{}def
+/setwindowtype{pop pop}def
+/currentwindowtype{pop 0}def
+/setalpha{pop}def
+/currentalpha{1.0}def
+/hidecursor{}def
+/obscurecursor{}def
+/revealcursor{}def
+/setcursor{4 {pop}repeat}bind def
+/showcursor{}def
+/NextStepEncoding where not{
+/NextStepEncoding StandardEncoding 256 array copy def
+0 [129/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/Ccedilla/Egrave
+/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
+/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/Ugrave/Uacute
+/Ucircumflex/Udieresis/Yacute/Thorn/mu/multiply/divide/copyright
+176/registered 181/brokenbar 190/logicalnot 192/onesuperior 201/twosuperior
+204/threesuperior 209/plusminus/onequarter/onehalf/threequarters/agrave
+/aacute/acircumflex/atilde/adieresis/aring/ccedilla/egrave/eacute
+/ecircumflex/edieresis/igrave 226/iacute 228/icircumflex/idieresis/eth
+/ntilde 236/ograve/oacute/ocircumflex/otilde/odieresis 242/ugrave/uacute
+/ucircumflex 246/udieresis/yacute 252/thorn/ydieresis]
+{dup type /nametype eq
+ {NextStepEncoding 2 index 2 index put pop 1 add}{exch pop}ifelse
+}forall pop
+/NextStepEncoding NextStepEncoding readonly def
+/_NXfstr 128 string dup 0 (_NX) putinterval def
+/findfont{
+ % Because we can never let NextStepEncoding get into
+ % SharedFontDirectory, we cannot reencode a font to NextStepEncoding
+ % if we are in shared mode. So if currentshared is true,
+ % we call the normal findfont and return that
+ /currentshared where {pop currentshared} {false} ifelse
+ {//findfont exec}
+ {dup _NXfstr 3 125 getinterval cvs length 3 add _NXfstr 0 3 -1 roll
+ getinterval cvn exch FontDirectory 2 index known
+ {pop FontDirectory exch get}
+ {//findfont exec dup /Encoding get StandardEncoding eq
+ { dup length dict exch
+ {1 index /FID ne {2 index 3 1 roll put}{pop pop}ifelse}forall
+ dup /Encoding NextStepEncoding put definefont
+ }{exch pop} ifelse
+ }ifelse
+ }ifelse
+}bind def
+}{pop}ifelse
+/_NXProcArray 5 array __NXdef
+/_NXChannels 0 __NXdef
+/_NXTotalBytes 0 __NXdef
+/_NXDoImageOp{
+ 1 index{dup}{1}ifelse /_NXChannels exch store
+ _NXChannels 2 add 2 roll _NXProcArray 0 _NXChannels getinterval astore pop
+ 5 index 4 index mul 2 index{1 sub 8 idiv 1 add mul}{mul 1 sub 8 idiv 1 add}ifelse
+ 4 index mul /_NXTotalBytes exch store pop exch pop
+ gsave matrix invertmatrix concat 0.5 setgray 0 0 4 2 roll rectfill grestore
+ { 0 1 _NXChannels 1 sub{
+ _NXProcArray exch get exec
+ length _NXTotalBytes exch sub /_NXTotalBytes exch store}for
+ _NXTotalBytes 0 le{exit}if
+ }loop /_NXProcArray 5 array def
+}__NXbdef
+/colorimage{_NXDoImageOp}__NXbdef
+/alphaimage{1 add _NXDoImageOp}def
+%%EndDocument
+
+gsave
+-20 -28 translate
+ /__NXbasematrix matrix currentmatrix def
+grestore
+%%EndProlog
+%%BeginSetup
+/DIAGRAMline {
+ moveto rlineto stroke
+} def /DIAGRAMarrow {
+ [] 0 setdash newpath moveto dup rotate 0 currentlinewidth sub 1.2 mul 0 rmoveto -9 3 rlineto 2 -3 rlineto -2 -3 rlineto closepath gsave 0 setlinejoin stroke grestore fill neg rotate
+} def /DIAGRAMpreparelines {
+ /DIAGRAMlinetype exch def setlinewidth setrgbcolor 2 setlinejoin DIAGRAMlinetype 0 eq {
+ [] 0 setdash
+ } if DIAGRAMlinetype 1 eq {
+ [ 5 currentlinewidth add dup ] 0 currentlinewidth add setdash
+ } if DIAGRAMlinetype 2 eq {
+ [ 0 currentlinewidth add 5 currentlinewidth add ] 0 currentlinewidth add setdash
+ } if DIAGRAMlinetype 3 eq {
+ [ 5 currentlinewidth add 4 currentlinewidth add 0 currentlinewidth add 4 currentlinewidth add ] 0 currentlinewidth add setdash
+ } if
+} def
+%%EndSetup
+gsave
+201 314 183 136 rectclip
+gsave
+206.000000 319.000000 transform
+gsave __NXbasematrix setmatrix itransform translate
+<ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc5ffffffffffffffffffffffffffffffffffffff545599bfffffffffffffffffffffffffffffffffffffffffd4fffffffffffffffffffffffffffffffffff5555555555557ffffffffffffffffffffffffffffffffffffffc3fffffffffffffffffffffffffffffffff545454559999999afffffffffffffffffffffffffffffffffffffc2fffffffffffffffffffffffffffffff5555555555555555655affffffffffffffffffffffffffffffffffff0ffffffffffffffffffffffffffffff555459555599999999999affffffffffffffffffffffffffffffffffe4fffffffffffffffffffffffffffff55555555555555555555555afffffffffffffffffffffffffffffffffe5ffffffffffffffffffffffffffff4545455555595959599999999effffffffffffffffffffffffffffffffd0fffffffffffffffffffffffffff555555555555555565656565656bfffffffffffffffffffffffffffffffc0ffffffffffffffffffffffffff5455545555999599959999999999abffffffffffffffffffffffffffffffc0fffffffffffffffffffffffffd555555555555555555555555555556bffffffffffffffffebfffffffffffc0fffffffffffffffffffffffff5454545555959599999999999999999afffffffffffeffffebffeffffffffc0ffffffffffffffffffffffff555555555555555556565656565656565affffffffffebfffabfeaffffffffc0fffffffffffffffffffffff55455545555999999999999999999999999bfffffffffeaffeaffebffffffffc0ffffffffffffffffffffffd555555555555555555555555555555555556bfffffffffaffebffafffffffffc0ffffffffefffffffffffff4545454545595959595999999999999999999afffffffffebfeffebfefffffffc0ffffffafebfafffffffffd55555555555555565556565656565656565656bffffffffebfabfabfabffffffc0ffffffafdbfafffffffff554555455959995599599999999999999999999bffffffffeefaffafeefffffffc0ffffff6fdbf6ffffffffd5555555555555555555555555555555555555556ffffffffeaf6febfebfffffffc0ffffffafdffaffffffff45454545555545595959999999999999999999999fffffffffaf9feffeffffffffc0fffaff6fdbfebffffffd55555555555555555556565656565656565656565affffffffab5babeaffffffffc0fffaffafdbfdfffffff554555455599599999999999999999999999999999affffffffa9575bebffffffffc0fffeafdbdbfdbffffff5555555555555555555555555555555555555555556bfffffff56aaa6afffffffffc0ffffafdfdffebffffff5454555454955595959999999999999999999999999affffffeaeaeaebfffffffffc0ffffdadbf6f6ffffff555555555555555555555656565656565656565656566bfffffaaaaaaabfffffffffc0fffffafafafaffffff545554555459559995999599999999999999999999999bfffff554556aafffffffffc0fffff6b6b5f6fffffd555555555555555555555555555555555555555555555affffe955a96aafffffffffc0fffffd997576fffffd454545455555455959595999999999999999999999999abeaeaead6eaeafffffffffc0ffffff556aaafffff55555555555555555555555565656565656565656565656aaaaaaaa5aaabfffffffffc0ffffff5ae455ffffd45554555895999999999999999999999999999999999999d75556aa5aaaffffffffffc0fffffdaa5aa97fffd555555555555555555555555555555555555555555555556bfea56a9aaaffffffffffc0fffffea94eaebfff454545554545595959595959999999999999999999999999affffd468eafffffffffffc0fffffe96a6aaaaa95555555555555555555556565656565656565656565656565afffea956afffffffffffc0fffffeeaa6eaaae85554955599949995959599999995999999999999999999999afffffc9aefffffffffffc0ffffffaa96a955695555555555555555555555555555555555555555555555555affffff56afffffffffffc0fffffff68e9999954545455949595999595959999999999999999999999999999effffffdaafffffffffffc0fffffff555565ff555555555555555555555555656565656565656565656565656bfffffd6abffffffffffc0fffffff5545ffff55455545595599599999999999999999999999999999999999abffffffaaaffffffffffc0fffffff5567fffd555555555555555555555555555555555555555555555555556bffffff5aaffffffffffc0fffffff55affffd545454949455545595959595999999999999999999999999999affffffdaebfffffffffc0fffffff556ffffd5555555555555555555555656565656565656565656565656566fffffffaaafffffffffc0fffffff45affffd455545554599599959999999999999999999999999999999999afffffff9aabffffffffc0fffffff556ffff55555555555555555555555555555555555555555555555555556fffffffdaabffffffffc0fffffff55affff4545454545495949595959999999999999999999999999999999afffffffdaaeffffffffc0fffffff55affff55555555555555555555565656565656565656565656565656566ffffffff69affffffffc0fffffff59bffff5554555999999959999999999999999999999999999999999999affffffffedabfffffffc0fffffff55bffff555555555555555555555555555555555555555555555556a9556ffffffffd9aafffffffc0fffffff55fffff45454549594559595999999999999999999999999999999e0299abffffffff9eafffffffc0ffffffd66bffff55555555555555555555565656565656565656565656566800966957ffffffdaaaffffffc0ffffffd5abffff5455559594959599959999999999999999999999999999980099aaa99fffffdaeabfffffc0ffffffd5abffff55555555555555555555555555555555555555555555565800156aaaa5fffffaaaafffffc0ffffff49affffff5454e995549595959995959599999999999999999999d500019a6aeaeaeaeaeaeafffffc0ffffff56afffffd55560055555555656565656565656565656565656566600001666aaaaaaaaaa56aaffffc0ffffff59effffea55460059558999999999999999999999999999999999a000019a5eaaaeaaae999aabfffc0ffffff55affeaa55558005555555555555555555555555555555555556580000156555555aaaa555563fffc0fffffd495eae995545800959595959595959999999999999999999999d50000099a545454545457fffffffc0fffffd555655555555800255555555555556565656565656565656566500000056a5555555555fffffffffc0fffff5559994555455c00015999599959999999999999999999999999a00000099e455547fffffffffffffc0fffff555555555555560001555555555555555555555555555555556580000005597ffffffffffffffffffc0fffff54545457ff545600009495959599959599999999999999999ad9000000199bfffffffffffffffffffc0ffffd5555557fff555600000155555555656565656565656565656800000000256bfffffffffffffffffffc0ffffd455fffffffd546000001899999999999999999999999999a80c000000019affffffffffffffffffffc0fffffffffffffffd55580000061555555555555555555555555a95a00000000156ffffffffffffffffffffc0fffffffffffffffd454c000000154559599999999999999999a01980000000099affffffffffffffffffffc0fffffffffffffffd555800000015555555555656565656565a5700000000000657ffffffffffffffffffffc0ffffffffffffffff55580000000ae195999999999999999aa5ae0000000000099bffffffffffffffffffffc0ffffffffffffffff5556000000000155555555555555aaa0057800000000001557ffffffffffffffffffffc0fffffffffffffffff5460000000001ae8945aea99aae454ec1a00000000000199fffffffffffffffffffffc0fffffffffffffffff55580000000002b0555555aa956545f80000000000000565fffffffffffffffffffffc0fffffffffffffffffc5560000000000009eed45554ee809e0000000000000199bfffffffffffffffffffffc0fffffffffffffffffd5560000000000001abb0bb85bb800000000000000001557fffffffffffffffffffffc0ffffffffffffffffff454c0000000000002e01aec1ae00000000000000000999ffffffffffffffffffffffc0ffffffffffffffffffd556000000000000000058000000000000000000001657ffffffffffffffffffffffc0ffffffffffffffffffd455c0000000000000000000000000000000000000999fffffffffffffffffffffffc0fffffffffffffffffff55580000000000000000000000000000000000001555fffffffffffffffffffffffc0fffffffffffffffffff5456000000000000000000000000000000000000999bfffffffffffffffffffffffc0fffffffffffffffffffd555800000000000000000115400000000000001656ffffffffffffffffffffffffc0ffffffffffffffffffff54560000000000004440444444000000000000999bffffffffffffffffffffffffc0ffffffffffffffffffffd55580000000005511540111154000000000015557ffffffffffffffffffffffffc0fffffffffffffffffffff5456000000004444444044444440000000009999fffffffffffffffffffffffffc0fffffffffffffffffffffd555800000011010111410111550000000015567fffffffffffffffffffffffffc0ffffffffffffffffffffff5456c000004444444444444444000000019995ffffffffffffffffffffffffffc0ffffffffffffffffffffffd5556000000000111154001155400000055557ffffffffffffffffffffffffffc0fffffffffffffffffffffff5454e0000444444444444444440000059597fffffffffffffffffffffffffffc0fffffffffffffffffffffffd5555a00101010101114101155400055555ffffffffffffffffffffffffffffc0ffffffffffffffffffffffffd4555a044444444444444444440058999fffffffffffffffffffffffffffffc0fffffffffffffffffffffffff55555500000000111501115540555557fffffffffffffffffffffffffffffc0ffffffffffffffffffffffffff454549044404444444044444455957ffffffffffffffffffffffffffffffc0fffffffffffffffffffffffffff5555555000100011501155555557fffffffffffffffffffffffffffffffc0ffffffffffffffffffffffffffff55545595444444444444444457ffffffffffffffffffffffffffffffffc0ffffffffffffffffffffffffffffd555555554000111511155557fffffffffffffffffffffffffffffffffc0fffffffffffffffffffffffffffffd4545454544444444444444ffffffffffffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffd555555551010115115555ffffffffffffffffffffffffffffffffffc0fffffffffffffffffffffffffffffffd54555455444444444444ffffffffffffffffffffffffffffffffffc0fffffffffffffffffffffffffffffffff5555555501115015555ffffffffffffffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffff5454444444444447fffffffffffffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffffffff101114155555fffffffffffffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffffffff444444444444fffffffffffffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffffffff1111555555557ffffffffffffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffffffff4444444444447ffffffffffffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffffffffd015555555557ffffffffffffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffffffffc444444444447ffffffffffffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffffffffd115555555565ffffffffffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffff444444844487ffffffffffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffff115555555557ffffffffffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffff44444444444fffffffffffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffffd1155555555fffffffffffffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffffffffff444444447ffffffffffffffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffffffffffd115555ffffffffffffffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffffff447fffffffffffffffffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0>
+173
+126
+2
+[1 0 0 -1 0 126]
+ {} image
+grestore
+grestore
+gsave
+0 0 1152 756 rectclip
+[1 0 0 -1 0 756] concat
+grestore
+grestore
+%%Trailer
diff --git a/macros/generic/diagrams/kuvio/doc-src/eps/harebra.eps b/macros/generic/diagrams/kuvio/doc-src/eps/harebra.eps
new file mode 100644
index 0000000000..a872508ae9
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eps/harebra.eps
@@ -0,0 +1,414 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: Harebra.halfsize.tiff - /homes/user/agss/Library/Images
+%%Creator: ImageViewer
+%%CreationDate: Sat Nov 26 18:28:36 1994
+%%For: agss
+%%DocumentFonts: (atend)
+%%Pages: 0 0
+%%BoundingBox: 0 0 240 361
+%%NXNextStepVersion: 3.0
+%%EndComments
+
+%%BeginProcSet: /usr/lib/NextStep/printPackage.ps 3.0
+%!
+% NeXT Printing Package
+% Version: 3.1
+% Copyright: 1988, NeXT, Inc.
+
+/__NXdef{1 index where{pop pop pop}{def}ifelse}bind def
+/__NXbdef{1 index where{pop pop pop}{bind def}ifelse}bind def
+/UserObjects 10 array __NXdef
+/defineuserobject{
+ exch dup 1 add dup UserObjects length gt{
+ array dup 0 UserObjects putinterval
+ /UserObjects exch def
+ }{pop}ifelse UserObjects exch 3 -1 roll put
+}__NXbdef
+/undefineuserobject{UserObjects exch null put}__NXbdef
+/execuserobject{UserObjects exch get exec}__NXbdef
+/__NXRectPath{4 2 roll moveto 1 index 0 rlineto
+0 exch rlineto neg 0 rlineto closepath}__NXbdef
+/__NXProcessRectArgs{
+ 1 index type /arraytype eq{
+ exch 0 4 2 index length 1 sub{
+ dup 3 add 1 exch{1 index exch get exch}for
+ 5 1 roll 5 index exec
+ }for pop pop
+ }{exec}ifelse
+}__NXbdef
+/rectfill{gsave newpath {__NXRectPath fill} __NXProcessRectArgs grestore}__NXbdef
+/rectclip{newpath {__NXRectPath} __NXProcessRectArgs clip newpath}__NXbdef
+/rectstroke{
+ gsave newpath dup type /arraytype eq{dup length 6 eq}{false}ifelse{
+ {gsave __NXRectPath null concat stroke grestore}
+ dup length array cvx copy dup 2 4 -1 roll put __NXProcessRectArgs
+ }{{__NXRectPath stroke} __NXProcessRectArgs}ifelse grestore
+}__NXbdef
+/_NXLevel2 systemdict /languagelevel known {languagelevel 2 ge}{false}ifelse __NXdef
+/xyshow{
+ 0 1 3 index length 1 sub{
+ currentpoint 4 index 3 index 1 getinterval show
+ 3 index 3 index 2 mul 1 add get add exch
+ 3 index 3 index 2 mul get add exch moveto pop
+ }for pop pop
+}__NXbdef
+/xshow{
+ 0 1 3 index length 1 sub{
+ currentpoint 4 index 3 index 1 getinterval show
+ exch 3 index 3 index get add exch moveto pop
+ }for pop pop
+}__NXbdef
+/yshow{
+ 0 1 3 index length 1 sub{
+ currentpoint 4 index 3 index 1 getinterval show
+ 3 index 3 index get add moveto pop
+ }for pop pop
+}__NXbdef
+/arct{arcto pop pop pop pop}__NXbdef
+/setbbox{pop pop pop pop}__NXbdef
+/ucache{}__NXbdef
+/ucachestatus{mark 0 0 0 0 0}__NXbdef
+/setucacheparams{cleartomark}__NXbdef
+/uappend{systemdict begin cvx exec end}__NXbdef
+/ueofill{gsave newpath uappend eofill grestore}__NXbdef
+/ufill{gsave newpath uappend fill grestore}__NXbdef
+/ustroke{
+ gsave newpath dup length 6 eq
+ {exch uappend concat}{uappend}ifelse
+ stroke grestore
+}__NXbdef
+/__NXustrokepathMatrix dup where {pop pop}{matrix def}ifelse
+/ustrokepath{
+ newpath dup length 6 eq{
+ exch uappend __NXustrokepathMatrix currentmatrix exch concat
+ strokepath setmatrix
+ }{uappend strokepath}ifelse
+} __NXbdef
+/upath{
+ [exch {/ucache cvx}if pathbbox /setbbox cvx
+ {/moveto cvx}{/lineto cvx}{/curveto cvx}{/closepath cvx}pathforall]cvx
+} __NXbdef
+/setstrokeadjust{pop}__NXbdef
+/currentstrokeadjust{false}__NXbdef
+/selectfont{exch findfont exch
+dup type /arraytype eq {makefont}{scalefont}ifelse setfont}__NXbdef
+/_NXCombineArrays{
+ counttomark dup 2 add index dup length 3 -1 roll {
+ 2 index length sub dup 4 1 roll 1 index exch 4 -1 roll putinterval exch
+ }repeat pop pop pop
+}__NXbdef
+/flushgraphics{}def
+/setwindowtype{pop pop}def
+/currentwindowtype{pop 0}def
+/setalpha{pop}def
+/currentalpha{1.0}def
+/hidecursor{}def
+/obscurecursor{}def
+/revealcursor{}def
+/setcursor{4 {pop}repeat}bind def
+/showcursor{}def
+/NextStepEncoding where not{
+/NextStepEncoding StandardEncoding 256 array copy def
+0 [129/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/Ccedilla/Egrave
+/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
+/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/Ugrave/Uacute
+/Ucircumflex/Udieresis/Yacute/Thorn/mu/multiply/divide/copyright
+176/registered 181/brokenbar 190/logicalnot 192/onesuperior 201/twosuperior
+204/threesuperior 209/plusminus/onequarter/onehalf/threequarters/agrave
+/aacute/acircumflex/atilde/adieresis/aring/ccedilla/egrave/eacute
+/ecircumflex/edieresis/igrave 226/iacute 228/icircumflex/idieresis/eth
+/ntilde 236/ograve/oacute/ocircumflex/otilde/odieresis 242/ugrave/uacute
+/ucircumflex 246/udieresis/yacute 252/thorn/ydieresis]
+{dup type /nametype eq
+ {NextStepEncoding 2 index 2 index put pop 1 add}{exch pop}ifelse
+}forall pop
+/NextStepEncoding NextStepEncoding readonly def
+/_NXfstr 128 string dup 0 (_NX) putinterval def
+/_NXfindfont /findfont load def
+/findfont{
+ % Because we can never let NextStepEncoding get into
+ % SharedFontDirectory, we cannot reencode a font to NextStepEncoding
+ % if we are in shared mode. So if currentshared is true,
+ % we call the normal findfont and return that
+ /currentshared where {pop currentshared} {false} ifelse
+ {_NXfindfont}
+ {dup _NXfstr 3 125 getinterval cvs length 3 add _NXfstr 0 3 -1 roll
+ getinterval cvn exch FontDirectory 2 index known
+ {pop FontDirectory exch get}
+ {_NXfindfont dup /Encoding get StandardEncoding eq
+ { dup length dict exch
+ {1 index /FID ne {2 index 3 1 roll put}{pop pop}ifelse}forall
+ dup /Encoding NextStepEncoding put definefont
+ }{exch pop} ifelse
+ }ifelse
+ }ifelse
+}bind def
+}{pop}ifelse
+/_NXImageString {/__NXImageString where{pop}{/__NXImageString 4000 string __NXdef}ifelse __NXImageString}__NXbdef
+/_NXDoImageOp{
+ 3 dict begin /parr 5 array def 1 index{dup}{1}ifelse /chans exch def
+ chans 2 add 2 roll parr 0 chans getinterval astore pop
+ 5 index 4 index mul 2 index{1 sub 8 idiv 1 add mul}{mul 1 sub 8 idiv 1 add}ifelse
+ 4 index mul /totbytes exch def pop exch pop
+ gsave matrix invertmatrix concat 0.5 setgray 0 0 4 2 roll rectfill grestore
+ {0 1 chans 1 sub{parr exch get exec length totbytes exch sub /totbytes exch def}for totbytes 0 le{exit}if}loop end
+}__NXbdef
+/alphaimage{1 add _NXDoImageOp}def
+_NXLevel2{
+ /NXCalibratedRGBColorSpace where{pop}{
+ /NXCalibratedRGBColorSpace
+ {mark /NXCalibratedRGB /ColorSpace findresource exch pop}stopped
+ {cleartomark /NXCalibratedRGB[/CIEBasedABC 2 dict dup begin
+ /MatrixLMN[.4124 .2126 .0193 .3576 .7152 .1192 .1805 .0722 .9505]def
+ /WhitePoint[.9505 1 1.089] def end] /ColorSpace defineresource}if def}ifelse
+ /nxsetrgbcolor{NXCalibratedRGBColorSpace setcolorspace setcolor}__NXbdef
+ /nxsetgray{dup dup nxsetrgbcolor}__NXbdef
+ /_NXCalibratedImage{exch{array astore dup length true}{false}ifelse
+ 8 -1 roll{NXCalibratedRGBColorSpace setcolorspace}if
+ 8 dict dup 9 1 roll begin /ImageType 1 def /MultipleDataSources exch def
+ currentcolorspace 0 get /Indexed eq{pop /Decode[0 2 6 index exp 1 sub]def}
+ {2 mul dup array /Decode exch def 1 sub 0 1 3 -1 roll{Decode exch dup 2 mod put}for}ifelse
+ /DataSource exch def /ImageMatrix exch def
+ /BitsPerComponent exch def /Height exch def /Width exch def end image}__NXbdef
+} {
+ /setcmykcolor{
+ 1.0 exch sub dup dup 6 -1 roll sub dup 0 lt{pop 0}if 5 1 roll
+ 4 -1 roll sub dup 0 lt{pop 0}if 3 1 roll exch sub dup 0 lt{pop 0}if setrgbcolor}__NXbdef
+ /currentcmykcolor{currentrgbcolor 3{1.0 exch sub 3 1 roll}repeat 0}__NXbdef
+ /colorimage{2 copy 3 ne or{_NXDoImageOp}{4 index dup 8 ne exch 4 ne and{_NXDoImageOp}{
+ pop pop save 6 1 roll 12 dict begin/Proc exch def/Res 0 string def
+ /Alloc{2 index length mul 2 add dup 2 index load length gt{1.2 mul round cvi string def}{pop pop}ifelse}def
+ 1 index 8 eq{/Unpack{.34 Alloc}def}{
+ /Wid 4 index 3 mul def exch pop 8 exch/Str1 0 string def/Lim Wid def
+ /Unpack{.67 Alloc/Str1 2 Alloc 0 exch Lim exch
+ {dup -4 bitshift 17 mul Str1 exch 4 index exch put 15 and 17 mul Str1 exch 3 index 1 add exch put
+ 2 sub dup 0 le{0 lt Wid exch{exch 1 sub exch}if}if exch 2 add exch
+ }forall/Lim exch def Str1 exch 0 exch getinterval
+ }def
+ }ifelse
+ /Ops[{.3 mul add 1}{.59 mul add 2}{.11 mul add round cvi Res exch 2 index exch put 1 add 0.0 0}]def/Val 0.0 def/Phase 0 def
+ {0 Val Phase Proc/Res Unpack{exch Ops exch get exec}forall/Phase exch def/Val exch def Res exch 0 exch getinterval}
+ image end restore}ifelse}ifelse
+ }__NXbdef
+ /nxsetrgbcolor{setrgbcolor}__NXbdef /nxsetgray{setgray}__NXbdef
+ /setpattern{pop .5 setgray}__NXbdef
+ /_NXCalibratedImage{dup 1 eq {pop pop image}{colorimage}ifelse pop}__NXbdef
+} ifelse
+/_NXSetCMYKOrRGB where{pop}{
+ mark{systemdict /currentwindow get exec}stopped
+ {{pop pop pop setcmykcolor}}{{nxsetrgbcolor pop pop pop pop}}ifelse /_NXSetCMYKOrRGB exch def cleartomark
+}ifelse
+%%EndProcSet
+
+gsave
+-20 -28 translate
+ /__NXbasematrix matrix currentmatrix def
+grestore
+%%EndProlog
+%%BeginSetup
+%%EndSetup
+0 0 240 361 rectclip
+0 0 240 361 rectclip
+0.000000 0.000000 transform
+gsave __NXbasematrix setmatrix itransform translate
+240
+361
+2
+[1 0 0 -1 0 361]
+
+/_NXImageStr0 _NXImageString 0 1140 getinterval def {currentfile _NXImageStr0 readhexstring pop} bind
+%%BeginBinary: 43516
+image
+fffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1fbef9bffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80050003fd00beaf4bffffffffffffffffffffffffffffffffffffffffffffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffdf000197fe0470240fffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc047fffffd003d5ffffffffffffffffffffffffffffffffff59ffffffffffffffffffffffffffffffffc0bffffffffffffffffffffffffffffffffffc007fffffd001fffffffffffffffffffffffffffff
+fffffff0044000002ffffffffffffffffffffffff007ffffffffffffffffffffffffffffffffffc007ffffff001ffffffffffffffffffffffffffffffffffff963c0ffd107fffffffffffffffffffffff083ffffffffffefffffffffffffffffffffff8047fffffe001ffffffffffffffffffffffffffffffffffffff441
+fff410bffffffffffffffffffffff043ffffffffd80bffffffffffffffffffffff4847ffffff001ffffffffffffffffffffffffffffffffffffffd00fffd002ffffffffffffffffffffff213fffffffffe0bffffffffffffffffffffff5807fffffe111ffffffffffffffffffffffffffffffffffffff400ffff081fffff
+fffffffffffffffff103ffffffffffffffffffffffffffffffffff8007ffffff001ffffffffffffffffffffffffffffffffffffff4c0ffff000ffffffffffffffffffffff007fffffffffffffffffffffffdbfffffffff4c47ffffff011ffffffffffffff9fffffffffffffffffffffff500ffff401fffffffffffffffff
+fffff007ffffffffffffffffffffffffbfffffffff440bffffff042ffffffe7fffffe0fe7ffffffffffffffffffff450ffff409ffffffffffffffffffffff00bffffffffffffffffffffffffffffffffff010fffffff003ffffd8802ffffc0f80ffff955fffffffffffff401fffe002ffffdfffffffffffffffff00fffff
+ffffffffffff
+ffffffffffffffffff41d15f8b5f112fffe07f00fffe01e007ff805c2ffffffffffff401fffd003ffff47f6ffffffffffffff00fffffffffffffffffffffffffffffffffff40260ab3c4155fff81ff00ffc0028047fd07fc03fffffffffff802fff405ffffe0f807ffff5efffffff01fffffffffffffffffffffffffffff
+ffffffc00abfa65d221fff02ff04ffe406b807f41fff00fffffffffff4007b501fffff41f103ff01003ffffff44fffffffffffffffffffffffffffffffffff000ffffffe0a2ffc02ff40fffe02fd1fe02fff90bffffffffff0c0541a86ffd003abd3f81fc01ffffff41fffffffffffffffffffffffffffffffffff004fff
+fffd013ffc0bff407fff00bfffd03ebf407ffffffffff041ffe9007ffd023d0bf03fd09ffffff41fffffffffffffffffffffffffffffffffff000ffffffd103fffffff407ffe00ffffc07500003ffffffffff101fffe001fff42bfbfc07fd04ffffff42fffffffffffffffffffffffffffffffffff000ffffffd102fffff
+f4407ffd00ffffc03ffff97ffffffffff042ffff400fff40bfff40ffe00ffffff43fffffffffffffffffffffffffffffffffff401ffffffe142ffffd4740bffd01ffff407ffffffffffffffff101ffffc103ff507fff9bffd04ffffff43fffffffffffffffffffffffffffffffffff400ffffffd003fffe02f407ffd00ff
+ff802ffffffffffffffff002ffffc003ff40ffffffffc00ffffff43fffffffffffffffffffffffffffffffffff800ffffffd003fff80ff40fffd01ffff801ffffffffffffffff0c0ffffd403ff40fffffff4406ffffff83fffffffffffffffffffffffffffffffffff400ffffffe003fff01ff04fffe00ffffc00bffffff
+fffffffff001ffffc007ff60fffffe02d01ffffff43fffffffffffffffffffffffffffffffff7f850ffffffd043ffd01fe00f3fd10ffffc01ffff9bffffffffff101ffffc00bff40fffff41fe01ffffffffffffffffffffffffffffffffffffffffe00b8280ff9b8085ffd01f84043fe00ffffe05cffd07ffffffffff001
+ffff000fff40ffffc43fd41ffffffffffffffffffffffffffffffffffffffffe1051200ff40000003e0c03e50fbd00bffff43a2c08bffffffffff002fffe182fff04ffff4c3fd01ebfffe13fffffffffffffffffffffffffffffffffffffff9ff9ffeff43f001ff02f016400fffd003a0bffffffffc6d0d1ffe000bfff0d
+ffff583f407d7fffc01ffffffffffffffffffffffffffffffffffffffffffffffffffffffff9bfffffe4ffffc0242fffffffff810040500003ffe9003aff44283464bfff454bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6bffffffffffc2ff667856bfff41b900bfc141f801
+ffff80c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01bfd07ffffc40ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02fffff
+ffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff413ffaad5f
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff40f5617bfc1bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0f0e549fe2557a2cd42fffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff95f28f8ef8146fe01ff9bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5078b6df81ff7f417655660fffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcb5d7fb1d6ff4147f7fefbf42ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd4becfd13fef84ebd02be7fff93fffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc07f0f4aff007fffde10a042ff4bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8eacd01fdc3f7fe2d7fff4fd4950bfffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffff80f89dbee43bbad1457fffc2f42f12fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01e3e0d62675fd01d7413f4d87e0206ffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffebffffffffffffffffffffffffffc0bef6275f1d2c35802906155e1f3f507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fc2ff8f8ffcbf7cff4b7fdbff1bff0bffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffbffffffffc00ff1fe4cf5196e94fd2cc155029084a75fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001fffe1bdabdf40459fc0f59c1fe5e441cbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff
+ffffe03effb0fe7bb9c2afd10bf7bc5bf907e6841fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0fbf373f4bfffdfde1fbfff04ff42816daa0affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0b49bfb
+ebfb63c7e0b4fe0ffc1e29f9cbb7513fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffc3997fdfff90b7fbfe56c05c02fc347eb927f74fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1ff4b5dfd79fe1be96f
+d3f8febf85d40440edd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff35b4fd3f0edc5ff43adbfb5588efa829f798d7bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff40a9feb0296fde82412fda02f403fc2
+f35cc3e5bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00f4ffbeff4640bebe60bfd93f81fcb8a1e0f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80b0fe607c0fef9af447a54865fc326772b43cffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8143fe51e66f542aff88529452f5f5c356b42cfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffffff5027dd0796de47bf53dfc9582707906ddd46ebfffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3ffffffff900d01a40b6e0f37100a3b32bf85552fe93fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc03fffffffffefff90000edf20fff97f111e0f676fb80bfffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffeffffffffff80ffffffffffffffffff94174fe692431784b831f2363fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffb500510e603fbfc780b873c3fffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09b6ab92d0eb0c7260683fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02191f9e03608b0b3723fffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff00f802f3741ac073636ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff42c3c863c45f4e3438bffffffffffffffffffffffffffffffffff957fffffffffffffffffffffff
+ffffffffffff
+ffffffffffffffffffffffffffffff1c2cffc047705781c7ffffffffffffffffffffffffffffffffe05551ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff24bdb57442582da1d7fffffffffffffffffffffffffffffffe4117f92fffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff2c24107dd2ec4cf1d3ffffffffffffffffffffffffffffffcc16941826ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4b684018d3d200f4e3fffffffffffffffffffffffffffffc10fffff51dffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffe2c1d078c8d764b043ffffffffffffffffffffffffffffe2cbfd117ff6effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff47c847c2c02d550e3ffffffffffffffffffffffffffff8ab901571ff9cbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc2e0f
+0bb40e4bd4e1fffffffffffffffffffffffffffe30407ffda9fcf8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff07c178240fc201e1ffffffffffffffffffffffffffe05a7bf941752e3d2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2f03c2d0541e1f0
+7fffffffffffffffffffffffffcbb02f41fffd676f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4341e5450f401f17fffffffffffffffffffffffff0b0ab42d300bfedad3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0c03f06d7029d07fffffffffff
+fffffffffffffc28fd05ffffd1fffeb4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc2f03f089633ddc3ffffffffffffffffffffffff153e17c87c2d53fec2c3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0b84ac320054dc2fffffffffffffffffffffff
+c81fc7d16f8bffcbfe1f2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff43f02ed4301dd81fffffffffffffffffffffff24f41e1f43afff8a3f82e7ffffffffffffffffffffffffffffffffffffffffffffffffbfffffffffffc0f8000ff40c740fffffffffffffffffffffffe0e650f60bff
+fff2efd266fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff07c0d9c604e334ffffffffffffffffffffffc887ecf42fd10bff9f6e05cfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82f0dd1dc7b4387fffffffffffffffffffff09cf9cc7ff9be7e7f7c7ccdbf
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7b01074d02fa0bfffffffffffffffffffffdf8f780bff83eb85ffc1fe43ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3f83d97d005d0bffffffffffffffffffffd200fd1ffffffffff2fe46f66fffffffffffff
+ffffffffffff
+fffffffffffffffffffffffffffffffffffe0bd0d175ec1d0fffffffffffffffffffffc2fed1fd1e1ffffffc7fe4ccdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff07e0f008f81f0fffffffffffffffffffff0fff47d1bfdfffaffff45ecb3fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffc7f49a1cd11e0ffffffffffffffffffffd2ac52e1f93dfff02ff3f5ff247ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1fc0f44440f0dfffffffffffffffffffcbf2cfcf19bff90f87f3fd0fccaffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff80fd02e4811c07fffffffffffffffffff0ff72e1bafffff97f9f03f92d64ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03e00c2cb3c03fffffffffffffffffff2fbf7470ffffffffffabcfdcb067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fc1f401fd27c03ffffffffffffffffffd757d07c2f97ffffffff6e2af387ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed1fac0c457815ffffffffffffffffff8e7742f1f91bfffffffe9f08fac0dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fed0a35f4
+2dffffffffffffffffff0fd51bd2faff8ff02fe9bf90b9e64bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd06e40605a829fffffffffffffffffe37ddde06f52beff657f78ffcf076e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc55f00541fe05ffffffffff
+fffffffc0f839cb946ffe16ffe3be1bcbb2dc2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe42fc1d03cc1cfffffffffffffffffc2f4b7a15bffffdd0bf1af8be0b8064fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe53be1fc1c704fffffffffffffffff43d3f
+02bfe90fffff6fd0fe2fe1ed7b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff70ff03e2aa08ffffffffffffffffe0b4fc1ffd06ffffff47ec1fc37c0f5c3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff24bf85f0364d7fffffffffffffffd1f2d0ff80bfffc03f
+c1e74677fe37892fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff403fc0e1380f3fffffffffffffffc0fbc3fc2f1ffffffff01fd13f2aa0f34fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9f47f0f127cf3fffffffffffffff81fec7e1dff5fff7fff6b2f1cf8ee1
+b34bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe67ff8a00bc03fffffffffffffff19da1f8b0f963ff6cfffac6e0fd73fa2a7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe008fd00f2743ffffffffffffffd3c267ca0683ff54fe3ffff87c7f3bdfaf7ffffffff
+ffffffffffff
+fffffffffffffffffffffffffffffffffffffffa9ffe00f2795ffffffffffffffcbfe2fc0f4bfffe21b8fffff0f1f0fdf874fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01bff20f3bddffffffffffffff4f3c2e0f863fffffffc3fffbe1d0cccf47cffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffff6530f60405ddffffffffffffff1f646cbc1bfe18bfffe1fffebd1cb8cfd3c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff033dfc238aecffffffffffffff1e437a81e141e51f83f87f7d7f9f1d4b81d3fffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffd907fd238afcfffffffffffffd0fdf1f32ffeffff696ff2fbf3fffcf07e172ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe071ff07d4fdfffffffffffffca30f011ffc15d56a50bf8fff5ff3c791f3f4fffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffd1f1f42c1cdfffffffffffff84078e67e51ffc0597e3fe3fffff3a7f1febdbffffffffffffffffffffffffffffffffffffffffffffffffffffffffff405a348b5c5fffffffffffff2c0f1f7f001f94bffd74ff53fd6b84bd4f8193fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe51fff8f1
+c74fffffffffffff3c7f787d07d4094af721ffdbff23cc7de347aafffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ea7ffc010b4fffffffffffff74fbf0442ffd1df00e191ff3ff90db6cb3c8f0fffffffffffffffffffffffffffffffffffffffffffffffffffffffff80507fd17410fffffffff
+fffe10ef2842d40f8d561f7363d26fd563c8bfecb0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ac4ff03b54ffffffffffffd075c712c16d2d40481742cb17fd611f7a0da383fffffffffffffffffffffffffffffffffffffffffffffffffffffffff5584ff4510f7fffffffffff4c764d0ff
+e6f4c787e52b4b683fcd42f233153d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff81adbf4509d7fffffffffff1cf1e47fee550075ff802f0ce4bc4d7b32f9f0cfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5717fc21d83fffffffffff0bf3c2e40ff062e4bec2c
+3eaf47f1d17f37c3e98ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80e3fc7cc33ffffffffffd0ba10b83ffe087e13ff0b1f3fb2f4f66f72f15f6bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb4fd3c077ffffffffffc0f003fffe407c0fefffc347bfb01dbe07
+bcf0a733fffffffffffffffffffffffffffffffffffffffffffffffffffffffff87fdbf2c573ffffffffff8dfc0ffd76482f6fffffe3401e1f9f1be3fdb3f297ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff557ff04f47ffffffffff195c3ff4b807c3fffffff80f7d3c635696cba670f9ffff
+ffffffffffff
+fffffffffffffffffffffffffffffffffffffffffe7d0bf5ca1bfffffffffd1f40bfd3b04ffafffffffe02fdb63fd9c8e2d434fcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffe5743f82f3dfffffffffc0f02ff0f02efffffffffff4134f31addd4bdf870597fffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffff57bfc0a69fffffffffc0d03f83e2c2ffffffffffff3a4398051f3107c71223fffffffffffffffffffffffffffffffffffffffffffffffffffffffff425ffd43c6fffffffff8a28be2e07f5ffffffffffff85d2ce273f51dbd33a36fffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffd0fd734bfffffffff0a10f8f8001ffffffffffffff0d8b70b3fcbe5722835fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1c2ff0b02fffffffff0d01e3e13ffffffffffffffffc3f3f217f4ed7b81c7cfffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffff8a8ff1f7dffffffffd0807ce4e2ffffffffffffffffe3a8bd4130af39dcf7efffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2c3f039cffffffffc280ffc51c7ffffffffffffffff74874f0f73b40c06ecbffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9faf
+470dffffffff96c1ffce2ffffffffffffffffff80732347ab7b0b11dd7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdb0f4285ffffffff77c2ffc4abfffffffffffffffffedfe2347fc6b67519ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff80f7ffffffff
+6b87ff57bbffffffffffffffffff55743c3ec39fbe1dfeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc2fcd57ffffffff3602fd03ffffffffffffffffffff62830e14e5c7839c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1afcf04fbfffffc4d67e50fffff
+ffffffffffffffffcbd22f15fac0c3c18bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc5fc74af779ddf5dccfe47fffffffffffffffffffffd2e0e399f2c887c3cbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81bc2476011ccf4c9bfe07fffffffffffffffff
+fffff00beb9c37d10be38c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd2fcd37d2df00e2e37b43bffffffffffffffffffffff8797f0db0e5c3b00d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe4e6d577c70e99074fc6f47ffffffffffffffffffffffc20e6c8
+b5b7c134073fffffffffffffffffffffffffffffffffffffffffffffffffffffffff80f2b477f1906d87ab02dffffffffffffebffffffffffd02e1d2593bc306c77fffffffffffffffffffffffffffffffffffffffffffffffffffffffe20cf324414fdb7cca1abffffffffffffffebfffffffffff0662ce6493370bd7ef
+ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffeaa93fca59cacf3e11bffffc7fffffffffffffffffffffffc2081175cc358d73cffffffffffffffffffffffffffffffffffffffffffffffffffffffffad507d343820e24ebfffffaffffffffffffffffffffffffd0bc3437ea354be0cbffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffe1dfe3ee477b1e7c2fff96f8bffffffffffffffffffffffff0ee0439f758124867fffffffffffffffffffffffffffffffffffffffffffffffffffff4660bff0f47e9ff3c3ff864927ffffffffffffffffffffffff40fed7cb41f743af3ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffc3ffd0ffcd03fdff28ffc2fef83ffffffffffffffffffffffff90b6e7c0707381e72ffffffffffffffffffffffffffffffffffffffffffffffffffff3ffff82fcd637fd03dff0fffff0ffffffffffffffffffffffffc816cc0d74b1c8b76ffffffffffffffffffffffffffffffffffffffffffffffff
+fffdbffffe8fcbb4c35fa6fc2fffffc7ffffffffffffffffffffffff91e4c10f4bcffbf6fffffffffffffffffffffffffffffffffffffffffffffffffffcfffffc87f39fc76ed3fd5fffffd7ffffffffffffffffffffffffc0f9714166d0fb90fffffffffffffffffffffffffffffffffffffffffffffffffff8fffffa0b
+f1d8bf8bfbe68bffff83fffffffffffffffffffffffff02bb34cb6d0bff0bffffffffffffffffffffffffffffffffffffffffffffffffff07ffff883f5f84bdbcbdb2ffff436fffffffffffffffffffffffff838b18e13630fe07fffffffffffffffffffffffffffffffffffffffffffffffffc38fffffb7f47e636bdfde
+3fffd1b8ffffffffffffffffffffffffff0e74cf0361ffa03fffffffffffffffffffffffffffffffffffffffffffffffffcfd3ffff77fc7fbc3fdfdd7ffe1ff4ffffffffffffffffffffffffff819d8e4759ff502fffffffffffffffffffffffffffffffffffffffffffffffffcfd0bf7ff7fcd71c77efdcfff41fbcffff
+ffffffffffffffffffffffe0e01e13cebf795fffffffffffffffffffffffffffffffffffffffffffffffff5fd8015053fd9f3f665fcd1d013d7cfffffffffffffffffffffffffff4267743fdbf015fffffffffffffffffffffffffffffffffffffffffffffffff6fd503f7c1fc6f6fb6efc8bd0a81b8ffffffffffffffff
+fffffffffffd5333d00ba2851fffffffffffffffffffffffffffffffffffffffffffffffff5fe042d7d7fc2f324ecfd1ff0438fdbfffffffffffffffffffffffffff6b06f9bfff940fffffffffffffffffffffffffffffffffffffffffffffffff6ff9d58fdbfd3fb86fffe6ffd6fafeffffffffffffffffffffffffffff
+e7b2aff4ff6b8fffffffffffffffffffffffffffffffffffffffffffffffff6ffc16ff8ffd7bff1fe7fdfffd8ffdfffffffffffffffffffffffffffffdee1ffaf8023fffffffffffffffffffffffffffffffffffffffffffffffff4fff92ff0fd480be2e5bfcbffceffcfffffffffffffffffffffffffffffe3340f3b659
+0fffffffffff
+ffffffffffffffffffffffffffffffffffffff82ff7ffd3fe1f7d8ef76f43ffffff8bfffffffffffffffffffffffffffff880bf982b00fffffffffffffffffffffffffffffffffffffffffffffffffe0bffffcbff3f7d7877afd5fffffe342fffffffffffffffffffffffffffff40f8ce3a20fffffffffffffffffffffff
+ffffffffffffffffffffffffffec1bbfa1ffd3e3d06ef4bf8ffffe5b85fffffffffffffffffffffffffffffe0b05f3a01ffffffffffffffffffffffffffffffffffffffffffffffffecb401602ffd7cff91cf83fc1fd40bf4fffffffffffffffffffffffffffffffd180f0701fffffffffffffffffffffffffffffffffff
+fffffffffffffdf3fc6403ff8fcca06ffc2fc010a8cf8cfffffffffffffffffffffffffffffffc04f0803fffffffffffffffffffffffffffffffffffffffffffffffcddbf9e2f1fbce6ccd7f5cb7cdf7fe16fcffffffffffffffffffffffffffffffff50cb4c3fffffffffffffffffffffffffffffffffffffffffffffff
+fcdd2ffffef7847f1d7fe4f75dfffff8bbfffffffffffffffffffffffffffffffff903d4bffffffffffffffffffffffffffffffffffffffffffffffff05cfffffdd8103a84ddfffb3dffffecb8ffffffffffffffffffffffffffffffffffa042fffffffffffffffffffffffffffffffffffffffffffffffff212fffffccb
+f306d1f8d7d239ffaffe1fffffffffffffffffffffffffffffffffffff5ffffffffffffffffffffffffffffffffffffffffffffffffff317fc1ff1d7fb1bf5fcdff977ff07fd9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd757f802f2dfbd07c5f2fffe
+f3ffc2fd9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5d7f07ff1fe2f42c163f8ff73ffd5fc56ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcdd7e07ff1ff8b89c0abe1ffe3ff47fcd5ff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4ddbe13ffcffe0be007f4bf349ff27fdafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffddcffc3ff53ffe1fe6946ff42ffe2ff8bffffffcbfffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8fff0ffe1fffdfff97ffe5fffc7ff5116ffff4bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9fff4bff4bfffffbffffd7fff4fff677a01103ffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9fffc7ff90bffff3ffffffffd1ffc377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff807fff2fff47ffff3ffffffff85ffd077ffffffffffffffffffffffffffffffffffffff
+ffffffffffff
+ffffffffffffffffffffffffffffffffffff464ffff4fffeffffd7fffffffe2fff5d02fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6ecfcffc2fffffffc3ffffff903ffd3b1cafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffe1fdc08fff4ad55b6580057fef0ffffe3b0dc2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcbfe4b6ffffd7a9b5587f543803ffff717dde22fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffe0ffc8772fffd7fff04abfffffe3fc3f712ccfe82ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fd1f311febd7fff65bfffffff6fd077368bbff9003fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffffffffffff
+0bb826c83dffffffb7ffffff5fd637340b7ffff9bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83ff450af3cffffff37ffffff5fc79b2cc3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffe1e1bb1cff
+ffff33ffffffcbc3cb8defd7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83ff8aa7031dffffff33ffffffc1f1d1dd1ef3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1fff2f42f321ffffff33ffffff
+c0b2d59f1d15fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3ffc7f2f6b71fffffff3ffffffd023ee3354072ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0fff8fc7f9731fffffff3ffffffd0d49e357047
+43bf5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3fff2f8fe0a14ffffffb7ffffffd1f81b0d34b3fb514fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffe3f2ffe98cfffffff7ffffffd056cbdf3da1fcffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7e3ffffcdbffffff7ffffffc1c3cf4b5f00a8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfd7ffff1d7ffffff1ffffffd4c68263cd06075fbfffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4fcffdb87d7ffffff1ffffffc3438471de4683cd6fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f8ffdfd9f7ffffff1ffffffc3f3caf551c162c7ffffffffffffffffffffffffffffffff
+ffffffffffff
+ffffffffffffffffffffffffffffffffffff3f5fffdb4a1ffffff3bfffff8722ccf2b1d0701d3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3f2ffe0f4ea2ffffd31fffff233dc9f67cc0b88b3cbfffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffd7f3fd1ec1ff81a6ec7803502ba39ddf97c1e3c436e6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcff7fe3f57ffc042d02f8c3e7781ccc7d13bf9e0015ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffff5fd7fefc33270712f42e0f2d720f7fcbd9d3de703891feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6fdbf5d0efad23653c3f8d0d2d1f1acb9ce38e3e2def5d0bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3
+fcffa739c65337fbef3fb3fff1eccd78c92cc06801f2af9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7fcffe973dcb337f7fd3f737cf1cddc6c738450f8140bdf92ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffcffc0be8b7d
+77ffbc7e975cf5ebc58db281fd6cd0a2bffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3ffdff136dcdbdbfff7d7fe7ceb677d2c9f1f02e0c11d687c6fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ff4ffdbb94c9e33fe7dbffbbb
+3373d6d2f4170f1e3cc3f0b4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcbff5ff9ce3a967738ffff2f77f2bb3bd70be87dacf0e61c1c2f4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4fff5ff3ac0b1fcb74bfef7f7efbb5dfff07fcd
+f8d7e7f400f87feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1fff5fe67e263f8db1ff7fbf2eef3d9fde42fc5fd3b36e71c2c3d2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfccccfca758f1bfffbf5beb9f9fdc8afc3e73056029d00
+3f8bfffffffffffffffffffffffffffefffffffffffffffffffffffffffffffffffffffffdff599b4d353953ffdbf9bfecbcbfcf6ff373a89be9f4d41bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdff37f11c6f2f8bcf5f7ef7ce3f3fd7cfb57910d9c4bc3c60bfffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffcbe24ccf9f5f6f2fbdf7ff3f3fd7db3c3e109dc3c12d6d2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ff8fc3cddfdf6d7f3b7dff7d7f7ffff3de0b4701d8a3438b40ffffffffffffffffffff
+ffffffffffff
+fffffffffffffffffffffffffffffffffffff5ffa58b26bddf3cfffb2ef37ee37f2cf8db66d342ee13b2d6473ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9ffe37b73f3febdffbf6ef36df7ff4cfd72d8d3f0db8078fc1d13ffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffff5ffd73a7bb37dfeff7f3ebf9ed77fcffd3dccd3f8d7ca3c6feb0b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5ffcabcff1b3df7ff6f3fffecc77fcffd7d5cf1ec93cf2f62f147afffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffedecfdee7ff3fd5d7fffdfc77fd7edcf5cb5c8e2cf0ff8f063feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe4c99dfd7ff3de7d7fffdfdf7fe3decf5e7dd3e2f359fd3c90bcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffff2ce5dfdffebaf7d6ff7dfdf7ff3d9db67fdd2f3f0787f2d502dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ef3dccefefbf3d6dbfdbdb7ff9d8dfb7b1e0b4fc78bf5fc987bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f73ebd
+dfdfff3cfdffe3eb7bf4ecffbc35b815dd7d3f8fc2f2b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7d71c79ff6fff7dfdfff3ff7b79fcdf9d4d687ce5bb7b47c3f0b3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ce2ff75b3bbd7cfcfb
+73bf37bcbceefd57b13c70c2b445f8407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9e7ae3b7f87fbffcf73f3f3bfc3cfcf261b01cb4847ddcfc470fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff29d2c2f3fcbdffdffb773f77fd5dda
+70f02c8ced80fcfa3fc107fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe38df05ffeefdffdfff771ffbfd9fdf30f18d8ce2cdffff1bf0a0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd79cf2f4faffcafffff7b57f7cdcfff30c5cd5431dd
+5bff2ffb3dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff36c93dbfbbffdfffff6f37f3cddfbdb0ccc99338e5a74f29db802fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff479c70ff7bfbdffbff8739f7cee7bdb5ccb2638e7f7f3f02c7ce0b
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff173d7ae9a3f397dbffdb9cf7cffbb866c623e9c333bfcb4fee7f63fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd367857d1d7ffe75bf3df5dffc7b3717663b0fcf396fa87b9f11263ffffffffffff
+ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff39f857705f33dbcfe3bfffffd7b7f333b374f84ffcb68ffe435a40bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff24f4cf612fb2ffdfcbbfdbf57366f3766435b5c4fd3fc5712bffffbfffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff579c8d5bfef55fdfcffecff573a5e33c463225f06f2cdd00fe507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb2f95b0fbf40fdfebfdfffd73dfc71d306320f05d3a6c0be45bf6e7ffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffff339a8f5e3f17ffff7fddf1ff19fcb4d323735f49d372c7d0bffd403ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff39bdfbc27effdffbf5cf0f788fcb4c739714e06e29c3feffe91b491fffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffe3ca5efdefd7ffff7f5cfe734efc99c4dc367e20f2e8bfdffd1fe540bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3cbfce4ff0efdff7f5df7774df57495183d3e33a3d5f06f1010ff413fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7de9
+1d9fd0ffdff7f5ed7f6dbf935d31e3e7e1fc5d2f04a7f7f6ff60fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4fdddffc0ffffe7f5eb376d7f577619e22fbac8ecb9ffbffffe5fc92fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd2fff85fd23fefd5
+b9efb77d7fdaf3cce11678c5d287ffffffffc1fc0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc7ffe15ff53fd7edf6fbfb6d7fd9ffdde36bf8ef996fdfe2a35bc9fe0effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcbffcb0ff42fd7fdf5f76fdd7fdc
+ffc0d3ee5cfd3a7f3b2453c1debf47ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9fdf8f6c323feffcb66e7bd13fbc7dccf38e9e7d2ebf233ebbb98d7966bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024fff3db77ffffef6bf5f51bf3c3e9d322fde7c
+37ffff0fd747cf7e32effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0afff93eff0ff7fff7be7e78ffffaf9f387bde70fff9bfeb73b49f1f34effffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81efff5ffbf0ff6fffffbbc39ff4fefff2dbfd6107fd54273722f
+847f8fbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff51d37ff9bb70ff5fefbfbbd17ff2bffffc63f9fc2ff9ff591f346f46eeb5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd1db4ff5fff4ff2fefafffcefff379fffd73b6707ebdb19b8bf28ed3c92cfffff
+ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffa81dfe3f8f5f7ff5ef7efffdfffc77ffffff6ff01f8f1ffb1f5f9a1f9f3cebffffffffffffffffffffffffffffffffffffffffffffffffffffffffff705da3ffcf3f67f2be7fa3fffffff7ffffff9ff43f7eae5f6f0be9c7df8dbfffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffea03e02ffef3f27fbfdbe4fffffa7e7ffffffdbf83affff52b3f3dd71dfcf13fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd17403ffff3c37fd37fdbffff3579bffffffd3287f7f3f6e061782ac984f21ffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffb8b160effe6767ea117fbfff7da974ffffffff37479278fff61bf5fcc4e4f343ffffffffffffffffffffffffffffffffffffffffffffffffffffffff34b070dfffba9fd430fb7ffda0f6fcffffffffaf1fdfff17ffe3f3784a3d7743fffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffe7e1201ffffff8fcbf5fbffd9c3f27fffffffffff01f495eb1039f76e035d2d9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffdcd03b0ffffff0bb7febff386c3e97fffffffffe51babd4bfe3c8fb4f19ef4e43fffffffffffffffffffffffffffffffffffffffffffffffffffffffa6c021ef
+fffff93f7bfbeb33745ccfffffff7ffd537995e4ff3b336267cee6f85fffffffffffffffffffffffffffffffffffffffffffffffffffffff37e076bfffffffbe5b3ece73774cfffffffffffd53fff5762fb15762afdd9394dbfffffffffffffffffffffffffffffffffffffffffffffffffffffd7913b03ffffffcafaf63
+cdf1b235bffffffffffe93fa6fd8cf1d43b84c9751ccf7fffffffffffffffffffffffffffffffffffffffffffffffffffffcf018017ffffffa3cfe1d9ed0aa737f7ffffffffff00588fe77edc84e61ff72dd77ffffffffffffffffffffffffffffffffffffffffffffffffffffffd43c47fffffffe76ad763cd9c7766f3f
+ffffffffd47e8d3f25e5ec7b32fc30dbbbfffffffffffffffffffffffffffffffffffffffffffffffffffffb14e4dbfffffffdd7a02becccdf116f7fffffffffd0eb2f7f5ef7953b737c3ba7f6ffffffffffffffffffffffffffffffffffffffffffffffffffffdb1ce0cbfffffffdfbf026dcacae153d5fffffffffe0ef
+1fffcfff773375fd87b759ffffffffffffffffffffffffffffffffffffffffffffffffffffce7d51cffffffff3ffa2f2afde0d893edd7fffffdfd0d787ffcffd773bb7fdc3f3fdffffffffffffffffffffffffffffffffffffffffffffffffffff9ced056fffffffe3ffc1dbbf4f57cd39ddffffffffe0c779ff97fcf72f
+f9fcc7f5fcffffffffffffffffffffffffffffffffffffffffffffffffffff385c423ffffffffdbde02fff8f169c75ccfffffffff07f7dffd5fef3dcfdfdc3fffbfffffffffffffffffffffffffffffffffffffffffffffffffffcb3f6477fffffffe3fdc0bfffdb982c35cdfffffffff29bfffee8bff3c1f2fec1fffbff
+ffffffffffff
+fffffffffffffffffffffffffffffffffffffdf77fe6bfffffffc7f14dffffd59efe38ffd7fffffff0e7fffefe2db7c1d3fdcceffffffffffffffffffffffffffffffffffffffffffffffffffffff9cb395effffffff72e05dfeffe5deff7cecefffffffd3dceffaff6ef7ecf3fcc9effbffffffffffffffffffffffffff
+fffffffffffffffffffffffff3be006fffffffffa94011fffff4dc773e8cefecffffe2fd9bfbff3ff994f7fcd1ffffffffffffffffffffffffffffffffffffffffffffffffffffffe37cdcffffffffff3f7133fffff1dcf39ca9efcdfffff1fd5fffef3f7d7c70bdb9cfbbffffffffffffffffffffffffffffffffffffff
+ffffffffffffdb3dc1fffffffff57f0077ffbffdcc97d9ebefcde1fff1ed5aff5f3ebd7d75bd7c7f57ffffffffffffffffffffffffffffffffffffffffffffffffff8f74037fffffffb69f2497fffebefdc69cdea7ce48fdb1d765fffe7dbd7eb0f97d1f7fffffffffffffffffffffffffffffffffffffffffffffffffff
+2d3c57ffffffff6bdf53fffffebffd96efea338f8dfdb6abf6fef698fd7dd0f4bd2f7ffffffffffffffffffffffffffffffffffffffffffffffffffd7f6ccffffffffd830fc7fffffffffdf3ceb62b4f5d3ff5fff37377e2eb7dd3f6ed3ffffffffffffffffffffffffffffffffffffffffffffffffffffcab6c2fffffff
+fcff2fc7ffffff7ffff2dd735d5f576ff53f6f33fee3ebbed7c2ec773ffffffffffffffffffffffffffffffffffffffffffffffffff5379e3fffffffff3f0f4bffffff1d7ffccd739dd7775fb43f5f70fce3fdb5d7d3d8ab7ffffffffffffffffffffffffffffffffffffffffffffffffff3bffbbffffffffe7d022fffff
+ff0f7fffcf75cccc739ff87fcfb47ed7fdf6d383e1d3eabfffffffffffffffffffffffffffffffffffffffffffffffd7dc41fffffffffcbfc61fffffff267ff5c5b5c9dd73effc9acff5bbc69dcbe3a3f2c6977fffffffffffffffffffffffffffffffffffffffffffffff8fe9c2ffffffffe0bfc44fffffff357ff3c5fc
+c6e675fffd55d2fc23c95fced1cfe3dedf3fffffffffffffffffffffffffffffffffffffffffffffff5ffac7fffffffff3ffd03fffffff4b2fffc5fd943b7dffce1cf0fc33803fcdc4ced3bbcb2affffffffffffffffffffffffffffffffffffffffffffff3f534bffffffff83e6447fffffffc7dfffce2d594b7cff595c
+f4fd774c374fd5ddc7374bf6fffffffffffffffffffffffffffffffffffffffffffffdbf172fffffffff27c14c7fffffffcacd7f8f0f1dc33cf1cf9d7cbc7a6d07dbc269f773fffffffffffffffffffffffffffffffffffffffffffffffff8ff743ffffffffd3e3fc0ffffffffc84a7f572b6cd61df26ecffc7d3f5d1ed7
+cb79cb26fff83ffffffffffffffffffffffffffffffffffffffffffff17f11fffffffff87d1f82ffffffffc13fce77e37ddd8d57658ffc3e2a9d2ec39f3d0e57ff83ffffffffffffffffffffffffffffffffffffffffffffc6ff03fffffffff33f8f03ffffffffc53f4e5bf3a8e5cf4dec5bfd3f42acef8f2e7e3ddbffaf
+ffffffffffff
+ffffffffffffffffffefffffbfffffff8ffcd7ffffffffdb3f1843ffffffffd7103f9ff991a4d77df817fd2f42c89d8f3ce73ddf7fff5fffffffffffffffffffffffffffffeffff96dfe9ffe2ffd8fffffffffcc7ffa6ffffffffff7061c59fcd544e03e4f23ff1fc1dc3cdd32f8fcef3fff1fffffffffffffffffffffff
+fffffffffffffffff6fcbfe02fffffffff88ff5f3fffffffffd03f4e58f0fa15b11d0731ff0fe2d86d4b1376fcdc37fd5bfffffffffffffffffffffffffffffffffffffffff29ed0ffffffffff21d9583fffffffffd13f455fb2ff25774e9341ef8ff509fd034371ad3877f9c7ffffffffffffffffffffffffffffffffff
+ffffffc63fc1ffffffffffa6f9d0ffffffffffe03f43ed3ffa63334d53c1cfd2f8011ed605935d7877ffc2ffffffffffffffffffffffffffffffffffffffff5affcbfffff96040dcec44fffffffffff00b41ff3ff673389c56c5fff1fc75becd27c2ddf483ffabfffffffffffffffffffffffffffffffffffffff838bb83
+fff417fff65c9c12dffffffffff00f403fbff5552c5a74c07fd1fe10204d13c755f003ffffffffffffffffffffffffffffffffffffffffffe0b8d70bff82bffff37fef43dabfbffffff47b0c3fffffc764d7a9d07ff4ff4a071873cf77f047ffcfffffffffffffffffffffffffffffffffffffff0be3d63ff82fffffdb3e
+eb0bffffd5dffffc01bc3fffffd1a4f0de78bff46fc1d734fbcf33d707fff7fffbfffffffffffffffffffffffffffffffff07f8f217fe0bfffffcd7dc71f7ffffffff5983f003fffffc2d1b1db2c1ffc07d0df34f35c73c00fffdbffd7fffffffffffffffffffffffffffffffe43fe3f34bf47ffff4f6875c73ebfffffff
+fd5965a034ff9fc3c47943383fffc7f04f34f62cf74a1fff8fffffffffffffffffffffffffd4f67babfd449fe4bf02fd3ff9fc3f7179d2aff7fffbfff6f601b025ff8fd3d7bbb3a13ffb82f4c718783ddb483ffe0fffffffffffffffffffffff8057825597813ff916fd57f0fff6c1fcf7bef1cbe7fff9a9bfd76c8041ff
+ffffb375f3f037ffd0bc85107c91dfd0fffc0ffffffffffffffffffffffc2f547fffd5ff2f41fff8d7d3fffe0bf8cfb5a72ff7ebc1f066d0040d82fffffff368e340b67fe87f26b1fcf5cd41fff51fffffffffffffffffffffe1d05b911d997d107fcff6cf8ebff47ff28ffdd1bff1defff1ba5fffe06ffffffff57cc781
+fa27f57fc06530ecde42ffeb3fffffffffffffffffffff8b13fe2dd3d1d17cfffa736f2dffa0bfc6b974d0feb5f827fffffe17eb43fffffffd94cfc0ff8ff33fc00f32ecd04ffff93ffffbfffffffffffffffe2db36cbb8e2f4be1faf1323d78fb02ff4df740d3e621fbfffff5402391f1417ffffc78c950ffd7f30ff71a
+42a9c13fffc0fffff7fffffffffffffffd7fd07e3b6fff283bd2a0d6b8f3ee0fed3cf36c0b4fb2efffff95ff9f9561fd43ffff2c502efbe7ff4ff026d837c0bfff02fffff7fffffffffffffffc6284f8b3bffd2af28a03c3f5d0dd3fc4bceb3ddc6fffbffffe24ff70be2fffe08fffa920b8ffbcffcbf41d89b446fffc63
+fffff7ffffff
+fffffffffdfeb6eafbb785fffc3c9f87f39fee1e4978cf7cf6d8e4bf649407f46666568002d1fff707f2f7fdffc3ed203cf02ffff28ffffff7fffffffffffffff5d94baffffe2fffbf4dfc2fd2b7a0a67ed39d5cb9c02bfff34fffffaf84afd70ba50113fffff7feffc48f21bc00ffffeb2ffffffffffffffffffffff6f3
+5e6ff6d3ffff7f7ff83ff411b881fe0f3e3df060bffff742ffffd426917fae3fda50180093ffffc8ef007c2ffffff87ffffffbfffffffffffffff7813f3fb5cbfffd7efdc0bfff90f82afd2d783e91a2ffdf81c43ff817ff4e02ff014574fafc1bffffc49b7451fffbffe2ffffffebfffffffffffffff694bcb80f8ffff9
+fefe07fffff442f0f87df43f4c0ffe00c7c3ffa0fff429f440b509347884be7ffddad32bcffff3ffcbfffffffffffffffffffffff5ccfcf02d3ffff1ff407fffff43cb93e1fdf02b803fecb3c7c6d02e8541fecb9a7fb7001d1f42bdbed3f980effefbfd2fffffffdffffffffffffffff48cf81b6cbfffc6ff5ff97d51ef
+9f9f97f8f1b030bf9cb60b2c1cbf0402a56fff4bb63eedd4700dbf83a1e81fe0fcb0ffffffffdffffffffffffffffc01f94e13ffbeee7e10955fcbffffff7fe3d9754cff7d3038bafaff64d7e16953403f4f0c3f86cfff33e0ffd0bfe047ffffffffdffffffffffffffffff87eedd7fe7efed17ffffe7fffffffffcbd978
+02f8b603f2e1f7fd278f0f413c36f8ce4fafd3c3f057c8bffe1105bffffffffffffffffffffffffffffd01cd4bffafff4bfffffdfffffffffa5ec07ed1f3f41fdb88fff8072d3d2ff898230ad3efbc074457dfa41fbefffffffffffffffffffffffffffffffff5950bf75d89bfffaf81ffffebff77ffc7ffc3e3f4be2e2f
+f8731e7fef9fc1ffc3fd17fd336cbd10794692ffffffffffffffffffffffffffffffffffffffe011a5ffffff292fffff4bfff7fbcbff43fbed047cbef8113ebf2e2f8bfff3fde39e2e0dfc33783ffcbffffffffffffffffffffffffffffffffffffffffffffaffe8e1fffffc3fff79e1deff8fffc5df79fffc70fffcb8bf
+5fffff49fa3fdffc78b1f8ffff3ffffffffffffffffffffffffffffffffffffffffffffaffb3cbfffbf2ffff7ecdc5ff4fafc6fff4ff74b2fffe43ff7ffffe3d76fc8cafd34662ffffafffffffffffffffffffffffffffffffffffffffffffffffffffffffebfd7fffefffffaf2eeffffdffbffffff4bf7fbfffffffb7ff
+9fbf9ff55bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff
+%%EndBinary
+grestore
+%%Trailer
diff --git a/macros/generic/diagrams/kuvio/doc-src/eps/plot.eps b/macros/generic/diagrams/kuvio/doc-src/eps/plot.eps
new file mode 100644
index 0000000000..3b21887897
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/eps/plot.eps
@@ -0,0 +1,11784 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%BoundingBox: 0 0 272 277
+%%Creator: Mathematica
+%%Title: Clipboard
+%%CreationDate: Sometime Sometime
+%%EndComments
+/Mnodistort true def
+100 dict begin
+/Mfixwid true def
+/Mrot 0 def
+/Mpstart {
+ MathPictureStart
+} bind def
+/Mpend {
+ MathPictureEnd
+} bind def
+/Mscale {
+ 0 1 0 1
+ 5 -1 roll
+ MathScale
+} bind def
+/Plain /Courier findfont def
+/Bold /Courier-Bold findfont def
+/Italic /Courier-Oblique findfont def
+/MathPictureStart {
+ /Mimatrix
+ matrix currentmatrix
+ def
+ gsave
+ newpath
+ Mleft
+ Mbottom
+ translate
+ 1 -1 scale
+ /Mtmatrix
+ matrix currentmatrix
+ def
+ Plain
+ Mfontsize scalefont
+ setfont
+ 0 setgray
+ 0 setlinewidth
+} bind def
+/MathPictureEnd {
+ grestore
+} bind def
+/MathSubStart {
+ Mgmatrix Mtmatrix
+ Mleft Mbottom
+ Mwidth Mheight
+ 8 -2 roll
+ moveto
+ Mtmatrix setmatrix
+ currentpoint
+ Mgmatrix setmatrix
+ 10 -2 roll
+ moveto
+ Mtmatrix setmatrix
+ currentpoint
+ 2 copy translate
+ /Mtmatrix matrix currentmatrix def
+ /Mleft 0 def
+ /Mbottom 0 def
+ 3 -1 roll
+ exch sub
+ /Mheight exch def
+ sub
+ /Mwidth exch def
+} bind def
+/MathSubEnd {
+ /Mheight exch def
+ /Mwidth exch def
+ /Mbottom exch def
+ /Mleft exch def
+ /Mtmatrix exch def
+ dup setmatrix
+ /Mgmatrix exch def
+} bind def
+/Mdot {
+ moveto
+ 0 0 rlineto
+ stroke
+} bind def
+/Mtetra {
+ moveto
+ lineto
+ lineto
+ lineto
+ fill
+} bind def
+/Metetra {
+ moveto
+ lineto
+ lineto
+ lineto
+ closepath
+ gsave
+ fill
+ grestore
+ 0 setgray
+ stroke
+} bind def
+/Mistroke {
+ flattenpath
+ 0 0 0
+ {
+ 4 2 roll
+ pop pop
+ }
+ {
+ 4 -1 roll
+ 2 index
+ sub dup mul
+ 4 -1 roll
+ 2 index
+ sub dup mul
+ add sqrt
+ 4 -1 roll
+ add
+ 3 1 roll
+ }
+ {
+ stop
+ }
+ {
+ stop
+ }
+ pathforall
+ pop pop
+ currentpoint
+ stroke
+ moveto
+ currentdash
+ 3 -1 roll
+ add
+ setdash
+} bind def
+/Mfstroke {
+ stroke
+ currentdash
+ pop 0
+ setdash
+} bind def
+/Mrotsboxa {
+ gsave
+ dup
+ /Mrot
+ exch def
+ Mrotcheck
+ Mtmatrix
+ dup
+ setmatrix
+ 7 1 roll
+ 4 index
+ 4 index
+ translate
+ rotate
+ 3 index
+ -1 mul
+ 3 index
+ -1 mul
+ translate
+ /Mtmatrix
+ matrix
+ currentmatrix
+ def
+ grestore
+ Msboxa
+ 3 -1 roll
+ /Mtmatrix
+ exch def
+ /Mrot
+ 0 def
+} bind def
+/Msboxa {
+ newpath
+ 5 -1 roll
+ Mvboxa
+ pop
+ Mboxout
+ 6 -1 roll
+ 5 -1 roll
+ 4 -1 roll
+ Msboxa1
+ 5 -3 roll
+ Msboxa1
+ Mboxrot
+ [
+ 7 -2 roll
+ 2 copy
+ [
+ 3 1 roll
+ 10 -1 roll
+ 9 -1 roll
+ ]
+ 6 1 roll
+ 5 -2 roll
+ ]
+} bind def
+/Msboxa1 {
+ sub
+ 2 div
+ dup
+ 2 index
+ 1 add
+ mul
+ 3 -1 roll
+ -1 add
+ 3 -1 roll
+ mul
+} bind def
+/Mvboxa {
+ Mfixwid
+ {
+ Mvboxa1
+ }
+ {
+ dup
+ Mwidthcal
+ 0 exch
+ {
+ add
+ }
+ forall
+ exch
+ Mvboxa1
+ 4 index
+ 7 -1 roll
+ add
+ 4 -1 roll
+ pop
+ 3 1 roll
+ }
+ ifelse
+} bind def
+/Mvboxa1 {
+ gsave
+ newpath
+ [ true
+ 3 -1 roll
+ {
+ Mbbox
+ 5 -1 roll
+ {
+ 0
+ 5 1 roll
+ }
+ {
+ 7 -1 roll
+ exch sub
+ (m) stringwidth pop
+ .3 mul
+ sub
+ 7 1 roll
+ 6 -1 roll
+ 4 -1 roll
+ Mmin
+ 3 -1 roll
+ 5 index
+ add
+ 5 -1 roll
+ 4 -1 roll
+ Mmax
+ 4 -1 roll
+ }
+ ifelse
+ false
+ }
+ forall
+ { stop } if
+ counttomark
+ 1 add
+ 4 roll
+ ]
+ grestore
+} bind def
+/Mbbox {
+ 0 0 moveto
+ false charpath
+ flattenpath
+ pathbbox
+ newpath
+} bind def
+/Mmin {
+ 2 copy
+ gt
+ { exch } if
+ pop
+} bind def
+/Mmax {
+ 2 copy
+ lt
+ { exch } if
+ pop
+} bind def
+/Mrotshowa {
+ dup
+ /Mrot
+ exch def
+ Mrotcheck
+ Mtmatrix
+ dup
+ setmatrix
+ 7 1 roll
+ 4 index
+ 4 index
+ translate
+ rotate
+ 3 index
+ -1 mul
+ 3 index
+ -1 mul
+ translate
+ /Mtmatrix
+ matrix
+ currentmatrix
+ def
+ Mgmatrix setmatrix
+ Mshowa
+ /Mtmatrix
+ exch def
+ /Mrot 0 def
+} bind def
+/Mshowa {
+ 4 -2 roll
+ moveto
+ 2 index
+ Mtmatrix setmatrix
+ Mvboxa
+ 7 1 roll
+ Mboxout
+ 6 -1 roll
+ 5 -1 roll
+ 4 -1 roll
+ Mshowa1
+ 4 1 roll
+ Mshowa1
+ rmoveto
+ currentpoint
+ Mfixwid
+ {
+ Mshowax
+ }
+ {
+ Mshoway
+ }
+ ifelse
+ pop pop pop pop
+ Mgmatrix setmatrix
+} bind def
+/Mshowax {
+ 0 1
+ 4 index length
+ -1 add
+ {
+ 2 index
+ 4 index
+ 2 index
+ get
+ 3 index
+ add
+ moveto
+ 4 index
+ exch get
+ show
+ } for
+} bind def
+/Mshoway {
+ 3 index
+ Mwidthcal
+ 5 1 roll
+ 0 1
+ 4 index length
+ -1 add
+ {
+ 2 index
+ 4 index
+ 2 index
+ get
+ 3 index
+ add
+ moveto
+ 4 index
+ exch get
+ [
+ 6 index
+ aload
+ length
+ 2 add
+ -1 roll
+ {
+ pop
+ Strform
+ stringwidth
+ pop
+ neg
+ exch
+ add
+ 0 rmoveto
+ }
+ exch
+ kshow
+ cleartomark
+ } for
+ pop
+} bind def
+/Mwidthcal {
+ [
+ exch
+ {
+ Mwidthcal1
+ }
+ forall
+ ]
+ [
+ exch
+ dup
+ Maxlen
+ -1 add
+ 0 1
+ 3 -1 roll
+ {
+ [
+ exch
+ 2 index
+ {
+ 1 index
+ Mget
+ exch
+ }
+ forall
+ pop
+ Maxget
+ exch
+ }
+ for
+ pop
+ ]
+ Mreva
+} bind def
+/Mreva {
+ [
+ exch
+ aload
+ length
+ -1 1
+ {1 roll}
+ for
+ ]
+} bind def
+/Mget {
+ 1 index
+ length
+ -1 add
+ 1 index
+ ge
+ {
+ get
+ }
+ {
+ pop pop
+ 0
+ }
+ ifelse
+} bind def
+/Maxlen {
+ [
+ exch
+ {
+ length
+ }
+ forall
+ Maxget
+} bind def
+/Maxget {
+ counttomark
+ -1 add
+ 1 1
+ 3 -1 roll
+ {
+ pop
+ Mmax
+ }
+ for
+ exch
+ pop
+} bind def
+/Mwidthcal1 {
+ [
+ exch
+ {
+ Strform
+ stringwidth
+ pop
+ }
+ forall
+ ]
+} bind def
+/Strform {
+ /tem (x) def
+ tem 0
+ 3 -1 roll
+ put
+ tem
+} bind def
+/Mshowa1 {
+ 2 copy
+ add
+ 4 1 roll
+ sub
+ mul
+ sub
+ -2 div
+} bind def
+/MathScale {
+ Mwidth
+ Mheight
+ Mlp
+ translate
+ scale
+ /Msaveaa exch def
+ /Msavebb exch def
+ /Msavecc exch def
+ /Msavedd exch def
+ /Mgmatrix
+ matrix currentmatrix
+ def
+} bind def
+/Mlp {
+ 3 copy
+ Mlpfirst
+ {
+ Mnodistort
+ {
+ Mmin
+ dup
+ } if
+ 4 index
+ 2 index
+ 2 index
+ Mlprun
+ 11 index
+ 11 -1 roll
+ 10 -4 roll
+ Mlp1
+ 8 index
+ 9 -5 roll
+ Mlp1
+ 4 -1 roll
+ and
+ { exit } if
+ 3 -1 roll
+ pop pop
+ } loop
+ exch
+ 3 1 roll
+ 7 -3 roll
+ pop pop pop
+} bind def
+/Mlpfirst {
+ 3 -1 roll
+ dup length
+ 2 copy
+ -2 add
+ get
+ aload
+ pop pop pop
+ 4 -2 roll
+ -1 add
+ get
+ aload
+ pop pop pop
+ 6 -1 roll
+ 3 -1 roll
+ 5 -1 roll
+ sub
+ dup /MsaveAx exch def
+ div
+ 4 1 roll
+ exch sub
+ dup /MsaveAy exch def
+ div
+} bind def
+/Mlprun {
+ 2 copy
+ 4 index
+ 0 get
+ dup
+ 4 1 roll
+ Mlprun1
+ 3 copy
+ 8 -2 roll
+ 9 -1 roll
+ {
+ 3 copy
+ Mlprun1
+ 3 copy
+ 11 -3 roll
+ /gt Mlpminmax
+ 8 3 roll
+ 11 -3 roll
+ /lt Mlpminmax
+ 8 3 roll
+ } forall
+ pop pop pop pop
+ 3 1 roll
+ pop pop
+ aload pop
+ 5 -1 roll
+ aload pop
+ exch
+ 6 -1 roll
+ Mlprun2
+ 8 2 roll
+ 4 -1 roll
+ Mlprun2
+ 6 2 roll
+ 3 -1 roll
+ Mlprun2
+ 4 2 roll
+ exch
+ Mlprun2
+ 6 2 roll
+} bind def
+/Mlprun1 {
+ aload pop
+ exch
+ 6 -1 roll
+ 5 -1 roll
+ mul add
+ 4 -2 roll
+ mul
+ 3 -1 roll
+ add
+} bind def
+/Mlprun2 {
+ 2 copy
+ add 2 div
+ 3 1 roll
+ exch sub
+} bind def
+/Mlpminmax {
+ cvx
+ 2 index
+ 6 index
+ 2 index
+ exec
+ {
+ 7 -3 roll
+ 4 -1 roll
+ } if
+ 1 index
+ 5 index
+ 3 -1 roll
+ exec
+ {
+ 4 1 roll
+ pop
+ 5 -1 roll
+ aload
+ pop pop
+ 4 -1 roll
+ aload pop
+ [
+ 8 -2 roll
+ pop
+ 5 -2 roll
+ pop
+ 6 -2 roll
+ pop
+ 5 -1 roll
+ ]
+ 4 1 roll
+ pop
+ }
+ {
+ pop pop pop
+ } ifelse
+} bind def
+/Mlp1 {
+ 5 index
+ 3 index sub
+ 5 index
+ 2 index mul
+ 1 index
+ le
+ 1 index
+ 0 le
+ or
+ dup
+ not
+ {
+ 1 index
+ 3 index div
+ .99999 mul
+ 8 -1 roll
+ pop
+ 7 1 roll
+ }
+ if
+ 8 -1 roll
+ 2 div
+ 7 -2 roll
+ pop sub
+ 5 index
+ 6 -3 roll
+ pop pop
+ mul sub
+ exch
+} bind def
+/intop 0 def
+/inrht 0 def
+/inflag 0 def
+/outflag 0 def
+/xadrht 0 def
+/xadlft 0 def
+/yadtop 0 def
+/yadbot 0 def
+/Minner {
+ outflag
+ 1
+ eq
+ {
+ /outflag 0 def
+ /intop 0 def
+ /inrht 0 def
+ } if
+ 5 index
+ gsave
+ Mtmatrix setmatrix
+ Mvboxa pop
+ grestore
+ 3 -1 roll
+ pop
+ dup
+ intop
+ gt
+ {
+ /intop
+ exch def
+ }
+ { pop }
+ ifelse
+ dup
+ inrht
+ gt
+ {
+ /inrht
+ exch def
+ }
+ { pop }
+ ifelse
+ pop
+ /inflag
+ 1 def
+} bind def
+/Mouter {
+ /xadrht 0 def
+ /xadlft 0 def
+ /yadtop 0 def
+ /yadbot 0 def
+ inflag
+ 1 eq
+ {
+ dup
+ 0 lt
+ {
+ dup
+ intop
+ mul
+ neg
+ /yadtop
+ exch def
+ } if
+ dup
+ 0 gt
+ {
+ dup
+ intop
+ mul
+ /yadbot
+ exch def
+ }
+ if
+ pop
+ dup
+ 0 lt
+ {
+ dup
+ inrht
+ mul
+ neg
+ /xadrht
+ exch def
+ } if
+ dup
+ 0 gt
+ {
+ dup
+ inrht
+ mul
+ /xadlft
+ exch def
+ } if
+ pop
+ /outflag 1 def
+ }
+ { pop pop}
+ ifelse
+ /inflag 0 def
+ /inrht 0 def
+ /intop 0 def
+} bind def
+/Mboxout {
+ outflag
+ 1
+ eq
+ {
+ 4 -1
+ roll
+ xadlft
+ leadjust
+ add
+ sub
+ 4 1 roll
+ 3 -1
+ roll
+ yadbot
+ leadjust
+ add
+ sub
+ 3 1
+ roll
+ exch
+ xadrht
+ leadjust
+ add
+ add
+ exch
+ yadtop
+ leadjust
+ add
+ add
+ /outflag 0 def
+ /xadlft 0 def
+ /yadbot 0 def
+ /xadrht 0 def
+ /yadtop 0 def
+ } if
+} bind def
+/leadjust {
+ (m) stringwidth pop
+ .5 mul
+} bind def
+/Mrotcheck {
+ dup
+ 90
+ eq
+ {
+ yadbot
+ /yadbot
+ xadrht
+ def
+ /xadrht
+ yadtop
+ def
+ /yadtop
+ xadlft
+ def
+ /xadlft
+ exch
+ def
+ }
+ if
+ dup
+ cos
+ 1 index
+ sin
+ Checkaux
+ dup
+ cos
+ 1 index
+ sin neg
+ exch
+ Checkaux
+ 3 1 roll
+ pop pop
+} bind def
+/Checkaux {
+ 4 index
+ exch
+ 4 index
+ mul
+ 3 1 roll
+ mul add
+ 4 1 roll
+} bind def
+/Mboxrot {
+ Mrot
+ 90 eq
+ {
+ brotaux
+ 4 2
+ roll
+ }
+ if
+ Mrot
+ 180 eq
+ {
+ 4 2
+ roll
+ brotaux
+ 4 2
+ roll
+ brotaux
+ }
+ if
+ Mrot
+ 270 eq
+ {
+ 4 2
+ roll
+ brotaux
+ }
+ if
+} bind def
+/brotaux {
+ neg
+ exch
+ neg
+} bind def
+/Mabswid {
+ Mimatrix
+ 0 get
+ Mgmatrix
+ 0 get
+ div
+ mul
+ setlinewidth
+} bind def
+/Mabsdash {
+ exch
+ Mimatrix
+ 0 get
+ Mgmatrix
+ 0 get
+ div
+ [
+ 3 1 roll
+ exch
+ {
+ exch
+ dup
+ 3 -1 roll
+ mul
+ exch
+ }
+ forall
+ pop ]
+ exch
+ setdash
+} bind def
+/colorimage where
+{ pop }
+{
+/colorimage {
+3 1 roll
+ pop pop
+ 5 -1 roll
+ mul
+ 4 1 roll
+{
+currentfile
+1 index
+readhexstring
+pop }
+image
+} bind def
+} ifelse
+/sampledsound where
+{ pop}
+{ /sampledsound {
+exch
+pop
+exch
+5 1 roll
+mul
+4 idiv
+mul
+2 idiv
+exch pop
+exch
+/Mtempproc exch def
+{ Mtempproc pop }
+repeat
+} bind def
+} ifelse
+
+/Mleft 0.000000 def
+/Mbottom 277.617249 def
+/Mwidth 272.790741 def
+/Mheight 277.617249 def
+/Mfontsize 12 def
+/Plain /Courier findfont def
+0 Mbottom Mheight neg add 2 mul Mheight add translate
+1 -1 scale
+
+%%Creator: Mathematica
+%%AspectRatio: 1.01769
+MathPictureStart
+/Courier findfont 10 scalefont setfont
+% Scaling calculations
+-0.017931 1.121556 0.028039 1.121556 [
+[ 0 0 0 0 ]
+[ 1 1.017693 0 0 ]
+] MathScale
+% Start of Graphics
+1 setlinecap
+1 setlinejoin
+newpath
+%%Object: Graphics3D
+[ ] 0 setdash
+0 setgray
+0 0 moveto
+1 0 lineto
+1 1.01769 lineto
+0 1.01769 lineto
+closepath
+clip
+newpath
+gsave
+0.002 setlinewidth
+0.483 0.49066 moveto 0.5308 0.4923 lineto 0.53087 0.47433 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53087 0.47433 moveto 0.48331 0.47266 lineto 0.483 0.49066 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57788 0.47039 moveto 0.53087 0.47433 lineto 0.5308 0.4923 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43661 0.48354 moveto 0.483 0.49066 lineto 0.48331 0.47266 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48331 0.47266 moveto 0.43717 0.46543 lineto 0.43661 0.48354 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5308 0.4923 moveto 0.57806 0.48843 lineto 0.57788 0.47039 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62238 0.46094 moveto 0.57788 0.47039 lineto 0.57806 0.48843 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48268 0.50884 moveto 0.53074 0.51045 lineto 0.5308 0.4923 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5308 0.4923 moveto 0.483 0.49066 lineto 0.48268 0.50884 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57806 0.48843 moveto 0.5308 0.4923 lineto 0.53074 0.51045 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43604 0.50185 moveto 0.48268 0.50884 lineto 0.483 0.49066 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.483 0.49066 moveto 0.43661 0.48354 lineto 0.43604 0.50185 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53074 0.51045 moveto 0.57825 0.50665 lineto 0.57806 0.48843 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.6228 0.47913 moveto 0.57806 0.48843 lineto 0.57825 0.50665 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57806 0.48843 moveto 0.6228 0.47913 lineto 0.62238 0.46094 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48236 0.52722 moveto 0.53068 0.5288 lineto 0.53074 0.51045 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53074 0.51045 moveto 0.48268 0.50884 lineto 0.48236 0.52722 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57825 0.50665 moveto 0.53074 0.51045 lineto 0.53068 0.5288 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39364 0.47111 moveto 0.43661 0.48354 lineto 0.43717 0.46543 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43717 0.46543 moveto 0.39445 0.45279 lineto 0.39364 0.47111 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43546 0.52036 moveto 0.48236 0.52722 lineto 0.48268 0.50884 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48268 0.50884 moveto 0.43604 0.50185 lineto 0.43546 0.52036 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53068 0.5288 moveto 0.57844 0.52507 lineto 0.57825 0.50665 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62324 0.49752 moveto 0.57825 0.50665 lineto 0.57844 0.52507 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57825 0.50665 moveto 0.62324 0.49752 lineto 0.6228 0.47913 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48203 0.5458 moveto 0.53061 0.54735 lineto 0.53068 0.5288 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53068 0.5288 moveto 0.48236 0.52722 lineto 0.48203 0.5458 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57844 0.52507 moveto 0.53068 0.5288 lineto 0.53061 0.54735 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39283 0.48964 moveto 0.43604 0.50185 lineto 0.43661 0.48354 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43661 0.48354 moveto 0.39364 0.47111 lineto 0.39283 0.48964 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66235 0.44619 moveto 0.62238 0.46094 lineto 0.6228 0.47913 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43487 0.53907 moveto 0.48203 0.5458 lineto 0.48236 0.52722 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48236 0.52722 moveto 0.43546 0.52036 lineto 0.43487 0.53907 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53061 0.54735 moveto 0.57863 0.54369 lineto 0.57844 0.52507 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62367 0.5161 moveto 0.57844 0.52507 lineto 0.57863 0.54369 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57844 0.52507 moveto 0.62367 0.5161 lineto 0.62324 0.49752 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4817 0.56458 moveto 0.53054 0.5661 lineto 0.53061 0.54735 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53061 0.54735 moveto 0.48203 0.5458 lineto 0.4817 0.56458 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57863 0.54369 moveto 0.53061 0.54735 lineto 0.53054 0.5661 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.392 0.50837 moveto 0.43546 0.52036 lineto 0.43604 0.50185 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43604 0.50185 moveto 0.39283 0.48964 lineto 0.392 0.50837 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.663 0.46462 moveto 0.6228 0.47913 lineto 0.62324 0.49752 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.6228 0.47913 moveto 0.663 0.46462 lineto 0.66235 0.44619 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43428 0.55799 moveto 0.4817 0.56458 lineto 0.48203 0.5458 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48203 0.5458 moveto 0.43487 0.53907 lineto 0.43428 0.55799 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35619 0.45367 moveto 0.39364 0.47111 lineto 0.39445 0.45279 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39445 0.45279 moveto 0.35722 0.43506 lineto 0.35619 0.45367 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53054 0.5661 moveto 0.57883 0.56252 lineto 0.57863 0.54369 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62412 0.53489 moveto 0.57863 0.54369 lineto 0.57883 0.56252 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57863 0.54369 moveto 0.62412 0.53489 lineto 0.62367 0.5161 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48137 0.58357 moveto 0.53048 0.58506 lineto 0.53054 0.5661 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53054 0.5661 moveto 0.4817 0.56458 lineto 0.48137 0.58357 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57883 0.56252 moveto 0.53054 0.5661 lineto 0.53048 0.58506 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39117 0.5273 moveto 0.43487 0.53907 lineto 0.43546 0.52036 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43546 0.52036 moveto 0.392 0.50837 lineto 0.39117 0.5273 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66366 0.48326 moveto 0.62324 0.49752 lineto 0.62367 0.5161 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62324 0.49752 moveto 0.66366 0.48326 lineto 0.663 0.46462 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43369 0.57711 moveto 0.48137 0.58357 lineto 0.4817 0.56458 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4817 0.56458 moveto 0.43428 0.55799 lineto 0.43369 0.57711 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35515 0.4725 moveto 0.39283 0.48964 lineto 0.39364 0.47111 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39364 0.47111 moveto 0.35619 0.45367 lineto 0.35515 0.4725 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53048 0.58506 moveto 0.57903 0.58154 lineto 0.57883 0.56252 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62456 0.55389 moveto 0.57883 0.56252 lineto 0.57903 0.58154 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57883 0.56252 moveto 0.62456 0.55389 lineto 0.62412 0.53489 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48103 0.60276 moveto 0.53041 0.60422 lineto 0.53048 0.58506 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53048 0.58506 moveto 0.48137 0.58357 lineto 0.48103 0.60276 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57903 0.58154 moveto 0.53048 0.58506 lineto 0.53041 0.60422 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39033 0.54645 moveto 0.43428 0.55799 lineto 0.43487 0.53907 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43487 0.53907 moveto 0.39117 0.5273 lineto 0.39033 0.54645 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66433 0.5021 moveto 0.62367 0.5161 lineto 0.62412 0.53489 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62367 0.5161 moveto 0.66433 0.5021 lineto 0.66366 0.48326 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.6957 0.42653 moveto 0.66235 0.44619 lineto 0.663 0.46462 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43308 0.59644 moveto 0.48103 0.60276 lineto 0.48137 0.58357 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48137 0.58357 moveto 0.43369 0.57711 lineto 0.43308 0.59644 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35409 0.49154 moveto 0.392 0.50837 lineto 0.39283 0.48964 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39283 0.48964 moveto 0.35515 0.4725 lineto 0.35409 0.49154 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53041 0.60422 moveto 0.57922 0.60078 lineto 0.57903 0.58154 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62501 0.5731 moveto 0.57903 0.58154 lineto 0.57922 0.60078 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57903 0.58154 moveto 0.62501 0.5731 lineto 0.62456 0.55389 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48069 0.62217 moveto 0.53034 0.62359 lineto 0.53041 0.60422 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53041 0.60422 moveto 0.48103 0.60276 lineto 0.48069 0.62217 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57922 0.60078 moveto 0.53041 0.60422 lineto 0.53034 0.62359 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38947 0.56581 moveto 0.43369 0.57711 lineto 0.43428 0.55799 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43428 0.55799 moveto 0.39033 0.54645 lineto 0.38947 0.56581 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66501 0.52116 moveto 0.62412 0.53489 lineto 0.62456 0.55389 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62412 0.53489 moveto 0.66501 0.52116 lineto 0.66433 0.5021 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69655 0.44529 moveto 0.663 0.46462 lineto 0.66366 0.48326 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.663 0.46462 moveto 0.69655 0.44529 lineto 0.6957 0.42653 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43247 0.61599 moveto 0.48069 0.62217 lineto 0.48103 0.60276 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48103 0.60276 moveto 0.43308 0.59644 lineto 0.43247 0.61599 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35303 0.51079 moveto 0.39117 0.5273 lineto 0.392 0.50837 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.392 0.50837 moveto 0.35409 0.49154 lineto 0.35303 0.51079 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53034 0.62359 moveto 0.57943 0.62023 lineto 0.57922 0.60078 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62547 0.59252 moveto 0.57922 0.60078 lineto 0.57943 0.62023 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57922 0.60078 moveto 0.62547 0.59252 lineto 0.62501 0.5731 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48035 0.64179 moveto 0.53027 0.64318 lineto 0.53034 0.62359 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53034 0.62359 moveto 0.48069 0.62217 lineto 0.48035 0.64179 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57943 0.62023 moveto 0.53034 0.62359 lineto 0.53027 0.64318 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38861 0.58539 moveto 0.43308 0.59644 lineto 0.43369 0.57711 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43369 0.57711 moveto 0.38947 0.56581 lineto 0.38861 0.58539 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66569 0.54043 moveto 0.62456 0.55389 lineto 0.62501 0.5731 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62456 0.55389 moveto 0.66569 0.54043 lineto 0.66501 0.52116 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69742 0.46426 moveto 0.66366 0.48326 lineto 0.66433 0.5021 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66366 0.48326 moveto 0.69742 0.46426 lineto 0.69655 0.44529 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43186 0.63576 moveto 0.48035 0.64179 lineto 0.48069 0.62217 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48069 0.62217 moveto 0.43247 0.61599 lineto 0.43186 0.63576 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32641 0.43176 moveto 0.35619 0.45367 lineto 0.35722 0.43506 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35722 0.43506 moveto 0.32764 0.41278 lineto 0.32641 0.43176 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35195 0.53026 moveto 0.39033 0.54645 lineto 0.39117 0.5273 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39117 0.5273 moveto 0.35303 0.51079 lineto 0.35195 0.53026 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53027 0.64318 moveto 0.57963 0.6399 lineto 0.57943 0.62023 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62593 0.61216 moveto 0.57943 0.62023 lineto 0.57963 0.6399 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57943 0.62023 moveto 0.62593 0.61216 lineto 0.62547 0.59252 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48 0.66163 moveto 0.5302 0.66298 lineto 0.53027 0.64318 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53027 0.64318 moveto 0.48035 0.64179 lineto 0.48 0.66163 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57963 0.6399 moveto 0.53027 0.64318 lineto 0.5302 0.66298 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38774 0.60519 moveto 0.43247 0.61599 lineto 0.43308 0.59644 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43308 0.59644 moveto 0.38861 0.58539 lineto 0.38774 0.60519 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66638 0.55991 moveto 0.62501 0.5731 lineto 0.62547 0.59252 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62501 0.5731 moveto 0.66638 0.55991 lineto 0.66569 0.54043 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69829 0.48344 moveto 0.66433 0.5021 lineto 0.66501 0.52116 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66433 0.5021 moveto 0.69829 0.48344 lineto 0.69742 0.46426 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43123 0.65575 moveto 0.48 0.66163 lineto 0.48035 0.64179 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48035 0.64179 moveto 0.43186 0.63576 lineto 0.43123 0.65575 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32517 0.45095 moveto 0.35515 0.4725 lineto 0.35619 0.45367 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35619 0.45367 moveto 0.32641 0.43176 lineto 0.32517 0.45095 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35086 0.54995 moveto 0.38947 0.56581 lineto 0.39033 0.54645 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39033 0.54645 moveto 0.35195 0.53026 lineto 0.35086 0.54995 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5302 0.66298 moveto 0.57983 0.65978 lineto 0.57963 0.6399 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.6264 0.63202 moveto 0.57963 0.6399 lineto 0.57983 0.65978 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57963 0.6399 moveto 0.6264 0.63202 lineto 0.62593 0.61216 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47965 0.68169 moveto 0.53013 0.683 lineto 0.5302 0.66298 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5302 0.66298 moveto 0.48 0.66163 lineto 0.47965 0.68169 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57983 0.65978 moveto 0.5302 0.66298 lineto 0.53013 0.683 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38686 0.62522 moveto 0.43186 0.63576 lineto 0.43247 0.61599 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43247 0.61599 moveto 0.38774 0.60519 lineto 0.38686 0.62522 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66708 0.57962 moveto 0.62547 0.59252 lineto 0.62593 0.61216 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62547 0.59252 moveto 0.66708 0.57962 lineto 0.66638 0.55991 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69918 0.50284 moveto 0.66501 0.52116 lineto 0.66569 0.54043 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66501 0.52116 moveto 0.69918 0.50284 lineto 0.69829 0.48344 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4306 0.67597 moveto 0.47965 0.68169 lineto 0.48 0.66163 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48 0.66163 moveto 0.43123 0.65575 lineto 0.4306 0.67597 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72028 0.40262 moveto 0.6957 0.42653 lineto 0.69655 0.44529 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32392 0.47037 moveto 0.35409 0.49154 lineto 0.35515 0.4725 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35515 0.4725 moveto 0.32517 0.45095 lineto 0.32392 0.47037 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34976 0.56987 moveto 0.38861 0.58539 lineto 0.38947 0.56581 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38947 0.56581 moveto 0.35086 0.54995 lineto 0.34976 0.56987 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53013 0.683 moveto 0.58004 0.67989 lineto 0.57983 0.65978 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62687 0.6521 moveto 0.57983 0.65978 lineto 0.58004 0.67989 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57983 0.65978 moveto 0.62687 0.6521 lineto 0.6264 0.63202 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47929 0.70197 moveto 0.53006 0.70325 lineto 0.53013 0.683 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53013 0.683 moveto 0.47965 0.68169 lineto 0.47929 0.70197 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58004 0.67989 moveto 0.53013 0.683 lineto 0.53006 0.70325 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38597 0.64547 moveto 0.43123 0.65575 lineto 0.43186 0.63576 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43186 0.63576 moveto 0.38686 0.62522 lineto 0.38597 0.64547 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66779 0.59955 moveto 0.62593 0.61216 lineto 0.6264 0.63202 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62593 0.61216 moveto 0.66779 0.59955 lineto 0.66708 0.57962 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70008 0.52247 moveto 0.66569 0.54043 lineto 0.66638 0.55991 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66569 0.54043 moveto 0.70008 0.52247 lineto 0.69918 0.50284 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42996 0.69641 moveto 0.47929 0.70197 lineto 0.47965 0.68169 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47965 0.68169 moveto 0.4306 0.67597 lineto 0.42996 0.69641 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72131 0.42176 moveto 0.69655 0.44529 lineto 0.69742 0.46426 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69655 0.44529 moveto 0.72131 0.42176 lineto 0.72028 0.40262 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32265 0.49001 moveto 0.35303 0.51079 lineto 0.35409 0.49154 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35409 0.49154 moveto 0.32392 0.47037 lineto 0.32265 0.49001 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34864 0.59002 moveto 0.38774 0.60519 lineto 0.38861 0.58539 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38861 0.58539 moveto 0.34976 0.56987 lineto 0.34864 0.59002 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53006 0.70325 moveto 0.58025 0.70023 lineto 0.58004 0.67989 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62735 0.67241 moveto 0.58004 0.67989 lineto 0.58025 0.70023 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58004 0.67989 moveto 0.62735 0.67241 lineto 0.62687 0.6521 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47893 0.72249 moveto 0.52999 0.72373 lineto 0.53006 0.70325 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53006 0.70325 moveto 0.47929 0.70197 lineto 0.47893 0.72249 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58025 0.70023 moveto 0.53006 0.70325 lineto 0.52999 0.72373 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38507 0.66596 moveto 0.4306 0.67597 lineto 0.43123 0.65575 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43123 0.65575 moveto 0.38597 0.64547 lineto 0.38507 0.66596 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66851 0.6197 moveto 0.6264 0.63202 lineto 0.62687 0.6521 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.6264 0.63202 moveto 0.66851 0.6197 lineto 0.66779 0.59955 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70098 0.54232 moveto 0.66638 0.55991 lineto 0.66708 0.57962 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66638 0.55991 moveto 0.70098 0.54232 lineto 0.70008 0.52247 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42932 0.71709 moveto 0.47893 0.72249 lineto 0.47929 0.70197 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47929 0.70197 moveto 0.42996 0.69641 lineto 0.42932 0.71709 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72234 0.44113 moveto 0.69742 0.46426 lineto 0.69829 0.48344 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69742 0.46426 moveto 0.72234 0.44113 lineto 0.72131 0.42176 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32137 0.50988 moveto 0.35195 0.53026 lineto 0.35303 0.51079 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35303 0.51079 moveto 0.32265 0.49001 lineto 0.32137 0.50988 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34752 0.6104 moveto 0.38686 0.62522 lineto 0.38774 0.60519 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38774 0.60519 moveto 0.34864 0.59002 lineto 0.34752 0.6104 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52999 0.72373 moveto 0.58046 0.7208 lineto 0.58025 0.70023 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62783 0.69296 moveto 0.58025 0.70023 lineto 0.58046 0.7208 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58025 0.70023 moveto 0.62783 0.69296 lineto 0.62735 0.67241 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47856 0.74324 moveto 0.52991 0.74444 lineto 0.52999 0.72373 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52999 0.72373 moveto 0.47893 0.72249 lineto 0.47856 0.74324 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58046 0.7208 moveto 0.52999 0.72373 lineto 0.52991 0.74444 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38416 0.68668 moveto 0.42996 0.69641 lineto 0.4306 0.67597 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4306 0.67597 moveto 0.38507 0.66596 lineto 0.38416 0.68668 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66923 0.64009 moveto 0.62687 0.6521 lineto 0.62735 0.67241 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62687 0.6521 moveto 0.66923 0.64009 lineto 0.66851 0.6197 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3065 0.40616 moveto 0.32641 0.43176 lineto 0.32764 0.41278 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32764 0.41278 moveto 0.30788 0.38677 lineto 0.3065 0.40616 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7019 0.5624 moveto 0.66708 0.57962 lineto 0.66779 0.59955 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66708 0.57962 moveto 0.7019 0.5624 lineto 0.70098 0.54232 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42866 0.73801 moveto 0.47856 0.74324 lineto 0.47893 0.72249 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47893 0.72249 moveto 0.42932 0.71709 lineto 0.42866 0.73801 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72339 0.46071 moveto 0.69829 0.48344 lineto 0.69918 0.50284 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69829 0.48344 moveto 0.72339 0.46071 lineto 0.72234 0.44113 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32007 0.52998 moveto 0.35086 0.54995 lineto 0.35195 0.53026 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35195 0.53026 moveto 0.32137 0.50988 lineto 0.32007 0.52998 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34637 0.63102 moveto 0.38597 0.64547 lineto 0.38686 0.62522 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38686 0.62522 moveto 0.34752 0.6104 lineto 0.34637 0.63102 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52991 0.74444 moveto 0.58068 0.7416 lineto 0.58046 0.7208 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62832 0.71374 moveto 0.58046 0.7208 lineto 0.58068 0.7416 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58046 0.7208 moveto 0.62832 0.71374 lineto 0.62783 0.69296 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4782 0.76423 moveto 0.52984 0.76539 lineto 0.52991 0.74444 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52991 0.74444 moveto 0.47856 0.74324 lineto 0.4782 0.76423 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58068 0.7416 moveto 0.52991 0.74444 lineto 0.52984 0.76539 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38323 0.70764 moveto 0.42932 0.71709 lineto 0.42996 0.69641 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42996 0.69641 moveto 0.38416 0.68668 lineto 0.38323 0.70764 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66996 0.66072 moveto 0.62735 0.67241 lineto 0.62783 0.69296 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62735 0.67241 moveto 0.66996 0.66072 lineto 0.66923 0.64009 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3051 0.42578 moveto 0.32517 0.45095 lineto 0.32641 0.43176 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32641 0.43176 moveto 0.3065 0.40616 lineto 0.3051 0.42578 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70283 0.58271 moveto 0.66779 0.59955 lineto 0.66851 0.6197 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66779 0.59955 moveto 0.70283 0.58271 lineto 0.7019 0.5624 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.428 0.75917 moveto 0.4782 0.76423 lineto 0.47856 0.74324 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47856 0.74324 moveto 0.42866 0.73801 lineto 0.428 0.75917 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72445 0.48053 moveto 0.69918 0.50284 lineto 0.70008 0.52247 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69918 0.50284 moveto 0.72445 0.48053 lineto 0.72339 0.46071 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31875 0.55033 moveto 0.34976 0.56987 lineto 0.35086 0.54995 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35086 0.54995 moveto 0.32007 0.52998 lineto 0.31875 0.55033 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34522 0.65188 moveto 0.38507 0.66596 lineto 0.38597 0.64547 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38597 0.64547 moveto 0.34637 0.63102 lineto 0.34522 0.65188 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52984 0.76539 moveto 0.5809 0.76264 lineto 0.58068 0.7416 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62882 0.73476 moveto 0.58068 0.7416 lineto 0.5809 0.76264 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58068 0.7416 moveto 0.62882 0.73476 lineto 0.62832 0.71374 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47782 0.78546 moveto 0.52977 0.78658 lineto 0.52984 0.76539 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52984 0.76539 moveto 0.4782 0.76423 lineto 0.47782 0.78546 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5809 0.76264 moveto 0.52984 0.76539 lineto 0.52977 0.78658 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3823 0.72885 moveto 0.42866 0.73801 lineto 0.42932 0.71709 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42932 0.71709 moveto 0.38323 0.70764 lineto 0.3823 0.72885 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.6707 0.68159 moveto 0.62783 0.69296 lineto 0.62832 0.71374 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62783 0.69296 moveto 0.6707 0.68159 lineto 0.66996 0.66072 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30369 0.44563 moveto 0.32392 0.47037 lineto 0.32517 0.45095 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32517 0.45095 moveto 0.3051 0.42578 lineto 0.30369 0.44563 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70377 0.60327 moveto 0.66851 0.6197 lineto 0.66923 0.64009 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66851 0.6197 moveto 0.70377 0.60327 lineto 0.70283 0.58271 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73403 0.37541 moveto 0.72028 0.40262 lineto 0.72131 0.42176 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42733 0.78058 moveto 0.47782 0.78546 lineto 0.4782 0.76423 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4782 0.76423 moveto 0.428 0.75917 lineto 0.42733 0.78058 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72552 0.50058 moveto 0.70008 0.52247 lineto 0.70098 0.54232 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70008 0.52247 moveto 0.72552 0.50058 lineto 0.72445 0.48053 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31742 0.57091 moveto 0.34864 0.59002 lineto 0.34976 0.56987 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34976 0.56987 moveto 0.31875 0.55033 lineto 0.31742 0.57091 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34405 0.67299 moveto 0.38416 0.68668 lineto 0.38507 0.66596 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38507 0.66596 moveto 0.34522 0.65188 lineto 0.34405 0.67299 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52977 0.78658 moveto 0.58112 0.78393 lineto 0.5809 0.76264 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62932 0.75603 moveto 0.5809 0.76264 lineto 0.58112 0.78393 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5809 0.76264 moveto 0.62932 0.75603 lineto 0.62882 0.73476 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47745 0.80694 moveto 0.52969 0.80802 lineto 0.52977 0.78658 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52977 0.78658 moveto 0.47782 0.78546 lineto 0.47745 0.80694 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58112 0.78393 moveto 0.52977 0.78658 lineto 0.52969 0.80802 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38136 0.75031 moveto 0.428 0.75917 lineto 0.42866 0.73801 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42866 0.73801 moveto 0.3823 0.72885 lineto 0.38136 0.75031 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67145 0.7027 moveto 0.62832 0.71374 lineto 0.62882 0.73476 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62832 0.71374 moveto 0.67145 0.7027 lineto 0.6707 0.68159 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30226 0.46572 moveto 0.32265 0.49001 lineto 0.32392 0.47037 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32392 0.47037 moveto 0.30369 0.44563 lineto 0.30226 0.46572 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70472 0.62406 moveto 0.66923 0.64009 lineto 0.66996 0.66072 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66923 0.64009 moveto 0.70472 0.62406 lineto 0.70377 0.60327 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73517 0.39498 moveto 0.72131 0.42176 lineto 0.72234 0.44113 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72131 0.42176 moveto 0.73517 0.39498 lineto 0.73403 0.37541 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42666 0.80223 moveto 0.47745 0.80694 lineto 0.47782 0.78546 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47782 0.78546 moveto 0.42733 0.78058 lineto 0.42666 0.80223 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7266 0.52087 moveto 0.70098 0.54232 lineto 0.7019 0.5624 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70098 0.54232 moveto 0.7266 0.52087 lineto 0.72552 0.50058 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31608 0.59174 moveto 0.34752 0.6104 lineto 0.34864 0.59002 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34864 0.59002 moveto 0.31742 0.57091 lineto 0.31608 0.59174 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34287 0.69435 moveto 0.38323 0.70764 lineto 0.38416 0.68668 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38416 0.68668 moveto 0.34405 0.67299 lineto 0.34287 0.69435 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52969 0.80802 moveto 0.58134 0.80546 lineto 0.58112 0.78393 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62982 0.77754 moveto 0.58112 0.78393 lineto 0.58134 0.80546 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58112 0.78393 moveto 0.62982 0.77754 lineto 0.62932 0.75603 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47707 0.82866 moveto 0.52961 0.8297 lineto 0.52969 0.80802 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52969 0.80802 moveto 0.47745 0.80694 lineto 0.47707 0.82866 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58134 0.80546 moveto 0.52969 0.80802 lineto 0.52961 0.8297 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3804 0.77202 moveto 0.42733 0.78058 lineto 0.428 0.75917 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.428 0.75917 moveto 0.38136 0.75031 lineto 0.3804 0.77202 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67221 0.72406 moveto 0.62882 0.73476 lineto 0.62932 0.75603 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62882 0.73476 moveto 0.67221 0.72406 lineto 0.67145 0.7027 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30082 0.48605 moveto 0.32137 0.50988 lineto 0.32265 0.49001 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32265 0.49001 moveto 0.30226 0.46572 lineto 0.30082 0.48605 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70568 0.64511 moveto 0.66996 0.66072 lineto 0.6707 0.68159 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66996 0.66072 moveto 0.70568 0.64511 lineto 0.70472 0.62406 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73631 0.41478 moveto 0.72234 0.44113 lineto 0.72339 0.46071 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72234 0.44113 moveto 0.73631 0.41478 lineto 0.73517 0.39498 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42597 0.82414 moveto 0.47707 0.82866 lineto 0.47745 0.80694 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47745 0.80694 moveto 0.42666 0.80223 lineto 0.42597 0.82414 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7277 0.54141 moveto 0.7019 0.5624 lineto 0.70283 0.58271 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7019 0.5624 moveto 0.7277 0.54141 lineto 0.7266 0.52087 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31472 0.61281 moveto 0.34637 0.63102 lineto 0.34752 0.6104 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34752 0.6104 moveto 0.31608 0.59174 lineto 0.31472 0.61281 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34167 0.71597 moveto 0.3823 0.72885 lineto 0.38323 0.70764 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38323 0.70764 moveto 0.34287 0.69435 lineto 0.34167 0.71597 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52961 0.8297 moveto 0.58156 0.82725 lineto 0.58134 0.80546 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63034 0.79931 moveto 0.58134 0.80546 lineto 0.58156 0.82725 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58134 0.80546 moveto 0.63034 0.79931 lineto 0.62982 0.77754 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47668 0.85064 moveto 0.50027 0.85109 lineto gsave
+0.50687 0.84628 lineto 0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.52961 0.8297 moveto 0.49768 0.84233 lineto 0.50687 0.84628 lineto 0.718 0.501 0.595 setrgbcolor
+fill
+grestore
+gsave
+0.47668 0.85064 moveto 0.50687 0.84628 lineto 0.49768 0.84233 lineto 0.718 0.501 0.595 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.52956 0.84444 moveto 0.52961 0.8297 lineto gsave
+0.50687 0.84628 lineto 0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.50027 0.85109 moveto 0.51193 0.84844 lineto 0.50687 0.84628 lineto 0.718 0.501 0.595 setrgbcolor
+fill
+grestore
+gsave
+0.52956 0.84444 moveto 0.50687 0.84628 lineto 0.51193 0.84844 lineto 0.718 0.501 0.595 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.51188 0.85168 moveto 0.51891 0.85144 lineto gsave
+0.51576 0.85009 lineto 0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51193 0.84844 moveto 0.51188 0.85168 lineto gsave
+0.51576 0.85009 lineto 0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50027 0.85109 moveto 0.51188 0.85168 lineto 0.51193 0.84844 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50027 0.85109 moveto 0.52954 0.85164 lineto 0.52956 0.84444 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58156 0.82725 moveto 0.52961 0.8297 lineto 0.52954 0.85164 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52954 0.85164 moveto 0.58179 0.84929 lineto 0.58156 0.82725 lineto gsave
+0.653 0.448 0.594 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58179 0.84929 moveto 0.57848 0.82433 lineto gsave
+0.51576 0.85009 lineto 0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51891 0.85144 moveto 0.58179 0.84929 lineto gsave
+0.51576 0.85009 lineto 0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52961 0.8297 moveto 0.47707 0.82866 lineto 0.47668 0.85064 lineto gsave
+0.718 0.501 0.595 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57848 0.82433 moveto 0.51223 0.82673 lineto 0.51193 0.84844 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.57848 0.82433 moveto 0.51193 0.84844 lineto 0.51576 0.85009 lineto 0.676 0.56 0.717 setrgbcolor
+fill
+grestore
+gsave
+0.43606 0.84264 moveto 0.44443 0.84429 lineto 0.47707 0.82866 lineto 0.778 0.552 0.593 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.43571 0.84719 moveto 0.44212 0.84813 lineto 0.44264 0.84489 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44212 0.84813 moveto 0.4539 0.84873 lineto gsave
+0.44741 0.84651 lineto 0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47668 0.85064 moveto 0.47698 0.83345 lineto gsave
+0.44443 0.84429 lineto 0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47698 0.83345 moveto 0.47707 0.82866 lineto gsave
+0.44443 0.84429 lineto 0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4539 0.84873 moveto 0.47668 0.85064 lineto gsave
+0.43606 0.84264 lineto 0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47707 0.82866 moveto 0.42597 0.82414 lineto 0.42551 0.83904 lineto gsave
+0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.47707 0.82866 moveto 0.42551 0.83904 lineto 0.43606 0.84264 lineto 0.778 0.552 0.593 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.51223 0.82673 moveto 0.44612 0.82317 lineto 0.44264 0.84489 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44264 0.84489 moveto 0.44212 0.84813 lineto gsave
+0.44741 0.84651 lineto 0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.51223 0.82673 moveto 0.44264 0.84489 lineto 0.44741 0.84651 lineto 0.751 0.623 0.717 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.42551 0.83904 moveto 0.42528 0.84632 lineto gsave
+0.43606 0.84264 lineto 0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42528 0.84632 moveto 0.4539 0.84873 lineto gsave
+0.43606 0.84264 lineto 0.778 0.552 0.593 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.37746 0.83873 moveto 0.42528 0.84632 lineto 0.42597 0.82414 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.37746 0.83873 moveto 0.43571 0.84719 lineto gsave
+0.44612 0.82317 lineto 0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44264 0.84489 moveto 0.44612 0.82317 lineto gsave
+0.43571 0.84719 lineto 0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.51223 0.82673 moveto 0.44741 0.84651 lineto 0.50027 0.85109 lineto 0.751 0.623 0.717 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.4539 0.84873 moveto 0.50027 0.85109 lineto gsave
+0.44741 0.84651 lineto 0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51193 0.84844 moveto 0.51223 0.82673 lineto gsave
+0.50027 0.85109 lineto 0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.37943 0.79399 moveto 0.42666 0.80223 lineto 0.42733 0.78058 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42733 0.78058 moveto 0.3804 0.77202 lineto 0.37943 0.79399 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67298 0.74568 moveto 0.62932 0.75603 lineto 0.62982 0.77754 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62932 0.75603 moveto 0.67298 0.74568 lineto 0.67221 0.72406 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29936 0.50663 moveto 0.32007 0.52998 lineto 0.32137 0.50988 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32137 0.50988 moveto 0.30082 0.48605 lineto 0.29936 0.50663 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70665 0.6664 moveto 0.6707 0.68159 lineto 0.67145 0.7027 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.6707 0.68159 moveto 0.70665 0.6664 lineto 0.70568 0.64511 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73748 0.43482 moveto 0.72339 0.46071 lineto 0.72445 0.48053 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72339 0.46071 moveto 0.73748 0.43482 lineto 0.73631 0.41478 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29849 0.37803 moveto 0.3065 0.40616 lineto 0.30788 0.38677 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30788 0.38677 moveto 0.29996 0.3582 lineto 0.29849 0.37803 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72881 0.56218 moveto 0.70283 0.58271 lineto 0.70377 0.60327 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70283 0.58271 moveto 0.72881 0.56218 lineto 0.7277 0.54141 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31334 0.63415 moveto 0.34522 0.65188 lineto 0.34637 0.63102 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34637 0.63102 moveto 0.31472 0.61281 lineto 0.31334 0.63415 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34046 0.73785 moveto 0.38136 0.75031 lineto 0.3823 0.72885 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3823 0.72885 moveto 0.34167 0.71597 lineto 0.34046 0.73785 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63086 0.82134 moveto 0.58156 0.82725 lineto 0.58179 0.84929 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58156 0.82725 moveto 0.63086 0.82134 lineto 0.63034 0.79931 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.37845 0.81623 moveto 0.42597 0.82414 lineto 0.42666 0.80223 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42666 0.80223 moveto 0.37943 0.79399 lineto 0.37845 0.81623 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67376 0.76755 moveto 0.62982 0.77754 lineto 0.63034 0.79931 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62982 0.77754 moveto 0.67376 0.76755 lineto 0.67298 0.74568 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44612 0.82317 moveto 0.51223 0.82673 lineto 0.51257 0.80175 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51223 0.82673 moveto 0.57848 0.82433 lineto 0.57517 0.79936 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57517 0.79936 moveto 0.51257 0.80175 lineto 0.51223 0.82673 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51257 0.80175 moveto 0.45013 0.7982 lineto 0.44612 0.82317 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45013 0.7982 moveto 0.51257 0.80175 lineto 0.51291 0.77673 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51257 0.80175 moveto 0.57517 0.79936 lineto 0.57186 0.77436 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57186 0.77436 moveto 0.51291 0.77673 lineto 0.51257 0.80175 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29788 0.52746 moveto 0.31875 0.55033 lineto 0.32007 0.52998 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32007 0.52998 moveto 0.29936 0.50663 lineto 0.29788 0.52746 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70764 0.68795 moveto 0.67145 0.7027 lineto 0.67221 0.72406 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67145 0.7027 moveto 0.70764 0.68795 lineto 0.70665 0.6664 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51291 0.77673 moveto 0.45413 0.77322 lineto 0.45013 0.7982 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45413 0.77322 moveto 0.51291 0.77673 lineto 0.51326 0.75167 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51291 0.77673 moveto 0.57186 0.77436 lineto 0.56855 0.74935 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56855 0.74935 moveto 0.51326 0.75167 lineto 0.51291 0.77673 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73865 0.45511 moveto 0.72445 0.48053 lineto 0.72552 0.50058 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72445 0.48053 moveto 0.73865 0.45511 lineto 0.73748 0.43482 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.297 0.39811 moveto 0.3051 0.42578 lineto 0.3065 0.40616 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3065 0.40616 moveto 0.29849 0.37803 lineto 0.297 0.39811 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51326 0.75167 moveto 0.45813 0.74822 lineto 0.45413 0.77322 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45813 0.74822 moveto 0.51326 0.75167 lineto 0.5136 0.72658 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51326 0.75167 moveto 0.56855 0.74935 lineto 0.56523 0.72431 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56523 0.72431 moveto 0.5136 0.72658 lineto 0.51326 0.75167 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72993 0.58321 moveto 0.70377 0.60327 lineto 0.70472 0.62406 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70377 0.60327 moveto 0.72993 0.58321 lineto 0.72881 0.56218 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5136 0.72658 moveto 0.46214 0.72321 lineto 0.45813 0.74822 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.46214 0.72321 moveto 0.5136 0.72658 lineto 0.51395 0.70146 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5136 0.72658 moveto 0.56523 0.72431 lineto 0.56191 0.69926 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56191 0.69926 moveto 0.51395 0.70146 lineto 0.5136 0.72658 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51395 0.70146 moveto 0.46615 0.69819 lineto 0.46214 0.72321 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.46615 0.69819 moveto 0.51395 0.70146 lineto 0.51429 0.6763 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51395 0.70146 moveto 0.56191 0.69926 lineto 0.55858 0.67418 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55858 0.67418 moveto 0.51429 0.6763 lineto 0.51395 0.70146 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31195 0.65574 moveto 0.34405 0.67299 lineto 0.34522 0.65188 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34522 0.65188 moveto 0.31334 0.63415 lineto 0.31195 0.65574 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51429 0.6763 moveto 0.47017 0.67315 lineto 0.46615 0.69819 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47017 0.67315 moveto 0.51429 0.6763 lineto 0.51464 0.65111 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51429 0.6763 moveto 0.55858 0.67418 lineto 0.55525 0.64909 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55525 0.64909 moveto 0.51464 0.65111 lineto 0.51429 0.6763 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33924 0.75999 moveto 0.3804 0.77202 lineto 0.38136 0.75031 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38136 0.75031 moveto 0.34046 0.73785 lineto 0.33924 0.75999 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58179 0.84929 moveto 0.63138 0.84363 lineto 0.63086 0.82134 lineto gsave
+0.578 0.389 0.588 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67534 0.81209 moveto 0.63086 0.82134 lineto 0.63121 0.83631 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63121 0.83631 moveto 0.63138 0.84363 lineto gsave
+0.64032 0.83721 lineto 0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.67534 0.81209 moveto 0.63121 0.83631 lineto 0.64032 0.83721 lineto 0.484 0.315 0.576 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.63086 0.82134 moveto 0.67534 0.81209 lineto 0.67454 0.78968 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.64606 0.83778 moveto 0.64695 0.84102 lineto gsave
+0.65024 0.83819 lineto 0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63138 0.84363 moveto 0.64025 0.84187 lineto gsave
+0.67534 0.81209 lineto 0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.64025 0.84187 moveto 0.64695 0.84102 lineto 0.64606 0.83778 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67614 0.83476 moveto 0.67551 0.81703 lineto gsave
+0.64606 0.83778 lineto 0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.65597 0.83876 moveto 0.67614 0.83476 lineto gsave
+0.64606 0.83778 lineto 0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67551 0.81703 moveto 0.67534 0.81209 lineto gsave
+0.64025 0.84187 lineto 0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.71274 0.79971 moveto 0.67534 0.81209 lineto 0.67551 0.81703 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67551 0.81703 moveto 0.67614 0.83476 lineto gsave
+0.69042 0.82108 lineto 0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.71274 0.79971 moveto 0.67551 0.81703 lineto 0.69042 0.82108 lineto 0.355 0.217 0.551 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.67534 0.81209 moveto 0.71274 0.79971 lineto 0.7117 0.77681 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70088 0.82393 moveto 0.70218 0.82717 lineto gsave
+0.70372 0.8247 lineto 0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67614 0.83476 moveto 0.69269 0.82955 lineto gsave
+0.71274 0.79971 lineto 0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70218 0.82717 moveto 0.70088 0.82393 lineto gsave
+0.69346 0.82902 lineto 0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.71345 0.81529 moveto 0.71274 0.79971 lineto gsave
+0.69715 0.82291 lineto 0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.69269 0.82955 moveto 0.70088 0.82393 lineto 0.69715 0.82291 lineto 0.355 0.217 0.551 setrgbcolor
+fill
+grestore
+gsave
+0.71345 0.81529 moveto 0.69715 0.82291 lineto 0.70088 0.82393 lineto 0.355 0.217 0.551 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.70218 0.82717 moveto 0.70606 0.82534 lineto gsave
+0.70372 0.8247 lineto 0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.65597 0.83876 moveto 0.69269 0.82955 lineto gsave
+0.65024 0.83819 lineto 0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69269 0.82955 moveto 0.70218 0.82717 lineto gsave
+0.69346 0.82902 lineto 0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.65024 0.83819 moveto 0.69269 0.82955 lineto 0.69346 0.82902 lineto 0.471 0.423 0.722 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.69269 0.82955 moveto 0.7138 0.8229 lineto 0.71345 0.81529 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74069 0.78457 moveto 0.71274 0.79971 lineto 0.7138 0.8229 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.71274 0.79971 moveto 0.74069 0.78457 lineto 0.73943 0.76106 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7138 0.8229 moveto 0.74196 0.80838 lineto 0.74069 0.78457 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74196 0.80838 moveto 0.72926 0.78356 lineto gsave
+0.70372 0.8247 lineto 0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70606 0.82534 moveto 0.74196 0.80838 lineto gsave
+0.70372 0.8247 lineto 0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.65024 0.83819 moveto 0.69346 0.82902 lineto 0.69213 0.80224 lineto 0.471 0.423 0.722 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.70088 0.82393 moveto 0.69213 0.80224 lineto gsave
+0.69346 0.82902 lineto 0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73943 0.76106 moveto 0.7117 0.77681 lineto 0.71274 0.79971 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72926 0.78356 moveto 0.69213 0.80224 lineto 0.70088 0.82393 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.72926 0.78356 moveto 0.70088 0.82393 lineto 0.70372 0.8247 lineto 0.292 0.32 0.718 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.64695 0.84102 moveto 0.65597 0.83876 lineto gsave
+0.65024 0.83819 lineto 0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.64025 0.84187 moveto 0.65597 0.83876 lineto gsave
+0.64606 0.83778 lineto 0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58179 0.84929 moveto 0.64025 0.84187 lineto gsave
+0.64012 0.81606 lineto 0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.64606 0.83778 moveto 0.64012 0.81606 lineto gsave
+0.64025 0.84187 lineto 0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7117 0.77681 moveto 0.67454 0.78968 lineto 0.67534 0.81209 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69213 0.80224 moveto 0.64012 0.81606 lineto 0.64606 0.83778 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.69213 0.80224 moveto 0.64606 0.83778 lineto 0.65024 0.83819 lineto 0.471 0.423 0.722 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.67454 0.78968 moveto 0.63034 0.79931 lineto 0.63086 0.82134 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.64012 0.81606 moveto 0.57848 0.82433 lineto 0.58179 0.84929 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51464 0.65111 moveto 0.47418 0.64811 lineto 0.47017 0.67315 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47418 0.64811 moveto 0.51464 0.65111 lineto 0.51499 0.62588 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51464 0.65111 moveto 0.55525 0.64909 lineto 0.55193 0.62397 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55193 0.62397 moveto 0.51499 0.62588 lineto 0.51464 0.65111 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63034 0.79931 moveto 0.67454 0.78968 lineto 0.67376 0.76755 lineto gsave
+0.484 0.315 0.576 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57848 0.82433 moveto 0.64012 0.81606 lineto 0.63329 0.79113 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63329 0.79113 moveto 0.57517 0.79936 lineto 0.57848 0.82433 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51499 0.62588 moveto 0.4782 0.62304 lineto 0.47418 0.64811 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4782 0.62304 moveto 0.51499 0.62588 lineto 0.51533 0.60062 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51499 0.62588 moveto 0.55193 0.62397 lineto 0.54859 0.59883 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54859 0.59883 moveto 0.51533 0.60062 lineto 0.51499 0.62588 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57517 0.79936 moveto 0.63329 0.79113 lineto 0.62648 0.76623 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62648 0.76623 moveto 0.57186 0.77436 lineto 0.57517 0.79936 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42597 0.82414 moveto 0.37845 0.81623 lineto 0.37746 0.83873 lineto gsave
+0.837 0.603 0.585 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57186 0.77436 moveto 0.62648 0.76623 lineto 0.61967 0.74136 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.61967 0.74136 moveto 0.56855 0.74935 lineto 0.57186 0.77436 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51533 0.60062 moveto 0.48222 0.59797 lineto 0.4782 0.62304 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48222 0.59797 moveto 0.51533 0.60062 lineto 0.51568 0.57532 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51533 0.60062 moveto 0.54859 0.59883 lineto 0.54526 0.57368 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54526 0.57368 moveto 0.51568 0.57532 lineto 0.51533 0.60062 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56855 0.74935 moveto 0.61967 0.74136 lineto 0.61287 0.71652 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.61287 0.71652 moveto 0.56523 0.72431 lineto 0.56855 0.74935 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56523 0.72431 moveto 0.61287 0.71652 lineto 0.60608 0.6917 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.60608 0.6917 moveto 0.56191 0.69926 lineto 0.56523 0.72431 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51568 0.57532 moveto 0.48624 0.57288 lineto 0.48222 0.59797 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48624 0.57288 moveto 0.51568 0.57532 lineto 0.51603 0.54999 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51568 0.57532 moveto 0.54526 0.57368 lineto 0.54192 0.5485 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54192 0.5485 moveto 0.51603 0.54999 lineto 0.51568 0.57532 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29638 0.54854 moveto 0.31742 0.57091 lineto 0.31875 0.55033 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31875 0.55033 moveto 0.29788 0.52746 lineto 0.29638 0.54854 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56191 0.69926 moveto 0.60608 0.6917 lineto 0.59929 0.66692 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.59929 0.66692 moveto 0.55858 0.67418 lineto 0.56191 0.69926 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70863 0.70976 moveto 0.67221 0.72406 lineto 0.67298 0.74568 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67221 0.72406 moveto 0.70863 0.70976 lineto 0.70764 0.68795 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73985 0.47564 moveto 0.72552 0.50058 lineto 0.7266 0.52087 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72552 0.50058 moveto 0.73985 0.47564 lineto 0.73865 0.45511 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55858 0.67418 moveto 0.59929 0.66692 lineto 0.59252 0.64216 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.59252 0.64216 moveto 0.55525 0.64909 lineto 0.55858 0.67418 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51603 0.54999 moveto 0.49026 0.54777 lineto 0.48624 0.57288 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49026 0.54777 moveto 0.51603 0.54999 lineto 0.51638 0.52462 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51603 0.54999 moveto 0.54192 0.5485 lineto 0.53858 0.5233 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53858 0.5233 moveto 0.51638 0.52462 lineto 0.51603 0.54999 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.2955 0.41843 moveto 0.30369 0.44563 lineto 0.3051 0.42578 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3051 0.42578 moveto 0.297 0.39811 lineto 0.2955 0.41843 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44612 0.82317 moveto 0.385 0.81378 lineto 0.37746 0.83873 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.385 0.81378 moveto 0.44612 0.82317 lineto 0.45013 0.7982 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45013 0.7982 moveto 0.39252 0.78886 lineto 0.385 0.81378 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39252 0.78886 moveto 0.45013 0.7982 lineto 0.45413 0.77322 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55525 0.64909 moveto 0.59252 0.64216 lineto 0.58575 0.61743 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58575 0.61743 moveto 0.55193 0.62397 lineto 0.55525 0.64909 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45413 0.77322 moveto 0.40003 0.76399 lineto 0.39252 0.78886 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40003 0.76399 moveto 0.45413 0.77322 lineto 0.45813 0.74822 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73107 0.6045 moveto 0.70472 0.62406 lineto 0.70568 0.64511 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70472 0.62406 moveto 0.73107 0.6045 lineto 0.72993 0.58321 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51638 0.52462 moveto 0.49429 0.52266 lineto 0.49026 0.54777 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49429 0.52266 moveto 0.51638 0.52462 lineto 0.51673 0.49922 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51638 0.52462 moveto 0.53858 0.5233 lineto 0.53524 0.49808 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53524 0.49808 moveto 0.51673 0.49922 lineto 0.51638 0.52462 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73509 0.34624 moveto 0.73403 0.37541 lineto 0.73517 0.39498 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55193 0.62397 moveto 0.58575 0.61743 lineto 0.57899 0.59273 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57899 0.59273 moveto 0.54859 0.59883 lineto 0.55193 0.62397 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45813 0.74822 moveto 0.40753 0.73916 lineto 0.40003 0.76399 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40753 0.73916 moveto 0.45813 0.74822 lineto 0.46214 0.72321 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.46214 0.72321 moveto 0.41501 0.71437 lineto 0.40753 0.73916 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.41501 0.71437 moveto 0.46214 0.72321 lineto 0.46615 0.69819 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54859 0.59883 moveto 0.57899 0.59273 lineto 0.57223 0.56805 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57223 0.56805 moveto 0.54526 0.57368 lineto 0.54859 0.59883 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51673 0.49922 moveto 0.49831 0.49753 lineto 0.49429 0.52266 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49831 0.49753 moveto 0.51673 0.49922 lineto 0.51708 0.47378 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51673 0.49922 moveto 0.53524 0.49808 lineto 0.53189 0.47284 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53189 0.47284 moveto 0.51708 0.47378 lineto 0.51673 0.49922 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.46615 0.69819 moveto 0.42248 0.68963 lineto 0.41501 0.71437 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42248 0.68963 moveto 0.46615 0.69819 lineto 0.47017 0.67315 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54526 0.57368 moveto 0.57223 0.56805 lineto 0.56549 0.54341 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56549 0.54341 moveto 0.54192 0.5485 lineto 0.54526 0.57368 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47017 0.67315 moveto 0.42994 0.66492 lineto 0.42248 0.68963 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42994 0.66492 moveto 0.47017 0.67315 lineto 0.47418 0.64811 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31053 0.67759 moveto 0.34287 0.69435 lineto 0.34405 0.67299 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34405 0.67299 moveto 0.31195 0.65574 lineto 0.31053 0.67759 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47418 0.64811 moveto 0.43739 0.64026 lineto 0.42994 0.66492 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43739 0.64026 moveto 0.47418 0.64811 lineto 0.4782 0.62304 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54192 0.5485 moveto 0.56549 0.54341 lineto 0.55875 0.51879 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55875 0.51879 moveto 0.53858 0.5233 lineto 0.54192 0.5485 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51708 0.47378 moveto 0.50234 0.47239 lineto 0.49831 0.49753 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50234 0.47239 moveto 0.51708 0.47378 lineto 0.51743 0.44831 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51708 0.47378 moveto 0.53189 0.47284 lineto 0.52854 0.44758 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52854 0.44758 moveto 0.51743 0.44831 lineto 0.51708 0.47378 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4782 0.62304 moveto 0.44482 0.61564 lineto 0.43739 0.64026 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44482 0.61564 moveto 0.4782 0.62304 lineto 0.48222 0.59797 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53858 0.5233 moveto 0.55875 0.51879 lineto 0.55202 0.4942 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55202 0.4942 moveto 0.53524 0.49808 lineto 0.53858 0.5233 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48222 0.59797 moveto 0.45224 0.59106 lineto 0.44482 0.61564 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45224 0.59106 moveto 0.48222 0.59797 lineto 0.48624 0.57288 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48624 0.57288 moveto 0.45965 0.56652 lineto 0.45224 0.59106 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45965 0.56652 moveto 0.48624 0.57288 lineto 0.49026 0.54777 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51743 0.44831 moveto 0.50637 0.44723 lineto 0.50234 0.47239 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50637 0.44723 moveto 0.51743 0.44831 lineto 0.51778 0.4228 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51743 0.44831 moveto 0.52854 0.44758 lineto 0.52519 0.4223 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52519 0.4223 moveto 0.51778 0.4228 lineto 0.51743 0.44831 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53524 0.49808 moveto 0.55202 0.4942 lineto 0.5453 0.46964 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5453 0.46964 moveto 0.53189 0.47284 lineto 0.53524 0.49808 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.338 0.7824 moveto 0.37943 0.79399 lineto 0.3804 0.77202 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3804 0.77202 moveto 0.33924 0.75999 lineto 0.338 0.7824 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49026 0.54777 moveto 0.46705 0.54202 lineto 0.45965 0.56652 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.46705 0.54202 moveto 0.49026 0.54777 lineto 0.49429 0.52266 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53189 0.47284 moveto 0.5453 0.46964 lineto 0.53858 0.44511 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53858 0.44511 moveto 0.52854 0.44758 lineto 0.53189 0.47284 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49429 0.52266 moveto 0.47444 0.51757 lineto 0.46705 0.54202 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47444 0.51757 moveto 0.49429 0.52266 lineto 0.49831 0.49753 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51778 0.4228 moveto 0.51041 0.42206 lineto 0.50637 0.44723 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51041 0.42206 moveto 0.51778 0.4228 lineto 0.51813 0.39726 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51778 0.4228 moveto 0.52519 0.4223 lineto 0.52184 0.397 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52184 0.397 moveto 0.51813 0.39726 lineto 0.51778 0.4228 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49831 0.49753 moveto 0.48181 0.49315 lineto 0.47444 0.51757 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48181 0.49315 moveto 0.49831 0.49753 lineto 0.50234 0.47239 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52854 0.44758 moveto 0.53858 0.44511 lineto 0.53187 0.4206 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53187 0.4206 moveto 0.52519 0.4223 lineto 0.52854 0.44758 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50234 0.47239 moveto 0.48917 0.46877 lineto 0.48181 0.49315 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48917 0.46877 moveto 0.50234 0.47239 lineto 0.50637 0.44723 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52519 0.4223 moveto 0.53187 0.4206 lineto 0.52517 0.39613 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52517 0.39613 moveto 0.52184 0.397 lineto 0.52519 0.4223 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50637 0.44723 moveto 0.49651 0.44444 lineto 0.48917 0.46877 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49651 0.44444 moveto 0.50637 0.44723 lineto 0.51041 0.42206 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51813 0.39726 moveto 0.51444 0.39688 lineto 0.51041 0.42206 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51444 0.39688 moveto 0.51813 0.39726 lineto 0.51848 0.37168 lineto gsave
+0.751 0.623 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51813 0.39726 moveto 0.52184 0.397 lineto 0.51848 0.37168 lineto gsave
+0.676 0.56 0.717 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51041 0.42206 moveto 0.50385 0.42015 lineto 0.49651 0.44444 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50385 0.42015 moveto 0.51041 0.42206 lineto 0.51444 0.39688 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52184 0.397 moveto 0.52517 0.39613 lineto 0.51848 0.37168 lineto gsave
+0.588 0.497 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51444 0.39688 moveto 0.51117 0.39589 lineto 0.50385 0.42015 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51117 0.39589 moveto 0.51444 0.39688 lineto 0.51848 0.37168 lineto gsave
+0.821 0.69 0.72 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.01 setlinewidth
+0.7363 0.31304 moveto
+0.83342 0.2869 lineto
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50693 0.39062 moveto 0.50719 0.39259 lineto 0.51848 0.37168 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50719 0.39259 moveto 0.50866 0.39441 lineto 0.51848 0.37168 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50866 0.39441 moveto 0.51117 0.39589 lineto 0.51848 0.37168 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51303 0.38591 moveto 0.51001 0.38709 lineto 0.51848 0.37168 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5079 0.38871 moveto 0.50693 0.39062 lineto 0.51848 0.37168 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51001 0.38709 moveto 0.5079 0.38871 lineto 0.51848 0.37168 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52517 0.39613 moveto 0.52778 0.39473 lineto 0.51848 0.37168 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52778 0.39473 moveto 0.52937 0.39296 lineto 0.51848 0.37168 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52937 0.39296 moveto 0.52978 0.391 lineto 0.51848 0.37168 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52978 0.391 moveto 0.52894 0.38907 lineto 0.51848 0.37168 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52894 0.38907 moveto 0.52695 0.38737 lineto 0.51848 0.37168 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52695 0.38737 moveto 0.52401 0.3861 lineto 0.51848 0.37168 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52401 0.3861 moveto 0.52044 0.38539 lineto 0.51848 0.37168 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52044 0.38539 moveto 0.51665 0.38532 lineto 0.51848 0.37168 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51665 0.38532 moveto 0.51303 0.38591 lineto 0.51848 0.37168 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52778 0.39473 moveto 0.52517 0.39613 lineto 0.53187 0.4206 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29486 0.56988 moveto 0.31608 0.59174 lineto 0.31742 0.57091 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31742 0.57091 moveto 0.29638 0.54854 lineto 0.29486 0.56988 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70964 0.73184 moveto 0.67298 0.74568 lineto 0.67376 0.76755 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67298 0.74568 moveto 0.70964 0.73184 lineto 0.70863 0.70976 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74105 0.49642 moveto 0.7266 0.52087 lineto 0.7277 0.54141 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7266 0.52087 moveto 0.74105 0.49642 lineto 0.73985 0.47564 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4988 0.41725 moveto 0.50385 0.42015 lineto 0.51117 0.39589 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51117 0.39589 moveto 0.50866 0.39441 lineto 0.4988 0.41725 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29397 0.43901 moveto 0.30226 0.46572 lineto 0.30369 0.44563 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30369 0.44563 moveto 0.2955 0.41843 lineto 0.29397 0.43901 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53712 0.41789 moveto 0.53187 0.4206 lineto 0.53858 0.44511 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53187 0.4206 moveto 0.53712 0.41789 lineto 0.52778 0.39473 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48888 0.44021 moveto 0.49651 0.44444 lineto 0.50385 0.42015 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50385 0.42015 moveto 0.4988 0.41725 lineto 0.48888 0.44021 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5465 0.44114 moveto 0.53858 0.44511 lineto 0.5453 0.46964 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53858 0.44511 moveto 0.5465 0.44114 lineto 0.53712 0.41789 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73222 0.62604 moveto 0.70568 0.64511 lineto 0.70665 0.6664 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70568 0.64511 moveto 0.73222 0.62604 lineto 0.73107 0.6045 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73627 0.36625 moveto 0.73517 0.39498 lineto 0.73631 0.41478 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73517 0.39498 moveto 0.73627 0.36625 lineto 0.73509 0.34624 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52937 0.39296 moveto 0.52778 0.39473 lineto 0.53712 0.41789 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55591 0.46449 moveto 0.5453 0.46964 lineto 0.55202 0.4942 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5453 0.46964 moveto 0.55591 0.46449 lineto 0.5465 0.44114 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4958 0.41369 moveto 0.4988 0.41725 lineto 0.50866 0.39441 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50866 0.39441 moveto 0.50719 0.39259 lineto 0.4958 0.41369 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47891 0.46329 moveto 0.48917 0.46877 lineto 0.49651 0.44444 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49651 0.44444 moveto 0.48888 0.44021 lineto 0.47891 0.46329 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56537 0.48794 moveto 0.55202 0.4942 lineto 0.55875 0.51879 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55202 0.4942 moveto 0.56537 0.48794 lineto 0.55591 0.46449 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30911 0.69972 moveto 0.34167 0.71597 lineto 0.34287 0.69435 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34287 0.69435 moveto 0.31053 0.67759 lineto 0.30911 0.69972 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4689 0.48648 moveto 0.48181 0.49315 lineto 0.48917 0.46877 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48917 0.46877 moveto 0.47891 0.46329 lineto 0.4689 0.48648 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57487 0.51149 moveto 0.55875 0.51879 lineto 0.56549 0.54341 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55875 0.51879 moveto 0.57487 0.51149 lineto 0.56537 0.48794 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33674 0.80509 moveto 0.37845 0.81623 lineto 0.37943 0.79399 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.37943 0.79399 moveto 0.338 0.7824 lineto 0.33674 0.80509 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58441 0.53515 moveto 0.56549 0.54341 lineto 0.57223 0.56805 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56549 0.54341 moveto 0.58441 0.53515 lineto 0.57487 0.51149 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53712 0.41789 moveto 0.54036 0.41442 lineto 0.52937 0.39296 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52978 0.391 moveto 0.52937 0.39296 lineto 0.54036 0.41442 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45883 0.50979 moveto 0.47444 0.51757 lineto 0.48181 0.49315 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48181 0.49315 moveto 0.4689 0.48648 lineto 0.45883 0.50979 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54036 0.41442 moveto 0.53712 0.41789 lineto 0.5465 0.44114 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49521 0.40981 moveto 0.4958 0.41369 lineto 0.50719 0.39259 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50719 0.39259 moveto 0.50693 0.39062 lineto 0.49521 0.40981 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.59399 0.5589 moveto 0.57223 0.56805 lineto 0.57899 0.59273 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57223 0.56805 moveto 0.59399 0.5589 lineto 0.58441 0.53515 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48431 0.43498 moveto 0.48888 0.44021 lineto 0.4988 0.41725 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4988 0.41725 moveto 0.4958 0.41369 lineto 0.48431 0.43498 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44871 0.53321 moveto 0.46705 0.54202 lineto 0.47444 0.51757 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47444 0.51757 moveto 0.45883 0.50979 lineto 0.44871 0.53321 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.60361 0.58276 moveto 0.57899 0.59273 lineto 0.58575 0.61743 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57899 0.59273 moveto 0.60361 0.58276 lineto 0.59399 0.5589 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.61328 0.60672 moveto 0.58575 0.61743 lineto 0.59252 0.64216 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58575 0.61743 moveto 0.61328 0.60672 lineto 0.60361 0.58276 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43854 0.55676 moveto 0.45965 0.56652 lineto 0.46705 0.54202 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.46705 0.54202 moveto 0.44871 0.53321 lineto 0.43854 0.55676 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62299 0.63079 moveto 0.59252 0.64216 lineto 0.59929 0.66692 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.59252 0.64216 moveto 0.62299 0.63079 lineto 0.61328 0.60672 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54036 0.41442 moveto 0.54122 0.41058 lineto 0.52978 0.391 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52894 0.38907 moveto 0.52978 0.391 lineto 0.54122 0.41058 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55143 0.43606 moveto 0.5465 0.44114 lineto 0.55591 0.46449 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5465 0.44114 moveto 0.55143 0.43606 lineto 0.54036 0.41442 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29333 0.59149 moveto 0.31472 0.61281 lineto 0.31608 0.59174 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31608 0.59174 moveto 0.29486 0.56988 lineto 0.29333 0.59149 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.71066 0.75419 moveto 0.67376 0.76755 lineto 0.67454 0.78968 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67376 0.76755 moveto 0.71066 0.75419 lineto 0.70964 0.73184 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74227 0.51746 moveto 0.7277 0.54141 lineto 0.72881 0.56218 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7277 0.54141 moveto 0.74227 0.51746 lineto 0.74105 0.49642 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42832 0.58042 moveto 0.45224 0.59106 lineto 0.45965 0.56652 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45965 0.56652 moveto 0.43854 0.55676 lineto 0.42832 0.58042 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49712 0.40605 moveto 0.49521 0.40981 lineto 0.50693 0.39062 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50693 0.39062 moveto 0.5079 0.38871 lineto 0.49712 0.40605 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63273 0.65496 moveto 0.59929 0.66692 lineto 0.60608 0.6917 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.59929 0.66692 moveto 0.63273 0.65496 lineto 0.62299 0.63079 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29243 0.45984 moveto 0.30082 0.48605 lineto 0.30226 0.46572 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30226 0.46572 moveto 0.29397 0.43901 lineto 0.29243 0.45984 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.64253 0.67924 moveto 0.60608 0.6917 lineto 0.61287 0.71652 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.60608 0.6917 moveto 0.64253 0.67924 lineto 0.63273 0.65496 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47271 0.45646 moveto 0.47891 0.46329 lineto 0.48888 0.44021 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48888 0.44021 moveto 0.48431 0.43498 lineto 0.47271 0.45646 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.41805 0.6042 moveto 0.44482 0.61564 lineto 0.45224 0.59106 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45224 0.59106 moveto 0.42832 0.58042 lineto 0.41805 0.6042 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73338 0.64785 moveto 0.70665 0.6664 lineto 0.70764 0.68795 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70665 0.6664 moveto 0.73338 0.64785 lineto 0.73222 0.62604 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73746 0.38652 moveto 0.73631 0.41478 lineto 0.73748 0.43482 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73631 0.41478 moveto 0.73746 0.38652 lineto 0.73627 0.36625 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.65236 0.70363 moveto 0.61287 0.71652 lineto 0.61967 0.74136 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.61287 0.71652 moveto 0.65236 0.70363 lineto 0.64253 0.67924 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54122 0.41058 moveto 0.54036 0.41442 lineto 0.55143 0.43606 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40772 0.62811 moveto 0.43739 0.64026 lineto 0.44482 0.61564 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44482 0.61564 moveto 0.41805 0.6042 lineto 0.40772 0.62811 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54122 0.41058 moveto 0.53958 0.40676 lineto 0.52894 0.38907 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52695 0.38737 moveto 0.52894 0.38907 lineto 0.53958 0.40676 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56259 0.45788 moveto 0.55591 0.46449 lineto 0.56537 0.48794 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55591 0.46449 moveto 0.56259 0.45788 lineto 0.55143 0.43606 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66224 0.72812 moveto 0.61967 0.74136 lineto 0.62648 0.76623 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.61967 0.74136 moveto 0.66224 0.72812 lineto 0.65236 0.70363 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50135 0.40282 moveto 0.49712 0.40605 lineto 0.5079 0.38871 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5079 0.38871 moveto 0.51001 0.38709 lineto 0.50135 0.40282 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30766 0.72212 moveto 0.34046 0.73785 lineto 0.34167 0.71597 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34167 0.71597 moveto 0.30911 0.69972 lineto 0.30766 0.72212 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48334 0.42927 moveto 0.48431 0.43498 lineto 0.4958 0.41369 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4958 0.41369 moveto 0.49521 0.40981 lineto 0.48334 0.42927 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67216 0.75272 moveto 0.62648 0.76623 lineto 0.63329 0.79113 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62648 0.76623 moveto 0.67216 0.75272 lineto 0.66224 0.72812 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39734 0.65214 moveto 0.42994 0.66492 lineto 0.43739 0.64026 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43739 0.64026 moveto 0.40772 0.62811 lineto 0.39734 0.65214 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.68212 0.77742 moveto 0.63329 0.79113 lineto 0.64012 0.81606 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63329 0.79113 moveto 0.68212 0.77742 lineto 0.67216 0.75272 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33547 0.82805 moveto 0.37746 0.83873 lineto 0.37845 0.81623 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.37845 0.81623 moveto 0.33674 0.80509 lineto 0.33547 0.82805 lineto gsave
+0.897 0.658 0.569 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.461 0.47815 moveto 0.4689 0.48648 lineto 0.47891 0.46329 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47891 0.46329 moveto 0.47271 0.45646 lineto 0.461 0.47815 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38691 0.67629 moveto 0.42248 0.68963 lineto 0.42994 0.66492 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42994 0.66492 moveto 0.39734 0.65214 lineto 0.38691 0.67629 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67454 0.78968 moveto 0.7117 0.77681 lineto 0.71066 0.75419 lineto gsave
+0.355 0.217 0.551 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.64012 0.81606 moveto 0.69213 0.80224 lineto 0.68212 0.77742 lineto gsave
+0.471 0.423 0.722 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53958 0.40676 moveto 0.53559 0.4034 lineto 0.52695 0.38737 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52401 0.3861 moveto 0.52695 0.38737 lineto 0.53559 0.4034 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50745 0.40049 moveto 0.50135 0.40282 lineto 0.51001 0.38709 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51001 0.38709 moveto 0.51303 0.38591 lineto 0.50745 0.40049 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57385 0.47987 moveto 0.56537 0.48794 lineto 0.57487 0.51149 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56537 0.48794 moveto 0.57385 0.47987 lineto 0.56259 0.45788 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.37642 0.70057 moveto 0.41501 0.71437 lineto 0.42248 0.68963 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42248 0.68963 moveto 0.38691 0.67629 lineto 0.37642 0.70057 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53559 0.4034 moveto 0.52966 0.40086 lineto 0.52401 0.3861 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52044 0.38539 moveto 0.52401 0.3861 lineto 0.52966 0.40086 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.36589 0.72497 moveto 0.40753 0.73916 lineto 0.41501 0.71437 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.41501 0.71437 moveto 0.37642 0.70057 lineto 0.36589 0.72497 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51476 0.39932 moveto 0.50745 0.40049 lineto 0.51303 0.38591 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51303 0.38591 moveto 0.51665 0.38532 lineto 0.51476 0.39932 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5528 0.4304 moveto 0.55143 0.43606 lineto 0.56259 0.45788 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55143 0.43606 moveto 0.5528 0.4304 lineto 0.54122 0.41058 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44918 0.50004 moveto 0.45883 0.50979 lineto 0.4689 0.48648 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4689 0.48648 moveto 0.461 0.47815 lineto 0.44918 0.50004 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52966 0.40086 moveto 0.52245 0.39945 lineto 0.52044 0.38539 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51665 0.38532 moveto 0.52044 0.38539 lineto 0.52245 0.39945 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29177 0.61336 moveto 0.31334 0.63415 lineto 0.31472 0.61281 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31472 0.61281 moveto 0.29333 0.59149 lineto 0.29177 0.61336 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35529 0.7495 moveto 0.40003 0.76399 lineto 0.40753 0.73916 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40753 0.73916 moveto 0.36589 0.72497 lineto 0.35529 0.7495 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52245 0.39945 moveto 0.51476 0.39932 lineto 0.51665 0.38532 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53958 0.40676 moveto 0.54122 0.41058 lineto 0.5528 0.4304 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74351 0.53876 moveto 0.72881 0.56218 lineto 0.72993 0.58321 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72881 0.56218 moveto 0.74351 0.53876 lineto 0.74227 0.51746 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5852 0.50206 moveto 0.57487 0.51149 lineto 0.58441 0.53515 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57487 0.51149 moveto 0.5852 0.50206 lineto 0.57385 0.47987 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29087 0.48092 moveto 0.29936 0.50663 lineto 0.30082 0.48605 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30082 0.48605 moveto 0.29243 0.45984 lineto 0.29087 0.48092 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34464 0.77415 moveto 0.39252 0.78886 lineto 0.40003 0.76399 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40003 0.76399 moveto 0.35529 0.7495 lineto 0.34464 0.77415 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48615 0.42371 moveto 0.48334 0.42927 lineto 0.49521 0.40981 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49521 0.40981 moveto 0.49712 0.40605 lineto 0.48615 0.42371 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4713 0.44899 moveto 0.47271 0.45646 lineto 0.48431 0.43498 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48431 0.43498 moveto 0.48334 0.42927 lineto 0.4713 0.44899 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73456 0.66993 moveto 0.70764 0.68795 lineto 0.70863 0.70976 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70764 0.68795 moveto 0.73456 0.66993 lineto 0.73338 0.64785 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73867 0.40704 moveto 0.73748 0.43482 lineto 0.73865 0.45511 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73748 0.43482 moveto 0.73867 0.40704 lineto 0.73746 0.38652 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30321 0.79101 moveto 0.33674 0.80509 lineto 0.338 0.7824 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33394 0.79893 moveto 0.385 0.81378 lineto 0.39252 0.78886 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39252 0.78886 moveto 0.34464 0.77415 lineto 0.33394 0.79893 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30406 0.34894 moveto 0.29849 0.37803 lineto 0.29996 0.3582 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29996 0.3582 moveto 0.30554 0.32866 lineto 0.30406 0.34894 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30619 0.7448 moveto 0.33924 0.75999 lineto 0.34046 0.73785 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34046 0.73785 moveto 0.30766 0.72212 lineto 0.30619 0.7448 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.59665 0.52443 moveto 0.58441 0.53515 lineto 0.59399 0.5589 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58441 0.53515 moveto 0.59665 0.52443 lineto 0.5852 0.50206 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43725 0.52213 moveto 0.44871 0.53321 lineto 0.45883 0.50979 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45883 0.50979 moveto 0.44918 0.50004 lineto 0.43725 0.52213 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.31582 0.81074 moveto 0.327 0.82059 lineto 0.33674 0.80509 lineto 0.957 0.718 0.535 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.31699 0.82067 moveto 0.32318 0.82385 lineto 0.32458 0.82061 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32318 0.82385 moveto 0.32882 0.8254 lineto gsave
+0.32691 0.82324 lineto 0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33547 0.82805 moveto 0.33589 0.82052 lineto gsave
+0.327 0.82059 lineto 0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33589 0.82052 moveto 0.33674 0.80509 lineto gsave
+0.327 0.82059 lineto 0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32882 0.8254 moveto 0.33547 0.82805 lineto gsave
+0.31582 0.81074 lineto 0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33674 0.80509 moveto 0.30321 0.79101 lineto 0.30288 0.79614 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.33674 0.80509 moveto 0.30288 0.79614 lineto 0.31582 0.81074 lineto 0.957 0.718 0.535 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.385 0.81378 moveto 0.33394 0.79893 lineto 0.32458 0.82061 lineto gsave
+0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32458 0.82061 moveto 0.32318 0.82385 lineto gsave
+0.32691 0.82324 lineto 0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.385 0.81378 moveto 0.32458 0.82061 lineto 0.32691 0.82324 lineto 0.89 0.77 0.723 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.30288 0.79614 moveto 0.30169 0.81456 lineto gsave
+0.31582 0.81074 lineto 0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30169 0.81456 moveto 0.32882 0.8254 lineto gsave
+0.31582 0.81074 lineto 0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.28382 0.79706 moveto 0.28755 0.80072 lineto 0.30321 0.79101 lineto 0.997 0.771 0.46 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.28337 0.80197 moveto 0.28495 0.80421 lineto 0.2867 0.80098 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28495 0.80421 moveto 0.29158 0.80761 lineto gsave
+0.28877 0.8038 lineto 0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30169 0.81456 moveto 0.30288 0.79614 lineto gsave
+0.28755 0.80072 lineto 0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30288 0.79614 moveto 0.30321 0.79101 lineto gsave
+0.28755 0.80072 lineto 0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29158 0.80761 moveto 0.30169 0.81456 lineto gsave
+0.28382 0.79706 lineto 0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.338 0.7824 moveto 0.30471 0.76776 lineto 0.30321 0.79101 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28032 0.77447 moveto 0.30321 0.79101 lineto 0.30471 0.76776 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30321 0.79101 moveto 0.28032 0.77447 lineto 0.27916 0.79075 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.30321 0.79101 moveto 0.27916 0.79075 lineto 0.28382 0.79706 lineto 0.997 0.771 0.46 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.33394 0.79893 moveto 0.29833 0.77943 lineto 0.2867 0.80098 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.2867 0.80098 moveto 0.28495 0.80421 lineto gsave
+0.28877 0.8038 lineto 0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.33394 0.79893 moveto 0.2867 0.80098 lineto 0.28877 0.8038 lineto 0.951 0.867 0.719 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.27916 0.79075 moveto 0.2786 0.79869 lineto gsave
+0.28382 0.79706 lineto 0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.2786 0.79869 moveto 0.29158 0.80761 lineto gsave
+0.28382 0.79706 lineto 0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.26862 0.78114 moveto 0.2786 0.79869 lineto 0.28032 0.77447 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.26862 0.78114 moveto 0.28337 0.80197 lineto gsave
+0.29833 0.77943 lineto 0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.2867 0.80098 moveto 0.29833 0.77943 lineto gsave
+0.28337 0.80197 lineto 0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.33394 0.79893 moveto 0.28877 0.8038 lineto 0.31699 0.82067 lineto 0.951 0.867 0.719 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.29158 0.80761 moveto 0.31699 0.82067 lineto gsave
+0.28877 0.8038 lineto 0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32458 0.82061 moveto 0.33394 0.79893 lineto gsave
+0.31699 0.82067 lineto 0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.37746 0.83873 moveto 0.385 0.81378 lineto gsave
+0.32691 0.82324 lineto 0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32882 0.8254 moveto 0.37746 0.83873 lineto gsave
+0.32691 0.82324 lineto 0.89 0.77 0.723 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56453 0.45047 moveto 0.56259 0.45788 lineto 0.57385 0.47987 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56259 0.45788 moveto 0.56453 0.45047 lineto 0.5528 0.4304 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5528 0.4304 moveto 0.5504 0.42475 lineto 0.53958 0.40676 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53559 0.4034 moveto 0.53958 0.40676 lineto 0.5504 0.42475 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.6082 0.54699 moveto 0.59399 0.5589 lineto 0.60361 0.58276 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.59399 0.5589 moveto 0.6082 0.54699 lineto 0.59665 0.52443 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42522 0.54442 moveto 0.43854 0.55676 lineto 0.44871 0.53321 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44871 0.53321 moveto 0.43725 0.52213 lineto 0.42522 0.54442 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49251 0.41891 moveto 0.48615 0.42371 lineto 0.49712 0.40605 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49712 0.40605 moveto 0.50135 0.40282 lineto 0.49251 0.41891 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4591 0.46899 moveto 0.461 0.47815 lineto 0.47271 0.45646 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47271 0.45646 moveto 0.4713 0.44899 lineto 0.4591 0.46899 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.2902 0.63551 moveto 0.31195 0.65574 lineto 0.31334 0.63415 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31334 0.63415 moveto 0.29177 0.61336 lineto 0.2902 0.63551 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74476 0.56032 moveto 0.72993 0.58321 lineto 0.73107 0.6045 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72993 0.58321 moveto 0.74476 0.56032 lineto 0.74351 0.53876 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5504 0.42475 moveto 0.5528 0.4304 lineto 0.56453 0.45047 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28928 0.50228 moveto 0.29788 0.52746 lineto 0.29936 0.50663 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29936 0.50663 moveto 0.29087 0.48092 lineto 0.28928 0.50228 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.61984 0.56974 moveto 0.60361 0.58276 lineto 0.61328 0.60672 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.60361 0.58276 moveto 0.61984 0.56974 lineto 0.6082 0.54699 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73576 0.69229 moveto 0.70863 0.70976 lineto 0.70964 0.73184 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70863 0.70976 moveto 0.73576 0.69229 lineto 0.73456 0.66993 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73989 0.42781 moveto 0.73865 0.45511 lineto 0.73985 0.47564 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73865 0.45511 moveto 0.73989 0.42781 lineto 0.73867 0.40704 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.41306 0.56693 moveto 0.42832 0.58042 lineto 0.43854 0.55676 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43854 0.55676 moveto 0.42522 0.54442 lineto 0.41306 0.56693 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47498 0.44168 moveto 0.4713 0.44899 lineto 0.48334 0.42927 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48334 0.42927 moveto 0.48615 0.42371 lineto 0.47498 0.44168 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30256 0.36948 moveto 0.297 0.39811 lineto 0.29849 0.37803 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29849 0.37803 moveto 0.30406 0.34894 lineto 0.30256 0.36948 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57642 0.47081 moveto 0.57385 0.47987 lineto 0.5852 0.50206 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57385 0.47987 moveto 0.57642 0.47081 lineto 0.56453 0.45047 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5504 0.42475 moveto 0.54441 0.41976 lineto 0.53559 0.4034 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52966 0.40086 moveto 0.53559 0.4034 lineto 0.54441 0.41976 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30471 0.76776 moveto 0.338 0.7824 lineto 0.33924 0.75999 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33924 0.75999 moveto 0.30619 0.7448 lineto 0.30471 0.76776 lineto gsave
+0.957 0.718 0.535 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50174 0.41543 moveto 0.49251 0.41891 lineto 0.50135 0.40282 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50135 0.40282 moveto 0.50745 0.40049 lineto 0.50174 0.41543 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63158 0.59269 moveto 0.61328 0.60672 lineto 0.62299 0.63079 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.61328 0.60672 moveto 0.63158 0.59269 lineto 0.61984 0.56974 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4008 0.58965 moveto 0.41805 0.6042 lineto 0.42832 0.58042 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42832 0.58042 moveto 0.41306 0.56693 lineto 0.4008 0.58965 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44673 0.48927 moveto 0.44918 0.50004 lineto 0.461 0.47815 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.461 0.47815 moveto 0.4591 0.46899 lineto 0.44673 0.48927 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54441 0.41976 moveto 0.53545 0.41598 lineto 0.52966 0.40086 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52245 0.39945 moveto 0.52966 0.40086 lineto 0.53545 0.41598 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.64343 0.61583 moveto 0.62299 0.63079 lineto 0.63273 0.65496 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62299 0.63079 moveto 0.64343 0.61583 lineto 0.63158 0.59269 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51283 0.41368 moveto 0.50174 0.41543 lineto 0.50745 0.40049 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50745 0.40049 moveto 0.51476 0.39932 lineto 0.51283 0.41368 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.2886 0.65794 moveto 0.31053 0.67759 lineto 0.31195 0.65574 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31195 0.65574 moveto 0.2902 0.63551 lineto 0.2886 0.65794 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74603 0.58215 moveto 0.73107 0.6045 lineto 0.73222 0.62604 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73107 0.6045 moveto 0.74603 0.58215 lineto 0.74476 0.56032 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58846 0.49141 moveto 0.5852 0.50206 lineto 0.59665 0.52443 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5852 0.50206 moveto 0.58846 0.49141 lineto 0.57642 0.47081 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28768 0.5239 moveto 0.29638 0.54854 lineto 0.29788 0.52746 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29788 0.52746 moveto 0.28928 0.50228 lineto 0.28768 0.5239 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38842 0.61258 moveto 0.40772 0.62811 lineto 0.41805 0.6042 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.41805 0.6042 moveto 0.4008 0.58965 lineto 0.38842 0.61258 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53545 0.41598 moveto 0.52451 0.41387 lineto 0.52245 0.39945 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51476 0.39932 moveto 0.52245 0.39945 lineto 0.52451 0.41387 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52451 0.41387 moveto 0.51283 0.41368 lineto 0.51476 0.39932 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56141 0.44306 moveto 0.56453 0.45047 lineto 0.57642 0.47081 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56453 0.45047 moveto 0.56141 0.44306 lineto 0.5504 0.42475 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54441 0.41976 moveto 0.5504 0.42475 lineto 0.56141 0.44306 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73697 0.71492 moveto 0.70964 0.73184 lineto 0.71066 0.75419 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70964 0.73184 moveto 0.73697 0.71492 lineto 0.73576 0.69229 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.65537 0.63918 moveto 0.63273 0.65496 lineto 0.64253 0.67924 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63273 0.65496 moveto 0.65537 0.63918 lineto 0.64343 0.61583 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74113 0.44884 moveto 0.73985 0.47564 lineto 0.74105 0.49642 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73985 0.47564 moveto 0.74113 0.44884 lineto 0.73989 0.42781 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30104 0.39028 moveto 0.2955 0.41843 lineto 0.297 0.39811 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.297 0.39811 moveto 0.30256 0.36948 lineto 0.30104 0.39028 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48346 0.43534 moveto 0.47498 0.44168 lineto 0.48615 0.42371 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48615 0.42371 moveto 0.49251 0.41891 lineto 0.48346 0.43534 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.46361 0.45998 moveto 0.4591 0.46899 lineto 0.4713 0.44899 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4713 0.44899 moveto 0.47498 0.44168 lineto 0.46361 0.45998 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72217 0.31684 moveto 0.73509 0.34624 lineto 0.73627 0.36625 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43418 0.50983 moveto 0.43725 0.52213 lineto 0.44918 0.50004 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44918 0.50004 moveto 0.44673 0.48927 lineto 0.43418 0.50983 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.37591 0.63574 moveto 0.39734 0.65214 lineto 0.40772 0.62811 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40772 0.62811 moveto 0.38842 0.61258 lineto 0.37591 0.63574 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66742 0.66272 moveto 0.64253 0.67924 lineto 0.65236 0.70363 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.64253 0.67924 moveto 0.66742 0.66272 lineto 0.65537 0.63918 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.60066 0.51227 moveto 0.59665 0.52443 lineto 0.6082 0.54699 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.59665 0.52443 moveto 0.60066 0.51227 lineto 0.58846 0.49141 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67957 0.68647 moveto 0.65236 0.70363 lineto 0.66224 0.72812 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.65236 0.70363 moveto 0.67957 0.68647 lineto 0.66742 0.66272 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.36329 0.65911 moveto 0.38691 0.67629 lineto 0.39734 0.65214 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39734 0.65214 moveto 0.37591 0.63574 lineto 0.36329 0.65911 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28699 0.68066 moveto 0.30911 0.69972 lineto 0.31053 0.67759 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31053 0.67759 moveto 0.2886 0.65794 lineto 0.28699 0.68066 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74731 0.60426 moveto 0.73222 0.62604 lineto 0.73338 0.64785 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73222 0.62604 moveto 0.74731 0.60426 lineto 0.74603 0.58215 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28606 0.5458 moveto 0.29486 0.56988 lineto 0.29638 0.54854 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29638 0.54854 moveto 0.28768 0.5239 lineto 0.28606 0.5458 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56141 0.44306 moveto 0.55342 0.43647 lineto 0.54441 0.41976 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53545 0.41598 moveto 0.54441 0.41976 lineto 0.55342 0.43647 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57261 0.46169 moveto 0.57642 0.47081 lineto 0.58846 0.49141 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57642 0.47081 moveto 0.57261 0.46169 lineto 0.56141 0.44306 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73819 0.73785 moveto 0.71066 0.75419 lineto 0.7117 0.77681 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.71066 0.75419 moveto 0.73819 0.73785 lineto 0.73697 0.71492 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74239 0.47014 moveto 0.74105 0.49642 lineto 0.74227 0.51746 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74105 0.49642 moveto 0.74239 0.47014 lineto 0.74113 0.44884 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42146 0.53068 moveto 0.42522 0.54442 lineto 0.43725 0.52213 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43725 0.52213 moveto 0.43418 0.50983 lineto 0.42146 0.53068 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49588 0.43074 moveto 0.48346 0.43534 lineto 0.49251 0.41891 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49251 0.41891 moveto 0.50174 0.41543 lineto 0.49588 0.43074 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69183 0.71043 moveto 0.66224 0.72812 lineto 0.67216 0.75272 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66224 0.72812 moveto 0.69183 0.71043 lineto 0.67957 0.68647 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.2995 0.41134 moveto 0.29397 0.43901 lineto 0.2955 0.41843 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.2955 0.41843 moveto 0.30104 0.39028 lineto 0.2995 0.41134 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35055 0.68271 moveto 0.37642 0.70057 lineto 0.38691 0.67629 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38691 0.67629 moveto 0.36329 0.65911 lineto 0.35055 0.68271 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.61302 0.53342 moveto 0.6082 0.54699 lineto 0.61984 0.56974 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.6082 0.54699 moveto 0.61302 0.53342 lineto 0.60066 0.51227 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72331 0.3373 moveto 0.73627 0.36625 lineto 0.73746 0.38652 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73627 0.36625 moveto 0.72331 0.3373 lineto 0.72217 0.31684 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.01 setlinewidth
+0.51848 0.37168 moveto
+0.72217 0.31684 lineto
+stroke
+grestore
+gsave
+0.01 setlinewidth
+0.72217 0.31684 moveto
+0.7363 0.31304 lineto
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45202 0.47863 moveto 0.44673 0.48927 lineto 0.4591 0.46899 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4591 0.46899 moveto 0.46361 0.45998 lineto 0.45202 0.47863 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55342 0.43647 moveto 0.56141 0.44306 lineto 0.57261 0.46169 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7042 0.73459 moveto 0.67216 0.75272 lineto 0.68212 0.77742 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67216 0.75272 moveto 0.7042 0.73459 lineto 0.69183 0.71043 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33769 0.70654 moveto 0.36589 0.72497 lineto 0.37642 0.70057 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.37642 0.70057 moveto 0.35055 0.68271 lineto 0.33769 0.70654 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55342 0.43647 moveto 0.54139 0.43147 lineto 0.53545 0.41598 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52451 0.41387 moveto 0.53545 0.41598 lineto 0.54139 0.43147 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47422 0.45215 moveto 0.46361 0.45998 lineto 0.47498 0.44168 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47498 0.44168 moveto 0.48346 0.43534 lineto 0.47422 0.45215 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51084 0.42841 moveto 0.49588 0.43074 lineto 0.50174 0.41543 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50174 0.41543 moveto 0.51283 0.41368 lineto 0.51084 0.42841 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40855 0.55183 moveto 0.41306 0.56693 lineto 0.42522 0.54442 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42522 0.54442 moveto 0.42146 0.53068 lineto 0.40855 0.55183 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.71667 0.75897 moveto 0.68212 0.77742 lineto 0.69213 0.80224 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.68212 0.77742 moveto 0.71667 0.75897 lineto 0.7042 0.73459 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28535 0.70366 moveto 0.30766 0.72212 lineto 0.30911 0.69972 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30911 0.69972 moveto 0.28699 0.68066 lineto 0.28535 0.70366 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74861 0.62666 moveto 0.73338 0.64785 lineto 0.73456 0.66993 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73338 0.64785 moveto 0.74861 0.62666 lineto 0.74731 0.60426 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28442 0.56798 moveto 0.29333 0.59149 lineto 0.29486 0.56988 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29486 0.56988 moveto 0.28606 0.5458 lineto 0.28442 0.56798 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62554 0.55484 moveto 0.61984 0.56974 lineto 0.63158 0.59269 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.61984 0.56974 moveto 0.62554 0.55484 lineto 0.61302 0.53342 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32469 0.7306 moveto 0.35529 0.7495 lineto 0.36589 0.72497 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.36589 0.72497 moveto 0.33769 0.70654 lineto 0.32469 0.7306 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54139 0.43147 moveto 0.52663 0.42867 lineto 0.52451 0.41387 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51283 0.41368 moveto 0.52451 0.41387 lineto 0.52663 0.42867 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7117 0.77681 moveto 0.73943 0.76106 lineto 0.73819 0.73785 lineto gsave
+0.157 0.069 0.498 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74366 0.49171 moveto 0.74227 0.51746 lineto 0.74351 0.53876 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74227 0.51746 moveto 0.74366 0.49171 lineto 0.74239 0.47014 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52663 0.42867 moveto 0.51084 0.42841 lineto 0.51283 0.41368 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.584 0.48064 moveto 0.58846 0.49141 lineto 0.60066 0.51227 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58846 0.49141 moveto 0.584 0.48064 lineto 0.57261 0.46169 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29794 0.43267 moveto 0.29243 0.45984 lineto 0.29397 0.43901 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29397 0.43901 moveto 0.2995 0.41134 lineto 0.29794 0.43267 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69213 0.80224 moveto 0.72926 0.78356 lineto 0.71667 0.75897 lineto gsave
+0.292 0.32 0.718 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72445 0.35802 moveto 0.73746 0.38652 lineto 0.73867 0.40704 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73746 0.38652 moveto 0.72445 0.35802 lineto 0.72331 0.3373 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31158 0.7549 moveto 0.34464 0.77415 lineto 0.35529 0.7495 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35529 0.7495 moveto 0.32469 0.7306 lineto 0.31158 0.7549 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44022 0.49762 moveto 0.43418 0.50983 lineto 0.44673 0.48927 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44673 0.48927 moveto 0.45202 0.47863 lineto 0.44022 0.49762 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39546 0.57328 moveto 0.4008 0.58965 lineto 0.41306 0.56693 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.41306 0.56693 moveto 0.40855 0.55183 lineto 0.39546 0.57328 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63823 0.57656 moveto 0.63158 0.59269 lineto 0.64343 0.61583 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63158 0.59269 moveto 0.63823 0.57656 lineto 0.62554 0.55484 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57261 0.46169 moveto 0.56263 0.45355 lineto 0.55342 0.43647 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54139 0.43147 moveto 0.55342 0.43647 lineto 0.56263 0.45355 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56263 0.45355 moveto 0.57261 0.46169 lineto 0.584 0.48064 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.2837 0.72696 moveto 0.30619 0.7448 lineto 0.30766 0.72212 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30766 0.72212 moveto 0.28535 0.70366 lineto 0.2837 0.72696 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74993 0.64933 moveto 0.73456 0.66993 lineto 0.73576 0.69229 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73456 0.66993 moveto 0.74993 0.64933 lineto 0.74861 0.62666 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29833 0.77943 moveto 0.33394 0.79893 lineto 0.34464 0.77415 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28202 0.75056 moveto 0.30471 0.76776 lineto 0.30619 0.7448 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30471 0.76776 moveto 0.28202 0.75056 lineto 0.28032 0.77447 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34464 0.77415 moveto 0.31158 0.7549 lineto 0.29833 0.77943 lineto gsave
+0.951 0.867 0.719 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48987 0.44643 moveto 0.47422 0.45215 lineto 0.48346 0.43534 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48346 0.43534 moveto 0.49588 0.43074 lineto 0.48987 0.44643 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28275 0.59044 moveto 0.29177 0.61336 lineto 0.29333 0.59149 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29333 0.59149 moveto 0.28442 0.56798 lineto 0.28275 0.59044 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74494 0.51356 moveto 0.74351 0.53876 lineto 0.74476 0.56032 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74351 0.53876 moveto 0.74494 0.51356 lineto 0.74366 0.49171 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.59561 0.49994 moveto 0.60066 0.51227 lineto 0.61302 0.53342 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.60066 0.51227 moveto 0.59561 0.49994 lineto 0.584 0.48064 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.46477 0.46933 moveto 0.45202 0.47863 lineto 0.46361 0.45998 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.46361 0.45998 moveto 0.47422 0.45215 lineto 0.46477 0.46933 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29636 0.45428 moveto 0.29087 0.48092 lineto 0.29243 0.45984 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29243 0.45984 moveto 0.29794 0.43267 lineto 0.29636 0.45428 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32411 0.32082 moveto 0.30406 0.34894 lineto 0.30554 0.32866 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30554 0.32866 moveto 0.32551 0.30012 lineto 0.32411 0.32082 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72562 0.37901 moveto 0.73867 0.40704 lineto 0.73989 0.42781 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73867 0.40704 moveto 0.72562 0.37901 lineto 0.72445 0.35802 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.65109 0.59856 moveto 0.64343 0.61583 lineto 0.65537 0.63918 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.64343 0.61583 moveto 0.65109 0.59856 lineto 0.63823 0.57656 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38218 0.59504 moveto 0.38842 0.61258 lineto 0.4008 0.58965 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4008 0.58965 moveto 0.39546 0.57328 lineto 0.38218 0.59504 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56263 0.45355 moveto 0.54747 0.44735 lineto 0.54139 0.43147 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.52663 0.42867 moveto 0.54139 0.43147 lineto 0.54747 0.44735 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4282 0.51697 moveto 0.42146 0.53068 lineto 0.43418 0.50983 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43418 0.50983 moveto 0.44022 0.49762 lineto 0.4282 0.51697 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50881 0.44354 moveto 0.48987 0.44643 lineto 0.49588 0.43074 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49588 0.43074 moveto 0.51084 0.42841 lineto 0.50881 0.44354 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30619 0.7448 moveto 0.2837 0.72696 lineto 0.28202 0.75056 lineto gsave
+0.997 0.771 0.46 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75126 0.6723 moveto 0.73576 0.69229 lineto 0.73697 0.71492 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73576 0.69229 moveto 0.75126 0.6723 lineto 0.74993 0.64933 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28106 0.6132 moveto 0.2902 0.63551 lineto 0.29177 0.61336 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29177 0.61336 moveto 0.28275 0.59044 lineto 0.28106 0.6132 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66412 0.62086 moveto 0.65537 0.63918 lineto 0.66742 0.66272 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.65537 0.63918 moveto 0.66412 0.62086 lineto 0.65109 0.59856 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74624 0.53569 moveto 0.74476 0.56032 lineto 0.74603 0.58215 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74476 0.56032 moveto 0.74624 0.53569 lineto 0.74494 0.51356 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.36871 0.61712 moveto 0.37591 0.63574 lineto 0.38842 0.61258 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38842 0.61258 moveto 0.38218 0.59504 lineto 0.36871 0.61712 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54747 0.44735 moveto 0.5288 0.44386 lineto 0.52663 0.42867 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.51084 0.42841 moveto 0.52663 0.42867 lineto 0.5288 0.44386 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5288 0.44386 moveto 0.50881 0.44354 lineto 0.51084 0.42841 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29476 0.47617 moveto 0.28928 0.50228 lineto 0.29087 0.48092 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29087 0.48092 moveto 0.29636 0.45428 lineto 0.29476 0.47617 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.60742 0.51958 moveto 0.61302 0.53342 lineto 0.62554 0.55484 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.61302 0.53342 moveto 0.60742 0.51958 lineto 0.59561 0.49994 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57204 0.47099 moveto 0.584 0.48064 lineto 0.59561 0.49994 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.584 0.48064 moveto 0.57204 0.47099 lineto 0.56263 0.45355 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3227 0.3418 moveto 0.30256 0.36948 lineto 0.30406 0.34894 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30406 0.34894 moveto 0.32411 0.32082 lineto 0.3227 0.3418 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7268 0.40026 moveto 0.73989 0.42781 lineto 0.74113 0.44884 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73989 0.42781 moveto 0.7268 0.40026 lineto 0.72562 0.37901 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54747 0.44735 moveto 0.56263 0.45355 lineto 0.57204 0.47099 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4551 0.48691 moveto 0.44022 0.49762 lineto 0.45202 0.47863 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45202 0.47863 moveto 0.46477 0.46933 lineto 0.4551 0.48691 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48371 0.46253 moveto 0.46477 0.46933 lineto 0.47422 0.45215 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47422 0.45215 moveto 0.48987 0.44643 lineto 0.48371 0.46253 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67733 0.64346 moveto 0.66742 0.66272 lineto 0.67957 0.68647 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66742 0.66272 moveto 0.67733 0.64346 lineto 0.66412 0.62086 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.41594 0.53669 moveto 0.40855 0.55183 lineto 0.42146 0.53068 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42146 0.53068 moveto 0.4282 0.51697 lineto 0.41594 0.53669 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75261 0.69557 moveto 0.73697 0.71492 lineto 0.73819 0.73785 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73697 0.71492 moveto 0.75261 0.69557 lineto 0.75126 0.6723 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35504 0.63952 moveto 0.36329 0.65911 lineto 0.37591 0.63574 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.37591 0.63574 moveto 0.36871 0.61712 lineto 0.35504 0.63952 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27936 0.63625 moveto 0.2886 0.65794 lineto 0.2902 0.63551 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.2902 0.63551 moveto 0.28106 0.6132 lineto 0.27936 0.63625 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74756 0.55811 moveto 0.74603 0.58215 lineto 0.74731 0.60426 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74603 0.58215 moveto 0.74756 0.55811 lineto 0.74624 0.53569 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29314 0.49834 moveto 0.28768 0.5239 lineto 0.28928 0.50228 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28928 0.50228 moveto 0.29476 0.47617 lineto 0.29314 0.49834 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.61944 0.53958 moveto 0.62554 0.55484 lineto 0.63823 0.57656 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62554 0.55484 moveto 0.61944 0.53958 lineto 0.60742 0.51958 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32126 0.36304 moveto 0.30104 0.39028 lineto 0.30256 0.36948 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30256 0.36948 moveto 0.3227 0.3418 lineto 0.32126 0.36304 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72799 0.4218 moveto 0.74113 0.44884 lineto 0.74239 0.47014 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74113 0.44884 moveto 0.72799 0.4218 lineto 0.7268 0.40026 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69073 0.66638 moveto 0.67957 0.68647 lineto 0.69183 0.71043 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67957 0.68647 moveto 0.69073 0.66638 lineto 0.67733 0.64346 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57204 0.47099 moveto 0.5537 0.46362 lineto 0.54747 0.44735 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5288 0.44386 moveto 0.54747 0.44735 lineto 0.5537 0.46362 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34117 0.66226 moveto 0.35055 0.68271 lineto 0.36329 0.65911 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.36329 0.65911 moveto 0.35504 0.63952 lineto 0.34117 0.66226 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58166 0.48883 moveto 0.59561 0.49994 lineto 0.60742 0.51958 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.59561 0.49994 moveto 0.58166 0.48883 lineto 0.57204 0.47099 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50671 0.45908 moveto 0.48371 0.46253 lineto 0.48987 0.44643 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48987 0.44643 moveto 0.50881 0.44354 lineto 0.50671 0.45908 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75398 0.71914 moveto 0.73819 0.73785 lineto 0.73943 0.76106 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73819 0.73785 moveto 0.75398 0.71914 lineto 0.75261 0.69557 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40345 0.5568 moveto 0.39546 0.57328 lineto 0.40855 0.55183 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40855 0.55183 moveto 0.41594 0.53669 lineto 0.40345 0.5568 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27763 0.65961 moveto 0.28699 0.68066 lineto 0.2886 0.65794 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.2886 0.65794 moveto 0.27936 0.63625 lineto 0.27763 0.65961 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7489 0.58082 moveto 0.74731 0.60426 lineto 0.74861 0.62666 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74731 0.60426 moveto 0.7489 0.58082 lineto 0.74756 0.55811 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70431 0.68961 moveto 0.69183 0.71043 lineto 0.7042 0.73459 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69183 0.71043 moveto 0.70431 0.68961 lineto 0.69073 0.66638 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44521 0.50489 moveto 0.4282 0.51697 lineto 0.44022 0.49762 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44022 0.49762 moveto 0.4551 0.48691 lineto 0.44521 0.50489 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5537 0.46362 moveto 0.57204 0.47099 lineto 0.58166 0.48883 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.2915 0.52081 moveto 0.28606 0.5458 lineto 0.28768 0.5239 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28768 0.5239 moveto 0.29314 0.49834 lineto 0.2915 0.52081 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.5537 0.46362 moveto 0.53103 0.45946 lineto 0.5288 0.44386 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50881 0.44354 moveto 0.5288 0.44386 lineto 0.53103 0.45946 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53103 0.45946 moveto 0.50671 0.45908 lineto 0.50881 0.44354 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31981 0.38457 moveto 0.2995 0.41134 lineto 0.30104 0.39028 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30104 0.39028 moveto 0.32126 0.36304 lineto 0.31981 0.38457 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7292 0.44361 moveto 0.74239 0.47014 lineto 0.74366 0.49171 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74239 0.47014 moveto 0.7292 0.44361 lineto 0.72799 0.4218 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63169 0.55994 moveto 0.63823 0.57656 lineto 0.65109 0.59856 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63823 0.57656 moveto 0.63169 0.55994 lineto 0.61944 0.53958 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32709 0.68533 moveto 0.33769 0.70654 lineto 0.35055 0.68271 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35055 0.68271 moveto 0.34117 0.66226 lineto 0.32709 0.68533 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47739 0.47904 moveto 0.4551 0.48691 lineto 0.46477 0.46933 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.46477 0.46933 moveto 0.48371 0.46253 lineto 0.47739 0.47904 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.71807 0.71317 moveto 0.7042 0.73459 lineto 0.71667 0.75897 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7042 0.73459 moveto 0.71807 0.71317 lineto 0.70431 0.68961 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75536 0.74302 moveto 0.73943 0.76106 lineto 0.74069 0.78457 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73943 0.76106 moveto 0.75536 0.74302 lineto 0.75398 0.71914 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27587 0.68327 moveto 0.28535 0.70366 lineto 0.28699 0.68066 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28699 0.68066 moveto 0.27763 0.65961 lineto 0.27587 0.68327 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39072 0.57729 moveto 0.38218 0.59504 lineto 0.39546 0.57328 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39546 0.57328 moveto 0.40345 0.5568 lineto 0.39072 0.57729 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75026 0.60382 moveto 0.74861 0.62666 lineto 0.74993 0.64933 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74861 0.62666 moveto 0.75026 0.60382 lineto 0.7489 0.58082 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.59149 0.50706 moveto 0.60742 0.51958 lineto 0.61944 0.53958 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.60742 0.51958 moveto 0.59149 0.50706 lineto 0.58166 0.48883 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3128 0.70874 moveto 0.32469 0.7306 lineto 0.33769 0.70654 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33769 0.70654 moveto 0.32709 0.68533 lineto 0.3128 0.70874 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28984 0.54357 moveto 0.28442 0.56798 lineto 0.28606 0.5458 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28606 0.5458 moveto 0.2915 0.52081 lineto 0.28984 0.54357 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31834 0.40638 moveto 0.29794 0.43267 lineto 0.2995 0.41134 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.2995 0.41134 moveto 0.31981 0.38457 lineto 0.31834 0.40638 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73042 0.46571 moveto 0.74366 0.49171 lineto 0.74494 0.51356 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74366 0.49171 moveto 0.73042 0.46571 lineto 0.7292 0.44361 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.64416 0.58069 moveto 0.65109 0.59856 lineto 0.66412 0.62086 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.65109 0.59856 moveto 0.64416 0.58069 lineto 0.63169 0.55994 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73203 0.73705 moveto 0.71667 0.75897 lineto 0.72926 0.78356 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.71667 0.75897 moveto 0.73203 0.73705 lineto 0.71807 0.71317 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58166 0.48883 moveto 0.56009 0.4803 lineto 0.5537 0.46362 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53103 0.45946 moveto 0.5537 0.46362 lineto 0.56009 0.4803 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43509 0.5233 moveto 0.41594 0.53669 lineto 0.4282 0.51697 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4282 0.51697 moveto 0.44521 0.50489 lineto 0.43509 0.5233 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50456 0.47505 moveto 0.47739 0.47904 lineto 0.48371 0.46253 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48371 0.46253 moveto 0.50671 0.45908 lineto 0.50456 0.47505 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56009 0.4803 moveto 0.58166 0.48883 lineto 0.59149 0.50706 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75677 0.76722 moveto 0.74069 0.78457 lineto 0.74196 0.80838 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74069 0.78457 moveto 0.75677 0.76722 lineto 0.75536 0.74302 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29829 0.73251 moveto 0.31158 0.7549 lineto 0.32469 0.7306 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32469 0.7306 moveto 0.3128 0.70874 lineto 0.29829 0.73251 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27409 0.70725 moveto 0.2837 0.72696 lineto 0.28535 0.70366 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28535 0.70366 moveto 0.27587 0.68327 lineto 0.27409 0.70725 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35845 0.29589 moveto 0.32411 0.32082 lineto 0.32551 0.30012 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.01 setlinewidth
+0.33882 0.18488 moveto
+0.398 0.24641 lineto
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32551 0.30012 moveto 0.35965 0.27482 lineto 0.35845 0.29589 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75163 0.62713 moveto 0.74993 0.64933 lineto 0.75126 0.6723 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74993 0.64933 moveto 0.75163 0.62713 lineto 0.75026 0.60382 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.37773 0.59818 moveto 0.36871 0.61712 lineto 0.38218 0.59504 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38218 0.59504 moveto 0.39072 0.57729 lineto 0.37773 0.59818 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74619 0.76128 moveto 0.72926 0.78356 lineto 0.74196 0.80838 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72926 0.78356 moveto 0.74619 0.76128 lineto 0.73203 0.73705 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28815 0.56664 moveto 0.28275 0.59044 lineto 0.28442 0.56798 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28442 0.56798 moveto 0.28984 0.54357 lineto 0.28815 0.56664 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4709 0.49598 moveto 0.44521 0.50489 lineto 0.4551 0.48691 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4551 0.48691 moveto 0.47739 0.47904 lineto 0.4709 0.49598 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31684 0.42848 moveto 0.29636 0.45428 lineto 0.29794 0.43267 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29794 0.43267 moveto 0.31834 0.40638 lineto 0.31684 0.42848 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73166 0.4881 moveto 0.74494 0.51356 lineto 0.74624 0.53569 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74494 0.51356 moveto 0.73166 0.4881 lineto 0.73042 0.46571 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56009 0.4803 moveto 0.53332 0.47549 lineto 0.53103 0.45946 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50671 0.45908 moveto 0.53103 0.45946 lineto 0.53332 0.47549 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53332 0.47549 moveto 0.50456 0.47505 lineto 0.50671 0.45908 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.65686 0.60182 moveto 0.66412 0.62086 lineto 0.67733 0.64346 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66412 0.62086 moveto 0.65686 0.60182 lineto 0.64416 0.58069 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.60154 0.5257 moveto 0.61944 0.53958 lineto 0.63169 0.55994 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.61944 0.53958 moveto 0.60154 0.5257 lineto 0.59149 0.50706 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28357 0.75664 moveto 0.29833 0.77943 lineto 0.31158 0.7549 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31158 0.7549 moveto 0.29829 0.73251 lineto 0.28357 0.75664 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74196 0.80838 moveto 0.75819 0.79173 lineto 0.75677 0.76722 lineto gsave
+0 0 0.373 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75877 0.74848 moveto 0.75677 0.76722 lineto 0.75772 0.78369 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75772 0.78369 moveto 0.75819 0.79173 lineto gsave
+0.75831 0.78304 lineto 0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.75877 0.74848 moveto 0.75772 0.78369 lineto 0.75831 0.78304 lineto 0 0 0.11 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.75868 0.78263 moveto 0.76055 0.78584 lineto gsave
+0.75895 0.78234 lineto 0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.75877 0.74848 moveto 0.75831 0.78304 lineto 0.75862 0.7827 lineto 0 0 0.11 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.76055 0.78584 moveto 0.75932 0.78193 lineto gsave
+0.75895 0.78234 lineto 0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75859 0.78822 moveto 0.76055 0.78584 lineto 0.75868 0.78263 lineto gsave
+0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75859 0.78822 moveto 0.76026 0.77375 lineto 0.7591 0.75399 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7591 0.75399 moveto 0.75877 0.74848 lineto gsave
+0.75859 0.78822 lineto 0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7573 0.72355 moveto 0.75536 0.74302 lineto 0.75677 0.76722 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75677 0.76722 moveto 0.75877 0.74848 lineto 0.7573 0.72355 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.76026 0.77375 moveto 0.75424 0.76577 lineto gsave
+0.74504 0.72946 lineto 0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.75895 0.78234 moveto 0.75393 0.76507 lineto 0.73837 0.73736 lineto 0 0 0.449 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.751 0.75837 moveto 0.73837 0.73736 lineto gsave
+0.75393 0.76507 lineto 0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74601 0.74694 moveto 0.74504 0.72946 lineto gsave
+0.7522 0.75772 lineto 0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.75424 0.76577 moveto 0.751 0.75837 lineto 0.7522 0.75772 lineto 0.935 0.689 0.211 setrgbcolor
+fill
+grestore
+gsave
+0.74601 0.74694 moveto 0.7522 0.75772 lineto 0.751 0.75837 lineto 0.935 0.689 0.211 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.73837 0.73736 moveto 0.74619 0.76128 lineto 0.75868 0.78263 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.73837 0.73736 moveto 0.75868 0.78263 lineto 0.75895 0.78234 lineto 0 0 0.449 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.71015 0.69043 moveto 0.71807 0.71317 lineto 0.73203 0.73705 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72412 0.71366 moveto 0.73203 0.73705 lineto 0.74619 0.76128 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73203 0.73705 moveto 0.72412 0.71366 lineto 0.71015 0.69043 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74619 0.76128 moveto 0.73837 0.73736 lineto 0.72412 0.71366 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70341 0.7146 moveto 0.73837 0.73736 lineto 0.751 0.75837 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.70341 0.7146 moveto 0.751 0.75837 lineto 0.75009 0.75886 lineto 0.815 0.349 0 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.75932 0.78193 moveto 0.75424 0.76577 lineto gsave
+0.75895 0.78234 lineto 0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75424 0.76577 moveto 0.7529 0.76153 lineto gsave
+0.75393 0.76507 lineto 0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.75895 0.78234 moveto 0.75424 0.76577 lineto 0.75393 0.76507 lineto 0 0 0.449 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.71617 0.73826 moveto 0.70341 0.7146 lineto gsave
+0.75009 0.75886 lineto 0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75424 0.76577 moveto 0.74933 0.75927 lineto gsave
+0.751 0.75837 lineto 0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7529 0.76153 moveto 0.751 0.75837 lineto gsave
+0.75393 0.76507 lineto 0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7529 0.76153 moveto 0.74933 0.75927 lineto gsave
+0.75009 0.75886 lineto 0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74933 0.75927 moveto 0.71617 0.73826 lineto gsave
+0.75009 0.75886 lineto 0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74648 0.75549 moveto 0.74601 0.74694 lineto gsave
+0.751 0.75837 lineto 0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74933 0.75927 moveto 0.74648 0.75549 lineto gsave
+0.751 0.75837 lineto 0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.751 0.75837 moveto 0.7529 0.76153 lineto gsave
+0.75009 0.75886 lineto 0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75819 0.79173 moveto 0.75859 0.78822 lineto gsave
+0.75862 0.7827 lineto 0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.75819 0.79173 moveto 0.75862 0.7827 lineto 0.75831 0.78304 lineto 0 0 0.11 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.74196 0.80838 moveto 0.75859 0.78822 lineto gsave
+0.74619 0.76128 lineto 0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75868 0.78263 moveto 0.74619 0.76128 lineto gsave
+0.75859 0.78822 lineto 0 0.147 0.669 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27229 0.73155 moveto 0.28202 0.75056 lineto 0.2837 0.72696 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.2837 0.72696 moveto 0.27409 0.70725 lineto 0.27229 0.73155 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35722 0.31724 moveto 0.3227 0.3418 lineto 0.32411 0.32082 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32411 0.32082 moveto 0.35845 0.29589 lineto 0.35722 0.31724 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75302 0.65076 moveto 0.75126 0.6723 lineto 0.75261 0.69557 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75126 0.6723 moveto 0.75302 0.65076 lineto 0.75163 0.62713 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42473 0.54213 moveto 0.40345 0.5568 lineto 0.41594 0.53669 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.41594 0.53669 moveto 0.43509 0.5233 lineto 0.42473 0.54213 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28644 0.59001 moveto 0.28106 0.6132 lineto 0.28275 0.59044 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28275 0.59044 moveto 0.28815 0.56664 lineto 0.28644 0.59001 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.36449 0.61949 moveto 0.35504 0.63952 lineto 0.36871 0.61712 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.36871 0.61712 moveto 0.37773 0.59818 lineto 0.36449 0.61949 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31533 0.45087 moveto 0.29476 0.47617 lineto 0.29636 0.45428 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29636 0.45428 moveto 0.31684 0.42848 lineto 0.31533 0.45087 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73292 0.51079 moveto 0.74624 0.53569 lineto 0.74756 0.55811 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74624 0.53569 moveto 0.73292 0.51079 lineto 0.73166 0.4881 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27047 0.75618 moveto 0.28032 0.77447 lineto 0.28202 0.75056 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28032 0.77447 moveto 0.27047 0.75618 lineto 0.26862 0.78114 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29833 0.77943 moveto 0.28357 0.75664 lineto 0.26862 0.78114 lineto gsave
+0.95 0.953 0.664 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66981 0.62334 moveto 0.67733 0.64346 lineto 0.69073 0.66638 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67733 0.64346 moveto 0.66981 0.62334 lineto 0.65686 0.60182 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.59149 0.50706 moveto 0.56665 0.49741 lineto 0.56009 0.4803 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53332 0.47549 moveto 0.56009 0.4803 lineto 0.56665 0.49741 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56665 0.49741 moveto 0.59149 0.50706 lineto 0.60154 0.5257 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50235 0.49145 moveto 0.4709 0.49598 lineto 0.47739 0.47904 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47739 0.47904 moveto 0.50456 0.47505 lineto 0.50235 0.49145 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.61182 0.54477 moveto 0.63169 0.55994 lineto 0.64416 0.58069 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63169 0.55994 moveto 0.61182 0.54477 lineto 0.60154 0.5257 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28202 0.75056 moveto 0.27229 0.73155 lineto 0.27047 0.75618 lineto gsave
+0.933 0.76 0.284 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35598 0.33888 moveto 0.32126 0.36304 lineto 0.3227 0.3418 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3227 0.3418 moveto 0.35722 0.31724 lineto 0.35598 0.33888 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.46424 0.51337 moveto 0.43509 0.5233 lineto 0.44521 0.50489 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44521 0.50489 moveto 0.4709 0.49598 lineto 0.46424 0.51337 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75443 0.6747 moveto 0.75261 0.69557 lineto 0.75398 0.71914 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75261 0.69557 moveto 0.75443 0.6747 lineto 0.75302 0.65076 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28471 0.6137 moveto 0.27936 0.63625 lineto 0.28106 0.6132 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28106 0.6132 moveto 0.28644 0.59001 lineto 0.28471 0.6137 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3138 0.47357 moveto 0.29314 0.49834 lineto 0.29476 0.47617 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29476 0.47617 moveto 0.31533 0.45087 lineto 0.3138 0.47357 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73419 0.53378 moveto 0.74756 0.55811 lineto 0.7489 0.58082 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74756 0.55811 moveto 0.73419 0.53378 lineto 0.73292 0.51079 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35098 0.64123 moveto 0.34117 0.66226 lineto 0.35504 0.63952 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35504 0.63952 moveto 0.36449 0.61949 lineto 0.35098 0.64123 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56665 0.49741 moveto 0.53567 0.49195 lineto 0.53332 0.47549 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50456 0.47505 moveto 0.53332 0.47549 lineto 0.53567 0.49195 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53567 0.49195 moveto 0.50235 0.49145 lineto 0.50456 0.47505 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.683 0.64528 moveto 0.69073 0.66638 lineto 0.70431 0.68961 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69073 0.66638 moveto 0.683 0.64528 lineto 0.66981 0.62334 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.41412 0.56142 moveto 0.39072 0.57729 lineto 0.40345 0.5568 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40345 0.5568 moveto 0.42473 0.54213 lineto 0.41412 0.56142 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35472 0.3608 moveto 0.31981 0.38457 lineto 0.32126 0.36304 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32126 0.36304 moveto 0.35598 0.33888 lineto 0.35472 0.3608 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75586 0.69896 moveto 0.75398 0.71914 lineto 0.75536 0.74302 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75398 0.71914 moveto 0.75586 0.69896 lineto 0.75443 0.6747 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28296 0.63772 moveto 0.27763 0.65961 lineto 0.27936 0.63625 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27936 0.63625 moveto 0.28471 0.6137 lineto 0.28296 0.63772 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31225 0.49658 moveto 0.2915 0.52081 lineto 0.29314 0.49834 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29314 0.49834 moveto 0.3138 0.47357 lineto 0.31225 0.49658 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73549 0.55709 moveto 0.7489 0.58082 lineto 0.75026 0.60382 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7489 0.58082 moveto 0.73549 0.55709 lineto 0.73419 0.53378 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57338 0.51497 moveto 0.60154 0.5257 lineto 0.61182 0.54477 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.60154 0.5257 moveto 0.57338 0.51497 lineto 0.56665 0.49741 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62235 0.56428 moveto 0.64416 0.58069 lineto 0.65686 0.60182 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.64416 0.58069 moveto 0.62235 0.56428 lineto 0.61182 0.54477 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53567 0.49195 moveto 0.56665 0.49741 lineto 0.57338 0.51497 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3372 0.66341 moveto 0.32709 0.68533 lineto 0.34117 0.66226 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34117 0.66226 moveto 0.35098 0.64123 lineto 0.3372 0.66341 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69644 0.66764 moveto 0.70431 0.68961 lineto 0.71807 0.71317 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70431 0.68961 moveto 0.69644 0.66764 lineto 0.683 0.64528 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50008 0.50832 moveto 0.46424 0.51337 lineto 0.4709 0.49598 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.4709 0.49598 moveto 0.50235 0.49145 lineto 0.50008 0.50832 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45741 0.53124 moveto 0.42473 0.54213 lineto 0.43509 0.5233 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43509 0.5233 moveto 0.46424 0.51337 lineto 0.45741 0.53124 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40539 0.2764 moveto 0.35845 0.29589 lineto 0.35965 0.27482 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35965 0.27482 moveto 0.40631 0.25505 lineto 0.40539 0.2764 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.01 setlinewidth
+0.40631 0.25505 moveto
+0.51848 0.37168 lineto
+stroke
+grestore
+gsave
+0.01 setlinewidth
+0.398 0.24641 moveto
+0.40631 0.25505 lineto
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35345 0.38303 moveto 0.31834 0.40638 lineto 0.31981 0.38457 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31981 0.38457 moveto 0.35472 0.3608 lineto 0.35345 0.38303 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40325 0.58118 moveto 0.37773 0.59818 lineto 0.39072 0.57729 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39072 0.57729 moveto 0.41412 0.56142 lineto 0.40325 0.58118 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75536 0.74302 moveto 0.7573 0.72355 lineto 0.75586 0.69896 lineto gsave
+0 0 0.11 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28118 0.66206 moveto 0.27587 0.68327 lineto 0.27763 0.65961 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27763 0.65961 moveto 0.28296 0.63772 lineto 0.28118 0.66206 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31067 0.51989 moveto 0.28984 0.54357 lineto 0.2915 0.52081 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.2915 0.52081 moveto 0.31225 0.49658 lineto 0.31067 0.51989 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73679 0.58071 moveto 0.75026 0.60382 lineto 0.75163 0.62713 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75026 0.60382 moveto 0.73679 0.58071 lineto 0.73549 0.55709 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.57338 0.51497 moveto 0.53809 0.50888 lineto 0.53567 0.49195 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50235 0.49145 moveto 0.53567 0.49195 lineto 0.53809 0.50888 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53809 0.50888 moveto 0.50008 0.50832 lineto 0.50235 0.49145 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.71807 0.71317 moveto 0.71015 0.69043 lineto 0.69644 0.66764 lineto gsave
+0 0 0.449 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32314 0.68603 moveto 0.3128 0.70874 lineto 0.32709 0.68533 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32709 0.68533 moveto 0.3372 0.66341 lineto 0.32314 0.68603 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63311 0.58425 moveto 0.65686 0.60182 lineto 0.66981 0.62334 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.65686 0.60182 moveto 0.63311 0.58425 lineto 0.62235 0.56428 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40446 0.29804 moveto 0.35722 0.31724 lineto 0.35845 0.29589 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35845 0.29589 moveto 0.40539 0.2764 lineto 0.40446 0.29804 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35216 0.40556 moveto 0.31684 0.42848 lineto 0.31834 0.40638 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31834 0.40638 moveto 0.35345 0.38303 lineto 0.35216 0.40556 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58028 0.53299 moveto 0.61182 0.54477 lineto 0.62235 0.56428 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.61182 0.54477 moveto 0.58028 0.53299 lineto 0.57338 0.51497 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27938 0.68673 moveto 0.27409 0.70725 lineto 0.27587 0.68327 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27587 0.68327 moveto 0.28118 0.66206 lineto 0.27938 0.68673 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30908 0.54353 moveto 0.28815 0.56664 lineto 0.28984 0.54357 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28984 0.54357 moveto 0.31067 0.51989 lineto 0.30908 0.54353 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73812 0.60465 moveto 0.75163 0.62713 lineto 0.75302 0.65076 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75163 0.62713 moveto 0.73812 0.60465 lineto 0.73679 0.58071 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.53809 0.50888 moveto 0.57338 0.51497 lineto 0.58028 0.53299 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39212 0.60142 moveto 0.36449 0.61949 lineto 0.37773 0.59818 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.37773 0.59818 moveto 0.40325 0.58118 lineto 0.39212 0.60142 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45038 0.54959 moveto 0.41412 0.56142 lineto 0.42473 0.54213 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42473 0.54213 moveto 0.45741 0.53124 lineto 0.45038 0.54959 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49774 0.52567 moveto 0.45741 0.53124 lineto 0.46424 0.51337 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.46424 0.51337 moveto 0.50008 0.50832 lineto 0.49774 0.52567 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30879 0.70913 moveto 0.29829 0.73251 lineto 0.3128 0.70874 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3128 0.70874 moveto 0.32314 0.68603 lineto 0.30879 0.70913 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40351 0.31998 moveto 0.35598 0.33888 lineto 0.35722 0.31724 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35722 0.31724 moveto 0.40446 0.29804 lineto 0.40351 0.31998 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35085 0.42839 moveto 0.31533 0.45087 lineto 0.31684 0.42848 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31684 0.42848 moveto 0.35216 0.40556 lineto 0.35085 0.42839 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.64413 0.60469 moveto 0.66981 0.62334 lineto 0.683 0.64528 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66981 0.62334 moveto 0.64413 0.60469 lineto 0.63311 0.58425 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27755 0.71175 moveto 0.27229 0.73155 lineto 0.27409 0.70725 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27409 0.70725 moveto 0.27938 0.68673 lineto 0.27755 0.71175 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30746 0.5675 moveto 0.28644 0.59001 lineto 0.28815 0.56664 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28815 0.56664 moveto 0.30908 0.54353 lineto 0.30746 0.5675 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73947 0.62892 moveto 0.75302 0.65076 lineto 0.75443 0.6747 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75302 0.65076 moveto 0.73947 0.62892 lineto 0.73812 0.60465 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58028 0.53299 moveto 0.54058 0.52629 lineto 0.53809 0.50888 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.50008 0.50832 moveto 0.53809 0.50888 lineto 0.54058 0.52629 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54058 0.52629 moveto 0.49774 0.52567 lineto 0.50008 0.50832 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58737 0.5515 moveto 0.62235 0.56428 lineto 0.63311 0.58425 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62235 0.56428 moveto 0.58737 0.5515 lineto 0.58028 0.53299 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40256 0.34221 moveto 0.35472 0.3608 lineto 0.35598 0.33888 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35598 0.33888 moveto 0.40351 0.31998 lineto 0.40256 0.34221 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29414 0.73271 moveto 0.28357 0.75664 lineto 0.29829 0.73251 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29829 0.73251 moveto 0.30879 0.70913 lineto 0.29414 0.73271 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34952 0.45155 moveto 0.3138 0.47357 lineto 0.31533 0.45087 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31533 0.45087 moveto 0.35085 0.42839 lineto 0.34952 0.45155 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38071 0.62216 moveto 0.35098 0.64123 lineto 0.36449 0.61949 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.36449 0.61949 moveto 0.39212 0.60142 lineto 0.38071 0.62216 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27569 0.73712 moveto 0.27047 0.75618 lineto 0.27229 0.73155 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27229 0.73155 moveto 0.27755 0.71175 lineto 0.27569 0.73712 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30582 0.5918 moveto 0.28471 0.6137 lineto 0.28644 0.59001 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28644 0.59001 moveto 0.30746 0.5675 lineto 0.30582 0.5918 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74083 0.65353 moveto 0.75443 0.6747 lineto 0.75586 0.69896 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75443 0.6747 moveto 0.74083 0.65353 lineto 0.73947 0.62892 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44317 0.56844 moveto 0.40325 0.58118 lineto 0.41412 0.56142 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.41412 0.56142 moveto 0.45038 0.54959 lineto 0.44317 0.56844 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54058 0.52629 moveto 0.58028 0.53299 lineto 0.58737 0.5515 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.65542 0.62561 moveto 0.683 0.64528 lineto 0.69644 0.66764 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.683 0.64528 moveto 0.65542 0.62561 lineto 0.64413 0.60469 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49534 0.54353 moveto 0.45038 0.54959 lineto 0.45741 0.53124 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45741 0.53124 moveto 0.49774 0.52567 lineto 0.49534 0.54353 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40159 0.36476 moveto 0.35345 0.38303 lineto 0.35472 0.3608 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35472 0.3608 moveto 0.40256 0.34221 lineto 0.40159 0.36476 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34817 0.47502 moveto 0.31225 0.49658 lineto 0.3138 0.47357 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3138 0.47357 moveto 0.34952 0.45155 lineto 0.34817 0.47502 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27382 0.76285 moveto 0.27569 0.73712 lineto gsave
+0.28747 0.74183 lineto 0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.26862 0.78114 moveto 0.28357 0.75664 lineto gsave
+0.27945 0.75678 lineto 0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27806 0.75935 moveto 0.26862 0.78114 lineto gsave
+0.27945 0.75678 lineto 0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27806 0.75935 moveto 0.27382 0.76285 lineto gsave
+0.2797 0.7538 lineto 0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.28747 0.74183 moveto 0.28113 0.75363 lineto 0.2797 0.7538 lineto 0 0 0.311 setrgbcolor
+fill
+grestore
+gsave
+0.27806 0.75935 moveto 0.2797 0.7538 lineto 0.28113 0.75363 lineto 0 0 0.311 setrgbcolor
+fill
+grestore
+gsave
+0.29414 0.73271 moveto 0.31717 0.734 lineto 0.28564 0.75312 lineto 0 0 0 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.33209 0.71055 moveto 0.29414 0.73271 lineto 0.30879 0.70913 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38645 0.7166 moveto 0.32574 0.73239 lineto gsave
+0.33209 0.71055 lineto 0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32083 0.73102 moveto 0.33209 0.71055 lineto gsave
+0.32574 0.73239 lineto 0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3336 0.72911 moveto 0.32574 0.73239 lineto gsave
+0.32591 0.72688 lineto 0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32574 0.73239 moveto 0.3122 0.73805 lineto gsave
+0.32083 0.73102 lineto 0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.32591 0.72688 moveto 0.32574 0.73239 lineto 0.32083 0.73102 lineto 0.217 0.065 0.45 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.32574 0.73239 moveto 0.31913 0.73411 lineto 0.32083 0.73102 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29414 0.73271 moveto 0.33209 0.71055 lineto 0.32083 0.73102 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32083 0.73102 moveto 0.31913 0.73411 lineto gsave
+0.31717 0.734 lineto 0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.29414 0.73271 moveto 0.32083 0.73102 lineto 0.31717 0.734 lineto 0 0 0 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.30879 0.70913 moveto 0.34471 0.6876 lineto 0.33209 0.71055 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39529 0.69352 moveto 0.33209 0.71055 lineto 0.34471 0.6876 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33209 0.71055 moveto 0.39529 0.69352 lineto 0.38645 0.7166 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29726 0.71857 moveto 0.33515 0.70201 lineto 0.33411 0.72021 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33411 0.72021 moveto 0.3336 0.72911 lineto gsave
+0.32591 0.72688 lineto 0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.29726 0.71857 moveto 0.33411 0.72021 lineto 0.32591 0.72688 lineto 0.217 0.065 0.45 setrgbcolor
+fill
+grestore
+gsave
+0.002 setlinewidth
+0.29548 0.74503 moveto 0.29726 0.71857 lineto gsave
+0.32591 0.72688 lineto 0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3122 0.73805 moveto 0.28564 0.75312 lineto gsave
+0.31717 0.734 lineto 0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3122 0.73805 moveto 0.29548 0.74503 lineto gsave
+0.32591 0.72688 lineto 0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31913 0.73411 moveto 0.3122 0.73805 lineto gsave
+0.31717 0.734 lineto 0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28357 0.75664 moveto 0.28495 0.75351 lineto gsave
+0.27917 0.75679 lineto 0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.2851 0.75318 moveto 0.29414 0.73271 lineto 0.28113 0.75363 lineto gsave
+0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28113 0.75363 moveto 0.29414 0.73271 lineto gsave
+0.28564 0.75312 lineto 0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29548 0.74503 moveto 0.27806 0.75935 lineto gsave
+0.28747 0.74183 lineto 0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28564 0.75312 moveto 0.27917 0.75679 lineto 0.28113 0.75363 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27917 0.75679 moveto 0.27806 0.75935 lineto gsave
+0.27945 0.75678 lineto 0.679 0.845 0.428 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27382 0.76285 moveto 0.26862 0.78114 lineto 0.27047 0.75618 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27047 0.75618 moveto 0.27569 0.73712 lineto 0.27382 0.76285 lineto gsave
+0 0 0.031 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30416 0.61644 moveto 0.28296 0.63772 lineto 0.28471 0.6137 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28471 0.6137 moveto 0.30582 0.5918 lineto 0.30416 0.61644 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74221 0.67849 moveto 0.75586 0.69896 lineto 0.7573 0.72355 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75586 0.69896 moveto 0.74221 0.67849 lineto 0.74083 0.65353 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.36901 0.64343 moveto 0.3372 0.66341 lineto 0.35098 0.64123 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35098 0.64123 moveto 0.38071 0.62216 lineto 0.36901 0.64343 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.59465 0.5705 moveto 0.63311 0.58425 lineto 0.64413 0.60469 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63311 0.58425 moveto 0.59465 0.5705 lineto 0.58737 0.5515 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.58737 0.5515 moveto 0.54314 0.5442 lineto 0.54058 0.52629 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49774 0.52567 moveto 0.54058 0.52629 lineto 0.54314 0.5442 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54314 0.5442 moveto 0.49534 0.54353 lineto 0.49774 0.52567 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40061 0.38761 moveto 0.35216 0.40556 lineto 0.35345 0.38303 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35345 0.38303 moveto 0.40159 0.36476 lineto 0.40061 0.38761 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34681 0.49883 moveto 0.31067 0.51989 lineto 0.31225 0.49658 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31225 0.49658 moveto 0.34817 0.47502 lineto 0.34681 0.49883 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66698 0.64705 moveto 0.69644 0.66764 lineto 0.71015 0.69043 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69644 0.66764 moveto 0.66698 0.64705 lineto 0.65542 0.62561 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43575 0.58783 moveto 0.39212 0.60142 lineto 0.40325 0.58118 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40325 0.58118 moveto 0.44317 0.56844 lineto 0.43575 0.58783 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30247 0.64143 moveto 0.28118 0.66206 lineto 0.28296 0.63772 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28296 0.63772 moveto 0.30416 0.61644 lineto 0.30247 0.64143 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74362 0.70379 moveto 0.7573 0.72355 lineto 0.75877 0.74848 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.7573 0.72355 moveto 0.74362 0.70379 lineto 0.74221 0.67849 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54314 0.5442 moveto 0.58737 0.5515 lineto 0.59465 0.5705 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49287 0.56191 moveto 0.44317 0.56844 lineto 0.45038 0.54959 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.45038 0.54959 moveto 0.49534 0.54353 lineto 0.49287 0.56191 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39961 0.41079 moveto 0.35085 0.42839 lineto 0.35216 0.40556 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35216 0.40556 moveto 0.40061 0.38761 lineto 0.39961 0.41079 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34542 0.52297 moveto 0.30908 0.54353 lineto 0.31067 0.51989 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.31067 0.51989 moveto 0.34681 0.49883 lineto 0.34542 0.52297 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35702 0.66523 moveto 0.32314 0.68603 lineto 0.3372 0.66341 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3372 0.66341 moveto 0.36901 0.64343 lineto 0.35702 0.66523 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.60213 0.59003 moveto 0.64413 0.60469 lineto 0.65542 0.62561 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.64413 0.60469 moveto 0.60213 0.59003 lineto 0.59465 0.5705 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30076 0.66678 moveto 0.27938 0.68673 lineto 0.28118 0.66206 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.28118 0.66206 moveto 0.30247 0.64143 lineto 0.30076 0.66678 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.74504 0.72946 moveto 0.75877 0.74848 lineto 0.76026 0.77375 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.75877 0.74848 moveto 0.74504 0.72946 lineto 0.74362 0.70379 lineto gsave
+0.935 0.689 0.211 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67882 0.66901 moveto 0.71015 0.69043 lineto 0.72412 0.71366 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.71015 0.69043 moveto 0.67882 0.66901 lineto 0.66698 0.64705 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.59465 0.5705 moveto 0.54577 0.56263 lineto 0.54314 0.5442 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49534 0.54353 moveto 0.54314 0.5442 lineto 0.54577 0.56263 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3986 0.4343 moveto 0.34952 0.45155 lineto 0.35085 0.42839 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35085 0.42839 moveto 0.39961 0.41079 lineto 0.3986 0.4343 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42811 0.60776 moveto 0.38071 0.62216 lineto 0.39212 0.60142 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39212 0.60142 moveto 0.43575 0.58783 lineto 0.42811 0.60776 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34402 0.54746 moveto 0.30746 0.5675 lineto 0.30908 0.54353 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30908 0.54353 moveto 0.34542 0.52297 lineto 0.34402 0.54746 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54577 0.56263 moveto 0.49287 0.56191 lineto 0.49534 0.54353 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.01 setlinewidth
+0.51449 0.911 moveto
+0.51707 0.56224 lineto
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29902 0.69249 moveto 0.27755 0.71175 lineto 0.27938 0.68673 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27938 0.68673 moveto 0.30076 0.66678 lineto 0.29902 0.69249 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54577 0.56263 moveto 0.59465 0.5705 lineto 0.60213 0.59003 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34471 0.6876 moveto 0.30879 0.70913 lineto 0.32314 0.68603 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.32314 0.68603 moveto 0.35702 0.66523 lineto 0.34471 0.6876 lineto gsave
+0 0 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49032 0.58083 moveto 0.43575 0.58783 lineto 0.44317 0.56844 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.44317 0.56844 moveto 0.49287 0.56191 lineto 0.49032 0.58083 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69096 0.69152 moveto 0.72412 0.71366 lineto 0.73837 0.73736 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.72412 0.71366 moveto 0.69096 0.69152 lineto 0.67882 0.66901 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39757 0.45814 moveto 0.34817 0.47502 lineto 0.34952 0.45155 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34952 0.45155 moveto 0.3986 0.4343 lineto 0.39757 0.45814 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34259 0.57229 moveto 0.30582 0.5918 lineto 0.30746 0.5675 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30746 0.5675 moveto 0.34402 0.54746 lineto 0.34259 0.57229 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.60982 0.6101 moveto 0.65542 0.62561 lineto 0.66698 0.64705 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.65542 0.62561 moveto 0.60982 0.6101 lineto 0.60213 0.59003 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29726 0.71857 moveto 0.27569 0.73712 lineto 0.27755 0.71175 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27755 0.71175 moveto 0.29902 0.69249 lineto 0.29726 0.71857 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42026 0.62827 moveto 0.36901 0.64343 lineto 0.38071 0.62216 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38071 0.62216 moveto 0.42811 0.60776 lineto 0.42026 0.62827 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39653 0.48232 moveto 0.34681 0.49883 lineto 0.34817 0.47502 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34817 0.47502 moveto 0.39757 0.45814 lineto 0.39653 0.48232 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.60213 0.59003 moveto 0.54849 0.58161 lineto 0.54577 0.56263 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49287 0.56191 moveto 0.54577 0.56263 lineto 0.54849 0.58161 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34115 0.59749 moveto 0.30416 0.61644 lineto 0.30582 0.5918 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30582 0.5918 moveto 0.34259 0.57229 lineto 0.34115 0.59749 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54849 0.58161 moveto 0.49032 0.58083 lineto 0.49287 0.56191 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.73837 0.73736 moveto 0.70341 0.7146 lineto 0.69096 0.69152 lineto gsave
+0.815 0.349 0 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.27569 0.73712 moveto 0.29726 0.71857 lineto 0.29548 0.74503 lineto gsave
+0 0 0.311 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.54849 0.58161 moveto 0.60213 0.59003 lineto 0.60982 0.6101 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.61772 0.63073 moveto 0.66698 0.64705 lineto 0.67882 0.66901 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.66698 0.64705 moveto 0.61772 0.63073 lineto 0.60982 0.6101 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48769 0.60033 moveto 0.42811 0.60776 lineto 0.43575 0.58783 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.43575 0.58783 moveto 0.49032 0.58083 lineto 0.48769 0.60033 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39548 0.50685 moveto 0.34542 0.52297 lineto 0.34681 0.49883 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34681 0.49883 moveto 0.39653 0.48232 lineto 0.39548 0.50685 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33968 0.62305 moveto 0.30247 0.64143 lineto 0.30416 0.61644 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30416 0.61644 moveto 0.34115 0.59749 lineto 0.33968 0.62305 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.41218 0.64939 moveto 0.35702 0.66523 lineto 0.36901 0.64343 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.36901 0.64343 moveto 0.42026 0.62827 lineto 0.41218 0.64939 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39441 0.53173 moveto 0.34402 0.54746 lineto 0.34542 0.52297 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34542 0.52297 moveto 0.39548 0.50685 lineto 0.39441 0.53173 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3382 0.64898 moveto 0.30076 0.66678 lineto 0.30247 0.64143 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30247 0.64143 moveto 0.33968 0.62305 lineto 0.3382 0.64898 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.60982 0.6101 moveto 0.55128 0.60116 lineto 0.54849 0.58161 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.49032 0.58083 moveto 0.54849 0.58161 lineto 0.55128 0.60116 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55128 0.60116 moveto 0.48769 0.60033 lineto 0.49032 0.58083 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55128 0.60116 moveto 0.60982 0.6101 lineto 0.61772 0.63073 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62585 0.65196 moveto 0.67882 0.66901 lineto 0.69096 0.69152 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.67882 0.66901 moveto 0.62585 0.65196 lineto 0.61772 0.63073 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48498 0.62044 moveto 0.42026 0.62827 lineto 0.42811 0.60776 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42811 0.60776 moveto 0.48769 0.60033 lineto 0.48498 0.62044 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39332 0.55698 moveto 0.34259 0.57229 lineto 0.34402 0.54746 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34402 0.54746 moveto 0.39441 0.53173 lineto 0.39332 0.55698 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33669 0.6753 moveto 0.29902 0.69249 lineto 0.30076 0.66678 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.30076 0.66678 moveto 0.3382 0.64898 lineto 0.33669 0.6753 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40386 0.67112 moveto 0.34471 0.6876 lineto 0.35702 0.66523 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.35702 0.66523 moveto 0.41218 0.64939 lineto 0.40386 0.67112 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39222 0.5826 moveto 0.34115 0.59749 lineto 0.34259 0.57229 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34259 0.57229 moveto 0.39332 0.55698 lineto 0.39222 0.5826 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33515 0.70201 moveto 0.29726 0.71857 lineto 0.29902 0.69249 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.29902 0.69249 moveto 0.33669 0.6753 lineto 0.33515 0.70201 lineto gsave
+0.217 0.065 0.45 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.61772 0.63073 moveto 0.55416 0.62131 lineto 0.55128 0.60116 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48769 0.60033 moveto 0.55128 0.60116 lineto 0.55416 0.62131 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63422 0.67381 moveto 0.69096 0.69152 lineto 0.70341 0.7146 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.69096 0.69152 moveto 0.63422 0.67381 lineto 0.62585 0.65196 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55416 0.62131 moveto 0.61772 0.63073 lineto 0.62585 0.65196 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55416 0.62131 moveto 0.48498 0.62044 lineto 0.48769 0.60033 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48219 0.64116 moveto 0.41218 0.64939 lineto 0.42026 0.62827 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.42026 0.62827 moveto 0.48498 0.62044 lineto 0.48219 0.64116 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3911 0.60861 moveto 0.33968 0.62305 lineto 0.34115 0.59749 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34115 0.59749 moveto 0.39222 0.5826 lineto 0.3911 0.60861 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.34471 0.6876 moveto 0.40386 0.67112 lineto 0.39529 0.69352 lineto gsave
+0.266 0 0.177 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38996 0.635 moveto 0.3382 0.64898 lineto 0.33968 0.62305 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33968 0.62305 moveto 0.3911 0.60861 lineto 0.38996 0.635 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.64284 0.6963 moveto 0.70341 0.7146 lineto 0.71617 0.73826 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.70341 0.7146 moveto 0.64284 0.6963 lineto 0.63422 0.67381 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.62585 0.65196 moveto 0.55713 0.64208 lineto 0.55416 0.62131 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48498 0.62044 moveto 0.55416 0.62131 lineto 0.55713 0.64208 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55713 0.64208 moveto 0.62585 0.65196 lineto 0.63422 0.67381 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.55713 0.64208 moveto 0.48219 0.64116 lineto 0.48498 0.62044 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47931 0.66255 moveto 0.40386 0.67112 lineto 0.41218 0.64939 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.41218 0.64939 moveto 0.48219 0.64116 lineto 0.47931 0.66255 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38881 0.66179 moveto 0.33669 0.6753 lineto 0.3382 0.64898 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.3382 0.64898 moveto 0.38996 0.635 lineto 0.38881 0.66179 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.71617 0.73826 moveto 0.65171 0.71946 lineto 0.64284 0.6963 lineto gsave
+0.83 0.383 0.167 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38764 0.68899 moveto 0.33515 0.70201 lineto 0.33669 0.6753 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33669 0.6753 moveto 0.38881 0.66179 lineto 0.38764 0.68899 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56019 0.66351 moveto 0.63422 0.67381 lineto 0.64284 0.6963 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.63422 0.67381 moveto 0.56019 0.66351 lineto 0.55713 0.64208 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.48219 0.64116 moveto 0.55713 0.64208 lineto 0.56019 0.66351 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56019 0.66351 moveto 0.47931 0.66255 lineto 0.48219 0.64116 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47634 0.68463 moveto 0.39529 0.69352 lineto 0.40386 0.67112 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.40386 0.67112 moveto 0.47931 0.66255 lineto 0.47634 0.68463 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.38645 0.7166 moveto 0.3336 0.72911 lineto 0.33515 0.70201 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.33515 0.70201 moveto 0.38764 0.68899 lineto 0.38645 0.7166 lineto gsave
+0.422 0.229 0.511 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56335 0.68562 moveto 0.64284 0.6963 lineto 0.65171 0.71946 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.64284 0.6963 moveto 0.56335 0.68562 lineto 0.56019 0.66351 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47931 0.66255 moveto 0.56019 0.66351 lineto 0.56335 0.68562 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56335 0.68562 moveto 0.47634 0.68463 lineto 0.47931 0.66255 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47327 0.70743 moveto 0.38645 0.7166 lineto 0.39529 0.69352 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.39529 0.69352 moveto 0.47634 0.68463 lineto 0.47327 0.70743 lineto gsave
+0.492 0.126 0.273 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.65171 0.71946 moveto 0.56662 0.70845 lineto 0.56335 0.68562 lineto gsave
+0.749 0.337 0.269 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.47634 0.68463 moveto 0.56335 0.68562 lineto 0.56662 0.70845 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+0.002 setlinewidth
+0.56662 0.70845 moveto 0.47327 0.70743 lineto 0.47634 0.68463 lineto gsave
+0.639 0.253 0.298 setrgbcolor
+fill grestore
+stroke
+grestore
+gsave
+grestore
+% End of Graphics
+MathPictureEnd%%PSTrailer
+end
+
+%%EPS Trailer
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/auxfile.cd b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/auxfile.cd
new file mode 100644
index 0000000000..4176ca6e81
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/auxfile.cd
@@ -0,0 +1,22 @@
+% auxfile.cd
+% Anders G S Svensson
+
+% Source: auxfile.nw
+% $Revision: 1.8 $
+% $Date: 1996/06/08 00:43:51 $
+
+\edef\auxfile@newwrite@{\noexpand\newwrite}
+
+\def\newauxfile{\bgroup\@ignorewhitespace@\auxfile@new@}
+\def\auxfile@new@#1{\egroup
+ \@csafter@\auxfile@newwrite@{auxfile@aux@#1}%
+ \@def@{open#1}{\auxfile@open@{#1}\global\@let@{open#1}\relax}%
+ \@def@{write#1}{\auxfile@write@{#1}}%
+ \@def@{read#1}{\auxfile@read@{#1}\global\@let@{read#1}\relax}}
+\def\auxfile@open@#1{\immediate\openout\@cs@{auxfile@aux@#1}=\jobname.#1\relax}
+\def\auxfile@read@#1{%
+ \IfFileExists{\jobname.#1}%
+ {\edef\@action@{\noexpand\@makeatletter@\noexpand\input\jobname.#1\relax
+ \noexpand\@restoreat@{\the\catcode`\@}}\@action@}%
+ {}}
+\def\auxfile@write@#1{\write\@cs@{auxfile@aux@#1}}
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/carrot.tex b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/carrot.tex
new file mode 100644
index 0000000000..410049cf16
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/carrot.tex
@@ -0,0 +1,283 @@
+% carrot.tex
+% Anders G S Svensson
+
+% Source: carrot.nw
+% $Revision: 1.29 $
+% $Date: 1996/06/08 00:23:21 $
+
+\ifx\carrot\relax \expandafter\endinput\fi
+\let\carrot\relax
+
+\chardef\carrotcode=\catcode`\@
+\catcode`\@=11
+
+\def\@meaning@{\expandafter\@gobblemeaning@\meaning}
+\let\expansion\@meaning@
+\def\@gobblemeaning@#1:->{}
+
+\def\@makeatletter@{\catcode`\@=11 }
+\def\@restoreat@#1{\catcode`\@=#1\relax}
+
+\def\IfOption#1{\relax
+ \IfCarrot{\@ifundefined@{@op@\@currentcarrot@ @#1}%
+ \@SecondOfTwo@\@FirstOfTwo@}
+ {\nocarrot@\IfOption}}
+\def\IfOptionInCarrot#1#2{\relax
+ \@ifundefined@{@op@#2@#1}\@SecondOfTwo@\@FirstOfTwo@}
+
+\def\Option#1{\relax
+ \IfCarrot{\ifoption@{#1}{\executeopt@{#1}}}
+ {\nocarrot@\Option}}
+
+\def\IfCarrot{\relax
+ \ifx\@currentcarrot@\@empty@
+ \let\@action@\@SecondOfTwo@
+ \else
+ \let\@action@\@FirstOfTwo@
+ \fi
+ \@action@}
+
+\def\IfCarrotLoaded#1{\relax
+ \@ifundefined@{@cd@#1}\@SecondOfTwo@\@FirstOfTwo@}
+
+\def\@def@#1{%
+ \expandafter\def\csname #1\endcsname}
+\def\@edef@#1{%
+ \expandafter\edef\csname #1\endcsname}
+\def\@gdef@#1{%
+ \expandafter\gdef\csname #1\endcsname}
+\def\@xdef@#1{%
+ \expandafter\xdef\csname #1\endcsname}
+\def\@let@#1{%
+ \expandafter\let\csname #1\endcsname}
+
+\def\@cs@#1{\csname #1\endcsname}
+\def\@csafter@#1#2{\expandafter#1\csname #2\endcsname}
+
+\def\@space@{ }
+\def\@empty@{}
+
+\def\@ifempty@#1{%
+ \def\@tmp@{#1}%
+ \ifx\@tmp@\@empty@
+ \let\@action@\@FirstOfTwo@
+ \else
+ \let\@action@\@SecondOfTwo@
+ \fi
+ \@action@}
+
+\def\@echo@#1{#1}
+\def\@eat@#1{}
+\def\@eattwo@#1#2{}
+\def\@FirstOfTwo@#1#2{#1}
+\def\@SecondOfTwo@#1#2{#2}
+\def\@gobble@#1{\@ifempty@{#1}{}{\@gobble@}}
+\def\@chomp@#1@ {}
+
+\def\@eatspace@#1{%
+ \@ifnextchar@\@space@
+ {\def\@action@{#1}\expandafter\@action@\@chomp@ @}%
+ {#1}}
+
+\def\@eatnextchar@#1{\@expandafter@{#1}\@eat@}
+
+\def\@expandafter@#1{\def\@action@{#1}\expandafter\@action@}
+\def\@afterassignment@#1{\def\@action@{#1}\afterassignment\@action@}
+
+\def\@ifnext@#1#2#3{\@eatspace@{\@ifnextchar@{#1}{#2}{#3}}}
+
+\def\@ifundefined@#1{%
+ \expandafter\ifx\csname #1\endcsname\relax
+ \let\@action@\@FirstOfTwo@
+ \else
+ \let\@action@\@SecondOfTwo@
+ \fi
+ \@action@}
+
+\def\@ifnextchar@#1#2#3{%
+ \def\@action@{\@choice@{#1}\@action@{#2}{#3}}%
+ \futurelet\@ch@\@action@}
+
+\def\@choice@#1{%
+ \if#1\noexpand\@ch@
+ \let\@action@\@FirstOfTwo@
+ \else
+ \let\@action@\@SecondOfTwo@
+ \fi}
+
+\def\@strcmp@#1#2{%
+ \edef\@tmp@{#1}\edef\@action@{#2}%
+ \ifx\@tmp@\@action@
+ \let\@action@\@FirstOfTwo@
+ \else
+ \let\@action@\@SecondOfTwo@
+ \fi
+ \@action@}
+
+\def\IfFileExists#1{%
+ \immediate\openin\@r@=#1\relax
+ \ifeof\@r@
+ \let\@action@\@SecondOfTwo@
+ \else
+ \let\@action@\@FirstOfTwo@
+ \fi
+ \immediate\closein\@r@
+ \@action@}
+
+\def\@ifx@#1#2{%
+ \ifx#1#2%
+ \let\@action@\@FirstOfTwo@
+ \else
+ \let\@action@\@SecondOfTwo@
+ \fi
+ \@action@}
+
+\def\@ifmmode@{%
+ \ifmmode
+ \let\@action@\@FirstOfTwo@
+ \else
+ \let\@action@\@SecondOfTwo@
+ \fi
+ \@action@}
+
+\def\InputIfFileExists#1{%
+ \IfFileExists{#1}{\input #1\relax}{}}
+
+\def\@ignorespaces@{\@ifmmode@{}\ignorespaces}
+
+\def\@ignorewhitespace@{%
+ \catcode`\ =9 \catcode`\^^I=9 }
+
+\def\@Warning@#1{%
+ \immediate\write16{** #1}}
+\def\@Message@#1{%
+ \immediate\write16{#1}}
+\def\@message@#1{%
+ \def\@tmp@{#1}\@Message@{\@meaning@\@tmp@}}
+\def\@warning@#1{%
+ \def\@tmp@{#1}\@Warning@{\@meaning@\@tmp@}}
+
+\def\@sum@#1#2+#3@{%
+ \advance#1 by #2\relax
+ \@ifempty@{#3}{}{\@sum@{#1}#3@}}
+
+\def\@define@#1{%
+ \@afterassignment@{\@edef@{#1}{\the\@t@}}\@t@}
+
+\def\@settodimen@#1#2#3{%
+ \setbox\@b@=\hbox{#3}#1=#2\@b@}
+
+\newcount\@c@
+\newskip\@s@
+\newbox\@b@
+\newtoks\@t@
+\newread\@r@
+\newdimen\@d@
+
+\def\@grabitems@#1,#2@{%
+ \@itemaction@{#1}%
+ \@ifempty@{#2}{}{\@grabitems@#2@}}
+
+\def\usecarrot{\relax
+ \let\@currentoptions@\@empty@
+ \@ifnextchar@[\carrotwithopts@\carrotnoopt@}
+
+\def\carrotwithopts@[#1]#2{%
+ \def\@itemaction@##1{%
+ \edef\@currentoptions@{\@currentoptions@{##1}}}%
+ \@grabitems@#1,@\pickcarrot@#2,@}
+
+\def\carrotnoopt@#1{\pickcarrot@#1,@}
+
+\def\pickcarrot@#1,#2@{%
+ \@ifundefined@{@cd@#1}%
+ {\IfFileExists{#1.cd}%
+ {\loadcd@{#1}}%
+ {\@Warning@{No carrot: #1.cd}}}%
+ {}%
+ \@ifempty@{#2}%
+ {}%
+ {\pickcarrot@#2@}}
+
+\def\PassToCarrot#1{\relax
+ \IfCarrot{\pickcarrot@#1,@%
+ \expandafter\declaresilently@\@currentoptions@{}}%
+ {\nocarrot@\PassToCarrot}}
+
+\def\declaresilently@#1{%
+ \@ifempty@{#1}%
+ {}%
+ {\@ifundefined@{@co@\@currentcarrot@ @#1}%
+ {\@let@{@co@\@currentcarrot@ @#1}\@empty@ \declaresilently@}%
+ {}}}
+
+\def\loadcd@#1{%
+ \@let@{@cd@#1}\@empty@
+ \@let@{@opt@#1}\@empty@
+ \@expandafter@{\markoption@{#1}}\@currentoptions@{}%
+ \@let@{@do@#1}\relax
+ \edef\@action@{%
+ \def\noexpand\@currentcarrot@{#1}
+ \noexpand\@makeatletter@
+ \noexpand\input #1.cd\relax
+ \noexpand\@restoreat@{\the\catcode`\@}%
+ \noexpand\checkoption@\@currentoptions@{}%
+ \noexpand\expandafter\noexpand\executeoption@
+ \expandafter\noexpand\csname @opt@#1\endcsname{}%
+ \noexpand\@cs@{@do@#1}%
+ \def\noexpand\@currentoptions@{\@currentoptions@}%
+ \def\noexpand\@currentcarrot@{\@currentcarrot@}}%
+ \@action@}
+
+\def\markoption@#1#2{%
+ \@ifempty@{#2}%
+ {}%
+ {\@let@{@op@#1@#2}\@empty@ \markoption@{#1}}}
+
+\def\executeoption@#1{%
+ \@ifempty@{#1}%
+ {}%
+ {\@ifundefined@{@op@\@currentcarrot@ @#1}%
+ {}%
+ {\@let@{@do@\@currentcarrot@}\relax \executeopt@{#1}}%
+ \executeoption@}}
+
+\def\executeopt@#1{%
+ \@cs@{@co@\@currentcarrot@ @#1}\@let@{@co@\@currentcarrot@ @#1}\@empty@}
+
+\def\checkoption@#1{%
+ \@ifempty@{#1}%
+ {}%
+ {\ifoption@{#1}{}\checkoption@}}
+
+\def\ifoption@#1#2{%
+ \@ifundefined@{@co@\@currentcarrot@ @#1}%
+ {\@Warning@{Unrecognized option: #1 (\@currentcarrot@.cd)}}%
+ {#2}}
+
+\let\@currentcarrot@\@empty@
+
+\def\nocarrot@#1{%
+ \@warning@{Ignored #1in non-carrot}}
+
+\def\DeclareOption{\relax
+ \IfCarrot\DeclareOption@
+ {\nocarrot@\DeclareOption\@eattwo@}}
+
+\def\DeclareOption@#1{%
+ \@edef@{@opt@\@currentcarrot@}{\@cs@{@opt@\@currentcarrot@}{#1}}
+ \@define@{@co@\@currentcarrot@ @#1}}
+
+\def\DeclareDefaultOption{\relax
+ \IfCarrot{\@define@{@do@\@currentcarrot@}}
+ {\nocarrot@\DeclareDefaultOption\@eat@}}
+
+\def\ExecuteOptions#1{\relax
+ \IfCarrot{\def\@itemaction@##1{\ifoption@{##1}{\executeopt@{##1}}}%
+ \@grabitems@#1,@}%
+ {\nocarrot@\ExecuteOptions}}
+
+
+\InputIfFileExists{\jobname.cd}
+
+\catcode`\@=\carrotcode
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/cite.cd b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/cite.cd
new file mode 100644
index 0000000000..864e10ca81
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/cite.cd
@@ -0,0 +1,24 @@
+% cite.cd
+% Anders G S Svensson
+
+% Source: cite.nw
+% $Revision: 1.3 $
+% $Date: 1996/02/19 04:06:30 $
+
+\usecarrot{xr}
+
+\def\citedef#1#2{%
+ \definexr{@cite@#1@}{#2}{@cite@}}
+\def\@cite@tag#1{\citetag{#1\@cite@opt}}
+
+\def\citesep{,}
+\def\citetag#1{[#1]}
+
+\def\cite{\relax
+ \@ifnextchar@[\cite@cite@\cite@citenoopt@}
+\def\cite@cite@[#1]#2{%
+ \def\@cite@opt{\citesep\@space@ #1}%
+ \refxr{@cite@#2@}}
+\def\cite@citenoopt@#1{\let\@cite@opt\relax \refxr{@cite@#1@}}
+
+\def\citepage#1{\pagexr{@cite@#1@}}
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/contents.cd b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/contents.cd
new file mode 100644
index 0000000000..13e158bf7a
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/contents.cd
@@ -0,0 +1,88 @@
+% contents.cd
+% Anders G S Svensson
+
+% Source: contents.nw
+% $Revision: 1.13 $
+% $Date: 1996/02/23 03:03:12 $
+
+\usecarrot{auxfile}
+
+\newauxfile{ccx}
+
+\def\readccx{%
+ \IfFileExists{\jobname.ccx}%
+ {\expandafter\contents@open@\contents@list@{}%
+ {\@makeatletter@ \input\jobname.ccx\relax}%
+ \expandafter\contents@close@\contents@list@{}}
+ {}%
+ \global\let\readccx\relax}
+
+\def\newcontentsfile{\bgroup\@ignorewhitespace@\contents@newfile@}
+\def\contents@newfile@#1{\egroup
+ \xdef\contents@list@{\contents@list@{#1}}%
+ \@let@{#1contents}\relax
+ \@let@{end#1contents}\relax
+ \@csafter@\auxfile@newwrite@{contents@toc@#1}}
+\let\contents@list@\@empty@
+
+\def\contents@open@#1{%
+ \@ifempty@{#1}%
+ {}%
+ {\immediate\openout\@cs@{contents@toc@#1}=\jobname.#1\relax
+ \contents@writefile@{#1}{%
+ \expandafter\noexpand\csname #1contents\endcsname}%
+ \contents@open@}}
+\def\contents@close@#1{%
+ \@ifempty@{#1}%
+ {}%
+ {\contents@writefile@{#1}{%
+ \expandafter\noexpand\csname end#1contents\endcsname}%
+ \immediate\closeout\@cs@{contents@toc@#1}\relax\contents@close@}}
+
+\def\contents@writefile@#1{%
+ \immediate\write\@cs@{contents@toc@#1}}
+
+\def\contents@writetoks@#1#2{%
+ \def\@tmp@{#2}\contents@writefile@{#1}{\@meaning@\@tmp@}}
+
+\def\readcontentsfile#1{\relax
+ \readccx
+ \@ifundefined@{contents@toc@#1}%
+ {\@Warning@{Undeclared contents file: #1}}%
+ {\InputIfFileExists{\jobname.#1\relax}}}
+\def\writecontentsfile#1#2{\relax
+ \@ifundefined@{contents@toc@#1}%
+ {\@Warning@{Undeclared contents file: #1}}%
+ {\def\@tmp@{\contents@writetoks@{#1}{#2}}%
+ \edef\@action@{\noexpand\writeccx{\@meaning@\@tmp@}}%
+ \@action@}}
+\def\writecontentsentry{\relax
+ \@ifnextchar@*%
+ {\expandafter\contents@writeentry@\expandafter\contents@sentry@\@eat@}%
+ {\contents@writeentry@\contents@entry@}}
+
+\def\contents@writeentry@#1#2{%
+ \@ifundefined@{contents@toc@#2}%
+ {\@Warning@{Undeclared contents file: #2}}%
+ {\readccx \openccx #1{#2}}}
+
+\def\contents@sentry@#1#2#3{%
+ \def\@tmp@{\contents@swrite@{#1}{#2}{#3}}%
+ \edef\@action@{%
+ \noexpand\writeccx{\@meaning@\@tmp@{\noexpand\folio}}}%
+ \@action@}
+
+\def\contents@entry@#1#2#3#4{%
+ \def\@tmp@{\contents@write@{#1}{#2}{#3}}%
+ \edef\@action@{%
+ \noexpand\writeccx{\@meaning@\@tmp@{#4}{\noexpand\folio}}}%
+ \@action@}
+\def\contents@swrite@#1#2#3#4{%
+ \def\@tmp@{{#3}{#4}}%
+ \contents@writefile@{#1}{%
+ \expandafter\noexpand\csname #1#2entryu\endcsname\@meaning@\@tmp@}}
+
+\def\contents@write@#1#2#3#4#5{%
+ \def\@tmp@{{#3}{#4}{#5}}%
+ \contents@writefile@{#1}{%
+ \expandafter\noexpand\csname #1#2entry\endcsname\@meaning@\@tmp@}}
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/counter.cd b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/counter.cd
new file mode 100644
index 0000000000..ddc5855437
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/counter.cd
@@ -0,0 +1,75 @@
+% counter.cd
+% Anders G S Svensson
+
+% Source: counter.nw
+% $Revision: 1.7 $
+% $Date: 1996/02/20 10:35:33 $
+
+\edef\counter@newcount@{\noexpand\newcount}
+
+\def\newcounter#1{%
+ \@ifundefined@{counter@ctn@#1}%
+ {\@def@{counter@ctn@#1}{#1}\@csafter@\counter@newcount@{counter@ctr@#1}%
+ \@def@{counter@ctr++@#1}{\counter@stepcounter@{#1}}%
+ \@def@{the#1}{\@csafter@\counter@arabic@{counter@ctr@#1}}%
+ \@cs@{counter@ctr@#1}=0 }%
+ {}%
+ \@ifnextchar@[%
+ {\counter@numberwithin@{\@cs@{counter@ctn@#1}}}%
+ {}}
+\def\stepcounter#1{\@cs@{counter@ctr++@\@cs@{counter@ctn@#1}}}
+\def\counter#1{\@cs@{counter@ctr@\@cs@{counter@ctn@#1}}}
+
+\def\arabic#1{\@csafter@\counter@arabic@{counter@ctr@\@cs@{counter@ctn@#1}}}
+\def\roman#1{\@csafter@\counter@roman@{counter@ctr@\@cs@{counter@ctn@#1}}}
+\def\Roman#1{\@csafter@\counter@Roman@{counter@ctr@\@cs@{counter@ctn@#1}}}
+\def\alph#1{\@csafter@\counter@alph@{counter@ctr@\@cs@{counter@ctn@#1}}}
+\def\Alph#1{\@csafter@\counter@Alph@{counter@ctr@\@cs@{counter@ctn@#1}}}
+\def\counter@arabic@{\number}
+\def\counter@roman@{\romannumeral}
+\def\counter@Roman@#1{\uppercase{\romannumeral#1}}
+\def\counter@alph@#1{{\count0=\number#1 \advance\count0 by 96 \char\count0}}
+\def\counter@Alph@#1{{\count0=\number#1 \advance\count0 by 64 \char\count0}}
+\def\numberwithin#1#2{%
+ \newcounter{#1}[#2]}
+\def\numberwith#1#2{%
+ \newcounter{#2}%
+ \@def@{counter@ctn@#1}{\@cs@{counter@ctn@#2}}%
+ \@def@{the#1}{\@cs@{the\@cs@{counter@ctn@#2}}}}
+
+\def\counter@numberwithin@#1[#2]{%
+ \newcounter{#2}%
+ \@def@{the#1}{\@cs@{the#2}.\@csafter@\counter@arabic@{counter@ctr@#1}}%
+ \@ifundefined@{counter@container@#1}%
+ {}%
+ {\edef\@action@{\noexpand\counter@removeitem@
+ \expandafter\noexpand
+ \csname counter@within@\@cs@{counter@container@#1}\endcsname
+ {\@cs@{counter@ctn@#1}}%
+ \@cs@{counter@within@\@cs@{counter@container@#1}}{}}%
+ \@action@}
+ \@def@{counter@container@#1}{\@cs@{counter@ctn@#2}}%
+ \@ifundefined@{counter@within@\@cs@{counter@ctn@#2}}%
+ {\@edef@{counter@within@\@cs@{counter@ctn@#2}}{{#1}}}%
+ {\@edef@{counter@within@\@cs@{counter@ctn@#2}}{%
+ \@cs@{counter@within@\@cs@{counter@ctn@#2}}{#1}}}}
+
+\def\counter@removeitem@#1#2#3{%
+ \@ifempty@{#3}%
+ {}%
+ {\@strcmp@{#2}{#3}%
+ {}%
+ {\edef#2{#2{#3}}}%
+ \counter@removeitem@{#1}{#2}}}
+
+\def\counter@stepcounter@#1{%
+ \global\advance\@cs@{counter@ctr@#1} by 1
+ \@ifundefined@{counter@within@#1}%
+ {}%
+ {\expandafter\expandafter\expandafter
+ \counter@initcounter@\csname counter@within@#1\endcsname{}}}
+
+\def\counter@initcounter@#1{%
+ \@ifempty@{#1}%
+ {}%
+ {\global\@cs@{counter@ctr@#1}=0 \counter@initcounter@}}
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/environ.cd b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/environ.cd
new file mode 100644
index 0000000000..5e316d6f3e
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/environ.cd
@@ -0,0 +1,101 @@
+% environ.cd
+% Anders G S Svensson
+
+% Source: environ.nw
+% $Revision: 1.9 $
+% $Date: 1996/02/19 19:21:07 $
+
+\def\B#1{\environ@envin@{#1}\@cs@{environ@benv@#1}}
+\def\E#1{\@cs@{environ@eenv@#1}\environ@envout@{#1}}
+
+\def\environ@B@#1{\environ@blockin@{#1}\@cs@{environ@bblo@#1}}
+\def\environ@E@#1{\@cs@{environ@eblo@#1}\environ@blockout@{#1}}
+
+\def\environ@envin@#1{\environ@checkin@{env}{#1}}
+\def\environ@blockin@#1{\environ@checkin@{blo}{#1}}
+\def\environ@envout@#1{\environ@checkout@{env}{#1}}
+\def\environ@blockout@#1{\environ@checkout@{blo}{#1}}
+
+\let\environ@checkin@\@eattwo@
+\let\environ@checkout@\@eattwo@
+
+\DeclareOption{check}
+ {\def\environ@checkin@#1#2{\relax
+ \@ifundefined@{environ@b#1@#2}{\environ@unknown@{#1}{#2}}{}%
+ \gdef\environ@currenv@{{#1}{#2}}%
+ \xdef\environ@envstack@{{#1}{#2}\environ@envstack@}}
+ \def\environ@checkout@#1#2{\relax
+ \@ifx@\environ@currenv@\environ@topenv@
+ {\environ@toperror@{#1}{#2}}%
+ {\@strcmp@{#2}{\expandafter\@SecondOfTwo@\environ@currenv@}
+ {\@expandafter@{\expandafter\environ@popenv@\@eattwo@}\environ@envstack@ @}%
+ {\environ@incompat@{#1}{#2}}
+ \@ifundefined@{environ@e#1@#2}{\environ@unknown@{#1}{#2}}{}}}%
+ \def\environ@topenv@{{}{}}
+ \let\environ@currenv@\environ@topenv@
+ \let\environ@envstack@\environ@topenv@
+ \def\environ@toperror@#1#2{%
+ \@Warning@{\environ@endstring@{#1}{#2} at top level}}
+ \def\environ@incompat@#1#2{%
+ \@Warning@{\expandafter\environ@beginstring@\environ@currenv@\@space@
+ terminated by \environ@endstring@{#1}{#2}}}
+ \def\environ@unknown@#1#2{\@Warning@{Unknown \environ@environname@{#1}: #2}}
+ \def\environ@beginstring@#1#2{\@cs@{environ@b#1string@}{#2}}
+ \def\environ@endstring@#1#2{\@cs@{environ@e#1string@}{#2}}
+ \def\environ@benvstring@#1{\string\B{#1}}
+ \def\environ@eenvstring@#1{\string\E{#1}}
+ \def\environ@bblostring@#1{\expandafter\string\csname #1\endcsname}
+ \def\environ@eblostring@#1{\expandafter\string\csname end#1\endcsname}
+ \def\environ@environname@#1{\@cs@{environ@#1name@}}
+ \def\environ@envname@{environment}
+ \def\environ@bloname@{block}
+ \def\environ@popenv@#1#2#3@{%
+ \gdef\environ@currenv@{{#1}{#2}}\gdef\environ@envstack@{#3}}}
+
+\def\Bdef{\relax\environ@def@{def}{b}}
+\def\Blet{\relax\environ@def@{let}{b}}
+\def\Edef{\relax\environ@def@{def}{e}}
+\def\Elet{\relax\environ@def@{let}{e}}
+
+\def\environ@def@#1#2{%
+ \@ifnextchar@*%
+ {\@expandafter@{\environ@blodef@{#1}{#2}}\@eat@}%
+ {\environ@envdef@{#1}{#2}}}
+
+\def\environ@envdef@#1#2#3{%
+ \@cs@{@#1@}{environ@#2env@#3}}
+
+\def\environ@blodef@#1#2#3{%
+ \@def@{#3}{\environ@B@{#3}}\@def@{end#3}{\environ@E@{#3}}\@cs@{@#1@}{environ@#2blo@#3}}
+
+\def\newgroup{\relax
+ \@ifnextchar@*{\expandafter\environ@newblockgroup@\@eat@}\environ@newenvgroup@}
+
+\def\environ@newblockgroup@#1{%
+ \@def@{#1}{\environ@B@{#1}}\@def@{end#1}{\environ@E@{#1}}%
+ \environ@n@wblockgroup@{#1}}
+\long\def\environ@n@wblockgroup@#1#2#3{%
+ \@def@{environ@bblo@#1}{\begingroup#2}
+ \@def@{environ@eblo@#1}{#3\endgroup}}
+
+\def\environ@newenvgroup@#1{%
+ \environ@n@wenvgroup@{#1}}
+\long\def\environ@n@wenvgroup@#1#2#3{%
+ \@def@{environ@benv@#1}{\begingroup#2}
+ \@def@{environ@eenv@#1}{#3\endgroup}}
+
+\def\newpair{\relax
+ \@ifnextchar@*{\expandafter\environ@newblockpair@\@eat@}\environ@newenvpair@}
+
+\def\environ@newblockpair@#1{%
+ \@def@{#1}{\environ@B@{#1}}\@def@{end#1}{\environ@E@{#1}}%
+ \environ@n@wblockpair@{#1}}
+\long\def\environ@n@wblockpair@#1#2#3{%
+ \@def@{environ@bblo@#1}{#2}
+ \@def@{environ@eblo@#1}{#3}}
+
+\def\environ@newenvpair@#1{%
+ \environ@n@wenvpair@{#1}}
+\long\def\environ@n@wenvpair@#1#2#3{%
+ \@def@{environ@benv@#1}{#2}
+ \@def@{environ@eenv@#1}{#3}}
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/equation.cd b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/equation.cd
new file mode 100644
index 0000000000..179ba9969f
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/equation.cd
@@ -0,0 +1,332 @@
+% equation.cd
+% Anders G S Svensson
+
+% Source: equation.nw
+% $Revision: 1.17 $
+% $Date: 1996/02/19 22:40:12 $
+
+\usecarrot{label}
+
+\def\equation@cases@begin@{%
+ \left\{\,\vcenter\bgroup \let\\\cr \normalbaselines \m@th
+ \ialign\bgroup $##\hfil$&\quad##\hfil\crcr}
+\def\equation@cases@end@{\crcr\egroup\egroup\right.}
+\def\equation@eqalign@select@[#1]{%
+ \@ifundefined@{equation@vbox@#1@}%
+ {\@Warning@{Invalid eqalign option: #1}\equation@vbox@c@}%
+ {\@cs@{equation@vbox@#1@}}%
+ \bgroup
+ \let\\\cr
+ \openup\jot\m@th
+ \ialign\bgroup
+ \strut\hfil$\displaystyle{##}$
+ &$\displaystyle{{}##}$\hfil\crcr}
+\let\equation@vbox@t@\vtop
+\let\equation@vbox@b@\vbox
+\let\equation@vbox@c@\vcenter
+
+\def\equation@eqalign@begin@{%
+ \,\@ifnextchar@[\equation@eqalign@select@{\equation@eqalign@select@[c]}}
+\def\equation@eqalign@end@{\crcr\egroup\egroup\,}
+\def\equation@matrix@select@[#1]{%
+ \vcenter\bgroup\let\\\cr
+ \@ifundefined@{equation@lhfil@#1@}%
+ {\@Warning@{Invalid matrix option: #1}
+ \@let@{equation@lhfil@#1@}\hfil \@let@{equation@rhfil@#1@}\hfil}
+ {}
+ \normalbaselines\m@th
+ \ialign\bgroup
+ \@cs@{equation@lhfil@#1@}$##$\@cs@{equation@rhfil@#1@}&&\quad
+ \@cs@{equation@lhfil@#1@}$##$\@cs@{equation@rhfil@#1@}\crcr
+ \mathstrut\crcr\noalign{\kern-\baselineskip}}
+\let\equation@lhfil@l@\relax \let\equation@rhfil@l@\hfil
+\let\equation@lhfil@c@\hfil \let\equation@rhfil@c@\hfil
+\let\equation@lhfil@r@\hfil \let\equation@rhfil@r@\relax
+
+\def\equation@matrix@begin@{%
+ \,\@ifnextchar@[\equation@matrix@select@{\equation@matrix@select@[c]}}
+\def\equation@matrix@end@{%
+ \crcr\mathstrut\crcr
+ \noalign{\kern-\baselineskip}\egroup\egroup\,}
+\def\pmatrixdelimiters#1#2{%
+ \def\equation@pmatrixdelimiter@left@{#1}%
+ \def\equation@pmatrixdelimiter@right@{#2}}
+\pmatrixdelimiters()
+\def\equation@displaymath@begin@{%
+ \@ifmmode@
+ {\let\equation@displaymath@end@\relax}%
+ {$$\def\equation@displaymath@end@{$$}}}
+
+\def\equation@align@displaymath@begin@{\equation@displaymath@begin@}
+\def\equation@align@displaymath@end@{\equation@displaymath@end@}
+
+\def\equation@equation@begin@{%
+ \equation@insertifstarred@\equation@equation@nonumber@
+ \equation@equation@begin@primitive@}
+
+\def\equation@equation@end@{%
+ \equation@stepcounter@\currentcounter
+ \equation@eqno@\equation@number@ \equation@equation@label@
+ \equation@displaymath@end@\@ignorespaces@}
+\def\equation@equation@begin@primitive@#1{%
+ \equation@displaymath@begin@
+ #1\equation@equation@numbering@
+ \def\equation@align@displaymath@begin@{%
+ \def\equation@align@displaymath@end@{\egroup$\hss\egroup}%
+ \hbox to\z@\bgroup
+ \hss$\vcenter\bgroup
+ \equation@align@nonumbers@ \let\equation@tagcr@\crcr}}
+
+\def\equation@insertifstarred@#1#2{#2\relax}
+\let\equation@stepcounter@\@eat@
+\def\equation@equation@nonumber@{%
+ \let\equation@eqnobox@choice@\@eattwo@}
+\def\rightequationtags{%
+ \def\equation@eqno@{\equation@eqnobox@choice@\eqno}%
+ \let\equation@tagbox@\equation@tagbox@right@}
+
+\def\leftequationtags{%
+ \def\equation@eqno@{\equation@eqnobox@choice@\leqno}%
+ \let\equation@tagbox@\equation@tagbox@left@}
+
+\def\equation@tagbox@left@#1{\hbox to \displaywidth{#1\hss}}
+\def\equation@tagbox@right@#1{#1}
+
+\rightequationtags
+
+\let\equation@eqnobox@choice@\@eattwo@
+\def\equation@eqnobox@#1#2{#1{\hbox{#2}}}
+\def\equation@equation@label@{\equation@equation@label@primitive@}
+\let\equation@equation@label@primitive@\relax
+
+\def\equation@label@generate@{\@warning@{Missing \tag}\@eat@}
+
+\def\equation@equation@numbering@{%
+ \def\label##1{%
+ \def\equation@equation@label@primitive@{%
+ \equation@label@generate@{##1}}}%
+ \let\tag\equation@equation@tag@
+ \def\notag{%
+ \let\equation@eqno@\@eat@ \let\equation@equation@label@\relax}}
+
+\def\equation@equation@tag@{%
+ \let\equation@eqnobox@choice@\equation@eqnobox@
+ \@ifnextchar@*%
+ {\expandafter\equation@equation@tag@star@\@eat@}
+ \equation@equation@tag@nostar@}
+\def\equation@equation@tag@star@#1{%
+ \def\equation@number@{#1}%
+ \def\equation@label@generate@##1{\definexr{##1}{#1}{empty}}}
+
+\def\equation@equation@tag@nostar@#1{%
+ \def\equation@number@{\@cs@{\currentcounter tag}{#1}}%
+ \def\equation@label@generate@##1{\definexr{##1}{#1}\currentcounter}}
+\def\equation@display@begin@{%
+ \equation@insertifstarred@\equation@align@nonumbers@
+ \equation@display@begin@primitive@}
+
+\def\equation@display@end@{%
+ \equation@crcr@ \egroup \equation@align@displaymath@end@\@ignorespaces@}
+
+\def\equation@display@begin@primitive@#1{%
+ \equation@align@displaymath@begin@
+ #1\equation@align@numbering@
+ \displ@y \tabskip\z@skip
+ \halign\bgroup
+ &{\gdef\equation@crcr@{\equation@cr@}}%
+ \hbox to\displaywidth{$\@lign\hfil\displaystyle##\hfil$}\crcr}
+\def\equation@subdisplay@begin@{%
+ \equation@insertifstarred@\equation@align@nonumbers@
+ \equation@subdisplay@begin@primitive@}
+
+\def\equation@subalign@numbering@{%
+ \def\equation@number@{\subequationtag\thesubequation}%
+ \def\currentcounter{subequation}%
+ \equation@tweaknumbering@
+ \equation@align@numbering@primitive@}
+
+\let\equation@tweaknumbering@\relax
+
+\def\equation@subdisplay@begin@primitive@#1{%
+ \equation@display@begin@primitive@{#1\equation@subalign@numbering@\@eat@}}
+\def\equation@align@begin@{%
+ \equation@insertifstarred@\equation@align@nonumbers@
+ \equation@align@begin@primitive@}
+
+\def\equation@align@end@{%
+ \equation@crcr@ \egroup \equation@align@displaymath@end@\@ignorespaces@}
+
+\def\equation@align@begin@primitive@#1{%
+ \equation@align@displaymath@begin@
+ #1\equation@align@numbering@
+ \displ@y \tabskip\centering
+ \halign to\displaywidth\bgroup
+ &{\gdef\equation@crcr@{\equation@cr@}}%
+ \hfil$\@lign\displaystyle{##}$\tabskip\z@skip
+ &$\@lign\displaystyle{{}##}$\hfil\tabskip\centering\crcr}
+\def\equation@subalign@begin@{%
+ \equation@insertifstarred@\equation@align@nonumbers@
+ \equation@subalign@begin@primitive@}
+
+\def\equation@subalign@begin@primitive@#1{%
+ \equation@align@begin@primitive@{#1\equation@subalign@numbering@\@eat@}}
+\def\equation@align@numbering@primitive@{%
+ \def\\{\equation@cr@}%
+ \global\let\equation@align@label@\relax
+ \global\let\equation@align@label@generate@\equation@label@generate@
+ \def\label##1{%
+ \gdef\equation@align@label@{\equation@align@label@generate@{##1}}}%
+ \let\tag\equation@align@tag@ \let\notag\equation@align@notag@}
+\def\equation@align@numbering@{%
+ \def\currentcounter{equation}%
+ \equation@align@numbering@primitive@}
+
+\def\equation@align@nonumbers@{%
+ \def\equation@cr@{\crcr}\def\equation@crcr@{\crcr}}%
+\let\equation@align@notag@\equation@align@nonumbers@
+\def\equation@align@tag@{\relax
+ \def\equation@cr@{\equation@tagcr@}%
+ \gdef\equation@crcr@{\equation@tagcr@}%
+ \@ifnextchar@*%
+ {\expandafter\equation@align@tag@star@\@eat@}%
+ \equation@align@tag@nostar@}
+
+\def\equation@align@tag@star@#1{%
+ \equation@align@buildtab@\@echo@{#1}%
+ \gdef\equation@align@label@generate@##1{\definexr{##1}{#1}{empty}}}
+\def\equation@align@tag@nostar@#1{%
+ \equation@align@buildtab@{\@cs@{\currentcounter tag}}{#1}%
+ \gdef\equation@align@label@generate@##1{\definexr{##1}{#1}\currentcounter}}
+
+\def\equation@tagcr@{%
+ \equation@numbertab@tag@ \crcr
+ \noalign{%
+ \equation@align@label@
+ \global\let\equation@align@label@\relax
+ \global\let\equation@align@label@generate@\@eat@
+ \gdef\equation@crcr@{\crcr}}}
+
+\def\equation@align@buildtab@#1#2{%
+ \gdef\equation@numbertab@tag@{&\omit \llap{\equation@tagbox@{#1{#2}}}}}
+
+\let\equation@crcr@\crcr \let\equation@cr@\crcr
+\let\equation@autocr@\crcr
+\def\equationtag#1{(#1)}
+\let\subequationtag\equationtag
+
+\DeclareOption{number}
+ {\usecarrot{counter}
+ \newcounter{equation}
+ \newcounter{subequation}[equation]
+ \def\thesubequation{\theequation\alph{subequation}}
+ \def\equation@insertifstarred@#1#2{\@ifnextchar@*{\@eatnextchar@{#2#1}}{#2\relax}}
+ \let\equation@stepcounter@\stepcounter
+ \let\equation@eqnobox@choice@\equation@eqnobox@
+ \def\equation@number@{\equationtag\theequation}
+ \def\equation@equation@nonumber@{%
+ \let\equation@eqnobox@choice@\@eattwo@
+ \let\equation@stepcounter@\@eat@}
+ \def\equation@label@generate@#1{\definelabel{#1}\currentcounter}
+ \def\equation@equation@numbering@{%
+ \def\currentcounter{equation}%
+ \def\label##1{%
+ \def\equation@equation@label@primitive@{%
+ \equation@label@generate@{##1}}}%
+ \let\tag\equation@equation@tag@
+ \let\notag\equation@equation@notag@}
+ \def\equation@equation@tag@{\relax
+ \let\equation@stepcounter@\@eat@
+ \@ifnextchar@*%
+ {\expandafter\equation@equation@tag@star@\@eat@}
+ \equation@equation@tag@nostar@}
+ \def\equation@equation@notag@{%
+ \let\equation@eqno@\@eat@ \let\equation@equation@tag@\relax
+ \let\equation@stepcounter@\@eat@}
+ \def\equation@tweaknumbering@{%
+ \@def@{counter@ctr++@subequation}{%
+ \stepcounter{equation}%
+ \counter@stepcounter@{subequation}%
+ \@gdef@{counter@ctr++@subequation}{%
+ \counter@stepcounter@{subequation}}}}%
+ \def\equation@autocr@{%
+ \stepcounter\currentcounter
+ \equation@align@label@ \equation@numbertab@ \crcr
+ \noalign{%
+ \global\let\equation@align@label@\relax
+ \global\let\equation@align@label@generate@\equation@label@generate@
+ \gdef\equation@crcr@{\crcr}}}
+ \let\equation@cr@\equation@autocr@
+ \def\equation@numbertab@{&\omit \llap{\equation@tagbox@\equation@number@}}}
+
+\DeclareOption{arg}
+ {\def\cases#1{\equation@cases@begin@ #1\equation@cases@end@}
+ \def\equation@eqalign@arg@[#1]#2{%
+ \,\equation@eqalign@select@[#1]#2\equation@eqalign@end@}
+ \def\eqalign{\null
+ \@ifnextchar@[\equation@eqalign@arg@{\equation@eqalign@arg@[c]}}
+ \def\equation@matrix@arg@[#1]#2{%
+ \,\equation@matrix@select@[#1]#2\equation@matrix@end@}
+ \def\equation@pmatrix@arg@[#1]#2{%
+ \left\equation@pmatrixdelimiter@left@
+ \equation@matrix@arg@[#1]#2\equation@matrix@end@
+ \right\rpmtxdel@\ignorespaces}
+ \def\matrix{\null
+ \@ifnextchar@[\equation@matrix@arg@{\equation@matrix@arg@[c]}}
+ \def\pmatrix{\null
+ \@ifnextchar@[\equation@pmatrix@arg@{\equation@pmatrix@arg@[c]}}
+ \def\equation{%
+ \equation@insertifstarred@\equation@equation@nonumber@
+ \equation@equation@arg@}
+ \def\equation@equation@arg@#1#2{%
+ \equation@equation@begin@primitive@#1#2\equation@equation@end@}
+ \def\display{%
+ \equation@insertifstarred@\equation@align@nonumbers@
+ \equation@display@arg@}
+ \def\equation@display@arg@#1#2{%
+ \equation@display@begin@primitive@#1#2\equation@display@end@}
+ \def\subdisplay{%
+ \equation@insertifstarred@\equation@align@nonumbers@
+ \equation@subdisplay@arg@}
+ \def\equation@subdisplay@arg@#1#2{%
+ \equation@subdisplay@begin@primitive@#1#2\equation@display@end@}
+ \def\align{%
+ \equation@insertifstarred@\equation@align@nonumbers@\equation@align@arg@}
+ \def\equation@align@arg@#1#2{%
+ \equation@align@begin@primitive@#1#2\equation@align@end@}
+ \def\subalign{%
+ \equation@insertifstarred@\equation@align@nonumbers@
+ \equation@subalign@arg@}
+ \def\equation@subalign@arg@#1#2{%
+ \equation@subalign@begin@primitive@#1#2\equation@align@end@}}
+
+\DeclareOption{block}
+ {\usecarrot{environ}
+ \newpair*{cases}{\equation@cases@begin@}{\equation@cases@end@}
+ \newpair*{eqalign}{\null\equation@eqalign@begin@}{\equation@eqalign@end@}
+ \newpair*{matrix}{\null\equation@matrix@begin@}{\equation@matrix@end@}
+ \newpair*{pmatrix}
+ {\left\equation@pmatrixdelimiter@left@ \equation@matrix@begin@}
+ {\equation@matrix@end@ \right\equation@pmatrixdelimiter@right@}
+ \newpair*{equation}{\equation@equation@begin@}{\equation@equation@end@}
+ \newpair*{display}{\equation@display@begin@}{\equation@display@end@}
+ \newpair*{subdisplay}{\equation@subdisplay@begin@}{\equation@display@end@}
+ \newpair*{align}{\equation@align@begin@}{\equation@align@end@}
+ \newpair*{subalign}{\equation@subalign@begin@}{\equation@align@end@}}
+
+\DeclareOption{environ}
+ {\usecarrot{environ}
+ \newpair{cases}{\equation@cases@begin@}{\equation@cases@end@}
+ \newpair{eqalign}{\null\equation@eqalign@begin@}{\equation@eqalign@end@}
+ \newpair{matrix}{\null\equation@matrix@begin@}{\equation@matrix@end@}
+ \newpair{pmatrix}
+ {\left\equation@pmatrixdelimiter@left@ \equation@matrix@begin@}
+ {\equation@matrix@end@\right\equation@pmatrixdelimiter@right@}
+ \newpair{equation}{\equation@equation@begin@}{\equation@equation@end@}
+ \newpair{display}{\equation@display@begin@}{\equation@display@end@}
+ \newpair{subdisplay}{\equation@subdisplay@begin@}{\equation@display@end@}
+ \newpair{align}{\equation@align@begin@}{\equation@align@end@}
+ \newpair{subalign}{\equation@subalign@begin@}{\equation@align@end@}}
+
+\IfOption{arg}{}{\IfOption{block}{}{\Option{environ}}}
+
+\def\intertext#1{\noalign{#1}}
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/index.cd b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/index.cd
new file mode 100644
index 0000000000..e494944e25
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/index.cd
@@ -0,0 +1,42 @@
+% index.cd
+% Anders G S Svensson
+
+% Source: index.nw
+% $Revision: 1.4 $
+% $Date: 1996/02/19 19:08:56 $
+
+\usecarrot{auxfile}
+
+\def\newindexfile{\bgroup\@ignorewhitespace@\index@newindexfile@}
+\def\index@newindexfile@#1{\egroup
+ \newauxfile{#1dx}%
+ \@def@{read#1dx}{\index@readind@{#1}\global\@let@{read#1dx}\relax}%
+ \@def@{read#1nd}{\@cs@{read#1dx}}}
+\def\index@readind@#1{%
+ \IfFileExists{\jobname.#1nd}%
+ {\input\jobname.#1nd\relax}%
+ {}}
+
+\def\readindexfile{\bgroup\@ignorewhitespace@\index@readindexfile@}
+\def\index@readindexfile@#1{\egroup
+ \@ifundefined@{auxfile@aux@#1dx}%
+ {\@Warning{Undeclared index file: #1}}%
+ {\@cs@{read#1dx}}}
+
+\def\writeindexentry{\bgroup\@ignorewhitespace@\index@writeindexentry@}
+\def\index@writeindexentry@#1{\egroup
+ \@ifundefined@{auxfile@aux@#1dx}%
+ {\@Warning{Undeclared index file: #1}\@eat@}%
+ {\index@writeidx@{#1}}}
+
+\def\index@writeidx@#1#2{%
+ \@cs@{open#1dx}%
+ \def\@tmp@{\indexentry{#2}}%
+ \edef\@action@{%
+ \expandafter\noexpand\csname write#1dx\endcsname{%
+ \@meaning@\@tmp@{\noexpand\folio}}}%
+ \@action@}
+
+\newindexfile{i}
+
+\def\index{\writeindexentry{i}}
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/label.cd b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/label.cd
new file mode 100644
index 0000000000..0a10bbb3a8
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/label.cd
@@ -0,0 +1,18 @@
+% label.cd
+% Anders G S Svensson
+
+% Source: label.nw
+% $Revision: 1.2 $
+% $Date: 1996/02/19 02:05:49 $
+
+\usecarrot{counter,xr}
+
+\def\definelabel#1#2{%
+ \@ifundefined@{counter@ctn@#2}%
+ {\@Warning@{Unknown class: #2}}%
+ {\definexr{#1}{\@cs@{the#2}}{#2}{\noexpand\folio}}}
+\def\label#1{\definelabel{#1}{\currentcounter}}
+
+\let\ref\refxr
+\let\pageref\pagexr
+\let\pagedef\definepage
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/patchlevel_10 b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/patchlevel_10
new file mode 100644
index 0000000000..89094d1340
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/patchlevel_10
@@ -0,0 +1 @@
+07 Jun 1996
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/section.cd b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/section.cd
new file mode 100644
index 0000000000..0eb70fb8d9
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/section.cd
@@ -0,0 +1,223 @@
+% section.cd
+% Anders G S Svensson
+
+% Source: section.nw
+% $Revision: 1.25 $
+% $Date: 1996/06/04 12:57:01 $
+
+\def\section@newunnumberedsection@#1#2{
+ \section@initsection@{#2}
+ \@def@{#2banneru}{%
+ \@cs@{section@banner@\@cs@{section@style@#2}}{#2}{}}%
+ \@def@{#2}{\section@unnumsect@{#1}{#2}}
+ \@ifnext@<{\section@skip@{pre}{#2}%
+ {\@eatspace@{\section@skip@{post}{#2}{}}}}%
+ {}}
+\let\section@newsection@\section@newunnumberedsection@
+
+\def\section@unnumsect@#1#2#3{%
+ \@ifnext@[%
+ {\section@@unnumsect@{#1}{#2}{#3}}%
+ {\section@@unnumsect@{#1}{#2}{#3}[#3]}}
+
+\def\section@@unnumsect@#1#2#3[#4]{%
+ \section@section@{#2}{%
+ \section@sectionbanner@{#2}{\@cs@{#2banneru}{#3}}%
+ \@expandafter@{\@expandafter@{#1*{toc}{#2}}}%
+ \csname section@\@cs@{section@tocchoice@#2}choice@\endcsname{#3}{#4}%
+ \@expandafter@{\@expandafter@{\@cs@{#2mark}}}%
+ \csname section@\@cs@{section@markchoice@#2}choice@\endcsname{#3}{#4}%
+ }\ignorespaces}%
+\def\section@skip@#1#2#3<#4>{\relax
+ \@ifempty@{#4}%
+ {#3}%
+ {\@def@{section@#1skip@#2}{\@s@\z@\@sum@\@s@#4+@\vskip\@s@}#3}}
+
+\def\section@newnumberedsection@#1#2{\relax
+ \@ifnextchar@*%
+ {\@expandafter@{\section@newunnumberedsection@{#1}{#2}}\@eat@}%
+ {\section@@newnumberedsection@{#1}{#2}}}
+
+\def\section@@newnumberedsection@#1#2{%
+ \section@initsection@{#2}
+ \@def@{#2banneru}{%
+ \@cs@{section@banner@\@cs@{section@style@#2}}{#2}{}}%
+ \@def@{#2banner}{%
+ \@cs@{section@banner@\@cs@{section@style@#2}}{#2}{\@cs@{the#2}}}%
+ \@ifnext@[%
+ {\section@newnumsectwithin@{#1}{#2}}
+ {\section@newnumsect@{#1}{#2}}}
+
+\def\section@sectionbanner@#1#2{{\@cs@{section@headinghook@#1}#2}}
+\def\section@initsection@#1{%
+ \@def@{#1plug}{\defaultsectionplug}
+ \@def@{#1mark}{\defaultsectionmark{#1}}
+ \@def@{section@markchoice@#1}{\section@markchoice@def@ult}
+ \@def@{section@tocchoice@#1}{\section@tocchoice@def@ult}
+ \@def@{section@style@#1}{\section@style@def@ult}
+ \@def@{section@preskip@#1}{%
+ \@s@\z@
+ \expandafter\@sum@
+ \expandafter\@s@\defaultpresectionskip+@\vskip\@s@}
+ \@def@{section@postskip@#1}{%
+ \@s@\z@
+ \expandafter\@sum@
+ \expandafter\@s@\defaultpostsectionskip+@\vskip\@s@}
+ \@def@{section@prehook@#1}{\section@prehook@def@ult}%
+ \@def@{section@posthook@#1}{\section@posthook@def@ult}%
+ \@def@{section@headinghook@#1}{\section@headinghook@def@ult}}
+
+\def\section@define@#1[#2]{%
+ \@define@{section@#1@#2}}
+
+\def\section@defvar@#1{\relax
+ \@ifnextchar@[{\section@define@{#1}}{\section@define@{#1}[def@ult]}}
+
+\def\presectionhook{\section@defvar@{prehook}}
+\def\postsectionhook{\section@defvar@{posthook}}
+\def\headinghook{\section@defvar@{headinghook}}
+
+\let\section@prehook@def@ult\relax
+\def\section@posthook@def@ult{\penalty200}
+\def\section@headinghook@def@ult{\bf}
+
+\let\defaultsectionmark\@eattwo@
+\def\defaultsectionplug{\hskip.8em}
+\def\defaultpresectionskip{-\lastskip+\bigskipamount+-.5\parskip}
+\def\defaultpostsectionskip{\medskipamount+-.5\parskip}
+
+\def\markchoice{\relax
+ \@ifnextchar@[%
+ {\section@choiceforclass@{mark}}%
+ {\section@choiceforclass@{mark}[def@ult]}}
+\def\tocchoice{\relax
+ \@ifnextchar@[%
+ {\section@choiceforclass@{toc}}%
+ {\section@choiceforclass@{toc}[def@ult]}}
+\def\section@choiceforclass@#1[#2]#3{%
+ \@ifundefined@{section@#3choice@}%
+ {\@Warning@{Invalid choice: #3}}%
+ {\@def@{section@#1choice@#2}{#3}}}
+
+\def\section@markchoice@def@ult{alt}
+\def\section@tocchoice@def@ult{full}
+
+\def\section@altchoice@#1#2{{#2}}
+\def\section@fullchoice@#1#2{{#1}}
+\def\sectionstyle{\relax
+ \@ifnextchar@[\section@styleforclass@{\section@styleforclass@[def@ult]}}
+\def\section@styleforclass@[#1]{%
+ \@afterassignment@{\section@checkstyle@{#1}}\@t@}
+\def\section@checkstyle@#1{%
+ \@ifundefined@{section@banner@\the\@t@}%
+ {\@Warning@{Unknown section style: \the\@t@}}%
+ {\@edef@{section@style@#1}{\the\@t@}}}
+\def\section@style@def@ult{plain}
+
+\def\section@banner@plain#1#2#3{%
+ \noindent
+ \@ifempty@{#2}{}{#2\@cs@{#1plug}}#3}
+\let\section@banner@p\section@banner@plain
+
+\def\section@banner@word#1#2#3{%
+ \noindent
+ \@ifempty@{#2}%
+ {}%
+ {\@ifundefined@{#1word}{}{\@cs@{#1word}\ }#2\@cs@{#1plug}}#3}
+\let\section@banner@w\section@banner@word
+
+\def\section@banner@center#1#2#3{%
+ \parindent\z@
+ \leftskip=0pt plus 1fil \rightskip=0pt plus 1fil
+ \parfillskip\z@
+ \@ifempty@{#2}{}{#2\@cs@{#1plug}}#3\par}
+\let\section@banner@centre\section@banner@center
+\let\section@banner@c\section@banner@center
+
+\def\section@banner@centerword#1#2#3{%
+ \parindent\z@
+ \leftskip=0pt plus 1fil \rightskip=0pt plus 1fil
+ \parfillskip\z@
+ \@ifempty@{#2}%
+ {}%
+ {\@ifundefined@{#1word}{}{\@cs@{#1word}\ }#2\@cs@{#1plug}}#3\par}
+\let\section@banner@centreword\section@banner@centerword
+\let\section@banner@cw\section@banner@centerword
+\def\section@newnumsectwithin@#1#2[#3]{
+ \newcounter{#2}[#3]
+ \@def@{#2}{\section@numsectcs@{#1}{#2}}%
+ \@ifnext@<{\section@skip@{pre}{#2}%
+ {\@eatspace@{\section@skip@{post}{#2}{}}}}%
+ {}}
+
+\def\section@newnumsect@#1#2{
+ \newcounter{#2}
+ \@def@{#2}{\section@numsectcs@{#1}{#2}}%
+ \@ifnext@<{\section@skip@{pre}{#2}%
+ {\@eatspace@{\section@skip@{post}{#2}{}}}}%
+ {}}
+
+\def\section@numsectcs@#1#2{\relax
+ \@ifnextchar@*%
+ {\section@numsectnonum@{#1}{#2}}%
+ {\section@numsect@{#1}{#2}}}
+
+\def\section@numsectnonum@#1#2#3#4{\par
+ \@ifnext@[%
+ {\section@numsectionnonum@{#1}{#2}{#4}}%
+ {\section@numsectionnonum@{#1}{#2}{#4}[#4]}}
+
+\def\section@numsectionnonum@#1#2#3[#4]{%
+ \section@section@{#2}{%
+ \section@sectionbanner@{#2}{\@cs@{#2banneru}{#3}}%
+ \@expandafter@{\@expandafter@{#1*{toc}{#2}}}%
+ \csname section@\@cs@{section@tocchoice@#2}choice@\endcsname{#3}{#4}%
+ \@expandafter@{\@expandafter@{\@cs@{#2mark}}}%
+ \csname section@\@cs@{section@markchoice@#2}choice@\endcsname{#3}{#4}%
+ }\ignorespaces}
+
+\def\section@numsect@#1#2#3{\par
+ \@ifnext@[%
+ {\section@@numsect@{#1}{#2}{#3}}%
+ {\section@@numsect@{#1}{#2}{#3}[#3]}}
+
+\def\section@@numsect@#1#2#3[#4]{%
+ \stepcounter{#2}%
+ \def\currentcounter{#2}%
+ \section@section@{#2}{%
+ \section@sectionbanner@{#2}{\@cs@{#2banner}{#3}}%
+ \@expandafter@{\@expandafter@{#1{toc}{#2}}}%
+ \csname section@\@cs@{section@tocchoice@#2}choice@\endcsname
+ {#3}{#4}{\@cs@{the#2}}%
+ \@expandafter@{\@expandafter@{\@cs@{#2mark}}}%
+ \csname section@\@cs@{section@markchoice@#2}choice@\endcsname{#3}{#4}%
+ }\ignorespaces}
+
+\DeclareOption{toc}
+ {\usecarrot{toc}
+ \let\newsection\section@newtocsection@}
+
+\DeclareOption{number}
+ {\usecarrot{counter}
+ \let\section@newsection@\section@newnumberedsection@}
+
+\def\newsection{\section@newsection@\section@notocentry@}
+
+\def\section@newtocsection@{\relax
+ \@ifnextchar@*
+ {\expandafter\section@newsection@\expandafter\section@notocentry@\@eat@}
+ {\section@newsection@\writecontentsentry}}
+
+\def\section@notocentry@#1#2{\@eattwo@}
+
+\def\section@section@#1#2{%
+ \@cs@{section@prehook@#1}\relax
+ \@cs@{section@preskip@#1}%
+ #2\par
+ \@cs@{section@posthook@#1}\relax
+ \@cs@{section@postskip@#1}%
+ \postsectionindent}
+
+\def\postsectionindent{%
+ \edef\@action@{\everypar={\hskip-\parindent\the\everypar
+ \everypar={\the\everypar}}}\@action@}
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/state.cd b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/state.cd
new file mode 100644
index 0000000000..19c6e316e6
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/state.cd
@@ -0,0 +1,185 @@
+% state.cd
+% Anders G S Svensson
+
+% Source: state.nw
+% $Revision: 1.17 $
+% $Date: 1996/02/22 10:00:43 $
+
+\usecarrot{environ}
+
+\def\state@newstatement@#1#2{%
+ \@def@{#1captionu}{%
+ \@cs@{state@caption@\@cs@{state@style@#1}}{#1}{#2}{}}
+ \state@newst@tement@{#1}{#2}\state@beginstate@}
+\let\newstatement\state@newstatement@
+
+\def\state@newst@tement@#1#2#3{%
+ \state@initstatement@{#1}{#2}
+ \state@statecsdef@{#1}{#3}\state@endstate@
+ \@ifnext@<{\state@skip@{pre}{#1}%
+ {\state@skip@{post}{#1}{}}}%
+ {}}
+
+\DeclareOption{block}
+ {\def\state@statecsdef@#1#2#3{%
+ \Bdef*{#1}{#2{#1}}\Edef*{#1}{#3{#1}}}}
+
+\DeclareOption{environ}
+ {\def\state@statecsdef@#1#2#3{%
+ \Bdef{#1}{#2{#1}}\Edef{#1}{#3{#1}}}}
+
+\IfOption{environ}{}{\Option{block}}
+
+\def\state@skip@#1#2#3<#4>{\relax
+ \@ifempty@{#4}{#3}{%
+ \@def@{state@#1skip@#2}{\@s@\z@\@sum@\@s@#4+@\vskip\@s@}#3}}
+
+\def\state@initstatement@#1#2{%
+ \@def@{state@style@#1}{\state@style@def@ult}%
+ \@def@{state@preskip@#1}{%
+ \@s@\z@
+ \expandafter\@sum@
+ \expandafter\@s@\defaultprestatementskip+@\vskip\@s@}
+ \@def@{state@postskip@#1}{%
+ \@s@\z@
+ \expandafter\@sum@
+ \expandafter\@s@\defaultpoststatementskip+@\vskip\@s@}
+ \@def@{state@prehook@#1}{\state@prehook@def@ult}%
+ \@def@{state@posthook@#1}{\state@posthook@def@ult}%
+ \@def@{state@captionhook@#1}{\state@captionhook@def@ult}%
+ \@def@{state@bodyhook@#1}{\state@bodyhook@def@ult}%
+ \@def@{#1tag}{\defaultstatementtag{#2}}%
+ \@def@{#1paren}{\defaultstatementparen}%
+ \@def@{#1plug}{\defaultstatementplug}}
+
+\def\state@define@#1[#2]{%
+ \@define@{state@#1@#2}}
+
+\def\state@defvar@#1{\relax
+ \@ifnextchar@[{\state@define@{#1}}{\state@define@{#1}[def@ult]}}
+
+\def\prestatementhook{\state@defvar@{prehook}}
+\def\poststatementhook{\state@defvar@{posthook}}
+\def\captionhook{\state@defvar@{captionhook}}
+\def\bodyhook{\state@defvar@{bodyhook}}
+
+\let\state@prehook@def@ult\relax
+\let\state@posthook@def@ult\relax
+\let\state@bodyhook@def@ult\relax
+\def\state@captionhook@def@ult{\bf}
+
+\def\defaultprestatementskip{-\lastskip+\medskipamount+-.5\parskip}
+\def\defaultpoststatementskip{\medskipamount+-.5\parskip}
+\def\defaultstatementparen#1{(#1)}
+\def\defaultstatementplug{\hskip.75em}
+\def\defaultstatementtag#1#2{#1 #2}
+
+\def\state@beginstate@#1{\par
+ \begingroup
+ \@cs@{state@prehook@#1}%
+ \@cs@{state@preskip@#1}%
+ \state@statenonum@{#1}{u}}
+
+\def\state@endstate@#1{\par
+ \@cs@{state@posthook@#1}%
+ \@cs@{state@postskip@#1}%
+ \endgroup\ignorespaces}
+
+\def\state@statenonum@#1#2{%
+ \@ifnextchar@[{\state@state@{#1}{#2}}{\state@state@{#1}{#2}[]}}
+
+\def\state@state@#1#2[#3]{\relax
+ \state@statementcaption@{#1}{\@cs@{#1caption#2}{#3}}\ignorespaces}
+
+\def\state@statementcaption@#1#2{%
+ {\@cs@{state@captionhook@#1}#2}\@cs@{state@bodyhook@#1}}
+
+\def\statementstyle{\relax
+ \@ifnextchar@[\state@styleforclass@{\state@styleforclass@[def@ult]}}
+\def\state@styleforclass@[#1]{%
+ \@afterassignment@{\state@checkstyle@{#1}}\@t@}
+\def\state@checkstyle@#1{%
+ \@ifundefined@{state@caption@\the\@t@}%
+ {\@Warning@{Unknown statement style: \the\@t@}}%
+ {\@edef@{state@style@#1}{\the\@t@}}}
+\def\state@style@def@ult{post}
+
+\def\state@caption@post#1#2#3#4{%
+ \noindent #2%
+ \@ifempty@{#3}{}{\ #3}%
+ \@ifempty@{#4}{}{\ \@cs@{#1paren}{#4}}\@cs@{#1plug}}
+
+\def\state@caption@pre#1#2#3#4{%
+ \noindent\@ifempty@{#3}{}{#3\ }%
+ #2%
+ \@ifempty@{#4}{}{\ \@cs@{#1paren}{#4}}\@cs@{#1plug}}
+
+\def\state@caption@nlpost#1#2#3#4{%
+ \noindent #2%
+ \@ifempty@{#3}{}{\ #3}%
+ \@ifempty@{#4}{}{\ \@cs@{#1paren}{#4}}\@cs@{#1plug}%
+ \unskip\par\penalty10000\smallskip\noindent}
+
+\def\state@caption@nlpre#1#2#3#4{%
+ \noindent \@ifempty@{#3}{}{#3\ }%
+ #2%
+ \@ifempty@{#4}{}{\ \@cs@{#1paren}{#4}}\@cs@{#1plug}%
+ \unskip\par\penalty10000\smallskip\noindent}
+
+\def\state@caption@clpre#1#2#3#4{%
+ {\parindent\z@ \leftskip=0pt plus 1fil \rightskip=0pt plus 1fil
+ \parfillskip\z@
+ \@ifempty@{#3}{}{#3\ }%
+ #2%
+ \@ifempty@{#4}{}{\ \@cs@{#1paren}{#4}}\@cs@{#1plug}\par}%
+ \unskip\par\penalty10000\smallskip\noindent}
+
+\def\state@caption@clpost#1#2#3#4{%
+ {\parindent\z@ \leftskip=0pt plus 1fil \rightskip=0pt plus 1fil
+ \parfillskip\z@
+ #2%
+ \@ifempty@{#3}{}{\ #3}%
+ \@ifempty@{#4}{}{\statementspace\@cs@{#1paren}{#4}}\@cs@{#1plug}%
+ \unskip\par}%
+ \penalty10000\smallskip\noindent}
+\def\state@newnumberstatement@{%
+ \@ifnextchar@*%
+ {\expandafter\state@newstatement@\@eat@}%
+ \state@newstatementwithnumbers@}
+
+\def\state@newstatementwithnumbers@#1{%
+ \@ifnextchar@[%
+ {\state@newstatementwithin@{#1}}%
+ {\state@newstatementwith@{#1}}}
+
+\def\state@newstatementwithin@#1[#2]#3{
+ \newcounter{#1}[#2]
+ \@def@{#1caption}{%
+ \@cs@{state@caption@\@cs@{state@style@#1}}{#1}{#3}{\@cs@{the#1}}}
+ \@def@{#1captionu}{%
+ \@cs@{state@caption@\@cs@{state@style@#1}}{#1}{#3}{}}
+ \state@newst@tement@{#1}{#3}\state@beginnumstate@}
+
+\def\state@newstatementwith@#1#2{%
+ \@def@{#1caption}{%
+ \@cs@{state@caption@\@cs@{state@style@#1}}{#1}{#2}{\@cs@{the#1}}}
+ \@def@{#1captionu}{%
+ \@cs@{state@caption@\@cs@{state@style@#1}}{#1}{#2}{}}
+ \@ifnextchar@[%
+ {\state@newst@tementwith@{#1}{#2}}%
+ {\newcounter{#1}\state@newst@tement@{#1}{#2}\state@beginnumstate@}}
+
+\def\state@newst@tementwith@#1#2[#3]{%
+ \numberwith{#1}{#3}\state@newst@tement@{#1}{#2}\state@beginnumstate@}
+
+\def\state@beginnumstate@#1{\par
+ \begingroup
+ \@cs@{state@prehook@#1}%
+ \@cs@{state@preskip@#1}%
+ \@ifnextchar@*%
+ {\@expandafter@{\state@statenonum@{#1}{u}}\@eat@}%
+ {\stepcounter{#1}\def\currentcounter{#1}\state@statenonum@{#1}{}}}
+
+\DeclareOption{number}
+ {\usecarrot{counter}
+ \let\newstatement\state@newnumberstatement@}
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/theorem.cd b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/theorem.cd
new file mode 100644
index 0000000000..be1d614a11
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/theorem.cd
@@ -0,0 +1,13 @@
+% theorem.cd
+% Anders G S Svensson
+
+% Source: theorem.nw
+% $Revision: 1.1 $
+% $Date: 1996/02/11 10:47:00 $
+
+\PassToCarrot{state}
+
+\let\newtheorem\newstatement
+\let\theoremstyle\statementstyle
+\let\pretheoremhook\prestatementhook
+\let\posttheoremhook\poststatementhook
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/toc.cd b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/toc.cd
new file mode 100644
index 0000000000..3f65de6bae
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/toc.cd
@@ -0,0 +1,21 @@
+% toc.cd
+% Anders G S Svensson
+
+% Source: toc.nw
+% $Revision: 1.4 $
+% $Date: 1996/02/20 09:22:32 $
+
+\usecarrot{contents}
+
+\newcontentsfile{toc}
+
+\def\writetocentry{\relax
+ \@ifnextchar@*%
+ {\expandafter\toc@writeentry@
+ \expandafter\contents@sentry@\@eat@}%
+ {\toc@writeentry@\contents@entry@}}
+
+\def\toc@writeentry@#1{\contents@writeentry@{#1}{toc}}
+
+\def\readtocfile{\readcontentsfile{toc}}
+\def\writetocfile{\writecontentsfile{toc}}
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/xr.cd b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/xr.cd
new file mode 100644
index 0000000000..66edbf0bbc
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/basic/xr.cd
@@ -0,0 +1,45 @@
+% xr.cd
+% Anders G S Svensson
+
+% Source: xr.nw
+% $Revision: 1.5 $
+% $Date: 1996/03/23 18:44:30 $
+
+\usecarrot{auxfile}
+
+\newauxfile{cxr}
+
+\def\definexr#1#2#3{%
+ \readcxr \opencxr
+ \edef\@action@{%
+ \noexpand\writecxr{%
+ \noexpand\noexpand\noexpand\xr@definexr@
+ {#1}{#2}{#3}{\noexpand\folio}}}%
+ \@action@}
+
+\def\xr@definexr@#1#2#3#4{%
+ \@gdef@{xr@xr@#1}{\xr@xref@{#3}{#2}{#4}}}
+
+\def\refxr{\relax
+ \readcxr \opencxr
+ \@ifnextchar@*%
+ {\def\xr@xref@{\expandafter\@FirstOfTwo@\@eat@}%
+ \expandafter\xr@ref@\@eat@}%
+ {\let\xr@xref@\xr@tagcs@ \xr@ref@}}
+\def\xr@tagcs@#1#2{%
+ \@ifundefined@{#1tag}\@echo@{\@cs@{#1tag}}{#2}\@eat@}
+\let\emptytag\@echo@
+
+\def\xr@ref@#1{%
+ \@ifundefined@{xr@xr@#1}%
+ {\@Warning@{Undefined label: #1}[#1]}%
+ {\@cs@{xr@xr@#1}}}
+
+\def\pagexr#1{%
+ \readcxr \opencxr
+ \@ifundefined@{xr@xr@#1}%
+ {\@Warning@{Undefined label: #1}[#1]}%
+ {\def\xr@xref@{\expandafter\@SecondOfTwo@\@eat@}\@cs@{xr@xr@#1}}}
+
+\let\pagetag\@echo@
+\def\definepage#1{\definexr{#1}{\noexpand\folio}{page}}
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/misc/biblio.cd b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/misc/biblio.cd
new file mode 100644
index 0000000000..0224e99b06
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/misc/biblio.cd
@@ -0,0 +1,86 @@
+% biblio.cd
+% Anders G S Svensson
+
+% Source: biblio.nw
+% $Revision: 1.1 $
+% $Date: 1996/02/23 01:01:48 $
+
+\usecarrot{cite,environ,xr}
+
+\def\biblio@begin@{\par
+ \readcxr \opencxr
+ \@settodimen@\leftskip\wd{\citetag{\biblio@widest@}}%
+ \advance\leftskip by \bibindent\relax
+ \parindent\z@
+ \biblio@bibliodefs@}
+
+\let\biblio@widest@\@empty@
+\def\bibindent{2em}
+\def\bibsep{12pt plus 1pt minus 1pt}
+
+\def\biblio@entry@begin@#1{\par
+ \penalty-100
+ \@settodimen@\@d@\wd{\citetag{#1}}%
+ \setbox\@b@=\hbox{\citetag\biblio@widest@}%
+ \ifdim\@d@>\wd\@b@ \gdef\biblio@widest@{#1}\fi
+ \leavevmode\llap{\hbox to \leftskip{\citetag{#1}\hss}}%
+ \parskip\bibsep\relax}
+
+\def\biblio@end@{\par
+ \writecxr{\gdef\noexpand\biblio@widest@{\biblio@widest@}}}
+\def\abbrev{\@ifnextchar@[\biblio@def@\biblio@ref@}
+\def\biblio@def@[#1]#2{%
+ \def\@tmp@{#1}\definexr{@abbrev@#2@}{\@meaning@\@tmp@}{@abbrev@}}
+\def\biblio@ref@#1{\refxr{@abbrev@#1@}}
+
+\let\@abbrev@tag\@echo@
+
+{\catcode`\/=13
+ \catcode`\|=13
+ \catcode`\*=13
+ \catcode`\#=13
+ \catcode`\%=6
+
+ \gdef\biblio@bibliodefs@{
+ \catcode`\/=13 \catcode`\|=13 \catcode`\*=13 \catcode`\#=13
+ \def/{\@ifnextchar@{\noexpand/}{\biblio@slash@}{\biblio@it@}}
+ \def|{\@ifnextchar@{\noexpand|}{\biblio@bar@}{\biblio@bf@}}
+ \def*{\@ifnextchar@{\noexpand*}{\biblio@star@}{\biblio@ref@}}
+ \let#\bibentry
+ \biblio@contplus@ \let\\\biblio@newline@}
+
+ \xdef\biblio@contplus@{\let\noexpand\+\noexpand\biblio@contline@}
+
+ \gdef\biblio@it@%1/{{\it \let/\biblio@slash@ %1}\@ifnextchar@.{}{\@ifnextchar@,{}{\/}}}
+ \gdef\biblio@bf@%1|{{\bf \let|\biblio@bar@ %1}}
+}
+\def\biblio@slash@#1{/}\def\biblio@bar@#1{|}\def\biblio@star@{*}
+\def\biblio@newline@{\hfil\break}
+\def\biblio@contline@{\biblio@newline@\hbox to 1em{\hfil}}
+\def\bibentry{\@ifnextchar@[\biblio@entry@\biblio@entry@noopt@}
+\def\biblio@entry@[#1]#2{\citedef{#2}{#1}%
+ \biblio@entry@begin@{#1}\ignorespaces}
+\def\biblio@entry@noopt@#1{%
+ \@Warning@{Missing biblio label: #1}%
+ \biblio@entry@[?]{#1}}
+
+\DeclareOption{numeric}
+ {\usecarrot{counter}
+ \newcounter{bibentry}
+ \def\biblio@entry@[#1]#2{\biblio@entry@noopt@{#2}}
+ \def\biblio@entry@noopt@#1{%
+ \stepcounter{bibentry}%
+ \citedef{#2}{\thebibentry}%
+ \biblio@entry@begin@\thebibentry}}
+
+\DeclareOption{block}
+ {\newgroup*{biblio}{\biblio@begin@}{\biblio@end@}}
+
+\DeclareOption{environ}
+ {\newgroup{biblio}{\biblio@begin@}{\biblio@end@}}
+
+\IfOption{block}{}{\Option{environ}}
+
+% Local Variables:
+% mode:TeX
+% End:
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/misc/rcs.cd b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/misc/rcs.cd
new file mode 100644
index 0000000000..61a306e0d6
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/misc/rcs.cd
@@ -0,0 +1,73 @@
+% rcs.cd
+% Anders G S Svensson
+% $Date: 1996/02/10 21:43:45 $
+% $Revision: 1.1 $
+
+% Convert RCS strings into something palatable.
+
+\def\rcsdate$#1: #2/#3/#4#5 #6 ${\dateformat#4#5 #3 #2 }
+
+% #1#2 <- day
+% #3 <- month
+% #4 <- year
+%
+\def\DMYformat#1#2 #3 #4 {\dayformat#1#2 \monthname{#3} #4}
+\def\MDYformat#1#2 #3 #4 {\monthname{#3} \dayformat#1#2, #4}
+\def\stampformat#1#2 #3 #4 {#1#2 \shortmonthname{#3} #4}
+
+\DeclareOption{DMY}{\let\dateformat\DMYformat}
+\DeclareOption{MDY}{\let\dateformat\MDYformat}
+\DeclareOption{stamp}{\let\dateformat\stampformat}
+
+\def\dayformat#1#2{\ifnum#1>0 #1\fi#2}
+
+\DeclareOption{leadingzero}{\let\dayformat\relax}
+
+\def\monthname#1{%
+ \ifcase#1\relax
+ \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}
+
+\def\shortmonthname#1{%
+ \ifcase#1\relax
+ \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}
+
+\DeclareOption{shortmonths}{\let\monthname\shortmonthname}
+
+\def\rcsrevision$#1: #2 ${Revision \revisionformat#2 }
+
+\def\revisionformat#1 {#1}
+
+\def\r@patchlevels{\def\revisionformat##1 {\rcsstrip{13}{##1}}}
+\def\r@shortrevisions{\def\revisionformat##1 {\rcsstrip3{##1}}}
+
+\DeclareOption{patchlevels}{\r@patchlevels}
+\DeclareOption{shortrevisions}{\r@shortrevisions}
+
+\def\rcsstrip#1#2{{\count0=1 \r@rcspeel{#1}#2. }}
+
+\def\r@rcspeel#1#2.#3 {%
+ \r@scan#10 {\r@separate#2}%
+ \def\r@tmp{#3}%
+ \ifx\r@tmp\empty
+ \let\r@action\relax
+ \else
+ \def\r@action{\advance\count0 by 1 \r@rcspeel{#1}#3 }%
+ \fi
+ \r@action}
+\def\r@separate{\def\r@separate{.}}
+
+\def\r@scan#1#2 #3{%
+ \ifnum#1=0
+ \def\r@action{#3}%
+ \else
+ \ifnum\count0=#1
+ \let\r@action\relax
+ \else
+ \def\r@action{\r@scan#2 {#3}}%
+ \fi
+ \fi
+ \r@action}
+
+\ExecuteOptions{MDY}
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/arrsy.fs b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/arrsy.fs
new file mode 100644
index 0000000000..0d8ffdf10d
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/arrsy.fs
@@ -0,0 +1,25 @@
+% arrsy.fs
+% Anders G S Svensson
+
+% $Date: 1996/02/09 07:56:23 $
+% $Revision: 1.5 $
+
+% Created: Mon Feb 5 01:27:03 1996
+% Time-stamp: <1996/02/08 23:56:01 PST agss@klagshamn>
+
+\input arrsy
+
+\DeclareFont{arrsy}{10}
+
+\DeclareMathFamily{arrsy}{arrsy}
+
+\@famdef@{arrsy}{\arrfam}
+\@fnlet@{arrsy}{10}\A@tenarr
+\@fnlet@{arrsy}{7}\A@sevenarr
+\@fnlet@{arrsy}{5}\A@fivearr
+
+\selectmathfonts{arrsy}
+
+% Local Variables:
+% mode:TeX
+% End:
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/bbm.fs b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/bbm.fs
new file mode 100644
index 0000000000..83ea1629b8
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/bbm.fs
@@ -0,0 +1,49 @@
+% bbm.fs
+% Anders G S Svensson
+
+% $Date: 1996/02/07 01:20:11 $
+% $Revision: 1.7 $
+
+% Created: Mon Feb 5 00:54:19 1996
+% Time-stamp: <1996/02/06 17:15:44 PST agss@klagshamn>
+
+\DeclareFont{bbmbxsl}{10}% bold extended slanted
+\DeclareFont{bbmbx}{5-10,12}% bold extended
+\DeclareFont{bbmb}{10}% bold
+\DeclareFont{bbmdunh}{10}% bold dunhill
+\DeclareFont{bbmfib}{8}% bold fibonacci
+\DeclareFont{bbmsltt}{10}% slanted typewriter
+\DeclareFont{bbmsl}{8-10,12}% slanted
+\DeclareFont{bbmssbx}{10}% sans serif bold extended
+\DeclareFont{bbmssdc}{10}% sans serif demibold condensed
+\DeclareFont{bbmssi}{8-10,12,17}% slanted sans serif
+\DeclareFont{bbmssq}{8}% sans serif quotation style
+\DeclareFont{bbmssqi}{8}% slanted sans serif quotation style
+\DeclareFont{bbmss}{8-10,12,17}% sans serif
+\DeclareFont{bbmtt}{8-10,12,17}% typewriter
+\DeclareFont{bbmvtt}{10}% variable width typewriter
+\DeclareFont{bbm}{5-10,12,17}% roman
+
+\DeclareShapeMap{sf}{bbm}{bbmss}
+\DeclareShapeMap{sf}{bbmsl}{bbmssi}
+\DeclareShapeMap{sl}{bbm}{bbmsl}
+\DeclareShapeMap{sl}{bbmbx}{bbmbxsl}
+\DeclareShapeMap{sl}{bbmss}{bbmssi}
+\DeclareShapeMap{sl}{bbmtt}{bbmsltt}
+\DeclareShapeMap{tt}{bbm}{bbmtt}
+\DeclareShapeMap{tt}{bbmsl}{bbmsltt}
+
+\DeclareWeightMap{bf}{bbm}{bbmbx}
+\DeclareWeightMap{bf}{bbmsl}{bbmbxsl}
+\DeclareWeightMap{bf}{bbmss}{bbmssbx}
+
+\def\bbmfont{bbmsl}
+\DeclareMathFamily{bbm}\bbmfont
+
+\def\bbm{\SelectMathFamily{bbm}\SelectTextFont\bbmfont}
+
+\selectmathfonts{bbm}
+
+% Local Variables:
+% mode:TeX
+% End:
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/bbold.fs b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/bbold.fs
new file mode 100644
index 0000000000..b46159788c
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/bbold.fs
@@ -0,0 +1,20 @@
+% bbold.fs
+% Anders G S Svensson
+
+% Created: Tue May 14 03:10:19 1996
+% Time-stamp: <1996/05/14 10:15:18 PDT agss@klagshamn>
+
+% $Date: 1996/05/14 17:16:26 $
+% $Revision: 1.1 $
+
+\DeclareFont{bbold}{5-10,12,17}
+
+\DeclareMathFamily{bbold}{bbold}
+
+\def\bb{\SelectMathFamily{bbold}\SelectTextFont{bbold}}
+
+\selectmathfonts{bbold}
+
+% Local Variables:
+% mode:TeX
+% End:
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/cm.fs b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/cm.fs
new file mode 100644
index 0000000000..cc8b14c39b
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/cm.fs
@@ -0,0 +1,108 @@
+% cm.fs
+% Anders G S Svensson
+
+% $Date: 1996/02/08 23:21:40 $
+% $Revision: 1.10 $
+
+% Created: Sun Feb 4 16:13:25 1996
+% Time-stamp: <1996/02/08 15:20:08 PST agss@klagshamn>
+
+\DeclareFont{cmbsy}{10}% bold symbols
+\DeclareFont{cmbxsl}{10}% bold extended slanted
+\DeclareFont{cmbxti}{10}% bold extended text italic
+\DeclareFont{cmbx}{5-10,12}% bold extended
+\DeclareFont{cmb}{10}% bold
+\DeclareFont{cmcsc}{10}% small caps
+\DeclareFont{cmdunh}{10}% dunhill
+\DeclareFont{cmex}{9,10}% extended
+\DeclareFont{cmfib}{8}% fibonacci
+\DeclareFont{cmitt}{10}% italic typewriter
+\DeclareFont{cmmib}{10}% math italic bold
+\DeclareFont{cmmi}{5-10,12}% math italic
+\DeclareFont{cmr}{5-10,12,17}% roman
+\DeclareFont{cmsltt}{10}% slanted typewriter
+\DeclareFont{cmsl}{8-10,12}% slanted
+\DeclareFont{cmssbx}{10}% sans serif bold extended
+\DeclareFont{cmssdc}{10}% sans serif demibold condensed
+\DeclareFont{cmssi}{8-10,12,17}% slanted sans serif
+\DeclareFont{cmssqi}{8}% slanted sans serif quotation style
+\DeclareFont{cmssq}{8}% sans serif quotation style
+\DeclareFont{cmss}{8-10,12,17}% sans serif
+\DeclareFont{cmsy}{5-10}% symbol
+\DeclareFont{cmtcsc}{10}% typewriter small caps
+\DeclareFont{cmtex}{8-10}% typewriter extended
+\DeclareFont{cmti}{7-10,12}% text italic
+\DeclareFont{cmtt}{8-10,12}% typewriter
+\DeclareFont{cmu}{10}% unslanted italic
+\DeclareFont{cmvtt}{10}% variable width typewriter
+
+\DeclareShapeMap{it}{cmr}{cmti}
+\DeclareShapeMap{sl}{cmr}{cmsl}
+\DeclareShapeMap{sf}{cmr}{cmss}
+\DeclareShapeMap{tt}{cmr}{cmtt}
+\DeclareShapeMap{sc}{cmr}{cmcsc}
+\DeclareShapeMap{sl}{cmss}{cmssi}
+\DeclareShapeMap{it}{cmti}{cmr}
+\DeclareShapeMap{it}{cmtt}{cmitt}
+\DeclareShapeMap{sl}{cmtt}{cmsltt}
+\DeclareShapeMap{sc}{cmtt}{cmtcsc}
+
+\DeclareWeightMap{bf}{cmsy}{cmbsy}
+\DeclareWeightMap{bf}{cmsl}{cmbxsl}
+\DeclareWeightMap{bf}{cmti}{cmbxti}
+\DeclareWeightMap{bf}{cmr}{cmbx}
+\DeclareWeightMap{bf}{cmmi}{cmmib}
+\DeclareWeightMap{bf}{cmss}{cmssbx}
+
+\DeclareMathFamily{rm}{cmr} \@famdef@{rm}{0}
+\DeclareMathFamily{mit}{cmmi} \@famdef@{mit}{1}
+\DeclareMathFamily{sy}{cmsy} \@famdef@{sy}{2}
+\DeclareMathFamily{ex}{cmex} \@famdef@{ex}{3}
+\DeclareMathFamily{it}{cmti} \@famdef@{it}{4}
+\DeclareMathFamily{sl}{cmsl} \@famdef@{sl}{5}
+\DeclareMathFamily{bf}{cmbx} \@famdef@{bf}{6}
+\DeclareMathFamily{tt}{cmtt} \@famdef@{tt}{7}
+
+\@fnlet@{cmr}{10}\tenrm
+\@fnlet@{cmr}{7}\sevenrm
+\@fnlet@{cmr}{5}\fiverm
+\@fnlet@{cmmi}{10}\teni
+\@fnlet@{cmmi}{7}\seveni
+\@fnlet@{cmmi}{5}\fivei
+\@fnlet@{cmsy}{10}\tensy
+\@fnlet@{cmsy}{7}\sevensy
+\@fnlet@{cmsy}{5}\fivesy
+\@fnlet@{cmex}{10}\tenex
+\@fnlet@{cmbx}{10}\tenbf
+\@fnlet@{cmbx}{7}\sevenbf
+\@fnlet@{cmbx}{5}\fivebf
+\@fnlet@{cmtt}{10}\tentt
+\@fnlet@{cmsl}{10}\tensl
+\@fnlet@{cmti}{10}\tenit
+
+\def\rm{\SelectMathFamily{rm}\fontshape{up}}
+\def\it{\SelectMathFamily{it}\fontshape{it}}
+\def\sl{\SelectMathFamily{sl}\fontshape{sl}}
+\def\tt{\SelectMathFamily{tt}\fontshape{tt}}
+
+\def\sc{\fontshape{sc}}
+\def\sf{\fontshape{sf}}
+
+\def\mit{\SelectMathFamily{mit}}
+\def\oldstyle{\mit\SelectTextFont{cmmi}}
+\def\cal{\SelectMathFamily{sy}}
+
+\def\md{\SelectMathFamily{rm}\fontweight{md}}
+\def\bf{\SelectMathFamily{bf}\fontweight{bf}}
+\def\mdseries{\fontweight{md}\selectmathfonts*}
+\def\bfseries{\fontweight{bf}\selectmathfonts*}
+
+\FontName{cmr}
+\FontSize{10}
+\FontShape{up}
+\FontWeight{md}
+\selectmathfonts* \currentfont
+
+% Local Variables:
+% mode:TeX
+% End:
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/rsfs.fs b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/rsfs.fs
new file mode 100644
index 0000000000..a3c472b214
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/fs/rsfs.fs
@@ -0,0 +1,20 @@
+% rsfs.fs
+% Anders G S Svensson
+
+% $Date: 1996/02/06 23:48:54 $
+% $Revision: 1.5 $
+
+% Created: Mon Feb 5 01:23:54 1996
+% Time-stamp: <1996/02/06 15:35:40 PST agss@klagshamn>
+
+\DeclareFont{rsfs}{5,7,10}
+
+\DeclareMathFamily{rsfs}{rsfs}
+
+\def\scr{\SelectMathFamily{rsfs}\SelectTextFont{rsfs}}
+
+\selectmathfonts{rsfs}
+
+% Local Variables:
+% mode:TeX
+% End:
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/sfss.cd b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/sfss.cd
new file mode 100644
index 0000000000..0bf1b218a8
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/sfss.cd
@@ -0,0 +1,206 @@
+% sfss.cd
+% Anders G S Svensson
+
+% Source: sfss.nw
+% $Revision: 1.21 $
+% $Date: 1996/06/08 00:33:27 $
+
+\def\@fnlet@#1#2{\@let@{fn@#1@#2}}
+\def\@famdef@#1{\@def@{fam@#1}}
+\def\usefs{\bgroup\@ignorespaces@\f@usefs}
+\def\f@usefs#1{\egroup
+ \f@pickfs#1,@}
+\def\f@pickfs#1,#2@{%
+ \@ifundefined@{fs@#1}%
+ {\f@loadfs{#1}}%
+ {}%
+ \@ifempty@{#2}%
+ {}%
+ {\f@pickfs#2@}}
+\def\f@loadfs#1{%
+ \IfFileExists{#1.fs}%
+ {\@let@{fs@#1}\@empty@
+ \edef\@action@{\noexpand\@makeatletter@
+ \noexpand\input #1.fs\relax
+ \noexpand\@restoreat@{\the\catcode`\@}}\@action@}%
+ {\@Warning@{No font selection file: #1.fs}}}
+
+\def\DeclareFont#1{\bgroup\@ignorespaces@\f@DeclareFont{#1}}
+
+\def\f@DeclareFont#1#2{\egroup
+ \let\f@size\@empty@
+ \f@ExpandSizes #2,@%
+ \@edef@{font@#1}{\f@size}}
+
+\def\f@ExpandSizes#1,#2@{%
+ \@ifempty@{#1}%
+ {}%
+ {\f@ExpandRange#1-@\@ifempty@{#2}{}{\f@ExpandSizes#2@}}}
+
+\def\f@ExpandRange#1-#2@{%
+ \@ifempty@{#2}{\edef\f@size{\f@size{#1}}}{\f@SizeRange#1-#2}}
+
+\def\f@SizeRange#1-#2-{\relax
+ \ifnum#1>#2
+ \let\@action@\relax
+ \else
+ \edef\f@size{\f@size{#1}}%
+ \@c@=#1 \advance\@c@ by 1
+ \def\@action@{\expandafter\f@SizeRange\the\@c@-#2-}%
+ \fi
+ \@action@}
+
+\def\DeclareMathFamily#1#2{%
+ \edef\f@families{\f@families{#1}}%
+ \@ifundefined@{family@#1}{\@gdef@{family@#1}{#2}}{}}
+\def\f@families{}
+\def\DeclareShapeMap#1#2#3{\@def@{shape@#2@#1}{#3}}
+\def\DeclareWeightMap#1#2#3{\@def@{weight@#2@#1}{#3}}
+
+\def\FontName{\def\f@currentfont}
+\def\FontShape{\def\f@currentshape}
+\def\FontWeight{\def\f@currentweight}
+
+\let\f@font\font
+\def\fontname#1{\FontName{#1}\currentfont}
+\def\fontshape#1{\FontShape{#1}\currentfont}
+\def\fontweight#1{\FontWeight{#1}\currentfont}
+\def\SelectTextFont{\f@selecttextfont}
+\def\currentfont{\SelectTextFont\f@currentfont}
+
+\def\SelectMathFamily{\f@selectmathfamily}
+\def\f@selecttextfont#1{%
+ \f@loadfont{#1}\f@currentsize\f@currentshape\f@currentweight
+ {\@cs@{fn@\f@name @\f@size}}}
+\def\f@loadfont#1#2#3#4#5{%
+ \edef\f@name{#1}%
+ \edef\f@size{#2}%
+ \def\f@shape{#3}%
+ \def\f@weight{#4}%
+ \def\f@sizespec{ at #2pt}%
+ \@ifundefined@{shape@\f@name @#3}%
+ {}%
+ {\edef\f@name{\@cs@{shape@\f@name @#3}}}%
+ \@ifundefined@{weight@\f@name @#4}%
+ {}%
+ {\edef\f@name{\@cs@{weight@\f@name @#4}}}%
+ \@ifundefined@{font@\f@name}%
+ {\@Warning@{Font \f@name\@space@ not declared.}}%
+ {\@ifundefined@{fn@\f@name @\f@size}{\f@load}{}#5}}
+\def\f@loadmathfont#1#2#3#4#5{%
+ \edef\f@name{#1}%
+ \edef\f@size{#2}%
+ \def\f@shape{#3}%
+ \def\f@weight{#4}%
+ \def\f@sizespec{ at #2pt}%
+ \@ifundefined@{weight@\f@name @#4}%
+ {}%
+ {\edef\f@name{\@cs@{weight@\f@name @#4}}}%
+ \@ifundefined@{font@\f@name}%
+ {\@Warning@{Font \f@name\@space@ not declared.}}%
+ {\@ifundefined@{fn@\f@name @\f@size}{\f@load}{}#5}}
+\def\f@load{%
+ \expandafter\expandafter\expandafter
+ \f@lookup\csname font@\f@name\endcsname{}%
+ \global\@csafter@\f@font{fn@\f@name @\f@size}=\f@name\f@sizespec\relax}
+
+\def\f@lookup#1{%
+ \@ifempty@{#1}%
+ {\let\@action@\relax}%
+ {\def\f@sizespec{#1 at \f@size pt}%
+ \let\@action@\@gobble@
+ \ifdim#1\p@>\f@size\p@\relax
+ \else
+ \ifdim#1\p@=\f@size\p@\relax
+ \let\f@sizespec\f@size
+ \else
+ \let\@action@\f@lookup
+ \fi
+ \fi
+ \@action@}}
+\def\f@selectmathfamily#1{%
+ \@ifundefined@{family@#1}%
+ {\@Warning@{Math family #1 not declared.}}%
+ {\f@loadfamily{#1}\f@currentsize\f@currentshape\f@currentweight
+ \@csafter@\fam{fam@#1}\relax}}
+
+\def\f@loadfamily#1#2#3#4{%
+ \@ifundefined@{fam@#1}%
+ {\@csafter@\f@newfamily{fam@#1}}%
+ {}%
+ \f@loadmathfont{\@cs@{family@#1}}{\@cs@{textsize@#2}}{#3}{#4}%
+ {\@csafter@\textfont{fam@#1}=\@cs@{fn@\f@name @\f@size}}%
+ \f@loadmathfont{\@cs@{family@#1}}{\@cs@{scriptsize@#2}}{#3}{#4}%
+ {\@csafter@\scriptfont{fam@#1}=\@cs@{fn@\f@name @\f@size}}%
+ \f@loadmathfont{\@cs@{family@#1}}{\@cs@{scriptscriptsize@#2}}{#3}{#4}%
+ {\@csafter@\scriptscriptfont{fam@#1}=\@cs@{fn@\f@name @\f@size}}}
+
+\let\f@newfam\newfam
+\edef\f@newfamily{\noexpand\f@newfam}
+\def\FontSize#1{%
+ \@ifnextchar@\bgroup
+ {\f@FontSize{#1}}%
+ {\f@FontSizeNoBaselineskip{#1}}}
+
+\newskip\f@baselineskip
+
+\def\f@FontSize#1#2{%
+ \def\f@currentsize{#1}%
+ \f@baselineskip=#2\p@
+ \f@MathSize}
+
+\def\f@FontSizeNoBaselineskip#1{%
+ \def\f@currentsize{#1}%
+ \f@baselineskip=#1\p@
+ \f@baselineskip=\f@openbaselines\f@baselineskip
+ \f@MathSize}
+
+\def\f@MathSize{%
+ \baselineskip=\f@baselinestretch\f@baselineskip
+ \@ifundefined@{textsize@\f@currentsize}%
+ {\@xdef@{textsize@\f@currentsize}{\f@currentsize}}%
+ {}%
+ \@ifundefined@{scriptsize@\f@currentsize}%
+ {\@xdef@{scriptsize@\f@currentsize}{\f@currentsize}}%
+ {}%
+ \@ifundefined@{scriptscriptsize@\f@currentsize}%
+ {\@xdef@{scriptscriptsize@\f@currentsize}{\f@currentsize}}%
+ {}}
+
+\def\fontsize#1{%
+ \@ifnextchar@\bgroup
+ {\f@fontsize{#1}}%
+ {\f@fontsizenobaselineskip{#1}}}
+
+\def\f@fontsize#1#2{%
+ \f@FontSize{#1}{#2}\selectmathfonts*\currentfont}
+
+\def\f@fontsizenobaselineskip#1{%
+ \f@FontSizeNoBaselineskip{#1}\selectmathfonts*\currentfont}
+
+\def\selectmathfonts{%
+ \@ifnextchar@*%
+ {\expandafter\f@SelectMathFonts\f@families{}\@eat@}%
+ \f@selectmathfonts}
+
+\def\f@selectmathfonts#1{%
+ \f@loadfamily{#1}\f@currentsize\f@currentshape\f@currentweight}
+
+\def\baselinestretch#1{%
+ \def\f@baselinestretch{#1}%
+ \baselineskip=#1\f@baselineskip}
+\def\f@baselinestretch{1}
+\def\openbaselines{\def\f@openbaselines}
+\openbaselines{1.2}
+
+\def\f@SelectMathFonts#1{%
+ \@ifempty@{#1}%
+ {}%
+ {\f@selectmathfonts{#1}\f@SelectMathFonts}}
+
+\def\DeclareMathSizes#1#2#3#4{%
+ \@def@{textsize@#1}{#2}%
+ \@def@{scriptsize@#1}{#3}%
+ \@def@{scriptscriptsize@#1}{#4}}
+
+\input sfss.df
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/sfss.df b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/sfss.df
new file mode 100644
index 0000000000..bd99c28be5
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/sfss.df
@@ -0,0 +1,41 @@
+% sfss.df
+% Anders G S Svensson
+
+% $Date: 1996/02/09 08:15:35 $
+% $Revision: 1.6 $
+
+% Created: Mon Feb 5 01:03:33 1996
+% Time-stamp: <1996/02/09 00:15:19 PST agss@klagshamn>
+
+\DeclareMathSizes{5}{5}{5}{5}
+\DeclareMathSizes{6}{6}{5}{5}
+\DeclareMathSizes{7}{7}{5}{5}
+\DeclareMathSizes{8}{8}{6}{5}
+\DeclareMathSizes{9}{9}{6.5}{5}
+\DeclareMathSizes{10}{10}{7}{5}
+\DeclareMathSizes{11}{11}{7.7}{5.5}
+\DeclareMathSizes{12}{12}{8.4}{6}
+\DeclareMathSizes{13}{13}{9.1}{6.5}
+\DeclareMathSizes{14}{14}{9.8}{7}
+\DeclareMathSizes{15}{15}{10.5}{7.5}
+\DeclareMathSizes{16}{16}{11.2}{8}
+\DeclareMathSizes{17}{17}{11.9}{8.5}
+\DeclareMathSizes{18}{18}{12.6}{9}
+\DeclareMathSizes{19}{19}{13.3}{9.5}
+\DeclareMathSizes{20}{20}{14}{10}
+\DeclareMathSizes{21}{21}{14.7}{10.5}
+\DeclareMathSizes{22}{22}{15.4}{11}
+\DeclareMathSizes{23}{23}{16.1}{11.5}
+\DeclareMathSizes{24}{24}{16.8}{12}
+\DeclareMathSizes{25}{25}{17.5}{12.5}
+\DeclareMathSizes{26}{26}{18.2}{13}
+\DeclareMathSizes{27}{27}{18.9}{13.5}
+\DeclareMathSizes{28}{28}{19.6}{14}
+\DeclareMathSizes{29}{29}{20.3}{14.5}
+\DeclareMathSizes{30}{30}{21}{15}
+
+\input sfss.fs
+
+% Local Variables:
+% mode:TeX
+% End:
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/sfss.fs b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/sfss.fs
new file mode 120000
index 0000000000..d04e245335
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/carrot/sfss/sfss.fs
@@ -0,0 +1 @@
+fs/cm.fs \ No newline at end of file
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/misc/calc.tex b/macros/generic/diagrams/kuvio/doc-src/macros/misc/calc.tex
new file mode 100644
index 0000000000..65ea4d1999
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/misc/calc.tex
@@ -0,0 +1,70 @@
+% calc.tex
+% Anders G S Svensson
+% $Date: 1994/08/18 00:55:29 $
+% $Revision: 1.0 $
+
+\chardef\CalccodE=\catcode`\@
+\catcode`\@=11
+
+% Get superscript height right. Plain has
+%
+% \def\sin{\mathop{\rm sin}\nolimits}
+%
+% etc, but \sin^2 x and \cos^2 x should have the superscript at the same
+% height.
+%
+\def\sin{\mathop{\smash{\rm sin}}\nolimits}
+\def\cos{\mathop{\smash{\rm cos}}\nolimits}
+\def\tan{\mathop{\smash{\rm tan}}\nolimits}
+\def\csc{\mathop{\smash{\rm csc}}\nolimits}
+\def\sec{\mathop{\smash{\rm sec}}\nolimits}
+\def\cot{\mathop{\smash{\rm cot}}\nolimits}
+\def\invsin{\sin^{-1}} \def\arcsin{\mathop{\smash{\rm arcsin}}\nolimits}
+\def\invcos{\cos^{-1}} \def\arccos{\mathop{\smash{\rm arccos}}\nolimits}
+\def\invtan{\tan^{-1}} \def\arctan{\mathop{\smash{\rm arctan}}\nolimits}
+\def\invcsc{\csc^{-1}} \def\arccsc{\mathop{\smash{\rm arccsc}}\nolimits}
+\def\invsec{\sec^{-1}} \def\arcsec{\mathop{\smash{\rm arcsec}}\nolimits}
+\def\invcot{\cot^{-1}} \def\arccot{\mathop{\smash{\rm arccot}}\nolimits}
+
+% First partials
+%
+\def\p#1\wrt#2{{\def\@@tmp{#1}\partial \ifx\@@tmp\empty \else #1\fi
+ \over \partial #2}}
+\let\fp\p % "partial wrt"
+%
+% Second partials
+% \sp is for superscripts!
+%
+\def\spar#1\wrt#2#3{{\def\@@tmp{#1}\partial^2 \ifx\@@tmp\empty \else \!#1 \fi
+ \over \partial #2 \partial #3}}
+\let\smp\spar % Second mixed partial
+\def\spp#1\wrt#2{{\def\@@tmp{#1}\partial^2 \ifx\@@tmp\empty \else \!#1 \fi
+ \over \partial #2^2}} % "2nd pure partial..."
+%
+% Ordinary first derivatives
+%
+\def\d#1\wrt#2{{\def\@@tmp{#1}d \ifx\@@tmp\empty \else #1 \fi
+ \over d #2}}
+\let\fd\d
+%
+% Ordinary second derivatives
+%
+\def\sd#1\wrt#2#3{{\def\@@tmp{#1}d^2 \ifx\@@tmp\empty \else \!#1 \fi
+ \over d #2 d #3}}
+\let\smd\sd
+\def\spd#1\wrt#2{{\def\@@tmp{#1}d^2 \ifx\@@tmp\empty \else \!#1 \fi
+ \over d #2^2}}
+
+\let\grad\nabla
+\let\implies\Longrightarrow
+
+% Unit vectors
+%
+\def\unit#1{\hat{#1}}
+\def\ui{\unit \imath}
+\def\uj{\unit \jmath}
+\def\uk{\unit k}
+\def\ue{\unit e} % \ue_1,...,\ue_n
+
+
+\catcode`\@=\CalccodE
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/misc/listing.tex b/macros/generic/diagrams/kuvio/doc-src/macros/misc/listing.tex
new file mode 100644
index 0000000000..9e99e4377a
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/misc/listing.tex
@@ -0,0 +1,67 @@
+% listing.tex
+% Anders G S Svensson
+% $Date: 1995/08/11 10:15:30 $
+% $Revision: 1.4 $
+
+\chardef\ListingcodE=\catcode`\_
+\catcode`\_=11
+
+\def\__bailout__{\message{again}\catcode`\_=\ListingcodE \endinput}
+
+\ifx\__agss_listing__\relax
+\else
+ \let\__agss_listing__\relax
+ \let\__bailout__\relax
+\fi
+
+\__bailout__
+
+%%%%%%%%%%
+
+\newcount\listinglineno \listinglineno=0
+\newdimen\listingindent \listingindent=30pt
+\newdimen\listingskip \listingskip=12pt
+\newread\_listingfile
+
+\font\ninett=cmtt9
+
+\def\_listing#1{%
+ \ifeof\_listingfile
+ \immediate\closein\_listingfile
+ \def\_next{\egroup\csname end#1\endcsname}%
+ \else
+ \def\_next{%
+ \def\_action{\expandafter\expandafter
+ \csname #1line\endcsname\_tmp}%
+ \expandafter\_action\csname #1endline\endcsname
+ \immediate\read\_listingfile to \_tmp
+ \_listing{#1}}%
+ \fi
+ \_next}
+
+\def\newlisting#1{%
+ \expandafter\def\csname #1\endcsname##1{\bgroup
+ \def\do####1{\catcode`####1=12}\dospecials
+ \frenchspacing
+ \immediate\openin\_listingfile=##1
+ \vbadness10000\csname #1tt\endcsname\csname every#1\endcsname
+ \ifeof\_listingfile \else \immediate\read\_listingfile to \_tmp \fi
+ \_listing{#1}}%
+ \expandafter\def\csname every#1\endcsname{\par
+ \parindent=\listingindent\leavevmode\parskip=0pt
+ \baselineskip=\listingskip\listingspaces}
+ \expandafter\let\csname #1line\endcsname\leavevmode
+ \expandafter\let\csname #1endline\endcsname\par
+ \expandafter\let\csname end#1\endcsname\par
+ \expandafter\let\csname #1tt\endcsname\ninett}
+
+\let\listingspaces\obeyspaces
+
+\newlisting{listing}
+\def\listingline{\leavevmode\linemarker}
+
+\def\linemarker{\advance\listinglineno by 1
+ \llap{\hbox to 15pt{\hbox to 0pt{\hss\sevenrm\the\listinglineno}\hfil}}}
+\def\nolinenumbers{\let\linemarker\relax}
+
+\catcode`\_=\ListingcodE
diff --git a/macros/generic/diagrams/kuvio/doc-src/macros/misc/verbatim.tex b/macros/generic/diagrams/kuvio/doc-src/macros/misc/verbatim.tex
new file mode 100644
index 0000000000..abe0bde366
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/macros/misc/verbatim.tex
@@ -0,0 +1,96 @@
+% verbatim.tex
+% Anders G S Svensson
+% $Date: 1995/08/07 09:39:00 $
+% $Revision: 1.4 $
+
+\chardef\VerbatimcodE=\catcode`\_
+\catcode`\_=11
+
+\def\__bailout__{\message{again}\catcode`\_=\VerbatimcodE \endinput}
+
+\ifx\__agss_verbatim__\relax
+\else
+ \let\__agss_verbatim__\relax
+ \let\__bailout__\relax
+\fi
+
+\__bailout__
+
+%%%%%%%%%%
+
+\newdimen\verbatimindent \verbatimindent=30pt
+\newdimen\verbatimskip \verbatimskip=12pt
+
+{\escapechar=-1
+ \xdef\_namedtestdef#1{\noexpand\expandafter\edef
+ \noexpand\csname _end#1verbatim\noexpand\endcsname{\string\\end#1}}
+}
+
+{\catcode`\^^M=12 \endlinechar=-1 %
+ \gdef\_verbeatim#1#2^^M{\csname _#1verbatim\endcsname}
+ \gdef\_namedsetup#1{%
+ \expandafter\def\csname _#1verbatim\endcsname##1^^M{\def\_found{##1}%
+ \expandafter\ifx\csname _end#1verbatim\endcsname\_found
+ \def\_next{\egroup\csname end#1\endcsname}%
+ \else
+ \def\_next{%
+ \def\_found{\csname #1line\endcsname ##1}%
+ \expandafter\_found\csname #1endline\endcsname
+ \csname _#1verbatim\endcsname}%
+ \fi
+ \_next}}
+}
+
+\def\newverbatim#1{%
+ \_namedtestdef{#1}%
+ \_namedsetup{#1}%
+ \expandafter\def\csname #1\endcsname{\bgroup
+ \def\do####1{\catcode`####1=12}\dospecials
+ \frenchspacing
+ \vbadness10000\csname #1tt\endcsname\csname every#1\endcsname
+ \endlinechar`\^^M \catcode`\^^M=12
+ \_verbeatim{#1}}%
+%
+% Default setup is for verbatim blocks.
+%
+ \expandafter\def\csname every#1\endcsname{\par
+ \parindent=\verbatimindent\leavevmode\parskip=0pt
+% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+% The order here is important. TeX skips vertically by \parskip just before
+% entering horizontal mode so \parskip=0pt\leavevmode won't work: We'll
+% skip by 0pt instead of whatever \parskip is outside the group. Similarly
+% \parindent has to be set before entering into horizontal mode.
+ \baselineskip=\verbatimskip\verbatimspaces}%
+ \expandafter\let\csname #1line\endcsname\leavevmode
+ \expandafter\let\csname #1endline\endcsname\par
+ \expandafter\let\csname end#1\endcsname\par
+ \expandafter\let\csname #1tt\endcsname\tt}
+
+\let\verbatimspaces\obeyspaces
+
+\newverbatim{verbatim}
+
+% Commented blocks.
+%
+\newverbatim{comment}
+\let\everycomment\relax
+\def\commentline#1\commentendline{}
+\let\endcomment\relax
+\let\commenttt\relax
+
+% Short verbatim selections delimited by \@ and @\.
+% Use @@ for a literal ampersand.
+
+\def\@{\leavevmode\bgroup\frenchspacing\_vb\vbtt\everyvb}
+\def\_vb{\def\do##1{\catcode`##1=12}\dospecials
+ \let\_endvb\endvb\def\endvb{\_endvb\egroup}\_vbactivate}
+
+{\catcode`\@=\active \gdef\_vbactivate{\catcode`\@=\active\let@\_vbtest}}
+{\catcode`\/=0 /catcode`\\=11
+ /gdef/_vbtest#1{/if/noexpand#1\/endvb/else/if/noexpand#1@@/else@#1/fi/fi}}
+
+\let\vbtt\tt
+\let\everyvb\obeyspaces
+\let\endvb\relax
+
+\catcode`\_=\VerbatimcodE
diff --git a/macros/generic/diagrams/kuvio/doc-src/revision_2.5.12 b/macros/generic/diagrams/kuvio/doc-src/revision_2.5.12
new file mode 100644
index 0000000000..fef96d0b5a
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/revision_2.5.12
@@ -0,0 +1 @@
+09 Jun 1996
diff --git a/macros/generic/diagrams/kuvio/doc-src/tdwk-A4.cd b/macros/generic/diagrams/kuvio/doc-src/tdwk-A4.cd
new file mode 120000
index 0000000000..dccc9bce30
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/tdwk-A4.cd
@@ -0,0 +1 @@
+tdwk.cd \ No newline at end of file
diff --git a/macros/generic/diagrams/kuvio/doc-src/tdwk-A4.tex b/macros/generic/diagrams/kuvio/doc-src/tdwk-A4.tex
new file mode 100644
index 0000000000..8d612f6fbe
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/tdwk-A4.tex
@@ -0,0 +1,5 @@
+% tdwk-A4.tex
+% Anders G S Svensson
+% 25 Aug 1995
+
+\input tdwk
diff --git a/macros/generic/diagrams/kuvio/doc-src/tdwk-e.tex b/macros/generic/diagrams/kuvio/doc-src/tdwk-e.tex
new file mode 100644
index 0000000000..98824624a9
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/tdwk-e.tex
@@ -0,0 +1,101 @@
+% tdwk-e.tex
+% Anders G S Svensson
+
+% Time-stamp: <1996/06/09 04:02:06 PDT agss@klagshamn>
+
+% $Revision: 1.9 $
+% $Date: 1996/06/09 11:28:47 $
+
+\section{Examples}
+The {\tt Dash}, {\tt Dashto} and {\tt Mono} cell types in some of
+these examples use the {\tt arrsy10} font: See \ref{Another Font:
+arrsy10} and \csq\arrsy\ in \ref{Summary}. Also, \csq\bb\ invokes the
+bbm family of fonts.
+\ifAAAA \bigskip \fi
+
+\listingindent=0pt
+
+\def\Grok#1{\listing{eg/#1}\newpage
+ \null\vfill\bgroup\compileto{tdwk/#1}\input eg/#1 \egroup}
+\def\grok#1{\listing{eg/#1}\bgroup
+ \compileto{tdwk/#1}\input eg/#1 \egroup}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\grok{eg06a}
+
+\vfill
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+{\bf G. Bredon}, \emph{Introduction to Compact Transformation Groups},
+page 75.
+\grok{eg04}
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\grok{eg13}
+
+\vfill
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\grok{eg15}
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+{\bf S. Mac Lane}, \emph{Categories for the Working Mathematician}, page 109.
+\grok{eg17}
+
+\vfill
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+{\bf S. Mac Lane}, \emph{Categories for the Working Mathematician}, page 117.
+\grok{eg16}
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+{\bf S. Mac Lane and I. Moerdijk}, \emph{Sheaves In Geometry and Logic},
+page 232.
+\grok{eg18}
+
+\vfill
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+{\bf K. S. Brown}, \emph{Cohomology of Groups}, page 280.
+\ifAAAA\grok{eg20A4}\else\grok{eg20}\fi
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+{\bf George W. Whitehead}, \emph{Elements of Homotopy Theory}, page 592.
+\Grok{eg03}
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+{\bf J. McCleary}, \emph{A User's to Spectral Sequences}, page 13.
+\ifAAAA\grok{eg02A4}\else\grok{eg02}\fi
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+{\bf J. McCleary}, \emph{A User's to Spectral Sequences}, page 346.
+\grok{eg19}
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+{\bf P. J. Hilton and U. Stammbach}, \emph{A Course in Homological Algebra},
+page 149.
+\grok{eg01b}
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+{\bf George W. Whitehead}, \emph{Elements of Homotopy Theory}, page 650.
+\grok{eg05}
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\grok{eg09}
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\grok{eg12}
+
+\vfill
+\grok{eg21}
+
+% Local Variables:
+% mode:TeX
+% agss-tex-jobname:"tdwk"
+% End:
diff --git a/macros/generic/diagrams/kuvio/doc-src/tdwk-r.tex b/macros/generic/diagrams/kuvio/doc-src/tdwk-r.tex
new file mode 100644
index 0000000000..ee8bd53831
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/tdwk-r.tex
@@ -0,0 +1 @@
+\def\doclevel{216}
diff --git a/macros/generic/diagrams/kuvio/doc-src/tdwk-s.tex b/macros/generic/diagrams/kuvio/doc-src/tdwk-s.tex
new file mode 100644
index 0000000000..3cc26ec793
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/tdwk-s.tex
@@ -0,0 +1,2123 @@
+% tdwk-s.tex
+% Anders G S Svensson
+
+% Time-stamp: <1996/06/09 03:30:06 PDT agss@klagshamn>
+
+% $Revision: 1.21 $
+% $Date: 1996/06/09 11:31:01 $
+
+\autocompileto{tdwk/tdwk-s}
+
+\Graphpad=5pt
+
+\def\entry{\leavevmode\vtop\bgroup
+ \openup3pt
+ \FontSize{13}\currentfont
+ \catcode`\^^M=\active\Entry}
+{\catcode`\^^M=\active
+ \gdef\Entry#1{\anotherline #1%
+ \let\relax\entrystrut\aftergroup\lastline^^M\egroup}
+ \gdef\anotherline#1^^M{\hbox to \hsize{#1\relax\hfil}\anotherline}
+}
+
+\ifAAAA
+\def\endentry{\vskip20pt\goodbreak}
+\else
+\def\endentry{\vskip15pt\goodbreak}
+\fi
+\def\entrystrut{\vphantom{\vrule width 0pt depth 8pt}}
+\def\lastline#1{}
+\def\mod{\par\leavevmode\modmarker}
+\def\modmarker{{\llap{$\bullet$\hskip.4in}}}
+
+\def\d{\hfill\tt}
+\def\hs{\hskip15mm}
+
+\def\harebra{\epsfxsize=3cm \rot1\epsffile{harebra.eps}\endrot}
+
+\def\int{\emph{integer}}
+\def\dim{\emph{dimen}}
+\def\text{\emph{text}}
+\def\math{\emph{math}}
+\def\{{{\escapechar=-1 \tt\string\{}}
+\def\}{{\escapechar=-1 \tt\string\}}}
+\def\:{{\escapechar=-1 \tt\string\:}}
+\def\*{{\escapechar=-1 \tt\string\*}}
+\def\|{{\escapechar=-1 \tt\string\|}}
+\def\({{\escapechar=-1 \tt\string\(}}
+\def\){{\escapechar=-1 \tt\string\)}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Summary}
+\label{Summary}
+
+Brief descriptions (plus some examples) of the available control
+sequences and modifiers, including several not mentioned thus far.
+Modifiers are indicated by a $\bullet$ in the left margin. Default or
+predefined values, where appropriate, are listed in the right margin.
+{\let\egroup\relax\endentry}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\sindex mc\^\sindex mc\_%
+ \sindex mc\<\sindex mc\>%
+ \ch\^\{\math\}\qquad \ch\_\{\math\}
+ \ch\<\{\math\}\qquad \ch\>\{\math\}}
+Place labels on an arrow in \csq\labelstyle.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\sindex mc\(\tt\(\int,\int\)}
+Specify coordinates to an \csq\a\type\ or \csq\b\type\ cell macro.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\sindex mc\(\tt\(\num,\num\)}
+Specify coordinates to a modification.
+Both \index mm{Box} and \index mm{Frame} modifications require two sets of
+coordinates while others can accept either one or two sets.
+
+\side
+\Graph{2cm,2}{1cm}
+\Txt{bitterness} (2,.5) *{1.1}
+\Txt{bereavement} (3,.5) (4,.5) :{1.1} *0
+\Box (2,0) (3,1) \Frame (3,1) (4,0)
+\endGraph
+\endside
+
+For modifications on a Figure or Graph,
+a coordinate may be given as a dimension.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\sindex mc\*\ch\*\{\num\}\d .5}
+Set the tag point of a modification.
+Has no effect on type 2 modification cells,
+\index tm{Box} modifications or \index tm{Frame} modifications.
+
+\side
+\Graph{1cm}{1cm}
+\To (1,.5) *0 \Line (1,.5) *{1.5}
+\Text{chaos} (1,.5) *{-2}
+\endGraph
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\sindex mc\/\ch\/\{\int\}\d 0}
+Rotate a modification by \int\ degrees counterclockwise.
+Has no effect on type 2 modification cells,
+\index tm{Box} modifications or \index tm{Frame} modifications.
+
+\side
+\Graph{3cm}{1cm}
+\Line (0,.5) /{90} \Line (1,.5) /{90}
+\Txt{losfer words} (.5,.5) /{180}
+\endGraph
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\sindex mw{"|@\BAR}\ch\|\{\dim\}}
+Set the length of a type 1 modification cell.
+See \csq\celllength.
+
+\side
+\Graph{2cm}{5mm}
+\To (.5,1) \Two (.5,0) |{2cm}
+\endGraph
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\sindex mc\:%
+ \:\{\num\}\d .5
+ \:\{\dim\}\d 0pt
+ \:\{\num\ch\,\dim\} or \:\{\dim\ch\,\num\}}
+Adjust the positioning of a label tied to an arrow, \num\ determining
+a point along the line joining the endpoints of the arrow and \dim\ a
+point on a line perpendicular to the arrow.
+
+\eg
+\Diagram A & \rTo ^f :{.75} & B & \rTo ^g :{.75,5pt} & C & \rTo ^h :{5pt} & D \\
+\endDiagram
+\endeg
+
+A semicolon can also be used as the argument separator.
+In fact, in this case we can replace the label pad \dim\ by a
+comma-separated pair of
+dimensions, the first moving a label parallel to the
+direction of an arrow and a second being a label pad. That is,
+the forms \:\{\dim\ch\,\dim\}, \:\{\num\ch\;\dim\ch\,\dim\}
+and \:\{\dim\ch\,\dim\ch\;\num\} are also legal.
+
+\eg
+\Diagram A & \rTo ^f :{-10pt,0pt} & B & \rTo ^g :{0;10pt,0pt} & C \\
+\endDiagram
+\endeg
+
+Label positioning with \ch\: applies to all labels placed on an arrow.
+For any individual label, this can be overridden by supplying a
+positioning specification to \index tc\^, \index tc\_,
+\index tc\<\ or \index tc\>,
+delimited by square braces.
+This may be useful for cell types whose arrows are composed of many pieces,
+although the same results can be obtained using null arrows (see \csq\nl).
+
+\side
+\newcell{Adj}
+\def\Adjbox#1{\vcenter{\offinterlineskip\dimen0=#1
+ \hbox to #1{\leftarrowfill\hskip.2\dimen0} \hbox to #1{\hskip.2\dimen0\rightarrowfill}}}
+\labelpad{Adj}=2.5pt
+
+\Diagram A & \rAdj ^[.6]{f_1} _[.4]{f_2} & B \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\sindex mc\:\ch\:\{\num\}\d .5}
+For \index tm{Label}, \index tm{Math}, \index tm{Text}, \index tm{Txt}
+and \index tm{Vertex} modifications, specify a coordinate as a fractional
+distance from one point to another.
+
+{\edge{.75}
+\side
+\Graph{15mm}{15mm}
+\Line (0,1) (1,0)
+\Text{X} (0,1) (1,0) :{.25} *0
+\Math\bullet (0,1) (1,0) :{.75}
+\endGraph
+\endside
+}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{al}}
+Move the column in which this control sequence occurs.
+Like \csq\dl\ except that, instead of also moving columns to
+the right of the given column, recursively moves those which are
+\sindex mw{binding}\emph{bound} to it.
+
+A column is bound to another in the following situations.
+
+{\parindent=30pt
+\item{(1)}If an arrow goes between two entries in columns $C_\ell <
+C_r$ and both columns are on or to the left of the
+gravitating column then $C_\ell$ is bound to $C_r$.
+\item{(2)}If two entries in the same row of columns $C_\ell < C_r$
+are adjacent (in the sense that these entries typeset material with
+non-zero dimensions and there are no other such entries in columns
+strictly between $C_\ell$ and $C_r$) and both columns are on or to the
+left of the \index tm{gravitating column} then $C_\ell$ is bound to
+$C_r$.
+\item{(3)}If an arrow goes between two entries in columns $C_\ell <
+C_r$ and both columns are on or to the right of the gravitating column
+then $C_r$ is bound to $C_\ell$.
+\item{(4)}If two entries in the same row of columns $C_\ell < C_r$
+are adjacent and both columns are on or to the right of the
+gravitating column then $C_r$ is bound to $C_\ell$.
+\par}
+
+The control sequence \index tm{displaybindings} causes a message of
+the form {\tt (B:$C$-$C'$)} to be displayed whenever column $C'$ is
+bound to column $C$.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{ar}}
+Move the column in which this control sequence occurs.
+Like \csq\dr\ except that, instead of also moving columns to
+the left of the given column, recursively moves those which are
+bound to it. See \csq\al.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{arrsy}}
+Load the font {\tt \index tw{arrsy10}} and define several control sequences
+and cell types using this font. Of course, the font has to have been installed
+on your system for this to work.
+
+\verbatim
+\input kuvio \arrsy % plain TeX \usepackage[arrsy]{kuvio} % LaTeX
+\endverbatim
+\hskip\egindent{\verbatimit blah, blah, blah...}
+\endentry
+\sindex tw{LaTeX@\LaTeX}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{atpush}%
+ \csq{\atpush=}\dim\d 3pt
+ \csq{\atpush+=}\dim
+ \csq{\atpush\{\type\}=}\dim\hs\csq{\atpush\{\type\}+=}\dim}
+Global and type-specific amounts by which the end of an arrow attached
+to another arrow (using \csq\pt) is shortened whenever a vertex has not been
+attached using \csq\hd\ or \csq\tl.
+The type-specific quantity applies to ends attached to an arrow of
+cell type \type. Spaces in \type\ are ignored.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{autocompile}}
+Abbreviation for \@\autocompileto{.\jobname}@\.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{autocompilecounter}}
+Count register used with \index tm{autocompileto}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{autocompileto}\{\name\}}
+Cause all diagrams to be compiled unless otherwise specified using
+\index tm{nocompile}. The files \name\@-\the\@\{\tt auto\-compilecounter.kdg}
+and \name\@-\the\@\{\tt autocompilecounter.kuv} are either written or read,
+the count register \index tm{autocompilecounter} being incremented with each
+diagram being compiled. Spaced in \name\ are ignored.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{ax}\{\dim\}}
+Move the column in which this control sequence occurs rightward by \dim.
+Like \csq\dx\ except that, instead of also moving columns to
+the right of the given column, recursively moves those which are
+bound to it. See \csq\al.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{base}}
+Make the baseline of a Diagram coincide with that of a row in its alignment.
+Takes precedence over any baseline specification given outside the alignment
+(using \index tm{tall}, \index tm{deep}, etc).
+
+{\edge{.7}
+\side
+\newDiagram{Ydiag}
+\def\everyYdiag{\flexible \xgrid=0pt \ygrid=4pt \joined \columndist=9pt}
+
+\def\Y#1#2#3{%
+ \Ydiag
+ & & #2 \\
+ \\ \\
+ & \rdLine & & \ldLine & \\
+ & \base & \stop\my{2pt} \\
+ & #1 & \qquad\dLine & #3 \\
+ \\
+ \endYdiag}
+
+Thus, $\Y\alpha\beta\gamma = \Y\delta\epsilon\zeta$.
+\endside
+}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{black}}
+Typeset an arrow or modification with graylevel 0.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mp{black}\endblack}
+Typeset the enclosed material with graylevel 0.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{Box}}
+Typeset a box as a modification. The coordinates of two
+diagonally opposite corners must be specified.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{Boxcell}\{\emph{box} \emph{macro}\}}
+Typeset an arrow as a modification without naming a cell type.
+Possibly the most useless control sequence of the lot!
+Has ten equally useless siblings for use in the alignment part
+of a Diagram: \csq\aBoxcell, \csq\bBoxcell, \csq\rBoxcell,
+\csq\rdBoxcell, \csq\dBoxcell, \csq\ldBoxcell, \csq\lBoxcell,
+\csq\luBoxcell, \csq\uBoxcell\ and \csq\ruBoxcell.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{bpad}%
+ \csq{\bpad=}\dim\d 0pt
+ \csq{\bpad+=}\dim}
+Padding added to the bottom of a diagram or framed material.
+Does not alter the baseline.
+
+\side
+\framed \bpad=10pt
+\Diagram
+A & \rTo & B \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{br}%
+ \csq\br\{\dim\}}
+Typeset an arrow on top of a white rule.
+
+\side
+\Graph{3cm,3}{12mm,2}
+\To (1,2) (1,0)
+\Line (0,2) (3,0) \br \Two (2,0) (2,2) \br
+\endGraph
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{braced}}
+With flexible grids, make all diagonal arrows fully braced by default and
+invert the action of \index tm{db}: An arrow will be unbraced when \csq\db\ is
+specified.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{bracewidth}%
+ \csq{\bracewidth=}\dim\d 1cm
+ \csq{\bracewidth+=}\dim}
+With flexible grids, width of the
+\emph{brace} used with braced diagonal arrows.
+
+\side
+\braced
+\Dg
+A \\ & \rdTo \\ B & & X \\
+\endDg
+\qquad\bracewidth+=1cm
+\Dg
+A \\ & \rdTo \\ B & & X \\
+\endDg
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{breakpad}%
+ \csq{\breakpad=}\dim\d 2.5pt
+ \csq{\breakpad+=}\dim
+ \csq{\breakpad\{\type\}=}\dim\hs\csq{\breakpad\{\type\}+=}\dim}
+Global and type-specific pads to determine the rule width used
+with \index tm{br} and \index tm{rl}. Spaces in \type\ are ignored.
+
+\side
+\breakpad{One}=5pt \yscale=.75
+\Diagram
+\\ & \dTo \br & \rTo \pp \dOne \br & \\ \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{celllength}%
+ \csq{\celllength=}\dim\d 1cm
+ \csq{\celllength+=}\dim}
+Default length of a type 1.
+\sindex tw{modification cell!type 1}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{cellpush}%
+ \csq{\cellpush=}\dim\d 2pt
+ \csq{\cellpush+=}\dim
+ \csq{\cellpush\{\type\}=}\dim\hs\csq{\cellpush\{\type\}+=}\dim}
+Global and type-specific cell pushes. Spaces in \type\ are ignored.
+
+\side
+\cellpush=-10pt
+\Graph{2cm}{5mm,2}
+\Line (0,2) (1,2) \tl{\bullet} \hd{}
+\Line (0,0) (1,0) \hd{\bullet}
+\endGraph
+\endside
+
+Note the use of \index tm{tl} and \index tm{hd} in this example.
+Cell pushes are applied to a modification cell only when a vertex is attached
+using one of these two.\sindex tw{modification cell!applying cell pushes}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{cellwidth}%
+ \csq{\cellwidth=}\dim\d 1cm
+ \csq{\cellwidth+=}\dim}
+With flexible grids, the minimum distance between vertices at the ends of
+horizontal alignment cells.\sindex tw{alignment cell!length}
+
+{\edge{.5}
+\side
+\Dg A & \rTo & B & {} = C \\ \endDg
+\qquad\cellwidth+=1cm
+\Dg A & \rTo & B & {} = C \\ \endDg
+\endside
+}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{center} or \index mm{centre}}
+Center diagrams on the math axis. With the exception of Diagrams
+consisting of a single row, this is the default in math modes.
+\endentry
+\pagedef{center def}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{centermath} or \index mm{centremath}}
+Center diagrams in math modes only. This is the default behaviour.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{columndist}%
+ \csq{\columndist=}\dim\d 15mm
+ \csq{\columndist+=}\dim}
+With flexible grids, the minimum distance between the centers of columns at
+either end of an unbraced diagonal arrow.
+\sindex tw{grid!flexible}
+
+\side
+\Dg
+A \\ & \rdTo \\ B & & X \\
+\endDg
+\qquad\columndist+=1cm
+\Dg
+A \\ & \rdTo \\ B & & X \\
+\endDg
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{compileto}\{\name\}}
+Compile a diagram to, or read a diagram from, the files \name{\tt .kdg} and
+\name{\tt .kuv}. Spaces in \name\ are ignored.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{db}}
+Make a diagonal arrow fully braced unless \index tm{braced} has been
+specified, in which case the arrow is made unbraced.
+\sindex tw{arrows!braced}
+
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{deep}}
+Make the baseline of a \sindex tw{Diagram!baseline}Diagram coincide
+with that of its topmost row and the baseline of a \sindex
+tw{Figure!baseline}Figure or \sindex tw{Graph!baseline}Graph coincide
+with that of its upper edge. This is the default for Diagrams in
+non-math modes.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mw{Dg@{\tt Dg}}\tt Dg}
+Diagram type having \index tm{flexible}, \index tm{xgrid}{\tt =0pt},
+\index tm{ygrid}{\tt +=-2mm}, \index tm{cellwidth}{\tt +=3mm} and
+\index tm{bracewidth}{\tt +=-2.5mm}.
+
+\eg
+\Dg
+\eta_k:\qquad & {\bb R} & \rInto & X_k & {} =
+ \{\,(A,\vect v)\in W_k\times{\bb R}^n \mid A\vect v = \lambda_k\vect v\,\} \\
+ & & & \dTo \\ % \vect is from arrsy10
+ & & & W_k \\
+\endDg
+\endeg
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{dh}\{\dim\}}
+Fudge the length of an arrow at its head.
+
+\side
+\Diagram
+A & \rTo \dh{-10pt} & B \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{dh}\{\dim\ or \num\ch\,\dim\}}
+Fudge the positioning of an arrow at its head.
+Equivalent to \csq\hx\{\dim\ or \num\} \csq\hy\{\dim\}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{%
+ \index mm{dh}\{\dim1 or \num\ch\,\dim2\ch\;\dim3\}
+ \csq\dh\{\dim3\ch\;\dim1 or \num\ch\,\dim2\}}
+Fudge both the length and positioning at the head of an arrow.
+Equivalent to \csq\hx\{\dim1 or \num\} \csq\hy\{\dim2\} \csq\dh\{\dim3\}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mw{Diag@{\tt Diag}}\tt Diag}
+Diagram type having \csq\flexible\ and \csq{\xgrid=0pt}.
+
+\eg
+\ygrid=7mm
+\Diag
+\cdots& \rTo& H_n A& \rTo& H_n X& \rTo& H_n(X,A)& \rTo& H_{n-1}A& \rTo& \cdots \\
+ & & \dTo & & \dTo & & \dTo & & \dTo \\
+\cdots& \rTo& H_n B& \rTo& H_n Y& \rTo& H_n(Y,B)& \rTo& H_{n-1}B& \rTo& \cdots \\
+\endDiag
+\endeg
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mp{Diagram}\endDiagram}
+Diagram delimiters. Uses a rigid grid unless \csq\flexible\ is specified.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{diagramdot}\d\csq\bullet}
+Token used with \csq\dotted\ and \csq\Dot.
+
+\side
+\let\diagramdot\circ \dotted
+\Diagram
+ & \\
+ \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{Diagrampad}%
+ \csq{\Diagrampad=}\dim\d 5pt
+ \csq{\Diagrampad+=}\dim}
+Padding added to all sides of a Diagram.
+
+\side
+\framed
+\Diagram A & \rTo & B \\ \endDiagram
+\Diagrampad=10pt \quad
+\Diagram A & \rTo & B \\ \endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{displayall}}
+Abbreviation for \index tm{displaybindings} \index tm{displaymovements}
+\index tm{displaystretches}, each of which announce certain computations.
+\endentry
+
+\comment
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\csq\displaybindings}
+Display the message (B:<C1>-<C2>) when column <C1> is bound to column <C2>.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\csq\displaymovements}
+Display the message (X<C>) when a column is moved and
+(Y<C>) when a row is moved.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\csq\displaystretches}
+Display messages of the form (A:r<R>,c<Cl>-<Cr>),
+(C:r<R>,c<C>) and (W:r<Rl>-<Rr>,c<Cl>-<Cr>) for stretches set by
+horizontal arrows, column entries and diagonal arrows respectively.
+\endentry
+\endcomment
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{Displaybox}}
+Control sequence, taking a single parameter (a box register),
+which displays a diagram.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{dl}}
+Move the column in which this control sequence occurs
+so that the alignment entry in which it occurs abuts it nearest
+neighbour to the left. Additionally, move each column to the right of the
+given column by the same amount.
+Many of the same effects can be obtained simply by using a flexible grid with
+\csq{\xgrid=0pt}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{Dot}}
+Abbreviation for \@\Math{\diagramdot}@\.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{dotted}}
+Place a \csq\diagramdot\ in every empty alignment entry
+in a Diagram unless prevented from doing so by \csq\nodot.
+
+\side
+\dotted
+\Diagram
+ & \nodot \\
+A \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{dr}}
+Move the column in which this control sequence occurs
+so that the alignment entry in which it occurs abuts it nearest
+neighbour to the right.
+Additionally, move each column to the left of the
+given column by the same amount.
+Many of the same effects can be obtained simply by using a flexible grid with
+\csq{\xgrid=0pt}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{dt}\{\dim\}}
+Fudge the length of an arrow at its tail.
+
+\side
+\Diagram
+A & \rTo \dt{-10pt} & B \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{dt}{\{\dim1 or \num\ch\,\dim2\}}}
+Fudge the positioning of an arrow at its tail.
+Equivalent to \csq\tx\{\dim1 or \num\} \csq\ty\{\dim2\}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{%
+ \index mm{dt}\{\dim1 or \num\ch\,\dim2\ch\;\dim3\}
+ \csq\dt\{\dim3\ch\;\dim1 or \num\ch\,\dim2\}}
+Fudge both the length and positioning at the tail of an arrow.
+Equivalent to \csq\tx\{\dim1 or \num\} \csq\ty\{\dim2\} \csq\dt\{\dim3\}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{dx}\{\num\ or \dim\}}
+Move the column in which this control sequence occurs.
+\csq\dx\{\dim\} moves the column rightward by \dim\ and
+also moves all columns to the right of the given column by the same amount.
+If the distance to the next column (to the right) is currently $d$,
+\csq\dx\{\num\} moves the column rightward by $\num\cdot d$ and also moves all
+columns to the left of the given column by the same amount.
+
+\side
+\gridlines
+\Diagram
+A & B \dx{5mm} & C & D & E \\
+A & B & C & D \dx{-.25} & E \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{dy}\{\num\ or \dim\}}
+Move the row in which this control sequence occurs.
+\csq\dy\{\dim\} moves the row upward by \dim\ and
+also moves all rows above the given row by the same amount.
+If the distance to the next row (above) is currently $d$,
+\csq\dy\{\num\} moves the row upward by $\num\cdot d$ and also moves all
+rows below the given row by the same amount.
+
+\side
+\gridlines
+\Diagram
+A \\
+\dEq & \dy{1} \\
+B & \rTo & C \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{epi}}
+An epimorphism arrow, as in $A\epi B$.
+The {\tt arrsy10} font must be loaded for this to work. See \csq\arrsy.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{fd}\{\emph{fudge}\}}
+Abbreviation for \csq\dt\{\emph{fudge}\} \csq\dh\{\emph{fudge}\}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mp{Figure}\endFigure}
+Figure delimiters.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{Figurepad}%
+ \csq{\Figurepad=}\dim\d 0pt
+ \csq{\Figurepad+=}\dim}
+Padding added to all sides of a Figure.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{Fillcell}\{{\it fill} \emph{macro}\}}
+Like, \csq\Boxcell, typeset an arrow as a modification without naming a
+cell type.
+Has ten siblings for use in the alignment part of a Diagram:
+\csq\aFillcell, \csq\bFillcell, \csq\rFillcell,
+\csq\rdFillcell, \csq\dFillcell, \csq\ldFillcell, \csq\lFillcell,
+\csq\luFillcell, \csq\uFillcell\ and \csq\ruFillcell.
+
+\side
+\Diagram
+A & \rFillcell\lrrrightarrowfill & B \\
+\Modify
+\Fillcell\rrightarrowxfill (3,0) /{90}
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{flexible}}
+Enable the flexible grid.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mp{flip}\endflip}
+Rotate the enclosed material by 180 degrees.
+The material cannot contain vertical commands (unless enclosed in a box).
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{forcekdg}}
+Force diagrams to be read from \csq{\jobname.kdg} if not otherwise
+being compiled. See \ref{Specifying Diagrams in Alignments}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{fr}\{\dim\}}
+Abbreviation for \csq\tr\{\dim\} \csq\hr\{\dim\}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{Frame}}
+Typeset a frame as a modification. The coordinates of two
+diagonally opposite corners must be specified.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mp{frame}\endframe}
+Put a frame around the enclosed material.
+The material cannot contain vertical commands (unless enclosed in a box).
+
+{\edge{.65}
+\side
+\frame\bf N\"ara skjuter ingen hare.\endframe
+\endside
+}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{framed}}
+Place diagrams in a frame.
+
+\eg
+\framed
+\Long
+H_n X\otimes G & \rMono & H_n(X;G) & \rEpi & {\rm Tor}(H_{n-1}X,G) \\
+\endLong
+\endeg
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{framegray}\sindex mm{framegrey}%
+ \csq{\framegray=}\num\ or \csq{\framegrey=}\num\d 0}
+Set the graylevel of the frame used with \csqq\frame\endframe.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{framepad}%
+ \csq{\framepad=}\dim\d 5pt
+ \csq{\framepad+=}\dim}
+Padding around material framed with \csqq\frame\endframe.
+
+\side
+\frame \TeX \endframe
+\framepad=10pt \frame \TeX \endframe
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{Framerulewidth}%
+ \csq{\Framerulewidth=}\dim\d .4pt
+ \csq{\Framerulewidth+=}\dim}
+Default thickness of the rule used when typesetting \csq\Frame\ modifications.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{framerulewidth}%
+ \csq{\framerulewidth=}\dim\d .4pt
+ \csq{\framerulewidth+=}\dim}
+Thickness of the rule used when typesetting frames with \csq\framed\ or
+\csqq\frame\endframe.
+
+\side
+\framerulewidth=2mm
+\frame Which way to the home world?\endframe
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{fs}\{\dim\ or \num\}}
+Abbreviation for \csq\ts\{\dim\ or \num\} \csq\hs\{\dim\ or \num\}.
+
+The following trick with %\sidx{fs@{\csqn{fs}}!trick}%
+\csq\fs\ can be used to typeset an arrow which is parallel to
+another but offset by some distance.
+
+\eg
+\Dg
+M & & \rTo ^\theta & & \beta^{-1}(W) \\
+ & \rdTo & & \ldTo \\
+ & & \beta^{-1}(F) \\
+\Modify
+\Mapsto (0,2) (2,0) \fs{-50pt} \tl{x} \hd{R(x)}
+\endDg
+\endeg
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{fx}\{\dim\ or \num\}}
+Abbreviation for \csq\tx\{\dim\ or \num\} \csq\hx\{\dim\ or \num\}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{fy}\{\dim\}}
+Abbreviation for \csq\ty\{\dim\} \csq\hy\{\dim\}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{gr}\{{\it number}\}}
+Typeset an arrow or modification with the specified graylevel.
+Probably none too pretty on many an output device.
+
+\side
+\Graph{1cm}{1cm}
+\Box (0,0) (1,1) \gr{.25}
+\endGraph
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\csq\gr\{{\it number}\} \csq\endgr\sindex mp{gr}\endgr}
+Typeset the enclosed material with the specified graylevel.
+
+\side
+\gr{.25}Anyone seen my bat'leth?\endgr
+\endside
+\sindex tw{bat'leth}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mp{Graph}\endGraph
+ \csq\Graph\{\dim\}\{\dim\} \csq\endGraph
+ \csq{\Graph\{\dim,}\dim\ or \int\}\{\dim\} \csq\endGraph
+ \csq\Graph\{\dim\}\{\dim{\tt ,}\dim\ or \int\} \csq\endGraph
+ \csq{\Graph\{\dim,}\dim\ or \int\}\{\dim{\tt ,}\dim\ or \int\} \csq\endGraph}
+Graph delimiters.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{Graphpad}%
+ \csq{\Graphpad=}\dim\d 0pt
+ \csq{\Graphpad+=}\dim}
+Padding added to all sides of a Graph.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{grav}}
+Explicitly set the gravitating column.
+Columns at the ends of an arrow which passes through the gravitating column
+will tend to be centered on it.
+
+\eg
+\loose
+\Dg
+p^{-1}(U) & & \rTo & & U\times F & {} \approx U\times {\bb R}P^2 \\
+ & \rdTo <p & & \ldTo >{\pi_1} \\
+ & & U \grav & & \\
+\endDg
+\endeg
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{gravitateleft}}
+Set the default location of the gravitating column to the first column of
+an alignment.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{gravitateright}}
+Set the default location of the gravitating column to the last column of
+an alignment.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{gray} or \index mm{grey}}
+Typeset an arrow or modification with the graylevel set by \csq\graygray.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mp{gray}\endgray\ or \index mp{grey}\endgrey}
+Typeset the enclosed material with the graylevel set by \csq\graygray.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{graygray}\sindex mm{greygrey}%
+ \csq{\graygray=}\num\ or \csq{\greygrey=}\num\d .5}
+Set the graylevel used with \csq\gray.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{grid}%
+ \csq{\grid=}\dim
+ \csq{\grid+=}\dim}
+Abbreviation for \csq{\xgrid=}\dim\ \csq{\ygrid=}\dim\ or
+\csq{\xgrid+=}\dim\ \csq{\ygrid+=}\dim.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{gridgray}\sindex mm{gridgrey}%
+ \csq{\gridgray=}\num\ or \csq{\gridgrey=}\num\d .5}
+Set the graylevel used with \csq\gridlines.
+
+\side
+\gridlines \gridgray=0
+\Diagram
+A \\
+ & \rdTo \\
+ & & B \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{gridlines}}
+Display gridlines.
+
+\side
+\gridlines
+\Diagram
+A \\
+ & \rdTo \\
+ & & B \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{hd}\{\math\}}
+Attach math material to the head of a type 2 modification cell.
+\sindex tw{modification cell!type 2}
+
+\side
+\Graph{5cm}{1cm}
+\To (0,.5) (1,.5) \hd{B}
+\endGraph
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mp{hmir}\endhmir}
+Reflect the enclosed material across a horizontal mirror lying
+on the baseline. The material cannot contain vertical commands
+(unless enclosed in a box).
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{hpad}%
+ \csq{\hpad=}\dim
+ \csq{\hpad+=}\dim}
+Abbreviation for \csq{\lpad=}\dim \csq{\rpad=}\dim\ or \csq{\lpad+=}\dim
+\csq{\rpad+=}\dim.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{hr}\{\dim\}}
+Raise the vertex attached to the head of a type 2 modification cell.
+\sindex tw{modification cell!type 2}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{hs}\{\dim\ or \num\}}
+Slide the vertex attached to the head of a type 2 modification cell
+horizontally.
+\sindex tw{modification cell!type 2}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{hx}\{\dim\ or \num\}}
+Fudge the positioning of an arrow at its head.
+Makes the head of an arrow point to a point which is offset horizontally
+from the center of the math axis of the head vertex
+($\num = 0 \leftrightarrow{}$left edge of
+head vertex, $\num = 1 \leftrightarrow{}$right edge of head vertex).
+Has no effect on type 1 modification cells.
+\sindex tw{modification cell!type 1}
+
+\side
+\Diagram
+X \\
+ & \rdTo \hx{.2} \\
+ & & X\times X \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{hy}\{\dim\}}
+Fudge the positioning of an arrow at its head.
+Makes the head of an arrow point to a point which is offset vertically
+from the math axis of the head vertex.
+Has no effect on type 1 modification cells.
+\sindex tw{modification cell!type 1}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{into}}
+Abbreviation for \@\lhook\joinrel\rightarrow@\, as in $A\into X$.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{jh}}
+Join the head of an arrow to the point at the coordinate of its head
+vertex by applying \csq\joinpush\ rather than \csq\cellpush\ (or \csq\ptpush\
+and \csq\atpush) and ignoring the dimensions of the vertex.
+
+\side
+\Diagram
+\bullet & \rLine \jh & \bullet \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{joined}}
+Invert the action of the \csq\jh, \csq\jn\ and \csq\jt\ modifiers:
+Ends of arrows are joined unless one of these is specified.
+
+\side
+\joined \scale=.5
+\Diagram
+ & \rLine & \\
+\dLine & & \dLine \\
+ & \rLine \jn & \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{joinpush}%
+ \csq{\joinpush=}\dim\d -1pt
+ \csq{\joinpush+=}\dim
+ \csq{\joinpush\{\type\}=}\dim\hs\csq{\joinpush\{\type\}+=}\dim}
+Global and type specific pushes used with \csq\jt, \csq\jh\ and \csq\jn.
+Spaces in \type\ are ignored.
+\endentry
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{jn}}
+Abbreviation for \csqq\jt\jh.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{jt}}
+Join the tail of an arrow to the point at the coordinate of its tail vertex.
+
+\side
+\Diagram
+\bullet & \rLine \jt & \bullet \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{kuvio}}
+Abbreviation for \@{\tt kuvio.tex}@\.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{kuviocs}\ch\\{\it name}}
+Access a control sequence which \kuvio\ makes available but does not define
+explicitly due to a name conflict with an existing control sequence.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{kuviodate}}
+Expands to the date of the current patchlevel of \kuvio.
+\endentry
+
+\comment
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{kuviodef}}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{kuviodefine}}
+\endentry
+\endcomment
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{kuviofmt}}
+Load all macros. This should be expanded when using \kuvio\ to build a
+format file.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{kuvioforce}\ch\\{\it name}}
+Force redefinition of \ch\\\emph{name} when \kuvio\ makes it available only
+through \csq\kuviocs.
+\endentry
+
+\comment
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{kuviolet}}
+\endentry
+\endcomment
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{kuviopatchlevel}}
+Expands to the current patchlevel of \kuvio.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{kuviorequire}\{\int\}}
+A warning of forthcoming disaster will be issued if \csq\kuviopatchlevel\ is
+not at least \int.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{kuviorevision}\{\text\}}
+With compilation, cause the string \text\ to be written to {\tt .kuv} files.
+A diagram is recompiled if this string doesn't match the one found in its
+{\tt .kuv} file.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{kuviospecial}\ch\\{\it name}}
+Set the \csq\special\ syntax. Not a good thing to do unless you know what
+you're doing. The following two lines in \kuvio\ set the syntax for
+{\tt dvips}.
+
+\code
+\def\dvipsspecial#1{\special{ps:#1}}
+\kuviospecial\dvipsspecial
+\endcode
+
+Experimentation with other {\tt dvi} to \PS\ translators is possible using
+\csq\kuviospecial.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{Label}\{\math\}}
+Typeset math material as a modification in \csq\labelstyle.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{labelpad}%
+ \csq{\labelpad=}\dim\d 3pt
+ \csq{\labelpad+=}\dim
+ \csq{\labelpad\{\type\}=}\dim\hs\csq{\labelpad\{\type\}+=}\dim}
+Global and type-specific label pads. Spaces in \type\ are ignored.
+
+\side
+\labelpad{One}=5pt
+\Diagram A & \rTo ^f & B \\ \endDiagram
+\quad
+\Diagram A & \rOne ^f & B \\ \endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{labelpoint}%
+ \csq{\labelpoint=}\num\d .5
+ \csq{\labelpoint\{\type\}=}\num}
+Set the default location of labels tied to an arrow. Spaces in \type\ are
+ignored.
+
+\side
+\labelpoint{One}=.75
+\Diagram A & \rTo ^f & B \\ \endDiagram
+\quad
+\Diagram A & \rOne ^f & B \\ \endDiagram
+\endside
+
+Once a type-specific
+default has been set it can be unset, causing the global default to be used,
+by making an empty assignment of the form
+\csq{\labelpoint\ch\{\type\ch\}=\ch\{\ch\}}.
+All predefined cell types in \kuvio\ have their \csq\labelpoint\
+unset.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{labelstyle}\d\csq\scriptstyle}
+Style in which labels of a diagram are typeset.
+
+\side
+\let\labelstyle\textstyle
+\Diagram
+A & \rTo ^f & B \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{labelwidthpad}%
+ \csq{\labelwidthpad=}\dim\d 5pt
+ \csq{\labelwidthpad+=}\dim
+ \csq{\labelwidthpad\{\type\}=}\dim\hs\csq{\labelwidthpad\{\type\}+=}\dim}
+With a flexible grid, \kuvio\ will stretch a horizontal arrow
+(specified using a \csq\l\type\ or \csq\r\type\ cell macro) so
+that a label centered along its length isn't wider than the arrow
+is long. The value of \csq\labelwidthpad\ determines the minimum
+allowable distance between the edges of the label and the ends of
+the arrow. Note that the comparison of the arrow length and label
+width occurs before the application of cell pushes specified using
+\csq\dt\ and \csq\dh.
+
+Spaces in \type\ are ignored.
+
+\csq\labelwidthpad\ has no effect on labels which are not centered and
+no attempt is made to ensure that these ``fit'' on the arrow to
+which they are attached. Also, \csq\labelwidthpad\ may not work well
+with arrows that are attached to other arrows and are thus also
+affected by \csq\atpush\ and \csq\ptpush. See also \csq\lw.
+
+\eg
+\let\labelstyle\textstyle
+\labelwidthpad{One}+=5pt
+\leavevmode
+\Dg
+X(s)\times |u| & & \rTo ^{(f_{s\to t},\pi_2)} & & X(t)\times |u| \\
+ & \rdTo <{f_{s\to u}} & & \ldTo >{f_{t\to u}} \\
+ & & X(u) \\
+\endDg\qquad
+\Dg
+X(s)\times |u| & & \rOne ^{(f_{s\to t},\pi_2)} & & X(t)\times |u| \\
+ & \rdTo <{f_{s\to u}} & & \ldTo >{f_{t\to u}} \\
+ & & X(u) \\
+\endDg
+\endeg
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mp{land}\endland}
+Rotate the enclosed material by 90 degrees counterclockwise.
+The material cannot contain vertical commands (unless enclosed in a box).
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{landscape}}
+Rotate a diagram 90 degrees counterclockwise.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{latexTo}}
+Load the font {\tt line10}, define \csq\sleftarrowfill\ and
+\csq\srightarrowfill\ using the arrowhead character from this font and do
+\@\let\Tofill\srightarrowfill@\.
+
+\side
+\latexTo
+\Dg
+A & \rTo & B & \rOne & C \\
+\endDg
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{lb}}
+Make an arrow left braced.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mw{Long@{\tt Long}}\tt Long}
+Diagram type having \csq\flexible, \csq{\xgrid=0pt} and \csq{\ygrid+=-5mm}.
+
+\eg
+\Long
+0 & & & & & & 0 \\
+\dEq & & & & & & \dEq \\
+\pi_j S^k & \rTo & \pi_j V(n,k) & \rTo & \pi_j V(n-1,k+1) & \rTo & \pi_{j-1} S^k \\
+\endLong
+\endeg
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{loose}}
+Make all diagonal alignment cells unbraced by default.
+Additionally, sets \csq{\columndist=0pt}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{lpad}%
+ \csq{\lpad=}\dim\d 0pt
+ \csq{\lpad+=}\dim}
+Padding added to the left of a diagram or framed material.
+
+\side
+\framed \lpad=10pt
+\Diagram
+A & \rTo & B \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{lw} or \csq\lw\{\dim\}}
+In the first case, don't stretch a horizontal
+arrow even if a centered label is wider than the arrow is long.
+In the second case, increase the effective width of the label by twice
+\dim. See \csq\labelwidthpad.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{Math}\{\math\}}
+Typeset math material as a modification in \csq\textstyle.
+\endentry
+
+\comment
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{%
+ \csq{\MinimumCellLength=}\dim\d 0pt
+ \csq{\MinimumCellLength+=}\dim}
+Minimum arrow length to be typeset.
+\endentry
+\endcomment
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{ml}}
+Move the column in which this control sequence occurs
+so that the alignment entry in which it occurs abuts it nearest
+neighbour to the left.
+Many of the same effects can be obtained simply by using a flexible grid with
+\csq{\xgrid=0pt}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{Modify}}
+Modifications are specified following an occurrence of this control sequence.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{mono}}
+A monomorphism arrow, as in $A\mono B$. The {\tt arrsy10} font must be loaded
+for this to work. See \csq\arrsy.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{mr}}
+Move the column in which this control sequence occurs
+so that the alignment entry in which it occurs abuts it nearest
+neighbour to the right.
+Many of the same effects can be obtained simply by using a flexible grid with
+\csq{\xgrid=0pt}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{mx}\{\num\ or \dim\}}
+Move the column in which this control sequence occurs.
+\csq\mx\{\dim\} moves the column rightward by \dim.
+If the distance to the next column (to the right) is currently $d$,
+\csq\mx\{\num\} moves the column rightward by $\num\cdot d$.
+
+\side
+\gridlines
+\Diagram
+A & B \mx{5mm} & C & D & E \\
+A & B & C & D \mx{-.25} & E \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{my}\{\num\ or \dim\}}
+Move the row in which this control sequence occurs.
+\csq\my\{\dim\} moves the row upward by \dim.
+If the distance to the next row (above) is currently $d$,
+\csq\my\{\num\} moves the row upward by $\num\cdot d$.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\sindex mm{mv}\csq{\mv\{\dim1,\dim2\}}}
+Abbreviation for \csq\rt\{\dim1\} \csq\up\{\dim2\}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{newcell}\{\type\}}
+Define a new cell type.
+One must define either the fill macro
+\ch{\\\type fill} or redefine
+the box macro \ch{\\\type box} before using a cell macro associated with
+this cell type. Spaces in \type\ are ignored.
+
+\side
+\newcell{Br}
+\def\Brfill{\linefill\ \rightarrowfill}
+
+\Diagram
+A & \rBr & B \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{newDiagram}\{\type\}}
+Define a new Diagram type. The macro pair \ch\\\type\ \csq\end\type\
+delimits Diagrams of this type. The macro \csq\every\type\ can be used
+to customize their setup. Spaces in \type\ are ignored.
+
+\side
+\newDiagram{Framed}
+\def\everyFramed{\Diagrampad=10pt \framed}
+
+\Framed
+A & \rTo & B \\
+\endFramed
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{newFigure}\{\type\}}
+Define a new Figure type. The macro pair \ch\\\type\ \csq\end\type\
+delimits Figures of this type. The macro \csq\every\type\ can be used
+to customize their setup. Spaces in \type\ are ignored.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{newfill}\{\name\}\{\emph{tail} \emph{tokens}\}%
+ \{\emph{mid} \emph{tokens}\}\{\emph{head} \emph{tokens}\}}
+Define a fill macro, which can then be used to construct arrows for diagrams.
+Spaces in \name\ are ignored.
+
+\side
+\font\tenln=line10
+\def\ltxah{\smash{\hbox{\kern-4pt\raise\fontdimen22\textfont2
+ \hbox{\tenln\char"2D}\hskip.5pt}}}
+\newfill{srightarrow}--\ltxah
+
+\hbox to 3cm{\srightarrowfill}
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{newGraph}\{\type\}}
+Define a new Graph type. The macro pair \ch\\\type\ \csq\end\type\
+delimits Graphs of this type. The macro \csq\every\type\ can be used
+to customize their setup. Spaces in \type\ are ignored.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{nonkuviocs}\ch\\{\it name}}
+Access the original definition of a control sequence which \kuvio\ has
+redefined.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{nl}}
+Typeset an arrow as a phantom.
+
+{\edge{.7}
+\side
+\newcell{Adj}
+\def\Adjbox#1{\vcenter{\offinterlineskip\dimen0=#1
+ \hbox to #1{\hskip.2\dimen0\rightarrowfill}
+ \hbox to #1{\leftarrowfill\hskip.2\dimen0}}}
+
+\labelpad{Adj}=2.5pt
+\Diagram
+A & \rAdj ^{f_1} :{.6} \rAdj \nl _{f_2} :{.4} & B \\
+\endDiagram
+\endside
+}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{nocompile}}
+Equivalent (almost) to \@\def\compileto#1{}@\.
+Note that \@\global\nocompile@\ behaves as expected.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{nodot}}
+Inhibit the typesetting of a \csq\diagramdot\ in an alignment entry of
+a Diagram for which \csq\dotted\ has been specified.
+See \csq\dotted.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{nw}}
+Ignore a horizontal alignment cell as far as positioning the columns at
+its head and tail.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mp{opland}\endopland}
+Rotate the enclosed material by 90 degrees clockwise.
+The material cannot contain vertical commands (unless enclosed in a box).
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{oplandscape}}
+Rotate a diagram 90 degrees clockwise.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{overgrid}}
+Typeset a grid on top of a Figure.
+For Diagrams and Graphs, synonymous with \csq\gridlines.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{pd}\{\math\}}
+Abbreviation for \csq\hd\{\csq\phantom\{\math\}\}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{pl}\{\math\}}
+Abbreviation for \csq\tl\{\csq\phantom\{\math\}\}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{pp}}
+Typeset an alignment cell before those corresponding to cell macros
+preceding it (above or to the left).
+Usually alignment cells are typeset in the same order in which
+their corresponding cell macros were processed (top to bottom, left to right)
+but order is important when breaking arrows with \csq\br\ or \csq\rl.
+Modification cells can be used for even greater control over the order in which
+arrows are typeset.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{Pt}\{\name\}}
+Name a point which can then be referenced using \csq\pt.
+Spaces in \name\ are significant.
+
+\side
+\Graph{2cm}{15mm}
+\Pt{tail} (0,1)
+\Pt{head} (1,0)
+\To \pt{tail} \tl{X} \pt{head} \hd{Y}
+\endGraph
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\sindex mm{pt}%
+ \csq{\pt\{\name,\num\}}
+ \csq{\pt\{\name\}}}
+Name, or reference as a coordinate, a point on an arrow.
+The string \name\ must be enclosed in parentheses if it contains a comma.
+Also, spaces in \name\ are significant.
+For type 1 modification cells \csq\pt\ is somewhat stunted: A defined point
+is always just the specified coordinate.
+\sindex tw{modification cell!type 1}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{ptpoint}%
+ \csq{\ptpoint=\num\d .5}
+ \csq{\ptpoint\{\type\}=\num}}
+Set the default location of points defined on arrows. Behaves like
+\csq\labelpoint. Spaces in \type\ are ignored.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{ptpush}%
+ \csq{\ptpush=}\dim\d 0pt
+ \csq{\ptpush+=}\dim
+ \csq{\ptpush\{\type\}=}\dim\hs\csq{\ptpush\{\type\}+=}\dim}
+Global and type-specific amounts by which the end of an arrow attached
+to another arrow (using \csq\pt) is shortened whenever a vertex has not been
+attached using \csq\hd\ or \csq\tl.
+The type-specific quantity applies to ends of arrows of cell type \type.
+Spaces in \type\ are ignored.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{range}\csq{\range=}\int}
+Set both \csq\xrange\ and \csq\yrange.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{rb}}
+Make an arrow right braced.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{recompile}}
+Equivalent (almost) to \@\let\compileto\recompileto@\.
+Note that \@\global\recompile@\ behaves as expected.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{recompileto}\{\name\}}
+Compile a diagram to the files \name{\tt .kdg} and \name{\tt .kuv}.
+Spaces in \name\ are ignored.
+\endentry
+
+\comment
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{rekuviodef}}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{rekuviodefine}}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{rekuviolet}}
+\endentry
+\endcomment
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{%
+ \index mm{rl}%
+ \csq\rl\{\dim\}}
+Like \csq\br\ except a white rule is typeset in place of an arrow.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\sindex mm{rm}\csq{\rm\{\dim1,\dim2\}}}
+Abbreviation for \csq\rr\{\dim1\} \csq\ru\{\dim2\}. This meaning is only taken
+when a modifier is expected so does not conflict with the usual meaning of
+\csq\rm. This is also true of all other modifiers.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{ro}}
+Rotate labels on an arrow.
+
+{\edge{.7}
+\side
+\Diagram
+ & & A \\
+ & \ldTo <L >R \ro & \dTo <L >R \ro & \rdTo <L >R \ro \\
+X & & X & & X \\
+\endDiagram
+\endside
+}
+
+If \csq\rotatedlabels\ is specified then \csq\ro\ inhibits rotation.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mp{rot}\endrot\csq\rot\{\num\} \csq\endrot}
+Rotate the enclosed material by \num\ degrees counterclockwise.
+The material cannot contain vertical commands (unless enclosed in a box).
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{rotatedlabels}}
+Invert the action of the \csq\ro\ modifier: Labels are rotated
+unless \csq\ro\ is specified.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{rpad}%
+ \csq{\rpad=}\dim\d 0pt
+ \csq{\rpad+=}\dim}
+Padding added to the right of a diagram or framed material.
+
+\side
+\framed \rpad=10pt
+\Diagram
+A & \rTo & B \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{rr}\{\dim\}}
+Move an arrow or modification
+to the right relative to a rotated coordinate system.
+
+\side
+\Diagram
+A & & B & \lTo ^f \rr{2\xgrid} & C \\
+\endDiagram
+\endside
+
+Note that \csq\xgrid\ is not actually a dimension
+register, although in the context of a Diagram it can be used as
+such. Ditto for \csq\ygrid.
+For a Figure or Graph one can use
+\csq\xunit\ and \csq\yunit\ in the same way.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{rt}\{\dim\}}
+Move an arrow or modification to the right.
+
+\side
+\Diagram
+A & & B & \rTo ^f \rt{-2\xgrid} & C \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{ru}\{\dim\}}
+Move an arrow or modification
+upwards relative to a rotated coordinate system.
+
+{\edge{.7}
+\side
+\Diagram
+A \\
+ & \luTo _f \ru{5pt} \luTo ^g \ru{-5pt} \\
+ & & B \\
+\endDiagram
+\endside
+}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mw{Rule@{\tt Rule}}\tt Rule}
+Cell type whose arrows are rules. The rule width can be set using \csq\rw.
+
+{\edge{.7}
+\side
+\Diagram
+A & \rRule ^{\rm above} _{\rm below} & B \\
+\endDiagram
+\endside
+}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{Rulewidth}%
+ \csq{\Rulewidth=}\dim\d 5pt
+ \csq{\Rulewidth+=}\dim}
+Default rule width used with {\tt Rule} cells.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{rw}\{\dim\}\d .4pt}
+Set the rule width for a {\tt Rule} cell or \csq\Frame\ modification.
+
+\side
+\Graph{.25\hsize}{5mm,2}
+\Frame (0,0) (.45,2) \rw{1mm}
+\Rule (.55,1) (1,1) \rw{3mm}
+\endGraph
+\endside
+\endentry
+
+\comment
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{safe}\ch\\{\it name}}
+Inside an alignment, access the usual definition of a special control
+sequence.
+\endentry
+\endcomment
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{scale}\csq{\scale=}\num}
+Abbreviation for \csq{\xscale=\num} \csq{\yscale=\num}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mp{shade}\endshade
+ \csq{\shade\{\dim,\dim\}\{\dim,\dim\}} \csq\endshade}
+Place a shadow behind a frame by specifying its offsets from the
+bottom left and top right corners of the enclosed material.
+The values of \csq\framegray, \csq\framepad\ and \csq\framerulewidth\ apply.
+
+\verbatim
+\shade{5pt,-5pt}{3pt,-3pt}\epsfxsize=3cm \epsffile{harebra.eps}\endshade
+\endverbatim
+
+\leavevmode\hskip\egindent\shade{5pt,-5pt}{3pt,-3pt}\harebra\endshade
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{shadegray}\sindex mm{shadegrey}%
+ \csq{\shadegray=}\num\ or \csq{\shadegrey=}\num\d 0}
+Set the graylevel of the shadow produced by \csqq\shade\endshade.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{stop}}
+Force an arrow to stop at an alignment entry. Has no effect on
+cell macros in the same alignment entry.
+
+{\edge{.7}
+\side
+\Diagram
+A & \rTo \up{-2pt} & \stop \rTo \up{2pt} & B \\
+\endDiagram
+\endside
+}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{squash}}
+Like \csq\smash\ from {\tt plain.tex} except typesets the following
+parenthesized material in a box
+having no height, depth or width. The typeset material is centered
+horizontally.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{squish}}
+Like \csq\smash\ from {\tt plain.tex} except typesets the following
+parenthesized material in a box
+having the same height and depth but no width.
+The typeset material is centered horizontally.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{tall}}
+Make the baseline of a Diagram coincide with that of
+its bottommost row and
+the baseline of a Figure or Graph coincide with that of
+its lower edge.
+This is the default for Figures and Graphs in non-math modes.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{Text}\{\text\}}
+Typeset \text\ as a modification.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{tl}\{\math\}}
+Attach math material to the tail of a type 2 modification cell.
+\sindex tw{modification cell!type 2}
+
+\side
+\Graph{5cm}{5mm}
+\To (0,.5) (1,.5) \tl{A}
+\endGraph
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{tpad}%
+ \csq{\tpad=}\dim\d 0pt
+ \csq{\tpad+=}\dim}
+Padding added to the top of a diagram or framed material.
+Does not alter the baseline.
+
+\side
+\framed \tpad=10pt
+\Diagram
+A & \rTo & B \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{tr}\{\dim\}}
+Raise the vertex attached to the tail of a type 2 modification cell.
+\sindex tw{modification cell!type 2}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{ts}\{\dim\ or \num\}}
+Slide the vertex attached to the tail of a type 2 modification cell
+horizontally.
+\sindex tw{modification cell!type 2}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{tx}\{\dim\ or \num\}}
+Fudge the positioning of an arrow at its tail. See \csq\hx.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{Txt}\{\text\}}
+Typeset \text\ as a modification, centered vertically on its math axis.
+
+\eg
+\gridlines
+\Graph{2cm}{1cm,2}
+\Text{left} (0,1) *0 \Txt{right} (1,1) *1
+\endGraph
+\endeg
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{ty}\{\dim\}}
+Fudge the positioning of an arrow at its tail.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\ch\\\type}
+Typeset an arrow of cell type \type\ as a modification.
+Has ten siblings for use in the alignment part of a Diagram:
+\csq\a\type, \csq\b\type, \csq\r\type,
+\csq\rd\type, \csq\d\type, \csq\ld\type, \csq\l\type,
+\csq\lu\type, \csq\u\type\ and \csq\ru\type.
+
+Non-empty alignment entries in a Diagram
+are implicitly attached (a la \csq\pl\ and \csq\pd) to the end of any
+type 2 modification cell having integral (no decimal point) coordinates.
+\sindex tw{modification cell!type 2}
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{unit}%
+ \csq{\unit=}\dim
+ \csq{\unit+=}\dim}
+Abbreviation for \csq{\xunit=\dim} \csq{\yunit=\dim} or \csq{\xunit+=\dim}
+\csq{\yunit+=\dim}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{up}\{\dim\}}
+Move an arrow or modification upwards.
+
+\side
+\Diagram
+A & \rTo ^f \up{-\ygrid} & B \\
+A & & B \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{Vertex}\{\math\}}
+Typeset math material as a modification in \csq\vertexstyle.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mm{vertexstyle}\d\csq\displaystyle}
+Style in which vertices of a diagram are typeset.
+
+\side
+\let\vertexstyle\scriptstyle
+\Diagram
+A & B \\
+C & D \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mp{vmir}\endvmir}
+Reflect the enclosed material across a vertical mirror located
+horizontally at the midpoint of the material. The material
+cannot contain vertical commands (unless enclosed in a box).
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{vpad}%
+ \csq{\vpad=}\dim
+ \csq{\vpad+=}\dim}
+Abbreviation for \csq{\bpad=}\dim\ \csq{\tpad=}\dim\ or \csq{\bpad+=}\dim\
+\csq{\tpad+=}\dim.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mod\entry{\index mm{white}}
+Typeset an arrow or modification with graylevel 1.
+
+\eg
+\font\big=cmss17
+\Graph{.25\hsize}{1cm}
+\Box (0,0) (1,1)
+\Txt{\big \"Ovningsk\"orning} (.5,.5) \white
+\endGraph
+\endeg
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\index mp{white}\endwhite}
+Typeset the enclosed material with graylevel 1.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{xgrid}%
+ \csq{\xgrid=}\dim\d 1cm
+ \csq{\xgrid+=}\dim}
+Set the default distance between the vertical gridlines of a
+Diagram. Sets \csq{\xscale=1}.
+
+\side
+\xgrid=2cm
+\Diagram
+A & B \\
+C & D \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{xrange}\csq{\xrange=}\int\d 1}
+Set the horizontal units for the coordinate
+system used when typesetting modifications on a Figure or Graph
+by dividing the default unit by \int.
+
+\side
+\xrange=2
+\Graph{1cm}{5mm}
+\Dot (0,.5) \Dot (1,.5) \Dot (2,.5)
+\endGraph
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{xscale}\csq{\xscale=}\num\d 1}
+Scale \csq\xgrid\ by \num.
+
+\side
+\xscale=1.5
+\Diagram
+A & B \\
+C & D \\
+\endDiagram
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{xunit}%
+ \csq{\xunit=}\dim
+ \csq{\xunit+=}\dim}
+Set the horizontal units for the coordinate
+system used when typesetting modifications on a Figure or Graph.
+
+\side
+\xunit=5mm
+\Graph{1cm}{5mm}
+\Dot (0,.5) \Dot (1,.5) \Dot (2,.5)
+\endGraph
+\endside
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{ygrid}%
+ \csq{\ygrid=}\dim\d 1cm
+ \csq{\ygrid+=}\dim}
+Set the default distance between the horizontal gridlines of a
+Diagram. Sets \csq{\yscale=1}.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{yrange}\csq{\yrange=}\int\d 1}
+Set the vertical units for the coordinate
+system used when typesetting modifications on a Figure or Graph
+by dividing the default unit by \int. See \csq\xrange.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{yscale}\csq{\yscale=}\num\d 1}
+Scale \csq\ygrid\ by \num. See \csq\xscale.
+\endentry
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\entry{\sindex mm{yunit}%
+ \csq{\yunit=}\dim
+ \csq{\yunit+=}\dim}
+Set the vertical units for the coordinate
+system used when typesetting modifications on a Figure or Graph.
+See \csq\xunit.
+\endentry
+
+\endinput
+
+
+% Local Variables:
+% mode:TeX
+% agss-tex-jobname:"tdwk"
+% End:
diff --git a/macros/generic/diagrams/kuvio/doc-src/tdwk.cd b/macros/generic/diagrams/kuvio/doc-src/tdwk.cd
new file mode 100644
index 0000000000..aaea6cb981
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/tdwk.cd
@@ -0,0 +1,161 @@
+% tdwk.cd
+% Anders G S Svensson
+
+% Time-stamp: <1996/06/09 14:35:42 PDT agss@klagshamn>
+
+% $Date: 1996/06/09 21:44:47 $
+% $Revision: 1.3 $
+
+\usecarrot{sfss,index,toc,environ,label}
+\usecarrot[toc,number]{section}
+\usecarrot[shortrevisions]{rcs}
+
+% Indicate the revision, date and author in the document.
+
+\let\@@revision\relax
+\def\revision{\gdef\@@revision}
+
+\let\@@date\relax
+\def\date{\gdef\@@date}
+
+\let\@@author\relax
+\def\author{\gdef\@@author}
+
+\let\@@email\relax
+\def\email{\gdef\@@email}
+
+\def\title#1{\gdef\@@title{#1}{\FontSize{16}\bf\noindent #1}%
+ \identifier\@@author\@@email\@@revision\@@date
+ \let\email\emailaddress}
+\let\@@title\relax
+
+\headline{\headliner\@@title\@@author\@@revision\@@date}
+
+\def\emailaddress#1{{\tt\lower.8pt\hbox{<}#1\lower.8pt\hbox{>}}}
+
+\def\identifier#1#2#3#4{
+ \ifx#1\relax
+ \else
+ \smallskip
+ \noindent{\bf#1}%
+ \ifx#2\relax
+ \else
+ \ \ \emailaddress#2\relax
+ \fi
+ \fi
+ \revisionidentifier#3#4\relax
+ \bigskip}
+
+\def\revisionidentifier#1#2{
+ \ifx#1\relax
+ \ifx#2\relax
+ \else
+ \bigskip\noindent#2\relax
+ \fi
+ \else
+ \revisionfootnote#1#2\relax
+ \fi}
+
+\def\revisionfootnote#1#2{\footnote{}{#1. \ifx#2\relax\else#2.\fi}}
+
+\def\headliner#1#2#3#4{%
+ \headlinefont
+ \ifnum\pageno=1
+ \hfil
+ \else
+ \ifx#1\relax \else #1\fi
+ \hfil \ifx#3\relax\else#3\fi
+ \fi}
+\def\headlinefont{\fontsize{8}}
+
+% Sectioning.
+
+\newsection{section}<-\lastskip+\bigskipamount><\medskipamount>
+\presectionhook[section]{\goodbreak}
+\headinghook[section]{\FontSize{14}\bf}
+\def\sectionplug{.\defaultsectionplug}
+
+\def\tableofcontents{\vfill\bgroup
+ \parskip=2pt
+ \tochead
+ \readtocfile
+ \egroup\newpage}
+
+\def\tochead{{\FontSize{14}\currentfont Contents}\par
+ \leavevmode
+ \hbox to .6\hsize{\hfil\squish{\it page}\ }\par}
+
+\def\tocsectionentry#1#2#3{\leavevmode
+ \hbox to .6\hsize{%
+ \ifnum#2<10 \phantom{1}\fi #2.\quad
+ {\bf #1}\ \dotfill\ #3}\par}
+
+\def\sectiontag#1{\S#1}
+
+\def\printindex{
+ \begindoublecolumns
+ \parskip\z@
+ \parindent=7pt
+ \fontsize{9}
+ \def\item{\par\noindent}
+ \def\subitem{\par\indent \hangindent\parindent \indent}
+ \let\indexspace\bigskip
+ \def\begin##1{}\def\end##1{}
+ \readind
+ \enddoublecolumns}
+
+% Double column code modified from Knuth's manmac.tex, with
+% \onpageout a modification of plain.tex's \plainoutput.
+
+\newdimen\pagewidth
+\newdimen\pageheight
+\newbox\partialpage
+
+\def\begindoublecolumns{%
+ \begingroup
+ \output={\global\setbox\partialpage=\vbox{\unvbox255\bigskip}}\eject
+ \output={\doublecolumnout} \hsize=15pc \vsize=2\pageheight}
+\def\enddoublecolumns{\newpage\endgroup \pagegoal=\vsize}
+
+\def\doublecolumnout{\splittopskip=\topskip \splitmaxdepth=\maxdepth
+ \dimen@=\pageheight
+ \advance\dimen@ by-\ht\partialpage
+ \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
+ \onepageout\pagesofar
+ \unvbox255 \penalty\outputpenalty}
+
+\def\pagesofar{%
+ \unvbox\partialpage
+ \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}}
+
+\def\onepageout#1{%
+ \shipout\vbox{{\hsize\pagewidth\makeheadline}\onepagebody{#1}%
+ {\hsize\pagewidth\makefootline}}%
+ \advancepageno
+ \ifnum\outputpenalty>-\@MM \else\dosupereject\fi}
+
+\def\onepagebody#1{%
+ \vbox to\pageheight{\boxmaxdepth\maxdepth \onepagecontents{#1}}}
+
+\def\onepagecontents#1{%
+ \ifvoid\topins\else\unvbox\topins\fi
+ #1%
+ \ifvoid\footins\else % footnote info is present
+ \vskip\skip\footins
+ \footnoterule
+ \unvbox\footins\fi
+ \ifr@ggedbottom \kern-\dimen@ \vfil \fi}
+
+%%%%
+
+\def\emph#1{{\it #1}\@ifnextchar@.{}{\@ifnextchar@,{}{\/}}}
+
+\parindent 0pt
+\baselineskip=12pt
+\parskip=10pt plus 1pt
+\raggedbottom
+
+% Local Variables:
+% mode:TeX
+% agss-tex-jobname:"tdwk"
+% End:
diff --git a/macros/generic/diagrams/kuvio/doc-src/tdwk.ist b/macros/generic/diagrams/kuvio/doc-src/tdwk.ist
new file mode 100644
index 0000000000..881d23f640
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/tdwk.ist
@@ -0,0 +1,10 @@
+% tdwk.ist
+% Anders G S Svensson
+
+% Time-stamp: <1996/06/09 13:32:29 PDT agss@klagshamn>
+
+% $Date: 1996/06/09 20:32:58 $
+% $Revision: 1.2 $
+
+delim_0 "\\ \\dotfill\\ "
+delim_1 "\\ \\dotfill\\ "
diff --git a/macros/generic/diagrams/kuvio/doc-src/tdwk.tex b/macros/generic/diagrams/kuvio/doc-src/tdwk.tex
new file mode 100644
index 0000000000..a165a5e5fa
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc-src/tdwk.tex
@@ -0,0 +1,1743 @@
+% tdwk.tex
+% Anders G S Svensson
+
+% Time-stamp: <1996/06/09 14:35:27 PDT agss@klagshamn>
+
+% $Revision: 2.5.0.12 $
+% $Date: 1996/06/09 21:43:53 $
+
+\input carrot \usecarrot{sfss} \usefs{arrsy,bbm}
+\input epsf
+\input kuvio \arrsy
+\input verbatim
+\input listing
+\input tdwk-r \kuviorequire\doclevel
+
+\let\bb\bbm
+
+\listingindent=10pt
+\verbatimindent=10pt
+
+\autocompileto{tdwk/tdwk}
+
+{\escapechar=-1
+ \xdef\AAAA{\expandafter\string\csname tdwk-A4\endcsname}\xdef\NAME{\jobname}}
+
+\newif\ifAAAA
+
+\ifx\AAAA\NAME
+\AAAAtrue
+\fi
+
+\ifAAAA
+\special{papersize=210mm,297mm}
+\hsize=15.9cm
+\vsize=24.6cm
+\kuviorevision{$Revision: 2.5.0.12 $ A4}
+\else
+\special{papersize=8.5in,11in}
+\kuviorevision{$Revision: 2.5.0.12 $}
+\fi
+
+\pagewidth\hsize \pageheight\vsize
+
+\def\verbatimit{\FontSize{9}\SelectTextFont{cmti}}
+\let\verbatimtt\listingtt
+
+\newverbatim{code}
+\def\everycode{\verbatimindent=25pt\everyverbatim}
+
+\newgroup*{indented}
+ {\par\parindent=25pt\leavevmode\parskip=0pt\obeylines}
+ {\par}
+
+\newwrite\tmpfile
+\def\opentmp{\immediate\openout\tmpfile=\jobname.tmp }
+\def\closetmp{\immediate\closeout\tmpfile}
+\def\writetmp{\immediate\write\tmpfile}
+
+\newverbatim{eg}
+\def\everyeg{\opentmp\obeyspaces}
+\def\egline#1\egendline{\writetmp{#1}}
+\def\endeg{\closetmp{\nolinenumbers\listing{\jobname.tmp}}%
+ \leavevmode\hskip\egindent
+ \vbox{\advance\hsize by -\egindent\leavevmode\input \jobname.tmp }\par}
+
+\def\egindent{10pt}
+
+\newverbatim{side}
+\let\everyside\everyeg
+\def\sideline#1\sideendline{\writetmp{#1}}
+\def\endside{\closetmp\par\leavevmode
+ \hbox to \hsize{%
+ \hbox to \ifx\sideedge\empty .6\else\sideedge\fi\hsize{%
+ \vbox{\nolinenumbers\listing{\jobname.tmp}}%
+ \hss}%
+ \vbox{\leavevmode\tall\input \jobname.tmp }%
+ \hss}%
+ \par}
+
+\let\sideedge\empty
+\def\edge#1{\def\sideedge{#1}}
+
+\let\stockepsffile\epsffile
+\def\epsffile#1{\stockepsffile{eps/#1}}
+
+\def\csq#1{{\tt\string#1}}
+\def\ch#1{{\escapechar=-1 \tt\string#1}}
+\def\newpage{\vfill\eject}
+\def\type{\emph{type}}
+\def\name{\emph{name}}
+\def\num{\emph{number}}
+\def\BAR{\ch\|}
+
+\def\PS{{\sf PostScript}}
+\def\LaTeXe{\LaTeX\kern.15em 2${}_{\textstyle\varepsilon}$}
+\def\AMS{{$\cal A$\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.125em$\cal S$}}
+\def\AMSLaTeX{\AMS-\LaTeX}
+\def\LaTeX{L\kern-.36em\raise.3ex\hbox{\sc A}\kern-.15em\TeX}%
+
+% Indexing
+
+\let\sidx\index
+\def\sidxe#1{\sidx{#1|emph}}
+\def\sidxm#1#2{\sidx{#2@#1{#2}}}
+\def\sidxme#1#2{\sidx{#2@#1{#2}|emph}}
+
+\def\index#1#2{\csname #1#2Idx\endcsname}
+\def\iindex#1#2#3{\emph{\index#1#2{#3}}}
+\def\sindex#1#2{\csname #1#2sIdx\endcsname}
+
+\def\tmsIdx{\sidxm\csqn}% text, macro
+\def\tpsIdx#1#2{\sidxm\csQ{#1 #2}}% text, macro pair
+\def\tcsIdx{\sidxm\ch}% text, character
+\def\twsIdx{\sidx}% text, word
+
+\def\tmIdx#1{\csqn{#1}\tmsIdx{#1}}
+\def\tpIdx#1#2{\csqqn#1 #2\tpsIdx{#1}#2}
+\def\tcIdx#1{\ch#1\tcsIdx#1}
+\def\twIdx#1{\EatAt#1@@\twsIdx{#1}}
+
+\def\mmsIdx{\sidxme\csqn}% main, macro
+\def\mpsIdx#1#2{\sidxme\csQ{#1 #2}}% main, macro pair
+\def\mcsIdx{\sidxme\ch}
+\def\mwsIdx#1{\sidxe{#1}}% main, word
+
+\def\mmIdx#1{\csqn{#1}\mmsIdx{#1}}
+\def\mpIdx#1#2{\csqqn#1 #2\mpsIdx{#1}#2}
+\def\mcIdx#1{\ch#1\mcsIdx#1}
+\def\mwIdx#1{\EatAt#1@@\mwsIdx#1}
+
+\def\EatAt#1@#2@{\def\Action{#2}%
+ \ifx\Action\empty\def\Action{#1}\else\def\Action{#2\Chomp}\fi
+ \Action}
+\def\Chomp#1{}
+\def\csqq#1#2{\csq#1\ \csq#2}
+\def\csqn#1{{\tt\expandafter\string\csname #1\endcsname}}
+\def\csQ#1{\csqqn#1}
+\def\csqqn#1 #2{{\tt\expandafter\string\csname #1\endcsname}\ \csq#2}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\author{Anders G. S. Svensson}
+\email{svensson@math.ubc.ca}
+\title{Typesetting diagrams with kuvio.tex}\footnote{}
+{\rcsrevision$Revision: 2.5.0.12 $ for patchlevel \doclevel.
+ \rcsdate$Date: 1996/06/09 21:43:53 $.\hfil\break}
+\revision{\rcsrevision$Revision: 2.5.0.12 $}
+
+The macros in \kuvio\ use \PS\ code embedded in \csq{\special} control
+sequences to perform rotations and reflections and to set graylevels.
+The \csq{\special} syntax used is that of Tomas Rokicki's excellent
+{\tt dvips}. Be forewarned that this is likely to confuse many {\tt
+dvi} (not \PS) previewers.
+
+A summary contains details on the syntax of control sequences as well
+as discussion of several points not covered in the main sections of
+this manual.
+
+\tableofcontents
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Cell Macros}
+
+Let's start with a simple diagram.
+
+\eg
+\Diagram
+P' \aTo (2,-4) <{b'} \aTo (4,-2) >{a'} \\
+ & \rdTo \\
+ & & P & \rTo ^a & A \\
+ & & \dTo <b & & \dTo \\
+ & & B & \rTo & X \\
+\endDiagram
+\endeg
+
+The control sequences \csq\rTo, \csq\dTo,
+\csq\rdTo\ and \csq\aTo\ in this example each specify an arrow in the diagram.
+These control sequences are called \sindex tw{cell macro}\emph{cell
+macros} and, in this case, each is associated with the \iindex tw{cell
+type} {\tt To}. Note that, except for \csq\aTo, the direction of the
+arrow is built into the name of the cell macro: \csq\rTo\ for a
+rightward {\tt To} cell, \csq\dTo\ for a downward {\tt To} cell, etc.
+In the case of \csq\aTo, the arrow extends from the alignment entry in
+which the macro was found to the alignment entry whose relative
+position is specified by a parenthesized pair of integers. In our
+example, the arrow specified by
+\code
+\aTo (2,-4)
+\endcode
+points to the alignment entry 2 columns to the right and 4 rows below
+the entry in which this code is located.
+
+We shall soon see that there are many cell types predefined in \kuvio\
+and that other types can easily be defined by the user using the
+control sequence \csq\newcell. The full list of cell macros
+associated with a cell type \type\ is as follows.
+
+{\parindent=25pt\leavevmode
+\vbox{\openup2pt\halign{#\hfil\qquad& #\hfil\cr
+\csq\a\type& \type\ cell originating at an alignment entry\cr
+\csq\b\type& \type\ cell terminating at an alignment entry\cr
+\csq\ru\type& rightward and upward \type\ cell\cr
+\csq\r\type& rightward \type\ cell\cr
+\csq\rd\type& rightward and downward \type\ cell\cr
+\csq\lu\type& leftward and upward \type\ cell\cr
+\csq\l\type& leftward \type\ cell\cr
+\csq\ld\type& leftward and downward \type\ cell\cr
+\csq\u\type& upward \type\ cell\cr
+\csq\d\type& downward \type\ cell\cr
+\ch\\\type& \type\ cell typeset as a \emph{modification}\cr
+}}}
+
+The last of these differs from the others in that it it not used in
+alignments. This will be discussed in \ref{Modification Cells I}. The
+\csq\b\type\ cell macro is similar to \csq\a\type\ except that the
+required coordinate pair specifies the relative position of the tail
+(rather than the head) of the arrow.
+
+\side
+\Diagram
+A \aTo (1,-1) & & A \\
+ & B \bTo (1,1) \\
+\endDiagram
+\endside
+
+Let us refer to cell macros which can be used in alignments as
+\sindex tw{cell macro!alignment}\emph{alignment cell macros}
+and all others as
+\sindex tw{cell macro!modification}\emph{modification cell macros}.
+Thus, associated with any cell type we have ten alignment cell macros
+and one modification cell macro.
+
+Labels are tied to arrows using \index tc\<, \index tc\>, \index tc\_\
+and \index tc\^\ for labels to the left, right, below and above an
+arrow respectively. Many characteristics of an arrow and its labels
+can be modified using certain characters and control sequences, which
+we will refer to as \sindex tw{modifier}\emph{modifiers}, following an
+occurrence of a cell macro. The \index tc\:\ modifier can be used to
+tie labels to a point other than the midpoint of an arrow.
+
+\side
+\Diagram
+A & \rTo ^f :{.75} & B \\
+\endDiagram
+\endside
+
+The argument passed to {\tt :} is used to interpolate linearly between
+the tail and head of an arrow, 0 being the tail and 1 being the head.
+One can also use {\tt :} to move labels in a direction perpendicular
+to that of an arrow by supplying it with a dimension rather than a
+real number.
+
+\side
+\Diagram
+A & \rTo ^f :{5pt} & B \\
+\endDiagram
+\endside
+
+To use both functions of the {\tt :} modifier, separate two arguments (in
+either order) by a comma or semicolon.
+
+\side
+\Diagram
+A & \rTo ^f :{.75,5pt} & B \\
+\endDiagram
+\endside
+
+Except for the \csq\a\type\ and \csq\b\type\ variants, arrows specified by
+alignment cell macros, \sindex tw{alignment cell}\emph{alignment cells},
+stretch to meet non-empty alignment entries.
+
+\goodbreak
+\side
+\Diagram
+A & \rTo & B \\
+C & & \rTo & D \\
+\endDiagram
+\endside
+
+The control sequence \index tm{stop} can be used to stop an alignment cell
+at an otherwise empty alignment entry.
+
+\side
+\Diagram
+ & \rTo & \stop & \rTo & \stop \\
+ & & \stop & \rTo & \stop & \rTo & \\
+\endDiagram
+\endside
+
+\ifAAAA \newpage \fi
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Grid Lines}
+
+Each diagram is constructed on a grid, vertical grid lines
+corresponding to columns in an alignment and horizontal grid lines to
+rows. Tokens preceding the first occurrence of a cell macro in an
+alignment entry are typeset at the intersection point of two grid
+lines.
+
+There are two kinds of grid: \sindex tw{grid!rigid}\emph{rigid} and
+\sindex tw{grid!flexible}\emph{flexible}. The grid lines of a rigid
+grid will be uniformly spaced unless explicitly moved while those of a
+flexible grid will be positioned using knowledge of the particular
+vertices and arrows occurring in a diagram. The pair
+\csqq\Diagram\endDiagram\ uses a rigid grid by default. Flexible
+grids are enabled using the control sequence
+\csq\flexible. These will be discussed in \ref{Flexible Grids}.
+
+Grid lines can be moved using any of the control sequences
+\index tm{mx}, \index tm{my}, \index tm{dx}, \index tm{dy}, \index tm{ml},
+\index tm{mr}, \index tm{dl} and \index tm{dr}.
+\index tm{mx} adjusts the position of the vertical grid line
+associated with the column in which this control sequence occurs while
+\csq\dx\ simultaneously adjusts the position of all grid lines
+associated with columns lying to the right of the one in which it
+occurs. The row in which either \csq\mx\ or \csq\dx\ occurs is
+immaterial.
+
+\side
+\gridlines
+\Diagram
+A & B \mx{-5mm} & C & D & E & F \\
+A & B & C & D & E \dx{5mm} & F \\
+\endDiagram
+\endside
+
+The behaviour of \csq\my\ and \csq\dy\ on horizontal grid lines
+corresponding to alignment rows is analogous, \csq\dy\ moving grid
+lines associated with rows lying on or above a particular row.
+
+The control sequence \csq\ml\ moves a vertical grid line leftward so
+that the alignment entry in which this control sequence occurs abuts
+the next entry typesetting as a box of non-zero dimensions.
+
+\side
+\gridlines
+\Diagram
+A & \rTo & B \\
+\dTo \\
+C & {} = D \ml \\
+\endDiagram
+\endside
+
+Similarly, \csq\mr\ moves a vertical grid line rightward.
+\csq\dl\ and \csq\dr\ have the same relation to \csq\ml\ and \csq\mr\
+that \csq\dx\ has to \csq\mx.
+
+The default \sindex tw{grid!spacing}spacing between grid lines can be
+adjusted in two ways: By scaling the current values using \index
+tm{xscale} and \index tm{yscale} or by explicitly setting new values
+using \index tm{xgrid} and \index tm{ygrid}.
+
+\side
+\gridlines \xgrid=2cm
+\Diagram
+A \\
+ & \rdTo \\
+ & & B \\
+\endDiagram
+\endside
+
+The control sequence \index tm{scale} can be used to set both
+\csq\xscale\ and \csq\yscale\ to the same value. Similarly, \index
+tm{grid} can be used to set both \csq\xgrid\ and \csq\ygrid.
+
+\ifAAAA \newpage \fi
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Coordinates and Modifications}
+
+Grid lines provide us with a coordinate system in which points with
+non-integral coordinates are obtained by linear interpolation between
+grid lines. These coordinates can be used to typeset \sindex
+tw{modification}\emph{modifications} at arbitrary locations on (or
+outside) a diagram, following an occurrence of the control sequence
+\index tm{Modify}.
+
+\side
+\gridlines
+\Diagram
+A \\
+ & \rdTo \\
+ & & B \\
+\Modify
+\Text{X} (2,1.5)
+\endDiagram
+\endside
+
+Here the control sequence \index tm{Text} takes a single argument,
+the material to be typeset, and must also be supplied with a
+parenthesized coordinate pair indicating a position on the diagram.
+
+Besides \csq\Text\ there are control sequences
+\index tm{Txt}, \index tm{Math}, \index tm{Vertex} and \index tm{Label}.
+The latter three typeset their argument in math mode:
+\csq\Math\ in \csq\textstyle, and \csq\Vertex\ and \csq\Label\
+in the current values of \index tm{vertexstyle} and \index
+tm{labelstyle}, the defaults being \csq\displaystyle\ and
+\csq\scriptstyle\ respectively. These are the same styles in which
+vertices and labels in the alignment part of a diagram are typeset.
+
+Control sequences which typeset modifications behave very much like
+cell macros in that they are also affected by
+\sindex tw{modifier}modifiers. The \index tc\:\ modifier can be used to
+specify a position to \csq\Text, \csq\Txt, \csq\Math, \csq\Vertex\ and
+\csq\Label\ as a fractional distance from a first coordinate to a
+second. The fraction $.5$ is assumed if none is specified explicitly.
+
+\side
+\gridlines
+\Diagram
+A \\
+ \\
+ & & B \\
+\Modify
+\Text{X} (0,0) (1,1)
+\Text{Y} (0,0) (2,2) :{.75}
+\endDiagram
+\endside
+
+The position indicated to \csq\Text\ and its siblings are those of the
+\iindex tw{tag point}: The point on the typeset material which is
+placed at the position in question. For \csq\Text\ the default tag
+point lies at the midpoint of the baseline while for \csq\Txt,
+\csq\Math, \csq\Vertex\ and \csq\Label\ it lies at the midpoint of the
+math axis. The location of the tag point along the length of the
+typeset material can be changed using the \index tc\*\ modifier.
+
+\side
+\gridlines
+\Diagram
+ \\
+ & & \\
+ \\
+\Modify
+\Text{v\"anster} (0,0) *0
+\Text{h\"oger} (2,2) *1
+\endDiagram
+\endside
+
+Modifications can be rotated using the \index tc\/\ modifier.
+\sindex tw{modification!rotation}
+
+\side
+\gridlines
+\Diagram
+ \\
+ & & \\
+ \\
+\Modify
+\Text{leftish} (0,0) *{.2} /{95}
+\Text{rightish} (2,2) *{.8} /{45}
+\endDiagram
+\endside
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Modification Cells I}
+\label{Modification Cells I}
+
+Modification cell macros typeset arrows as modifications. We refer to
+such arrows as \sindex tw{modification cell}\emph{modification cells}.
+
+\side
+\Diagram
+xF & \rTo ^{fF} & yF \\
+\dTo <{x\eta} & & \dTo >{y\eta} \\
+xG & \rTo _{fG} & yG \\
+\Modify
+\Para (1.5,.5) <{f\eta} /{-135}
+\endDiagram
+\endside
+
+The \sindex tw{modification cell!length}length of a modification cell
+can be specified explicitly using the \sindex tw{"|@\BAR}{\tt |}
+modifier.
+
+\side
+\Diagram
+xF & \rTo ^{fF} & yF \\
+\dTo <{x\eta} & & \dTo >{y\eta} \\
+xG & \rTo _{fG} & yG \\
+\Modify
+\Para (1.3,.7) <{f\eta} /{-135} |{14mm}
+\endDiagram
+\endside
+
+The following alternative to the previous two examples will become
+clear in \ref{Naming Points and Attaching Arrows}.
+
+\eg
+\ptpush+=3pt
+\Diagram
+xF & \rTo ^{fF} & yF \\
+\dTo <{x\eta} & & \dTo >{y\eta} \pt{t} \\
+xG & \rTo _{fG} \pt{h} & yG \\
+\Modify
+\Para \pt{t} \pt{h} <{f\eta}
+\endDiagram
+\endeg
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Figures and Graphs}
+
+Before continuing our discussion of modification cells, let us first
+mention two variants of the \csqq\Diagram\endDiagram\ pair. The
+first, \sindex tw{Figure}\index tp{Figure}\endFigure, can be used to
+typeset modifications on top of any \TeX\ box. One use for this is for
+typesetting \TeX\ labels on top of included \PS\ figures.
+
+\verbatim
+\input epsf % from the dvips distribution
+\endverbatim
+\eg
+\Figure
+\epsfxsize=3in
+\epsffile{plot.eps}
+\Modify
+\Math{x^2 + y^2 = 1} (.8,.55) *0
+\Math{z = 2\sqrt{x^2 + y^2}} (.6,.9) *0
+\endFigure
+\endeg
+
+The second, \index tp{Graph}\endGraph, uses \csq\Figure\ to typeset
+modifications on top of an empty box whose dimensions we specify.
+
+\eg
+\Graph{\hsize}{1.5cm}
+\Two (0,.5)
+\Two /{45} (.25,.5)
+\Two /{90} (.5,.5)
+\Two /{135} (.75,.5)
+\Two /{180} (1,.5)
+\endGraph
+\endeg
+
+The coordinate \sindex tw{modification!coordinate system}system used
+for typesetting modifications on a \csq\Figure\ or \csq\Graph\ has its
+origin at the bottom left corner of the box in question. There are
+two ways of specifying units of length in the coordinate directions of
+this coordinate system, the default units being chosen so that the top
+right corner of the box has coordinates (1,1). First, the control
+sequences \index tm{xrange}, \index tm{yrange} and \index tm{range}
+can be used to divide the default units by any integer value.
+
+\ifAAAA \newpage \fi
+
+\eg
+\xrange=5 \yrange=20 \gridlines
+\Figure
+\epsfxsize=3in
+\epsffile{plot.eps}
+\Modify
+\Math{x^2 + y^2 = 1} (4,11) *0
+\Math{z = 2\sqrt{x^2 + y^2}} (3,18) *0
+\endFigure
+\endeg
+
+Second, one can use \index tm{xunit}, \index tm{yunit} and \index
+tm{unit} to explicitly specify units of length.
+
+\eg
+\xunit=.25\hsize \yrange=2 \gridlines
+\Graph{\hsize}{1.5cm}
+\Two (0,1) \Two /{45} (1,1) \Two /{90} (2,1) \Two /{135} (3,1) \Two /{180} (4,1)
+\endGraph
+\endeg
+
+For any individual \csq\Graph, unit and range specifications can be
+incorporated into the argument list.
+
+\eg
+\gridlines
+\Graph{\hsize,.25\hsize}{1.5cm,2}
+\Two (0,1) \Two /{45} (1,1) \Two /{90} (2,1) \Two /{135} (3,1) \Two /{180} (4,1)
+\endGraph
+\endeg
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Modification Cells II}
+
+The modification cells shown above place the midpoint of an arrow at a
+specified location on a diagram. Just as with ordinary modifications,
+we can change the \index tw{tag point} using the \index tc\*\
+modifier.
+
+\side
+\range=2
+\Graph{2cm}{2cm}
+\To (1,1) *0 \To (1,1) *0 /{180}
+\To (1,1) *0 /{90} \To (1,1) *0 /{270}
+\endGraph
+\endside
+
+There is another variant of modification cell in which we specify the
+coordinates of the tail and head of an arrow rather the position of
+the tag point.
+
+\side
+\Graph{2cm,2}{15mm,2}
+\Line (1,0) (1,2)
+\Bar (0,1) (2,1)
+\endGraph
+\endside
+
+We will refer to modification cells as
+\sindex tw{modification cell!type 1}\emph{type 1} or
+\sindex tw{modification cell!type 2}\emph{type 2}
+depending on whether they have been specified with one or two
+coordinate pairs.
+
+Vertices can be attached to the tail and head of such a modification
+cell using the modifiers \index tm{tl} and
+\sindex tw{attaching!with \csq\hd\ or \csq\tl}\index tm{hd}.
+In the case of \csq\Diagram\ \csq\endDiagram, if the coordinates of
+either end of a type 2 \sindex tw{modification cell!type
+2}modification cell are integral then an implicit \csq\tl\ or \csq\hd\
+is performed with the contents of the appropriate alignment entry
+whenever a tail or head hasn't been explicitely attached.
+
+\side
+\Diagram
+A & & \\
+ & & B \\
+\Modify
+\To (0,1) (2,0)
+\Line (0,0) (2,1) \tl{C} \hd{D}
+\endDiagram
+\endside
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Fudges and Moves}
+
+The length of individual arrows can be adjusted using the modifiers
+\index tm{dt} and \index tm{dh} for the tail and head of an arrow
+respectively. Passing a single dimension to one of these control
+sequences lengthens the appropriate end of an arrow by the specified
+amount.
+
+{\edge{.65}
+\side
+\let\b\bullet
+\Diagram
+\b & \rTo \dh{10pt} & \stop & \rTo \dt{-10pt} & \b \\
+\b & \rTo & \stop & \rTo & \b \\
+\b & \rTo \dh{-10pt} & \stop & \rTo \dt{10pt} & \b \\
+\endDiagram
+\endside
+}
+
+\index tm{tx}, \index tm{ty}, \index tm{hx} and \index tm{hy}
+can be used to make an arrow point from or to a point other than the
+midpoint of a vertex.
+
+\side
+\Diagram
+A\times B \\
+\dTo & \rdTo \tx{7pt} \\
+A & & B \\
+\endDiagram
+\endside
+
+Length and positional adjustments with the aforementioned six control
+sequences are referred to as \sindex tw{fudge}\emph{fudges}.
+
+The length of a positionally fudged arrow is adjusted to accommodate
+the vertices at either end of the arrow.
+
+\side
+\Diagram
+X \\
+ & \rdTo \hy{-20pt}
+ \rdTo
+ \rdTo \hx{20pt} \\
+ & & A\times B\times C \\
+\endDiagram
+\endside
+
+Arrows and modifications can be \sindex tw{move}\emph{moved}
+using the modifiers \index tm{up} and \index tm{rt}.
+
+\side
+\Diagram
+X & \rTo \up{3pt}
+ \lTo \up{-2pt} & A \\
+\endDiagram
+\endside
+
+Moves differ from fudges in that an entire arrow is literally just
+moved: No length adjustments are made. Using the modifiers \index
+tm{ru} and \index tm{rr}, moves can be made relative to a coordinate
+system which has been rotated from the horizontal along with a
+(rightward pointing) arrow or modification.
+
+\side
+\Diagram
+A \\
+ & \rdTo ^f \ru{5pt}
+ \rdTo _g \ru{-5pt} \\
+ & & B \\
+\endDiagram
+\endside
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Defining New Cell Types}
+
+The control sequence \index tm{newcell} is used to define cell types.
+For example, near the end of \kuvio\ we find the following two lines.
+\code
+\newcell{To}
+\let\Tofill\rightarrowfill
+\endcode
+Expansion of \@\newcell{@\\type\@}@\ causes several control sequences
+to be defined, one being the \iindex tw{box macro} \ch{\\\type box}.
+\indented %
+\@\def\@\\type\@box#1{\hbox to #1{\@\\type\@fill}}@\
+\endindented
+This definition tells the macros in \kuvio\ how to typeset a rightward
+arrow of cell type \type. As we can see, before using a cell macro
+associated with this cell type we were required to either define the
+\iindex tw{fill macro} \ch{\\\type fill} or else redefine \ch{\\\type
+box}.
+
+\newcell{Eql}
+\def\Eqlbox#1{\vcenter{\offinterlineskip
+ \hbox to #1{\rightarrowfill}
+ \vskip-2pt
+ \hbox to #1{\rightarrowfill}}}
+
+\side
+\newcell{Eql}
+\def\Eqlbox#1{\vcenter{\offinterlineskip
+ \hbox to #1{\rightarrowfill} \vskip-2pt \hbox to #1{\rightarrowfill}}}
+
+\Diagram
+A & \rEql & B \\
+\endDiagram
+\endside
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Pads and Pushes}
+
+Let us try placing labels on our newly defined {\tt Eql} cells.
+
+{\bpad=5pt
+\side
+\Diagram
+X & \rEql ^{f_1} _{f_2} & A \\
+\endDiagram
+\endside
+}
+
+These labels are probably a little too close to the arrows for most
+people's tastes. There are three \sindex tw{label pad}\emph{label
+pads} associated with every arrow in a diagram. As we have already
+seen, a pad which applies to only a single arrow can be specified with
+the \index tc\:\ modifier. Global and type-specific label pads can be
+assigned using \index tm{labelpad}. For any individual arrow, these
+three label pads are summed to determine the distance at which a label
+is placed from line joining its endpoints.
+
+{\bpad=8pt
+\side
+\labelpad=4pt \labelpad{Eql}=2.5pt
+\Diagram
+X & \rEql ^{f_1} _{f_2} & A & \rTo ^g & B \\
+\endDiagram
+\endside
+}
+
+Another kind of padding determines how much space will be placed
+around the sides of a diagram. Assignments can be made to
+\index tm{lpad} (left), \index tm{rpad} (right), \index tm{bpad} (bottom)
+and \index tm{tpad} (top). Assignments can also be made to
+\index tm{Diagrampad}, \index tm{Figurepad}
+and \index tm{Graphpad} to add space to all four sides of a diagram.
+
+\eg
+\framed
+\Diagram A & \rTo & B \\ \endDiagram
+\quad\Diagrampad=10pt
+\Diagram A & \rTo & B \\ \endDiagram
+\quad\lpad=-5pt
+\Diagram A & \rTo & B \\ \endDiagram
+\endeg
+
+\sindex tw{cell push}\emph{Cell pushes} determine the spacing between
+an arrow and the vertices at its tail and head. As with label pads,
+cell pushes are additive. Global and type-specific cell pushes are
+assigned using \index tm{cellpush}, just as with \csq\labelpad.
+Length fudges with \index tm{dt} and \index tm{dh} can be thought of
+as arrow-specific pushes, although a positive fudge corresponds to a
+negative push.
+
+\side
+\cellpush{Eql}=3pt
+\Diagram
+X & \rEql & A & \rTo & B \\
+\endDiagram
+\endside
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Naming Points and Attaching Arrows}
+\label{Naming Points and Attaching Arrows}
+
+Modification cells can be \sindex tw{arrows!attaching}\emph{attached}
+to points on other arrows by \sindex tw{points!naming}\emph{naming}
+these points using the \index tm{pt} modifier. Once a point has been
+named it can be referenced as a coordinate.
+
+\side
+\Diagram
+X & \rTo \up{10pt} \pt{a1,.2} \pt{b1,.8}
+ \rTo \up{-10pt} \pt{a2,.2} \pt{b2,.8} & Y \\
+\Modify
+\Two \pt{a1} \pt{a2}
+\Two \pt{b1} \pt{b2}
+\endDiagram
+\endside
+
+A point must be named \sindex tw{points!referencing}before it is
+referenced. Note that cell macros are processed in order from left to
+right and top to bottom.
+
+The form \csq{\pt\ch\{\name,\num\ch\}} can be shortened to
+\csq\pt\ch\{\name\ch\} if \name\ has not already been named or if
+another coordinate is not expected. In this case the default position
+is chosen. Global and type-specific defaults can be set using \index
+tm{ptpoint}.
+
+\side
+\ptpoint=.75 \ptpoint{One}=.5
+\Diagram
+X & \rTo \up{10pt} \pt1
+ \rTo \up{-10pt} \pt2 & Y & \rOne \up{10pt} \pt3
+ \rOne \up{-10pt} \pt4 & Z \\
+\Modify
+\Two \pt1 \pt2
+\Two \pt3 \pt4
+\endDiagram
+\endside
+
+A type-specific \csq\ptpoint\ can be unset, causing the global value
+to be used, by making an empty assignment of the form
+\csq{\ptpoint\ch\{\type\ch\}=\ch\{\ch\}}.
+
+Global and type-specific assignments can also be made with
+\index tm{ptpush} and \index tm{atpush}. The ends of an arrow of cell
+type \type\ attached to another arrow are shortened by the sum of the
+global and type-specific \csq\ptpush. The ends of an arrow attached
+to an arrow of cell type \type\ are shortened by the sum of the global
+and type-specific \csq\atpush.
+
+\ifAAAA \else \newpage \fi
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Defining New Diagram Types}
+
+Before actually typesetting a diagram, \csq\Diagram\ begins a group and
+expands \index tm{everyDiagram}. Similarly there a control sequences
+\index tm{everyFigure} and \index tm{everyGraph}. The control
+sequences \index tm{newDiagram}, \index tm{newFigure} and \index
+tm{newGraph} allow one to further customize the setup for a named
+class of diagrams.
+
+Expansion of
+\@\newDiagram{@\\type\@}@\ is roughly equivalent to the following.
+\indented %
+\@\def\@\\type\@{\bgroup\everyDiagram\every@\\type\@\D@Diagram}@\
+\@\def\end@\\type\@{\D@endDiagram\egroup}@\
+\@\let\every@\\type\@\relax@\
+\endindented
+Here \csq{\D@Diagram} and \csq{\D@endDiagram} are a pair of
+inaccessible control sequences in terms of which \csq{\Diagram} and
+\csq{\endDiagram} are similarly defined. Thus, the setup for diagrams
+of type \type\ is customized by redefining
+\csq\every\type.
+
+\eg
+\newDiagram{Diag}
+\def\everyDiag{\flexible \xgrid=0pt}
+
+\Diag
+\cdots & \rTo & H_n A & \rTo & H_n X & \rTo & H_n(X,A) & \rTo & H_{n-1}A & \rTo & \cdots \\
+\endDiag
+\endeg
+
+The diagram type \sindex tw{Diag@{\tt Diag}}{\tt Diag} is predefined in
+\kuvio. The other predefined diagram types are \sindex tw{Dg@{\tt Dg}}{\tt Dg}
+and \sindex tw{Long@{\tt Long}}{\tt Long}, both of which have \index
+tm{flexible} and \csq{\xgrid=0pt} in addition to adjusting the values
+of certain parameters.
+
+By a \iindex tw{Diagram} (capitalized) we will mean any diagram
+typeset using \csqq\Diagram\endDiagram\ or any pair associated with a
+diagram type defined using \index tm{newDiagram}. We will similarly
+use the terms \iindex tw{Figure} and \iindex tw{Graph}.
+
+Rather than make global changes to the parameters available in \kuvio,
+it is probably always best to identify the various kinds of diagrams
+one is interested in and then define diagram types for each of
+these. The predefined types have been set up with the author's
+interests and tastes in mind but a little experimentation should yield
+other useful possibilities.
+
+The following example uses \iindex tw{incremental assignment}, which
+is available for all dimension assignments made available by \kuvio.
+
+\side
+\newDiagram{Cat}
+\def\everyCat{\everyDiag\cellwidth+=25pt\ygrid+=-1mm}
+
+\Cat
+ & & \stop & \rTo \pt t & \stop \\
+ & \rTo _f & \stop & \rTo \pt m & \stop & \rTo _g & \\
+ & & \stop & \rTo \pt b & \stop \\
+\Modify
+\Two \pt t \pt m <\alpha
+\Two \pt m \pt b <\beta
+\endCat
+\endside
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Flexible Grids}
+\label{Flexible Grids}
+
+Expansion of the control sequence \index tm{flexible} alters the way
+in which the macros in \kuvio\ position vertical grid lines in a
+Diagram. Rather than simply spacing them uniformly, they are instead
+placed using the knowledge of the particular vertices and arrows
+occuring in the Diagram.
+
+The vertical grid lines in a flexible grid gravitate toward a single
+column, the \iindex tw{gravitating column}. By default this will be
+the centermost column, or columns in case of an even number, but the
+gravitating column can also be set explicitly using the control
+sequence \index tm{grav}. For many diagrams though, especially
+simpler ones, the actual column will be immaterial.
+
+Columns gravitate in such a way as to ensure that the distance between
+adjacent vertices which do not otherwise have a horizontal arrow
+between them are at least \csq\xgrid\ apart. When \csq{\xgrid=0pt}
+this behaviour can be used to make adjacent entries abut.
+
+\eg
+\def\xc#1{#1\cdots#1}
+
+\Dg
+v_1\xc\otimes v_k & \rMapsto & v_k\xc\otimes v_1 \\
+T(V) & \rTo & T(V) \\
+\dTo <\theta & & \dTo >\theta \\
+C(V,q) & \rTo & C(V,q) \\
+v_1\cdots v_k & \rMapsto & v_k\cdots v_1 & {} \equiv (v_1\cdots v_k)^* \\
+\endDg
+\endeg
+
+Alignment entries are always centered on the column in which they
+occur. Notice how the two rightmost entries in the following example
+lie in different columns of the alignment.
+
+\eg
+\Dg
+A & & SO(4) & {} \approx S^3\times SO(3) \\
+\dMapsto & & \dTo \\
+[Ae_1] & \qquad & SO(4)/SO(3) & & {} \approx S^3 \\
+\endDg
+\endeg
+
+The parameter \index tm{cellwidth} controls the minimum distance
+between vertices the ends of a horizontal arrow. Other components of a
+particular diagram may, of course, cause this distance to increase but
+for Diagrams consisting of a single row arrows will be of a uniform
+length.
+
+\eg
+\cellwidth=25pt
+\Diag
+\cdots & \rTo &
+\pi_j S^k & \rTo & \pi_j V(n,k) & \rTo & \pi_j V(n-1,k+1) & \rTo & \pi_{j-1} S^k &
+\rTo & \cdots \\
+\endDiag
+\endeg
+
+There are two parameters which control the distance between columns
+containing the vertices at the ends of a diagonal arrow. Unless one of
+the the \index tm{lb}, \index tm{rb} or \index tm{db} modifiers is
+specified, the distance between the centers of the columns containing
+the two vertices at either end of such an arrow will be at least
+\index tm{columndist}. If one of these modifiers is specified, \index
+tm{bracewidth} will instead be used to position columns in the
+following manner.
+$$
+\scale=1.5
+\let\labelstyle\textstyle
+\Diagram
+\frame\phantom{XXX}\endframe \\
+ & \rdDashto \\
+ & & \frame\phantom{XX}\endframe \\
+\Modify
+\Line (2,0) (3.2,0) \tl\bullet \jt \hd{(R_r,C_r)}
+\Math{(R_\ell,C_r)} (2,2) *{-.2}
+\Line (0,2) (-1.3,2) \tl\bullet \jt \hd{(R_\ell,C_\ell)}
+\Math{(R_r,C_\ell)} (0,0) *{1.2}
+\Bij (0,0) (2,0) \tl\bullet _{d_\ell}
+\Bij (0,2) (2,2) \hd\bullet ^{d_r}
+\endDiagram
+\qquad
+\vcenter{\hsize=.4\ifAAAA 0\else 1\fi\hsize
+Suppose the vertices at the two ends of a diagonal arrow have row and
+column coordinates $(R_\ell,C_\ell)$ and $(R_r,C_r)$ with $C_\ell <
+C_r$. If \csq\lb\ is specified then the distance $d_\ell$ from the
+vertex at $(R_r,C_\ell)$ to the vertex at $(R_r,C_r)$ will be at least
+\csq\bracewidth. If \csq\rb\ is specified then the distance $d_r$
+from the vertex at $(R_\ell,C_\ell)$ to the vertex at $(R_\ell,C_r)$
+will be at least \csq\bracewidth. If \csq\db\ is specified then both
+requirements will be met.}
+$$
+Note that specifying \index tm{db} is not equivalent to specifying
+both \csq\lb\ and \csq\rb: The last modifier specified will take
+precedence.
+
+We will refer to a diagonal arrow as being either \sindex
+tw{arrows!braced}\emph{braced} or \sindex
+tw{arrows!unbraced}\emph{unbraced} depending on whether
+\csq\bracewidth\ or \csq\columndist\ has been used in positioning the columns
+containing its head and tail vertices. We will also distinguish
+between \sindex tw{arrows!fully braced}\emph{fully braced},
+\sindex tw{arrows!left braced}\emph{left braced} and
+\sindex tw{arrows!right braced}\emph{right braced}
+diagonal arrows, the latter two having been specified using the
+\csq\lb\ and \csq\rb\ modifiers respectively.
+
+The control sequence \index tm{braced} causes all diagonal arrows to
+be fully braced by default. It also inverts the action of \index
+tm{db} so that diagonal arrows will be unbraced only when this
+modifier is specified. The control sequence \index tm{loose} resets
+the behaviour to the default and, additionally, sets
+\csq{\columndist=0pt}. This may be appropriate for certain triangular
+diagrams.
+
+\ifAAAA \newpage \fi
+
+The control sequence \csq\bb\ in the following (and other) examples invokes the
+beautiful bbm family of fonts.
+
+\side
+\loose
+\Dg
+ & & {\bb R}^2 \\
+ & \ldTo & & \rdTo \\
+C({\bb R}^2,-g)&& \rTo & & {\bb H} \\
+\endDg
+\endside
+
+\ifAAAA \else \newpage \fi
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Predefined Cell Types}
+
+There are a number of fill macros defined in \kuvio.
+
+\def\testfill#1{\leavevmode\hbox to 8cm{\csq#1\hfil\hbox to 3cm{#1}}\par}
+
+\null{\parskip=0pt\parindent=25pt
+%\testfill\leftarrowfill
+%\testfill\rleftarrowfill
+%\testfill\Leftarrowfill
+%\testfill\leftharpoonupfill
+%\testfill\leftharpoondownfill
+%\testfill\hookleftarrowfill
+%\testfill\leftintofill
+%\testfill\lleftarrowfill
+%\testfill\leftepifill
+%\testfill\rlleftarrowfill
+%\testfill\llleftarrowfill
+%\testfill\rllleftarrowfill
+%\testfill\rightarrowfill
+\testfill\lrightarrowfill
+%\testfill\Rightarrowfill
+\testfill\rightharpoonupfill
+\testfill\rightharpoondownfill
+\testfill\hookrightarrowfill
+\testfill\rightintofill
+\testfill\rrightarrowfill
+\testfill\rightepifill
+\testfill\lrrightarrowfill
+\testfill\rrrightarrowfill
+\testfill\lrrrightarrowfill
+%\testfill\relbarfill
+\testfill\linefill
+%\testfill\Relbarfill
+\testfill\barfill
+\testfill\cdotfill
+\testfill\mapstofill
+\testfill\leftrightarrowfill
+\testfill\Leftrightarrowfill
+%\testfill\leftarrowxfill
+%\testfill\leftarrowxxfill
+%\testfill\xleftarrowxfill
+%\testfill\leftarrowxxxfill
+%\testfill\xxleftarrowxfill
+\testfill\rightarrowxfill
+\testfill\rightarrowxxfill
+\testfill\xrightarrowxfill
+\testfill\rightarrowxxxfill
+\testfill\xxrightarrowxfill
+%\testfill\lleftarrowxfill
+%\testfill\lleftarrowxxfill
+%\testfill\xlleftarrowxfill
+%\testfill\lleftarrowxxxfill
+%\testfill\xxleftarrowxfill
+\testfill\rrightarrowxfill
+\testfill\rrightarrowxxfill
+\testfill\xrrightarrowxfill
+\testfill\rrightarrowxxxfill
+\testfill\xxrrightarrowxfill
+%\testfill\llleftarrowxfill
+%\testfill\llleftarrowxxfill
+%\testfill\xllleftarrowxfill
+%\testfill\llleftarrowxxxfill
+%\testfill\xxllleftarrowxfill
+\testfill\rrrightarrowxfill
+\testfill\rrrightarrowxxfill
+\testfill\xrrrightarrowxfill
+\testfill\rrrightarrowxxxfill
+\testfill\xxrrrightarrowxfill
+}
+
+Several of these also have leftward variants.
+Of course, all can be used in diagrams, the nicest way
+being to define a new cell type using \index tm{newcell}.
+
+The following cell types are predefined in \kuvio.
+
+\def\testcell#1{\leavevmode
+ \hbox to 6cm{{\tt #1}\hfil\csname #1box\endcsname{3cm}}\par}
+
+\null{\parskip=0pt\parindent=25pt
+\testcell{To}
+\testcell{Mapsto}
+\testcell{Into}
+\testcell{Epi}
+\testcell{Line}
+\testcell{Bij}
+\testcell{Nul}
+\testcell{Two}
+\testcell{Bar}
+\testcell{Eq}
+\testcell{Null}
+\testcell{Dots}
+}
+
+The difference between a {\tt Nul} cell and a {\tt Null} cell is the
+value of their respective label pads. The former acts like a phantom
+{\tt To} cell, the latter like a phantom {\tt Two} cell. Phantom cells
+can also be realized using the \csq{\nl} modifier. The type {\tt One}
+can be used synonymously with {\tt To}. The type {\tt Impl} can be
+used synonymously with {\tt Two}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Another Font: arrsy10}
+\label{Another Font: arrsy10}
+
+Expanding the control sequence \index tm{arrsy}
+causes the author's \index tw{arrsy10} font to be
+loaded.\footnote{$^\dagger$}%
+{Use of this font is entirely optional and \csq\arrsy\ will result in an error
+if arrsy10 has not been installed. Also, users of \LaTeX\ should use the {\tt
+arrsy} option to the {\tt kuvio} package in place of the control sequence
+\csq\arrsy, as described in \ref{Using kuvio with LaTeX}.}
+The following fills then become available.
+
+\null{\parskip=0pt\parindent=25pt
+%\testfill\Leftharpoonupfill
+%\testfill\Leftparafill
+%\testfill\Leftharpoondownfill
+%\testfill\Leftallofill
+\testfill\Rightharpoonupfill
+%\testfill\Rightallofill
+\testfill\Rightharpoondownfill
+%\testfill\Rightparafill
+%\testfill\Lleftarrowfill
+\testfill\Rrightarrowfill
+%\testfill\Rrelbarfill
+\testfill\equivfill
+%\testfill\Lleftrightarrowfill
+%\testfill\dashbarfill
+\testfill\dashfill
+\testfill\rightdashfill
+%\testfill\leftdashfill
+\testfill\rightepifill
+%\testfill\leftepifill
+\testfill\rightmonofill
+%\testfill\leftmonofill
+\testfill\rightmonotailfill
+%\testfill\leftmonotailfill
+\testfill\rightisofill
+%\testfill\leftisofill
+\testfill\rightdashmonofill
+%\testfill\leftdashmonofill
+\testfill\rightdashmonotailfill
+%\testfill\leftdashmonotailfill
+\testfill\rightdashepifill
+%\testfill\leftdashepifill
+\testfill\rightdashisofill
+%\testfill\leftdashisofill
+\testfill\squigglefill
+}
+
+The following cell types also become available.
+
+\null{\parskip=0pt\parindent=25pt
+\testcell{Allo}
+\testcell{Para}
+\testcell{Three}
+\testcell{Equiv}
+\testcell{Nulll}
+\testcell{Dash}
+\testcell{Dashto}
+\testcell{Mono}
+\testcell{Tail}
+\testcell{Iso}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Fill Cells and Box Cells}
+
+Both fill and box macros can be used to specify arrows in a diagram
+without defining a new cell type. This (especially the former) may be
+useful for seldomly used arrows. The macros in question are used
+exactly as if we had defined cell types {\tt Fillcell} and {\tt
+Boxcell} except that the cell macros associated with these types
+accept a single argument, a fill or box macro.
+
+\side
+\Diagram
+A & \rFillcell\lrightarrowfill ^f & B \\
+\endDiagram
+\endside
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Breaking Arrows}
+
+White rules can be used to break arrows in a more general way than is
+provided for by \csq{\stop}. The modifier \sindex
+tw{arrows!breaking}\index tm{br} causes an arrow to be typeset on top
+of a white rule.
+
+\side
+\Graph{3cm,3}{2cm,2}
+\To (2,2) (2,0)
+\Line (0,1) (3,1) \br
+\Two (1,2) (1,0) \br
+\endGraph
+\endside
+
+The order in which arrows are typeset here is significant: Cell macros
+are processed from left to right and top to bottom. The \index
+tm{pp} modifier can be used to change the order in which alignment
+cells are typeset.
+
+The modifier \index tm{rl} causes a white rule to be
+typeset in place of an arrow.
+
+Global and type-specific assignments made with \index tm{breakpad}
+determine the width of the rule used with \csq\br\ or \csq\rl. The
+width used with an arrow of cell type \type\ is twice the sum of an
+optional dimension passed as an argument to \csq\br\ or \csq\rl\ and
+the global and type-specific values of \csq{\breakpad}.
+
+The cell type \sindex tw{Rule@{\tt Rule}}{\tt Rule} can also used to
+typeset rules as arrows in a diagram. In this case the \index tm{rw}
+modifier can be used to set the width of the rule. The default width
+can be set using \index tm{Rulewidth}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Shades of Gray}
+
+The pair \index tp{gr}\endgr\ can be used to typeset material in
+shades of gray.
+
+\side
+\gr{.5}\vrule width 1cm height 12pt\endgr
+\endside
+
+The \iindex tw{graylevel} should lie between 0 (black) and 1 (white)
+inclusive. There are also pairs \index tp{gray}\endgray\ for a
+graylevel which can be set using \index tm{graygray} (the predefined
+value being .5), \index tp{black}\endblack\ for graylevel 0 and
+\index tp{white}\endwhite\ for graylevel 1. Arrows and modifications
+can be typeset in shades of gray using the first control sequence of
+one of the above pairs as a modifier.
+
+\side
+\Diagram
+A & \rTo \gray & B \\
+\endDiagram
+\endside
+
+Shades of gray may print unsatisfactorily on some printers.
+
+\ifAAAA \else \newpage \fi
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Frames and Shades}
+
+The pair \index tp{frame}\endframe\ can be used to put a frame around
+the enclosed material. This material should not contain any vertical
+commands (unless enclosed in a box).
+
+\eg
+\input calc % my calculus macros
+
+Laplacian:\quad
+\frame$\displaystyle
+ \Delta f = \p\wrt{x^i}\left( g^{ki} \p f\wrt{x^k} \right)
+ + g^{kj} \p f\wrt{x^k} \Gamma^i_{ij}
+$\endframe
+\endeg
+
+The thickness of the rule can be changed by making an assignment to
+\index tm{framerulewidth} while the padding around the formula can be
+changed by making an assignment to \index tm{framepad}. Padding can
+also be applied selectively to the sides of the material being framed
+using \index tm{lpad}, \index tm{rpad}, \index tm{bpad} and \index
+tm{tpad}. The graylevel of the frame can be changed using
+\index tm{framegray}. One can put a frame around a diagram using
+\index tm{framed}.
+
+The pair \index tp{shade}\endshade\ places a shadow behind a frame.
+The offsets of the bottom left and top right corners of the shadow
+must be specified as two coordinate pairs.
+
+\eg
+\framepad=1cm \shadegray=.5
+\shade{10pt,-10pt}{5pt,-5pt}\vbox{\hsize=.8\hsize
+``Om man l\"aser svenska k\"arleks visor fr\aa n 1600--talet \"ar det
+sl\aa ende hur vanligt det \"ar att de \"alskande drar sig undan och m\"ots i
+den gr\"ona naturen. F\"or de allra flesta var det endast d\"ar som man kunde
+uppn\aa\ n\aa gon sann avskildhet; under denna epok var sex en
+syssels\"attning som i h\"og grad idkades under \"oppen himmel.''\par
+Peter Englund, {\it F\"orflutenhetens Landskap}.}\endshade
+\endeg
+
+Frames and solid boxes can be typeset as modifications using
+\index tm{Frame} and \index tm{Box}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Rotation and Reflection}
+
+There are several control sequence pairs in \kuvio\ for performing
+rotations and reflections. The material enclosed by these pairs is
+enclosed in an \csq\hbox\ and should not contain any vertical commands
+unless enclosed in a \csq\vbox.
+
+Let us play with the following {\tt .eps} file.
+
+\eg
+\epsffile{face.eps}
+\endeg
+
+{\escapechar=-1
+ \xdef\verbatimhook{\string\\vbhook}
+}
+{\catcode`\_=11 \catcode`\^^M=12 \endlinechar=-1 %
+ \gdef\hookedverbatim#1^^M{\def\_found{#1}%
+ \ifx\_found\_endverbatimverbatim
+ \def\_next{\egroup\endverbatim}%
+ \else
+ \ifx\_found\verbatimhook
+ \def\_next{\let\_everyline\verbatimline
+ \let\_everyendline\verbatimendline
+ \def\verbatimline{\leavevmode\bgroup\verbatimit}%
+ \def\verbatimendline{\egroup\par
+ \let\verbatimline\_everyline
+ \let\verbatimendline\_everyendline}
+ \hookedverbatim}%
+ \else
+ \def\_next{\verbatimline #1\verbatimendline\hookedverbatim}%
+ \fi
+ \fi
+ \_next}
+}
+
+\ifAAAA
+\newpage
+
+The pair \index tp{flip}\endflip\ rotates material by 180 degrees.
+
+\eg
+\flip\epsffile{face.eps}\endflip
+\endeg
+\fi
+
+The pair \index tp{land}\endland\ rotates material by 90 degrees
+counterclockwise. Similarly, the pair \index tp{opland}\endopland\
+rotates material by 90 degrees clockwise.
+
+\eg
+\land\epsffile{face.eps}\endland \opland\epsffile{face.eps}\endopland
+\endeg
+
+A diagram can be rotated using \index tm{landscape} or \index
+tm{oplandscape}.
+
+{\expandafter\let\csname _verbatimverbatim\endcsname\hookedverbatim
+\verbatim
+{\bf George W. Whitehead}, {\it Elements of Homotopy Theory}, page 592.
+\bigskip
+$$
+\landscape \let\labelstyle\textstyle \cellpad=10pt
+\Diagram
+\vbhook
+blah, blah, blah ...
+\endDiagram
+$$
+\endverbatim
+}
+
+\newpage
+{\bf George W. Whitehead}, \emph{Elements of Homotopy Theory}, page 592.
+\bigskip
+{\compileto{tdwk/eg03}
+ \input eg/eg03
+}
+\newpage
+
+\ifAAAA
+\else
+The pair \index tp{flip}\endflip\ rotates material by 180 degrees.
+
+\eg
+\flip\epsffile{face.eps}\endflip
+\endeg
+\fi
+
+Material can also be reflected across horizontal or vertical mirrors.
+
+\eg
+\hmir\epsffile{face.eps}\endhmir
+\endeg
+
+\side
+\vmir Who me, get carried away?!\endvmir
+\endside
+
+One can also rotate material by an arbitrary angle using \index
+tp{rot}\endrot\ but be aware that this pair does not modify the
+bounding box of the rotated material.
+
+\verbatim
+\rot{45}\epsffile{face.eps}\endrot
+\endverbatim
+\vskip12mm
+\rot{45}\epsffile{face.eps}\endrot
+\vskip5mm
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Compilation}
+
+Due to the large number of computations being performed, typesetting
+large diagrams can be rather time-consuming. The control sequence
+\index tm{compileto} can be used to compile a diagram into a form
+which the macros in \kuvio\ can typeset more quickly. The information
+contained in a diagram is then written to two files having the
+extensions {\tt .kdg} and {\tt .kuv}.
+
+\verbatim
+\compileto{stable}
+\endverbatim
+\eg
+\Long
+0 & & & & & & 0 \\
+\dEq & & & & & & \dEq \\
+\pi_{n+1} S^k & \rTo & \pi_n O(k) & \rTo & \pi_n O(k+1) & \rTo & \pi_n S^k \\
+\endLong
+\endeg
+
+Expansion of \@\compileto{@\\name\@}@\ causes the next diagram in the input
+(at a given level of grouping) to be compiled to, or read from, the files
+\sindex tw{kdg@{\tt\leavevmode\llap{.}kdg}}%
+\sindex tw{kdg@{\tt\leavevmode\llap{.}kuv}}%
+\name{\tt .kdg} and \name{\tt .kuv}.
+If these files already exist, then the text of the diagram is compared
+with the contents of \name{\tt .kdg} to determine whether or not the
+diagram should be recompiled or read from
+\name{\tt .kuv}.
+
+To force the recompilation of a diagram, \index tm{recompileto} can
+be used in place of \csq{\compileto}. The control sequence \index
+tm{recompile} can also be used to force recompilation at a given
+level of grouping. The control sequence \index tm{nocompile} can be
+used to turn off compilation at a given level of grouping. Note that
+\csq\global\csq\recompile\ and \csq\global\csq\nocompile\ behave as expected.
+
+Compilation can be automated using \csq\autocompileto. Expansion of
+\@\autocompileto{@\\name\@}@\ allocates a count register, \index
+tm{autocompilecounter}, and causes the tokens
+\indented %
+\@\global\advance\autocompilecounter by 1@\
+\@\compileto{@\\name\@-\the\autocompilecounter}@\
+\endindented
+to be expanded just prior to each expansion of \csq\everyDiagram,
+\csq\everyFigure\ or \csq\everyGraph.
+Each subsequent expansion of \csq\autocompileto\ resets
+\csq\autocompilecounter\ to zero.
+Note that \csq\autocompilecounter\ is incremented even if
+\csq\nocompile\ has been specified.
+
+The control sequence \index tm{autocompile} is an abbreviation for
+\@\autocompileto{.\jobname}@\.
+
+\verbatim
+\input kuvio \autocompile
+\endverbatim
+\hskip\egindent{\verbatimit blah, blah, blah...}
+
+Be aware that compilation hard codes much information into {\tt .kuv}
+files. While changes to diagram input are detected during future \TeX
+ings, changes to many parameters which affect the layout of components
+of a diagram are not. It may be necessary to use \index
+tm{recompile} to have such changes propagate to compiled files. Note
+that whether or not \csq\gridlines\ was specified when a diagram was
+compiled will be detected by the macros. Also, parameters and control
+sequences which affect only the box containing a diagram
+(\csq\Diagrampad, \csq\lpad, \csq\landscape, \csq\deep, etc) can be
+safely applied to a diagram which has already been compiled.
+
+\ifAAAA \else \newpage \fi
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Making Definitions}
+
+\TeX\ associates a category code with each character of input and once
+a category code has been assigned it cannot be changed. Unfortunately,
+since several category codes are changed between diagram delimiters
+like \csqq\Diagram\endDiagram, an ordinary \index tm{def} having
+diagram macros in the replacement text may not behave as expected. In
+particular, the following characters require special consideration.
+\code
+( * / : < > ^ _ |
+\endcode
+Each of these should be preceded by a backslash when
+used as a modifier in a macro definition.
+
+\eg
+\def\ReallySimpleRightwardArrow#1#2#3{%
+ \Dg #1 & \rTo \^{#2} & #3 \\ \endDg}
+
+\ReallySimpleRightwardArrow{X^I}{e_0}X
+\endeg
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Name Clashes}
+
+Macros are loaded safely from \kuvio. If a name conflict is detected
+for an accessible control sequence (except for those having the string
+``kuvio'' as part of their names), a message announces the
+conflict. The control sequence is then either made available through
+the control sequence \index tm{kuviocs}, or it is redefined and the
+old definition is made available through the control sequence \index
+tm{nonkuviocs}.
+
+For example, \index tw{LaTeX@\LaTeX} defines \index tm{center}. This
+control sequence is not redefined by \kuvio: One must use
+\@\kuviocs\center@\ to access the control sequence documented on page
+\pageref{center def}. Also, {\tt plain.tex} defines \index
+tm{land}. This control sequence {\sl is\/} redefined by
+\kuvio: The version defined in {\tt plain.tex} can be accessed as
+\@\nonkuviocs\land@\. (It is also available as
+\csq\wedge\ since {\tt plain.tex} make this equivalent to \csq\land.)
+
+If a control sequence has not been defined by \kuvio, then prefixing
+it by \csq\kuviocs\ or \csq\nonkuviocs\ does nothing.
+
+The control sequence \index tm{kuvioforce} can be used to force
+redefinition of a control sequence which \kuvio\ makes available
+through \csq\kuviocs.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Using kuvio.tex with \LaTeX}
+\label{Using kuvio with LaTeX}
+
+Users of \sindex tw{LaTeX@\LaTeX!aka \LaTeXe}\LaTeX
+\footnote{$^\dagger$}{\LaTeXe, not \LaTeX\ 2.09.}
+can load \kuvio\ via the package file {\tt kuvio.sty} using the
+\@\usepackage{kuvio}@\ declaration. This package provides the option
+{\tt arrsy} which should be used in place of the control sequence
+\csq\arrsy. This option causes the \LaTeX\ package file {\tt
+arrsy.sty} to be loaded in place of its {\tt plain} \TeX\ counterpart
+{\tt arrsy.tex}.
+
+\verbatim
+\usepackage[arrsy]{kuvio}
+\endverbatim
+
+There are also options {\tt autocompile}, {\tt gridlines}, {\tt
+kuviofmt}, {\tt nocompile}, {\tt overgrid} and {\tt recompile} which
+can be used in place of the corresponding control sequences to affect
+global changes on a document, although none of these options offer any
+additional functionality.
+
+Diagrams should still be input using the
+\ch\\\emph{type} \csq\end\emph{\type} syntax and {\sl not\/}
+the \LaTeX\ environment syntax, \@\begin{@\\emph{type}\@}@\
+\@\end{@\\emph{type}\@}@\. The latter may appear to work but will fail when
+diagrams are being compiled.
+
+Several environments in the {\tt amsmath} package of
+\sindex tw{AMSLaTeX@\AMSLaTeX}\AMSLaTeX\ read their
+bodies as the argument of a delimited macro. This has the side effect
+of setting the category codes of all the characters in the body before
+its expansion. This is causes trouble for \kuvio\ since it wants to
+change several catcodes between a pair of diagram delimiters. To get
+around this the control sequence \index tm{forcekdg} will cause
+diagrams at the same level of grouping that are not already being
+compiled to be written to and then read from the file
+\csq{\jobname.kdg}, thereby circumventing any catcode assignments
+already made between a pair of diagram delimiters. This can be
+affected globally in \LaTeX\ by loading the {\tt kuvio} package with
+the {\tt forcekdg} option.
+
+\csq\forcekdg\ is expanded automatically if the {\tt amsmath} package
+is being used. If you don't want this, load {\tt kuvio} with the {\tt
+unforcekdg} option.
+
+The \LaTeX\ user should also aware of the following section when placing
+diagrams in an alignment-like environment.
+
+%*****************************************************************************
+\section{Specifying Diagrams in Alignments}
+\label{Specifying Diagrams in Alignments}
+
+Due to the nature in which \TeX\ processes alignments, it is an
+unfortunate necessity that a diagram specified inside an \index
+tw{alignment} (\csq\halign, etc) be enclosed in a pair of braces.
+
+\eg
+$$
+\eqalign{
+ {\rm equalizer:}\qquad& {\Dg X & \rTo & Y & \rTo \up{3pt}
+ \rTo \up{-3pt} & Z \\ \endDg}\cr
+ \noalign{\medskip}
+ {\rm coequalizer:}\qquad& {\Dg X & \rTo \up{3pt}
+ \rTo \up{-3pt} & Y & \rTo & Z \\ \endDg}\cr
+}
+$$
+\endeg
+
+The same consideration should be bourn in mind by \LaTeX\ and \AMSLaTeX\
+users when using any {\tt array}-like environment.
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+{\input tdwk-s }
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\input tdwk-e
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Availability}
+
+Both \kuvio\ and {\tt arrsy10} are available
+by anonymous ftp from the following location.
+\code
+ftp.math.ubc.ca:/pub/svensson
+\endcode
+They can also be found in
+$\langle${\it tex-archive}$\rangle${\tt /macros/generic/diagrams/kuvio}
+on any of the following CTAN hosts.
+\code
+ftp.dante.de (Deutschland)
+ftp.tex.ac.uk (England)
+ftp.cdrom.com (USA)
+\endcode
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Copyright}
+
+The file \kuvio\ may be freely distributed and used, with the
+following restrictions.
+
+{\leftskip=15pt
+\def\pt#1 {\leavevmode\llap{\hbox to 15pt{#1.\hss}}}
+\pt1 Substantial use of \kuvio\ in any published work should be suitably
+acknowledged.
+
+\pt2 No changes or modifications are to be made to \kuvio.
+
+\pt3 The documentation, \emph{Typesetting diagrams with kuvio.tex},
+must be distributed with \kuvio.
+
+}
+
+I would enjoy receiving a copy of any book, journal
+article or thesis prepared using \kuvio.
+
+Thank you.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Final Thoughts}
+
+This document was written using {\tt plain.tex}, {\tt epsf.tex} (from
+the {\tt dvips} distribution) and homegrown macros.
+
+Remember to use grouping and diagram types to keep changes local to a
+particular level (as was done with the examples in this manual).
+
+As noted earlier, \csq\special\ may wreak havoc with your {\tt dvi}
+file previewer. On the NeXT, Rokicki's \TeX view\ has no trouble.
+However, older versions of \TeX view may display rotated arrows
+improperly. The version from February 1994 (last seen at {\tt
+labrea.stanford.edu:/pub/texview.tar.Z}) has fixed this problem.
+
+If you have trouble previewing a {\tt dvi} file and can preview a \PS\ file,
+the command
+\code
+dvips name.dvi -o
+\endcode
+generates the \PS\ file {\tt name.ps} from the {\tt dvi} file {\tt name.dvi}.
+Save trees. Ghostview does an excellent job of previewing \PS\ under X.
+
+Two notable limitations of \kuvio:
+(1) Diagrams cannot be nested and
+(2) there are no helpful error messages if something goes wrong.
+This will probably not change anytime soon, if ever.
+
+\opentmp\closetmp
+
+\def\csqn#1{\leavevmode\llap{\ch\\}{\tt #1}}
+\def\csqqn#1 #2{\leavevmode\llap{\ch\\}{\tt #1} \csq#2}
+
+\newpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\section{Index}
+
+The page number of a Summary entry is set in italics.
+
+\printindex
+
+\bye
+
+% Local Variables:
+% mode:TeX
+% agss-tex-jobname:"tdwk"
+% End:
diff --git a/macros/generic/diagrams/kuvio/doc/README b/macros/generic/diagrams/kuvio/doc/README
new file mode 100644
index 0000000000..64cb94cc0d
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/doc/README
@@ -0,0 +1,10 @@
+16 Jan 1996
+
+PostScript versions of the documentation can be obtained from
+
+ ftp://ftp.math.ubc.ca/pub/svensson/kuvio/
+
+in the files tdwk.ps.gz (letter) and tdwk-A4.ps.gz (A4). If this isn't
+available to you, send me an email.
+
+Anders <svensson@math.ubc.ca>
diff --git a/macros/generic/diagrams/kuvio/examples-A4.ps b/macros/generic/diagrams/kuvio/examples-A4.ps
new file mode 100644
index 0000000000..46b05ee9d3
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/examples-A4.ps
@@ -0,0 +1,5171 @@
+%!PS-Adobe-2.0
+%%Creator: dvipsk 5.58f Copyright 1986, 1994 Radical Eye Software
+%%Title: tdwk.dvi
+%%Pages: 12 0
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 612 792
+%%EndComments
+%DVIPSCommandLine: dvips -D300 tdwk -o
+%DVIPSParameters: dpi=300, comments removed
+%DVIPSSource: TeX output 1996.06.09:1515
+%%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 round sub abs 0.00001 lt{round}if}
+forall round exch round exch]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 sub]{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 userdict
+/eop-hook known{eop-hook}if showpage}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 newpath 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
+%%BeginProcSet: special.pro
+TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N
+/vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP 0 N /rwiSeen
+false N /rhiSeen false N /letter{}N /note{}N /a4{}N /legal{}N}B
+/@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit
+div /vsc X}B /@hsize{/hs X /CLIP 1 N}B /@vsize{/vs X /CLIP 1 N}B /@clip{
+/CLIP 2 N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{
+10 div /rwi X /rwiSeen true N}B /@rhi{10 div /rhi X /rhiSeen true N}B
+/@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X}B /magscale
+true def end /@MacSetUp{userdict /md known{userdict /md get type
+/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup
+length 20 add dict copy def}if end md begin /letter{}N /note{}N /legal{}
+N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath
+clippath mark{transform{itransform moveto}}{transform{itransform lineto}
+}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{
+itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{
+closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39
+0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}N
+/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1
+scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get
+ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip
+not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0
+TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR
+pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1
+-1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg
+TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg
+sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr
+0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add
+2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp
+{pop pop showpage pm restore}N end}if}if}N /normalscale{Resolution 72
+div VResolution 72 div neg scale magscale{DVImag dup scale}if 0 setgray}
+N /psfts{S 65781.76 div N}N /startTexFig{/psf$SavedState save N userdict
+maxlength dict begin /magscale true def normalscale currentpoint TR
+/psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts
+/psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx
+psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy
+scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR
+/showpage{}N /erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{
+psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
+roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
+moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict
+begin /SpecialSave save N gsave normalscale currentpoint TR
+@SpecialDefaults count /ocount X /dcount countdictstack N}N /@setspecial
+{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
+closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
+sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
+}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
+CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
+lineto closepath clip}if /showpage{}N /erasepage{}N /copypage{}N newpath
+}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{
+end}repeat grestore SpecialSave restore end}N /@defspecial{SDict begin}
+N /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{
+/SaveX currentpoint /SaveY X N 1 setlinecap newpath}N /st{stroke SaveX
+SaveY moveto}N /fil{fill SaveX SaveY moveto}N /ellipse{/endangle X
+/startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad
+yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end
+%%EndProcSet
+TeXDict begin 40258431 52099146 1000 300 300 (tdwk.dvi)
+@start /Fa 1 66 df<000C0000000C0000000C0000001E0000001E0000002F00000027
+0000002700000043800000438000004380000081C0000081C0000181E0000100E0000100
+E00003FFF000020070000200700004003800040038000C003C0008001C0008001C003C00
+1E00FF00FFC01A1A7E991E>65 D E /Fb 3 84 df<000000800000038000000780000007
+8000000F8000000F80000017800000378000002780000067800000478000008780000187
+8000010780000307800002078000040780000C078000180780001FFF80003FFF80006007
+C000C007C061C003C0738003C07F0003E0FE0003F87C0001E0380000001D1D809B1F>65
+D<0006000001000E000002000E000006000F00000E000F00001E001F00003E001700003C
+001700007C00178000FC00178001BC00238003BC002380073C0023C00E3C0043C01C3800
+41C038380041C070780081E060780081E0C0780080F180780100F7007801007F00780200
+7E007866007C0078FC0030007CFC0000007FF80000003C7000000000281B7E992E>77
+D<0003F8001FFC00307C00603C01C03C01C03003C00003C00003E00003F00001FC0000FF
+00003F80000FC00007E00003F00801F03000F07000F0F000E0F000E0F801C0FC01007F06
+003FF8000FE000161A7F9917>83 D E /Fc 45 122 df<00FE000381000601800E03801C
+01001C00001C00001C00001C00001C0000FFFF801C03801C03801C03801C03801C03801C
+03801C03801C03801C03801C03801C03801C03801C03801C0380FF8FF0141A809915>12
+D<00FF800383800603800E03801C03801C03801C03801C03801C03801C0380FFFF801C03
+801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03
+801C0380FF9FF0141A809915>I<60F0F86808080810102040050B7D990B>39
+D<60F0F07010101020204040040B7D830B>44 D<FFC0FFC00A0280880D>I<07E01C3838
+1C300C700E60066006E007E007E007E007E007E007E007E007E007E00760066006700E30
+0C381C1C3807E010187F9713>48 D<03000700FF00070007000700070007000700070007
+000700070007000700070007000700070007000700070007007FF80D187D9713>I<0F80
+106020304038803CC01CE01C401C003C003800380070006000C001800100020004040804
+100430083FF87FF8FFF80E187E9713>I<07E01838201C601E700E201E001E001C001C00
+38007007E00038001C000E000F000FE00FE00FC00F400E601C183807E010187F9713>I<
+001800180038007800F800B8013802380238043808381838103820384038C038FFFF0038
+0038003800380038003803FF10187F9713>I<30183FF03FE03F80200020002000200020
+002FC03060203000380018001C001C401CE01CE01C80184038403030E00F800E187E9713
+>I<01F807040C06180E300E300070006000E000E3E0E418E80CF00EE006E007E007E007
+600760077006300E180C0C3807E010187F9713>I<40007FFF7FFE7FFE40048008801080
+10002000400040008001800100030003000700060006000E000E000E000E000E00040010
+197E9813>I<07E01818300C2006600660067006780C3E181F3007C003E00CF8307C601E
+600FC007C003C003C00360022004181807E010187F9713>I<07E01C303018700C600EE0
+06E006E007E007E0076007700F3017182707C700070006000E000C700C7018603030600F
+8010187F9713>I<FFFF80000E00E0000E0070000E0038000E001C000E000E000E000E00
+0E0007000E0007000E0007800E0007800E0007800E0007800E0007800E0007800E000780
+0E0007800E0007000E0007000E000F000E000E000E001C000E001C000E0078000E00E000
+FFFF8000191A7F991D>68 D<FFFFF80E00380E00180E00080E000C0E00040E00040E0004
+0E01000E01000E01000E03000FFF000E03000E01000E01000E01000E00020E00020E0002
+0E00060E00040E00040E000C0E003CFFFFFC171A7F991A>I<FFFFF80E00380E00180E00
+080E000C0E00040E00040E00040E01000E01000E01000E03000FFF000E03000E01000E01
+000E01000E00000E00000E00000E00000E00000E00000E00000E0000FFE000161A7F9919
+>I<003F020001C0C60003002E000E001E001C000E001C00060038000600780002007000
+020070000200F0000000F0000000F0000000F0000000F0000000F001FFC070000E007000
+0E0078000E0038000E001C000E001C000E000E000E000300160001C06600003F82001A1A
+7E991E>I<FFE0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E
+00000E00000E00000E00000E00000E00000E00000E00080E00080E00080E00180E00100E
+00300E00700E00F0FFFFF0151A7F9918>76 D<7FFFFF00701C0700401C0100401C0100C0
+1C0180801C0080801C0080801C0080001C0000001C0000001C0000001C0000001C000000
+1C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C000000
+1C0000001C0000001C000003FFE000191A7F991C>84 D<FFC0FF800F003C000F00100007
+0020000380200003C0400001C0800000E1800000F10000007A0000003E0000001C000000
+1E0000001E00000017000000278000004380000041C0000081E0000100E0000300700002
+007800040038000C001C001E003E00FF007FC01A1A7F991D>88 D<1FC000387000383800
+101C00001C00001C0003FC001E1C00381C00701C00E01C00E01C80E01C80E03C80705F80
+1F8F0011107F8F13>97 D<FC00001C00001C00001C00001C00001C00001C00001C00001C
+00001C00001CFC001D07001E03801C01C01C00C01C00E01C00E01C00E01C00E01C00E01C
+00E01C01C01C01801E030019060010F800131A809915>I<07F81C1C381C70087000E000
+E000E000E000E000E0007000700438081C1807E00E107F8F11>I<003F00000700000700
+00070000070000070000070000070000070000070003E7000C1700180F00300700700700
+E00700E00700E00700E00700E00700E00700600700700700380F001C370007C7E0131A7F
+9915>I<07C01C3030187018600CE00CFFFCE000E000E000E0006000700438081C1807E0
+0E107F8F11>I<01F007180E381C101C001C001C001C001C001C00FFC01C001C001C001C
+001C001C001C001C001C001C001C001C001C001C00FF800D1A80990C>I<0FCF00187180
+3030007038007038007038007038003030001860002FC0006000006000007000003FF000
+3FFC001FFE00600F00C00300C00300C00300C00300600600381C0007E00011187F8F13>
+I<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C7C001D87
+001E03801E03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03
+801C0380FF9FF0141A809915>I<183C3C18000000000000FC1C1C1C1C1C1C1C1C1C1C1C
+1C1C1CFF081A80990A>I<FC00001C00001C00001C00001C00001C00001C00001C00001C
+00001C00001C1FC01C0F001C0C001C18001C20001C40001CE0001DE0001E70001C78001C
+38001C1C001C1E001C0F001C0F80FF9FE0131A809914>107 D<FC001C001C001C001C00
+1C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00
+1C001C00FF80091A80990A>I<FC7C1F001D8E63801E0781C01E0781C01C0701C01C0701
+C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701
+C0FF9FE7F81D107F8F20>I<FC7C001D87001E03801E03801C03801C03801C03801C0380
+1C03801C03801C03801C03801C03801C03801C0380FF9FF01410808F15>I<07E01C3830
+0C700E6006E007E007E007E007E007E0076006700E381C1C3807E010107F8F13>I<FCFC
+001D07001E03801C01C01C01C01C00E01C00E01C00E01C00E01C00E01C00E01C01C01C01
+801E03001D06001CF8001C00001C00001C00001C00001C00001C0000FF80001317808F15
+>I<FC781D9C1E1C1E081C001C001C001C001C001C001C001C001C001C001C00FF800E10
+808F0F>114 D<1F2060E04020C020C020F0007F003FC01FE000F080708030C030C020F0
+408F800C107F8F0F>I<0800080008000800180018003800FFC038003800380038003800
+380038003800382038203820382018201C4007800B177F960F>I<FC1F801C03801C0380
+1C03801C03801C03801C03801C03801C03801C03801C03801C03801C07800C07800E0B80
+03F3F01410808F15>I<FF0F803C07001C06001C04001C04000E08000E08000710000710
+0007100003A00003A00001C00001C00001C00000800011107F8F14>I<FE7F1F80381C07
+003C1C06001C0C04001C0E04000E1608000E1708000E170800072310000723900007A390
+0003C1A00003C1E0000180C0000180C0000180C00019107F8F1C>I<FE3F803C1E001C08
+000E10000F300007600003C00001C00001E00003E000027000043800083800181C00381E
+00FC3FC012107F8F14>I<FF0F803C07001C06001C04001C04000E08000E080007100007
+100007100003A00003A00001C00001C00001C000008000008000010000010000E10000E2
+0000E4000078000011177F8F14>I E /Fd 2 59 df<01F00FFC1C0C3000200021802E40
+3FC04000400080008000C00860303FE01F800E107F8F12>34 D<60F0F06004047D830B>
+58 D E /Fe 5 118 df<001800003800003800005800009800008C00010C00020C00060C
+0007FC00080600100600300600F81F80110E7E8D16>65 D<0808000000007098B0303060
+646870060F7D8E0B>105 D<39C02E302C30183018301830186038C03780300030006000
+F8000C0D7F880F>112 D<0E4031C060C04180C180C180C18047003B000300030006001F
+800A0D7E880E>I<6060B060B06030C060C060C060D063E03CE00C097D8812>117
+D E /Ff 10 128 df<00007F0000000003FFE00000000FFFF80000003FFFFE0000007F80
+FF000000FE003F800001FC001FC00003F00007E00007E00003F00007E00003F0000FC000
+01F8001F800000FC001F800000FC001F0000007C003F0000007E003E0000003E007E0000
+003F007E0000003F007E0000003F007C0000001F00FC0000001F80FC0000001F80FC0000
+001F80FC0000001F80FC0000001F80FC0000001F80FC0000001F80FC0000001F80FC0000
+001F80FC0000001F80FC0000001F80FE0000003F807E0000003F007E0000003F007E0000
+003F007E0000003F003F0000007E003F0000007E003F800000FE001F800000FC001FC000
+01FC000FC00001F80007E00003F00007F00007F00003F8000FE00001FC001FC00000FE00
+3F8000007F80FF0000003FFFFE0000000FFFF800000003FFE0000000007F00000029347C
+B232>79 D<007F00F801FFC7FC03FFFFFC07FFFFFC0FC1FC001F80FC001F007C001F007C
+003E003E003E003E003E003E003E003E003E003E003E003E001F007C001F007C001F80FC
+000FC1F8000FFFF0001FFFE0001DFFC0001C7F00003C0000003C0000003C0000001E0000
+001FFFF8001FFFFF000FFFFF801FFFFFC03FFFFFE03E000FF07C0003F0FC0001F8F80000
+F8F80000F8F80000F8F80000F8FC0001F87E0003F03F0007E03FE03FE00FFFFF8007FFFF
+0001FFFC00003FE0001E2E7E9E22>103 D<FCFCFCFCFCFC00000000000000000000007C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C06307CAF10>
+105 D<F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8
+000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8
+000000F8000000F8007F00F800FE00F801FC00F803F800F807F000F80FE000F81FC000F8
+3F8000F83F0000F87E0000F8FC0000F9FC0000FBFC0000FFFC0000FFFE0000FFFF0000FF
+BF0000FF1F8000FE0FC000FC0FC000F807E000F803F000F803F000F801F800F800FC00F8
+00FC00F8007E00F8003F00F8003F00F8001F80F8000FC01A327BB121>107
+D<F83F80F8FFE0F9FFF0FBFFF8FF83F8FF00F8FE00FCFC007CFC007CFC007CF8007CF800
+7CF8007CF8007CF8007CF8007CF8007CF8007CF8007CF8007CF8007CF8007CF8007CF800
+7CF8007CF8007CF8007CF8007CF8007CF8007CF8007C161F7A9E23>110
+D<001FC00000FFF80001FFFC0007FFFF000FE03F801F800FC01F0007C03E0003E03E0003
+E07C0001F07C0001F0780000F0F80000F8F80000F8F80000F8F80000F8F80000F8F80000
+F8F80000F8FC0001F87C0001F07C0001F03E0003E03F0007E01F0007C01FC01FC00FF07F
+8007FFFF0001FFFC0000FFF800001FC0001D1F7E9E22>I<F80FF83FF8FFF9FFFBFFFFF0
+FFC0FF80FF00FE00FC00FC00F800F800F800F800F800F800F800F800F800F800F800F800
+F800F800F800F800F800F800F800101F7B9E17>114 D<01FF000FFFE01FFFF83FFFF87E
+01F87C0030F80000F80000F80000F80000FC00007E00007FE0003FFE001FFF800FFFE003
+FFF0003FF80003F80000FC00007C00007C00007C40007C60007CF800F8FE03F8FFFFF07F
+FFE01FFFC001FE00161F7E9E1A>I<F80001F0FC0003F07C0003E07C0003E03E0007C03E
+0007C03E0007C01F000F801F000F801F000F800F801F000F801F000FC01F0007C03E0007
+C03E0007E03E0003E07C0003E07C0001E0780001F0F80001F0F80000F0F00000F9F00000
+F9F0000079E0000079E000007DE000003FC000003FC000001F8000001F80001C1F7F9E1F
+>118 D<FC07E0FC07E0FC07E0FC07E0FC07E0FC07E0130679AF22>127
+D E /Fg 1 46 df<8000F000FC00FF00FFE0FFFEFFFEFFE0FF00FC00F00080000F0C6785
+2A>45 D E /Fh 1 18 df<000020000010000008000004FFFFFFFFFFFF00000400000800
+0010000020180A7E8B1D>17 D E /Fi 5 115 df<004001C003C0FDC001C001C001C001
+C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001
+C001C001C001C001C001C001C001C001C003E07FFF10247CA319>49
+D<01F8000607000801801000C02000E0400070400070800078F00078F80038F80038F800
+382000780000780000700000F00000E00001E00001C0000380000700000600000C000018
+0000300000600000C0000180000300080600080400080800181000103FFFF07FFFF0FFFF
+F015247EA319>I<01FC000607000801801000C02000E07000F07800F07C00F07800F030
+00F00000E00000E00001C00001C0000380000700001C0003FC000007000003800001C000
+00E00000F0000070000078200078700078F80078F80078F00078A000704000F04000E020
+01C018038006070001FC0015257EA319>I<01FC000707000C01801800C0300060300060
+700070600030E00038E00038E00038E00038E00038E00038E00038600030700070300060
+3800E01800C00C018007070001FC0015177E9619>111 D<0E1E00FE63001E47800E8780
+0F03000F00000F00000E00000E00000E00000E00000E00000E00000E00000E00000E0000
+0E00000E00000E00000E00000E00000F0000FFE00011177F9613>114
+D E /Fj 22 122 df<000007FC00001C02000030070000600F0000E00F0000C0060001C0
+000001C0000001C0000003800000038000000380000003800000038000007FFFFC007FFF
+F8000700380007003800070038000E0070000E0070000E0070000E0070000E00E0001C00
+E0001C00E0001C00E0001C01C0001C01C0001C01C2003801C20038038400380384003803
+84003001880070018800700070007000000060000000E0000000E0000000C0000070C000
+00F1800000F1800000630000003C000000202F82A41E>12 D<007C6000C2E00382E00701
+E00E01E00E01C01C01C03C01C03C01C0780380780380780380780380F00700F00700F007
+08F00708700E10700E10701E1030262018C6200F01C015177B961B>97
+D<03C0001FC0001FC0000380000380000380000380000700000700000700000700000E00
+000E00000E00000E7C001C86001D07001E03001C03803803803803803803803803807007
+80700780700780700780E00F00E00F00E00E00E01E00601C0060380060300030600010C0
+000F000011257BA418>I<003F0000E0800180400300E00701E00E03C01C01803C00003C
+0000380000780000780000780000700000F00000F0000070004070008070010030020038
+04001C380007C00013177B9618>I<00001E0000FE0001FE00001C00001C00001C00001C
+000038000038000038000038000070000070000070007C7000C2E00382E00701E00E01E0
+0E01C01C01C03C01C03C01C0780380780380780380780380F00700F00700F00708F00708
+700E10700E10701E1030262018C6200F01C017257BA41B>I<007C0001C2000701000E00
+801C00803C0100380100780200780C00FFF000F00000F00000F00000E00000E00000E000
+00E00080E00100E002007004003008001870000F800011177A9618>I<00001E00000063
+000000C7800000CF000001C6000001800000038000000380000003800000038000000700
+00000700000007000000070000007FF80000FFF000000E0000000E0000000E0000000E00
+00001C0000001C0000001C0000001C0000001C0000003800000038000000380000003800
+0000380000007000000070000000700000007000000070000000E0000000E0000000E000
+0000E0000000C0000001C000000180000071800000F1000000F3000000620000003C0000
+00192F82A410>I<000F8C00185C00705C00E03C01C03C01C0380380380780380780380F
+00700F00700F00700F00701E00E01E00E01E00E01E00E00E01C00E01C00E03C00605C003
+1B8001E380000380000380000700000700000700700E00F00C00F018006070003FC00016
+217E9618>I<00F00007F0000FF00000E00000E00000E00000E00001C00001C00001C000
+01C000038000038000038000038F800730600740700780700780700F00700E00700E0070
+0E00701C00E01C00E01C00E01C01C03801C03801C0380382380382700384700704700708
+700308E003106001E017257DA41B>I<00E000E001E000C0000000000000000000000000
+0000000000000E0033002380438043808700870087000E000E000E001C001C001C003800
+38403840708070807080710032001C000B247BA310>I<00F00007F00007F00000E00000
+E00000E00000E00001C00001C00001C00001C0000380000380000380000380F007010807
+021C07043C07083C0E10380E20000E40000E80001F00001FE0001C38001C1C00381C0038
+0E00380E10380E10701C20701C20701C20700C40E00C4060078016257DA418>107
+D<00E00FE00FE001C001C001C001C0038003800380038007000700070007000E000E000E
+000E001C001C001C001C0038003800380038007000700071007100E200E200E200640064
+0038000B257CA40D>I<1C07C03E00261830C18043203901C043403A01C043403A01C087
+803C01C087003801C087003801C007003801C00E007003800E007003800E007003800E00
+7007001C00E007001C00E007001C00E00E081C00E00E083801C00E103801C01C103801C0
+1C203801C00C207003800C40300180078025177B962B>I<1C07C0261830432038434038
+4340388780388700388700380700380E00700E00700E00700E00E01C00E01C00E01C01C1
+1C01C13801C23803823803843801847001883000F018177B961E>I<003F0000E1800180
+C00300E00700700E00701E00703C00703C00703800F07800F07800F07800F07001E0F001
+E0F001C07003C0700380700700300E00381C001C380007C00014177B961B>I<01C0F802
+610C04320E04340604380708700708700708700700700700E00F00E00F00E00F00E00F01
+C01E01C01E01C01C01C03C03803803C07003C06003C0C0072180071E000700000700000E
+00000E00000E00000E00001C00001C0000FFC000FFC00018217F961B>I<1C0F80261040
+4320E04341E04381E08781C08700008700000700000E00000E00000E00000E00001C0000
+1C00001C00001C000038000038000038000038000070000030000013177B9616>114
+D<003E0000C1000180800300400301C006038006010007000007800003F80003FE0001FF
+00001F00000780000380300180700180F00300F00300400600400C003038000FE0001217
+7D9616>I<00300070007000E000E000E000E001C001C001C07FFEFFFC03800380038007
+000700070007000E000E000E000E001C001C001C081C08381038103820184018C007000F
+217CA012>I<0E00301100702180704180704380708380E08380E08700E00700E00701C0
+0E01C00E01C00E01C01C03801C03801C03841C03841C07081C07081C07080C0B100E3310
+03C1E016177B961C>I<01E0F006310808321C083C3C103C3C1038382038002038000038
+0000700000700000700000700000E00000E00000E01000E01061C020F1C020F1C040E2E0
+80446100381E0016177D9618>120 D<0E00181300382180384180384380388380708380
+708700700700700700E00E00E00E00E00E00E01C01C01C01C01C01C01C01C01C03801C03
+801C07800C0F8006170003E700000700000700000E00600E00F01C00F01800E030008060
+0041C0003F000015217B961A>I E /Fk 60 126 df<001C003C007800F001E003C00780
+0F000E001C001C0038003800700070007000E000E000E000E000E000E000E000E000E000
+E000700070007000380038001C001C000E000F00078003C001E000F0007C003C001C0E2A
+78A41C>40 D<6000F00078003C001E000F00078003C001C000E000E00070007000380038
+0038001C001C001C001C001C001C001C001C001C001C0038003800380070007000E000E0
+01C003C007800F001E003C007800F00060000E2A7BA41C>I<00E00000E00000E00000E0
+0000E000C0E060F0E1E0FCE7E07EEFC01FFF0007FC0001F00007FC001FFF007EEFC0FCE7
+E0F0E1E0C0E06000E00000E00000E00000E00000E00013177C9B1C>I<001800003C0000
+3C00003C00003C00003C00003C00003C00003C00003C007FFFFCFFFFFEFFFFFE7FFFFC00
+3C00003C00003C00003C00003C00003C00003C00003C00003C0000180017187E9B1C>I<
+183E7E7F3F1F070E0E1CFCF8E0080D76851C>I<7FFFF0FFFFF8FFFFF87FFFF015047D91
+1C>I<3078FCFC7830060675851C>I<0000300000780000780000F80000F00001F00001E0
+0003E00003C00007C0000780000F80000F00001F00001E00001E00003E00003C00007C00
+00780000F80000F00001F00001E00003E00003C00003C00007C0000780000F80000F0000
+1F00001E00003E00003C00007C0000780000F80000F00000F0000060000015297DA41C>
+I<00F80003FE0007FF000F07801E03C01C01C03800E03800E0700070700070700070E000
+38E00038E00038E00038E00038E00038E00038E00038E00038E00038F000787000707000
+707800F03800E03C01E01C01C01E03C00F078007FF0003FE0000F80015217DA01C>I<00
+C00001C00001C00003C00007C0000FC0003FC000FDC000F9C00061C00001C00001C00001
+C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001
+C00001C00001C00001C00001C00001C0007FFF00FFFF807FFF0011217AA01C>I<01F800
+07FF001FFF803E07C07801E07000F0E00070E00038F00038F00038600038000038000038
+0000700000700000E00001E00001C0000380000780000F00001E00007C0000F80001E000
+03C0000780000F00001E00383C00387FFFF8FFFFF87FFFF815217DA01C>I<00FE0007FF
+800FFFE01F01F03C00703C00383C00381800380000380000380000700000700000E00003
+E001FFC001FFC001FFE00001F000007800003C00001C00000E00000E60000EF0000EF000
+0EE0001C70003C7800783F01F01FFFE007FFC000FE0017217EA01C>I<000F80001F8000
+1F80003B8000738000738000E38000E38001C38003C3800383800783800703800E03801E
+03801C03803C0380380380700380F00380FFFFFEFFFFFEFFFFFE00038000038000038000
+0380000380000380000380007FFC007FFC007FFC17217EA01C>I<3FFFE03FFFE03FFFE0
+38000038000038000038000038000038000038000038000038000038000039FC003FFF00
+3FFFC03E03E03800E0300070000070000038000038000038600038F00038F00038E00070
+7000F07801E03C07C01FFF800FFE0003F80015217DA01C>I<3078FCFC78300000000000
+0000000000003078FCFC7830061775961C>58 D<183C7E7E3C1800000000000000000000
+00183C7E7E3E1E0E0E1C3CF8F0C0071E76961C>I<0000300000F80001F80003F0000FE0
+001F80007F0000FE0003F80007F0000FC0003F80007E0000FC0000FC00007E00003F8000
+0FC00007F00003F80000FE00007F00001F80000FE00003F00001F80000F8000030151C7D
+9D1C>I<7FFFFCFFFFFEFFFFFE7FFFFC0000000000000000000000000000000000007FFF
+FCFFFFFEFFFFFE7FFFFC170E7E961C>I<600000F80000FC00007E00003F80000FC00007
+F00003F80000FE00007F00001F80000FE00003F00001F80001F80003F0000FE0001F8000
+7F0000FE0003F80007F0000FC0003F80007E0000FC0000F80000600000151C7D9D1C>I<
+FFFF00FFFFC0FFFFE01C00F01C00781C00381C001C1C001C1C001C1C001C1C001C1C0038
+1C00781C00F01FFFE01FFFC01FFFE01C01F01C00781C003C1C001C1C000E1C000E1C000E
+1C000E1C000E1C001E1C001C1C003C1C00F8FFFFF0FFFFE0FFFF8017217EA01C>66
+D<FFFE00FFFF80FFFFC01C03E01C01E01C00F01C00781C00381C003C1C001C1C001C1C00
+1C1C000E1C000E1C000E1C000E1C000E1C000E1C000E1C000E1C000E1C001E1C001C1C00
+1C1C003C1C00381C00781C00F01C01F01C03E0FFFFC0FFFF80FFFE0017217EA01C>68
+D<7FFFFEFFFFFE7FFFFE0E000E0E000E0E000E0E000E0E000E0E00000E00000E00000E00
+000E03800E03800E03800FFF800FFF800FFF800E03800E03800E03800E00000E00000E00
+000E00000E00000E00000E00000E00000E00007FE000FFF0007FE00017217EA01C>70
+D<007C3801FF3807FFF80F83F80E00F81C00F83C00783800383800387000387000387000
+00E00000E00000E00000E00000E00000E00000E003FEE003FEE003FE7000387000387000
+383800783800783C00781C00F80E01F80F83F807FFB801FF38007C3817217EA01C>I<7F
+E000FFF0007FE0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E
+00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E
+00040E000E0E000E0E000E0E000E0E000E7FFFFEFFFFFE7FFFFE17217EA01C>76
+D<7E003F00FF007F807F007F001D80DC001D80DC001D80DC001D80DC001DC1DC001DC1DC
+001CC19C001CC19C001CE39C001CE39C001C631C001C631C001C771C001C771C001C361C
+001C361C001C3E1C001C1C1C001C1C1C001C001C001C001C001C001C001C001C001C001C
+001C001C001C001C001C001C007F007F00FF80FF807F007F0019217FA01C>I<7FFF80FF
+FFE07FFFF80E00FC0E003E0E001E0E000E0E00070E00070E00070E00070E00070E000E0E
+001E0E003E0E00FC0FFFF80FFFE00FFF800E00000E00000E00000E00000E00000E00000E
+00000E00000E00000E00000E00007FC000FFE0007FC00018217FA01C>80
+D<FFFC0000FFFF0000FFFF80001C07C0001C01E0001C00E0001C00F0001C0070001C0070
+001C0070001C0070001C00F0001C00E0001C01E0001C07C0001FFF80001FFF00001FFF80
+001C07C0001C01C0001C00E0001C00E0001C00E0001C00E0001C00E0001C00E0001C00E1
+001C00E3801C00E3801C00E380FF807F00FF807F00FF801C0019217EA01C>82
+D<7FFFFF80FFFFFF80FFFFFF80E01C0380E01C0380E01C0380E01C0380E01C0380001C00
+00001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C00
+00001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C00
+00001C0000001C0000001C000001FFC00003FFE00001FFC00019217FA01C>84
+D<FF007F80FF80FF80FF007F801C001C001C001C001C001C000E0038000E0038000E0038
+000F0078000700700007007000070070000780F0000380E0000380E0000380E00003C1E0
+0001C1C00001C1C00001C1C00000C1800000E3800000E3800000E3800000630000007700
+00007700000077000000360000003E0000003E0000001C000019217FA01C>86
+D<600000F00000F00000F800007800007C00003C00003E00001E00001F00000F00000F80
+0007800007C00003C00003C00003E00001E00001F00000F00000F800007800007C00003C
+00003E00001E00001E00001F00000F00000F800007800007C00003C00003E00001E00001
+F00000F00000F800007800007800003015297DA41C>92 D<00C00003E0000FF8001F7C00
+7C1F00F80F80E0038011077BA01C>94 D<7FFFF0FFFFF8FFFFF87FFFF015047D7E1C>I<
+0FF8001FFE003FFF003C07801803C00001E00000E00000E0001FE001FFE00FFFE01FE0E0
+7E00E07800E0E000E0E000E0E000E0E000E07001E07C07E03FFFFF1FFE7F03F81F18177D
+961C>97 D<FE0000FE0000FE00000E00000E00000E00000E00000E00000E00000E00000E
+1F800E7FE00FFFF00FE0780F803C0F001C0F000E0E000E0E00070E00070E00070E00070E
+00070E00070E00070F000E0F000E0F801C0FC03C0FE0F80EFFF00E7FC0061F0018217FA0
+1C>I<00FF8003FFC00FFFE01F01E03C00C0380000700000700000E00000E00000E00000
+E00000E00000E00000E000007000007000703800703C00F01F01E00FFFC003FF8000FE00
+14177C961C>I<0007F00007F00007F00000700000700000700000700000700000700000
+7000F87003FE700FFFF01F07F03C01F03800F07000F0700070E00070E00070E00070E000
+70E00070E00070E000707000F07000F03801F03C03F01E07F00FFF7F07FE7F01F87F1821
+7EA01C>I<00FC0003FF000FFF801F03C03C01C03800E07000E0700070E00070E00070FF
+FFF0FFFFF0FFFFF0E00000E000007000007800703800703E00F01F01E00FFFC003FF8000
+FE0014177D961C>I<0003F8000FFC001FFE003C1E00380C007000007000007000007000
+0070007FFFFCFFFFFCFFFFFC007000007000007000007000007000007000007000007000
+0070000070000070000070000070000070000070000070000070003FFFE03FFFE03FFFE0
+17217FA01C>I<00F07E03FDFF0FFFFF0F0F861C03801C03803801C03801C03801C03801
+C03801C01C03801C03800F0F001FFF001FFC0038F0003800001C00001C00001FFF801FFF
+E03FFFF878007C70001CE0000EE0000EE0000EE0000EE0000E70001C78003C3F01F81FFF
+F007FFC000FE0018247E961C>I<FE000000FE000000FE0000000E0000000E0000000E00
+00000E0000000E0000000E0000000E0000000E1F80000E7FE0000FFFF0000FE070000F80
+38000F0038000F0038000E0038000E0038000E0038000E0038000E0038000E0038000E00
+38000E0038000E0038000E0038000E0038000E0038000E003800FFE3FF80FFE3FF80FFE3
+FF8019217FA01C>I<01C00003E00003E00003E00001C000000000000000000000000000
+0000000000007FE000FFE0007FE00000E00000E00000E00000E00000E00000E00000E000
+00E00000E00000E00000E00000E00000E00000E00000E00000E00000E000FFFFC0FFFFC0
+FFFFC012227BA11C>I<000E001F001F001F000E00000000000000000000000007FF0FFF
+07FF00070007000700070007000700070007000700070007000700070007000700070007
+000700070007000700070007000700070007000EF01EF03CFFF87FF01FC0102E7DA11C>
+I<FE0000FE0000FE00000E00000E00000E00000E00000E00000E00000E00000E1FFC0E1F
+FE0E1FFC0E01E00E03C00E07800E0F000E1E000E3C000E78000EFC000FFC000FDE000F8F
+000F07000E03800E03C00E01C00E00E00E00F0FFE3FEFFE3FFFFE3FE18217EA01C>I<7F
+F000FFF0007FF00000700000700000700000700000700000700000700000700000700000
+700000700000700000700000700000700000700000700000700000700000700000700000
+70000070000070000070000070000070007FFFF0FFFFF87FFFF015217DA01C>I<7CF078
+00FDF8FC007FFFFE001F9FCF001E0F07001E0F07001C0E07001C0E07001C0E07001C0E07
+001C0E07001C0E07001C0E07001C0E07001C0E07001C0E07001C0E07001C0E07001C0E07
+001C0E07007F1F8FC0FF9FCFE07F1F8FC01B1780961C>I<FE1F8000FE7FE000FFFFF000
+0FE070000F8038000F0038000F0038000E0038000E0038000E0038000E0038000E003800
+0E0038000E0038000E0038000E0038000E0038000E0038000E0038000E003800FFE3FF80
+FFE3FF80FFE3FF8019177F961C>I<01FC0007FF000FFF801F07C03C01E03800E0700070
+700070E00038E00038E00038E00038E00038E00038F000787000707800F03800E03C01E0
+1F07C00FFF8007FF0001FC0015177D961C>I<FE1F80FE7FE0FFFFF00FE0780F803C0F00
+1C0F000E0E000E0E00070E00070E00070E00070E00070E00070E00070F000E0F000E0F80
+1C0FC03C0FE0F80EFFF00E7FC00E1F000E00000E00000E00000E00000E00000E00000E00
+000E00000E0000FFE000FFE000FFE00018237F961C>I<00FC380003FF38000FFFB8001F
+03F8003C01F8003800F8007000780070007800E0003800E0003800E0003800E0003800E0
+003800E0003800E000380070007800700078003800F8003C01F8001F07F8000FFFB80003
+FE380000F838000000380000003800000038000000380000003800000038000000380000
+003800000038000003FF800003FF800003FF8019237E961C>I<FF81FCFF87FEFF9FFF03
+BE0F03F80603F00003E00003C00003C00003800003800003800003800003800003800003
+8000038000038000038000038000FFFF00FFFF80FFFF0018177E961C>I<07F9C01FFFC0
+3FFFC07807C0F003C0E001C0E001C0F001C07C00003FE0001FFE0003FF80001FC00001E0
+6000F0E00070E00070F00070F800E0FE03E0FFFFC0EFFF80E1FC0014177C961C>I<00C0
+0001C00001C00001C00001C00001C00001C0007FFFF8FFFFF8FFFFF801C00001C00001C0
+0001C00001C00001C00001C00001C00001C00001C00001C00001C01C01C01C01C01C01C0
+1C01C01C00E07800FFF8007FE0001F80161E7F9D1C>I<FE03F800FE03F800FE03F8000E
+0038000E0038000E0038000E0038000E0038000E0038000E0038000E0038000E0038000E
+0038000E0038000E0038000E0038000E0038000E0078000E00F8000701F80007FFFF8003
+FFBF8000FE3F8019177F961C>I<7FC1FF00FFE3FF807FC1FF000E0038000E0038000700
+700007007000070070000380E0000380E0000380E00001C1C00001C1C00001C1C00000E3
+800000E3800000E38000007700000077000000770000003E0000003E0000001C00001917
+7F961C>I<FFC1FF80FFC1FF80FFC1FF8038000E001C001C001C001C001C001C001C001C
+001C001C001C1C1C000E3E38000E3E38000E3638000E3638000E77380006773000067730
+0007637000076370000763700007E3F00003C1E00003C1E00019177F961C>I<7FC3FE00
+7FE3FF007FC3FE000780E0000381E00001C1C00001E3800000F78000007F0000003E0000
+003C0000001C0000003E00000077000000E7000000E3800001C1C0000381E0000780E000
+070070007FC1FF00FFE3FF807FC1FF0019177F961C>I<7FC1FF00FFE3FF807FC1FF000E
+0038000F0038000700700007007000038070000380E00003C0E00001C0E00001C1C00000
+E1C00000E1C00000E180000073800000738000007300000033000000370000001E000000
+1E0000001E0000001E0000001C0000001C0000003C000000380000003800003070000078
+F0000079E000007FC000003F8000001F00000019237F961C>I<0001F8000FF8001FF800
+3E0000780000700000700000700000700000700000700000700000700000700000700000
+700000700000F00003E000FFC000FF8000FFC00003E00000F00000700000700000700000
+7000007000007000007000007000007000007000007000007000007800003E00001FF800
+0FF80001F815297DA41C>123 D<60F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0
+F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F060042974A41C>I<7C0000FF8000FFC00003
+E00000F00000700000700000700000700000700000700000700000700000700000700000
+7000007000007800003E00001FF8000FF8001FF8003E0000780000700000700000700000
+700000700000700000700000700000700000700000700000700000F00003E000FFC000FF
+80007C000015297DA41C>I E /Fl 1 66 df<0000180000000018000000001800000000
+3C000000003C000000007E000000007E000000007E000000009F000000009F000000009F
+000000010F800000010F800000020FC000000207C000000207C000000403E000000403E0
+00000403E000000801F000000801F000001801F800001000F800001000F8000020007C00
+0020007C00003FFFFC00007FFFFE000040003E0000C0003F000080001F000080001F0001
+00001F800100000F800100000F8002000007C002000007C006000007E01F800007E0FFE0
+007FFFFFE0007FFF28297DA82F>65 D E /Fm 5 117 df<00C001C001C0018000000000
+000000000000000000001F80078003800700070007000700070007000E000E000E000E00
+0E000E001C001E00FF800A1D7F9C0C>105 D<1F8F8007B0C003C0E00780E00780E00700
+E00700E00700E00700E00E01C00E01C00E01C00E01C00E01C00E01C01C03801E03C0FF9F
+F014127F9117>110 D<00FC000307000E01801C01C03800C03000C07000E07000E07000
+E0E001C0E001C0E001C0600180600380700700380E001C180007E00013127E9115>I<03
+F20C0E18061004300438043E001FE00FF007F8003C401C400C400C6018E010D0608FC00F
+127F9110>115 D<020002000200060006000C001C003C00FFE01C001C00380038003800
+380038003800700070407040704070407080708031001E000B1A7C9910>I
+E /Fn 16 109 df<1838783808101020204080050B7D830C>44 D<3078F06005047C830C
+>46 D<007C000186000303000603000C03801C03801C0380380380380380380380700700
+700700700700700700E00E00E00E00E00E00E01C00E01C00E01800E0300060600030C000
+1F000011187C9714>48 D<000800180030007001F00E7000E000E000E000E001C001C001
+C001C0038003800380038007000700070007000F00FFE00D187C9714>I<007C00018600
+0203000403800483800883801083801083801083801107001207000C0E00001C00003000
+0060000180000200000C00001001002001003C060067FE00C1FC0080F00011187D9714>
+I<003E0000C3000101800201800481C00441C0088380048380070300000600000C0001F0
+00001800000C00000C00000E00000E00600E00E01C00E01C0080380040300020E0001F80
+0012187D9714>I<000300000380000700000700000700000E00000E00000E00001C0000
+1C0000180000300000300000600000C00000C600018E00030E00021C00041C00081C0010
+1C007FB800807F80003800003800007000007000007000007000006000111F7F9714>I<
+03018003FF0003FC000220000400000400000400000400000800000BE0000C1800081800
+001C00001C00001C00001C00201C00701C00E0380080300040700040E0002180001E0000
+11187C9714>I<001E000061800180800303800603800E00001C000018000038000039F0
+00721800740C00780E00700E00F00E00E00E00E00E00E00E00E01C00E01C006038006070
+0030C0001F800011187C9714>I<09C04017E0801FF1803C1F0030020060060040040080
+0C0000080000180000300000300000700000600000E00000C00001C00001C00001800003
+800003800003800007000003000012187B9714>I<003E0000C1800100800200C00600C0
+0600C00E018007030007860003CC0001F00001F800067C000C3E00181E00300700600700
+600700C00600C00600400C006018003070000FC00012187D9714>I<007C000186000703
+000E03000C03801C0380380380380380380380380780380700380F001817000C270007CE
+00000E00000C00001C00001800E03000E0600080C000C380003E000011187C9714>I<03
+CC0E2E181C381C301C701CE038E038E038E038C072C072C07260F261341E180F107C8F14
+>97 D<7E000E000E000E001C001C001C001C00380038003BC03C307830701870187018E0
+38E038E038E038C070C060C0E060C063801E000D1A7C9912>I<1F800003800003800003
+80000700000700000700000700000E00000E00000E7C000F86001E07001E07001C07001C
+0700380E00380E00380E00381C00701C80701C80703880703900E01900600E00111A7E99
+14>104 D<1F0707070E0E0E0E1C1C1C1C3838383870707070E4E4E4E4E830081A7D990A>
+108 D E /Fo 2 83 df<0FFFF9FFE000FF803E0000C3003C0000C3003C0000C3003C0000
+C3003C0000C3003C00018600780001860078000186007800018600780001860078000186
+007800030FFFF000030C00F000030C00F000030C00F000030C00F000030C00F000061801
+E000061801E000061801E000061801E000061801E000061801E0000C3003C0000FF803E0
+00FFFF3FFC00231C7E9B23>72 D<0FFFFF000000FF81E00000C300700000C300380000C3
+003C0000C3001C0000C3001E000186003C000186003C0001860038000186007000018601
+E0000186078000030FFC0000030C0F0000030C078000030C03C000030C03C000030C01E0
+00061803C000061803C000061803C000061803C000061803C000061803C0800C3003C100
+0FF801C100FFFF01C2000000007C00211D7E9B23>82 D E /Fp 7
+112 df<00C00000C00000C00000C00000C00000C00000C00000C000FFFF80FFFF8000C0
+0000C00000C00000C00000C00000C00000C00000C00011127E8D15>43
+D<1E0061804080C0C0C0C0C0C0C0C0C0C0C0C0C0C0408061801E000A0D7E8C0E>48
+D<18F818181818181818181818FF080D7D8C0E>I<3E00418080C0C0C000C000C0018003
+000400084030407F80FF800A0D7E8C0E>I<03C000C000C000C000C01EC031C040C0C0C0
+C0C0C0C040C021C01EF00C0E7E8D10>100 D<F7CF803870C03060C03060C03060C03060
+C03060C03060C0FDFBF014097E8818>109 D<1E0061804080C0C0C0C0C0C0408061801E
+000A097E880E>111 D E /Fq 9 113 df<0000600000600000E00000C00000C00001C000
+0180000380000300000300000700000600000600000E00000C00000C00001C0000180000
+380000300000300000700000600000600000E00000C00000C00001C00001800001800003
+80000300000700000600000600000E00000C00000C00001C000018000018000038000030
+0000700000600000600000E00000C00000C0000013317E8118>14
+D<0000300000600000C0000180000300000700000E00000C000018000038000030000070
+0000E00000C00001C0000180000380000380000300000700000600000E00000E00000C00
+001C00001C00001C00001800003800003800003800003800007000007000007000007000
+00700000700000700000E00000E00000E00000E00000E00000E00000E00000E00000E000
+00E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E000
+007000007000007000007000007000007000007000003800003800003800003800001800
+001C00001C00001C00000C00000E00000E00000600000700000300000380000380000180
+0001C00000C00000E000007000003000003800001800000C00000E000007000003000001
+800000C0000060000030146377811F>18 D<C000006000003000001800000C00000E0000
+07000003000001800001C00000C00000E000007000003000003800001800001C00001C00
+000C00000E000006000007000007000003000003800003800003800001800001C00001C0
+0001C00001C00000E00000E00000E00000E00000E00000E00000E0000070000070000070
+000070000070000070000070000070000070000070000070000070000070000070000070
+0000700000700000700000700000700000700000E00000E00000E00000E00000E00000E0
+0000E00001C00001C00001C00001C0000180000380000380000380000300000700000700
+000600000E00000C00001C00001C0000180000380000300000700000E00000C00001C000
+0180000300000700000E00000C0000180000300000600000C0000014637F811F>I<0018
+007800F001E003C007800F001F001E003E003C007C007C007800F800F800F800F800F800
+F800F800F800F800F800F800F800F800F800F800F800F800F800F800F800F800F800F800
+0D25707E25>56 D<F800F800F800F800F800F800F800F800F800F800F800F800F800F800
+F800F800F800F800F800F800F800F800F80078007C007C003C003E001E001F000F000780
+03C001E000F0007800180D25708025>58 D<007C007C007C007C007C007C007C007C007C
+007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C00F800F800F8
+00F001F001E003E003C0078007000E001C003800F000C000F00038001C000E0007000780
+03C003E001E001F000F000F800F800F8007C007C007C007C007C007C007C007C007C007C
+007C007C007C007C007C007C007C007C007C007C007C007C007C007C0E4D798025>60
+D<00300000FC0001CE000703801C00E0300030C0000C1607809E17>98
+D<07C0041FE018307830601FE0800F801605809D17>101 D<0000000002000000000600
+0000000C000000000C000000001800000000180000000030000000003000000000600000
+00006000000000C000000000C00000000180000000018000000003000000000300000000
+060000000006000000000C000000000C0000000018000000001800000000300000000030
+00000000600008000060001C0000C0003C0000C000CE000180000E000180000E00030000
+07000300000700060000038006000003800C000001C00C000001C018000001E018000000
+E030000000E0300000007060000000706000000038C000000038C00000001D800000001D
+800000001F000000000F000000000E000000000600000027327C812A>112
+D E /Fr 26 127 df<006000006000006000006000006000006000006000006000006000
+006000FFFFF0FFFFF0006000006000006000006000006000006000006000006000006000
+00600014167E9119>43 D<0F0030C0606060604020C030C030C030C030C030C030C030C0
+30C03040206060606030C00F000C137E9211>48 D<0C001C00EC000C000C000C000C000C
+000C000C000C000C000C000C000C000C000C000C00FFC00A137D9211>I<1F0060C06060
+F070F030603000700070006000C001C00180020004000810101020207FE0FFE00C137E92
+11>I<0FC030707038703870380038003000E00FC0007000380018001C601CF01CF018E0
+3860701FC00E137F9211>I<006000E000E00160026006600C600860106020606060C060
+FFFC0060006000600060006003FC0E137F9211>I<60607FC07F8044004000400040004F
+0070C040E0006000700070E070E070E06040E021C01F000C137E9211>I<07C00C201070
+207060006000C000CF00D0C0E060C020C030C030C03040306020206010C00F000C137E92
+11>I<40007FFC7FF8401080308020004000800100010003000200060006000E000E000E
+000E000E0004000E147E9311>I<0FC0107020186018601870183C303F600F800FE031F0
+6078C01CC00CC00CC00C601830300FC00E137F9211>I<0F00308060404060C020C030C0
+30C0304030607030B00F30003000200060E040E08041003E000C137E9211>I<40E04000
+00000000000040E040030D7D8C09>I<7F00E1C0E0404060006007E038606060C060C064
+C06461E43E380E0D7E8C11>97 D<F00030003000300030003000300033E034303808300C
+30063006300630063006300C3808343023E00F147F9312>I<0FE0187020706020C000C0
+00C000C000C0006000201018200FC00C0D7F8C0F>I<0078001800180018001800180018
+0F98187820386018C018C018C018C018C0186018203818580F9E0F147F9312>I<0F8010
+4020206030C010FFF0C000C000C0006000201018200FC00C0D7F8C0F>I<020702000000
+00000F030303030303030303030303030343E2E67C081B82940A>106
+D<F0303030303030303030303030303030303030FC06147F9309>108
+D<F3E1F0343218381C0C30180C30180C30180C30180C30180C30180C30180C30180C3018
+0CFC7E3F180D7F8C1B>I<0FC0186020106018C00CC00CC00CC00CC00C6018601838700F
+C00E0D7F8C11>111 D<F3E034303808300C30063006300630063006300C3808343033E0
+30003000300030003000FC000F137F8C12>I<F3C034E038E03040300030003000300030
+00300030003000FE000B0D7F8C0D>114 D<F83C301830103830182018200C400C400680
+06800680030003000E0D7F8C11>118 D<F87CF8707030305820305820188840188C4018
+8C400D04800D06800D0680060300060300060300150D7F8C18>I<38407F8087000A037D
+9311>126 D E /Fs 4 122 df<FFFFC0FFFFC012027D871A>0 D<040004000400C460F5
+E03F800E003F80F5E0C4600400040004000B0D7E8D11>3 D<040E0E1C1C1C3838307070
+6060C0C0070F7F8F0A>48 D<0C000C000C000C000C000C00FFC0FFC00C000C000C000C00
+0C000C000C000C000C000C000C000C000C000C000C000C000C000C000A1A7E9310>121
+D E /Ft 1 49 df<181818303030606060C0C0050B7E8B09>48 D
+E /Fu 40 122 df<03C0000C2080183080301900601900601A00601A00C01C00C0180040
+180060280020CD001F0700110D7E8C16>11 D<003C00C20103020304030402080608FC08
+FC08041006100610061006200C200C30183010486047C040004000800080008000800010
+1A7F9313>I<30F05B184C189C1898181818181830303030303030306060606000600060
+00C000C000C000800D137F8C11>17 D<038004400C601860106030603060606060607FE0
+FFC0C0C0C0C0C180C180C100C300C600440038000B147E9310>I<0C0C0C0C0C0C181818
+1818181818303030323032307278B46F1C60006000C000C000C00080000F137E8C14>22
+D<3FFE7FFEC44084400C400840084018C018C010C030C0306020600F0D7E8C13>25
+D<40E06020202040408003097D820A>59 D<000100000300000700000780000B80001B80
+0013800023800023800043800083800083C00101C003FFC00201C00401C00C01C00801C0
+1801E0FE07F815147F9319>65 D<07FFE000E03801C01801C01C01C01C01C01C03803803
+80700380E003FFC00700E00700700700300700380E00700E00700E00E00E00E01C0380FF
+FE0016147F9319>I<003F0800C0980300700600300C0030180030380020700000700000
+700000E00000E00000E00000E000406000806000803001003002000C1C0007E00015147E
+9318>I<07FFE000E07001C01801C00C01C00C01C00E03800E03800E03800E03800E0700
+1C07001C07001C0700380E00300E00700E00E00E01C01C0700FFFC0017147F931B>I<07
+FFFC00E01C01C00C01C00C01C00C01C00803810803810003830003FF0007020007020007
+02000700000E00000E00000E00000E00001C0000FFC00016147F9315>70
+D<003F8400E04C0380380600180C0018180018380010700000700000700000E00000E00F
+F8E000E0E000E06001C06001C03001C01803C00C058003F88016147E931A>I<07FC00E0
+01C001C001C001C0038003800380038007000700070007000E000E000E000E001C00FF80
+0E147F930F>73 D<07FC1FC000E0060001C0080001C0100001C0600001C0800003810000
+03860000038E0000039E0000076700000787000007038000070380000E01C0000E01C000
+0E00E0000E00E0001C00F000FF83FC001A147F931C>75 D<07FC0000E00001C00001C000
+01C00001C0000380000380000380000380000700000700000700000700200E00400E0040
+0E00800E01801C0780FFFF0013147F9317>I<07E01FC000E00600017004000170040001
+38040001380400021C0800021C0800020E0800020E080004071000040710000403900004
+0390000801E0000801E0000800E0000800E00018004000FE0040001A147F931A>78
+D<07FFC000E07001C01801C01C01C01C01C01C0380380380700380C003FF000701C00701
+C00700E00700E00E01C00E01C00E01C00E01C21C01C4FF807817147F9319>82
+D<07FC3F8000E01C0000F0100000702000007040000038800000390000003E0000001C00
+00001E0000001E0000003F00000067000000C7000001838000030380000603C0000401C0
+001C01E000FE07F80019147F931B>88 D<006001A0012003200220062004400C400C800D
+0019001A001C0018001800380058009810086007800C1480930E>96
+D<07B00C7010703060606060606060C0C0C0C8C0C841C862D03C700D0D7E8C12>I<3C00
+0C001800180018001800300033803C6030206030603060306030C060C06040C060802300
+1E000C147F930F>I<03C00C20187030E0600060006000C000C0004010602030C01F000C
+0D7F8C0F>I<003C000C0018001800180018003007B00C7010703060606060606060C0C0
+C0C8C0C841C862D03C700E147E9311>I<0780184030206040C040FF80C00080008000C0
+20C04061803E000B0D7E8C10>I<0018006C007C006C00C000C000C007F800C001800180
+018001800180030003000300030003000200060006006600E400C80070000E1A7F9310>
+I<01CC062C0C1C1818301830183018603060302030307010E00F600060006060C0E0C0C3
+807E000E137F8C10>I<1E0006000C000C000C000C00180019E01E301830383030303030
+30306060606460C460C8C0C8C0700E147E9313>I<06070600000000384C4C8C98181830
+323264643808147F930C>I<003000380030000000000000000001C00260043004600860
+0060006000C000C000C000C001800180018001806300E300C60078000D1A81930E>I<1E
+0006000C000C000C000C0018001838185C189C3118360038003F8061C060C860C860C8C0
+D0C0600E147F9312>I<30F8590C4E0C9C0C980C180C180C30183019303130316032601C
+100D7F8C15>110 D<0C78168C130426062606060606060C0C0C0C0C080C101A2019C018
+001800300030003000FC000F13818C11>112 D<03880C5818383030603060306030C060
+C060406060E021C01EC000C000C00180018001800FE00D137F8C0F>I<31E05A704C709C
+609800180018003000300030003000600060000C0D7F8C0F>I<0700188019C031803800
+1E000F0003804180E180C10082007C000A0D7E8C10>I<04000C000C000C001800FF8018
+001800300030003000300060006100610062006400380009127F910D>I<380C4C0C4C0C
+8C18981818181818303030323032307218B40F1C0F0D7F8C14>I<0E3C13CE238E430C43
+000300030006000608C608E610CA2071C00F0D7F8C13>120 D<380C4C0C4C0C8C189818
+18181818303030303030307018E00F60006000C0E0C0E18043003C000E137F8C11>I
+E /Fv 14 25 df<00000180000000018000000000C000000000C0000000006000000000
+6000FFFFFFF000FFFFFFF80000000018000000000C000000000600000000030000000003
+8000000001C000000000E00000000030FFFFFFFFFCFFFFFFFFFC26127E9501>0
+D<FFFFFFFFFCFFFFFFFFFC000000003000000000E000000001C000000003800000000300
+00000006000000000C000000001800FFFFFFF800FFFFFFF0000000006000000000600000
+0000C000000000C0000000018000000001800026127E8F05>4 D<000001800000000180
+00000000C000000000C000000000600000000060000000003000FFFFFFF8007FFFFFFC00
+0000000600000000030000000001C000000000E0FFFFFFFFFCFFFFFFFFFC00000000E000
+000001C0000000030000000006007FFFFFFC00FFFFFFF800000000300000000060000000
+006000000000C000000000C00000000180000000018000261C7E9709>8
+D<FFFFFFF07FFFFFE000000000000000000000000000000000FFFFFFF0FFFFFFF0000000
+000000000000000000000000007FFFFFE0FFFFFFF01C0E7E900B>10
+D<FF001FE0FF001FE01B027E8A20>I<001000001000000800000800000400000300FFFF
+C0FFFFC0000300000400000800000800001000001000120E7E9017>I<80000080000040
+000040000020000018000007FF8007FF8018000020000040000040000080000080000011
+0E7D9017>14 D<070000000FC0000018E000001830000030180000E0180180C00C038000
+0C060000060C0000038C000001F80000007000190C7D8F20>16 D<000000040000000002
+000000000200000000010000000000800000000060FFFFFFFFF8FFFFFFFFF00000000060
+00000000800000000100000000020000000002000000000400250E7E902A>I<02000000
+0004000000000400000000080000000010000000006000000000FFFFFFFFF0FFFFFFFFF0
+600000000010000000000800000000040000000004000000000200000000240E7D902A>
+I<0200000800040000040004000004000800000200100000010060000000C0FFFFFFFFF0
+FFFFFFFFE060000000C01000000100080000020004000004000400000400020000080024
+0E7D902A>I<000000040000000002000000000100000000010000000000C00000000020
+FFFFFFFFF8FFFFFFFFF825087E902A>22 D<FFFFFFFFF8FFFFFFFFF80000000020000000
+00C0000000010000000001000000000200000000040025087E8A2A>I<000C00000C0000
+0600FFFF80FFFF8011057E9D15>I E /Fw 25 121 df<FFFFFF80FFFFFF8019027D8A20>
+0 D<60F0F06004047C8B0C>I<400020C000606000C03001801803000C0600060C000318
+0001B00000E00000E00001B000031800060C000C06001803003001806000C0C000604000
+2013147A9320>I<0300030003000300C30CE31C73381FE0078007801FE07338E31CC30C
+03000300030003000E127D9215>I<003F800000C0600003001800040004000800020014
+000500220008802100108040802040404040408020802080110020800A00208004002080
+040020800A00208011002080208020404040404080204021001080220008801400050008
+000200040004000300180000C06000003F80001B1C7E9720>10 D<03C00FF01C38300C60
+066006C003C003C003C00360066006300C1C380FF003C010107E9115>14
+D<03C00FF01FF83FFC7FFE7FFEFFFFFFFFFFFFFFFF7FFE7FFE3FFC1FF80FF003C010107E
+9115>I<FFFFFFE07FFFFFE0000000000000000000000000000000000000000000000000
+0000000000000000FFFFFFE0FFFFFFE00000000000000000000000000000000000000000
+0000000000000000000000007FFFFFE0FFFFFFE01B167E9420>17
+D<000001800000078000001E00000078000001E00000078000000E00000038000000F000
+0003C000000F0000003C000000F0000000F00000003C0000000F00000003C0000000F000
+0000380000000E0000000780000001E0000000780000001E000000078000000180000000
+00000000000000000000000000000000000000000000000000000000007FFFFF00FFFFFF
+8019247D9920>20 D<0F8000201FE000203FF0002070780060601E0060C00F00C0C007C1
+C08001FF808000FF0080003E000F8000201FE000203FF0002070780060601E0060C00F00
+C0C007C1C08001FF808000FF0080003E001B147E9320>25 D<0006000000000C00000000
+0C000000001800000000380000000030000000007FFFFFF801FFFFFFF803800000000E00
+0000003C00000000F00000000038000000000E000000000700000000018000000000FFFF
+FFF8007FFFFFF8003000000000180000000018000000000C000000000C00000000060000
+0025187E952A>40 D<000003000000000180000000018000000000C000000000E0000000
+006000FFFFFFF000FFFFFFFC000000000E00000000038000000001E00000000078000000
+00E0000000038000000007000000000C00FFFFFFF800FFFFFFF0000000006000000000C0
+00000000C00000000180000000018000000003000025187E952A>I<007FF801FFF80780
+000E0000180000300000300000600000600000C00000C00000C00000FFFFF8FFFFF8C000
+00C00000C000006000006000003000003000001800000E000007800001FFF8007FF8151A
+7D961C>50 D<C0C0C0C0C0C0E0E0C0C0C0C0C0C0030E7E9000>55
+D<00000020000000E0000001E0000001E0000003E0000003E0000005E0000005E0000009
+E0000009E0000011E0000031E0000021E0000061E0000041E0000081E0000181E0000101
+E0000301E0000601E0000401E0000FFFF0001FFFF0003000F0003000F0006000F060C000
+F0718000F87F8000F8FF00007E7E00007C3C0000001F20809D21>65
+D<0001800000100003800000300003800000300003800000600007C00000E00007C00001
+E00005C00003E00005C00007E00005C00007E00005E0000DC00009E00019C00008E00033
+C00008E00073C00010F000E3C00010F001C3C00010700383C00020700303C00020780603
+800020780C038000403818078000403C38078000403C70078000801CE0078000801FC007
+8001001F80078001000F00078062000E000780FE00040007C0FC00000007F0FC00000003
+C07800000000002C1F7F9C32>77 D<0001FC000007FF0000083F8000300F800070078000
+E0078000E0060001E0040001E0000001F0000001F8000000FC0000007E0000003F800000
+1FE0000007F0000001F8000000FC0008007C0038003C0070003C0070003C00F0003800F0
+003800F8007000F80060007C0080007F0300003FFC00000FF00000191E7F9C19>83
+D<400002C00006C00006C00006C00006C00006C00006C00006C00006C00006C00006C000
+06C00006C00006C00006C00006C00006C00006C0000660000C60000C3000181C00700F01
+E003FF8000FE00171A7E981C>91 D<00FE0003FF800F01E01C007030001860000C60000C
+C00006C00006C00006C00006C00006C00006C00006C00006C00006C00006C00006C00006
+C00006C00006C00006C00006C00006C00006400002171A7E981C>I<003C00E001C00180
+0380038003800380038003800380038003800380038003800380030007001C00F0001C00
+070003000380038003800380038003800380038003800380038003800380018001C000E0
+003C0E297D9E15>102 D<F0001C00070003000380038003800380038003800380038003
+800380038003800380018001C000E0003C00E001C0018003800380038003800380038003
+80038003800380038003800380030007001C00F0000E297D9E15>I<004000C001800180
+0180030003000600060006000C000C0018001800180030003000600060006000C000C000
+600060006000300030001800180018000C000C0006000600060003000300018001800180
+00C000400A2A7D9E10>I<C000C000600060006000300030001800180018000C000C0006
+00060006000300030001800180018000C000C0018001800180030003000600060006000C
+000C0018001800180030003000600060006000C000C0000A2A7E9E10>I<C0C0C0C0C0C0
+C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C002
+297B9E0C>I<1F00308070406060E0E0E0E0E040E00060007000300018001C0033007180
+61C0E0C0E0E0E0E0E0E060E070C031C0198007000300018001C000C000E040E0E0E0E0E0
+C0C041C021801F000B257D9C12>120 D E /Fx 91 127 df<60F0F0F0F0F0F0F0F0F0F0
+F0F0F0600000000060F0F0600417789614>33 D<C060E0E0E0E0E0E0E0E0C060C060C060
+C060C06040400B0B7C9614>I<071C00071C00071C00071C00071C00FFFF80FFFF807FFF
+800E38000E38000E38000E38000E38000E38000E38007FFF80FFFF80FFFF801C70001C70
+001C70001C70001C700011177F9614>I<00800180018007E01FF039BC619CC18EC18EC1
+8EE18471807F801FE00FF001F8019C018E4186E186E186E186718C39B81FF00FC0018001
+8000800F1D7E9914>I<3806007C0E006C0E00EE1C00EE1C00EE3800EE38006C38007C70
+0038700000700000E00000E00001C00001C00001C000038000038000070000070E00071F
+000E1B000E3B800E3B801C3B801C3B80381B00381F00180E00111D7F9914>I<0700000F
+800018C00038E00038E00038E00038C00039CF80398F801F1C001E1C001E1C000E38001E
+3800377000677000E3F000E3E000E1C380E1E38063F3803F3F001E1E0011177F9614>I<
+60F0F878181818303060C080050C789614>I<0180038006000C001C0018003800700070
+007000E000E000E000E000E000E000E000E000E000700070007000380018001C000C0006
+0003800180091D799914>I<80C0603038181C0E0E0E0707070707070707070E0E0E1C18
+383060C080081D7C9914>I<038003800380638CF39E7FFC3FF80FE00FE03FF87FFCF39E
+638C0380038003800F107E9214>I<01C00001C00001C00001C00001C00001C00001C000
+FFFF80FFFF80FFFF8001C00001C00001C00001C00001C00001C00001C00011117F9314>
+I<70F8FCFC7C0C1830E0C0060A798414>I<FFFEFFFEFFFE0F037E8C14>I<70F8F8F87005
+05798414>I<0006000E000E001C001C003800380070007000E000E001C001C003800380
+0380070007000E000E001C001C003800380070007000E000E000C0000F1D7E9914>I<07
+C00FE01C7038383018701C701CE00EE00EE00EE00EE00EE00EE00EE00EE00E701C701C38
+3838381C700FE007C00F177E9614>I<0300030007000F003F00F7004700070007000700
+070007000700070007000700070007000700070007007FF07FF00C177C9614>I<0FC01F
+F03838701CE00EE00EE00E400E000E001C001C00380030007000E001C0030006000C0018
+0E300E7FFE7FFE0F177E9614>I<0FC01FF03838701C701C201C001C0018003800700FE0
+0FF00038001C000E000E400EE00EE00E701C78383FF00FC00F177E9614>I<00780000F8
+0001B80001B8000338000338000638000E38000C38001C3800383800303800703800E038
+00FFFF80FFFF8000380000380000380000380000380001FF0001FF0011177F9614>I<7F
+FC7FFC700070007000700070007000700077C07FF07838601C000C000E000E400EE00EE0
+1C601C78783FF00FC00F177E9614>I<01F007F80E1C1C1C381C300070007000E000E7C0
+EFF0F838F01CF00CE00EE00E600E700E700C381C1C380FF007C00F177E9614>I<E000FF
+FEFFFEE01CE0380030007000E000C001C001800380038007000700070007000E000E000E
+000E000E000E0004000F187E9714>I<0FE03FF8783C701CE00EE00EE00EE00E701C1EF0
+03801FF03838701CE00EE00EE00EE00EF01E701C38381FF007C00F177E9614>I<07C01F
+E038307038601CE01CE00CE00EE00E601E701E383E1FEE07CE000E001C001C001C703870
+3070E03FC01F000F177E9614>I<70F8F8F87000000000000070F8F8F8700510798F14>I<
+70F8F8F87000000000000060F0F8F878183070E0800515798F14>I<0006001E003E00F8
+01F003C00F801F003C00F800F000F8003C001F000F8003C001F000F8003E001E00060F15
+7E9514>I<FFFF80FFFF807FFF800000000000000000007FFF80FFFF80FFFF8011097F8F
+14>I<C000F000F8003E001F00078003E001F00078003E001E003E007801F003E007801F
+003E00F800F000C0000F157E9514>I<1FE03FF8701CE00EE00E400E003C007000E001C0
+03800380038003800300000000000000000003000780078003000F177E9614>I<01C000
+03E00003E0000360000360000770000770000770000770000630000E38000E38000E3800
+0E38001C1C001FFC001FFC001C1C001C1C00380E00380E00FE3F80FE3F8011177F9614>
+65 D<FFF0FFFC381E380E3807380738073807380E381E3FFC3FFC381E380E3807380738
+0738073807380E381EFFFCFFF810177F9614>I<01F18007FF800E1F801C078038078070
+0380700380700380E00000E00000E00000E00000E00000E00000E0000070038070038070
+03803807001C07000E0E0007FC0001F00011177F9614>I<FFE000FFF800383C00381E00
+380E00380700380700380700380380380380380380380380380380380380380380380380
+380700380700380E00381E00383C00FFF800FFE00011177F9614>I<FFFF00FFFF003807
+003807003807003807003800003800003838003838003FF8003FF8003838003838003800
+00380000380000380380380380380380380380FFFF80FFFF8011177F9614>I<FFFF80FF
+FF803803803803803803803803803800003800003838003838003FF8003FF80038380038
+3800380000380000380000380000380000380000380000FF0000FF000011177F9614>I<
+03C60FFE1C3E181E381E700E700E600EE000E000E000E000E07FE07FE00E600E700E700E
+381E181E1C3E0FFE03CE10177F9614>I<FE3F80FE3F80380E00380E00380E00380E0038
+0E00380E00380E00380E003FFE003FFE00380E00380E00380E00380E00380E00380E0038
+0E00380E00380E00FE3F80FE3F8011177F9614>I<FFF8FFF80700070007000700070007
+000700070007000700070007000700070007000700070007000700FFF8FFF80D177D9614
+>I<FE3F00FE3F00381C0038380038780038700038E00039E00039C0003B80003FC0003F
+E0003EE0003CF0003C7000387800383800381C00381C00380E00380E00FE1F80FE1F8011
+177F9614>75 D<FF00FF0038003800380038003800380038003800380038003800380038
+00380038003807380738073807FFFFFFFF10177E9614>I<FC1F80FC1F807C1F00763700
+76370076370076370077770077770073670073670073670073E70071C70071C700700700
+700700700700700700700700700700F80F80F80F8011177F9614>I<FE3F80FE3F803E0E
+003B0E003B0E003B0E003B0E003B8E00398E00398E0039CE0039CE0039CE0038CE0038CE
+0038EE00386E00386E00386E00386E00383E00FE3E00FE3E0011177F9614>I<1FF07FFC
+783C701CE00EE00EE00EE00EE00EE00EE00EE00EE00EE00EE00EE00EE00EE00EE00E701C
+783C7FFC1FF00F177E9614>I<FFF0FFFC381E380E38073807380738073807380E381E3F
+FC3FF038003800380038003800380038003800FE00FE0010177F9614>I<FFE000FFF800
+383C00381C00380E00380E00380E00380E00381C00383C003FF8003FF000383800381C00
+381C00381C00381C00381C00381C80381DC0381DC0FE0F80FE070012177F9614>82
+D<0FCC1FFC307C603CE01CE01CE01CE00070007E003FE00FF001F8001C001E000E600EE0
+0EE00EF01CF838FFF0C7E00F177E9614>I<7FFF80FFFF80E1C380E1C380E1C380E1C380
+01C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000
+01C00001C00001C0000FF8000FF80011177F9614>I<FE0FE0FE0FE03803803803803803
+803803803803803803803803803803803803803803803803803803803803803803803803
+803803801C07001C07000E0E0007FC0001F0001317809614>I<FC1F80FC1F80380E0038
+0E00380E003C1E001C1C001C1C001C1C001C1C000E38000E38000E38000E380006300007
+700007700007700003600003600003E00003E00001C00011177F9614>I<FC1F80FC1F80
+70070070070070070070070070070070070070070031C60033E6003BEE003B6E003B6E00
+3B6E003B6E003B6E001B6C001B6C001A2C001E3C001E3C001E3C0011177F9614>I<7E3E
+007E3E001C3C001E38000E78000F700007700007E00003E00003C00001C00003C00003E0
+0003E0000770000770000E78000E38001C3C001C1C003C1E00FE3F80FE3F8011177F9614
+>I<FC1F80FC1F80380E003C1E001C1C001E3C000E38000E380007700007700003600003
+E00003E00001C00001C00001C00001C00001C00001C00001C00001C00007F00007F00011
+177F9614>I<7FFEFFFEE01CE01CE038E038007000E000E001C001C00380070007000E00
+0E001C00380E380E700E700EFFFEFFFE0F177E9614>I<FFE0FFE0E000E000E000E000E0
+00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
+00E000E000FFE0FFE00B1D799914>I<C000E000E00070007000380038001C001C000E00
+0E000700070003800380038001C001C000E000E00070007000380038001C001C000E000E
+00060F1D7E9914>I<FFE0FFE000E000E000E000E000E000E000E000E000E000E000E000
+E000E000E000E000E000E000E000E000E000E000E000E000E000E0FFE0FFE00B1D7F9914
+>I<04001F007FC0F1E0E0E00B057C9614>I<FFFEFFFEFFFE0F037E7E14>I<0818306060
+C0C0C0F0F87830050C799914>I<1FC0007FF000707800201800001C00001C0007FC001F
+FC003C1C00701C00E01C00E01C00E01C00707C003FFF800F8F8011107E8F14>I<FC0000
+FC00001C00001C00001C00001C00001C00001CF8001DFE001F07001E03001C03801C01C0
+1C01C01C01C01C01C01C01C01C01C01C03801E03001F0E001DFC000CF8001217809614>
+I<03F80FFE1C0E380470006000E000E000E000E00060007000380E1C1E0FFC03F00F107E
+8F14>I<007E00007E00000E00000E00000E00000E00000E0007CE000FFE001C3E00301E
+00700E00E00E00E00E00E00E00E00E00E00E00E00E00700E00301E00383E001FEFC007CF
+C012177F9614>I<07E00FF01C38301C700CE00EE00EFFFEFFFEE00060007000380E1C1E
+0FFC03F00F107E8F14>I<00FC01FE038E07040700070007007FFEFFFE07000700070007
+0007000700070007000700070007000700FFF8FFF80F177F9614>I<07CF001FFF80383B
+80301800701C00701C00701C003018003838003FF00037C0007000007000003FF8001FFC
+003FFE00700F00E00380E00380E00380E003807007003C1E001FFC0007F00011197F8F14
+>I<FC0000FC00001C00001C00001C00001C00001C00001C78001DFE001F86001E07001C
+07001C07001C07001C07001C07001C07001C07001C07001C07001C0700FF8FE0FF8FE013
+17809614>I<06000F000F0006000000000000000000FF00FF0007000700070007000700
+0700070007000700070007000700FFF8FFF80D187C9714>I<006000F000F00060000000
+00000000001FF01FF0007000700070007000700070007000700070007000700070007000
+70007000700070007040E0E0C07F803F000C207E9714>I<FC0000FC00001C00001C0000
+1C00001C00001C00001CFF801CFF801C1C001C38001C70001CE0001DC0001FE0001FE000
+1E70001C38001C3C001C1C001C0E00FF1F80FF1F801117809614>I<FF80FF8003800380
+03800380038003800380038003800380038003800380038003800380038003800380FFFE
+FFFE0F177E9614>I<FB8E00FFDF003CF3803CF38038E38038E38038E38038E38038E380
+38E38038E38038E38038E38038E380FEFBE0FE79E01310808F14>I<FC7800FDFE001F86
+001E07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700FF8F
+E0FF8FE01310808F14>I<07C01FF03C78701C701CE00EE00EE00EE00EE00EE00E701C78
+3C3C781FF007C00F107E8F14>I<FCF800FDFE001F07001E03001C03801C01C01C01C01C
+01C01C01C01C01C01C01C01C03801E03001F0E001DFC001CF8001C00001C00001C00001C
+00001C00001C0000FF8000FF80001218808F14>I<03E7000FF7001C1F00300F00700F00
+E00700E00700E00700E00700E00700E00700700F00300F001C3F000FF70007C700000700
+000700000700000700000700000700003FE0003FE013187F8F14>I<FE1F00FE7F800EE3
+800F81000F00000F00000E00000E00000E00000E00000E00000E00000E00000E0000FFF0
+00FFF00011107F8F14>I<0FD83FF86038C038C038F0007F803FF007F8001C6006E006F0
+06F81CFFF8CFE00F107E8F14>I<06000E000E000E000E007FFCFFFC0E000E000E000E00
+0E000E000E000E000E0E0E0E0E0E0E1C07F801F00F157F9414>I<FC3F00FC3F001C0700
+1C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C1F000FFFE0
+03E7E01310808F14>I<FE3F80FE3F803C1E001C1C001C1C001C1C000E38000E38000E38
+0006300007700007700007700003E00003E00003E00011107F8F14>I<FE3F80FE3F8070
+0700380E00380E00380E0039CE0039CE0039CE001B6C001A6C001A6C001A6C001E7C001E
+7C000E380011107F8F14>I<7E3F007E3F001E3C000E780007700007E00003E00001C000
+03C00003E0000770000E78000E38001C1C00FE3F80FE3F8011107F8F14>I<FE3F80FE3F
+801C0E001C1C001C1C000E1C000E38000E380007380007300007300003700003700003E0
+0001E00001E00001C00001C00001C0000380007380007700007E00003C000011187F8F14
+>I<3FFF7FFF700E701C7038007000E001C0038007000E001C0738077007FFFFFFFF1010
+7F8F14>I<003E00FE01E003800380038003800380038003800380038003807F00FE007F
+00038003800380038003800380038003800380038001E000FE003E0F1D7E9914>I<E0E0
+E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0031D789914>I<7800
+FE000F00038003800380038003800380038003800380038001FC00FE01FC038003800380
+03800380038003800380038003800F00FE0078000F1D7E9914>I<1C103F38E7E041C00D
+047D9614>I E /Fy 54 122 df<0003FE00001FFF80007F03C001F803E003F007E003F0
+07E007E007E007E007E007E007E007E0018007E0000007E0000007E0000007E03FF0FFFF
+FFF0FFFFFFF007E003F007E003F007E003F007E003F007E003F007E003F007E003F007E0
+03F007E003F007E003F007E003F007E003F007E003F007E003F007E003F007E003F007E0
+03F007E003F007E003F007E003F007E003F007E003F07FFE3FFF7FFE3FFF20287FA724>
+12 D<0003FFF0001FFFF0007E07F001F807F003F00FF003F00FF007E007F007E003F007
+E003F007E003F007E003F007E003F007E003F007E003F0FFFFFFF0FFFFFFF007E003F007
+E003F007E003F007E003F007E003F007E003F007E003F007E003F007E003F007E003F007
+E003F007E003F007E003F007E003F007E003F007E003F007E003F007E003F007E003F007
+E003F007E003F007E003F07FFE3FFF7FFE3FFF20287FA724>I<3C7EFFFFFFFF7E3C0808
+7B8712>46 D<003FC00001FFF80007E07E000FC03F001F801F801F000F803F000FC03F00
+0FC07E0007E07E0007E07E0007E07E0007E0FE0007F0FE0007F0FE0007F0FE0007F0FE00
+07F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE00
+07F07E0007E07E0007E07E0007E03F000FC03F000FC01F000F801F801F800FC03F0007E0
+7E0001FFF800003FC0001C257EA421>48 D<000E00001E0000FE000FFE00FFFE00F0FE00
+00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00
+00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00
+00FE0000FE0000FE0000FE0000FE00FFFFFEFFFFFE17257BA421>I<00FF800007FFF000
+1E03FC003800FE0078007F007E007F80FF003F80FF003FC0FF003FC0FF001FC07E001FC0
+3C001FC000003FC000003F8000003F8000007F0000007F000000FE000000FC000001F000
+0003E0000007C000000F8000001E0000001C00C0003800C0007000C000C0018001800180
+0300018007FFFF800FFFFF801FFFFF803FFFFF807FFFFF00FFFFFF00FFFFFF001A257DA4
+21>I<00FF800007FFF0000F01FC001C007E003E007F007F003F807F803F807F803F807F
+803F807F807F803F007F000C007F0000007E000000FC000001F8000007F00000FFC00000
+FF80000001F0000000FC0000007E0000007F0000003F8000003F801C003FC03E003FC07F
+003FC0FF803FC0FF803FC0FF803F80FF803F807F007F807E007F003800FE001F01FC0007
+FFF00000FF80001A257DA421>I<00000E0000001E0000003E0000003E0000007E000000
+FE000001FE000003FE0000077E0000067E00000C7E00001C7E0000387E0000707E000060
+7E0000C07E0001C07E0003807E0007007E000E007E000C007E0018007E0038007E007000
+7E00E0007E00FFFFFFF0FFFFFFF00000FE000000FE000000FE000000FE000000FE000000
+FE000000FE000000FE00003FFFF0003FFFF01C257EA421>I<180006001F803E001FFFFC
+001FFFF8001FFFF0001FFFE0001FFF80001FFE0000180000001800000018000000180000
+001800000018000000187F80001BFFF0001F81FC001C007E0008007F0000003F0000003F
+8000003F8000003FC000003FC03C003FC07E003FC0FF003FC0FF003FC0FF003FC0FE003F
+807C003F8060007F0030007E001C00FC000F03F80007FFE00000FF00001A257DA421>I<
+000FF000003FFC0000F80E0003E0070007C01F800F803F801F803F801F003F803F003F80
+3F001F007E0000007E0000007E000000FE000000FE1FE000FE7FF800FE407C00FE803E00
+FF001F00FF001F80FF001F80FE001FC0FE001FC0FE001FC0FE001FC07E001FC07E001FC0
+7E001FC07E001FC03E001F803F001F801F001F000F003F000F803E0003E0F80001FFF000
+007FC0001A257DA421>I<300000003C0000003FFFFFE03FFFFFE03FFFFFC07FFFFF807F
+FFFF007FFFFE007FFFFC0060000C006000180060003000C0006000C000C000C001800000
+0180000003000000070000000E0000000E0000001E0000001E0000003E0000003C000000
+7C0000007C000000FC000000FC000000FC000000FC000001FC000001FC000001FC000001
+FC000001FC000001FC000001FC000000F80000007000001B277CA621>I<007FC00003FF
+F80007007C001C001E0018000F003800078038000780780007807C0007807F0007807FC0
+07007FE00F003FF81E003FFE3C001FFF78000FFFE00007FFF00003FFF80003FFFE0007FF
+FF001F1FFF003C07FF803C01FF807800FFC078003FC0F0000FC0F00007C0F00003C0F000
+03C0F0000380F8000380780003003C0007003E000E000F807C0007FFF00000FF80001A25
+7DA421>I<007F800003FFE00007C0F8000F807C001F003E003E003E007E001F007E001F
+00FE001F80FE001F80FE001F80FE001F80FE001FC0FE001FC0FE001FC0FE001FC07E003F
+C07E003FC03E007FC01F005FC00F809FC007FF9FC001FE1FC000001FC000001F8000001F
+8000001F803E003F007F003F007F003E007F003E007F007C007E00F8003801F0001C07E0
+000FFF800003FC00001A257DA421>I<3C7EFFFFFFFF7E3C000000000000000000003C7E
+FFFFFFFF7E3C081A7B9912>I<00000600000000000F00000000000F00000000001F8000
+0000001F80000000001F80000000003FC0000000003FC0000000007FE0000000007FE000
+0000007FE000000000DFF000000000CFF000000001CFF80000000187F80000000187F800
+00000307FC0000000303FC0000000703FE0000000601FE0000000601FE0000000C00FF00
+00000C00FF0000001800FF80000018007F80000018007F80000030003FC000003FFFFFC0
+00007FFFFFE0000060001FE00000E0001FF00000C0000FF00000C0000FF0000180000FF8
+0001800007F80003800007FC0003000003FC0007800003FC00FFF8007FFFF0FFF8007FFF
+F02C287EA731>65 D<FFFFFFF800FFFFFFFF0003F8003FC003F8000FE003F80007F003F8
+0003F803F80003F803F80003FC03F80003FC03F80001FC03F80001FC03F80003FC03F800
+03FC03F80003F803F80007F803F80007F003F8000FE003F8003FC003FFFFFF0003FFFFFF
+0003F8003FC003F8000FE003F80007F003F80003F803F80003FC03F80001FC03F80001FE
+03F80001FE03F80001FE03F80001FE03F80001FE03F80001FE03F80001FC03F80003FC03
+F80003FC03F80007F803F8000FF003F8003FE0FFFFFFFF80FFFFFFFC0027287EA72E>I<
+00007FC0040007FFF80C001FE01E1C007F00073C01FC0001FC03F80000FC07F000007C0F
+E000007C0FC000003C1FC000001C3F8000001C3F8000001C7F8000000C7F0000000C7F00
+00000CFF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF0000
+0000FF00000000FF00000000FF000000007F000000007F0000000C7F8000000C3F800000
+0C3F8000000C1FC00000180FC00000180FE000003007F000003003F800006001FC0001C0
+007F000380001FE01E000007FFF80000007FC00026287CA72F>I<FFFFFFF80000FFFFFF
+FF000003FC003FC00003FC000FE00003FC0003F80003FC0001FC0003FC0000FE0003FC00
+007E0003FC00007F0003FC00003F8003FC00003F8003FC00001F8003FC00001FC003FC00
+001FC003FC00001FC003FC00001FE003FC00001FE003FC00001FE003FC00001FE003FC00
+001FE003FC00001FE003FC00001FE003FC00001FE003FC00001FE003FC00001FE003FC00
+001FC003FC00001FC003FC00001FC003FC00001FC003FC00003F8003FC00003F8003FC00
+003F0003FC00007F0003FC0000FE0003FC0001FC0003FC0003F80003FC0007F00003FC00
+3FC000FFFFFFFF0000FFFFFFF800002B287EA732>I<FFFFFFFFC0FFFFFFFFC003FC001F
+C003FC0007E003FC0001E003FC0000E003FC0000E003FC00006003FC00006003FC000060
+03FC00003003FC01803003FC01803003FC01800003FC01800003FC03800003FC03800003
+FC0F800003FFFF800003FFFF800003FC0F800003FC03800003FC03800003FC01800003FC
+01800003FC01800C03FC01800C03FC00000C03FC00001C03FC00001803FC00001803FC00
+001803FC00003803FC00003803FC00007803FC0000F803FC0001F003FC000FF0FFFFFFFF
+F0FFFFFFFFF026287EA72B>I<FFFFFFFF80FFFFFFFF8003FC003F8003FC0007C003FC00
+03C003FC0001C003FC0001C003FC0000C003FC0000C003FC0000C003FC00006003FC0000
+6003FC01806003FC01800003FC01800003FC01800003FC03800003FC03800003FC0F8000
+03FFFF800003FFFF800003FC0F800003FC03800003FC03800003FC01800003FC01800003
+FC01800003FC01800003FC00000003FC00000003FC00000003FC00000003FC00000003FC
+00000003FC00000003FC00000003FC00000003FC000000FFFFFC0000FFFFFC000023287E
+A729>I<00007FC004000007FFF80C00001FE01E1C00007F00073C0001FC0001FC0003F8
+0000FC0007F000007C000FE000007C000FC000003C001FC000001C003F8000001C003F80
+00001C007F8000000C007F0000000C007F0000000C00FF0000000000FF0000000000FF00
+00000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF00
+03FFFFC0FF0003FFFFC07F000003FC007F800003FC007F800003FC003F800003FC003F80
+0003FC001FC00003FC000FC00003FC000FE00003FC0007F00003FC0003F80003FC0001FC
+0007FC00007F000EFC00001FE03C7C000007FFF03C0000007FC00C002A287CA733>I<FF
+FFF0FFFFF003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003
+FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003
+FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003
+FC0003FC00FFFFF0FFFFF014287EA718>73 D<FFFFF80000FFFFF8000003FC00000003FC
+00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00
+000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC0000
+0003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC000000
+03FC00018003FC00018003FC00018003FC00038003FC00030003FC00030003FC00070003
+FC00070003FC000F0003FC000F0003FC001F0003FC007E0003FC01FE00FFFFFFFE00FFFF
+FFFE0021287EA727>76 D<FFFC0000001FFF80FFFE0000003FFF8003FE0000003FE00003
+7F0000006FE000037F0000006FE000037F0000006FE000033F800000CFE000033F800000
+CFE000031FC000018FE000031FC000018FE000030FE000030FE000030FE000030FE00003
+07F000060FE0000307F000060FE0000303F8000C0FE0000303F8000C0FE0000303F8000C
+0FE0000301FC00180FE0000301FC00180FE0000300FE00300FE0000300FE00300FE00003
+007F00600FE00003007F00600FE00003003F80C00FE00003003F80C00FE00003003F80C0
+0FE00003001FC1800FE00003001FC1800FE00003000FE3000FE00003000FE3000FE00003
+0007F6000FE000030007F6000FE000030003FC000FE000030003FC000FE000030001F800
+0FE000030001F8000FE000030001F8000FE000078000F0000FE000FFFC00F003FFFF80FF
+FC006003FFFF8039287EA73E>I<FFFC0000FFFCFFFE0000FFFC03FF0000078003FF8000
+0300037FC0000300033FE0000300031FE0000300031FF0000300030FF80003000307FC00
+03000303FE0003000301FF0003000300FF00030003007F80030003007FC0030003003FE0
+030003001FF0030003000FF80300030007FC0300030003FC0300030003FE0300030001FF
+0300030000FF83000300007FC3000300003FE3000300001FE3000300001FF3000300000F
+FB0003000007FF0003000003FF0003000001FF0003000000FF00030000007F0003000000
+7F00030000003F00030000001F00030000000F00078000000700FFFC00000300FFFC0000
+03002E287EA733>I<FFFFFFF000FFFFFFFE0003FC007F8003FC001FE003FC0007F003FC
+0007F003FC0003F803FC0003F803FC0003FC03FC0003FC03FC0003FC03FC0003FC03FC00
+03FC03FC0003FC03FC0003F803FC0003F803FC0007F003FC0007F003FC001FE003FC007F
+8003FFFFFE0003FFFFF00003FC00000003FC00000003FC00000003FC00000003FC000000
+03FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003
+FC00000003FC00000003FC00000003FC000000FFFFF00000FFFFF0000026287EA72D>80
+D<FFFFFFE00000FFFFFFFC000003FC007F800003FC001FC00003FC000FE00003FC0007F0
+0003FC0003F80003FC0003F80003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC
+0003FC0003FC0003FC0003F80003FC0003F80003FC0007F00003FC000FE00003FC001FC0
+0003FC007F800003FFFFFC000003FFFFFC000003FC00FF000003FC003F800003FC001FC0
+0003FC001FE00003FC000FF00003FC000FF00003FC000FF00003FC000FF00003FC000FF0
+0003FC000FF00003FC000FF00003FC000FF00003FC000FF00003FC000FF00C03FC0007F0
+0C03FC0007F81803FC0003FC38FFFFF000FFF0FFFFF0003FC02E287EA731>82
+D<00FF004003FFE0C00F80F9C01E001FC03C000FC0780003C0780003C0780001C0F80001
+C0F80000C0F80000C0FC0000C0FE000000FF000000FFE000007FFF00007FFFE0003FFFF8
+001FFFFE000FFFFF0007FFFF8001FFFF80007FFFC00003FFC000003FE000000FE0000007
+E0000007E0C00003E0C00003E0C00003E0C00003E0E00003C0E00003C0F0000780F80007
+80FE000F00E7C03E00C1FFF800803FE0001B287CA724>I<7FFFFFFFFE7FFFFFFFFE7E00
+FF007E7800FF001E7000FF000E6000FF00066000FF0006E000FF0007E000FF0007C000FF
+0003C000FF0003C000FF0003C000FF00030000FF00000000FF00000000FF00000000FF00
+000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF0000
+0000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF000000
+00FF00000000FF00000000FF00000000FF00000000FF00000000FF000000FFFFFF0000FF
+FFFF0028277EA62D>I<FFFFF001FFF8FFFFF001FFF803FC00000F0003FC0000060003FC
+0000060003FC0000060003FC0000060003FC0000060003FC0000060003FC0000060003FC
+0000060003FC0000060003FC0000060003FC0000060003FC0000060003FC0000060003FC
+0000060003FC0000060003FC0000060003FC0000060003FC0000060003FC0000060003FC
+0000060003FC0000060003FC0000060003FC0000060003FC0000060003FC0000060003FC
+0000060003FC0000060001FC00000C0001FC00000C0000FE00000C0000FE00001800007F
+00003000003F00006000001FC001C0000007F00F80000001FFFE000000003FF000002D28
+7EA732>I<7FFFF03FFF807FFFF03FFF8003FE0003F00001FF0000C00001FF0001800000
+FF80038000007FC0070000007FC0060000003FE00C0000001FF01C0000001FF038000000
+0FF83000000007FC6000000007FEE000000003FFC000000001FF8000000000FF80000000
+00FF80000000007FC0000000003FE0000000003FE0000000003FF0000000003FF8000000
+006FF800000000E7FC00000001C3FE0000000183FE0000000301FF0000000700FF800000
+0E00FF8000000C007FC0000018003FE0000038003FE0000030001FF0000060000FF80000
+E0000FFC0001C00007FC0003E00003FE00FFFE007FFFF0FFFE007FFFF02C287EA731>88
+D<03FF80000FFFE0001F01F8003F80FC003F807E003F803E001F003F001F003F0000003F
+0000003F0000003F000007FF0000FFFF0007F03F001F803F003F003F007E003F007C003F
+00FC003F00FC003F00FC003F00FC005F007E00DF003F839F801FFE0FF803F803F81D1A7E
+9920>97 D<FFC00000FFC000000FC000000FC000000FC000000FC000000FC000000FC000
+000FC000000FC000000FC000000FC000000FC000000FC000000FC1FC000FCFFF800FDC0F
+C00FF003E00FE001F00FC001F80FC001FC0FC000FC0FC000FC0FC000FE0FC000FE0FC000
+FE0FC000FE0FC000FE0FC000FE0FC000FE0FC000FE0FC000FC0FC000FC0FC001F80FC001
+F80FE003F00FB007E00F1C0FC00E0FFF000C03FC001F287EA724>I<003FF001FFFC07E0
+3E0F807F1F807F3F007F3F003E7E003E7E0000FE0000FE0000FE0000FE0000FE0000FE00
+00FE0000FE00007E00007F00003F00003F80031F80070FC00607F01C01FFF0003FC0181A
+7E991D>I<00007FE000007FE0000007E0000007E0000007E0000007E0000007E0000007
+E0000007E0000007E0000007E0000007E0000007E0000007E0007F87E001FFE7E007E077
+E00FC01FE01F800FE03F0007E03F0007E07E0007E07E0007E0FE0007E0FE0007E0FE0007
+E0FE0007E0FE0007E0FE0007E0FE0007E0FE0007E07E0007E07E0007E07F0007E03F0007
+E01F000FE00F801FE007E077E003FFC7FE007F07FE1F287EA724>I<007F800001FFF000
+07E0F8000F803C001F003E003F001F003F001F007E001F007E001F80FE000F80FE000F80
+FFFFFF80FFFFFF80FE000000FE000000FE000000FE0000007E0000007E0000003F000180
+3F0001801F8003000FC0060003E03C0001FFF800003FC000191A7E991E>I<0007F0003F
+F800FC7C01F0FE03F0FE03E0FE07E0FE07E07C07E00007E00007E00007E00007E00007E0
+00FFFF80FFFF8007E00007E00007E00007E00007E00007E00007E00007E00007E00007E0
+0007E00007E00007E00007E00007E00007E00007E00007E00007E00007E00007E00007E0
+007FFF007FFF0017287EA714>I<00FF01F007FFE7F80F81FC781F00F8783E007C703E00
+7C007E007E007E007E007E007E007E007E007E007E003E007C003E007C001F00F8000F81
+F0000FFFE00018FF00001000000038000000380000003C0000001FFFF8001FFFFE000FFF
+FF800FFFFFC01FFFFFE03C000FE07C0003F0F80001F0F80001F0F80001F0F80001F07C00
+03E07C0003E03E0007C01FC03F8007FFFE0000FFF0001D267E9921>I<FFC00000FFC000
+000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000
+000FC000000FC000000FC000000FC0FC000FC3FF000FC60F800FC80FC00FD007E00FE007
+E00FE007E00FE007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007
+E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007
+E0FFFC7FFEFFFC7FFE1F287DA724>I<0F001F803FC03FC03FC03FC01F800F0000000000
+00000000000000000000FFC0FFC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC0
+0FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC0FFF8FFF80D297DA813>I<FFC000
+00FFC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000
+000FC000000FC000000FC000000FC000000FC01FF80FC01FF80FC003C00FC003000FC00E
+000FC01C000FC030000FC060000FC0C0000FC380000FC780000FCFC0000FDFE0000FF3F0
+000FE1F8000F80F8000F80FC000F807E000F803F000F801F800F800F800F800FC00F8007
+E00F8007F0FFF81FFEFFF81FFE1F287EA723>107 D<FFC0FFC00FC00FC00FC00FC00FC0
+0FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC0
+0FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC0FFFCFFFC0E287DA713>
+I<FF80FE003F8000FF83FF80FFE0000F860FC183F0000F8807E201F8000F9003E400F800
+0FB003FC00FC000FA003F800FC000FE003F800FC000FC003F000FC000FC003F000FC000F
+C003F000FC000FC003F000FC000FC003F000FC000FC003F000FC000FC003F000FC000FC0
+03F000FC000FC003F000FC000FC003F000FC000FC003F000FC000FC003F000FC000FC003
+F000FC000FC003F000FC000FC003F000FC000FC003F000FC00FFFC3FFF0FFFC0FFFC3FFF
+0FFFC0321A7D9937>I<FF80FC00FF83FF000F860F800F880FC00F9007E00FA007E00FA0
+07E00FE007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC0
+07E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E0FFFC
+7FFEFFFC7FFE1F1A7D9924>I<003FC00001FFF80007E07E000F801F001F000F803F000F
+C03E0007C07E0007E07E0007E0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007
+F0FE0007F0FE0007F07E0007E07E0007E03F000FC03F000FC01F801F800FC03F0007E07E
+0001FFF800003FC0001C1A7E9921>I<FFC1FC00FFCFFF800FDC0FC00FF007E00FE003F0
+0FC001F80FC001FC0FC001FC0FC000FC0FC000FE0FC000FE0FC000FE0FC000FE0FC000FE
+0FC000FE0FC000FE0FC000FE0FC000FC0FC001FC0FC001F80FC003F80FE003F00FF007E0
+0FDC1FC00FCFFF000FC3FC000FC000000FC000000FC000000FC000000FC000000FC00000
+0FC000000FC000000FC00000FFFC0000FFFC00001F257E9924>I<FF83E0FF8FF80F8C7C
+0F90FE0FB0FE0FA0FE0FA07C0FE07C0FC0000FC0000FC0000FC0000FC0000FC0000FC000
+0FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC000FFFE00FFFE00171A7E
+991B>114 D<03FC601FFFE03C03E07801E07000E0F00060F00060F80060FC0000FFE000
+7FFE003FFF801FFFC00FFFE001FFF0000FF80001F8C000F8C00078E00078E00078F00070
+F800F0FE03E0E7FF80C1FE00151A7E991A>I<00600000600000600000600000E00000E0
+0001E00001E00003E00007E0001FE000FFFFE0FFFFE007E00007E00007E00007E00007E0
+0007E00007E00007E00007E00007E00007E00007E00007E00007E00007E03007E03007E0
+3007E03007E03007E03003F06001F0C000FF80003F0014257FA419>I<FFC07FE0FFC07F
+E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007
+E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007
+E00FC00FE00FC00FE007C017E003E067E001FFC7FE007F07FE1F1A7D9924>I<FFFC01FF
+FFFC01FF0FC000700FE0007007E0006007F000E003F000C003F801C001F8018001FC0180
+00FC030000FE0300007E0600007E0600003F0C00003F0C00001F9800001F9800001FF800
+000FF000000FF0000007E0000007E0000003C0000003C00000018000201A7F9923>I<FF
+F87FF81FF0FFF87FF81FF00FC00F8007800FC007C003000FE007C0070007E007E0060007
+E00FE0060003F00FE00C0003F01FF00C0003F019F00C0001F819F8180001F830F8180001
+FC30F8380000FC70FC300000FC607C3000007E607C6000007EC03E6000007FC03EE00000
+3FC03FC000003F801FC000001F801F8000001F801F8000001F000F8000000F000F000000
+0E000700000006000600002C1A7F992F>I<FFF80FFEFFF80FFE0FE003C007F0038003F0
+030001F8060000FC0E0000FE1C00007F3800003F7000001FE000000FC0000007E0000007
+F0000007F800000FF800001CFC0000387E0000703F0000E03F8000C01FC001800FC00300
+07E00F0003F0FFE01FFFFFE01FFF201A7F9923>I<FFFC01FFFFFC01FF0FC000700FE000
+7007E0006007F000E003F000C003F801C001F8018001FC018000FC030000FE0300007E06
+00007E0600003F0C00003F0C00001F9800001F9800001FF800000FF000000FF0000007E0
+000007E0000003C0000003C0000001800000018000000300000003000030060000780600
+00FC0E0000FC0C0000FC380000787000003FE000001F80000020257F9923>I
+E /Fz 25 122 df<60F0F06004047D830A>46 D<06000E00FE000E000E000E000E000E00
+0E000E000E000E000E000E000E000E000E000E000E000E00FFE00B157D9412>49
+D<0F8030E040708030C038E0384038003800700070006000C00180030006000C08080810
+183FF07FF0FFF00D157E9412>I<60307FE07FC0440040004000400040004F8070E04070
+0030003800384038E038E0388030406020C01F000D157E9412>53
+D<FFFC001C03801C00C01C00E01C00701C00701C00701C00701C00E01C00C01C03801FFE
+001C07801C01C01C00E01C00E01C00E01C00E01C00E01C00E11C00E11C0072FF803C1817
+7F961A>82 D<7FFFF8603818403808403808803804803804803804003800003800003800
+003800003800003800003800003800003800003800003800003800003800003800003800
+03FF8016177F9619>84 D<3FC0706070302038003803F81E3830387038E039E039E07970
+FF1F1E100E7F8D12>97 D<003E00000E00000E00000E00000E00000E00000E00000E0000
+0E0007CE001C3E00300E00700E00600E00E00E00E00E00E00E00E00E00600E00700E0030
+1E00182E0007CF8011177F9614>100 D<0FC0186030307038E018FFF8E000E000E00060
+0070083010183007C00D0E7F8D10>I<0F9E18E33060707070707070306018C02F802000
+60003FE03FF83FFC600EC006C006C006600C38380FE010157F8D12>103
+D<F8000038000038000038000038000038000038000038000038000038F8003B1C003C0E
+00380E00380E00380E00380E00380E00380E00380E00380E00380E00380E00FE3F801117
+7F9614>I<307878300000000000F8383838383838383838383838FE07177F960A>I<F800
+38003800380038003800380038003800383E383838303840388039803FC039E038E038F0
+3878383C383CFE7F10177F9613>107 D<F8F83E003B1CC7003C0F0380380E0380380E03
+80380E0380380E0380380E0380380E0380380E0380380E0380380E0380380E0380FE3F8F
+E01B0E7F8D1E>109 D<F8F8003B1C003C0E00380E00380E00380E00380E00380E00380E
+00380E00380E00380E00380E00FE3F80110E7F8D14>I<07C018303018600C600CE00EE0
+0EE00EE00EE00E701C3018183007C00F0E7F8D12>I<F9F0003E1C003806003807003803
+00380380380380380380380380380300380700380E003E1C0039F0003800003800003800
+00380000380000FE000011147F8D14>I<F9E03A703C7038203800380038003800380038
+00380038003800FF000C0E7F8D0E>114 D<1F4060C0C040C040E000FF007F801FC001E0
+80608060C060E0C09F000B0E7F8D0E>I<080008000800180018003800FFC03800380038
+00380038003800380038403840384038401C800F000A147F930E>I<F83E00380E00380E
+00380E00380E00380E00380E00380E00380E00380E00380E00381E001C2E0007CF80110E
+7F8D14>I<FE1F380E3C0C1C081C080E100E100720072007E003C003C001800180100E7F
+8D13>I<FEFE7C383838383810383C101C3C201C4C201E4E600ECE400E87400787800703
+80070380030300020100160E7F8D19>I<FE3F3C1C1C100E20074007C0038001C002E004
+F008701838383CFC7F100E7F8D13>I<FE1F380E3C0C1C081C080E100E100720072007E0
+03C003C00180018001000100E200E200A400780010147F8D13>I
+E /FA 1 66 df<0003000000030000000300000007800000078000000FC000000BC00000
+0BC0000011E0000011E0000031F0000020F0000020F00000407800004078000040780000
+803C0000803C0001003E0001FFFE0001001E0002000F0002000F0002000F000400078004
+0007800C0007C01E0007C0FF803FFC1E1D7E9C22>65 D E /FB 60
+123 df<01FFFFFF80003C00380000380070000038007000003800700000380070000070
+00E000007000E000007000E000007000E00000E001C00000E001C00000E001C00000E001
+C00001C003800001C003800001C003800001C00380000380070000038007000003800700
+00038007000007000E000007000E000007000E000007000E00000F001E0000FFE1FFC000
+211C7E9B23>5 D<00F800030C000E06041C0704380308300388700390700390E003A0E0
+03A0E003C0E00380E00380E00380600780600B883071900F80E016127E911B>11
+D<0001F000061800080C00100C00200E00400E00800E00801C01001C010018010038020F
+F00210C0020FE00200300400300400300400380400380800700800700800700800E01800
+E01801C0140180140300230E0020F8002000002000004000004000004000004000008000
+0080000017257F9C17>I<0780101FC0103FE0207FF020603040C0184080088000088000
+0480000500000500000600000600000600000400000400000400000C00000C00000C0000
+1800001800001800001800003000003000002000141B7F9115>I<003800007F00008780
+01030001000001800001800001C00000C00000E00000E00000700000F80003B800063C00
+0C1C00181C00381C00701C00701C00E01C00E01C00E01C00E01C00E01800E03800603000
+70600038C0000F8000111E7F9D12>I<01F807000C0018003800300070007FC0E000E000
+E000E000E00060006000300018600F800D127E9111>I<001000001000001000001FC000
+3040006F800080000100000200000600000C000008000018000030000030000020000060
+0000600000600000E00000C00000E00000E00000E00000E000007000007C00003F00001F
+E00007F80000F800003C00001C00000C0000180003100000E00012257F9C12>I<3C1F00
+4E61804681C04701C08F01C08E01C00E01C00E01C01C03801C03801C03801C0380380700
+380700380700380700700E00300E00000E00000E00001C00001C00001C00001C00003800
+003800003000121B7E9115>I<07800001C00001E00000E00000E00000F0000070000070
+00007800003800003800003C00001C00001C00001E00000E00001E00003F0000670000C7
+000187800303800603800E03C01C01C03801C07001E0E000E0C000F0141D7E9C18>21
+D<0FFFF81FFFF83FFFF8608400418400810400010400030C00030C00020C00060C00060C
+000E0C000C0C001C0E001C0E00380E0018060015127E9118>25 D<000100000200000200
+000200000200000400000400000400000400000800000800007E0001C9800710E00C1060
+181070381030702030702030E02070E02070E04070E040E0E040E06041C0608380308600
+1C9C0007E00001000001000001000001000002000002000002000002000014257E9C19>
+30 D<00FC03FE0E07180010002000200010C017201FE020004000400080008000800440
+0860303FE00F8010147F9213>34 D<1E3E60C0C0C0C0C0C0603E1E070C7E940C>44
+D<60F0F06004047C830C>58 D<60F0F0701010101020204080040C7C830C>I<00000180
+0000078000001E00000078000001E00000078000000E00000038000000F0000003C00000
+0F0000003C000000F0000000F00000003C0000000F00000003C0000000F0000000380000
+000E0000000780000001E0000000780000001E000000078000000180191A7D9620>I<00
+010003000600060006000C000C000C0018001800180030003000300060006000C000C000
+C0018001800180030003000300060006000C000C000C0018001800180030003000300060
+0060006000C000C00010297E9E15>I<003E0000C3000100C00200C00300600780600780
+7003003000003000003000003000FC700382700601700C01701800F03800E03000E07000
+E07000C0E001C0E001C0E00180E00380E00300E00600E00600600C003018001860000F80
+00141F7E9D16>64 D<00000C0000000C0000001C0000001C0000003C0000005C0000005C
+0000009E0000008E0000010E0000020E0000020E0000040E0000040E0000080E0000100E
+0000100E0000200700003FFF000040070000800700008007000100070001000700020007
+0004000700040007001C000780FF803FF01C1D7F9C1F>I<01FFFF00003C01C0003800E0
+003800F0003800700038007000700070007000F0007000F0007001E000E003C000E00780
+00E01F0000FFFC0001C00F0001C0078001C003C001C003C0038003C0038003C0038003C0
+038003C0070007800700070007000E0007001C000E007800FFFFC0001C1C7E9B1F>I<00
+01F808000E061800380138006000F001C0007003800070070000300F0000200E0000201C
+0000203C0000203C000000780000007800000078000000F0000000F0000000F0000000F0
+000000F0000100F0000100F0000100700002007000020030000400380008001C0010000E
+0060000701800000FE00001D1E7E9C1E>I<01FFFF80003C01E000380070003800380038
+003C0038001C0070001C0070001E0070001E0070001E00E0001E00E0001E00E0001E00E0
+001E01C0003C01C0003C01C0003C01C000380380007803800070038000F0038000E00700
+01C0070003800700070007001C000E007800FFFFC0001F1C7E9B22>I<01FFFFF8003C00
+78003800180038001000380010003800100070001000700010007008100070080000E010
+0000E0100000E0300000FFF00001C0200001C0200001C0200001C0200003804040038000
+400380008003800080070001000700010007000300070006000E003E00FFFFFC001D1C7E
+9B1F>I<01FFFFF0003C00F0003800300038002000380020003800200070002000700020
+007008200070080000E0100000E0100000E0300000FFF00001C0200001C0200001C02000
+01C020000380400003800000038000000380000007000000070000000700000007000000
+0F000000FFF000001C1C7E9B1B>I<0001F808000E061800380138006000F001C0007003
+800070070000300F0000200E0000201C0000203C0000203C000000780000007800000078
+000000F0000000F0000000F0007FF0F0000780F0000700F0000700F00007007000070070
+000E0030000E0038000E001C001E000E0064000701840000FE00001D1E7E9C21>I<01FF
+C3FF80003C0078000038007000003800700000380070000038007000007000E000007000
+E000007000E000007000E00000E001C00000E001C00000E001C00000FFFFC00001C00380
+0001C003800001C003800001C00380000380070000038007000003800700000380070000
+07000E000007000E000007000E000007000E00000F001E0000FFE1FFC000211C7E9B23>
+I<01FFC07F80003C001E0000380018000038002000003800400000380080000070020000
+00700400000070080000007010000000E040000000E0C0000000E1E0000000E2E0000001
+C470000001D070000001E038000001C0380000038038000003801C000003801C00000380
+0E000007000E000007000E0000070007000007000700000F00078000FFE03FF000211C7E
+9B23>75 D<01FE0000FF003E0000F0002E0001E0002E0002E0002E0002E0002E0004E000
+4E0009C0004E0009C000470011C000470011C00087002380008700438000870043800087
+00838001070107000107010700010382070001038207000203840E000203880E00020388
+0E000203900E000403A01C000403A01C000401C01C000C01C01C001C01803C00FF8103FF
+80281C7E9B28>77 D<0003F800000E0E000038038000E001C001C001C0038000E0070000
+E00F0000F01E0000F01C0000F03C0000F03C0000F0780000F0780000F0780000F0F00001
+E0F00001E0F00001E0F00003C0F00003C0F0000780F0000780F0000F0070000E0070001C
+00380038003C0070001C01C0000707800001FC00001C1E7E9C20>79
+D<01FFFF00003C03C0003800E0003800F00038007000380070007000F0007000F0007000
+F0007000E000E001E000E003C000E0070000E01E0001FFF00001C0000001C0000001C000
+0003800000038000000380000003800000070000000700000007000000070000000F0000
+00FFE000001C1C7E9B1B>I<01FFFE00003C03C0003800E0003800F00038007000380070
+007000F0007000F0007000F0007001E000E001C000E0078000E01E0000FFF00001C03800
+01C00C0001C00E0001C00E0003800E0003800E0003800E0003800E0007001E0007001E08
+07001E0807001E100F000F10FFE00F20000003C01D1D7E9B20>82
+D<000FC100303300400F0080060180060300060300060600040600040700000700000780
+0003F00001FF0000FFC0003FE00003E00000F00000700000300000302000302000306000
+606000606000C0600080F00300CC060083F800181E7E9C19>I<1FFFFFF01C0380703007
+0030200700206007002040070020400E0020800E0020800E0020000E0000001C0000001C
+0000001C0000001C00000038000000380000003800000038000000700000007000000070
+00000070000000E0000000E0000000E0000000E0000001E000007FFF00001C1C7F9B18>
+I<7FF03FE00F0007000E0006000E0004000E0004000E0004001C0008001C0008001C0008
+001C00080038001000380010003800100038001000700020007000200070002000700020
+00E0004000E0004000E0004000E0008000E0008000E00100006002000060040000300800
+001830000007C000001B1D7D9B1C>I<FFC00FF01C0003801C0003001C0002001C000200
+1C0004001C0008001E0008000E0010000E0030000E0020000E0040000E0040000E008000
+0E0100000F01000007020000070400000704000007080000070800000710000007200000
+03A0000003C00000038000000380000003000000030000001C1D7D9B18>I<FFC0FFC0FF
+3C001C003C1C001C00101C003C00101C003C00201C005C00401C005C00401C009C00801C
+009C00801C011C01001C011C01001C021C02001C041C02001C041C04001C081C08001C08
+1C08001C100E10001E100E10000E200E20000E200E20000E400E40000E800EC0000E800E
+80000F000F00000F000F00000E000E00000E000E00000C000C00000C000C0000281D7D9B
+27>I<01FFC0FF80001E003C00001C003000000E002000000E004000000F008000000701
+0000000782000000038400000003CC00000001D800000001F000000001E000000000E000
+000000F00000000170000000027800000004380000000838000000103C000000201C0000
+00401E000000800E000001000F0000020007000006000700001E000F8000FF803FF00021
+1C7F9B22>I<FFE007F80F0001E00F0001800F00010007000200078004000380080003C0
+180003C0100001C0200001E0400000E0800000F1000000F2000000760000007C00000038
+0000003800000070000000700000007000000070000000E0000000E0000000E0000000E0
+000001C000001FFC00001D1C7F9B18>I<00FFFFE000F001C001C003800180070001000E
+0001001E0002001C0002003800020070000000E0000001C0000003800000070000000F00
+00001E0000001C0000003800000070020000E0040001C0040003800400070008000F0008
+000E0018001C003000380070007001E000FFFFE0001B1C7E9B1C>I<3F00070007000E00
+0E000E000E001C001C001C001C0039E03A303C1838187018701C701C701CE038E038E038
+E030E070E060E0C061C023001E000E1D7E9C12>98 D<0007E00000E00000E00001C00001
+C00001C00001C000038000038000038000038001E7000717000C0F00180F00380E00300E
+00700E00700E00E01C00E01C00E01C00E01C00E03880E03880E038806078803199001E0E
+00131D7E9C16>100 D<01F007080C0818043808300870307FC0E000E000E000E000E000
+E0046008601030600F800E127E9113>I<0001E0000630000E78000EF0001C60001C0000
+1C00001C00001C0000380000380003FFC000380000380000700000700000700000700000
+700000E00000E00000E00000E00000E00001C00001C00001C00001C00001C00001800003
+8000038000630000F30000F60000E4000078000015257E9C14>I<0038C000C5C00183C0
+0303C00703800603800E03800E03801C07001C07001C07001C07001C0E001C0E001C0E00
+0C1E00047C00039C00001C00001C00003800603800F03000F07000E0C0007F0000121A80
+9114>I<01C003C003C001800000000000000000000000001C0027004700470087008700
+0E000E001C001C001C003800388038807080710032001C000A1C7E9B0E>105
+D<0007000F000F00060000000000000000000000000078009C010C020C021C041C001C00
+1C0038003800380038007000700070007000E000E000E000E001C061C0F180F300E6007C
+001024809B11>I<0FC00001C00001C00003800003800003800003800007000007000007
+00000700000E07000E08800E11C00E23C01C47801C83001D00001E00003FC00038E00038
+7000387000707100707100707100707200E03200601C00121D7E9C16>I<381F81F04E20
+C6184640E81C4680F01C8F00F01C8E00E01C0E00E01C0E00E01C1C01C0381C01C0381C01
+C0381C01C0703803807138038071380380E1380380E2700700643003003820127E9124>
+109 D<3C1F004E61804681C04701C08F01C08E01C00E01C00E01C01C03801C03801C0380
+1C0700380710380710380E10380E2070064030038014127E9119>I<07878009C86008D0
+3008E03011C03011C03801C03801C0380380700380700380700380600700E00700C00701
+800783000E86000E78000E00000E00001C00001C00001C00001C00003C0000FF0000151A
+819115>112 D<01C206260C1E181E381C301C701C701CE038E038E038E038E070E070E0
+7060F023E01CE000E000E001C001C001C001C003801FF00F1A7E9113>I<3C3C4E424687
+470F8E1E8E0C0E000E001C001C001C001C0038003800380038007000300010127E9113>
+I<01F0060C0C040C0E180C1C001F000FE00FF003F80038201C7018F018F010803060601F
+800F127E9113>I<00C001C001C001C00380038003800380FFF00700070007000E000E00
+0E000E001C001C001C001C00382038203840384018800F000C1A80990F>I<1C00C02701
+C04701C04701C08703808703800E03800E03801C07001C07001C07001C0700180E20180E
+20180E201C1E200C264007C38013127E9118>I<1C03270747074703870187010E010E01
+1C021C021C021C041804180818081C100C2007C010127E9114>I<1C00C0802701C1C047
+01C1C04701C0C087038040870380400E0380400E0380401C0700801C0700801C0700801C
+07010018060100180601001C0E02001C0F04000E13080003E1F0001A127E911E>I<0787
+8008C84010F0C020F1E020E3C040E18000E00000E00001C00001C00001C00001C0006380
+80F38080F38100E5810084C60078780013127E9118>I<1C00C02701C04701C04701C087
+03808703800E03800E03801C07001C07001C07001C0700180E00180E00180E001C1E000C
+3C0007DC00001C00001800603800F03000F06000E0C0004180003E0000121A7E9114>I<
+038107C10FF6081C10080010002000400080010002000400080410043C1867F843F081E0
+10127E9113>I E /FC 46 128 df<0000FE000003018000060180000C0380001C018000
+1C0000001800000038000000380000003800000038000003FFFE0000700E0000700E0000
+700E0000701C0000701C0000E01C0000E01C0000E0380000E0380000E0380001C0380001
+C0720001C0720001C0720001C07200038034000380180003800000030000000300000007
+000000C6000000E6000000CC000000780000001925819C17>12 D<0001FEE0000707E000
+0E07E0000C07C0001C01C0001C01C0001801C00038038000380380003803800038038003
+FFFF0000700700007007000070070000700E0000700E0000E00E0000E00E0000E01C0000
+E01C0000E01C0001C01C0001C0390001C0390001C0390001C0390003801A0003800C0003
+800000030000000300000007000000C6000000E6000000CC000000780000001B25819C18
+>I<183C3C3C0404080810204080060C779C0D>39 D<FFC0FFC0FFC00A037D890F>45
+D<3078F06005047C830D>I<0004000C00180038007807B8007000700070007000E000E0
+00E000E001C001C001C001C0038003800380038007000700070007000F00FFF00E1C7B9B
+15>49 D<003E000041800080C00100C00200E00440E00440E00840E00840E00840E01081
+C01081C01103800E0300000600000C000018000060000080000300000400000800401000
+802000802001007F070043FE0081FC00807800131D7D9B15>I<00001800000018000000
+38000000380000007800000078000000B800000138000001380000023C0000021C000004
+1C00000C1C0000081C0000101C0000101C0000201C0000201C00007FFC0000C01C000080
+1C0001001C0001001E0002000E0002000E0004000E000C000E001C001E00FF00FFC01A1D
+7E9C1F>65 D<0003F020001E0C60003002E000E003C001C001C0038001C0070000C00E00
+00801E0000801C0000803C0000803C000000780000007800000078000000F0000000F000
+0000F0000000F0000000F0000400F0000400F0000400F000080070000800700010003800
+2000180040000C0180000706000001F800001B1E7A9C1E>67 D<01FFFF00003C03C00038
+00E0003800E000380070003800700070007800700038007000380070007800E0007800E0
+007800E0007800E0007801C000F001C000F001C000F001C000E0038001E0038001C00380
+03C0038003800700070007000E0007001C00070038000E00E000FFFF80001D1C7E9B1F>
+I<01FFFFF0003C00F0003800300038002000380020003800200070002000700020007008
+200070080000E0100000E0100000E0300000FFF00001C0200001C0200001C0200001C020
+0003804080038000800380008003800100070001000700030007000200070006000E003C
+00FFFFFC001C1C7E9B1C>I<01FFFFF0003C00F000380030003800200038002000380020
+0070002000700020007008200070080000E0100000E0100000E0300000FFF00001C02000
+01C0200001C0200001C02000038040000380000003800000038000000700000007000000
+07000000070000000F000000FFF000001C1C7E9B1B>I<0003F020001E0C60003002E000
+E003C001C001C0038001C0070000C00E0000801E0000801C0000803C0000803C00000078
+0000007800000078000000F0000000F0000000F001FF80F0001E00F0001C00F0001C00F0
+001C00F0001C00700038007000380038003800180078000C0090000707100001F800001B
+1E7A9C20>I<01FFC3FF80003C0078000038007000003800700000380070000038007000
+007000E000007000E000007000E000007000E00000E001C00000E001C00000E001C00000
+FFFFC00001C003800001C003800001C003800001C0038000038007000003800700000380
+070000038007000007000E000007000E000007000E000007000E00000F001E0000FFE1FF
+C000211C7E9B1F>I<03FF0078007000700070007000E000E000E000E001C001C001C001
+C0038003800380038007000700070007000E000E000E000E001E00FFC0101C7D9B10>I<
+01FFC0003C0000380000380000380000380000700000700000700000700000E00000E000
+00E00000E00001C00001C00001C00001C00003800203800203800203800407000407000C
+0700180700380E00F0FFFFF0171C7E9B1A>76 D<01FE0001FE003E0001E0002E0003C000
+2E0005C0002E0005C0002E0009C0004E000B80004E001380004E00238000470023800087
+0047000087004700008700870000870107000107010E000107020E000107040E00010704
+0E000207081C000203881C000203901C000203A01C000403A038000403C038000403C038
+000C038038001C03007800FF8307FF00271C7E9B25>I<000F8400304C00403C00801801
+001803001803001806001006001006000007000007000003E00003FC0001FF00007F8000
+07C00001C00001C00000C00000C02000C02000C0600180600180600300600200F00400CC
+180083E000161E7D9C17>83 D<1FFFFFC01C0701C0300E00C0200E0080600E0080400E00
+80401C0080801C0080801C0080001C000000380000003800000038000000380000007000
+0000700000007000000070000000E0000000E0000000E0000000E0000001C0000001C000
+0001C0000001C0000003C000007FFE00001A1C799B1E>I<7FF03FE00F0007000E000600
+0E0004000E0004000E0004001C0008001C0008001C0008001C0008003800100038001000
+380010003800100070002000700020007000200070002000E0004000E0004000E0004000
+E0008000E0008000E00100006002000060040000300800001830000007C000001B1D789B
+1F>I<FF83FF07F03C007001C038007001803800F001003800F001003801700200380170
+040038027004003802700800380470080038047010003808701000380870200038107020
+00383070400038207040001C407080001C407080001C807100001C807100001D00720000
+1D007200001E007400001E007400001C003800001C003800001800300000180020000010
+00200000241D779B29>87 D<01E307170C0F180F380E300E700E700EE01CE01CE01CE01C
+E039E039E0396079319A1E0C10127C9115>97 D<3F00070007000E000E000E000E001C00
+1C001C001C0039E03A183C0C380C700C700E700E700EE01CE01CE01CE018E038E030E060
+60C031801E000F1D7C9C13>I<00F803040E041C0E181C300070007000E000E000E000E0
+00E000E0046008601030600F800F127C9113>I<0007E00000E00000E00001C00001C000
+01C00001C000038000038000038000038001E7000717000C0F00180F00380E00300E0070
+0E00700E00E01C00E01C00E01C00E01C00E03900E03900E03900607900319A001E0C0013
+1D7C9C15>I<00F807040C0418023804300470087FF0E000E000E000E000E00060046008
+301030600F800F127C9113>I<0003C0000670000C70001C60001C00001C000038000038
+0000380000380000380003FF8000700000700000700000700000700000E00000E00000E0
+0000E00000E00001C00001C00001C00001C00001C0000380000380000380000300000300
+00070000C60000E60000CC00007800001425819C0D>I<0078C001C5C00303C00603C00E
+03800C03801C03801C0380380700380700380700380700380E00380E00380E00181E000C
+7C00079C00001C00001C00003800003800C03000E07000C1C0007F0000121A7E9113>I<
+0FC00001C00001C0000380000380000380000380000700000700000700000700000E3E00
+0EC3000F03800E03801E03801C03801C03801C0380380700380700380700380E00700E40
+700E40701C40701C80E00C80600700121D7E9C15>I<0180038001000000000000000000
+0000000000001C002600470047008E008E000E001C001C001C0038003800710071007100
+720072003C00091C7C9B0D>I<0FC00001C00001C0000380000380000380000380000700
+000700000700000700000E07800E08800E11C00E21C01C41801C80001D00001E00003FC0
+0038E000387000387000707100707100707100707200E03200601C00121D7E9C13>107
+D<1F800380038007000700070007000E000E000E000E001C001C001C001C003800380038
+0038007000700070007000E200E200E200E40064003800091D7D9C0B>I<1C1E07802663
+18C04683A0E04703C0E08E0380E08E0380E00E0380E00E0380E01C0701C01C0701C01C07
+01C01C070380380E0388380E0388380E0708380E0710701C0320300C01C01D127C9122>
+I<383E004CC3004D03804E03809E03809C03801C03801C0380380700380700380700380E
+00700E40700E40701C40701C80E00C8060070012127C9117>I<00F800030C000E06001C
+0300180300300300700380700380E00700E00700E00700E00E00E00E00E01C0060180060
+300030E0000F800011127C9115>I<03878004C86004D03004E03009C03009C03801C038
+01C0380380700380700380700380600700E00700C00701800783000E86000E78000E0000
+0E00001C00001C00001C00001C0000380000FF0000151A809115>I<01E107130C0F180F
+380E300E700E700EE01CE01CE01CE01CE038E038E038607831F01E700070007000E000E0
+00E000E001C00FF8101A7C9113>I<1C3C2642468747078E068E000E000E001C001C001C
+001C0038003800380038007000300010127C9112>I<01F006080C080C1C18181C001F00
+1FC00FF007F0007800386030E030C030806060C01F000E127D9111>I<03000700070007
+000E000E000E000E00FFE01C001C001C0038003800380038007000700070007000E080E0
+80E100E100660038000B1A7C990E>I<1C01802E03804E03804E03808E07008E07001C07
+001C0700380E00380E00380E00380E00301C80301C80301C80383C80184D000F86001112
+7C9116>I<1C062E0E4E064E068E028E021C021C02380438043804380830083008301038
+2018400F800F127C9113>I<1E01832703874703874703838707018707010E07010E0701
+1C0E021C0E021C0E021C0E04180C04181C04181C081C1E080C263007C3C018127C911C>
+I<0387800CC8400870E01070E020E0C020E00000E00000E00001C00001C00001C00001C0
+00038100638100E38200C5820085840078780013127E9113>I<1C01802E03804E03804E
+03808E07008E07001C07001C0700380E00380E00380E00380E00301C00301C00301C0038
+3C001878000FB800003800003000007000E06000E0C0008180004300003C0000111A7C91
+14>I<70E0F1E0F1E060C00B04759C15>127 D E /FD 6 117 df<0001FC0080000E0380
+800038004180006000218001C00013800380000B80070000078006000007800E00000380
+1C000003801C0000018038000001803800000180780000008078000000807000000080F0
+00000000F000000000F000000000F000000000F000000000F000000000F000000000F000
+000000F000000000F0000000007000000000780000008078000000803800000080380000
+00801C000001001C000001000E0000010006000002000700000200038000040001C00008
+0000600010000038006000000E0380000001FC0000212A7DA827>67
+D<00FC000307800E01C01C00E01800F0380070780070700078700078F00038FFFFF8F000
+00F00000F00000F00000F000007000007800007800083800081C00100C00200600400381
+8000FE0015197E9818>101 D<0E0FC000FE3070001E4038000E8038000F001C000F001C
+000E001C000E001C000E001C000E001C000E001C000E001C000E001C000E001C000E001C
+000E001C000E001C000E001C000E001C000E001C000E001C000E001C000E001C001F003E
+00FFE1FFC01A197E981E>110 D<00FE000383800600C00C006018003038003878003C70
+001C70001CF0001EF0001EF0001EF0001EF0001EF0001EF0001E70001C70001C78003C38
+00381C00701C00700600C003838000FE0017197E981B>I<07E100181B00200700400300
+C00300C00100C00100E00100F000007C00003FE0001FF80007FC00003E00000F00800380
+800380800180C00180C00180E00100E00300D00200CC0C0083F00011197E9815>115
+D<0100000100000100000100000300000300000300000700000700000F00003F0000FFFF
+000700000700000700000700000700000700000700000700000700000700000700000700
+0007000007008007008007008007008007008007008007008003810003810001C200007C
+0011247FA315>I E /FE 9 117 df<FFFC00FFFF00F00F80F003C0F001E0F000F0F000F0
+F000F0F000F0F000F0F000F0F001E0F003E0F00FC0FFFF80FFFE00F00000F00000F00000
+F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000141D7C9C1B>
+80 D<03F8000FFE001C0F00380700700300600000E00000E00000E00000E00000F00000
+7800007F00003FE0001FFC0007FE0001FF00001F800007800003C00003C00001C00001C0
+0001C00001C0C00180E00380F007007C0E001FFC0007F000121F7E9D17>83
+D<03F00FFC1FFE3C0E78027000E000E000E000E000E000E000700078023C0E1FFE0FFC03
+F00F127F9112>99 D<F0F0F0F00000000000000070707070707070707070707070707070
+7070041D7E9C0A>105 D<03F0000FFC001FFE003C0F00780780700380E001C0E001C0E0
+01C0E001C0E001C0F003C07003807807803C0F001FFE000FFC0003F00012127F9115>
+111 D<E3E0EFF8FFFCF83EE01EE00EE007E007E007E007E007E00FE00EF01EF87CFFF8EF
+F0E3E0E000E000E000E000E000E000E000E000101A7D9115>I<E380E780EF80FC00F800
+F000F000E000E000E000E000E000E000E000E000E000E000E00009127D910E>114
+D<1FC03FF07FF0F030E000E000F0007F003FC01FE001F0003800388038F078FFF07FE01F
+C00D127F9110>I<1C001C001C001C001C001C00FFE0FFE01C001C001C001C001C001C00
+1C001C001C001C001C001C001C201FF00FF007C00C187F970F>I
+E /FF 85 128 df<FFFFF00F00F00F00300F00100F00100F00180F00080F00080F00080F
+00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F
+00000F00000F00000F00000F00000F8000FFF800151C7E9B1A>0
+D<00030000000300000007800000078000000FC000000BC0000013E0000011E0000021F0
+000020F0000040F8000040780000807C0000803C0001003E0001001E0002001F0002000F
+0004000F8004000780080007C0080003C0100001E0300001F0200000F0600000F87FFFFF
+F8FFFFFFFCFFFFFFFC1E1D7E9C23>I<007E1F0001C1B1800303E3C00703C3C00E03C180
+0E01C0000E01C0000E01C0000E01C0000E01C0000E01C000FFFFFC000E01C0000E01C000
+0E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C000
+0E01C0000E01C0000E01C0000E01C0000E01C0007F87FC001A1D809C18>11
+D<007E0001C1800301800703C00E03C00E01800E00000E00000E00000E00000E0000FFFF
+C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01
+C00E01C00E01C00E01C00E01C07F87F8151D809C17>I<007FC001C1C00303C00703C00E
+01C00E01C00E01C00E01C00E01C00E01C00E01C0FFFFC00E01C00E01C00E01C00E01C00E
+01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C07F
+CFF8151D809C17>I<3C42818181423C0807759D1F>23 D<60F0F0F0F0F0F0F060606060
+606060606060606060000000000060F0F060041E7C9D0C>33 D<6060F0F0F8F868680808
+08080808101010102020404080800D0C7F9C15>I<60F0F8680808081010204080050C7C
+9C0C>39 D<00800100020006000C000C00180018003000300030006000600060006000E0
+00E000E000E000E000E000E000E000E000E000E000E00060006000600060003000300030
+00180018000C000C000600020001000080092A7C9E10>I<800040002000300018001800
+0C000C000600060006000300030003000300038003800380038003800380038003800380
+03800380038003000300030003000600060006000C000C00180018003000200040008000
+092A7E9E10>I<0006000000060000000600000006000000060000000600000006000000
+0600000006000000060000000600000006000000060000FFFFFFE0FFFFFFE00006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+06000000060000000600001B1C7E9720>43 D<60F0F0701010101020204080040C7C830C
+>I<FFE0FFE00B0280890E>I<60F0F06004047C830C>I<03C00C301818300C300C700E60
+066006E007E007E007E007E007E007E007E007E007E007E007E007E00760066006700E30
+0C300C18180C3007E0101D7E9B15>48 D<010007003F00C7000700070007000700070007
+0007000700070007000700070007000700070007000700070007000700070007000700FF
+F80D1C7C9B15>I<07C01830201C400C400EF00FF80FF807F8077007000F000E000E001C
+001C00380070006000C00180030006010C01180110023FFE7FFEFFFE101C7E9B15>I<07
+E01830201C201C781E780E781E381E001C001C00180030006007C00030001C001C000E00
+0F000F700FF80FF80FF80FF00E401C201C183007C0101D7E9B15>I<000C00000C00001C
+00003C00003C00005C0000DC00009C00011C00031C00021C00041C000C1C00081C00101C
+00301C00201C00401C00C01C00FFFFC0001C00001C00001C00001C00001C00001C00001C
+0001FFC0121C7F9B15>I<300C3FF83FF03FC020002000200020002000200023E02C3030
+18301C200E000E000F000F000F600FF00FF00FF00F800E401E401C2038187007C0101D7E
+9B15>I<00F0030C04040C0E181E301E300C700070006000E3E0E430E818F00CF00EE006
+E007E007E007E007E007600760077006300E300C18180C3003E0101D7E9B15>I<400000
+7FFF807FFF007FFF00400200800400800400800800001000001000002000006000004000
+00C00000C00001C000018000018000038000038000038000038000078000078000078000
+078000078000078000030000111D7E9B15>I<03E00C301008200C200660066006700670
+067C0C3E183FB01FE007F007F818FC307E601E600FC007C003C003C003C0036002600430
+0C1C1007E0101D7E9B15>I<03C00C301818300C700C600EE006E006E007E007E007E007
+E0076007700F300F18170C2707C700060006000E300C780C78187018203010C00F80101D
+7E9B15>I<60F0F0600000000000000000000060F0F06004127C910C>I<60F0F060000000
+0000000000000060F0F0701010101020204080041A7C910C>I<FFFFFFE0FFFFFFE00000
+000000000000000000000000000000000000000000000000000000000000FFFFFFE0FFFF
+FFE01B0C7E8F20>61 D<0FE03038401CE00EF00EF00EF00E000C001C0030006000C00080
+01800100010001000100010001000000000000000000000003000780078003000F1D7E9C
+14>63 D<000600000006000000060000000F0000000F0000000F00000017800000178000
+0037C0000023C0000023C0000043E0000041E0000041E0000080F0000080F0000080F000
+010078000100780001FFF80002003C0002003C0002003C0004001E0004001E000C001F00
+0C000F001E001F00FF00FFF01C1D7F9C1F>65 D<FFFFC0000F0078000F003C000F001E00
+0F000E000F000F000F000F000F000F000F000F000F000E000F001E000F003C000F00F800
+0FFFF0000F003C000F001E000F000F000F0007000F0007800F0007800F0007800F000780
+0F0007800F000F000F000F000F001E000F007800FFFFE000191C7F9B1D>I<001F808000
+E0618001801980070007800E0003801C0003801C00018038000180780000807800008070
+000080F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000070
+0000807800008078000080380000801C0001001C0001000E000200070004000180080000
+E03000001FC000191E7E9C1E>I<FFFFC0000F00F0000F003C000F000E000F0007000F00
+07000F0003800F0003C00F0001C00F0001C00F0001E00F0001E00F0001E00F0001E00F00
+01E00F0001E00F0001E00F0001E00F0001C00F0001C00F0003C00F0003800F0007800F00
+07000F000E000F001C000F007000FFFFC0001B1C7E9B20>I<FFFFFC0F003C0F000C0F00
+040F00040F00060F00020F00020F01020F01000F01000F01000F03000FFF000F03000F01
+000F01000F01000F01010F00010F00020F00020F00020F00060F00060F000C0F003CFFFF
+FC181C7E9B1C>I<FFFFF80F00780F00180F00080F00080F000C0F00040F00040F01040F
+01000F01000F01000F03000FFF000F03000F01000F01000F01000F01000F00000F00000F
+00000F00000F00000F00000F00000F0000FFF800161C7E9B1B>I<001F808000E0618001
+801980070007800E0003801C0003801C00018038000180780000807800008070000080F0
+000000F0000000F0000000F0000000F0000000F0000000F000FFF0F0000F807000078078
+00078078000780380007801C0007801C0007800E00078007000B800180118000E0608000
+1F80001C1E7E9C21>I<FFF0FFF00F000F000F000F000F000F000F000F000F000F000F00
+0F000F000F000F000F000F000F000F000F000F000F000F000F000FFFFF000F000F000F00
+0F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F00
+0F000F000F000F000F00FFF0FFF01C1C7F9B1F>I<FFF00F000F000F000F000F000F000F
+000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F
+000F00FFF00C1C7F9B0F>I<07FF80007C00003C00003C00003C00003C00003C00003C00
+003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00
+003C00703C00F83C00F83C00F8380070780040700030E0000F8000111D7F9B15>I<FFF8
+000F80000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00
+000F00000F00000F00000F00000F00000F00080F00080F00080F00180F00180F00100F00
+300F00700F01F0FFFFF0151C7E9B1A>76 D<FF8000FF800F8000F8000F8000F8000BC001
+78000BC00178000BC001780009E002780009E002780008F004780008F004780008F00478
+00087808780008780878000878087800083C107800083C107800083C107800081E207800
+081E207800081E207800080F407800080F40780008078078000807807800080780780008
+030078001C03007800FF8307FF80211C7E9B26>I<FF001FF00F8003800FC001000BC001
+0009E0010008F0010008F0010008780100083C0100083E0100081E0100080F0100080F81
+00080781000803C1000801E1000801F1000800F1000800790008007D0008003D0008001F
+0008001F0008000F0008000700080003001C000300FF8001001C1C7F9B1F>I<003F8000
+00E0E0000380380007001C000E000E001C0007003C00078038000380780003C0780003C0
+700001C0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0
+700001C0780003C0780003C0380003803C0007801C0007000E000E0007001C0003803800
+00E0E000003F80001B1E7E9C20>I<FFFF800F00E00F00780F003C0F001C0F001E0F001E
+0F001E0F001E0F001E0F001C0F003C0F00780F00E00FFF800F00000F00000F00000F0000
+0F00000F00000F00000F00000F00000F00000F00000F0000FFF000171C7E9B1C>I<FFFF
+00000F01E0000F0078000F003C000F001C000F001E000F001E000F001E000F001E000F00
+1C000F003C000F0078000F01E0000FFF00000F01E0000F0070000F0078000F003C000F00
+3C000F003C000F003C000F003C000F003C000F003C100F003C100F001C100F001C10FFF0
+0E20000003C01C1D7E9B1F>82 D<07E0801C1980300580300380600180E00180E00080E0
+0080E00080F00000F800007C00007FC0003FF8001FFE0007FF0000FF80000F800007C000
+03C00001C08001C08001C08001C0C00180C00180E00300D00200CC0C0083F800121E7E9C
+17>I<7FFFFFC0700F01C0600F00C0400F0040400F0040C00F0020800F0020800F002080
+0F0020000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000
+0F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000
+1F800003FFFC001B1C7F9B1E>I<FFF01FF00F0003800F0001000F0001000F0001000F00
+01000F0001000F0001000F0001000F0001000F0001000F0001000F0001000F0001000F00
+01000F0001000F0001000F0001000F0001000F0001000F0001000F000100070002000780
+02000380040001C0040000E0180000706000000F80001C1D7F9B1F>I<FFE00FF01F0003
+C01F0001800F0001000F000100078002000780020007C0020003C0040003C0040003E00C
+0001E0080001E0080000F0100000F0100000F810000078200000782000003C4000003C40
+00003C4000001E8000001E8000001F8000000F0000000F00000006000000060000000600
+001C1D7F9B1F>I<FFE1FFC0FF1F003E003C1E003C00180F001E00100F001E00100F001E
+001007801F002007801F002007801F002003C027804003C027804003C027804001E043C0
+8001E043C08001E043C08000F081E10000F081E10000F081E10000F900F300007900F200
+007900F200007E007E00003E007C00003E007C00003C003C00001C003800001C00380000
+180018000008001000281D7F9B2B>I<FFF07FC00FC01E0007800C0007C0080003C01000
+01E0200001F0200000F0400000788000007C8000003D0000003E0000001F0000000F0000
+000F8000000F80000013C0000023E0000021E0000040F0000080F8000080780001007C00
+02003E0002001E0006001F001F001F80FF807FF01C1C7F9B1F>I<FFF003FC0F8001E007
+8000C007C0008003C0010003E0030001E0020000F0040000F8040000780800007C180000
+3C1000003E2000001F2000000F4000000FC0000007800000078000000780000007800000
+078000000780000007800000078000000780000007800000078000007FF8001E1C809B1F
+>I<FEFEC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0
+C0C0C0C0C0FEFE07297C9E0C>91 D<08081010202040404040808080808080B0B0F8F878
+7830300D0C7A9C15>I<FEFE060606060606060606060606060606060606060606060606
+06060606060606060606060606FEFE0729809E0C>I<E0E0E0E003047C9C0C>95
+D<1FC000307000783800781C00301C00001C00001C0001FC000F1C00381C00701C00601C
+00E01C40E01C40E01C40603C40304E801F870012127E9115>97 D<FC00001C00001C0000
+1C00001C00001C00001C00001C00001C00001C00001C00001C7C001D87001E01801C00C0
+1C00E01C00601C00701C00701C00701C00701C00701C00701C00601C00E01C00C01E0180
+19070010FC00141D7F9C17>I<03F80C0C181E301E700C6000E000E000E000E000E000E0
+0060007002300218040C1803E00F127F9112>I<001F8000038000038000038000038000
+038000038000038000038000038000038003F3800E0B80180780300380700380600380E0
+0380E00380E00380E00380E00380E003806003807003803003801807800E1B8003E3F014
+1D7F9C17>I<07E00C301818300C700E6006E006FFFEE000E000E000E000600070023002
+18040C1803E00F127F9112>I<00F8018C071E061E0E0C0E000E000E000E000E000E00FF
+E00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E007FE00F
+1D809C0D>I<00038007C4C01C78C0383880301800701C00701C00701C00701C00301800
+3838001C700027C0002000002000003000003FF8001FFF001FFF802003806001C0C000C0
+C000C0C000C06001803003001C0E0007F800121C7F9215>I<FC00001C00001C00001C00
+001C00001C00001C00001C00001C00001C00001C00001C7C001C87001D03001E03801C03
+801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03
+80FF9FF0141D7F9C17>I<18003C003C0018000000000000000000000000000000FC001C
+001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF80091D7F
+9C0C>I<00C001E001E000C0000000000000000000000000000007E000E000E000E000E0
+00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E060E0F0C0
+F1C061803E000B25839C0D>I<FC00001C00001C00001C00001C00001C00001C00001C00
+001C00001C00001C00001C0FE01C07801C06001C0C001C10001C20001C40001CE0001DE0
+001E70001C78001C38001C3C001C1C001C0E001C0F001C0F80FF9FE0131D7F9C16>I<FC
+001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C
+001C001C001C001C001C001C001C001C001C00FF80091D7F9C0C>I<FC7E07E0001C8388
+38001D019018001E01E01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C
+001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C00
+1C01C01C00FF8FF8FF8021127F9124>I<FC7C001C87001D03001E03801C03801C03801C
+03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C0380FF9FF014
+127F9117>I<03F0000E1C00180600300300700380600180E001C0E001C0E001C0E001C0
+E001C0E001C06001807003803003001806000E1C0003F00012127F9115>I<FC7C001D87
+001E01801C01C01C00E01C00E01C00701C00701C00701C00701C00701C00701C00E01C00
+E01C01C01E01801D07001CFC001C00001C00001C00001C00001C00001C00001C0000FF80
+00141A7F9117>I<03E0800E1980180580380780700380700380E00380E00380E00380E0
+0380E00380E003807003807003803807801807800E1B8003E38000038000038000038000
+0380000380000380000380001FF0141A7F9116>I<FCE01D381E781E781C301C001C001C
+001C001C001C001C001C001C001C001C001C00FFC00D127F9110>I<1F9020704030C010
+C010E010F8007F803FE00FF000F880388018C018C018E010D0608FC00D127F9110>I<04
+000400040004000C000C001C003C00FFE01C001C001C001C001C001C001C001C001C001C
+101C101C101C101C100C100E2003C00C1A7F9910>I<FC1F801C03801C03801C03801C03
+801C03801C03801C03801C03801C03801C03801C03801C03801C03801C07800C07800E1B
+8003E3F014127F9117>I<FF07E03C03801C01001C01000E02000E02000F060007040007
+040003880003880003C80001D00001D00000E00000E00000E00000400013127F9116>I<
+FF3FC7E03C0703C01C0701801C0701001C0B01000E0B82000E0B82000E1182000711C400
+0711C4000720C40003A0E80003A0E80003C0680001C0700001C070000180300000802000
+1B127F911E>I<FF0FE01E07001C06000E040007080003900003B00001E00000E00000F0
+0001F000013800021C00041C000C0E001807003C0780FE1FF014127F9116>I<FF07E03C
+03801C01001C01000E02000E02000F060007040007040003880003880003C80001D00001
+D00000E00000E00000E000004000004000008000008000F08000F10000F3000066000038
+0000131A7F9116>I<7FFC70386038407040F040E041C003C0038007000F040E041C043C
+0C380870087038FFF80E127F9112>I<FFFFF01401808B15>I<1C043F0843F080E00E047D
+9B15>126 D<6060F0F0F0F060600C047C9C15>I E /FG 70 126
+df<038700038700038700038700038700038700FFFFE0FFFFE07FFFE0070E00070E0007
+0E000E1C000E1C000E1C000E1C007FFFE0FFFFE0FFFFE01C38001C38001C38001C38001C
+38001C380013197F9816>35 D<00E001E0038007000E001C001C00380038007000700070
+00E000E000E000E000E000E000E000E000E000700070007000380038001C001C000E0007
+00038001E000E00B217A9C16>40 D<C000E000700038001C000E000E0007000700038003
+80038001C001C001C001C001C001C001C001C001C0038003800380070007000E000E001C
+0038007000E000C0000A217B9C16>I<0380038003800380E38EF39EFFFE3FF80FE00FE0
+3FF8FFFEF39EE38E03800380038003800F127D9516>I<00E00000E00000E00000E00000
+E00000E00000E00000E000FFFFE0FFFFE0FFFFE000E00000E00000E00000E00000E00000
+E00000E00000E00013137F9516>I<387C7E7E3E0E1E1C78F060070B798416>I<FFFF80FF
+FF80FFFF8011037E8D16>I<70F8F8F8700505788416>I<00018000038000038000070000
+0700000E00000E00001C00001C0000380000380000700000700000E00000E00001C00001
+C0000380000380000700000700000E00000E00001C00001C000038000038000070000070
+0000E00000E00000C0000011207E9C16>I<03E0000FF8001FFC001E3C00380E00780F00
+700700700700E00380E00380E00380E00380E00380E00380E00380E00380F00780700700
+700700780F003C1E001E3C001FFC000FF80003E00011197E9816>I<0300070007000F00
+1F00FF00FF00E70007000700070007000700070007000700070007000700070007000700
+FFF8FFF8FFF80D197B9816>I<07E0001FF8003FFC00783E00E00700F00780F003806003
+80000380000380000700000700000E00001C0000380000700000E00001C0000380000F00
+001E03803803807FFF80FFFF807FFF8011197E9816>I<07E0001FF8003FFC00781E0078
+0700300700000700000700000E00003E0007FC0007F00007FC00001E0000070000030000
+0380000380600380F00380E00700781E003FFC001FF80007E00011197E9816>I<007C00
+00FC0000DC0001DC00039C00039C00071C000F1C000E1C001E1C003C1C00381C00781C00
+F01C00FFFFE0FFFFE0FFFFE0001C00001C00001C00001C00001C0001FFC001FFC001FFC0
+13197F9816>I<3FFE007FFE007FFE007000007000007000007000007000007000007000
+0077F0007FFC007FFE00780F00300700000380000380600380F00380F00380E00700781E
+003FFC001FF80007E00011197E9816>I<70F8F8F870000000000000000070F8F8F87005
+12789116>58 D<387C7C7C38000000000000000038787C7C3C1C1C3870F0400618799116
+>I<000180000780001F80003E0000F80001F00007C0000F80003E0000FC0000F00000FC
+00003E00000F800007C00001F00000F800003E00001F8000078000018011157E9616>I<
+FFFFE0FFFFE07FFFE00000000000000000000000000000007FFFE0FFFFE0FFFFE0130B7F
+9116>I<C00000F00000FC00003E00000F800007C00001F00000F800003E00001F800007
+80001F80003E0000F80001F00007C0000F80003E0000FC0000F00000C0000011157E9616
+>I<00F80003FC0007FE000F07001C3B8038FF8079FF8073C7C07383C0E701C0E701C0E7
+01C0E701C0E701C0E701C0E701C073838073C78079FF0038FE001C38000F03C007FFC003
+FF0000FC0012197E9816>64 D<00E00001F00001F00001B00001B00003B80003B80003B8
+00031800071C00071C00071C00071C00071C000E0E000E0E000FFE000FFE001FFF001C07
+001C07001C07007E0FC0FF1FE07E0FC013197F9816>I<7FF800FFFE007FFF001C07001C
+07801C03801C03801C03801C03801C07001FFF001FFE001FFE001C1F001C03801C03C01C
+01C01C01C01C01C01C01C01C03C01C07807FFF80FFFF007FFC0012197F9816>I<7FF800
+FFFE007FFF001C0F001C07801C03C01C01C01C01C01C01E01C00E01C00E01C00E01C00E0
+1C00E01C00E01C00E01C00E01C01C01C01C01C03C01C07801C0F807FFF00FFFE007FF800
+1319809816>68 D<7FFFC0FFFFC07FFFC01C01C01C01C01C01C01C01C01C00001C00001C
+1C001C1C001FFC001FFC001FFC001C1C001C1C001C00001C00E01C00E01C00E01C00E01C
+00E07FFFE0FFFFE07FFFE013197F9816>I<7FFFE0FFFFE07FFFE01C00E01C00E01C00E0
+1C00E01C00001C00001C1C001C1C001FFC001FFC001FFC001C1C001C1C001C00001C0000
+1C00001C00001C00001C00007F8000FFC0007F800013197F9816>I<01F18007FB800FFF
+801F0F803C0780380380700380700380F00000E00000E00000E00000E00000E01FC0E01F
+E0E01FC0F003807003807007803807803C07801E0F800FFF8007FB8001F38013197F9816
+>I<7FFCFFFE7FFC03800380038003800380038003800380038003800380038003800380
+038003800380038003807FFCFFFE7FFC0F197D9816>73 D<FF8000FFC000FF80001C0000
+1C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0000
+1C00001C00401C00E01C00E01C00E01C00E0FFFFE0FFFFE0FFFFE013197F9816>76
+D<FC07E0FE0FE0FE0FE03A0B803B1B803B1B803B1B803B1B803B1B803BBB8039B38039B3
+8039B38039B38039F38038E38038E380380380380380380380380380380380FE0FE0FE0F
+E0FE0FE013197F9816>I<7E07F0FF0FF87F07F01D81C01D81C01D81C01DC1C01CC1C01C
+E1C01CE1C01C61C01C71C01C71C01C71C01C31C01C39C01C39C01C19C01C1DC01C0DC01C
+0DC01C0DC07F07C0FF87C07F03C01519809816>I<1FFC003FFE007FFF00780F00F00780
+E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380
+E00380E00380F00780F00780780F007FFF003FFE001FFC0011197E9816>I<7FF800FFFE
+007FFF001C0F801C03801C03C01C01C01C01C01C01C01C03C01C03801C0F801FFF001FFE
+001FF8001C00001C00001C00001C00001C00001C00001C00007F0000FF80007F00001219
+7F9816>I<7FF000FFFC007FFE001C0F001C07801C03801C03801C03801C03801C07801C
+0F001FFE001FFC001FFE001C0E001C07001C07001C07001C07001C07101C07381C07387F
+03F0FF83F07F01E01519809816>82 D<07E3001FFF003FFF00781F00F00700E00700E007
+00E00000F000007800003F80001FF00007FC0000FE00000F000007000003800003806003
+80E00380E00700F80F00FFFE00FFFC00C7F00011197E9816>I<7FFFE0FFFFE0FFFFE0E0
+E0E0E0E0E0E0E0E0E0E0E000E00000E00000E00000E00000E00000E00000E00000E00000
+E00000E00000E00000E00000E00000E00000E00007FC000FFE0007FC0013197F9816>I<
+7F07F0FF8FF87F07F01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C0
+1C01C01C01C01C01C01C01C01C01C01C01C01C01C00E03800E038007070007FF0003FE00
+00F8001519809816>I<FE0FE0FE0FE0FE0FE03803803C07801C07001C07001C07001E0F
+000E0E000E0E000E0E000E0E00071C00071C00071C00071C0003180003B80003B80003B8
+0001B00001F00001F00000E00013197F9816>I<7FFF80FFFF80FFFF80E00700E00F00E0
+1E00E01C00003C0000780000700000F00001E00001C00003C0000780000700000F00001E
+03801C03803C0380780380700380FFFF80FFFF80FFFF8011197E9816>90
+D<C00000E00000E000007000007000003800003800001C00001C00000E00000E00000700
+0007000003800003800001C00001C00000E00000E000007000007000003800003800001C
+00001C00000E00000E0000070000070000038000038000018011207E9C16>92
+D<03000F803FE0FDF8F07840100D067C9816>94 D<FFFF80FFFF80FFFF8011037E7E16>
+I<1FE0003FF0007FF800783C00300E00000E00000E0003FE001FFE003E0E00700E00E00E
+00E00E00E00E00783E007FFFE03FE7E00F83E013127E9116>97 D<FC0000FC0000FC0000
+1C00001C00001C00001C00001C7C001DFE001FFF001F07801E03C01C01C01C00E01C00E0
+1C00E01C00E01C00E01C00E01C01C01E03C01F07801FFF001DFE000C780013197F9816>
+I<03F80FFC1FFE3C1E780C7000E000E000E000E000E000F000700778073E0E1FFC0FF803
+F010127D9116>I<003F00003F00003F0000070000070000070000070003C7000FF7001F
+FF003C1F00780F00700700E00700E00700E00700E00700E00700E00700700F00780F003C
+1F001FFFE00FF7E007C7E013197F9816>I<03F0000FFC001FFE003C0F00780700700380
+E00380FFFF80FFFF80FFFF80E00000E000007003807803803E07801FFF0007FE0001F800
+11127E9116>I<001E00007F0001FF8001C7800383000380000380007FFF00FFFF00FFFF
+000380000380000380000380000380000380000380000380000380000380000380000380
+007FFC00FFFE007FFC0011197F9816>I<03E3C007F7E00FFFE01C1CC0380E00380E0038
+0E00380E00380E001C1C000FF8001FF0001BE0003800001800001FFC001FFF003FFF8070
+03C0E000E0E000E0E000E0E000E07001C07C07C03FFF800FFE0003F800131C7F9116>I<
+FC0000FC0000FC00001C00001C00001C00001C00001C78001DFC001FFE001F0F001E0700
+1C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700FF8FE0FF9FE0
+FF8FE013197F9816>I<03000780078003000000000000000000FF80FF80FF8003800380
+0380038003800380038003800380038003800380FFFCFFFEFFFC0F1A7C9916>I<003000
+780078003000000000000000000FF81FF80FF80038003800380038003800380038003800
+3800380038003800380038003800380038003800386070F0F0FFE07FC03F800D237E9916
+>I<7E0000FE00007E00000E00000E00000E00000E00000E7FE00E7FE00E7FE00E0F000E
+1E000E3C000E78000EF0000FF0000FF8000FBC000F1E000E0E000E07000E07807F87F0FF
+CFF07F87F01419809816>I<7FC000FFC0007FC00001C00001C00001C00001C00001C000
+01C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000
+01C00001C0007FFF00FFFF807FFF0011197E9816>I<F9C380FFEFC0FFFFE03C78E03C78
+E03870E03870E03870E03870E03870E03870E03870E03870E03870E03870E0FE7CF8FE7C
+F8FE7CF81512809116>I<FC7800FDFC00FFFE001F0F001E07001C07001C07001C07001C
+07001C07001C07001C07001C07001C07001C0700FF8FE0FF9FE0FF8FE013127F9116>I<
+03E0000FF8001FFC003C1E00780F00700700E00380E00380E00380E00380E00380F00780
+700700780F003C1E001FFC000FF80003E00011127E9116>I<FC7C00FDFE00FFFF001F07
+801E03C01C01C01C00E01C00E01C00E01C00E01C00E01C00E01C01C01E03C01F07801FFF
+001DFE001C78001C00001C00001C00001C00001C00001C0000FF8000FF8000FF8000131B
+7F9116>I<03E3800FF3801FFB803E0F80780780700780E00380E00380E00380E00380E0
+0380E003807007807807803C1F801FFB800FF38003E38000038000038000038000038000
+0380000380001FF0003FF8001FF0151B7F9116>I<7F0FC0FF3FE07F7FE007F04007C000
+0780000780000700000700000700000700000700000700000700000700007FFC00FFFC00
+7FFC0013127F9116>I<0FEC3FFC7FFCF03CE01CE01C70007F801FF007F8003C600EE00E
+F00EF81EFFFCFFF8C7E00F127D9116>I<0300000700000700000700000700007FFF00FF
+FF00FFFF0007000007000007000007000007000007000007000007010007038007038007
+038007870003FE0001FC0000F80011177F9616>I<FC3F00FC3F00FC3F001C07001C0700
+1C07001C07001C07001C07001C07001C07001C07001C07001C07001C1F001FFFE00FF7E0
+07C7E013127F9116>I<7F1FC0FF9FE07F1FC01C07001C07000E0E000E0E000E0E00071C
+00071C00071C00071C0003B80003B80003B80001F00001F00000E00013127F9116>I<FF
+1FE0FF1FE0FF1FE038038038038038038038038039F38039F38019F30019B30019B30019
+B3001DB7001D17001F1F000F1E000E0E0013127F9116>I<7F1FC07F3FC07F1FC00F1E00
+073C0003B80003F00001F00000E00001E00001F00003B800073C00071C000E0E007F1FC0
+FF3FE07F1FC013127F9116>I<7F1FC0FF9FE07F1FC01C07000E07000E0E000E0E00070E
+00071C00071C00039C00039C0003980001B80001B80000F00000F00000F00000E00000E0
+0000E00001C00079C0007BC0007F80007F00003C0000131B7F9116>I<001F80007F8000
+FF8001E00001C00001C00001C00001C00001C00001C00001C00001C00001C00003C0007F
+8000FF0000FF00007F800003C00001C00001C00001C00001C00001C00001C00001C00001
+C00001C00001E00000FF80007F80001F8011207E9C16>123 D<E0E0E0E0E0E0E0E0E0E0
+E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E00320779C16>I<7C0000FF0000FF
+800003C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001E00000
+FF00007F80007F8000FF0001E00001C00001C00001C00001C00001C00001C00001C00001
+C00001C00003C000FF8000FF00007C000011207E9C16>I E /FH
+52 128 df<003FC00001F0300003C0380007C07C000F807C000F807C000F8038000F8000
+000F8000000F8000000F800000FFFFFC00FFFFFC000F807C000F807C000F807C000F807C
+000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C
+000F807C007FE1FF807FE1FF80191D809C1B>12 D<003FFC0001F07C0003C07C0007C07C
+000F807C000F807C000F807C000F807C000F807C000F807C000F807C00FFFFFC00FFFFFC
+000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C
+000F807C000F807C000F807C000F807C000F807C007FF3FF807FF3FF80191D809C1B>I<
+78FCFCFCFC7806067D850D>46 D<03F8000F1E001C07003C07803803807803C07803C078
+03C0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F8
+03E07803C07803C03803803C07801C07000F1E0003F800131B7E9A18>48
+D<00600001E0000FE000FFE000F3E00003E00003E00003E00003E00003E00003E00003E0
+0003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0
+0003E0007FFF807FFF80111B7D9A18>I<78FCFCFCFC7800000000000078FCFCFCFC7806
+127D910D>58 D<00038000000380000007C0000007C0000007C000000FE000000FE00000
+1FF000001BF000003BF8000031F8000031F8000060FC000060FC0000E0FE0000C07E0000
+C07E0001803F0001FFFF0003FFFF8003001F8007001FC006000FC006000FC00C0007E00C
+0007E0FF803FFEFF803FFE1F1C7E9B24>65 D<FFFFF800FFFFFF000FC01F800FC00FC00F
+C007C00FC007E00FC007E00FC007E00FC007E00FC007E00FC007C00FC00F800FC03F000F
+FFFE000FC00F800FC007C00FC003E00FC003E00FC003F00FC003F00FC003F00FC003F00F
+C003F00FC007E00FC007E00FC01FC0FFFFFF00FFFFFC001C1C7E9B22>I<001FE02000FF
+F8E003F80FE007C003E00F8001E01F0000E03E0000E03E0000607E0000607C000060FC00
+0000FC000000FC000000FC000000FC000000FC000000FC000000FC0000007C0000607E00
+00603E0000603E0000C01F0000C00F80018007C0030003F80E0000FFFC00001FE0001B1C
+7D9B22>I<FFFFF800FFFFFF000FC01FC00FC007E00FC001F00FC001F80FC000F80FC000
+FC0FC0007C0FC0007C0FC0007E0FC0007E0FC0007E0FC0007E0FC0007E0FC0007E0FC000
+7E0FC0007E0FC0007C0FC0007C0FC0007C0FC000F80FC000F80FC001F00FC007E00FC01F
+C0FFFFFF00FFFFF8001F1C7E9B25>I<FFFFFF00FFFFFF000FC01F000FC007000FC00300
+0FC003800FC003800FC0C1800FC0C1800FC0C1800FC1C0000FC3C0000FFFC0000FFFC000
+0FC3C0000FC1C0000FC0C0000FC0C0600FC0C0600FC000E00FC000C00FC000C00FC001C0
+0FC001C00FC003C00FC00F80FFFFFF80FFFFFF801B1C7E9B1F>I<FFFFFF00FFFFFF000F
+C01F000FC007000FC003000FC003800FC003800FC001800FC0C1800FC0C1800FC0C0000F
+C1C0000FC3C0000FFFC0000FFFC0000FC3C0000FC1C0000FC0C0000FC0C0000FC0C0000F
+C000000FC000000FC000000FC000000FC000000FC00000FFFE0000FFFE0000191C7E9B1E
+>I<000FF008007FFE3801FC07F807E001F80F8000781F0000783F0000383E0000387E00
+00187C000018FC000000FC000000FC000000FC000000FC000000FC000000FC007FFFFC00
+7FFF7C0001F87E0001F83E0001F83F0001F81F0001F80F8001F807E001F801FC07F8007F
+FE78000FF818201C7D9B26>I<FFFC3FFFFFFC3FFF0FC003F00FC003F00FC003F00FC003
+F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FFFFFF00FFFFFF00FC003
+F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003
+F00FC003F00FC003F0FFFC3FFFFFFC3FFF201C7E9B25>I<FFFCFFFC0FC00FC00FC00FC0
+0FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC0
+0FC00FC0FFFCFFFC0E1C7E9B12>I<07FFF007FFF0001F80001F80001F80001F80001F80
+001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80
+001F80301F80781F80FC1F80FC1F80FC1F00783E00387C000FF000141C7F9B19>I<FFFC
+07FF00FFFC07FF000FC000E0000FC001C0000FC00380000FC00600000FC00C00000FC038
+00000FC07000000FC0E000000FC1C000000FC3C000000FC7E000000FCFF000000FFBF000
+000FF1F800000FE0FC00000FC0FE00000FC07E00000FC03F00000FC01F80000FC01FC000
+0FC00FC0000FC007E0000FC007F0000FC003F800FFFC1FFF80FFFC1FFF80211C7E9B25>
+I<FFFE00FFFE000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0
+000FC0000FC0000FC0000FC0000FC0000FC0030FC0030FC0030FC0070FC0070FC0060FC0
+0E0FC01E0FC07EFFFFFEFFFFFE181C7E9B1D>I<FFC00003FFFFE00007FF0FE00007F00D
+F0000DF00DF0000DF00DF0000DF00CF80019F00CF80019F00C7C0031F00C7C0031F00C3E
+0061F00C3E0061F00C1F00C1F00C1F00C1F00C1F00C1F00C0F8181F00C0F8181F00C07C3
+01F00C07C301F00C03E601F00C03E601F00C01FC01F00C01FC01F00C01FC01F00C00F801
+F00C00F801F0FFC0701FFFFFC0701FFF281C7E9B2D>I<FFE003FFFFE003FF0FF000300F
+F800300DFC00300CFE00300C7E00300C3F00300C1F80300C1FC0300C0FE0300C07F0300C
+03F0300C01F8300C01FC300C00FE300C007F300C003F300C001FB00C001FF00C000FF00C
+0007F00C0003F00C0001F00C0000F00C0000F0FFC00070FFC00030201C7E9B25>I<FFFF
+F800FFFFFE000FC03F800FC00F800FC007C00FC007E00FC007E00FC007E00FC007E00FC0
+07E00FC007C00FC007C00FC00F800FC03F000FFFFC000FC000000FC000000FC000000FC0
+00000FC000000FC000000FC000000FC000000FC000000FC000000FC00000FFFC0000FFFC
+00001B1C7E9B21>80 D<FFFFF00000FFFFFE00000FC03F00000FC00F80000FC007C0000F
+C007E0000FC007E0000FC007E0000FC007E0000FC007E0000FC007C0000FC00F80000FC0
+3E00000FFFF000000FC07C00000FC03E00000FC03F00000FC01F80000FC01F80000FC01F
+80000FC01F80000FC01F80000FC01F80000FC01F81800FC01F81800FC00FC180FFFC07C3
+00FFFC01FE00211C7E9B24>82 D<07F8201FFEE03C07E07801E07000E0F000E0F00060F0
+0060F80000FE0000FFE0007FFE003FFF003FFF800FFFC007FFE0007FE00003F00001F000
+00F0C000F0C000F0C000E0E000E0F001C0FC03C0EFFF0083FC00141C7D9B1B>I<7FFFFF
+E07FFFFFE0781F81E0701F80E0601F8060E01F8070C01F8030C01F8030C01F8030C01F80
+30001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F80
+00001F8000001F8000001F8000001F8000001F8000001F8000001F800007FFFE0007FFFE
+001C1C7E9B21>I<FFFC03FFFFFC03FF0FC000300FC000300FC000300FC000300FC00030
+0FC000300FC000300FC000300FC000300FC000300FC000300FC000300FC000300FC00030
+0FC000300FC000300FC000300FC000300FC0003007C0003007C0006003E000E001F001C0
+00FC0780007FFE00000FF800201C7E9B25>I<FFF87FFE0FFCFFF87FFE0FFC0FC007E000
+C00FC007F000C00FE003F001C007E003F0018007E007F8018007F007F8038003F00FFC03
+0003F00CFC030001F80CFC060001F81CFE060001FC187E0E0000FC187E0C0000FC303F0C
+0000FE303F1C00007E703F9800007E601F9800003F601FB000003FE01FF000003FC00FF0
+00001FC00FE000001F8007E000001F8007E000000F8007C000000F0003C0000007000380
+000007000380002E1C7F9B31>87 D<7FFE1FFE007FFE1FFE0007F001800003F803800001
+F807000001FC06000000FE0C0000007F1C0000003F380000003FB00000001FE00000000F
+E00000000FE000000007F000000003F800000007F80000000FFC0000000CFE000000187E
+000000387F000000703F800000601FC00000C01FC00001C00FE000038007F000030003F0
+00FFF01FFF80FFF01FFF80211C7F9B24>I<0FF8001C1E003E0F803E07803E07C01C07C0
+0007C0007FC007E7C01F07C03C07C07C07C0F807C0F807C0F807C0780BC03E13F80FE1F8
+15127F9117>97 D<FF0000FF00001F00001F00001F00001F00001F00001F00001F00001F
+00001F00001F3F801FE1E01F80701F00781F003C1F003C1F003E1F003E1F003E1F003E1F
+003E1F003E1F003C1F003C1F00781F80701EC1E01C3F00171D7F9C1B>I<03FC000E0E00
+1C1F003C1F00781F00780E00F80000F80000F80000F80000F80000F80000780000780180
+3C01801C03000E0E0003F80011127E9115>I<000FF0000FF00001F00001F00001F00001
+F00001F00001F00001F00001F00001F001F9F00F07F01C03F03C01F07801F07801F0F801
+F0F801F0F801F0F801F0F801F0F801F07801F07801F03C01F01C03F00F0FFE03F9FE171D
+7E9C1B>I<03FC000F07001C03803C01C07801C07801E0F801E0F801E0FFFFE0F80000F8
+0000F800007800007800603C00601E00C00F038001FC0013127F9116>I<007F0001E380
+03C7C00787C00F87C00F83800F80000F80000F80000F80000F8000FFF800FFF8000F8000
+0F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F8000
+0F80007FF0007FF000121D809C0F>I<03F0F00E1F383C0F383807307807807807807807
+807807803807003C0F001E1C0033F0003000003000003000003FFF003FFFC01FFFE01FFF
+F07801F8F00078F00078F000787000707800F01E03C007FF00151B7F9118>I<FF0000FF
+00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F0FC01F31E01F
+40F01F80F81F80F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F
+00F81F00F8FFE7FFFFE7FF181D7F9C1B>I<1E003F003F003F003F001E00000000000000
+0000000000007F007F001F001F001F001F001F001F001F001F001F001F001F001F001F00
+1F00FFC0FFC00A1E7F9D0E>I<007800FC00FC00FC00FC00780000000000000000000000
+0003FC03FC007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C00
+7C007C007C707CF87CF878F8F070E01F800E26839D0F>I<FF0000FF00001F00001F0000
+1F00001F00001F00001F00001F00001F00001F00001F03FC1F03FC1F01C01F03001F0E00
+1F1C001F38001F78001FFC001FBE001F1F001F0F001F0F801F07C01F03E01F01E0FFE7FE
+FFE7FE171D7F9C19>I<FF00FF001F001F001F001F001F001F001F001F001F001F001F00
+1F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B1D7F9C
+0E>I<FF0FC07E00FF31E18F001F40F207801F80FC07C01F80FC07C01F00F807C01F00F8
+07C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807
+C01F00F807C01F00F807C0FFE7FF3FF8FFE7FF3FF825127F9128>I<FF0FC0FF31E01F40
+F01F80F81F80F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00
+F81F00F8FFE7FFFFE7FF18127F911B>I<01FC000F07801C01C03C01E07800F07800F0F8
+00F8F800F8F800F8F800F8F800F8F800F87800F07800F03C01E01E03C00F078001FC0015
+127F9118>I<FF3F80FFE1E01F80F01F00781F007C1F003C1F003E1F003E1F003E1F003E
+1F003E1F003E1F003C1F007C1F00781F80F01FC1E01F3F001F00001F00001F00001F0000
+1F00001F0000FFE000FFE000171A7F911B>I<FE3E00FE47001E8F801E8F801E8F801F07
+001F00001F00001F00001F00001F00001F00001F00001F00001F00001F0000FFE000FFE0
+0011127F9114>114 D<1FD830786018E018E018F000FF807FE07FF01FF807FC007CC01C
+C01CE01CE018F830CFC00E127E9113>I<0300030003000300070007000F000F003FFCFF
+FC1F001F001F001F001F001F001F001F001F001F0C1F0C1F0C1F0C0F08079803F00E1A7F
+9913>I<FF07F8FF07F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00
+F81F00F81F00F81F00F81F01F80F01F80786FF01F8FF18127F911B>I<FFC1FCFFC1FC1F
+00601F80600F80C00F80C007C18007C18003E30003E30003F70001F60001FE0000FC0000
+FC0000780000780000300016127F9119>I<FF8FF8FEFF8FF8FE1F03E0301F03E0301F03
+E0300F87F0600F86F0600FC6F8E007CC78C007CC78C003FC7D8003F83D8003F83F8001F0
+1F0001F01F0000F01E0000E00E0000E00E001F127F9122>I<FFC7FCFFC7FC1F81C00F83
+8007C70003EE0001FC0001F80000F800007C0000FE0001DF00039F80070F800607C00C03
+E0FF07FCFF07FC16127F9119>I<FFC1FCFFC1FC1F00601F80600F80C00F80C007C18007
+C18003E30003E30003F70001F60001FE0000FC0000FC0000780000780000300000300000
+6000706000F8E000F8C000F980007300003E0000161A7F9119>I<38387C7CFC7EFC7E7C
+7C38380F067C9D18>127 D E /FI 21 122 df<1E003F007F80FFC0FFC0FFC0FFC07F80
+3F001E000A0A7B8915>46 D<7FFFFFFFFFF07FFFFFFFFFF07FFFFFFFFFF07F803FE00FF0
+7E003FE003F07C003FE001F078003FE000F070003FE00070F0003FE00078F0003FE00078
+F0003FE00078E0003FE00038E0003FE00038E0003FE00038E0003FE00038E0003FE00038
+00003FE0000000003FE0000000003FE0000000003FE0000000003FE0000000003FE00000
+00003FE0000000003FE0000000003FE0000000003FE0000000003FE0000000003FE00000
+00003FE0000000003FE0000000003FE0000000003FE0000000003FE0000000003FE00000
+00003FE0000000003FE0000000003FE0000000003FE0000000003FE0000000003FE00000
+00003FE0000000003FE0000000FFFFFFF80000FFFFFFF80000FFFFFFF8002D2D7DAC34>
+84 D<01FFE000000FFFF800001F007E00003F803F00003FC01F80003FC01FC0003FC00F
+C0001F800FE0000F000FE00000000FE00000000FE00000000FE00000007FE000003FFFE0
+0001FFCFE00007F80FE0000FE00FE0001F800FE0003F000FE0007F000FE000FE000FE000
+FE000FE000FE000FE000FE000FE000FE001FE0007F001FE0003F0037F0001FC0E7FF800F
+FFC3FF8001FF00FF80211E7E9D24>97 D<0000003F0000000FFF0000000FFF0000000FFF
+000000007F000000007F000000007F000000007F000000007F000000007F000000007F00
+0000007F000000007F000000007F000000007F000000007F00000FF87F00007FFE7F0001
+FC0F7F0003F003FF0007E000FF000FC0007F001F80007F003F80007F003F80007F007F00
+007F007F00007F00FF00007F00FF00007F00FF00007F00FF00007F00FF00007F00FF0000
+7F00FF00007F00FF00007F007F00007F007F00007F007F00007F003F80007F001F80007F
+000FC000FF0007C001FF0003E003FF0001F80F7FF8007FFC7FF8000FF07FF8252E7EAD2A
+>100 D<001FF00000FFFC0001F83F0007E00F800FC007C01F8007E01F8003E03F8003F0
+7F0003F07F0001F87F0001F8FF0001F8FF0001F8FFFFFFF8FFFFFFF8FF000000FF000000
+FF000000FF0000007F0000007F0000007F0000003F8000381F8000380FC0007007C000E0
+03E001C001F80F80007FFF00000FF8001D1E7E9D22>I<003FC03E0001FFF9FF0003F0FF
+CF8007C03E1F800FC03F0F801F801F87001F801F80003F801FC0003F801FC0003F801FC0
+003F801FC0003F801FC0003F801FC0001F801F80001F801F80000FC03F000007C03E0000
+07F0FC00000FFFF800000C3FC000001C000000001C000000001C000000001E000000001F
+000000001FFFFE00000FFFFFC0000FFFFFF00007FFFFF80003FFFFFC001FFFFFFE003E00
+01FE007C00003F007800001F00F800001F00F800001F00F800001F00F800001F007C0000
+3E003E00007C001F0000F8000FE007F00003FFFFC000003FFC0000212C7E9D25>103
+D<03F0000000FFF0000000FFF0000000FFF000000007F000000007F000000007F0000000
+07F000000007F000000007F000000007F000000007F000000007F000000007F000000007
+F000000007F000000007F01FC00007F07FF00007F1E0F80007F380FC0007F6007E0007FC
+007E0007FC007F0007F8007F0007F8007F0007F0007F0007F0007F0007F0007F0007F000
+7F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F
+0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F00
+FFFF8FFFF8FFFF8FFFF8FFFF8FFFF8252E7DAD2A>I<07800FC01FE03FF03FF03FF03FF0
+1FE00FC00780000000000000000000000000000007E0FFE0FFE0FFE00FE00FE00FE00FE0
+0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0
+0FE0FFFEFFFEFFFE0F2F7DAE14>I<07E0000000FFE0000000FFE0000000FFE00000000F
+E00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE0
+0000000FE00000000FE00000000FE00000000FE00000000FE00FFF800FE00FFF800FE00F
+FF800FE001E0000FE003C0000FE00780000FE00F00000FE01E00000FE03C00000FE07000
+000FE1E000000FE3C000000FE7E000000FEFF000000FFFF800000FFBF800000FF1FC0000
+0FE0FE00000FC07E00000FC07F00000FC03F80000FC01FC0000FC01FC0000FC00FE0000F
+C007F0000FC003F0000FC003F800FFFC0FFFC0FFFC0FFFC0FFFC0FFFC0222E7DAD27>
+107 D<03E01FC001FC0000FFE07FF007FF0000FFE1E0F81E0F8000FFE380FC380FC00007
+E6007E6007E00007EC007EC007E00007EC007FC007F00007F8007F8007F00007F8007F80
+07F00007F0007F0007F00007F0007F0007F00007F0007F0007F00007F0007F0007F00007
+F0007F0007F00007F0007F0007F00007F0007F0007F00007F0007F0007F00007F0007F00
+07F00007F0007F0007F00007F0007F0007F00007F0007F0007F00007F0007F0007F00007
+F0007F0007F00007F0007F0007F00007F0007F0007F00007F0007F0007F00007F0007F00
+07F000FFFF8FFFF8FFFF80FFFF8FFFF8FFFF80FFFF8FFFF8FFFF80391E7D9D3E>109
+D<03E01FC000FFE07FF000FFE1E0F800FFE380FC0007E6007E0007EC007E0007EC007F00
+07F8007F0007F8007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007
+F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0
+007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F00FFFF8FFFF8FFFF8F
+FFF8FFFF8FFFF8251E7D9D2A>I<001FF80000FFFF0003F81FC007E007E00FC003F01F80
+01F83F8001FC3F8001FC7F0000FE7F0000FE7F0000FEFF0000FFFF0000FFFF0000FFFF00
+00FFFF0000FFFF0000FFFF0000FFFF0000FF7F0000FE7F0000FE7F0000FE3F8001FC3F80
+01FC1F8001F80FC003F007E007E003F81FC000FFFF00001FF800201E7E9D25>I<03F07F
+8000FFF1FFF000FFF781FC00FFFE007E0007FC003F0007F8001F8007F0001FC007F0000F
+E007F0000FF007F0000FF007F00007F007F00007F807F00007F807F00007F807F00007F8
+07F00007F807F00007F807F00007F807F00007F807F00007F007F0000FF007F0000FE007
+F0000FE007F0001FC007F8001F8007FC003F0007FE007E0007F781FC0007F3FFF00007F0
+7F800007F000000007F000000007F000000007F000000007F000000007F000000007F000
+000007F000000007F000000007F0000000FFFF800000FFFF800000FFFF800000252B7E9D
+2A>I<03E0FC00FFE1FF00FFE30F80FFE61F8007EC3FC007EC3FC007F83FC007F81F8007
+F80F0007F8000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007
+F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007
+F00000FFFFC000FFFFC000FFFFC0001A1E7E9D1F>114 D<01FF0C0FFFFC1E01FC38007C
+70003C70001CF0001CF0001CF8001CFE0000FFC0007FFE007FFFC03FFFF00FFFF807FFFC
+01FFFE000FFE0000FF60003FE0001FE0000FF0000FF0000FF8000EF8001EFE001CFF80F8
+E3FFE0C0FF80181E7E9D1D>I<00380000380000380000380000780000780000780000F8
+0000F80001F80003F80007F8001FFFFCFFFFFCFFFFFC03F80003F80003F80003F80003F8
+0003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80E03F8
+0E03F80E03F80E03F80E03F80E03F80E01F81C00FC1C007C38003FF0000FE0172A7FA91D
+>I<03F0003F00FFF00FFF00FFF00FFF00FFF00FFF0007F0007F0007F0007F0007F0007F
+0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F00
+07F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007
+F0007F0007F0007F0007F000FF0007F000FF0003F001FF0001F0037F0000FC0E7FF8007F
+FC7FF8001FF07FF8251E7D9D2A>I<FFFC00FFC0FFFC00FFC0FFFC00FFC00FE0001C000F
+F0003C0007F000380007F000380003F800700003F800700003FC00F00001FC00E00001FE
+01E00000FE01C00000FE01C000007F038000007F038000003F870000003F870000003FCF
+0000001FCE0000001FFE0000000FFC0000000FFC00000007F800000007F800000007F800
+000003F000000003F000000001E000000001E00000221E7E9D27>I<FFFE1FFF81FFE0FF
+FE1FFF81FFE0FFFE1FFF81FFE007F001F8001E0007F001FC001C0007F000FC003C0003F8
+00FC00380003F801FE00380003FC01FE00780001FC01FE00700001FC03BF00700000FE03
+BF00E00000FE07BF80E00000FF071F81E000007F071F81C000007F0E0FC1C000003F8E0F
+C38000003F9E0FC38000003F9C07E78000001FDC07E70000001FFC07F70000001FF803FF
+0000000FF803FE0000000FF001FE00000007F001FC00000007F001FC00000007E000FC00
+000003E000F800000003C0007800000001C000700000331E7F9D36>I<FFFE03FFE0FFFE
+03FFE0FFFE03FFE007F800780003FC00F00001FC01E00000FE03C000007F03C000007F87
+8000003FCF0000001FDE0000000FFC00000007F800000007F800000003F800000001FC00
+000003FE00000007FF000000077F8000000F3F8000001E1FC000003C0FE00000780FF000
+00F007F80000E003F80001E001FC0003C000FE00FFF807FFF0FFF807FFF0FFF807FFF024
+1E7F9D27>I<7FFE007FE07FFE007FE07FFE007FE007F0000E0007F8001E0003F8001C00
+03F8001C0001FC00380001FC00380001FE00780000FE00700000FF00F000007F00E00000
+7F00E000003F81C000003F81C000001FC38000001FC38000001FE78000000FE70000000F
+FF00000007FE00000007FE00000003FC00000003FC00000003FC00000001F800000001F8
+00000000F000000000F000000000E000000000E000000001E000000001C000003803C000
+007C03800000FE07800000FE07000000FE0E000000FC1E000000787C0000003FF0000000
+0FC0000000232B7F9D27>I E end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 300dpi
+TeXDict begin
+
+%%EndSetup
+%%Page: 56 1
+56 55 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y Fk(\\xunit=)p Fj(dimen)0
+106 y Fk(\\xunit+=)p Fj(dimen)0 172 y FF(Set)i(the)f(horizon)o(tal)g
+(units)g(for)g(the)g(co)q(ordinate)h(system)f(used)h(when)f(t)o(yp)q
+(esetting)h(mo)q(di\014cations)e(on)h(a)f(Figure)i(or)f(Graph.)42
+252 y Fx(\\xunit=5)o(mm)42 302 y(\\Graph{1)o(cm})o({5)o(mm})42
+352 y(\\Dot)18 b(\(0,.5\))f(\\Dot)h(\(1,.5\))f(\\Dot)h(\(2,.5\))42
+402 y(\\endGrap)o(h)1191 372 y
+gsave
+ 1191 372 a 1191 372 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+
+1191 372 a 1181 382 a Fw(\017)1191 372 y
+grestore
+ 1191 372 a 1250
+372 a
+gsave
+ 1250 372 a 1250 372 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 1250 372 a 1240 382 a Fw(\017)1250
+372 y
+grestore
+ 1250 372 a 1309 372 a
+gsave
+ 1309 372 a 1309 372 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 1309
+372 a 1299 382 a Fw(\017)1309 372 y
+grestore
+ 1309 372 a 0 568
+a Fk(\\ygrid=)p Fj(dimen)1531 b Fk(1cm)0 632 y(\\ygrid+=)p
+Fj(dimen)0 699 y FF(Set)14 b(the)h(default)f(distance)g(b)q(et)o(w)o
+(een)h(the)g(horizon)o(tal)e(gridlines)g(of)h(a)f(Diagram.)j(Sets)e
+FG(\\yscale=1)p FF(.)0 852 y Fk(\\yrange=)p Fj(inte)m(ger)1543
+b Fk(1)0 918 y FF(Set)15 b(the)h(v)o(ertical)e(units)h(for)g(the)g(co)q
+(ordinate)g(system)g(used)h(when)f(t)o(yp)q(esetting)h(mo)q
+(di\014cations)d(on)h(a)h(Figure)g(or)f(Graph)0 968 y(b)o(y)g(dividing)
+e(the)i(default)g(unit)g(b)o(y)f FC(inte)n(ger)p FF(.)18
+b(See)d FG(\\xrange)p FF(.)0 1122 y Fk(\\yscale=)p Fj(numb)m(er)1530
+b Fk(1)0 1188 y FF(Scale)14 b FG(\\ygrid)f FF(b)o(y)g
+FC(numb)n(er)p FF(.)18 b(See)d FG(\\xscale)p FF(.)0 1342
+y Fk(\\yunit=)p Fj(dimen)0 1406 y Fk(\\yunit+=)p Fj(dimen)0
+1473 y FF(Set)g(the)f(v)o(ertical)g(units)g(for)g(the)h(co)q(ordinate)f
+(system)g(used)h(when)g(t)o(yp)q(esetting)g(mo)q(di\014cations)d(on)i
+(a)g(Figure)g(or)g(Graph.)0 1522 y(See)h FG(\\xunit)p
+FF(.)954 2770 y(56)p eop
+%%Page: 57 2
+57 56 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y Fy(26.)52 b(Examples)0
+158 y FF(The)14 b FG(Dash)p FF(,)e FG(Dashto)f FF(and)j
+FG(Mono)e FF(cell)h(t)o(yp)q(es)h(in)f(some)f(of)h(these)h(examples)e
+(use)i(the)g FG(arrsy10)e FF(fon)o(t:)17 b(See)d Fw(x)q
+FF(14)e(and)h FG(\\arrsy)0 208 y FF(in)g Fw(x)q FF(25.)k(Also,)d
+FG(\\bb)f FF(in)o(v)o(ok)o(es)g(the)i(bbm)d(family)f(of)i(fon)o(ts.)-79
+299 y Fr(1)62 b Fx($$)-79 349 y Fr(2)g Fx(\\grid=.75c)o(m)-79
+399 y Fr(3)g Fx(\\Diagram)-79 448 y Fr(4)g Fx(A')176
+b(&)137 b(&)19 b(\\rTo)f(^{f'})g(&)137 b(&)19 b(B')529
+b(\\\\)-79 498 y Fr(5)278 b Fx(&)19 b(\\rdTo)f(<a)h(\\dh{2pt})o(&)e(&)
+137 b(&)176 b(&)19 b(\\rdTo)f(_b)215 b(\\\\)-79 548 y
+Fr(6)62 b Fx(\\dTo)18 b(<{g'})g(&)137 b(&)19 b(A)196
+b(&)137 b(&)19 b(\\dTo)f(<{h'})g(:{.25})-79 598 y Fr(7)886
+b Fx(\\rTo)18 b(^f)h(:{.25})e(\\br)-79 648 y Fr(8)1043
+b Fx(&)195 b(&)20 b(B)137 b(\\\\)-79 697 y Fr(9)1455
+b Fx(\\\\)-95 747 y Fr(10)61 b Fx(C')176 b(&)137 b(&)19
+b(\\rTo)f(^{k'})g(:{.75})f(\\dTo)h(<g)h(:{.25})e(\\br)-95
+797 y Fr(11)689 b Fx(&)137 b(&)19 b(D')117 b(&)195 b(&)20
+b(\\dTo)e(>h)h(\\\\)-95 847 y Fr(12)277 b Fx(&)19 b(\\rdTo)f(_c)h
+(\\dh{.5pt)o(}&&)134 b(&)176 b(&)19 b(\\rdTo)f(_d)215
+b(\\\\)-95 897 y Fr(13)277 b Fx(&)137 b(&)19 b(C)196
+b(&)137 b(&)19 b(\\rTo)f(^k)h(&)195 b(&)20 b(D)137 b(\\\\)-95
+946 y Fr(14)61 b Fx(\\endDiagra)o(m)-95 996 y Fr(15)g
+Fx($$)889 1135 y
+gsave
+ 889 1135 a 889 1135 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 889 1135 a 741
+1146 a Fw(\000)-21 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)-21 b Fv(\021)889 1135 y
+grestore
+
+889 1135 a 889 1135 a
+gsave
+ 889 1135 a 889 1135 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 889 1135
+a 888 1123 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 888 1123 a 873 1117 a Fu(f)892 1105 y Ft(0)888
+1135 y
+grestore
+ 888 1135 a 800 1224 a
+gsave
+ 800 1224 a 800 1224 a
+currentpoint currentpoint translate -2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 800
+1224 a 698 1234 a Fw(\000)h(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)
+h(\000)-19 b Fv(\021)800 1224 y
+grestore
+ 800 1224 a 800 1224 a
+gsave
+
+800 1224 a 800 1224 a
+currentpoint currentpoint translate -2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 800 1224 a 800 1236 a
+currentpoint currentpoint translate 2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 800 1236
+a 782 1249 a Fu(a)800 1224 y
+grestore
+ 800 1224 a 1154 1224 a
+gsave
+ 1154
+1224 a 1154 1224 a
+currentpoint currentpoint translate -2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 1154 1224 a 1052 1234 a Fw(\000)-13
+b(\000)k(\000)g(\000)g(\000)g(\000)g(\000)d Fv(\021)1154
+1224 y
+grestore
+ 1154 1224 a 1154 1224 a
+gsave
+ 1154 1224 a 1154 1224
+a
+currentpoint currentpoint translate -2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 1154 1224 a 1149 1236 a
+currentpoint currentpoint translate 2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 1149 1236 a 1134 1257 a Fu(b)1149
+1224 y
+grestore
+ 1149 1224 a 711 1313 a
+gsave
+ 711 1313 a 711 1313 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 711
+1313 a 553 1323 a Fw(\000)c(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)-15 b Fv(\021)711
+1313 y
+grestore
+ 711 1313 a 711 1313 a
+gsave
+ 711 1313 a 711 1313 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 711
+1313 a 705 1325 a
+currentpoint currentpoint translate 5594036 neg 0 atan rotate neg exch
+neg exch translate
+ 705 1325 a 677 1335 a Fu(g)694 1323
+y Ft(0)705 1313 y
+grestore
+ 705 1313 a 1066 1313 a
+gsave
+ 1066 1313 a
+1066 1313 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 1066 1313 a 907 1323 a Fw(\000)f(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)
+-16 b Fv(\021)1066 1313 y
+grestore
+ 1066 1313 a 1066 1313 a
+gsave
+ 1066
+1313 a 1066 1313 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 1066 1313 a 983 1325 a
+currentpoint currentpoint translate 5594036 neg 0 atan rotate neg exch
+neg exch translate
+ 983 1325 a
+952 1335 a Fu(h)971 1323 y Ft(0)983 1313 y
+grestore
+ 983 1313 a
+1066 1313 a
+gsave
+ 1066 1313 a 1066 1313 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 1066 1313 a 889 1313
+a
+1 setgray
+ 889 1313 a 912 1323 306 21 v 1066 1313 a
+grestore
+ 1066 1313
+a 1066 1313 a
+gsave
+ 1066 1313 a 1066 1313 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 1066 1313 a 912
+1323 a Fw(\000)h(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)-15 b Fv(\021)1066 1313 y
+grestore
+
+1066 1313 a 1066 1313 a
+gsave
+ 1066 1313 a 1066 1313 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 1066
+1313 a 989 1300 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 989 1300 a 979 1294 a Fu(f)989 1313
+y
+grestore
+ 989 1313 a 889 1490 a
+gsave
+ 889 1490 a 889 1490 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 889 1490
+a 742 1500 a Fw(\000)-23 b(\000)-9 b(\000)h(\000)f(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)-22 b Fv(\021)889 1490
+y
+grestore
+ 889 1490 a 889 1490 a
+gsave
+ 889 1490 a 889 1490 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 889 1490
+a 961 1477 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 961 1477 a -15 w Fu(k)965 1465 y Ft(0)961
+1490 y
+grestore
+ 961 1490 a 889 1490 a
+gsave
+ 889 1490 a 889 1490 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 889
+1490 a 711 1490 a
+1 setgray
+ 711 1490 a 730 1500 310 21 v 889 1490
+a
+grestore
+ 889 1490 a 889 1490 a
+gsave
+ 889 1490 a 889 1490 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 889 1490
+a 730 1500 a Fw(\000)-14 b(\000)-9 b(\000)g(\000)h(\000)f(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)c Fv(\021)889 1490
+y
+grestore
+ 889 1490 a 889 1490 a
+gsave
+ 889 1490 a 889 1490 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 889 1490
+a 807 1502 a
+currentpoint currentpoint translate 5594036 neg 0 atan rotate neg exch
+neg exch translate
+ 807 1502 a 790 1513 a Fu(g)807 1490 y
+grestore
+ 807
+1490 a 1243 1490 a
+gsave
+ 1243 1490 a 1243 1490 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 1243 1490
+a 1084 1500 a Fw(\000)g(\000)k(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)c Fv(\021)1243 1490 y
+grestore
+ 1243
+1490 a 1243 1490 a
+gsave
+ 1243 1490 a 1243 1490 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 1243 1490
+a 1239 1477 a
+currentpoint currentpoint translate 5594036 neg 0 atan rotate neg exch
+neg exch translate
+ 1239 1477 a 11 x Fu(h)1239 1490 y
+grestore
+ 1239
+1490 a 800 1578 a
+gsave
+ 800 1578 a 800 1578 a
+currentpoint currentpoint translate -2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 800 1578 a 698
+1589 a Fw(\000)-23 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+-22 b Fv(\021)800 1578 y
+grestore
+ 800 1578 a 800 1578 a
+gsave
+ 800 1578
+a 800 1578 a
+currentpoint currentpoint translate -2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 800 1578 a 797 1591 a
+currentpoint currentpoint translate 2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 797 1591 a 782 1603
+a Fu(c)797 1578 y
+grestore
+ 797 1578 a 1154 1578 a
+gsave
+ 1154 1578 a
+1154 1578 a
+currentpoint currentpoint translate -2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 1154 1578 a 1052 1589 a Fw(\000)-14 b(\000)-9
+b(\000)g(\000)h(\000)f(\000)g(\000)c Fv(\021)1154 1578
+y
+grestore
+ 1154 1578 a 1154 1578 a
+gsave
+ 1154 1578 a 1154 1578 a
+currentpoint currentpoint translate -2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 1154
+1578 a 1149 1591 a
+currentpoint currentpoint translate 2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 1149 1591 a 1132 1611 a Fu(d)1149
+1578 y
+grestore
+ 1149 1578 a 1066 1667 a
+gsave
+ 1066 1667 a 1066 1667
+a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 1066 1667 a 913 1677 a Fw(\000)d(\000)-9 b(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-16 b Fv(\021)1066
+1667 y
+grestore
+ 1066 1667 a 1066 1667 a
+gsave
+ 1066 1667 a 1066 1667
+a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 1066 1667 a 1065 1654 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 1065 1654 a -9 w Fu(k)1065
+1667 y
+grestore
+ 1065 1667 a 690 1146 a FB(A)721 1129 y Fs(0)1043
+1146 y FB(B)1076 1129 y Fs(0)873 1323 y FB(A)322 b(B)689
+1500 y(C)722 1483 y Fs(0)1042 1500 y FB(D)1077 1483 y
+Fs(0)872 1677 y FB(C)h(D)0 1852 y FH(G.)16 b(Bredon)p
+FF(,)11 b FC(Intr)n(o)n(duction)16 b(to)e(Comp)n(act)h(T)m(r)n
+(ansformation)f(Gr)n(oups)p FF(,)g(page)g(75.)-79 1944
+y Fr(1)62 b Fx($$)-79 1993 y Fr(2)g Fx(\\Dg)-79 2043
+y Fr(3)g Fx(F\\times)17 b(K\\times)g(U)98 b(&)19 b(\\rTo)f(^{\\rm)f
+(proj})97 b(&)215 b(&)19 b(K\\times)e(U)157 b(\\\\)-79
+2093 y Fr(4)62 b Fx(\\dTo)352 b(&)431 b(&)215 b(&)19
+b(\\dTo)f(>{\\rm)g(proj})g(\\\\)-79 2143 y Fr(5)62 b
+Fx(F\\times_K)16 b(\(K\\times)h(U\))i(&)g({})g(\\approx)d(F\\times)h(U)
+j(&)f(\\rTo)f(^{\\rm)g(proj}&)f(U)196 b(\\\\)-79 2193
+y Fr(6)62 b Fx(\\endDg)-79 2242 y Fr(7)g Fx($$)1012 2377
+y
+gsave
+ 1012 2377 a 1012 2377 a
+currentpoint currentpoint translate 0 neg 7515619 atan rotate neg exch
+neg exch translate
+ 1012 2377 a 885 2387 a Fw(\000)-21
+b(\000)-9 b(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g
+(\000)g(\000)-20 b Fv(\021)1012 2377 y
+grestore
+ 1012 2377 a 1012
+2377 a
+gsave
+ 1012 2377 a 1012 2377 a
+currentpoint currentpoint translate 0 neg 7515619 atan rotate neg exch
+neg exch translate
+ 1012 2377 a 1033 2364
+a
+currentpoint currentpoint translate 0 neg 7515619 atan rotate neg exch
+neg exch translate
+ 1033 2364 a 1003 2358 a Fr(pro)r(j)1033 2377 y
+grestore
+ 1033
+2377 a 774 2471 a
+gsave
+ 774 2471 a 774 2471 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 774 2471 a 701
+2482 a Fw(\000)i(\000)-9 b(\000)g(\000)g(\000)-18 b Fv(\021)774
+2471 y
+grestore
+ 774 2471 a 1250 2471 a
+gsave
+ 1250 2471 a 1250 2471 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+
+1250 2471 a 1178 2482 a Fw(\000)g(\000)-9 b(\000)g(\000)g(\000)-16
+b Fv(\021)1250 2471 y
+grestore
+ 1250 2471 a 1250 2471 a
+gsave
+ 1250 2471
+a 1250 2471 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1250 2471 a 1248 2459 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 1248 2459 a 10
+x Fr(pro)r(j)1248 2471 y
+grestore
+ 1248 2471 a 1122 2566 a
+gsave
+ 1122
+2566 a 1122 2566 a
+currentpoint currentpoint translate 0 neg 4036624 atan rotate neg exch
+neg exch translate
+ 1122 2566 a 1088 2576 a Fw(\000)d(\000)-9
+b(\000)g(\000)g(\000)-18 b Fv(\021)1122 2566 y
+grestore
+ 1122 2566
+a 1122 2566 a
+gsave
+ 1122 2566 a 1122 2566 a
+currentpoint currentpoint translate 0 neg 4036624 atan rotate neg exch
+neg exch translate
+ 1122 2566 a 1157
+2553 a
+currentpoint currentpoint translate 0 neg 4036624 atan rotate neg exch
+neg exch translate
+ 1157 2553 a 1127 2547 a Fr(pro)r(j)1157 2566 y
+grestore
+
+1157 2566 a 671 2387 a FB(F)15 b Fw(\002)10 b FB(K)i
+Fw(\002)d FB(U)318 b(K)12 b Fw(\002)e FB(U)639 2576 y(F)15
+b Fw(\002)713 2582 y Fu(K)754 2576 y FF(\()p FB(K)e Fw(\002)c
+FB(U)c FF(\))12 b Fw(\031)g FB(F)j Fw(\002)9 b FB(U)158
+b(U)954 2770 y FF(57)p eop
+%%Page: 58 3
+58 57 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)-79 42 y Fr(1)62 b Fx($$)-79
+91 y Fr(2)g Fx(\\joined)17 b(\\let\\labe)o(lst)o(yle)o(\\t)o(ext)o(st)o
+(yle)-79 141 y Fr(3)62 b Fx(\\Graph{3cm)o(,2)o(}{3)o(cm)o(,4})-79
+191 y Fr(4)g Fx(\\Line)18 b(\(0,0\))f(\(0,4\))h(<{f\(z,s\)})-79
+241 y Fr(5)62 b Fx(\\Line)18 b(\(0,4\))f(\(2,4\))h(^{H\(z,t\)})-79
+291 y Fr(6)62 b Fx(\\Line)18 b(\(0,0\))f(\(2,0\))h(_{*})-79
+340 y Fr(7)62 b Fx(\\Line)18 b(\(2,0\))f(\(2,4\))-79
+390 y Fr(8)62 b Fx(\\Line)18 b(\(0,4\))f(\(2,2\))h(_{\\;\\;H\(z,)o(0\))
+e(=)j(f\(z,1\)})e(\\ro)-79 440 y Fr(9)62 b Fx(\\endGraph)-95
+490 y Fr(10)f Fx(\\qquad\\qqu)o(ad)-95 540 y Fr(11)g
+Fx(H'\(z,t,s\))16 b(=)-95 589 y Fr(12)61 b Fx(\\cases{f\(z)o(,2)o(s/\()
+o(2-)o(t\)\))o(&)17 b(if)h($0\\le)g(2s\\le)g(2)h(-)g(t$\\cr)-95
+639 y Fr(13)198 b Fx(\\cr)-95 689 y Fr(14)g Fx(H\(z,2s)18
+b(-)h(2)g(+)g(t\)&)g(if)g($2)f(-)i(t\\le)e(2s\\le)f(2$\\cr})-95
+739 y Fr(15)61 b Fx($$)263 1012 y
+gsave
+ 263 1012 a 263 1012
+a
+currentpoint currentpoint translate 5594036 neg 0 atan rotate neg exch
+neg exch translate
+ 263 1012 a 82 1022 a Fw(\000)-17 b(\000)-9 b(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)
+-17 b(\000)263 1012 y
+grestore
+ 263 1012 a 263 1012 a
+gsave
+ 263 1012
+a 263 1012 a
+currentpoint currentpoint translate 5594036 neg 0 atan rotate neg exch
+neg exch translate
+ 263 1012 a 263 999 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 263 999 a 147 1009
+a FB(f)t FF(\()p FB(z)r(;)7 b(s)p FF(\))263 1012 y
+grestore
+ 263
+1012 a 440 834 a
+gsave
+ 440 834 a 440 834 a
+currentpoint currentpoint translate 0 neg 5594038 atan rotate neg exch
+neg exch translate
+ 440 834 a 259 845
+a Fw(\000)-17 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)-17 b(\000)440
+834 y
+grestore
+ 440 834 a 440 834 a
+gsave
+ 440 834 a 440 834 a
+currentpoint currentpoint translate 0 neg 5594038 atan rotate neg exch
+neg exch translate
+ 440 834
+a 440 822 a
+currentpoint currentpoint translate 0 neg 5594038 atan rotate neg exch
+neg exch translate
+ 440 822 a 378 812 a FB(H)s FF(\()p FB(z)r(;)7
+b(t)p FF(\))440 834 y
+grestore
+ 440 834 a 440 1189 a
+gsave
+ 440 1189 a
+440 1189 a
+currentpoint currentpoint translate 0 neg 5594038 atan rotate neg exch
+neg exch translate
+ 440 1189 a 259 1199 a Fw(\000)-17 b(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f
+(\000)g(\000)g(\000)-17 b(\000)440 1189 y
+grestore
+ 440 1189 a
+440 1189 a
+gsave
+ 440 1189 a 440 1189 a
+currentpoint currentpoint translate 0 neg 5594038 atan rotate neg exch
+neg exch translate
+ 440 1189 a 440 1201
+a
+currentpoint currentpoint translate 0 neg 5594038 atan rotate neg exch
+neg exch translate
+ 440 1201 a 430 1220 a Fw(\003)440 1189 y
+grestore
+ 440 1189 a
+617 1012 a
+gsave
+ 617 1012 a 617 1012 a
+currentpoint currentpoint translate 5594036 neg 0 atan rotate neg exch
+neg exch translate
+ 617 1012 a 436 1022
+a Fw(\000)g(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h
+(\000)f(\000)g(\000)g(\000)g(\000)g(\000)-16 b(\000)617
+1012 y
+grestore
+ 617 1012 a 440 923 a
+gsave
+ 440 923 a 440 923 a
+currentpoint currentpoint translate -2797018 neg 5594038 atan rotate
+neg exch neg exch translate
+ 440 923
+a 238 933 a Fw(\000)d(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)
+-19 b(\000)440 923 y
+grestore
+ 440 923 a 440 923 a
+gsave
+ 440 923 a 440
+923 a
+currentpoint currentpoint translate -2797018 neg 5594038 atan rotate
+neg exch neg exch translate
+ 440 923 a 300 967 a FB(H)s FF(\()p FB(z)r(;)7 b
+FF(0\))k(=)h FB(f)t FF(\()p FB(z)r(;)7 b FF(1\))440 923
+y
+grestore
+ 440 923 a 784 1022 a FB(H)822 1005 y Fs(0)833 1022
+y FF(\()p FB(z)r(;)g(t;)g(s)p FF(\))k(=)1013 937 y Fq(8)1013
+974 y(<)1013 1049 y(:)1057 972 y FB(f)t FF(\()p FB(z)r(;)c
+FF(2)p FB(s=)p FF(\(2)j Fw(\000)f FB(t)p FF(\)\))53 b(if)13
+b(0)e Fw(\024)h FF(2)p FB(s)g Fw(\024)f FF(2)e Fw(\000)h
+FB(t)1057 1072 y(H)s FF(\()p FB(z)r(;)d FF(2)p FB(s)i
+Fw(\000)h FF(2)f(+)g FB(t)p FF(\))42 b(if)13 b(2)c Fw(\000)g
+FB(t)j Fw(\024)g FF(2)p FB(s)f Fw(\024)h FF(2)-79 1471
+y Fr(1)62 b Fx($$)-79 1520 y Fr(2)g Fx(\\def\\mod{\\)o(ma)o(thr)o(el)o
+({\\b)o(ig/)o(}})-79 1570 y Fr(3)g Fx(\\Dg)-79 1620 y
+Fr(4)g Fx({\\rm)18 b(Spin}\(3\))f(&)156 b(&)137 b(&)g(&)19
+b(SU\(2\))136 b(\\\\)-79 1670 y Fr(5)337 b Fx(&)19 b(\\rdTo)37
+b(&)137 b(&)19 b(\\ldTo)293 b(\\\\)-79 1720 y Fr(6)337
+b Fx(&)156 b(&)19 b(SO\(3\))450 b(\\\\)-79 1769 y Fr(7)337
+b Fx(&)156 b(&)19 b(\\dTo)470 b(\\\\)-79 1819 y Fr(8)62
+b Fx(&)19 b(O\(3\)\\mod)e(O\(1\)^3)g(=)i({})g(&)g(SO\(3\)\\mod\()o
+(O\(1)o(\)^3)o(\\c)o(ap)d(SO\(3\)\))i(\\\\)-79 1869 y
+Fr(9)62 b Fx(\\endDg)-95 1919 y Fr(10)f Fx($$)1030 2150
+y
+gsave
+ 1030 2150 a 1030 2150 a
+currentpoint currentpoint translate -2983488 neg 2797019 atan rotate
+neg exch neg exch translate
+ 1030 2150 a 937 2161 a Fw(\000)-18
+b(\000)-9 b(\000)g(\000)g(\000)h(\000)f(\000)-18 b Fv(\021)1030
+2150 y
+grestore
+ 1030 2150 a 1207 2150 a
+gsave
+ 1207 2150 a 1207 2150
+a
+currentpoint currentpoint translate -2983488 neg -2797019 atan rotate
+neg exch neg exch translate
+ 1207 2150 a 1114 2161 a Fw(\000)g(\000)-8 b(\000)f(\000)g(\000)g
+(\000)g(\000)-17 b Fv(\021)1207 2150 y
+grestore
+ 1207 2150 a 1119
+2339 a
+gsave
+ 1119 2339 a 1119 2339 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1119 2339 a 1053 2350
+a Fw(\000)k(\000)k(\000)g(\000)d Fv(\021)1119 2339 y
+grestore
+
+1119 2339 a 875 2066 a FF(Spin)o(\(3\))231 b FB(S)r(U)5
+b FF(\(2\))1062 2255 y FB(S)r(O)q FF(\(3\))597 2444 y
+FB(O)q FF(\(3\))695 2411 y Fq(\016)730 2444 y FB(O)q
+FF(\(1\))816 2427 y Fr(3)846 2444 y FF(=)12 b FB(S)r(O)q
+FF(\(3\))1015 2411 y Fq(\016)1051 2444 y FF(\()p FB(O)q
+FF(\(1\))1153 2427 y Fr(3)1181 2444 y Fw(\\)d FB(S)r(O)q
+FF(\(3\)\))954 2770 y(58)p eop
+%%Page: 59 4
+59 58 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y FH(S.)16 b(Mac)g(Lane)p
+FF(,)d FC(Cate)n(gories)h(for)g(the)h(Working)h(Mathematician)p
+FF(,)e(page)g(109.)-79 133 y Fr(1)62 b Fx($$)-79 183
+y Fr(2)g Fx(\\def\\cod{{)o(\\r)o(m)17 b(cod}\\,})g(\\def\\dom)o({{\\)o
+(rm)f(dom}\\,})-79 232 y Fr(3)62 b Fx(\\cellwidth)o(+=)o(2mm)-79
+282 y Fr(4)g Fx(\\Dg)-79 332 y Fr(5)g Fx(&)19 b(F)g(&)h(_{\\cod)d(u})i
+(&)g(\\rEq)136 b(&)19 b(F)g(&)g(_{\\cod)f(u})h(&)97 b(&)255
+b(&)19 b(F_i)293 b(\\\\)-79 382 y Fr(6)62 b Fx(&)19 b(\\uTo)f(>{p_u})g
+(&)h(&)235 b(&)19 b(\\uTo)f(&)157 b(&)97 b(&)20 b(\\ruTo)d(<{p_i})h
+(\\tx{-5pt)o(})f(&)-79 432 y Fr(7)1376 b Fx(\\uDashto)17
+b(>{\\mu_i})f(\\\\)-79 482 y Fr(8)62 b Fx({\\mit\\Pi}_)o({u)o(:j\\)o
+(to)16 b(k}F_k)i(=)h({\\mit\\Pi})o(_u)d(&)-79 531 y Fr(9)101
+b Fx(F)19 b(&)h(_{\\cod)d(u})i(&)g(\\lTo)f(^f)h(\\up{3pt})d(\\lTo)j(_g)
+f(\\up{-3pt})-95 581 y Fr(10)630 b Fx(&)19 b({\\mit\\Pi}_)o(i)d(&)k(&)f
+(F_i)f(&)i(\\lDashto)c(^e)j(&)g(d)333 b(\\\\)-95 631
+y Fr(11)61 b Fx(&)19 b(\\dTo)f(>{p_u})g(&)h(&)235 b(&)19
+b(\\dTo)f(>{p_{\\dom)e(u}})705 b(\\\\)-95 681 y Fr(12)61
+b Fx(&)19 b(F)g(&)h(_{\\cod)d(u})i(&)g(\\lTo)f(^{Fu})g(&)h(F)g(&)g
+(_{\\dom)f(u})803 b(\\\\)-95 731 y Fr(13)61 b Fx(\\endDg)-95
+780 y Fr(14)g Fx($$)1018 915 y
+gsave
+ 1018 915 a 1018 915 a
+currentpoint currentpoint translate 0 neg 3793467 atan rotate neg exch
+neg exch translate
+
+1018 915 a 1013 925 a FF(=)1018 915 y
+grestore
+ 1018 915 a 842
+1009 a
+gsave
+ 842 1009 a 842 1009 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 842 1009 a 774 1019 a Fw(\000)-15
+b(\000)-9 b(\000)g(\000)g(\000)-15 b Fv(\021)842 1009
+y
+grestore
+ 842 1009 a 842 1009 a
+gsave
+ 842 1009 a 842 1009 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 842 1009
+a 846 1022 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 846 1022 a 10 x Fu(p)863 1036 y Fe(u)846
+1009 y
+grestore
+ 846 1009 a 1138 1009 a
+gsave
+ 1138 1009 a 1138 1009 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+
+1138 1009 a 1070 1019 a Fw(\000)f(\000)-9 b(\000)g(\000)g(\000)-15
+b Fv(\021)1138 1009 y
+grestore
+ 1138 1009 a 1276 1009 a
+gsave
+ 1276 1009
+a 1276 1009 a
+currentpoint currentpoint translate 2983488 neg 3615060 atan rotate
+neg exch neg exch translate
+ 1276 1009 a 1164 1019 a Fw(\000)-21 b(\000)-9
+b(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)-20
+b Fv(\021)1276 1009 y
+grestore
+ 1276 1009 a 1276 1009 a
+gsave
+ 1276 1009
+a 1276 1009 a
+currentpoint currentpoint translate 2983488 neg 3615060 atan rotate
+neg exch neg exch translate
+ 1276 1009 a 1277 997 a
+currentpoint currentpoint translate -2983488 neg 3615060 atan rotate
+neg exch neg exch translate
+ 1277 997 a 1247
+991 a Fu(p)1264 995 y Fe(i)1277 1009 y
+grestore
+ 1277 1009 a 1391
+1009 a
+gsave
+ 1391 1009 a 1391 1009 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 1391 1009 a 1327 1019
+a Fv(\013)-9 b(\013)g(\013)g(\013)g(\013)-14 b(\014)1391
+1009 y
+grestore
+ 1391 1009 a 1391 1009 a
+gsave
+ 1391 1009 a 1391 1009
+a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 1391 1009 a 1392 1022 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1392 1022 a 10 x Fu(\026)1412
+1036 y Fe(i)1392 1009 y
+grestore
+ 1392 1009 a 1018 1091 a
+gsave
+ 1018
+1091 a 1018 1091 a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1018 1091 a 930 1102 a Fw(\000)-19
+b(\000)-9 b(\000)g(\000)g(\000)g(\000)-18 b Fv(\021)1018
+1091 y
+grestore
+ 1018 1091 a 1018 1091 a
+gsave
+ 1018 1091 a 1018 1091
+a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1018 1091 a 1011 1104 a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1011 1104 a 1001 1098 a Fu(f)1011
+1091 y
+grestore
+ 1011 1091 a 1018 1116 a
+gsave
+ 1018 1116 a 1018 1116
+a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1018 1116 a 930 1126 a Fw(\000)f(\000)-9 b(\000)g(\000)g(\000)g(\000)
+-18 b Fv(\021)1018 1116 y
+grestore
+ 1018 1116 a 1018 1116 a
+gsave
+ 1018
+1116 a 1018 1116 a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1018 1116 a 1011 1104 a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1011 1104
+a 1002 1116 a Fu(g)1011 1116 y
+grestore
+ 1011 1116 a 1286 1104
+a
+gsave
+ 1286 1104 a 1286 1104 a
+currentpoint currentpoint translate 0 neg -3287380 atan rotate neg
+exch neg exch translate
+ 1286 1104 a 1205 1114 a Fv(\013)-9
+b(\013)g(\013)g(\013)h(\013)f(\013)-14 b(\014)1286 1104
+y
+grestore
+ 1286 1104 a 1286 1104 a
+gsave
+ 1286 1104 a 1286 1104 a
+currentpoint currentpoint translate 0 neg -3287380 atan rotate neg
+exch neg exch translate
+ 1286
+1104 a 1281 1116 a
+currentpoint currentpoint translate 0 neg -3287380 atan rotate neg
+exch neg exch translate
+ 1281 1116 a -8 w Fu(e)1281 1104 y
+grestore
+
+1281 1104 a 842 1198 a
+gsave
+ 842 1198 a 842 1198 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 842 1198
+a 767 1208 a Fw(\000)e(\000)-9 b(\000)g(\000)g(\000)-15
+b Fv(\021)842 1198 y
+grestore
+ 842 1198 a 842 1198 a
+gsave
+ 842 1198 a
+842 1198 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 842 1198 a 838 1186 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 838 1186 a 10 x Fu(p)855
+1200 y Fe(u)838 1198 y
+grestore
+ 838 1198 a 1138 1198 a
+gsave
+ 1138 1198
+a 1138 1198 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1138 1198 a 1068 1208 a Fw(\000)d(\000)-9
+b(\000)g(\000)g(\000)-18 b Fv(\021)1138 1198 y
+grestore
+ 1138 1198
+a 1138 1198 a
+gsave
+ 1138 1198 a 1138 1198 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1138 1198 a 1137
+1186 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 1137 1186 a 10 x Fu(p)1154 1200 y Fp(dom)t Fe(u)1137
+1198 y
+grestore
+ 1137 1198 a 1018 1293 a
+gsave
+ 1018 1293 a 1018 1293
+a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1018 1293 a 922 1303 a Fw(\000)j(\000)-9 b(\000)g(\000)g(\000)g(\000)
+-14 b Fv(\021)1018 1293 y
+grestore
+ 1018 1293 a 1018 1293 a
+gsave
+ 1018
+1293 a 1018 1293 a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1018 1293 a 1007 1305 a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1007 1305
+a -23 w Fu(F)t(u)1007 1293 y
+grestore
+ 1007 1293 a 826 925 a FB(F)859
+931 y Fr(co)q(d)5 b Fu(u)1122 925 y FB(F)1160 931 y Fr(co)q(d)g
+Fu(u)1370 925 y FB(F)1397 931 y Fu(i)539 1114 y FB(\005)574
+1120 y Fu(u)p Fr(:)p Fu(j)r Fh(\021)p Fu(k)668 1114 y
+FB(F)695 1120 y Fu(k)726 1114 y FF(=)12 b FB(\005)805
+1120 y Fu(u)826 1114 y FB(F)859 1120 y Fr(co)q(d)5 b
+Fu(u)1114 1114 y FB(\005)1149 1120 y Fu(i)1162 1114 y
+FB(F)1189 1120 y Fu(i)1380 1114 y FB(d)826 1303 y(F)859
+1309 y Fr(co)q(d)g Fu(u)1122 1303 y FB(F)1154 1309 y
+Fr(dom)h Fu(u)0 1670 y FH(S.)16 b(Mac)g(Lane)p FF(,)d
+FC(Cate)n(gories)h(for)g(the)h(Working)h(Mathematician)p
+FF(,)e(page)g(117.)-79 1761 y Fr(1)62 b Fx($$)-79 1811
+y Fr(2)g Fx(\\Dg)-79 1861 y Fr(3)g Fx(u)215 b(&)20 b(\\rTo)e(^{e_1})56
+b(&)19 b(v)137 b(&)20 b(&)f(\\rTo)f(\\up{3pt})e(^f)j(\\rTo)f
+(\\up{-3pt})e(_g)j(&)g(d)79 b(\\\\)-79 1911 y Fr(4)62
+b Fx(\\uDashto)17 b(>s)h(&)294 b(&)19 b(\\dTo)f(>e)h(&)373
+b(&)352 b(&)19 b(\\uTo)g(\\\\)-79 1961 y Fr(5)62 b Fx(w)215
+b(&)20 b(\\rTo)e(^{ee_1s})e(&)j(w)137 b(&)20 b({})e(=)i({\\mit\\Pi})o
+(k_)o(i)d(&)i(\\rTo)253 b(&)19 b(k_i)39 b(\\\\)-79 2010
+y Fr(6)62 b Fx(\\endDg)-79 2060 y Fr(7)g Fx($$)812 2195
+y
+gsave
+ 812 2195 a 812 2195 a
+currentpoint currentpoint translate 0 neg 2910900 atan rotate neg exch
+neg exch translate
+ 812 2195 a 740 2205 a Fw(\000)-15
+b(\000)-9 b(\000)g(\000)g(\000)-14 b Fv(\021)812 2195
+y
+grestore
+ 812 2195 a 812 2195 a
+gsave
+ 812 2195 a 812 2195 a
+currentpoint currentpoint translate 0 neg 2910900 atan rotate neg exch
+neg exch translate
+ 812 2195
+a 813 2182 a
+currentpoint currentpoint translate 0 neg 2910900 atan rotate neg exch
+neg exch translate
+ 813 2182 a 797 2178 a Fu(e)813 2182 y Fp(1)813
+2195 y
+grestore
+ 813 2195 a 1066 2182 a
+gsave
+ 1066 2182 a 1066 2182 a
+currentpoint currentpoint translate 0 neg 5101974 atan rotate neg exch
+neg exch translate
+
+1066 2182 a 924 2193 a Fw(\000)f(\000)-9 b(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)h(\000)f(\000)g(\000)-14 b Fv(\021)1066
+2182 y
+grestore
+ 1066 2182 a 1066 2182 a
+gsave
+ 1066 2182 a 1066 2182
+a
+currentpoint currentpoint translate 0 neg 5101974 atan rotate neg exch
+neg exch translate
+ 1066 2182 a 1066 2170 a
+currentpoint currentpoint translate 0 neg 5101974 atan rotate neg exch
+neg exch translate
+ 1066 2170 a 1056 2164 a Fu(f)1066
+2182 y
+grestore
+ 1066 2182 a 1066 2207 a
+gsave
+ 1066 2207 a 1066 2207
+a
+currentpoint currentpoint translate 0 neg 5101974 atan rotate neg exch
+neg exch translate
+ 1066 2207 a 924 2218 a Fw(\000)f(\000)-9 b(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)h(\000)f(\000)g(\000)-14 b Fv(\021)1066
+2207 y
+grestore
+ 1066 2207 a 1066 2207 a
+gsave
+ 1066 2207 a 1066 2207
+a
+currentpoint currentpoint translate 0 neg 5101974 atan rotate neg exch
+neg exch translate
+ 1066 2207 a 1066 2220 a
+currentpoint currentpoint translate 0 neg 5101974 atan rotate neg exch
+neg exch translate
+ 1066 2220 a 1057 2232 a Fu(g)1066
+2207 y
+grestore
+ 1066 2207 a 720 2289 a
+gsave
+ 720 2289 a 720 2289 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 720
+2289 a 642 2300 a Fv(\013)-9 b(\013)g(\013)g(\013)g(\013)g(\013)-16
+b(\014)720 2289 y
+grestore
+ 720 2289 a 720 2289 a
+gsave
+ 720 2289 a 720
+2289 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 720 2289 a 719 2302 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 719 2302 a 10 x Fu(s)719
+2289 y
+grestore
+ 719 2289 a 904 2289 a
+gsave
+ 904 2289 a 904 2289 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 904
+2289 a 829 2300 a Fw(\000)-22 b(\000)-9 b(\000)g(\000)g(\000)g(\000)-21
+b Fv(\021)904 2289 y
+grestore
+ 904 2289 a 904 2289 a
+gsave
+ 904 2289 a
+904 2289 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 904 2289 a 905 2277 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 905 2277 a 10 x Fu(e)905
+2289 y
+grestore
+ 905 2289 a 1228 2289 a
+gsave
+ 1228 2289 a 1228 2289 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+
+1228 2289 a 1160 2300 a Fw(\000)-16 b(\000)-9 b(\000)g(\000)g(\000)-15
+b Fv(\021)1228 2289 y
+grestore
+ 1228 2289 a 812 2384 a
+gsave
+ 812 2384
+a 812 2384 a
+currentpoint currentpoint translate 0 neg 2910900 atan rotate neg exch
+neg exch translate
+ 812 2384 a 744 2394 a Fw(\000)c(\000)-9
+b(\000)g(\000)g(\000)-19 b Fv(\021)812 2384 y
+grestore
+ 812 2384
+a 812 2384 a
+gsave
+ 812 2384 a 812 2384 a
+currentpoint currentpoint translate 0 neg 2910900 atan rotate neg exch
+neg exch translate
+ 812 2384 a 812 2371
+a
+currentpoint currentpoint translate 0 neg 2910900 atan rotate neg exch
+neg exch translate
+ 812 2371 a 780 2367 a Fu(ee)812 2371 y Fp(1)828 2367
+y Fu(s)812 2384 y
+grestore
+ 812 2384 a 1110 2384 a
+gsave
+ 1110 2384 a
+1110 2384 a
+currentpoint currentpoint translate 0 neg 3719362 atan rotate neg exch
+neg exch translate
+ 1110 2384 a 1065 2394 a Fw(\000)g(\000)-10
+b(\000)i(\000)f(\000)-19 b Fv(\021)1110 2384 y
+grestore
+ 1110 2384
+a 708 2205 a FB(u)162 b(v)303 b(d)705 2394 y(w)154 b(w)20
+b FF(=)12 b FB(\005)s(k)1043 2400 y Fu(i)1210 2394 y
+FB(k)1232 2400 y Fu(i)954 2770 y FF(59)p eop
+%%Page: 60 5
+60 59 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y FH(S.)16 b(Mac)g(Lane)g(and)f(I.)h
+(Mo)q(erdijk)p FF(,)c FC(She)n(aves)k(In)f(Ge)n(ometry)g(and)g(L)n(o)n
+(gic)p FF(,)f(page)f(232.)-79 133 y Fr(1)62 b Fx($$)-79
+183 y Fr(2)g Fx(\\cellwidth)o(+=)o(3mm)-79 232 y Fr(3)g
+Fx(\\Dg)-79 282 y Fr(4)g Fx(Y)117 b(&)20 b(\\rMono)d(^y)i(&)g(A)333
+b(&)19 b(\\rLine)e(\\jh)i(&)g(\\stop)312 b(\\\\)-79 332
+y Fr(5)62 b Fx(\\dEpi)37 b(&)216 b(&)19 b(\\dEpi)253
+b(&)235 b(&)19 b(\\mx{-1cm})232 b(\\\\)-79 382 y Fr(6)62
+b Fx(D)117 b(&)20 b(\\rMono)d(^d)i(&)g(i_A\(A\))233 b(&)i(&)19
+b(\\dLine)e(>{\\eta_A})g(\\jn)h(\\\\)-79 432 y Fr(7)62
+b Fx(\\dMono)17 b(&)216 b(&)19 b(\\dMono)939 b(\\\\)-79
+482 y Fr(8)62 b Fx(X)117 b(&)20 b(\\rMono)d(_x)i(&)g(\\overline)o({i_)o
+(A\()o(A\)})d(&)j(\\lTo)f(\\jt)58 b(&)19 b(\\stop)312
+b(\\\\)-79 531 y Fr(9)62 b Fx(\\endDg)-95 581 y Fr(10)f
+Fx($$)923 715 y
+gsave
+ 923 715 a 923 715 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 923 715 a 818 726
+a Fv(\016)-10 b Fw(\000)h(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-14
+b Fv(\021)923 715 y
+grestore
+ 923 715 a 923 715 a
+gsave
+ 923 715 a 923
+715 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 923 715 a 924 703 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 924 703 a 915 697 a Fu(y)924
+715 y
+grestore
+ 924 715 a 1115 715 a
+gsave
+ 1115 715 a 1115 715 a
+currentpoint currentpoint translate 0 neg 1945767 atan rotate neg exch
+neg exch translate
+ 1115
+715 a 1077 726 a Fw(\000)-20 b(\000)-9 b(\000)g(\000)-19
+b(\000)1115 715 y
+grestore
+ 1115 715 a 793 810 a
+gsave
+ 793 810 a 793
+810 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 793 810 a 717 820 a Fw(\000)j(\000)-9 b(\000)g(\000)g(\000)-15
+b Fv(\021)-30 b(\014)793 810 y
+grestore
+ 793 810 a 1053 810 a
+gsave
+ 1053
+810 a 1053 810 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1053 810 a 977 820 a Fw(\000)-17 b(\000)-9
+b(\000)g(\000)g(\000)-16 b Fv(\021)-30 b(\014)1053 810
+y
+grestore
+ 1053 810 a 923 904 a
+gsave
+ 923 904 a 923 904 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 923 904 a
+819 915 a Fv(\016)-18 b Fw(\000)-9 b(\000)g(\000)h(\000)f(\000)g(\000)
+-21 b Fv(\021)923 904 y
+grestore
+ 923 904 a 923 904 a
+gsave
+ 923 904 a
+923 904 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 923 904 a 906 892 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 906 892 a -9 w Fu(d)906
+904 y
+grestore
+ 906 904 a 1176 904 a
+gsave
+ 1176 904 a 1176 904 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 1176
+904 a 983 915 a Fw(\000)k(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)h
+(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-16
+b(\000)1176 904 y
+grestore
+ 1176 904 a 1176 904 a
+gsave
+ 1176 904 a 1176
+904 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 1176 904 a 1176 892 a
+currentpoint currentpoint translate 5966976 neg 0 atan rotate neg exch
+neg exch translate
+ 1176 892 a 10 x Fu(\021)1193
+906 y Fe(A)1176 904 y
+grestore
+ 1176 904 a 793 999 a
+gsave
+ 793 999 a
+793 999 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 793 999 a 717 1009 a Fv(\016)-9 b Fw(\000)g(\000)g(\000)g
+(\000)c Fv(\021)793 999 y
+grestore
+ 793 999 a 1053 999 a
+gsave
+ 1053 999
+a 1053 999 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1053 999 a 987 1009 a Fv(\016)-8 b Fw(\000)f(\000)g(\000)d
+Fv(\021)1053 999 y
+grestore
+ 1053 999 a 923 1093 a
+gsave
+ 923 1093 a 923
+1093 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 923 1093 a 820 1104 a Fv(\016)-18 b Fw(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)-22 b Fv(\021)923
+1093 y
+grestore
+ 923 1093 a 923 1093 a
+gsave
+ 923 1093 a 923 1093 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 923
+1093 a 906 1106 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 906 1106 a 897 1118 a Fu(x)906 1093
+y
+grestore
+ 906 1093 a 1115 1093 a
+gsave
+ 1115 1093 a 1115 1093 a
+currentpoint currentpoint translate 0 neg -1945767 atan rotate neg
+exch neg exch translate
+ 1115
+1093 a 1049 1104 a Fw(\000)i(\000)h Fv(\021)1115 1093
+y
+grestore
+ 1115 1093 a 776 726 a FB(Y)237 b(A)775 915 y(D)191
+b(i)1014 921 y Fu(A)1042 915 y FF(\()p FB(A)p FF(\))774
+1104 y FB(X)p 1000 1068 105 2 v 192 w(i)1014 1110 y Fu(A)1042
+1104 y FF(\()p FB(A)p FF(\))0 1325 y FH(K.)17 b(S.)e(Bro)o(wn)p
+FF(,)e FC(Cohomolo)n(gy)i(of)g(Gr)n(oups)p FF(,)e(page)h(280.)-79
+1417 y Fr(1)62 b Fx($$)-79 1467 y Fr(2)g Fx(\\let\\^\\wid)o(eh)o(at)16
+b(\\let\\~\\wid)o(eti)o(ld)o(e)-79 1516 y Fr(3)62 b Fx(\\flexible)16
+b(\\columndis)o(t=1)o(cm)-79 1566 y Fr(4)62 b Fx(\\xgrid+=2m)o(m)16
+b(\\ygrid+=-2m)o(m)-79 1616 y Fr(5)62 b Fx(\\Diagram)-79
+1666 y Fr(6)219 b Fx(&)176 b(&)g(&)157 b(&H^0)18 b(\\bTo\(-1,-)o(4\))e
+(\\hx{-2pt})-79 1716 y Fr(7)945 b Fx(&\\cdots)36 b(&H^{n-1})g(&H^n)i
+(&H^{n+1})e(&H^{n+2})17 b(&\\cdots)g(\\\\)-79 1765 y
+Fr(8)62 b Fx(\\mx{5mm}&)173 b(&)j(&)157 b(&\\dTo)57 b(&)156
+b(&\\dTo)96 b(&\\dEpi&\\dB)o(ar)75 b(&\\dBar)17 b(&\\mx{-2mm}\\)o(\\)
+-79 1815 y Fr(9)62 b Fx(\\cdots)37 b(&\\^H^{-3})16 b(&\\^H^{-2})g
+(&\\^H^{-1}&)o(\\^H)o(^0)36 b(&\\cdots)g(&\\^H^{n-1})o(&\\^)o(H^)o
+(n&\\)o(^H)o(^{n)o(+1)o(}&\\)o(^H^)o({n)o(+2})o(&\\)o(cdo)o(ts\\)o(\\)
+-95 1865 y Fr(10)218 b Fx(&\\dBar)76 b(&\\dBar)g(&\\dInto)37
+b(&\\dTo)57 b(&)156 b(&\\dTo)18 b(\\dx{-2mm})546 b(\\\\)-95
+1915 y Fr(11)61 b Fx(\\cdots)37 b(&\\~H_{n+2)o(}&\\)o(~H_)o({n)o(+1})o
+(&\\)o(~H_)o(n)56 b(&\\~H_{n-1)o(}&)o(\\cd)o(ots)o(&\\)o(~H_)o(0)16
+b(\\aTo\(1,4\))h(\\hx{-2pt)o(})331 b(\\\\)-95 1965 y
+Fr(12)61 b Fx(\\endDiagra)o(m)-95 2014 y Fr(13)g Fx($$)752
+2345 y
+gsave
+ 752 2345 a 752 2345 a
+currentpoint currentpoint translate 5966976 neg 2106542 atan rotate
+neg exch neg exch translate
+ 752 2345 a 592 2356 a Fw(\000)-21
+b(\000)-9 b(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)-20 b Fv(\021)752 2345 y
+grestore
+ 752
+2345 a 827 2251 a
+gsave
+ 827 2251 a 827 2251 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 827 2251 a 752
+2261 a Fw(\000)e(\000)-9 b(\000)g(\000)g(\000)-21 b Fv(\021)827
+2251 y
+grestore
+ 827 2251 a 1087 2251 a
+gsave
+ 1087 2251 a 1087 2251 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+
+1087 2251 a 1011 2261 a Fw(\000)g(\000)-9 b(\000)g(\000)g(\000)-21
+b Fv(\021)1087 2251 y
+grestore
+ 1087 2251 a 1229 2251 a
+gsave
+ 1229 2251
+a 1229 2251 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1229 2251 a 1153 2261 a Fw(\000)f(\000)-9
+b(\000)g(\000)h(\000)-21 b Fv(\021)-30 b(\014)1229 2251
+y
+grestore
+ 1229 2251 a 1371 2251 a
+gsave
+ 1371 2251 a 1371 2251 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1371
+2251 a 1295 2261 a FF(=)-17 b(=)-9 b(=)g(=)g(=)-17 b(=)1371
+2251 y
+grestore
+ 1371 2251 a 1512 2251 a
+gsave
+ 1512 2251 a 1512 2251
+a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1512 2251 a 1437 2261 a FF(=)f(=)-9 b(=)h(=)f(=)-17
+b(=)1512 2251 y
+grestore
+ 1512 2251 a 402 2440 a
+gsave
+ 402 2440 a 402
+2440 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 402 2440 a 326 2450 a FF(=)g(=)-9 b(=)g(=)g(=)-16
+b(=)402 2440 y
+grestore
+ 402 2440 a 544 2440 a
+gsave
+ 544 2440 a 544 2440
+a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 544 2440 a 468 2450 a FF(=)f(=)-9 b(=)g(=)g(=)-16 b(=)544
+2440 y
+grestore
+ 544 2440 a 686 2440 a
+gsave
+ 686 2440 a 686 2440 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 686
+2440 a 610 2450 a FB(,)-7 b Fw(\000)-13 b(\000)k(\000)g(\000)d
+Fv(\021)686 2440 y
+grestore
+ 686 2440 a 827 2440 a
+gsave
+ 827 2440 a 827
+2440 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 827 2440 a 752 2450 a Fw(\000)-22 b(\000)-9 b(\000)g(\000)g
+(\000)-21 b Fv(\021)827 2440 y
+grestore
+ 827 2440 a 1087 2440 a
+gsave
+
+1087 2440 a 1087 2440 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1087 2440 a 1011 2450 a Fw(\000)g(\000)-9
+b(\000)g(\000)g(\000)-21 b Fv(\021)1087 2440 y
+grestore
+ 1087 2440
+a 1154 2345 a
+gsave
+ 1154 2345 a 1154 2345 a
+currentpoint currentpoint translate 5966976 neg 2106542 atan rotate
+neg exch neg exch translate
+ 1154 2345 a 994
+2356 a Fw(\000)g(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)h(\000)f(\000)-20 b Fv(\021)1154
+2345 y
+grestore
+ 1154 2345 a 799 2167 a FB(H)837 2149 y Fr(0)945
+2167 y Fw(\001)7 b(\001)g(\001)41 b FB(H)1074 2149 y
+Fu(n)p Fs(\000)p Fr(1)1199 2167 y FB(H)1237 2149 y Fu(n)1319
+2167 y FB(H)1357 2149 y Fu(n)p Fr(+1)1461 2167 y FB(H)1499
+2149 y Fu(n)p Fr(+2)1606 2167 y Fw(\001)7 b(\001)g(\001)295
+2356 y(\001)g(\001)g(\001)371 2345 y Fq(b)361 2356 y
+FB(H)399 2338 y Fs(\000)p Fr(3)512 2345 y Fq(b)503 2356
+y FB(H)541 2338 y Fs(\000)p Fr(2)654 2345 y Fq(b)644
+2356 y FB(H)682 2338 y Fs(\000)p Fr(1)809 2345 y Fq(b)799
+2356 y FB(H)837 2338 y Fr(0)945 2356 y Fw(\001)g(\001)g(\001)1045
+2345 y Fq(b)1036 2356 y FB(H)1074 2338 y Fu(n)p Fs(\000)p
+Fr(1)1208 2345 y Fq(b)1199 2356 y FB(H)1237 2338 y Fu(n)1329
+2345 y Fq(b)1319 2356 y FB(H)1357 2338 y Fu(n)p Fr(+1)1471
+2345 y Fq(b)1461 2356 y FB(H)1499 2338 y Fu(n)p Fr(+2)1606
+2356 y Fw(\001)g(\001)g(\001)295 2545 y(\001)g(\001)g(\001)362
+2534 y Fq(e)353 2545 y FB(H)388 2551 y Fu(n)p Fr(+2)504
+2534 y Fq(e)494 2545 y FB(H)529 2551 y Fu(n)p Fr(+1)667
+2534 y Fq(e)657 2545 y FB(H)692 2551 y Fu(n)787 2534
+y Fq(e)778 2545 y FB(H)813 2551 y Fu(n)p Fs(\000)p Fr(1)945
+2545 y Fw(\001)g(\001)g(\001)1070 2534 y Fq(e)1061 2545
+y FB(H)1096 2551 y Fr(0)954 2770 y FF(60)p eop
+%%Page: 61 6
+61 60 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y FH(George)15 b(W.)h(Whitehead)p
+FF(,)11 b FC(Elements)k(of)g(Homotopy)g(The)n(ory)p FF(,)e(page)h(592.)
+-79 133 y Fr(1)62 b Fx($$)-79 183 y Fr(2)g Fx(\\def\\T{{\\b)o(f)16
+b(T}})j(\\def\\S{{\\)o(bf)d(S}})-79 232 y Fr(3)62 b Fx(\\landscape)16
+b(\\let\\labe)o(lst)o(yl)o(e\\t)o(ex)o(tst)o(yl)o(e)-79
+282 y Fr(4)62 b Fx(\\cellpush=)o(10)o(pt)16 b(\\xscale=2.)o(2)-79
+332 y Fr(5)62 b Fx(\\Diagram)-79 382 y Fr(6)199 b Fx(&)353
+b(&)19 b(H_n\(X^+\\cu)o(p\\T)d(A^+,)i(X^+\))g(&)-79 432
+y Fr(7)121 b Fx(\\lTo)18 b(^{H_n\(k_1)o(\)})e(&)157 b(&)19
+b(H_n\(\\T)e(A^+,A^+\))-79 482 y Fr(8)670 b Fx(\\aTo)18
+b(\(-3,-2\))f(_{H_n\(p_1\))o(})-79 531 y Fr(9)670 b Fx(\\aTo)18
+b(\(3,-4\))f(^{\\partial_)o(1})369 b(\\\\)-95 581 y Fr(10)198
+b Fx(&)353 b(&)19 b(\\dTo)f(>{H_n{q_1})o(})605 b(\\\\)-95
+631 y Fr(11)198 b Fx(&)353 b(&)19 b(H_n\(\\S)e(A^+,P\))214
+b(&)-95 681 y Fr(12)453 b Fx(&)157 b(&)19 b(*)g(\\dx{.7})684
+b(\\\\)-95 731 y Fr(13)198 b Fx(&)20 b(\\ruTo)d(_{H_n\(q_4\))o(})g
+(\\tx{15pt)o(})-95 780 y Fr(14)571 b Fx(&)19 b(\\uTo)f(>{H_n\(t\)})644
+b(\\\\)-95 830 y Fr(15)61 b Fx(H_n\(X^+\\cu)o(p\\)o(T)17
+b(A^+,P\))g(\\aTo)h(\(2,4\))37 b(^{H_n\(j_1\))o(})17
+b(\\tx{15pt})-95 880 y Fr(16)473 b Fx(\\aTo)18 b(\(2,-4\))f
+(_{H_n\(j_2\))o(})g(\\tx{15pt})-95 930 y Fr(17)198 b
+Fx(&)59 b(&)f(&)78 b(&)157 b(&)58 b(&)19 b(H_{n-1}\(A\))d(&)-95
+980 y Fr(18)787 b Fx(\\rTo)18 b(^{H_{n-1})o(\(i_)o(A\))o(})f(&)i
+(H_{n-1}\(A)o(^+,)o(P\))d(\\\\)-95 1029 y Fr(19)198 b
+Fx(&)20 b(\\rdTo)d(^{H_n\(q_2\))o(})g(\\tx{15pt)o(})-95
+1079 y Fr(20)571 b Fx(&)490 b(&)19 b(&)g(&)h(\\ruTo)233
+b(\\\\)-95 1129 y Fr(21)198 b Fx(&)353 b(&)19 b(H_n\(X^+/A^)o(+,P)o(\))
+193 b(&)-95 1179 y Fr(22)100 b Fx(\\lTo)18 b(^{P_n\(X,A\))o(})36
+b(&)20 b(H_n\(X,A\))-95 1229 y Fr(23)493 b Fx(\\aTo)18
+b(\(1,-2\))f(>{H_n\(i_X)o(\)})585 b(\\\\)-95 1279 y Fr(24)198
+b Fx(&)353 b(&)19 b(\\uTo)f(>{H_n\(q_3\))o(})605 b(\\\\)-95
+1328 y Fr(25)198 b Fx(&)353 b(&)19 b(H_n\(X^+\\cu)o(p\\T)d(A^+,\\T)h
+(A^+\)&)-95 1378 y Fr(26)100 b Fx(\\lTo)18 b(_{H_n\(k_2\))o(})f(&)i(&)g
+(H_n\(X^+,A^)o(+\))-95 1428 y Fr(27)512 b Fx(\\aTo)18
+b(\(3,4\))g(_{\\partia)o(l_2)o(})-95 1478 y Fr(28)512
+b Fx(\\aTo)18 b(\(-3,2\))f(_{H_n\(p_X\)})565 b(\\\\)-95
+1528 y Fr(29)61 b Fx(\\endDiagra)o(m)-95 1577 y Fr(30)g
+Fx($$)954 2770 y FF(61)p eop
+%%Page: 62 7
+62 61 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)1491 2502 y
+gsave
+ 1491 2502 a 1491
+2502 a
+currentpoint currentpoint translate 90 neg rotate neg exch neg exch
+translate
+ 1491 2502 a 2593 1516 a
+gsave
+ 2593 1516 a 2593 1516
+a
+currentpoint currentpoint translate 0 neg -12306864 atan rotate neg
+exch neg exch translate
+ 2593 1516 a 2374 1526 a Fw(\000)-14 b(\000)-9 b(\000)h(\000)f(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)c
+Fv(\021)2593 1516 y
+grestore
+ 2593 1516 a 2593 1516 a
+gsave
+ 2593 1516
+a 2593 1516 a
+currentpoint currentpoint translate 0 neg -12306864 atan rotate neg
+exch neg exch translate
+ 2593 1516 a 2564 1528 a
+currentpoint currentpoint translate 0 neg -12306864 atan rotate neg
+exch neg exch translate
+ 2564 1528 a 2499
+1518 a FB(H)2534 1524 y Fu(n)2556 1518 y FF(\()p FB(k)2594
+1524 y Fr(1)2612 1518 y FF(\))2564 1516 y
+grestore
+ 2564 1516 a
+2593 1634 a
+gsave
+ 2593 1634 a 2593 1634 a
+currentpoint currentpoint translate -3729358 neg -12306864 atan rotate
+neg exch neg exch translate
+ 2593 1634 a 2298
+1644 a Fw(\000)-19 b(\000)-9 b(\000)g(\000)g(\000)g(\000)h(\000)f(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)h(\000)f(\000)-19 b Fv(\021)2593
+1634 y
+grestore
+ 2593 1634 a 2593 1634 a
+gsave
+ 2593 1634 a 2593 1634
+a
+currentpoint currentpoint translate -3729358 neg -12306864 atan rotate
+neg exch neg exch translate
+ 2593 1634 a 2586 1622 a
+currentpoint currentpoint translate 3729358 neg -12306864 atan rotate
+neg exch neg exch translate
+ 2586 1622 a 31 x FB(H)2621
+1659 y Fu(n)2643 1653 y FF(\()p FB(p)2680 1659 y Fr(1)2699
+1653 y FF(\))2586 1634 y
+grestore
+ 2586 1634 a 3281 1752 a
+gsave
+ 3281
+1752 a 3281 1752 a
+currentpoint currentpoint translate -7458716 neg 9435275 atan rotate
+neg exch neg exch translate
+ 3281 1752 a 2975 1763 a Fw(\000)k(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)-14 b Fv(\021)3281 1752 y
+grestore
+ 3281 1752
+a 3281 1752 a
+gsave
+ 3281 1752 a 3281 1752 a
+currentpoint currentpoint translate -7458716 neg 9435275 atan rotate
+neg exch neg exch translate
+ 3281 1752 a 3278
+1740 a
+currentpoint currentpoint translate 7458716 neg 9435275 atan rotate
+neg exch neg exch translate
+ 3278 1740 a -6 x FB(@)3300 1740 y Fr(1)3278 1752
+y
+grestore
+ 3278 1752 a 2203 1634 a
+gsave
+ 2203 1634 a 2203 1634 a
+currentpoint currentpoint translate -3729358 neg 0 atan rotate neg
+exch neg exch translate
+ 2203
+1634 a 2147 1644 a Fw(\000)-22 b(\000)-9 b(\000)g(\000)-22
+b Fv(\021)2203 1634 y
+grestore
+ 2203 1634 a 2203 1634 a
+gsave
+ 2203 1634
+a 2203 1634 a
+currentpoint currentpoint translate -3729358 neg 0 atan rotate neg
+exch neg exch translate
+ 2203 1634 a 2201 1622 a
+currentpoint currentpoint translate 3729358 neg 0 atan rotate neg exch
+neg exch translate
+ 2201 1622 a 10
+x FB(H)2236 1638 y Fu(n)2258 1632 y FB(q)2277 1638 y
+Fr(1)2201 1634 y
+grestore
+ 2201 1634 a 1974 1870 a
+gsave
+ 1974 1870 a
+1974 1870 a
+currentpoint currentpoint translate 3729358 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1974 1870 a 1812 1881 a Fw(\000)-13 b(\000)k(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)d
+Fv(\021)1974 1870 y
+grestore
+ 1974 1870 a 1974 1870 a
+gsave
+ 1974 1870
+a 1974 1870 a
+currentpoint currentpoint translate 3729358 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1974 1870 a 1978 1883 a
+currentpoint currentpoint translate -3729358 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1978 1883 a 31
+x FB(H)2013 1920 y Fu(n)2036 1914 y FF(\()p FB(q)2071
+1920 y Fr(4)2089 1914 y FF(\))1978 1870 y
+grestore
+ 1978 1870 a
+2203 1988 a
+gsave
+ 2203 1988 a 2203 1988 a
+currentpoint currentpoint translate 7458716 neg 0 atan rotate neg exch
+neg exch translate
+ 2203 1988 a 2033
+1999 a Fw(\000)-19 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-18 b Fv(\021)2203
+1988 y
+grestore
+ 2203 1988 a 2203 1988 a
+gsave
+ 2203 1988 a 2203 1988
+a
+currentpoint currentpoint translate 7458716 neg 0 atan rotate neg exch
+neg exch translate
+ 2203 1988 a 2205 2001 a
+currentpoint currentpoint translate -7458716 neg 0 atan rotate neg
+exch neg exch translate
+ 2205 2001 a 10 x FB(H)2240
+2017 y Fu(n)2262 2011 y FF(\()p FB(t)p FF(\))2205 1988
+y
+grestore
+ 2205 1988 a 1974 1752 a
+gsave
+ 1974 1752 a 1974 1752 a
+currentpoint currentpoint translate 7458716 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1974
+1752 a 1722 1763 a Fw(\000)h(\000)-9 b(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)-16 b Fv(\021)1974
+1752 y
+grestore
+ 1974 1752 a 1974 1752 a
+gsave
+ 1974 1752 a 1974 1752
+a
+currentpoint currentpoint translate 7458716 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1974 1752 a 1977 1740 a
+currentpoint currentpoint translate -7458716 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1977 1740 a 1852 1729 a FB(H)1887
+1735 y Fu(n)1909 1729 y FF(\()p FB(j)1942 1735 y Fr(1)1961
+1729 y FF(\))1977 1752 y
+grestore
+ 1977 1752 a 1974 2225 a
+gsave
+ 1974
+2225 a 1974 2225 a
+currentpoint currentpoint translate -7458716 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1974 2225 a 1716 2235 a Fw(\000)f(\000)-9
+b(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)-16
+b Fv(\021)1974 2225 y
+grestore
+ 1974 2225 a 1974 2225 a
+gsave
+ 1974 2225
+a 1974 2225 a
+currentpoint currentpoint translate -7458716 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1974 2225 a 1971 2237 a
+currentpoint currentpoint translate 7458716 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1971 2237 a 1847
+2268 a FB(H)1882 2274 y Fu(n)1904 2268 y FF(\()p FB(j)1937
+2274 y Fr(2)1956 2268 y FF(\))1971 2225 y
+grestore
+ 1971 2225 a
+3320 1988 a
+gsave
+ 3320 1988 a 3320 1988 a
+currentpoint currentpoint translate 0 neg 8204576 atan rotate neg exch
+neg exch translate
+ 3320 1988 a 3184
+1999 a Fw(\000)f(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)-15 b Fv(\021)3320 1988 y
+grestore
+ 3320 1988 a 3320 1988
+a
+gsave
+ 3320 1988 a 3320 1988 a
+currentpoint currentpoint translate 0 neg 8204576 atan rotate neg exch
+neg exch translate
+ 3320 1988 a 3300 1976 a
+currentpoint currentpoint translate 0 neg 8204576 atan rotate neg exch
+neg exch translate
+ 3300
+1976 a 3214 1966 a FB(H)3249 1972 y Fu(n)p Fs(\000)p
+Fr(1)3314 1966 y FF(\()p FB(i)3344 1972 y Fu(A)3371 1966
+y FF(\))3300 1988 y
+grestore
+ 3300 1988 a 1974 2106 a
+gsave
+ 1974 2106
+a 1974 2106 a
+currentpoint currentpoint translate -3729358 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1974 2106 a 1804 2117 a Fw(\000)h(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g
+(\000)c Fv(\021)1974 2106 y
+grestore
+ 1974 2106 a 1974 2106 a
+gsave
+ 1974
+2106 a 1974 2106 a
+currentpoint currentpoint translate -3729358 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1974 2106 a 1970 2094 a
+currentpoint currentpoint translate 3729358 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1970 2094
+a -10 x FB(H)2005 2090 y Fu(n)2027 2084 y FF(\()p FB(q)2062
+2090 y Fr(2)2080 2084 y FF(\))1970 2106 y
+grestore
+ 1970 2106 a
+2892 2106 a
+gsave
+ 2892 2106 a 2892 2106 a
+currentpoint currentpoint translate 3729358 neg 5332987 atan rotate
+neg exch neg exch translate
+ 2892 2106 a 2763
+2117 a Fw(\000)c(\000)-9 b(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g
+(\000)g(\000)-16 b Fv(\021)2892 2106 y
+grestore
+ 2892 2106 a 2463
+2225 a
+gsave
+ 2463 2225 a 2463 2225 a
+currentpoint currentpoint translate 0 neg -8204576 atan rotate neg
+exch neg exch translate
+ 2463 2225 a 2332 2235
+a Fw(\000)e(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-18
+b Fv(\021)2463 2225 y
+grestore
+ 2463 2225 a 2463 2225 a
+gsave
+ 2463 2225
+a 2463 2225 a
+currentpoint currentpoint translate 0 neg -8204576 atan rotate neg
+exch neg exch translate
+ 2463 2225 a 2436 2237 a
+currentpoint currentpoint translate 0 neg -8204576 atan rotate neg
+exch neg exch translate
+ 2436 2237 a 2353
+2227 a FB(P)2380 2233 y Fu(n)2402 2227 y FF(\()p FB(X)q(;)7
+b(A)p FF(\))2436 2225 y
+grestore
+ 2436 2225 a 2853 2343 a
+gsave
+ 2853
+2343 a 2853 2343 a
+currentpoint currentpoint translate -3729358 neg 4102288 atan rotate
+neg exch neg exch translate
+ 2853 2343 a 2749 2353 a Fw(\000)-22
+b(\000)-8 b(\000)f(\000)g(\000)g(\000)g(\000)g(\000)-21
+b Fv(\021)2853 2343 y
+grestore
+ 2853 2343 a 2853 2343 a
+gsave
+ 2853 2343
+a 2853 2343 a
+currentpoint currentpoint translate -3729358 neg 4102288 atan rotate
+neg exch neg exch translate
+ 2853 2343 a 2850 2330 a
+currentpoint currentpoint translate 3729358 neg 4102288 atan rotate
+neg exch neg exch translate
+ 2850 2330 a -10
+x FB(H)2885 2326 y Fu(n)2907 2320 y FF(\()p FB(i)2937
+2326 y Fu(X)2969 2320 y FF(\))2850 2343 y
+grestore
+ 2850 2343 a
+2203 2343 a
+gsave
+ 2203 2343 a 2203 2343 a
+currentpoint currentpoint translate 3729358 neg 0 atan rotate neg exch
+neg exch translate
+ 2203 2343 a 2151
+2353 a Fw(\000)f(\000)-9 b(\000)g(\000)-22 b Fv(\021)2203
+2343 y
+grestore
+ 2203 2343 a 2203 2343 a
+gsave
+ 2203 2343 a 2203 2343
+a
+currentpoint currentpoint translate 3729358 neg 0 atan rotate neg exch
+neg exch translate
+ 2203 2343 a 2205 2355 a
+currentpoint currentpoint translate -3729358 neg 0 atan rotate neg
+exch neg exch translate
+ 2205 2355 a 11 x FB(H)2240
+2372 y Fu(n)2262 2366 y FF(\()p FB(q)2297 2372 y Fr(3)2316
+2366 y FF(\))2205 2343 y
+grestore
+ 2205 2343 a 2593 2461 a
+gsave
+ 2593
+2461 a 2593 2461 a
+currentpoint currentpoint translate 0 neg -12306864 atan rotate neg
+exch neg exch translate
+ 2593 2461 a 2361 2471 a Fw(\000)-14
+b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f
+(\000)g(\000)g(\000)g(\000)g(\000)c Fv(\021)2593 2461
+y
+grestore
+ 2593 2461 a 2593 2461 a
+gsave
+ 2593 2461 a 2593 2461 a
+currentpoint currentpoint translate 0 neg -12306864 atan rotate neg
+exch neg exch translate
+ 2593
+2461 a 2550 2448 a
+currentpoint currentpoint translate 0 neg -12306864 atan rotate neg
+exch neg exch translate
+ 2550 2448 a 2485 2479 a FB(H)2520
+2485 y Fu(n)2542 2479 y FF(\()p FB(k)2580 2485 y Fr(2)2599
+2479 y FF(\))2550 2461 y
+grestore
+ 2550 2461 a 3281 2225 a
+gsave
+ 3281
+2225 a 3281 2225 a
+currentpoint currentpoint translate 7458716 neg 9435275 atan rotate
+neg exch neg exch translate
+ 3281 2225 a 2981 2235 a Fw(\000)e(\000)-9
+b(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h
+(\000)f(\000)g(\000)-14 b Fv(\021)3281 2225 y
+grestore
+ 3281 2225
+a 3281 2225 a
+gsave
+ 3281 2225 a 3281 2225 a
+currentpoint currentpoint translate 7458716 neg 9435275 atan rotate
+neg exch neg exch translate
+ 3281 2225 a 3284
+2237 a
+currentpoint currentpoint translate -7458716 neg 9435275 atan rotate
+neg exch neg exch translate
+ 3284 2237 a 29 x FB(@)3306 2272 y Fr(2)3284 2225
+y
+grestore
+ 3284 2225 a 2593 2343 a
+gsave
+ 2593 2343 a 2593 2343 a
+currentpoint currentpoint translate 3729358 neg -12306864 atan rotate
+neg exch neg exch translate
+ 2593
+2343 a 2312 2353 a Fw(\000)-19 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-18
+b Fv(\021)2593 2343 y
+grestore
+ 2593 2343 a 2593 2343 a
+gsave
+ 2593 2343
+a 2593 2343 a
+currentpoint currentpoint translate 3729358 neg -12306864 atan rotate
+neg exch neg exch translate
+ 2593 2343 a 2600 2330 a
+currentpoint currentpoint translate -3729358 neg -12306864 atan rotate
+neg exch neg exch translate
+ 2600 2330 a 2458
+2361 a FB(H)2493 2367 y Fu(n)2515 2361 y FF(\()p FB(p)2552
+2367 y Fu(X)2584 2361 y FF(\))2600 2343 y
+grestore
+ 2600 2343 a
+2015 1526 a FB(H)2050 1532 y Fu(n)2072 1526 y FF(\()p
+FB(X)2125 1509 y Fr(+)2163 1526 y Fw([)9 b FH(T)p FB(A)2264
+1509 y Fr(+)2291 1526 y FB(;)e(X)2347 1509 y Fr(+)2375
+1526 y FF(\))462 b FB(H)2888 1532 y Fu(n)2911 1526 y
+FF(\()p FH(T)p FB(A)2991 1509 y Fr(+)3019 1526 y FB(;)7
+b(A)3069 1509 y Fr(+)3096 1526 y FF(\))2090 1763 y FB(H)2125
+1769 y Fu(n)2147 1763 y FF(\()p FH(S)p FB(A)2221 1745
+y Fr(+)2249 1763 y FB(;)g(P)f FF(\))655 b Fw(\003)1512
+1999 y FB(H)1547 2005 y Fu(n)1569 1999 y FF(\()p FB(X)1622
+1982 y Fr(+)1659 1999 y Fw([)9 b FH(T)p FB(A)1760 1982
+y Fr(+)1788 1999 y FB(;)e(P)f FF(\))1123 b FB(H)3014
+2005 y Fu(n)p Fs(\000)p Fr(1)3079 1999 y FF(\()p FB(A)p
+FF(\))318 b FB(H)3495 2005 y Fu(n)p Fs(\000)p Fr(1)3559
+1999 y FF(\()p FB(A)3606 1982 y Fr(+)3634 1999 y FB(;)7
+b(P)f FF(\))2062 2235 y FB(H)2097 2241 y Fu(n)2119 2235
+y FF(\()p FB(X)2172 2218 y Fr(+)2200 2235 y FB(=)n(A)2250
+2218 y Fr(+)2277 2235 y FB(;)h(P)f FF(\))291 b FB(H)2671
+2241 y Fu(n)2693 2235 y FF(\()p FB(X)q(;)7 b(A)p FF(\))2002
+2471 y FB(H)2037 2477 y Fu(n)2059 2471 y FF(\()p FB(X)2112
+2454 y Fr(+)2149 2471 y Fw([)i FH(T)p FB(A)2250 2454
+y Fr(+)2278 2471 y FB(;)e FH(T)p FB(A)2361 2454 y Fr(+)2388
+2471 y FF(\))463 b FB(H)2902 2477 y Fu(n)2924 2471 y
+FF(\()p FB(X)2977 2454 y Fr(+)3005 2471 y FB(;)7 b(A)3055
+2454 y Fr(+)3082 2471 y FF(\))1491 2502 y
+grestore
+ 1491 2502 a
+954 2770 a FF(62)p eop
+%%Page: 63 8
+63 62 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y FH(J.)16 b(McCleary)p
+FF(,)d FC(A)i(User's)f(to)h(Sp)n(e)n(ctr)n(al)f(Se)n(quenc)n(es)p
+FF(,)h(page)f(13.)-79 133 y Fr(1)62 b Fx($$)-79 183 y
+Fr(2)g Fx(\\dotted)-79 232 y Fr(3)g Fx(\\grid=7mm)-79
+282 y Fr(4)g Fx(\\yscale=2)-79 332 y Fr(5)g Fx(\\Diagram)-79
+382 y Fr(6)g Fx(&&&&&&&&&x)o(z&)o(&&&)o(xy)o(z&&)o(&&x)o(y^)o(2z&)o(&&)
+o(&xy)o(^3)o(z&\\)o(\\)-79 432 y Fr(7)g Fx(\\\\)-79 482
+y Fr(8)g Fx(z&&&&zy&&&)o(&z)o(y^2)o(&&)o(&&z)o(y^3)o(\\\\)-79
+531 y Fr(9)g Fx(\\dy{-.2})-95 581 y Fr(10)f Fx(&&&&&&&&&x)o(&&)o(&&x)o
+(y&)o(&&&)o(xy^)o(2&)o(&&&)o(xy)o(^3\\)o(\\)-95 631 y
+Fr(11)g Fx(\\\\)-95 681 y Fr(12)g Fx(&&&&y&&&&y)o(^2)o(&&&)o(&y)o(^3\\)
+o(\\)-95 731 y Fr(13)g Fx(\\Modify)-95 780 y Fr(14)g
+Fx(\\Line)18 b(\(0,0\))f(\(4,0\))h(\\dt{1pt})-95 830
+y Fr(15)61 b Fx(\\Line)18 b(\(4,0\))f(\(8,0\))-95 880
+y Fr(16)61 b Fx(\\Line)18 b(\(8,0\))f(\(12,0\))-95 930
+y Fr(17)61 b Fx(\\Line)18 b(\(12,0\))f(\(22.5,0\))-95
+980 y Fr(18)61 b Fx(\\Line)18 b(\(0,0\))f(\(0,3\))h(\\dt{1pt})-95
+1029 y Fr(19)61 b Fx(\\Line)18 b(\(0,3\))f(\(0,5.2\))-95
+1079 y Fr(20)61 b Fx(\\To)18 b(\(9,2\))g(\(12,0\))-95
+1129 y Fr(21)61 b Fx(\\To)18 b(\(9,5\))g(\(12,3\))-95
+1179 y Fr(22)61 b Fx(\\endDiagra)o(m)-95 1229 y Fr(23)g
+Fx($$)772 1431 y FB(xz)277 b(xy)q(z)257 b(xy)1458 1413
+y Fr(2)1477 1431 y FB(z)248 b(xy)1789 1413 y Fr(3)1808
+1431 y FB(z)40 1761 y(z)300 b(z)r(y)281 b(z)r(y)723 1744
+y Fr(2)1011 1761 y FB(z)r(y)1053 1744 y Fr(3)782 1960
+y FB(x)296 b(xy)278 b(xy)1469 1943 y Fr(2)1754 1960 y
+FB(xy)1799 1943 y Fr(3)370 2290 y FB(y)301 b(y)712 2273
+y Fr(2)1022 2290 y FB(y)1043 2273 y Fr(3)40 1431 y Fw(\017)61
+b(\017)h(\017)g(\017)f(\017)h(\017)g(\017)g(\017)f(\017)145
+b(\017)61 b(\017)h(\017)144 b(\017)62 b(\017)g(\017)144
+b(\017)62 b(\017)f(\017)145 b(\017)40 1596 y(\017)61
+b(\017)h(\017)g(\017)f(\017)h(\017)g(\017)g(\017)f(\017)h(\017)g(\017)f
+(\017)h(\017)g(\017)f(\017)h(\017)g(\017)f(\017)h(\017)g(\017)f(\017)h
+(\017)g(\017)122 1761 y(\017)g(\017)g(\017)144 b(\017)62
+b(\017)g(\017)144 b(\017)62 b(\017)f(\017)145 b(\017)61
+b(\017)h(\017)g(\017)f(\017)h(\017)g(\017)f(\017)h(\017)g(\017)40
+1960 y(\017)f(\017)h(\017)g(\017)f(\017)h(\017)g(\017)g(\017)f(\017)145
+b(\017)61 b(\017)h(\017)144 b(\017)62 b(\017)g(\017)144
+b(\017)62 b(\017)f(\017)145 b(\017)40 2125 y(\017)61
+b(\017)h(\017)g(\017)f(\017)h(\017)g(\017)g(\017)f(\017)h(\017)g(\017)f
+(\017)h(\017)g(\017)f(\017)h(\017)g(\017)f(\017)h(\017)g(\017)f(\017)h
+(\017)g(\017)40 2290 y(\017)f(\017)h(\017)g(\017)144
+b(\017)62 b(\017)g(\017)144 b(\017)62 b(\017)f(\017)145
+b(\017)61 b(\017)h(\017)g(\017)f(\017)h(\017)g(\017)f(\017)h(\017)g
+(\017)216 2280 y
+gsave
+ 216 2280 a 216 2280 a
+currentpoint currentpoint translate 0 neg 5221100 atan rotate neg exch
+neg exch translate
+ 216 2280 a 46
+2290 a Fw(\000)-18 b(\000)-8 b(\000)f(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)-17 b(\000)216 2280
+y
+grestore
+ 216 2280 a 546 2280 a
+gsave
+ 546 2280 a 546 2280 a
+currentpoint currentpoint translate 0 neg 5221100 atan rotate neg exch
+neg exch translate
+ 546 2280
+a 400 2290 a Fw(\000)-22 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)-22 b(\000)546 2280
+y
+grestore
+ 546 2280 a 877 2280 a
+gsave
+ 877 2280 a 877 2280 a
+currentpoint currentpoint translate 0 neg 5221100 atan rotate neg exch
+neg exch translate
+ 877 2280
+a 740 2290 a Fw(\000)-15 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)-15 b(\000)877 2280 y
+grestore
+ 877
+2280 a 1476 2280 a
+gsave
+ 1476 2280 a 1476 2280 a
+currentpoint currentpoint translate 0 neg 13705387 atan rotate neg
+exch neg exch translate
+ 1476 2280
+a 1071 2290 a Fw(\000)-21 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-20
+b(\000)1476 2280 y
+grestore
+ 1476 2280 a 50 2016 a
+gsave
+ 50 2016 a 50
+2016 a
+currentpoint currentpoint translate 8353752 neg 0 atan rotate neg exch
+neg exch translate
+ 50 2016 a -219 2026 a Fw(\000)f(\000)-9 b(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)-21 b(\000)50
+2016 y
+grestore
+ 50 2016 a 50 1569 a
+gsave
+ 50 1569 a 50 1569 a
+currentpoint currentpoint translate 5743202 neg 0 atan rotate neg exch
+neg exch translate
+ 50 1569
+a -116 1579 a Fw(\000)-13 b(\000)k(\000)g(\000)g(\000)g(\000)g(\000)h
+(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)d(\000)50
+1569 y
+grestore
+ 50 1569 a 918 2115 a
+gsave
+ 918 2115 a 918 2115 a
+currentpoint currentpoint translate -5221100 neg 3915825 atan rotate
+neg exch neg exch translate
+ 918
+2115 a 733 2125 a Fw(\000)c(\000)-9 b(\000)h(\000)f(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-14
+b Fv(\021)918 2115 y
+grestore
+ 918 2115 a 918 1586 a
+gsave
+ 918 1586 a
+918 1586 a
+currentpoint currentpoint translate -5221100 neg 3915825 atan rotate
+neg exch neg exch translate
+ 918 1586 a 733 1596 a Fw(\000)e(\000)-9 b(\000)h(\000)f
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+-14 b Fv(\021)918 1586 y
+grestore
+ 918 1586 a 954 2770 a FF(63)p
+eop
+%%Page: 64 9
+64 63 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y FH(J.)16 b(McCleary)p
+FF(,)d FC(A)i(User's)f(to)h(Sp)n(e)n(ctr)n(al)f(Se)n(quenc)n(es)p
+FF(,)h(page)f(346.)-79 133 y Fr(1)62 b Fx($$)-79 183
+y Fr(2)g Fx(\\cellpush+)o(=5)o(pt)-79 232 y Fr(3)g Fx(\\cellwidth)o(+=)
+o(2mm)-79 282 y Fr(4)g Fx(\\Dg)-79 332 y Fr(5)g Fx(&&_{N+t'}X)o(_p)36
+b(&)19 b(\\rTo)f(^{g_{p+q})o(})f(&)i(_N)g(X_{p+q})36
+b(\\\\)-79 382 y Fr(6)62 b Fx(&&)19 b(\\dFillcel)o(l{\\)o(;\\)o(cdo)o
+(ts\\)o(;\\)o(rig)o(ht)o(arr)o(ow)o(fil)o(l})d(&)-79
+432 y Fr(7)690 b Fx(&)19 b(\\dFillcel)o(l{\\)o(;\\)o(cdo)o(ts\\)o(;\\)o
+(rig)o(ht)o(arr)o(owf)o(il)o(l})d(\\\\)-79 482 y Fr(8)964
+b Fx(\\\\)-79 531 y Fr(9)62 b Fx(&&)19 b(_{N+t'}X_)o(1)e(&)i(\\rTo)f
+(^{g_{q+1})o(})f(&)i(_N)g(X_{q+1})36 b(\\\\)-95 581 y
+Fr(10)61 b Fx(&&)19 b(\\dTo)136 b(&)333 b(&)19 b(\\dTo)155
+b(\\\\)-95 631 y Fr(11)61 b Fx(S^{N+t+t'})o(X)16 b(\\aTo)i(\(2,5\))g
+(^{f_p})f(\\tx{.7})g(\\hx{5pt})g(&)i(\\rTo)f(^f)h(&)-95
+681 y Fr(12)120 b Fx(S^{N+t'}X)36 b(&)19 b(\\rTo)f(^{g_q})96
+b(&)19 b(_N)g(X_q)116 b(\\\\)-95 731 y Fr(13)963 b Fx(\\\\)-95
+780 y Fr(14)61 b Fx(&&)235 b(&)333 b(&)19 b(\\dFillcel)o(l{\\)o(ri)o
+(ght)o(arr)o(ow)o(fil)o(l\\)o(;\\c)o(dot)o(s\\)o(;\\r)o(ig)o(hta)o(rr)o
+(owf)o(ill)o(})d(\\\\)-95 830 y Fr(15)963 b Fx(\\\\)-95
+880 y Fr(16)61 b Fx(&&)235 b(&)333 b(&)19 b(_N)g(X_1)116
+b(\\\\)-95 930 y Fr(17)61 b Fx(&&)235 b(&)333 b(&)19
+b(\\dTo)155 b(\\\\)-95 980 y Fr(18)61 b Fx(&&)235 b(&)333
+b(&)19 b(S^N)f(X)i(\\bTo)e(\(-2,6\))f(<g)i(\\hx{.2})e(\\\\)-95
+1029 y Fr(19)61 b Fx(\\endDg)-95 1079 y Fr(20)g Fx($$)1161
+1214 y
+gsave
+ 1161 1214 a 1161 1214 a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1161 1214 a 1103 1224
+a Fw(\000)-16 b(\000)-10 b(\000)h(\000)-16 b Fv(\021)1161
+1214 y
+grestore
+ 1161 1214 a 1161 1214 a
+gsave
+ 1161 1214 a 1161 1214
+a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1161 1214 a 1163 1201 a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1163 1201 a 1128 1193 a Fu(g)1144
+1197 y Fe(p)p Fp(+)p Fe(q)1163 1214 y
+grestore
+ 1163 1214 a 1007
+1355 a
+gsave
+ 1007 1355 a 1007 1355 a
+currentpoint currentpoint translate -4475232 neg 0 atan rotate neg
+exch neg exch translate
+ 1007 1355 a 928 1366 a
+Fw(\001)7 b(\001)g(\001)17 b(\000)-23 b(\000)-9 b(\000)g(\000)-22
+b Fv(\021)1007 1355 y
+grestore
+ 1007 1355 a 1314 1355 a
+gsave
+ 1314 1355
+a 1314 1355 a
+currentpoint currentpoint translate -4475232 neg 0 atan rotate neg
+exch neg exch translate
+ 1314 1355 a 1236 1366 a Fw(\001)7 b(\001)g(\001)16
+b(\000)-23 b(\000)-8 b(\000)f(\000)-22 b Fv(\021)1314
+1355 y
+grestore
+ 1314 1355 a 1161 1497 a
+gsave
+ 1161 1497 a 1161 1497
+a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1161 1497 a 1103 1507 a Fw(\000)-16 b(\000)-10 b(\000)h(\000)-15
+b Fv(\021)1161 1497 y
+grestore
+ 1161 1497 a 1161 1497 a
+gsave
+ 1161 1497
+a 1161 1497 a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1161 1497 a 1163 1485 a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1163 1485 a 1129
+1476 a Fu(g)1145 1480 y Fe(q)q Fp(+1)1163 1497 y
+grestore
+ 1163
+1497 a 1007 1591 a
+gsave
+ 1007 1591 a 1007 1591 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1007 1591
+a 961 1602 a Fw(\000)i(\000)h Fv(\021)1007 1591 y
+grestore
+ 1007
+1591 a 1314 1591 a
+gsave
+ 1314 1591 a 1314 1591 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1314 1591
+a 1271 1602 a Fw(\000)-20 b(\000)-8 b(\000)-19 b Fv(\021)1314
+1591 y
+grestore
+ 1314 1591 a 864 1450 a
+gsave
+ 864 1450 a 864 1450 a
+currentpoint currentpoint translate 7458720 neg 5151710 atan rotate
+neg exch neg exch translate
+ 864
+1450 a 644 1460 a Fw(\000)-12 b(\000)j(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g
+(\000)g(\000)e Fv(\021)864 1450 y
+grestore
+ 864 1450 a 864 1450
+a
+gsave
+ 864 1450 a 864 1450 a
+currentpoint currentpoint translate 7458720 neg 5151710 atan rotate
+neg exch neg exch translate
+ 864 1450 a 869 1437 a
+currentpoint currentpoint translate -7458720 neg 5151710 atan rotate
+neg exch neg exch translate
+ 869 1437
+a 835 1429 a Fu(f)851 1433 y Fe(p)869 1450 y
+grestore
+ 869 1450
+a 836 1686 a
+gsave
+ 836 1686 a 836 1686 a
+currentpoint currentpoint translate 0 neg 5405808 atan rotate neg exch
+neg exch translate
+ 836 1686 a 785 1696
+a Fw(\000)-16 b(\000)-9 b(\000)g(\000)-16 b Fv(\021)836
+1686 y
+grestore
+ 836 1686 a 836 1686 a
+gsave
+ 836 1686 a 836 1686 a
+currentpoint currentpoint translate 0 neg 5405808 atan rotate neg exch
+neg exch translate
+ 836
+1686 a 845 1673 a
+currentpoint currentpoint translate 0 neg 5405808 atan rotate neg exch
+neg exch translate
+ 845 1673 a 835 1667 a Fu(f)845 1686
+y
+grestore
+ 845 1686 a 1161 1686 a
+gsave
+ 1161 1686 a 1161 1686 a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1161
+1686 a 1109 1696 a Fw(\000)c(\000)-10 b(\000)h(\000)h(\000)-20
+b Fv(\021)1161 1686 y
+grestore
+ 1161 1686 a 1161 1686 a
+gsave
+ 1161 1686
+a 1161 1686 a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1161 1686 a 1176 1673 a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1176 1673 a 1160
+1665 a Fu(g)1176 1669 y Fe(q)1176 1686 y
+grestore
+ 1176 1686 a
+1314 1875 a
+gsave
+ 1314 1875 a 1314 1875 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 1314 1875 a 1177
+1885 a Fw(\000)k(\000)-9 b(\000)-16 b Fv(\021)18 b Fw(\001)7
+b(\001)g(\001)17 b(\000)-16 b(\000)-9 b(\000)-15 b Fv(\021)1314
+1875 y
+grestore
+ 1314 1875 a 1314 2158 a
+gsave
+ 1314 2158 a 1314 2158
+a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1314 2158 a 1266 2169 a Fw(\000)-22 b(\000)-8 b(\000)-20
+b Fv(\021)1314 2158 y
+grestore
+ 1314 2158 a 1146 1969 a
+gsave
+ 1146 1969
+a 1146 1969 a
+currentpoint currentpoint translate -8950464 neg 4398909 atan rotate
+neg exch neg exch translate
+ 1146 1969 a 871 1980 a Fw(\000)i(\000)-9
+b(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+-16 b Fv(\021)1146 1969 y
+grestore
+ 1146 1969 a 1146 1969 a
+gsave
+ 1146
+1969 a 1146 1969 a
+currentpoint currentpoint translate -8950464 neg 4398909 atan rotate
+neg exch neg exch translate
+ 1146 1969 a 1137 1982 a
+currentpoint currentpoint translate 8950464 neg 4398909 atan rotate
+neg exch neg exch translate
+ 1137 1982
+a 1120 1994 a Fu(g)1137 1969 y
+grestore
+ 1137 1969 a 940 1230 a
+Fu(N)s Fr(+)p Fu(t)1007 1222 y Ft(0)1020 1224 y FB(X)1054
+1230 y Fu(p)180 b(N)1283 1224 y FB(X)1317 1230 y Fu(p)p
+Fr(+)p Fu(q)940 1514 y(N)s Fr(+)p Fu(t)1007 1505 y Ft(0)1021
+1507 y FB(X)1055 1513 y Fr(1)1251 1514 y Fu(N)1283 1507
+y FB(X)1317 1513 y Fu(q)q Fr(+1)572 1696 y FB(S)599 1679
+y Fu(N)s Fr(+)p Fu(t)p Fr(+)p Fu(t)704 1667 y Ft(0)719
+1696 y FB(X)h(S)961 1679 y Fu(N)s Fr(+)p Fu(t)1028 1667
+y Ft(0)1042 1696 y FB(X)1272 1703 y Fu(N)1304 1696 y
+FB(X)1338 1702 y Fu(q)1272 2081 y(N)1304 2074 y FB(X)1338
+2080 y Fr(1)1266 2263 y FB(S)1293 2246 y Fu(N)1325 2263
+y FB(X)954 2770 y FF(64)p eop
+%%Page: 65 10
+65 64 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y FH(P)l(.)16 b(J.)g(Hilton)d(and)j
+(U.)f(Stamm)o(bac)o(h)p FF(,)d FC(A)i(Course)h(in)g(Homolo)n(gic)n(al)f
+(A)o(lgebr)n(a)p FF(,)f(page)h(149.)-79 133 y Fr(1)62
+b Fx($$)-79 183 y Fr(2)g Fx(\\let~\\tild)o(e)-79 232
+y Fr(3)g Fx(\\cellwidth)o(+=)o(17m)o(m)16 b(\\columndist)o(+=)o(12m)o
+(m)-79 282 y Fr(4)62 b Fx(\\gravitate)o(le)o(ft)-79 332
+y Fr(5)g Fx(\\Dg)-79 382 y Fr(6)101 b Fx(&)118 b(&)19
+b(K)254 b(&)20 b(\\rMono)95 b(&&)19 b(E_1^\\alpha)o(&)e(\\rEpi^{\\)o
+(eta)o('}&)o(&)f(A')117 b(\\\\)-79 432 y Fr(7)101 b Fx(&)19
+b(\\ldTo&)292 b(&)235 b(&&)215 b(&)118 b(&)19 b(\\ruBar)213
+b(\\\\)-79 482 y Fr(8)62 b Fx(~K&)117 b(&)19 b(\\dBar\\rMo)o(no\\)o(br)
+o(&)e(~E_1^\\al)o(pha)o(&&)f(\\dTo\\rEpi^)o({~\\)o(et)o(a'})o(\\b)o(r&)
+-79 531 y Fr(9)1102 b Fx(A')430 b(\\\\)-95 581 y Fr(10)61
+b Fx(\\dBar&)c(&)293 b(&)235 b(&&)215 b(&)118 b(&)78
+b(&)19 b(\\dTo>\\alp)o(ha)d(\\\\)-95 631 y Fr(11)100
+b Fx(&)118 b(&)19 b(K)254 b(&)20 b(\\rMono\\d)o(To\\)o(br&)o(&)c
+(E_1\\ax{2mm})o(&)g(\\rEpi\\dTo\\b)o(r&)o(&)h(A)97 b(\\\\)-95
+681 y Fr(12)j Fx(&)19 b(\\ldTo&)292 b(&)118 b(&)19 b(\\ldTo&)213
+b(&)118 b(&)19 b(\\ldBar)213 b(\\\\)-95 731 y Fr(13)61
+b Fx(~K&)117 b(&)19 b(\\rMono)154 b(&)20 b(~E_1)e(&)h(\\rEpi_{~\\)o
+(eta)o(}&)55 b(&)20 b(A)450 b(\\\\)-95 780 y Fr(14)61
+b Fx(\\endDg)-95 830 y Fr(15)g Fx($$)931 969 y
+gsave
+ 931 969
+a 931 969 a
+currentpoint currentpoint translate 0 neg 6716225 atan rotate neg exch
+neg exch translate
+ 931 969 a 746 980 a Fv(\016)-16 b Fw(\000)-9
+b(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)-19 b Fv(\021)931 969 y
+grestore
+ 931 969 a
+1346 969 a
+gsave
+ 1346 969 a 1346 969 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1346 969 a 1181 980
+a Fw(\000)c(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)h(\000)f(\000)g(\000)g(\000)-22 b Fv(\021)-30 b(\014)1346
+969 y
+grestore
+ 1346 969 a 1346 969 a
+gsave
+ 1346 969 a 1346 969 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1346
+969 a 1349 957 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1349 957 a 1334 951 a Fu(\021)1352 939
+y Ft(0)1349 969 y
+grestore
+ 1349 969 a 559 1064 a
+gsave
+ 559 1064 a 559
+1064 a
+currentpoint currentpoint translate -2983488 neg -5034634 atan rotate
+neg exch neg exch translate
+ 559 1064 a 402 1074 a Fw(\000)-12 b(\000)j(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)d Fv(\021)559
+1064 y
+grestore
+ 559 1064 a 1377 1064 a
+gsave
+ 1377 1064 a 1377 1064 a
+currentpoint currentpoint translate 2983488 neg 5407569 atan rotate
+neg exch neg exch translate
+
+1377 1064 a 1214 1074 a FF(=)-23 b(=)-9 b(=)h(=)f(=)g(=)g(=)g(=)g(=)g
+(=)g(=)g(=)g(=)g(=)-22 b(=)1377 1064 y
+grestore
+ 1377 1064 a 719
+1158 a
+gsave
+ 719 1158 a 719 1158 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 719 1158 a 548 1169 a FF(=)i(=)-9
+b(=)g(=)g(=)g(=)g(=)g(=)g(=)g(=)g(=)g(=)h(=)f(=)-20 b(=)719
+1158 y
+grestore
+ 719 1158 a 601 1158 a
+gsave
+ 601 1158 a 601 1158 a
+currentpoint currentpoint translate 0 neg 6343290 atan rotate neg exch
+neg exch translate
+ 601
+1158 a 400 1158 a
+1 setgray
+ 400 1158 a 427 1169 338 21 v 601 1158
+a
+grestore
+ 601 1158 a 601 1158 a
+gsave
+ 601 1158 a 601 1158 a
+currentpoint currentpoint translate 0 neg 6343290 atan rotate neg exch
+neg exch translate
+ 601 1158
+a 427 1169 a Fv(\016)k Fw(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)h
+(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-20 b
+Fv(\021)601 1158 y
+grestore
+ 601 1158 a 1144 1158 a
+gsave
+ 1144 1158 a
+1144 1158 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 1144 1158 a 984 1169 a Fw(\000)h(\000)-9
+b(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)-18 b Fv(\021)1144 1158 y
+grestore
+ 1144 1158 a 1003 1158
+a
+gsave
+ 1003 1158 a 1003 1158 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1003 1158 a 801 1158 a
+1 setgray
+ 801
+1158 a 838 1169 338 21 v 1003 1158 a
+grestore
+ 1003 1158 a 1003
+1158 a
+gsave
+ 1003 1158 a 1003 1158 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1003 1158 a 838 1169 a
+Fw(\000)-23 b(\000)-8 b(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)-22 b Fv(\021)-30
+b(\014)1003 1158 y
+grestore
+ 1003 1158 a 1003 1158 a
+gsave
+ 1003 1158
+a 1003 1158 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1003 1158 a 1006 1146 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1006 1146 a 994
+1140 a Fr(~)-20 b Fu(\021)1009 1128 y Ft(0)1007 1158
+y
+grestore
+ 1007 1158 a 400 1347 a
+gsave
+ 400 1347 a 400 1347 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 400 1347
+a 229 1358 a FF(=)-13 b(=)k(=)g(=)g(=)g(=)g(=)g(=)g(=)g(=)g(=)g(=)g(=)c
+(=)400 1347 y
+grestore
+ 400 1347 a 1548 1158 a
+gsave
+ 1548 1158 a 1548
+1158 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 1548 1158 a 1378 1169 a Fw(\000)f(\000)-9 b(\000)g(\000)g(\000)h
+(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)c
+Fv(\021)1548 1158 y
+grestore
+ 1548 1158 a 1548 1158 a
+gsave
+ 1548 1158
+a 1548 1158 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 1548 1158 a 1544 1146 a
+currentpoint currentpoint translate 5966976 neg 0 atan rotate neg exch
+neg exch translate
+ 1544 1146 a 10
+x Fu(\013)1544 1158 y
+grestore
+ 1544 1158 a 931 1347 a
+gsave
+ 931 1347
+a 931 1347 a
+currentpoint currentpoint translate 0 neg 6716225 atan rotate neg exch
+neg exch translate
+ 931 1347 a 746 1358 a Fv(\016)f Fw(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)-17 b Fv(\021)931 1347 y
+grestore
+ 931 1347
+a 801 1347 a
+gsave
+ 801 1347 a 801 1347 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 801 1347 a 612 1347
+a
+1 setgray
+ 612 1347 a 641 1358 313 21 v 801 1347 a
+grestore
+ 801 1347 a
+801 1347 a
+gsave
+ 801 1347 a 801 1347 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 801 1347 a 641 1358
+a Fw(\000)-12 b(\000)j(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)e Fv(\021)801 1347 y
+grestore
+ 801 1347 a 1346
+1347 a
+gsave
+ 1346 1347 a 1346 1347 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1346 1347 a 1177 1358
+a Fw(\000)-18 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)h(\000)f(\000)g(\000)g(\000)g(\000)-17 b Fv(\021)-30
+b(\014)1346 1347 y
+grestore
+ 1346 1347 a 1206 1347 a
+gsave
+ 1206 1347
+a 1206 1347 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 1206 1347 a 1017 1347 a
+1 setgray
+ 1017 1347 a 1035
+1358 333 21 v 1206 1347 a
+grestore
+ 1206 1347 a 1206 1347 a
+gsave
+ 1206
+1347 a 1206 1347 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 1206 1347 a 1035 1358 a Fw(\000)-13
+b(\000)k(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)d Fv(\021)1206 1347 y
+grestore
+ 1206 1347 a 559 1442
+a
+gsave
+ 559 1442 a 559 1442 a
+currentpoint currentpoint translate -2983488 neg -5034634 atan rotate
+neg exch neg exch translate
+ 559 1442 a 402 1452 a Fw(\000)g(\000)j(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)d
+Fv(\021)559 1442 y
+grestore
+ 559 1442 a 973 1442 a
+gsave
+ 973 1442 a 973
+1442 a
+currentpoint currentpoint translate -2983488 neg -5407569 atan rotate
+neg exch neg exch translate
+ 973 1442 a 814 1452 a Fw(\000)-21 b(\000)-9 b(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-20
+b Fv(\021)973 1442 y
+grestore
+ 973 1442 a 1377 1442 a
+gsave
+ 1377 1442
+a 1377 1442 a
+currentpoint currentpoint translate -2983488 neg -5407569 atan rotate
+neg exch neg exch translate
+ 1377 1442 a 1207 1452 a FF(=)j(=)-9 b(=)g(=)g(=)g(=)g(=)g
+(=)g(=)g(=)g(=)h(=)f(=)g(=)-17 b(=)1377 1442 y
+grestore
+ 1377 1442
+a 601 1536 a
+gsave
+ 601 1536 a 601 1536 a
+currentpoint currentpoint translate 0 neg 6343290 atan rotate neg exch
+neg exch translate
+ 601 1536 a 427 1547
+a Fv(\016)j Fw(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)h(\000)f(\000)g(\000)g(\000)-18 b Fv(\021)601
+1536 y
+grestore
+ 601 1536 a 1003 1536 a
+gsave
+ 1003 1536 a 1003 1536 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+
+1003 1536 a 834 1547 a Fw(\000)h(\000)-9 b(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-17
+b Fv(\021)-30 b(\014)1003 1536 y
+grestore
+ 1003 1536 a 1003 1536
+a
+gsave
+ 1003 1536 a 1003 1536 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1003 1536 a 1008 1549 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1008
+1549 a 1002 1568 a Fr(~)-20 b Fu(\021)1008 1536 y
+grestore
+ 1008
+1536 a 699 980 a FB(K)382 b(E)1149 963 y Fu(\013)1147
+990 y Fr(1)1527 980 y FB(A)1558 963 y Fs(0)392 1158 y
+FF(~)381 1169 y FB(K)783 1158 y FF(~)773 1169 y FB(E)806
+1152 y Fu(\013)804 1179 y Fr(1)1184 1169 y FB(A)1215
+1152 y Fs(0)699 1358 y FB(K)j(E)1150 1364 y Fr(1)1532
+1358 y FB(A)392 1536 y FF(~)381 1547 y FB(K)786 1536
+y FF(~)777 1547 y FB(E)808 1553 y Fr(1)1190 1547 y FB(A)954
+2770 y FF(65)p eop
+%%Page: 66 11
+66 65 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y FH(George)15 b(W.)h(Whitehead)p
+FF(,)11 b FC(Elements)k(of)g(Homotopy)g(The)n(ory)p FF(,)e(page)h(650.)
+-79 133 y Fr(1)62 b Fx($$)-79 183 y Fr(2)g Fx(\\cellpush=)o(4p)o(t)-79
+232 y Fr(3)g Fx(\\let\\label)o(st)o(yle)o(\\t)o(ext)o(sty)o(le)-79
+282 y Fr(4)g Fx(\\lpad=1in)16 b(\\bpad=1cm)-79 332 y
+Fr(5)62 b Fx(\\Graph{4in)o(,4)o(}{3)o(.5)o(in,)o(1in)o(})-79
+382 y Fr(6)g Fx(\\To)18 b(\(0,0\))g(\(3.3,0\))76 b(\\hd{p})-79
+432 y Fr(7)62 b Fx(\\To)18 b(\(0,0\))g(\(0,3.5\))76 b(\\hd{q})-79
+482 y Fr(8)62 b Fx(\\Line)18 b(\(2,0\))f(\(2,3.25\))g(\\Line)h(\(0,1\))
+f(\(3.2,1\))g(\\Dot)h(\(2,1\))-79 531 y Fr(9)62 b Fx(\\Dot)18
+b(\(0,0\))-95 581 y Fr(10)61 b Fx(\045)-95 631 y Fr(11)g
+Fx(\\Dot)18 b(\(2,0\))g(\\Dot)g(\(2.25,0\))e(\\Dot)i(\(2.5,0\))f(\\Dot)
+h(\(2.75,0\))f(\\Dot)h(\(3,0\))-95 681 y Fr(12)61 b Fx(\045)-95
+731 y Fr(13)g Fx(\\Dot)18 b(\(0,1\))g(\\Dot)g(\(0,1.25\))e(\\Dot)i
+(\(0,1.5\))f(\\Dot)h(\(0,1.75\))-95 780 y Fr(14)61 b
+Fx(\\Dot)18 b(\(0,2\))g(\\Dot)g(\(0,2.25\))e(\\Dot)i(\(0,2.5\))f(\\Dot)
+h(\(0,2.75\))f(\\Dot)h(\(0,3\))-95 830 y Fr(15)61 b Fx(\045)-95
+880 y Fr(16)g Fx(\\Line)18 b(\(0,2.25\))e(\(2.5,0\))37
+b(^{d^p})17 b(:{.35,5pt})f(\\ro)-95 930 y Fr(17)61 b
+Fx(\\Line)18 b(\(0,3\))f(\(3,0\))38 b(^{p)18 b(+)h(q)h(=)f(m)g(+)g(n})g
+(:{.35,5pt})d(\\ro)-95 980 y Fr(18)61 b Fx(\045)-95 1029
+y Fr(19)g Fx(\\Math{q)17 b(=)i(n})g(\(-.1,1\))e(*1)97
+b(\\Math{E_{0)o(,p-)o(1})o(^2)16 b(=)j(E_{0,p-1}^p)o(})d(\(-.1,2.25\))g
+(*1)-95 1079 y Fr(20)61 b Fx(\\Math{p)17 b(=)i(m})g(\(2,-.2\))e(*{.55})
+g(\\Math{E_{p)o(,0})o(^2)f(=)j(E_{p,0}^p})d(\(2.75,-.2\))g(*{.6})-95
+1129 y Fr(21)61 b Fx(\\endGraph)-95 1179 y Fr(22)g Fx($$)1020
+2324 y
+gsave
+ 1020 2324 a 1020 2324 a
+currentpoint currentpoint translate 0 neg 15629758 atan rotate neg
+exch neg exch translate
+ 1020 2324 a 525 2335 a
+Fw(\000)-21 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)-21 b Fv(\021)1020 2324 y
+grestore
+ 1020 2324 a 1505
+2335 a FB(p)525 1799 y
+gsave
+ 525 1799 a 525 1799 a
+currentpoint currentpoint translate 16577001 neg 0 atan rotate neg
+exch neg exch translate
+ 525 1799
+a 0 1810 a Fw(\000)j(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)-18 b Fv(\021)525 1799
+y
+grestore
+ 525 1799 a 515 1285 a FB(q)1125 1837 y
+gsave
+ 1125 1837 a
+1125 1837 a
+currentpoint currentpoint translate 15392929 neg 0 atan rotate neg
+exch neg exch translate
+ 1125 1837 a 637 1847 a Fw(\000)c(\000)-9
+b(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h
+(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)
+-21 b(\000)1125 1837 y
+grestore
+ 1125 1837 a 1005 2024 a
+gsave
+ 1005 2024
+a 1005 2024 a
+currentpoint currentpoint translate 0 neg 15156100 atan rotate neg
+exch neg exch translate
+ 1005 2024 a 525 2035 a Fw(\000)j(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-17
+b(\000)1005 2024 y
+grestore
+ 1005 2024 a 1125 2024 a
+gsave
+ 1125 2024
+a 1125 2024 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 1125 2024 a 1115 2035 a Fw(\017)1125 2024
+y
+grestore
+ 1125 2024 a 525 2324 a
+gsave
+ 525 2324 a 525 2324 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525 2324
+a 515 2335 a Fw(\017)525 2324 y
+grestore
+ 525 2324 a 1125 2324
+a
+gsave
+ 1125 2324 a 1125 2324 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 1125 2324 a 1115 2335 a Fw(\017)1125
+2324 y
+grestore
+ 1125 2324 a 1200 2324 a
+gsave
+ 1200 2324 a 1200 2324
+a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 1200 2324 a 1190 2335 a Fw(\017)1200 2324 y
+grestore
+ 1200 2324
+a 1275 2324 a
+gsave
+ 1275 2324 a 1275 2324 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 1275 2324 a 1265
+2335 a Fw(\017)1275 2324 y
+grestore
+ 1275 2324 a 1350 2324 a
+gsave
+ 1350
+2324 a 1350 2324 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 1350 2324 a 1340 2335 a Fw(\017)1350
+2324 y
+grestore
+ 1350 2324 a 1425 2324 a
+gsave
+ 1425 2324 a 1425 2324
+a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 1425 2324 a 1415 2335 a Fw(\017)1425 2324 y
+grestore
+ 1425 2324
+a 525 2024 a
+gsave
+ 525 2024 a 525 2024 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525 2024 a 515 2035
+a Fw(\017)525 2024 y
+grestore
+ 525 2024 a 525 1949 a
+gsave
+ 525 1949 a
+525 1949 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525 1949 a 515 1960 a Fw(\017)525 1949 y
+grestore
+ 525
+1949 a 525 1874 a
+gsave
+ 525 1874 a 525 1874 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525 1874 a 515
+1885 a Fw(\017)525 1874 y
+grestore
+ 525 1874 a 525 1799 a
+gsave
+ 525 1799
+a 525 1799 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525 1799 a 515 1810 a Fw(\017)525 1799 y
+grestore
+
+525 1799 a 525 1724 a
+gsave
+ 525 1724 a 525 1724 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525 1724
+a 515 1735 a Fw(\017)525 1724 y
+grestore
+ 525 1724 a 525 1649 a
+gsave
+
+525 1649 a 525 1649 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525 1649 a 515 1660 a Fw(\017)525
+1649 y
+grestore
+ 525 1649 a 525 1574 a
+gsave
+ 525 1574 a 525 1574 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525
+1574 a 515 1585 a Fw(\017)525 1574 y
+grestore
+ 525 1574 a 525 1499
+a
+gsave
+ 525 1499 a 525 1499 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525 1499 a 515 1510 a Fw(\017)525
+1499 y
+grestore
+ 525 1499 a 525 1424 a
+gsave
+ 525 1424 a 525 1424 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525
+1424 a 515 1435 a Fw(\017)525 1424 y
+grestore
+ 525 1424 a 900 1987
+a
+gsave
+ 900 1987 a 900 1987 a
+currentpoint currentpoint translate -10656643 neg 11840715 atan rotate
+neg exch neg exch translate
+ 900 1987 a 396 1997 a Fw(\000)g(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)-16 b(\000)900 1987 y
+grestore
+ 900 1987 a 900 1987 a
+gsave
+ 900
+1987 a 900 1987 a
+currentpoint currentpoint translate -10656643 neg 11840715 atan rotate
+neg exch neg exch translate
+ 900 1987 a 728 1954 a FB(d)750 1939
+y Fu(p)749 1987 y
+grestore
+ 749 1987 a 975 1874 a
+gsave
+ 975 1874 a 975
+1874 a
+currentpoint currentpoint translate -14208858 neg 14208858 atan rotate
+neg exch neg exch translate
+ 975 1874 a 339 1885 a Fw(\000)k(\000)j(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)e(\000)
+975 1874 y
+grestore
+ 975 1874 a 975 1874 a
+gsave
+ 975 1874 a 975 1874
+a
+currentpoint currentpoint translate -14208858 neg 14208858 atan rotate
+neg exch neg exch translate
+ 975 1874 a 655 1833 a FB(p)9 b FF(+)g FB(q)k FF(=)f
+FB(m)d FF(+)h FB(n)784 1874 y
+grestore
+ 784 1874 a 495 2024 a
+gsave
+ 495
+2024 a 495 2024 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 495 2024 a 395 2035 a FB(q)i FF(=)g
+FB(n)495 2024 y
+grestore
+ 495 2024 a 495 1649 a
+gsave
+ 495 1649 a 495
+1649 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 495 1649 a 202 1660 a FB(E)235 1645 y Fr(2)233
+1670 y(0)p Fu(;p)p Fs(\000)p Fr(1)332 1660 y FF(=)g FB(E)409
+1640 y Fu(p)407 1671 y Fr(0)p Fu(;p)p Fs(\000)p Fr(1)495
+1649 y
+grestore
+ 495 1649 a 1125 2384 a
+gsave
+ 1125 2384 a 1125 2384 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+
+1125 2384 a 1063 2395 a FB(p)f FF(=)h FB(m)1125 2384
+y
+grestore
+ 1125 2384 a 1350 2384 a
+gsave
+ 1350 2384 a 1350 2384 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 1350
+2384 a 1225 2395 a FB(E)1258 2380 y Fr(2)1256 2405 y
+Fu(p;)p Fr(0)1313 2395 y FF(=)g FB(E)1390 2375 y Fu(p)1388
+2406 y(p;)p Fr(0)1350 2384 y
+grestore
+ 1350 2384 a 954 2770 a FF(66)p
+eop
+%%Page: 67 12
+67 66 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)-79 42 y Fr(1)62 b Fx($$)-79
+91 y Fr(2)g Fx(\\rotatedla)o(be)o(ls)16 b(\\let\\label)o(sty)o(le)o
+(\\te)o(xt)o(sty)o(le)g(\\scale=2)-79 141 y Fr(3)62 b
+Fx(\\Diagram)-79 191 y Fr(4)82 b Fx(&)19 b(&)g(F\(3,2\))e(\\aLine)h
+(\(1,-4\))f(>{F\(3,1,1)o(\)})f(:{.4})i(\\br)38 b(\\\\)-79
+241 y Fr(5)82 b Fx(&)19 b(&)156 b(&)20 b(\\rdLine)d(>{F\(1,2,)o(2\)})f
+(\\pt{right)o(,.7)o(5})g(\\\\)-79 291 y Fr(6)82 b Fx(&)19
+b(&)156 b(&)177 b(&)19 b(F\(1,4\))370 b(\\\\)-79 340
+y Fr(7)62 b Fx(F\(2,3\))17 b(\\aDash)h(\(4,1\))f(^{F\(1,1,3\))o(})g
+(:{.4})g(\\pp)156 b(\\\\)-79 390 y Fr(8)82 b Fx(&)19
+b(&)156 b(&)20 b(F\(4,1\))d(\\aLine)g(\(1,2\))h(>{F\(1,3,1)o(\)})75
+b(\\\\)-79 440 y Fr(9)62 b Fx(\\Modify)-95 490 y Fr(10)f
+Fx(\\Pt{top})17 b(\(2,4\))g(\\Pt{b1})g(\(0,1\))h(\\Pt{b2})f(\(3,0\))-95
+540 y Fr(11)61 b Fx(\\Pt{LeftF})16 b(\(1.65,2\))g(\\Pt{BackF})g
+(\(2,2.5\))-95 589 y Fr(12)61 b Fx(\\Pt{Bottom)o(F})16
+b(\(2.5,1\))h(\\Pt{Right)o(F})f(\(3.1,2.25\))-95 639
+y Fr(13)61 b Fx(\\Nul)38 b(\\pt{b1})17 b(\\pt{b2})271
+b(\\pt{bottom,)o(.8)o(})-95 689 y Fr(14)61 b Fx(\\Nul)38
+b(\\pt{Botto)o(mF)o(})17 b(\\pt{botto)o(m})94 b(\\pt{BottomL)o(,2)o(})
+-95 739 y Fr(15)61 b Fx(\\Dash)18 b(\\pt{Botto)o(mF)o(})f(\\pt{botto)o
+(m})94 b(\\tl\\circ)17 b(\\dt{3pt})-95 789 y Fr(16)61
+b Fx(\\Line)18 b(\\pt{botto)o(m})e(\\pt{Bottom)o(L})94
+b(\\hd{F\(1,1,2)o(,1)o(\)})-95 839 y Fr(17)61 b Fx(\\Line)18
+b(\\pt{b1})f(\\pt{b2})g(_{F\(2,2,)o(1\)})35 b(\\br)-95
+888 y Fr(18)61 b Fx(\\Nul)38 b(\\pt{b1})17 b(\\pt{top})251
+b(\\pt{left,.2)o(5})16 b(\\pt{back,.)o(75)o(})-95 938
+y Fr(19)61 b Fx(\\Nul)38 b(\\pt{BackF)o(})16 b(\\pt{back})173
+b(\\pt{BackL,2)o(})-95 988 y Fr(20)61 b Fx(\\Nul)38 b(\\pt{LeftF)o(})16
+b(\\pt{left})173 b(\\pt{LeftL,2)o(})-95 1038 y Fr(21)61
+b Fx(\\Dash)18 b(\\pt{BackF)o(})e(\\pt{back})173 b(\\tl\\circ)17
+b(\\dt{3pt})-95 1088 y Fr(22)61 b Fx(\\Line)18 b(\\pt{back})e
+(\\pt{BackL)o(})173 b(\\hd{F\(1,1,1)o(,2)o(\)})-95 1137
+y Fr(23)61 b Fx(\\Line)18 b(\\pt{b1})f(\\pt{top})f(<{F\(2,1,2\))o(})g
+(\\br)-95 1187 y Fr(24)61 b Fx(\\Line)18 b(\\pt{LeftF)o(})e
+(\\pt{LeftL})153 b(\\tl\\bullet)16 b(\\hd{F\(2,1,)o(1,1)o(\)})g(\\jt)j
+(\\br)-95 1237 y Fr(25)61 b Fx(\\Nul)38 b(\\pt{Right)o(F})16
+b(\\pt{right})133 b(\\pt{RightL,)o(3})-95 1287 y Fr(26)61
+b Fx(\\Line)18 b(\\pt{Right)o(F})e(\\pt{RightL)o(})114
+b(\\tl\\bullet)16 b(\\hd{F\(1,2,)o(1,1)o(\)})g(\\jt)j(\\br)-95
+1337 y Fr(27)61 b Fx(\\endDiagra)o(m)-95 1386 y Fr(28)g
+Fx($$)1029 2114 y
+gsave
+ 1029 2114 a 1029 2114 a
+currentpoint currentpoint translate 3729358 neg 14917432 atan rotate
+neg exch neg exch translate
+ 1029 2114 a
+608 2124 a Fv(\013)-8 b(\013)f(\013)g(\013)g(\013)g(\013)g(\013)g(\013)
+g(\013)g(\013)g(\013)g(\013)g(\013)g(\013)g(\013)g(\013)g(\013)h(\013)f
+(\013)g(\013)g(\013)g(\013)g(\013)g(\013)g(\013)g(\013)g(\013)g(\013)g
+(\013)g(\013)g(\013)g(\013)g(\013)h(\013)f(\013)g(\013)1029
+2114 y
+grestore
+ 1029 2114 a 1029 2114 a
+gsave
+ 1029 2114 a 1029 2114
+a
+currentpoint currentpoint translate 3729358 neg 14917432 atan rotate
+neg exch neg exch translate
+ 1029 2114 a 863 2091 a FB(F)6 b FF(\(1)p FB(;)h FF(1)p
+FB(;)g FF(3\))945 2114 y
+grestore
+ 945 2114 a 1147 1996 a
+gsave
+ 1147
+1996 a 1147 1996 a
+currentpoint currentpoint translate -14917432 neg 3729358 atan rotate
+neg exch neg exch translate
+ 1147 1996 a 660 1996 a
+1 setgray
+ 660 1996 a
+690 2006 915 21 v 1147 1996 a
+grestore
+ 1147 1996 a 1147 1996 a
+gsave
+
+1147 1996 a 1147 1996 a
+currentpoint currentpoint translate -14917432 neg 3729358 atan rotate
+neg exch neg exch translate
+ 1147 1996 a 690 2006 a Fw(\000)-18
+b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)-17
+b(\000)1147 1996 y
+grestore
+ 1147 1996 a 1147 1996 a
+gsave
+ 1147 1996
+a 1147 1996 a
+currentpoint currentpoint translate -14917432 neg 3729358 atan rotate
+neg exch neg exch translate
+ 1147 1996 a 973 1973 a FB(F)6 b FF(\(3)p
+FB(;)h FF(1)p FB(;)g FF(1\))1055 1996 y
+grestore
+ 1055 1996 a 1265
+1760 a
+gsave
+ 1265 1760 a 1265 1760 a
+currentpoint currentpoint translate -7458716 neg 7458716 atan rotate
+neg exch neg exch translate
+ 1265 1760 a 968 1770 a
+Fw(\000)-17 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)
+f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)h(\000)-17 b(\000)1265
+1760 y
+grestore
+ 1265 1760 a 1265 1760 a
+gsave
+ 1265 1760 a 1265 1760
+a
+currentpoint currentpoint translate -7458716 neg 7458716 atan rotate
+neg exch neg exch translate
+ 1265 1760 a 1183 1737 a FB(F)6 b FF(\(1)p FB(;)h FF(2)p
+FB(;)g FF(2\))1265 1760 y
+grestore
+ 1265 1760 a 1383 2232 a
+gsave
+ 1383
+2232 a 1383 2232 a
+currentpoint currentpoint translate 7458716 neg 3729358 atan rotate
+neg exch neg exch translate
+ 1383 2232 a 1150 2242 a Fw(\000)-12
+b(\000)j(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)e(\000)1383
+2232 y
+grestore
+ 1383 2232 a 1383 2232 a
+gsave
+ 1383 2232 a 1383 2232
+a
+currentpoint currentpoint translate 7458716 neg 3729358 atan rotate
+neg exch neg exch translate
+ 1383 2232 a 1301 2276 a FB(F)6 b FF(\(1)p FB(;)h FF(3)p
+FB(;)g FF(1\))1383 2232 y
+grestore
+ 1383 2232 a 966 1534 a FB(F)f
+FF(\(3)p FB(;)h FF(2\))1439 2006 y FB(F)f FF(\(1)p FB(;)h
+FF(4\))494 2242 y FB(F)f FF(\(2)p FB(;)h FF(3\))1202
+2479 y FB(F)f FF(\(4)p FB(;)h FF(1\))910 2350 y
+gsave
+ 910 2350
+a 910 2350 a
+currentpoint currentpoint translate -3729358 neg 11188074 atan rotate
+neg exch neg exch translate
+ 910 2350 a 910 2350 a
+grestore
+ 910 2350 a 1113 2320
+a
+gsave
+ 1113 2320 a 1113 2320 a
+currentpoint currentpoint translate -2770849 neg -1058864 atan rotate
+neg exch neg exch translate
+ 1113 2320 a 1113 2320 a
+grestore
+ 1113
+2320 a 1113 2320 a
+gsave
+ 1113 2320 a 1113 2320 a
+currentpoint currentpoint translate -2770849 neg -1058864 atan rotate
+neg exch neg exch translate
+ 1113 2320
+a 1025 2330 a Fv(\013)-9 b(\013)g(\013)g(\013)g(\013)g(\013)g(\013)1113
+2320 y
+grestore
+ 1113 2320 a 1136 2242 a Fw(\016)1050 2484 y
+gsave
+ 1050
+2484 a 1050 2484 a
+currentpoint currentpoint translate -2405159 neg -921240 atan rotate
+neg exch neg exch translate
+ 1050 2484 a 981 2494 a Fw(\000)-23
+b(\000)-9 b(\000)g(\000)h(\000)-22 b(\000)1050 2484 y
+grestore
+
+1050 2484 a 920 2570 a FB(F)6 b FF(\(1)p FB(;)h FF(1)p
+FB(;)g FF(2)p FB(;)g FF(1\))910 2350 y
+gsave
+ 910 2350 a 910
+2350 a
+currentpoint currentpoint translate -3729358 neg 11188074 atan rotate
+neg exch neg exch translate
+ 910 2350 a 537 2350 a
+1 setgray
+ 537 2350 a 614 2361 597
+21 v 910 2350 a
+grestore
+ 910 2350 a 910 2350 a
+gsave
+ 910 2350 a 910
+2350 a
+currentpoint currentpoint translate -3729358 neg 11188074 atan rotate
+neg exch neg exch translate
+ 910 2350 a 614 2361 a Fw(\000)-16 b(\000)-9 b(\000)h(\000)f
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g
+(\000)-15 b(\000)910 2350 y
+grestore
+ 910 2350 a 910 2350 a
+gsave
+ 910
+2350 a 910 2350 a
+currentpoint currentpoint translate -3729358 neg 11188074 atan rotate
+neg exch neg exch translate
+ 910 2350 a 830 2394 a FB(F)6 b FF(\(2)p
+FB(;)h FF(2)p FB(;)g FF(1\))912 2350 y
+grestore
+ 912 2350 a 792
+1878 a
+gsave
+ 792 1878 a 792 1878 a
+currentpoint currentpoint translate 11188074 neg 7458716 atan rotate
+neg exch neg exch translate
+ 792 1878 a 792 1878 a
+grestore
+ 792
+1878 a 965 1796 a
+gsave
+ 965 1796 a 965 1796 a
+currentpoint currentpoint translate 2578128 neg -2008000 atan rotate
+neg exch neg exch translate
+ 965 1796 a 965
+1796 a
+grestore
+ 965 1796 a 815 2018 a
+gsave
+ 815 2018 a 815 2018 a
+currentpoint currentpoint translate -713450 neg -4145418 atan rotate
+neg exch neg exch translate
+ 815
+2018 a 815 2018 a
+grestore
+ 815 2018 a 965 1796 a
+gsave
+ 965 1796 a 965
+1796 a
+currentpoint currentpoint translate 2578128 neg -2008000 atan rotate
+neg exch neg exch translate
+ 965 1796 a 865 1807 a Fv(\013)-9 b(\013)g(\013)g(\013)g(\013)g
+(\013)g(\013)g(\013)965 1796 y
+grestore
+ 965 1796 a 1018 1888 a
+Fw(\016)845 1643 y
+gsave
+ 845 1643 a 845 1643 a
+currentpoint currentpoint translate 2271420 neg -1768140 atan rotate
+neg exch neg exch translate
+ 845 1643 a 767
+1653 a Fw(\000)-16 b(\000)-9 b(\000)g(\000)g(\000)-14
+b(\000)845 1643 y
+grestore
+ 845 1643 a 688 1581 a FB(F)6 b FF(\(1)p
+FB(;)h FF(1)p FB(;)g FF(1)p FB(;)g FF(2\))792 1878 y
+gsave
+
+792 1878 a 792 1878 a
+currentpoint currentpoint translate 11188074 neg 7458716 atan rotate
+neg exch neg exch translate
+ 792 1878 a 367 1878 a
+1 setgray
+ 367 1878
+a 400 1888 786 21 v 792 1878 a
+grestore
+ 792 1878 a 792 1878 a
+gsave
+
+792 1878 a 792 1878 a
+currentpoint currentpoint translate 11188074 neg 7458716 atan rotate
+neg exch neg exch translate
+ 792 1878 a 400 1888 a Fw(\000)-14
+b(\000)-9 b(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)d(\000)792 1878 y
+grestore
+ 792 1878 a 792
+1878 a
+gsave
+ 792 1878 a 792 1878 a
+currentpoint currentpoint translate 11188074 neg 7458716 atan rotate
+neg exch neg exch translate
+ 792 1878 a 710 1855 a FB(F)6
+b FF(\(2)p FB(;)h FF(1)p FB(;)g FF(2\))792 1878 y
+grestore
+ 792
+1878 a 696 2039 a
+gsave
+ 696 2039 a 696 2039 a
+currentpoint currentpoint translate -1363986 neg -7905486 atan rotate
+neg exch neg exch translate
+ 696 2039 a 441
+2039 a
+1 setgray
+ 441 2039 a 437 2049 402 21 v 696 2039 a
+grestore
+ 696 2039
+a 696 2039 a
+gsave
+ 696 2039 a 696 2039 a
+currentpoint currentpoint translate -1363986 neg -7905486 atan rotate
+neg exch neg exch translate
+ 696 2039 a 437 2049
+a Fw(\000)-20 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-20
+b(\000)696 2039 y
+grestore
+ 696 2039 a 936 2006 a Fw(\017)344 2093
+y FB(F)6 b FF(\(2)p FB(;)h FF(1)p FB(;)g FF(1)p FB(;)g
+FF(1\))1329 1901 y
+gsave
+ 1329 1901 a 1329 1901 a
+currentpoint currentpoint translate 1139925 neg 1284136 atan rotate
+neg exch neg exch translate
+ 1329 1901
+a 1329 1901 a
+grestore
+ 1329 1901 a 1397 1841 a
+gsave
+ 1397 1841 a 1397
+1841 a
+currentpoint currentpoint translate 3030492 neg 3415941 atan rotate
+neg exch neg exch translate
+ 1397 1841 a 1252 1841 a
+1 setgray
+ 1252 1841 a 1248 1851
+254 21 v 1397 1841 a
+grestore
+ 1397 1841 a 1397 1841 a
+gsave
+ 1397 1841
+a 1397 1841 a
+currentpoint currentpoint translate 3030492 neg 3415941 atan rotate
+neg exch neg exch translate
+ 1397 1841 a 1248 1851 a Fw(\000)-14 b(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)-13
+b(\000)1397 1841 y
+grestore
+ 1397 1841 a 1278 1947 a Fw(\017)1403
+1755 y FB(F)6 b FF(\(1)p FB(;)h FF(2)p FB(;)g FF(1)p
+FB(;)g FF(1\))954 2770 y(67)p eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/macros/generic/diagrams/kuvio/examples.ps b/macros/generic/diagrams/kuvio/examples.ps
new file mode 100644
index 0000000000..7b547ab9eb
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/examples.ps
@@ -0,0 +1,5423 @@
+%!PS-Adobe-2.0
+%%Creator: dvipsk 5.58f Copyright 1986, 1994 Radical Eye Software
+%%Title: tdwk.dvi
+%%Pages: 12 0
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 612 792
+%%EndComments
+%DVIPSCommandLine: dvips -D300 tdwk -o
+%DVIPSParameters: dpi=300, comments removed
+%DVIPSSource: TeX output 1996.06.09:1515
+%%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 round sub abs 0.00001 lt{round}if}
+forall round exch round exch]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 sub]{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 userdict
+/eop-hook known{eop-hook}if showpage}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 newpath 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
+%%BeginProcSet: special.pro
+TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N
+/vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP 0 N /rwiSeen
+false N /rhiSeen false N /letter{}N /note{}N /a4{}N /legal{}N}B
+/@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit
+div /vsc X}B /@hsize{/hs X /CLIP 1 N}B /@vsize{/vs X /CLIP 1 N}B /@clip{
+/CLIP 2 N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{
+10 div /rwi X /rwiSeen true N}B /@rhi{10 div /rhi X /rhiSeen true N}B
+/@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X}B /magscale
+true def end /@MacSetUp{userdict /md known{userdict /md get type
+/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup
+length 20 add dict copy def}if end md begin /letter{}N /note{}N /legal{}
+N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath
+clippath mark{transform{itransform moveto}}{transform{itransform lineto}
+}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{
+itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{
+closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39
+0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}N
+/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1
+scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get
+ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip
+not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0
+TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR
+pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1
+-1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg
+TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg
+sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr
+0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add
+2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp
+{pop pop showpage pm restore}N end}if}if}N /normalscale{Resolution 72
+div VResolution 72 div neg scale magscale{DVImag dup scale}if 0 setgray}
+N /psfts{S 65781.76 div N}N /startTexFig{/psf$SavedState save N userdict
+maxlength dict begin /magscale true def normalscale currentpoint TR
+/psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts
+/psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx
+psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy
+scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR
+/showpage{}N /erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{
+psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
+roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
+moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict
+begin /SpecialSave save N gsave normalscale currentpoint TR
+@SpecialDefaults count /ocount X /dcount countdictstack N}N /@setspecial
+{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
+closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
+sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
+}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
+CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
+lineto closepath clip}if /showpage{}N /erasepage{}N /copypage{}N newpath
+}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{
+end}repeat grestore SpecialSave restore end}N /@defspecial{SDict begin}
+N /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{
+/SaveX currentpoint /SaveY X N 1 setlinecap newpath}N /st{stroke SaveX
+SaveY moveto}N /fil{fill SaveX SaveY moveto}N /ellipse{/endangle X
+/startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad
+yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end
+%%EndProcSet
+TeXDict begin 40258431 52099146 1000 300 300 (tdwk.dvi)
+@start /Fa 1 66 df<000C0000000C0000000C0000001E0000001E0000002F00000027
+0000002700000043800000438000004380000081C0000081C0000181E0000100E0000100
+E00003FFF000020070000200700004003800040038000C003C0008001C0008001C003C00
+1E00FF00FFC01A1A7E991E>65 D E /Fb 3 84 df<000000800000038000000780000007
+8000000F8000000F80000017800000378000002780000067800000478000008780000187
+8000010780000307800002078000040780000C078000180780001FFF80003FFF80006007
+C000C007C061C003C0738003C07F0003E0FE0003F87C0001E0380000001D1D809B1F>65
+D<0006000001000E000002000E000006000F00000E000F00001E001F00003E001700003C
+001700007C00178000FC00178001BC00238003BC002380073C0023C00E3C0043C01C3800
+41C038380041C070780081E060780081E0C0780080F180780100F7007801007F00780200
+7E007866007C0078FC0030007CFC0000007FF80000003C7000000000281B7E992E>77
+D<0003F8001FFC00307C00603C01C03C01C03003C00003C00003E00003F00001FC0000FF
+00003F80000FC00007E00003F00801F03000F07000F0F000E0F000E0F801C0FC01007F06
+003FF8000FE000161A7F9917>83 D E /Fc 45 122 df<00FE000381000601800E03801C
+01001C00001C00001C00001C00001C0000FFFF801C03801C03801C03801C03801C03801C
+03801C03801C03801C03801C03801C03801C03801C03801C0380FF8FF0141A809915>12
+D<00FF800383800603800E03801C03801C03801C03801C03801C03801C0380FFFF801C03
+801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03
+801C0380FF9FF0141A809915>I<60F0F86808080810102040050B7D990B>39
+D<60F0F07010101020204040040B7D830B>44 D<FFC0FFC00A0280880D>I<07E01C3838
+1C300C700E60066006E007E007E007E007E007E007E007E007E007E00760066006700E30
+0C381C1C3807E010187F9713>48 D<03000700FF00070007000700070007000700070007
+000700070007000700070007000700070007000700070007007FF80D187D9713>I<0F80
+106020304038803CC01CE01C401C003C003800380070006000C001800100020004040804
+100430083FF87FF8FFF80E187E9713>I<07E01838201C601E700E201E001E001C001C00
+38007007E00038001C000E000F000FE00FE00FC00F400E601C183807E010187F9713>I<
+001800180038007800F800B8013802380238043808381838103820384038C038FFFF0038
+0038003800380038003803FF10187F9713>I<30183FF03FE03F80200020002000200020
+002FC03060203000380018001C001C401CE01CE01C80184038403030E00F800E187E9713
+>I<01F807040C06180E300E300070006000E000E3E0E418E80CF00EE006E007E007E007
+600760077006300E180C0C3807E010187F9713>I<40007FFF7FFE7FFE40048008801080
+10002000400040008001800100030003000700060006000E000E000E000E000E00040010
+197E9813>I<07E01818300C2006600660067006780C3E181F3007C003E00CF8307C601E
+600FC007C003C003C00360022004181807E010187F9713>I<07E01C303018700C600EE0
+06E006E007E007E0076007700F3017182707C700070006000E000C700C7018603030600F
+8010187F9713>I<FFFF80000E00E0000E0070000E0038000E001C000E000E000E000E00
+0E0007000E0007000E0007800E0007800E0007800E0007800E0007800E0007800E000780
+0E0007800E0007000E0007000E000F000E000E000E001C000E001C000E0078000E00E000
+FFFF8000191A7F991D>68 D<FFFFF80E00380E00180E00080E000C0E00040E00040E0004
+0E01000E01000E01000E03000FFF000E03000E01000E01000E01000E00020E00020E0002
+0E00060E00040E00040E000C0E003CFFFFFC171A7F991A>I<FFFFF80E00380E00180E00
+080E000C0E00040E00040E00040E01000E01000E01000E03000FFF000E03000E01000E01
+000E01000E00000E00000E00000E00000E00000E00000E00000E0000FFE000161A7F9919
+>I<003F020001C0C60003002E000E001E001C000E001C00060038000600780002007000
+020070000200F0000000F0000000F0000000F0000000F0000000F001FFC070000E007000
+0E0078000E0038000E001C000E001C000E000E000E000300160001C06600003F82001A1A
+7E991E>I<FFE0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E
+00000E00000E00000E00000E00000E00000E00000E00080E00080E00080E00180E00100E
+00300E00700E00F0FFFFF0151A7F9918>76 D<7FFFFF00701C0700401C0100401C0100C0
+1C0180801C0080801C0080801C0080001C0000001C0000001C0000001C0000001C000000
+1C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C000000
+1C0000001C0000001C000003FFE000191A7F991C>84 D<FFC0FF800F003C000F00100007
+0020000380200003C0400001C0800000E1800000F10000007A0000003E0000001C000000
+1E0000001E00000017000000278000004380000041C0000081E0000100E0000300700002
+007800040038000C001C001E003E00FF007FC01A1A7F991D>88 D<1FC000387000383800
+101C00001C00001C0003FC001E1C00381C00701C00E01C00E01C80E01C80E03C80705F80
+1F8F0011107F8F13>97 D<FC00001C00001C00001C00001C00001C00001C00001C00001C
+00001C00001CFC001D07001E03801C01C01C00C01C00E01C00E01C00E01C00E01C00E01C
+00E01C01C01C01801E030019060010F800131A809915>I<07F81C1C381C70087000E000
+E000E000E000E000E0007000700438081C1807E00E107F8F11>I<003F00000700000700
+00070000070000070000070000070000070000070003E7000C1700180F00300700700700
+E00700E00700E00700E00700E00700E00700600700700700380F001C370007C7E0131A7F
+9915>I<07C01C3030187018600CE00CFFFCE000E000E000E0006000700438081C1807E0
+0E107F8F11>I<01F007180E381C101C001C001C001C001C001C00FFC01C001C001C001C
+001C001C001C001C001C001C001C001C001C001C00FF800D1A80990C>I<0FCF00187180
+3030007038007038007038007038003030001860002FC0006000006000007000003FF000
+3FFC001FFE00600F00C00300C00300C00300C00300600600381C0007E00011187F8F13>
+I<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C7C001D87
+001E03801E03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03
+801C0380FF9FF0141A809915>I<183C3C18000000000000FC1C1C1C1C1C1C1C1C1C1C1C
+1C1C1CFF081A80990A>I<FC00001C00001C00001C00001C00001C00001C00001C00001C
+00001C00001C1FC01C0F001C0C001C18001C20001C40001CE0001DE0001E70001C78001C
+38001C1C001C1E001C0F001C0F80FF9FE0131A809914>107 D<FC001C001C001C001C00
+1C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00
+1C001C00FF80091A80990A>I<FC7C1F001D8E63801E0781C01E0781C01C0701C01C0701
+C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701C01C0701
+C0FF9FE7F81D107F8F20>I<FC7C001D87001E03801E03801C03801C03801C03801C0380
+1C03801C03801C03801C03801C03801C03801C0380FF9FF01410808F15>I<07E01C3830
+0C700E6006E007E007E007E007E007E0076006700E381C1C3807E010107F8F13>I<FCFC
+001D07001E03801C01C01C01C01C00E01C00E01C00E01C00E01C00E01C00E01C01C01C01
+801E03001D06001CF8001C00001C00001C00001C00001C00001C0000FF80001317808F15
+>I<FC781D9C1E1C1E081C001C001C001C001C001C001C001C001C001C001C00FF800E10
+808F0F>114 D<1F2060E04020C020C020F0007F003FC01FE000F080708030C030C020F0
+408F800C107F8F0F>I<0800080008000800180018003800FFC038003800380038003800
+380038003800382038203820382018201C4007800B177F960F>I<FC1F801C03801C0380
+1C03801C03801C03801C03801C03801C03801C03801C03801C03801C07800C07800E0B80
+03F3F01410808F15>I<FF0F803C07001C06001C04001C04000E08000E08000710000710
+0007100003A00003A00001C00001C00001C00000800011107F8F14>I<FE7F1F80381C07
+003C1C06001C0C04001C0E04000E1608000E1708000E170800072310000723900007A390
+0003C1A00003C1E0000180C0000180C0000180C00019107F8F1C>I<FE3F803C1E001C08
+000E10000F300007600003C00001C00001E00003E000027000043800083800181C00381E
+00FC3FC012107F8F14>I<FF0F803C07001C06001C04001C04000E08000E080007100007
+100007100003A00003A00001C00001C00001C000008000008000010000010000E10000E2
+0000E4000078000011177F8F14>I E /Fd 2 59 df<01F00FFC1C0C3000200021802E40
+3FC04000400080008000C00860303FE01F800E107F8F12>34 D<60F0F06004047D830B>
+58 D E /Fe 5 118 df<001800003800003800005800009800008C00010C00020C00060C
+0007FC00080600100600300600F81F80110E7E8D16>65 D<0808000000007098B0303060
+646870060F7D8E0B>105 D<39C02E302C30183018301830186038C03780300030006000
+F8000C0D7F880F>112 D<0E4031C060C04180C180C180C18047003B000300030006001F
+800A0D7E880E>I<6060B060B06030C060C060C060D063E03CE00C097D8812>117
+D E /Ff 10 128 df<00007F0000000003FFE00000000FFFF80000003FFFFE0000007F80
+FF000000FE003F800001FC001FC00003F00007E00007E00003F00007E00003F0000FC000
+01F8001F800000FC001F800000FC001F0000007C003F0000007E003E0000003E007E0000
+003F007E0000003F007E0000003F007C0000001F00FC0000001F80FC0000001F80FC0000
+001F80FC0000001F80FC0000001F80FC0000001F80FC0000001F80FC0000001F80FC0000
+001F80FC0000001F80FC0000001F80FE0000003F807E0000003F007E0000003F007E0000
+003F007E0000003F003F0000007E003F0000007E003F800000FE001F800000FC001FC000
+01FC000FC00001F80007E00003F00007F00007F00003F8000FE00001FC001FC00000FE00
+3F8000007F80FF0000003FFFFE0000000FFFF800000003FFE0000000007F00000029347C
+B232>79 D<007F00F801FFC7FC03FFFFFC07FFFFFC0FC1FC001F80FC001F007C001F007C
+003E003E003E003E003E003E003E003E003E003E003E003E001F007C001F007C001F80FC
+000FC1F8000FFFF0001FFFE0001DFFC0001C7F00003C0000003C0000003C0000001E0000
+001FFFF8001FFFFF000FFFFF801FFFFFC03FFFFFE03E000FF07C0003F0FC0001F8F80000
+F8F80000F8F80000F8F80000F8FC0001F87E0003F03F0007E03FE03FE00FFFFF8007FFFF
+0001FFFC00003FE0001E2E7E9E22>103 D<FCFCFCFCFCFC00000000000000000000007C
+7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C06307CAF10>
+105 D<F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8
+000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8
+000000F8000000F8007F00F800FE00F801FC00F803F800F807F000F80FE000F81FC000F8
+3F8000F83F0000F87E0000F8FC0000F9FC0000FBFC0000FFFC0000FFFE0000FFFF0000FF
+BF0000FF1F8000FE0FC000FC0FC000F807E000F803F000F803F000F801F800F800FC00F8
+00FC00F8007E00F8003F00F8003F00F8001F80F8000FC01A327BB121>107
+D<F83F80F8FFE0F9FFF0FBFFF8FF83F8FF00F8FE00FCFC007CFC007CFC007CF8007CF800
+7CF8007CF8007CF8007CF8007CF8007CF8007CF8007CF8007CF8007CF8007CF8007CF800
+7CF8007CF8007CF8007CF8007CF8007CF8007CF8007C161F7A9E23>110
+D<001FC00000FFF80001FFFC0007FFFF000FE03F801F800FC01F0007C03E0003E03E0003
+E07C0001F07C0001F0780000F0F80000F8F80000F8F80000F8F80000F8F80000F8F80000
+F8F80000F8FC0001F87C0001F07C0001F03E0003E03F0007E01F0007C01FC01FC00FF07F
+8007FFFF0001FFFC0000FFF800001FC0001D1F7E9E22>I<F80FF83FF8FFF9FFFBFFFFF0
+FFC0FF80FF00FE00FC00FC00F800F800F800F800F800F800F800F800F800F800F800F800
+F800F800F800F800F800F800F800101F7B9E17>114 D<01FF000FFFE01FFFF83FFFF87E
+01F87C0030F80000F80000F80000F80000FC00007E00007FE0003FFE001FFF800FFFE003
+FFF0003FF80003F80000FC00007C00007C00007C40007C60007CF800F8FE03F8FFFFF07F
+FFE01FFFC001FE00161F7E9E1A>I<F80001F0FC0003F07C0003E07C0003E03E0007C03E
+0007C03E0007C01F000F801F000F801F000F800F801F000F801F000FC01F0007C03E0007
+C03E0007E03E0003E07C0003E07C0001E0780001F0F80001F0F80000F0F00000F9F00000
+F9F0000079E0000079E000007DE000003FC000003FC000001F8000001F80001C1F7F9E1F
+>118 D<FC07E0FC07E0FC07E0FC07E0FC07E0FC07E0130679AF22>127
+D E /Fg 1 46 df<8000F000FC00FF00FFE0FFFEFFFEFFE0FF00FC00F00080000F0C6785
+2A>45 D E /Fh 1 18 df<000020000010000008000004FFFFFFFFFFFF00000400000800
+0010000020180A7E8B1D>17 D E /Fi 5 115 df<004001C003C0FDC001C001C001C001
+C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001
+C001C001C001C001C001C001C001C001C003E07FFF10247CA319>49
+D<01F8000607000801801000C02000E0400070400070800078F00078F80038F80038F800
+382000780000780000700000F00000E00001E00001C0000380000700000600000C000018
+0000300000600000C0000180000300080600080400080800181000103FFFF07FFFF0FFFF
+F015247EA319>I<01FC000607000801801000C02000E07000F07800F07C00F07800F030
+00F00000E00000E00001C00001C0000380000700001C0003FC000007000003800001C000
+00E00000F0000070000078200078700078F80078F80078F00078A000704000F04000E020
+01C018038006070001FC0015257EA319>I<01FC000707000C01801800C0300060300060
+700070600030E00038E00038E00038E00038E00038E00038E00038600030700070300060
+3800E01800C00C018007070001FC0015177E9619>111 D<0E1E00FE63001E47800E8780
+0F03000F00000F00000E00000E00000E00000E00000E00000E00000E00000E00000E0000
+0E00000E00000E00000E00000E00000F0000FFE00011177F9613>114
+D E /Fj 22 122 df<000007FC00001C02000030070000600F0000E00F0000C0060001C0
+000001C0000001C0000003800000038000000380000003800000038000007FFFFC007FFF
+F8000700380007003800070038000E0070000E0070000E0070000E0070000E00E0001C00
+E0001C00E0001C00E0001C01C0001C01C0001C01C2003801C20038038400380384003803
+84003001880070018800700070007000000060000000E0000000E0000000C0000070C000
+00F1800000F1800000630000003C000000202F82A41E>12 D<007C6000C2E00382E00701
+E00E01E00E01C01C01C03C01C03C01C0780380780380780380780380F00700F00700F007
+08F00708700E10700E10701E1030262018C6200F01C015177B961B>97
+D<03C0001FC0001FC0000380000380000380000380000700000700000700000700000E00
+000E00000E00000E7C001C86001D07001E03001C03803803803803803803803803807007
+80700780700780700780E00F00E00F00E00E00E01E00601C0060380060300030600010C0
+000F000011257BA418>I<003F0000E0800180400300E00701E00E03C01C01803C00003C
+0000380000780000780000780000700000F00000F0000070004070008070010030020038
+04001C380007C00013177B9618>I<00001E0000FE0001FE00001C00001C00001C00001C
+000038000038000038000038000070000070000070007C7000C2E00382E00701E00E01E0
+0E01C01C01C03C01C03C01C0780380780380780380780380F00700F00700F00708F00708
+700E10700E10701E1030262018C6200F01C017257BA41B>I<007C0001C2000701000E00
+801C00803C0100380100780200780C00FFF000F00000F00000F00000E00000E00000E000
+00E00080E00100E002007004003008001870000F800011177A9618>I<00001E00000063
+000000C7800000CF000001C6000001800000038000000380000003800000038000000700
+00000700000007000000070000007FF80000FFF000000E0000000E0000000E0000000E00
+00001C0000001C0000001C0000001C0000001C0000003800000038000000380000003800
+0000380000007000000070000000700000007000000070000000E0000000E0000000E000
+0000E0000000C0000001C000000180000071800000F1000000F3000000620000003C0000
+00192F82A410>I<000F8C00185C00705C00E03C01C03C01C0380380380780380780380F
+00700F00700F00700F00701E00E01E00E01E00E01E00E00E01C00E01C00E03C00605C003
+1B8001E380000380000380000700000700000700700E00F00C00F018006070003FC00016
+217E9618>I<00F00007F0000FF00000E00000E00000E00000E00001C00001C00001C000
+01C000038000038000038000038F800730600740700780700780700F00700E00700E0070
+0E00701C00E01C00E01C00E01C01C03801C03801C0380382380382700384700704700708
+700308E003106001E017257DA41B>I<00E000E001E000C0000000000000000000000000
+0000000000000E0033002380438043808700870087000E000E000E001C001C001C003800
+38403840708070807080710032001C000B247BA310>I<00F00007F00007F00000E00000
+E00000E00000E00001C00001C00001C00001C0000380000380000380000380F007010807
+021C07043C07083C0E10380E20000E40000E80001F00001FE0001C38001C1C00381C0038
+0E00380E10380E10701C20701C20701C20700C40E00C4060078016257DA418>107
+D<00E00FE00FE001C001C001C001C0038003800380038007000700070007000E000E000E
+000E001C001C001C001C0038003800380038007000700071007100E200E200E200640064
+0038000B257CA40D>I<1C07C03E00261830C18043203901C043403A01C043403A01C087
+803C01C087003801C087003801C007003801C00E007003800E007003800E007003800E00
+7007001C00E007001C00E007001C00E00E081C00E00E083801C00E103801C01C103801C0
+1C203801C00C207003800C40300180078025177B962B>I<1C07C0261830432038434038
+4340388780388700388700380700380E00700E00700E00700E00E01C00E01C00E01C01C1
+1C01C13801C23803823803843801847001883000F018177B961E>I<003F0000E1800180
+C00300E00700700E00701E00703C00703C00703800F07800F07800F07800F07001E0F001
+E0F001C07003C0700380700700300E00381C001C380007C00014177B961B>I<01C0F802
+610C04320E04340604380708700708700708700700700700E00F00E00F00E00F00E00F01
+C01E01C01E01C01C01C03C03803803C07003C06003C0C0072180071E000700000700000E
+00000E00000E00000E00001C00001C0000FFC000FFC00018217F961B>I<1C0F80261040
+4320E04341E04381E08781C08700008700000700000E00000E00000E00000E00001C0000
+1C00001C00001C000038000038000038000038000070000030000013177B9616>114
+D<003E0000C1000180800300400301C006038006010007000007800003F80003FE0001FF
+00001F00000780000380300180700180F00300F00300400600400C003038000FE0001217
+7D9616>I<00300070007000E000E000E000E001C001C001C07FFEFFFC03800380038007
+000700070007000E000E000E000E001C001C001C081C08381038103820184018C007000F
+217CA012>I<0E00301100702180704180704380708380E08380E08700E00700E00701C0
+0E01C00E01C00E01C01C03801C03801C03841C03841C07081C07081C07080C0B100E3310
+03C1E016177B961C>I<01E0F006310808321C083C3C103C3C1038382038002038000038
+0000700000700000700000700000E00000E00000E01000E01061C020F1C020F1C040E2E0
+80446100381E0016177D9618>120 D<0E00181300382180384180384380388380708380
+708700700700700700E00E00E00E00E00E00E01C01C01C01C01C01C01C01C01C03801C03
+801C07800C0F8006170003E700000700000700000E00600E00F01C00F01800E030008060
+0041C0003F000015217B961A>I E /Fk 60 126 df<001C003C007800F001E003C00780
+0F000E001C001C0038003800700070007000E000E000E000E000E000E000E000E000E000
+E000700070007000380038001C001C000E000F00078003C001E000F0007C003C001C0E2A
+78A41C>40 D<6000F00078003C001E000F00078003C001C000E000E00070007000380038
+0038001C001C001C001C001C001C001C001C001C001C0038003800380070007000E000E0
+01C003C007800F001E003C007800F00060000E2A7BA41C>I<00E00000E00000E00000E0
+0000E000C0E060F0E1E0FCE7E07EEFC01FFF0007FC0001F00007FC001FFF007EEFC0FCE7
+E0F0E1E0C0E06000E00000E00000E00000E00000E00013177C9B1C>I<001800003C0000
+3C00003C00003C00003C00003C00003C00003C00003C007FFFFCFFFFFEFFFFFE7FFFFC00
+3C00003C00003C00003C00003C00003C00003C00003C00003C0000180017187E9B1C>I<
+183E7E7F3F1F070E0E1CFCF8E0080D76851C>I<7FFFF0FFFFF8FFFFF87FFFF015047D91
+1C>I<3078FCFC7830060675851C>I<0000300000780000780000F80000F00001F00001E0
+0003E00003C00007C0000780000F80000F00001F00001E00001E00003E00003C00007C00
+00780000F80000F00001F00001E00003E00003C00003C00007C0000780000F80000F0000
+1F00001E00003E00003C00007C0000780000F80000F00000F0000060000015297DA41C>
+I<00F80003FE0007FF000F07801E03C01C01C03800E03800E0700070700070700070E000
+38E00038E00038E00038E00038E00038E00038E00038E00038E00038F000787000707000
+707800F03800E03C01E01C01C01E03C00F078007FF0003FE0000F80015217DA01C>I<00
+C00001C00001C00003C00007C0000FC0003FC000FDC000F9C00061C00001C00001C00001
+C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001
+C00001C00001C00001C00001C00001C0007FFF00FFFF807FFF0011217AA01C>I<01F800
+07FF001FFF803E07C07801E07000F0E00070E00038F00038F00038600038000038000038
+0000700000700000E00001E00001C0000380000780000F00001E00007C0000F80001E000
+03C0000780000F00001E00383C00387FFFF8FFFFF87FFFF815217DA01C>I<00FE0007FF
+800FFFE01F01F03C00703C00383C00381800380000380000380000700000700000E00003
+E001FFC001FFC001FFE00001F000007800003C00001C00000E00000E60000EF0000EF000
+0EE0001C70003C7800783F01F01FFFE007FFC000FE0017217EA01C>I<000F80001F8000
+1F80003B8000738000738000E38000E38001C38003C3800383800783800703800E03801E
+03801C03803C0380380380700380F00380FFFFFEFFFFFEFFFFFE00038000038000038000
+0380000380000380000380007FFC007FFC007FFC17217EA01C>I<3FFFE03FFFE03FFFE0
+38000038000038000038000038000038000038000038000038000038000039FC003FFF00
+3FFFC03E03E03800E0300070000070000038000038000038600038F00038F00038E00070
+7000F07801E03C07C01FFF800FFE0003F80015217DA01C>I<3078FCFC78300000000000
+0000000000003078FCFC7830061775961C>58 D<183C7E7E3C1800000000000000000000
+00183C7E7E3E1E0E0E1C3CF8F0C0071E76961C>I<0000300000F80001F80003F0000FE0
+001F80007F0000FE0003F80007F0000FC0003F80007E0000FC0000FC00007E00003F8000
+0FC00007F00003F80000FE00007F00001F80000FE00003F00001F80000F8000030151C7D
+9D1C>I<7FFFFCFFFFFEFFFFFE7FFFFC0000000000000000000000000000000000007FFF
+FCFFFFFEFFFFFE7FFFFC170E7E961C>I<600000F80000FC00007E00003F80000FC00007
+F00003F80000FE00007F00001F80000FE00003F00001F80001F80003F0000FE0001F8000
+7F0000FE0003F80007F0000FC0003F80007E0000FC0000F80000600000151C7D9D1C>I<
+FFFF00FFFFC0FFFFE01C00F01C00781C00381C001C1C001C1C001C1C001C1C001C1C0038
+1C00781C00F01FFFE01FFFC01FFFE01C01F01C00781C003C1C001C1C000E1C000E1C000E
+1C000E1C000E1C001E1C001C1C003C1C00F8FFFFF0FFFFE0FFFF8017217EA01C>66
+D<FFFE00FFFF80FFFFC01C03E01C01E01C00F01C00781C00381C003C1C001C1C001C1C00
+1C1C000E1C000E1C000E1C000E1C000E1C000E1C000E1C000E1C000E1C001E1C001C1C00
+1C1C003C1C00381C00781C00F01C01F01C03E0FFFFC0FFFF80FFFE0017217EA01C>68
+D<7FFFFEFFFFFE7FFFFE0E000E0E000E0E000E0E000E0E000E0E00000E00000E00000E00
+000E03800E03800E03800FFF800FFF800FFF800E03800E03800E03800E00000E00000E00
+000E00000E00000E00000E00000E00000E00007FE000FFF0007FE00017217EA01C>70
+D<007C3801FF3807FFF80F83F80E00F81C00F83C00783800383800387000387000387000
+00E00000E00000E00000E00000E00000E00000E003FEE003FEE003FE7000387000387000
+383800783800783C00781C00F80E01F80F83F807FFB801FF38007C3817217EA01C>I<7F
+E000FFF0007FE0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E
+00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E
+00040E000E0E000E0E000E0E000E0E000E7FFFFEFFFFFE7FFFFE17217EA01C>76
+D<7E003F00FF007F807F007F001D80DC001D80DC001D80DC001D80DC001DC1DC001DC1DC
+001CC19C001CC19C001CE39C001CE39C001C631C001C631C001C771C001C771C001C361C
+001C361C001C3E1C001C1C1C001C1C1C001C001C001C001C001C001C001C001C001C001C
+001C001C001C001C001C001C007F007F00FF80FF807F007F0019217FA01C>I<7FFF80FF
+FFE07FFFF80E00FC0E003E0E001E0E000E0E00070E00070E00070E00070E00070E000E0E
+001E0E003E0E00FC0FFFF80FFFE00FFF800E00000E00000E00000E00000E00000E00000E
+00000E00000E00000E00000E00007FC000FFE0007FC00018217FA01C>80
+D<FFFC0000FFFF0000FFFF80001C07C0001C01E0001C00E0001C00F0001C0070001C0070
+001C0070001C0070001C00F0001C00E0001C01E0001C07C0001FFF80001FFF00001FFF80
+001C07C0001C01C0001C00E0001C00E0001C00E0001C00E0001C00E0001C00E0001C00E1
+001C00E3801C00E3801C00E380FF807F00FF807F00FF801C0019217EA01C>82
+D<7FFFFF80FFFFFF80FFFFFF80E01C0380E01C0380E01C0380E01C0380E01C0380001C00
+00001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C00
+00001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C00
+00001C0000001C0000001C000001FFC00003FFE00001FFC00019217FA01C>84
+D<FF007F80FF80FF80FF007F801C001C001C001C001C001C000E0038000E0038000E0038
+000F0078000700700007007000070070000780F0000380E0000380E0000380E00003C1E0
+0001C1C00001C1C00001C1C00000C1800000E3800000E3800000E3800000630000007700
+00007700000077000000360000003E0000003E0000001C000019217FA01C>86
+D<600000F00000F00000F800007800007C00003C00003E00001E00001F00000F00000F80
+0007800007C00003C00003C00003E00001E00001F00000F00000F800007800007C00003C
+00003E00001E00001E00001F00000F00000F800007800007C00003C00003E00001E00001
+F00000F00000F800007800007800003015297DA41C>92 D<00C00003E0000FF8001F7C00
+7C1F00F80F80E0038011077BA01C>94 D<7FFFF0FFFFF8FFFFF87FFFF015047D7E1C>I<
+0FF8001FFE003FFF003C07801803C00001E00000E00000E0001FE001FFE00FFFE01FE0E0
+7E00E07800E0E000E0E000E0E000E0E000E07001E07C07E03FFFFF1FFE7F03F81F18177D
+961C>97 D<FE0000FE0000FE00000E00000E00000E00000E00000E00000E00000E00000E
+1F800E7FE00FFFF00FE0780F803C0F001C0F000E0E000E0E00070E00070E00070E00070E
+00070E00070E00070F000E0F000E0F801C0FC03C0FE0F80EFFF00E7FC0061F0018217FA0
+1C>I<00FF8003FFC00FFFE01F01E03C00C0380000700000700000E00000E00000E00000
+E00000E00000E00000E000007000007000703800703C00F01F01E00FFFC003FF8000FE00
+14177C961C>I<0007F00007F00007F00000700000700000700000700000700000700000
+7000F87003FE700FFFF01F07F03C01F03800F07000F0700070E00070E00070E00070E000
+70E00070E00070E000707000F07000F03801F03C03F01E07F00FFF7F07FE7F01F87F1821
+7EA01C>I<00FC0003FF000FFF801F03C03C01C03800E07000E0700070E00070E00070FF
+FFF0FFFFF0FFFFF0E00000E000007000007800703800703E00F01F01E00FFFC003FF8000
+FE0014177D961C>I<0003F8000FFC001FFE003C1E00380C007000007000007000007000
+0070007FFFFCFFFFFCFFFFFC007000007000007000007000007000007000007000007000
+0070000070000070000070000070000070000070000070000070003FFFE03FFFE03FFFE0
+17217FA01C>I<00F07E03FDFF0FFFFF0F0F861C03801C03803801C03801C03801C03801
+C03801C01C03801C03800F0F001FFF001FFC0038F0003800001C00001C00001FFF801FFF
+E03FFFF878007C70001CE0000EE0000EE0000EE0000EE0000E70001C78003C3F01F81FFF
+F007FFC000FE0018247E961C>I<FE000000FE000000FE0000000E0000000E0000000E00
+00000E0000000E0000000E0000000E0000000E1F80000E7FE0000FFFF0000FE070000F80
+38000F0038000F0038000E0038000E0038000E0038000E0038000E0038000E0038000E00
+38000E0038000E0038000E0038000E0038000E0038000E003800FFE3FF80FFE3FF80FFE3
+FF8019217FA01C>I<01C00003E00003E00003E00001C000000000000000000000000000
+0000000000007FE000FFE0007FE00000E00000E00000E00000E00000E00000E00000E000
+00E00000E00000E00000E00000E00000E00000E00000E00000E00000E000FFFFC0FFFFC0
+FFFFC012227BA11C>I<000E001F001F001F000E00000000000000000000000007FF0FFF
+07FF00070007000700070007000700070007000700070007000700070007000700070007
+000700070007000700070007000700070007000EF01EF03CFFF87FF01FC0102E7DA11C>
+I<FE0000FE0000FE00000E00000E00000E00000E00000E00000E00000E00000E1FFC0E1F
+FE0E1FFC0E01E00E03C00E07800E0F000E1E000E3C000E78000EFC000FFC000FDE000F8F
+000F07000E03800E03C00E01C00E00E00E00F0FFE3FEFFE3FFFFE3FE18217EA01C>I<7F
+F000FFF0007FF00000700000700000700000700000700000700000700000700000700000
+700000700000700000700000700000700000700000700000700000700000700000700000
+70000070000070000070000070000070007FFFF0FFFFF87FFFF015217DA01C>I<7CF078
+00FDF8FC007FFFFE001F9FCF001E0F07001E0F07001C0E07001C0E07001C0E07001C0E07
+001C0E07001C0E07001C0E07001C0E07001C0E07001C0E07001C0E07001C0E07001C0E07
+001C0E07007F1F8FC0FF9FCFE07F1F8FC01B1780961C>I<FE1F8000FE7FE000FFFFF000
+0FE070000F8038000F0038000F0038000E0038000E0038000E0038000E0038000E003800
+0E0038000E0038000E0038000E0038000E0038000E0038000E0038000E003800FFE3FF80
+FFE3FF80FFE3FF8019177F961C>I<01FC0007FF000FFF801F07C03C01E03800E0700070
+700070E00038E00038E00038E00038E00038E00038F000787000707800F03800E03C01E0
+1F07C00FFF8007FF0001FC0015177D961C>I<FE1F80FE7FE0FFFFF00FE0780F803C0F00
+1C0F000E0E000E0E00070E00070E00070E00070E00070E00070E00070F000E0F000E0F80
+1C0FC03C0FE0F80EFFF00E7FC00E1F000E00000E00000E00000E00000E00000E00000E00
+000E00000E0000FFE000FFE000FFE00018237F961C>I<00FC380003FF38000FFFB8001F
+03F8003C01F8003800F8007000780070007800E0003800E0003800E0003800E0003800E0
+003800E0003800E000380070007800700078003800F8003C01F8001F07F8000FFFB80003
+FE380000F838000000380000003800000038000000380000003800000038000000380000
+003800000038000003FF800003FF800003FF8019237E961C>I<FF81FCFF87FEFF9FFF03
+BE0F03F80603F00003E00003C00003C00003800003800003800003800003800003800003
+8000038000038000038000038000FFFF00FFFF80FFFF0018177E961C>I<07F9C01FFFC0
+3FFFC07807C0F003C0E001C0E001C0F001C07C00003FE0001FFE0003FF80001FC00001E0
+6000F0E00070E00070F00070F800E0FE03E0FFFFC0EFFF80E1FC0014177C961C>I<00C0
+0001C00001C00001C00001C00001C00001C0007FFFF8FFFFF8FFFFF801C00001C00001C0
+0001C00001C00001C00001C00001C00001C00001C00001C00001C01C01C01C01C01C01C0
+1C01C01C00E07800FFF8007FE0001F80161E7F9D1C>I<FE03F800FE03F800FE03F8000E
+0038000E0038000E0038000E0038000E0038000E0038000E0038000E0038000E0038000E
+0038000E0038000E0038000E0038000E0038000E0078000E00F8000701F80007FFFF8003
+FFBF8000FE3F8019177F961C>I<7FC1FF00FFE3FF807FC1FF000E0038000E0038000700
+700007007000070070000380E0000380E0000380E00001C1C00001C1C00001C1C00000E3
+800000E3800000E38000007700000077000000770000003E0000003E0000001C00001917
+7F961C>I<FFC1FF80FFC1FF80FFC1FF8038000E001C001C001C001C001C001C001C001C
+001C001C001C1C1C000E3E38000E3E38000E3638000E3638000E77380006773000067730
+0007637000076370000763700007E3F00003C1E00003C1E00019177F961C>I<7FC3FE00
+7FE3FF007FC3FE000780E0000381E00001C1C00001E3800000F78000007F0000003E0000
+003C0000001C0000003E00000077000000E7000000E3800001C1C0000381E0000780E000
+070070007FC1FF00FFE3FF807FC1FF0019177F961C>I<7FC1FF00FFE3FF807FC1FF000E
+0038000F0038000700700007007000038070000380E00003C0E00001C0E00001C1C00000
+E1C00000E1C00000E180000073800000738000007300000033000000370000001E000000
+1E0000001E0000001E0000001C0000001C0000003C000000380000003800003070000078
+F0000079E000007FC000003F8000001F00000019237F961C>I<0001F8000FF8001FF800
+3E0000780000700000700000700000700000700000700000700000700000700000700000
+700000700000F00003E000FFC000FF8000FFC00003E00000F00000700000700000700000
+7000007000007000007000007000007000007000007000007000007800003E00001FF800
+0FF80001F815297DA41C>123 D<60F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0
+F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F060042974A41C>I<7C0000FF8000FFC00003
+E00000F00000700000700000700000700000700000700000700000700000700000700000
+7000007000007800003E00001FF8000FF8001FF8003E0000780000700000700000700000
+700000700000700000700000700000700000700000700000700000F00003E000FFC000FF
+80007C000015297DA41C>I E /Fl 1 66 df<0000180000000018000000001800000000
+3C000000003C000000007E000000007E000000007E000000009F000000009F000000009F
+000000010F800000010F800000020FC000000207C000000207C000000403E000000403E0
+00000403E000000801F000000801F000001801F800001000F800001000F8000020007C00
+0020007C00003FFFFC00007FFFFE000040003E0000C0003F000080001F000080001F0001
+00001F800100000F800100000F8002000007C002000007C006000007E01F800007E0FFE0
+007FFFFFE0007FFF28297DA82F>65 D E /Fm 5 117 df<00C001C001C0018000000000
+000000000000000000001F80078003800700070007000700070007000E000E000E000E00
+0E000E001C001E00FF800A1D7F9C0C>105 D<1F8F8007B0C003C0E00780E00780E00700
+E00700E00700E00700E00E01C00E01C00E01C00E01C00E01C00E01C01C03801E03C0FF9F
+F014127F9117>110 D<00FC000307000E01801C01C03800C03000C07000E07000E07000
+E0E001C0E001C0E001C0600180600380700700380E001C180007E00013127E9115>I<03
+F20C0E18061004300438043E001FE00FF007F8003C401C400C400C6018E010D0608FC00F
+127F9110>115 D<020002000200060006000C001C003C00FFE01C001C00380038003800
+380038003800700070407040704070407080708031001E000B1A7C9910>I
+E /Fn 16 109 df<1838783808101020204080050B7D830C>44 D<3078F06005047C830C
+>46 D<007C000186000303000603000C03801C03801C0380380380380380380380700700
+700700700700700700E00E00E00E00E00E00E01C00E01C00E01800E0300060600030C000
+1F000011187C9714>48 D<000800180030007001F00E7000E000E000E000E001C001C001
+C001C0038003800380038007000700070007000F00FFE00D187C9714>I<007C00018600
+0203000403800483800883801083801083801083801107001207000C0E00001C00003000
+0060000180000200000C00001001002001003C060067FE00C1FC0080F00011187D9714>
+I<003E0000C3000101800201800481C00441C0088380048380070300000600000C0001F0
+00001800000C00000C00000E00000E00600E00E01C00E01C0080380040300020E0001F80
+0012187D9714>I<000300000380000700000700000700000E00000E00000E00001C0000
+1C0000180000300000300000600000C00000C600018E00030E00021C00041C00081C0010
+1C007FB800807F80003800003800007000007000007000007000006000111F7F9714>I<
+03018003FF0003FC000220000400000400000400000400000800000BE0000C1800081800
+001C00001C00001C00001C00201C00701C00E0380080300040700040E0002180001E0000
+11187C9714>I<001E000061800180800303800603800E00001C000018000038000039F0
+00721800740C00780E00700E00F00E00E00E00E00E00E00E00E01C00E01C006038006070
+0030C0001F800011187C9714>I<09C04017E0801FF1803C1F0030020060060040040080
+0C0000080000180000300000300000700000600000E00000C00001C00001C00001800003
+800003800003800007000003000012187B9714>I<003E0000C1800100800200C00600C0
+0600C00E018007030007860003CC0001F00001F800067C000C3E00181E00300700600700
+600700C00600C00600400C006018003070000FC00012187D9714>I<007C000186000703
+000E03000C03801C0380380380380380380380380780380700380F001817000C270007CE
+00000E00000C00001C00001800E03000E0600080C000C380003E000011187C9714>I<03
+CC0E2E181C381C301C701CE038E038E038E038C072C072C07260F261341E180F107C8F14
+>97 D<7E000E000E000E001C001C001C001C00380038003BC03C307830701870187018E0
+38E038E038E038C070C060C0E060C063801E000D1A7C9912>I<1F800003800003800003
+80000700000700000700000700000E00000E00000E7C000F86001E07001E07001C07001C
+0700380E00380E00380E00381C00701C80701C80703880703900E01900600E00111A7E99
+14>104 D<1F0707070E0E0E0E1C1C1C1C3838383870707070E4E4E4E4E830081A7D990A>
+108 D E /Fo 2 83 df<0FFFF9FFE000FF803E0000C3003C0000C3003C0000C3003C0000
+C3003C0000C3003C00018600780001860078000186007800018600780001860078000186
+007800030FFFF000030C00F000030C00F000030C00F000030C00F000030C00F000061801
+E000061801E000061801E000061801E000061801E000061801E0000C3003C0000FF803E0
+00FFFF3FFC00231C7E9B23>72 D<0FFFFF000000FF81E00000C300700000C300380000C3
+003C0000C3001C0000C3001E000186003C000186003C0001860038000186007000018601
+E0000186078000030FFC0000030C0F0000030C078000030C03C000030C03C000030C01E0
+00061803C000061803C000061803C000061803C000061803C000061803C0800C3003C100
+0FF801C100FFFF01C2000000007C00211D7E9B23>82 D E /Fp 7
+112 df<00C00000C00000C00000C00000C00000C00000C00000C000FFFF80FFFF8000C0
+0000C00000C00000C00000C00000C00000C00000C00011127E8D15>43
+D<1E0061804080C0C0C0C0C0C0C0C0C0C0C0C0C0C0408061801E000A0D7E8C0E>48
+D<18F818181818181818181818FF080D7D8C0E>I<3E00418080C0C0C000C000C0018003
+000400084030407F80FF800A0D7E8C0E>I<03C000C000C000C000C01EC031C040C0C0C0
+C0C0C0C040C021C01EF00C0E7E8D10>100 D<F7CF803870C03060C03060C03060C03060
+C03060C03060C0FDFBF014097E8818>109 D<1E0061804080C0C0C0C0C0C0408061801E
+000A097E880E>111 D E /Fq 9 113 df<0000600000600000E00000C00000C00001C000
+0180000380000300000300000700000600000600000E00000C00000C00001C0000180000
+380000300000300000700000600000600000E00000C00000C00001C00001800001800003
+80000300000700000600000600000E00000C00000C00001C000018000018000038000030
+0000700000600000600000E00000C00000C0000013317E8118>14
+D<0000300000600000C0000180000300000700000E00000C000018000038000030000070
+0000E00000C00001C0000180000380000380000300000700000600000E00000E00000C00
+001C00001C00001C00001800003800003800003800003800007000007000007000007000
+00700000700000700000E00000E00000E00000E00000E00000E00000E00000E00000E000
+00E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E000
+007000007000007000007000007000007000007000003800003800003800003800001800
+001C00001C00001C00000C00000E00000E00000600000700000300000380000380000180
+0001C00000C00000E000007000003000003800001800000C00000E000007000003000001
+800000C0000060000030146377811F>18 D<C000006000003000001800000C00000E0000
+07000003000001800001C00000C00000E000007000003000003800001800001C00001C00
+000C00000E000006000007000007000003000003800003800003800001800001C00001C0
+0001C00001C00000E00000E00000E00000E00000E00000E00000E0000070000070000070
+000070000070000070000070000070000070000070000070000070000070000070000070
+0000700000700000700000700000700000700000E00000E00000E00000E00000E00000E0
+0000E00001C00001C00001C00001C0000180000380000380000380000300000700000700
+000600000E00000C00001C00001C0000180000380000300000700000E00000C00001C000
+0180000300000700000E00000C0000180000300000600000C0000014637F811F>I<0018
+007800F001E003C007800F001F001E003E003C007C007C007800F800F800F800F800F800
+F800F800F800F800F800F800F800F800F800F800F800F800F800F800F800F800F800F800
+0D25707E25>56 D<F800F800F800F800F800F800F800F800F800F800F800F800F800F800
+F800F800F800F800F800F800F800F800F80078007C007C003C003E001E001F000F000780
+03C001E000F0007800180D25708025>58 D<007C007C007C007C007C007C007C007C007C
+007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C00F800F800F8
+00F001F001E003E003C0078007000E001C003800F000C000F00038001C000E0007000780
+03C003E001E001F000F000F800F800F8007C007C007C007C007C007C007C007C007C007C
+007C007C007C007C007C007C007C007C007C007C007C007C007C007C0E4D798025>60
+D<00300000FC0001CE000703801C00E0300030C0000C1607809E17>98
+D<07C0041FE018307830601FE0800F801605809D17>101 D<0000000002000000000600
+0000000C000000000C000000001800000000180000000030000000003000000000600000
+00006000000000C000000000C00000000180000000018000000003000000000300000000
+060000000006000000000C000000000C0000000018000000001800000000300000000030
+00000000600008000060001C0000C0003C0000C000CE000180000E000180000E00030000
+07000300000700060000038006000003800C000001C00C000001C018000001E018000000
+E030000000E0300000007060000000706000000038C000000038C00000001D800000001D
+800000001F000000000F000000000E000000000600000027327C812A>112
+D E /Fr 26 127 df<006000006000006000006000006000006000006000006000006000
+006000FFFFF0FFFFF0006000006000006000006000006000006000006000006000006000
+00600014167E9119>43 D<0F0030C0606060604020C030C030C030C030C030C030C030C0
+30C03040206060606030C00F000C137E9211>48 D<0C001C00EC000C000C000C000C000C
+000C000C000C000C000C000C000C000C000C000C00FFC00A137D9211>I<1F0060C06060
+F070F030603000700070006000C001C00180020004000810101020207FE0FFE00C137E92
+11>I<0FC030707038703870380038003000E00FC0007000380018001C601CF01CF018E0
+3860701FC00E137F9211>I<006000E000E00160026006600C600860106020606060C060
+FFFC0060006000600060006003FC0E137F9211>I<60607FC07F8044004000400040004F
+0070C040E0006000700070E070E070E06040E021C01F000C137E9211>I<07C00C201070
+207060006000C000CF00D0C0E060C020C030C030C03040306020206010C00F000C137E92
+11>I<40007FFC7FF8401080308020004000800100010003000200060006000E000E000E
+000E000E0004000E147E9311>I<0FC0107020186018601870183C303F600F800FE031F0
+6078C01CC00CC00CC00C601830300FC00E137F9211>I<0F00308060404060C020C030C0
+30C0304030607030B00F30003000200060E040E08041003E000C137E9211>I<40E04000
+00000000000040E040030D7D8C09>I<7F00E1C0E0404060006007E038606060C060C064
+C06461E43E380E0D7E8C11>97 D<F00030003000300030003000300033E034303808300C
+30063006300630063006300C3808343023E00F147F9312>I<0FE0187020706020C000C0
+00C000C000C0006000201018200FC00C0D7F8C0F>I<0078001800180018001800180018
+0F98187820386018C018C018C018C018C0186018203818580F9E0F147F9312>I<0F8010
+4020206030C010FFF0C000C000C0006000201018200FC00C0D7F8C0F>I<020702000000
+00000F030303030303030303030303030343E2E67C081B82940A>106
+D<F0303030303030303030303030303030303030FC06147F9309>108
+D<F3E1F0343218381C0C30180C30180C30180C30180C30180C30180C30180C30180C3018
+0CFC7E3F180D7F8C1B>I<0FC0186020106018C00CC00CC00CC00CC00C6018601838700F
+C00E0D7F8C11>111 D<F3E034303808300C30063006300630063006300C3808343033E0
+30003000300030003000FC000F137F8C12>I<F3C034E038E03040300030003000300030
+00300030003000FE000B0D7F8C0D>114 D<F83C301830103830182018200C400C400680
+06800680030003000E0D7F8C11>118 D<F87CF8707030305820305820188840188C4018
+8C400D04800D06800D0680060300060300060300150D7F8C18>I<38407F8087000A037D
+9311>126 D E /Fs 4 122 df<FFFFC0FFFFC012027D871A>0 D<040004000400C460F5
+E03F800E003F80F5E0C4600400040004000B0D7E8D11>3 D<040E0E1C1C1C3838307070
+6060C0C0070F7F8F0A>48 D<0C000C000C000C000C000C00FFC0FFC00C000C000C000C00
+0C000C000C000C000C000C000C000C000C000C000C000C000C000C000A1A7E9310>121
+D E /Ft 1 49 df<181818303030606060C0C0050B7E8B09>48 D
+E /Fu 40 122 df<03C0000C2080183080301900601900601A00601A00C01C00C0180040
+180060280020CD001F0700110D7E8C16>11 D<003C00C20103020304030402080608FC08
+FC08041006100610061006200C200C30183010486047C040004000800080008000800010
+1A7F9313>I<30F05B184C189C1898181818181830303030303030306060606000600060
+00C000C000C000800D137F8C11>17 D<038004400C601860106030603060606060607FE0
+FFC0C0C0C0C0C180C180C100C300C600440038000B147E9310>I<0C0C0C0C0C0C181818
+1818181818303030323032307278B46F1C60006000C000C000C00080000F137E8C14>22
+D<3FFE7FFEC44084400C400840084018C018C010C030C0306020600F0D7E8C13>25
+D<40E06020202040408003097D820A>59 D<000100000300000700000780000B80001B80
+0013800023800023800043800083800083C00101C003FFC00201C00401C00C01C00801C0
+1801E0FE07F815147F9319>65 D<07FFE000E03801C01801C01C01C01C01C01C03803803
+80700380E003FFC00700E00700700700300700380E00700E00700E00E00E00E01C0380FF
+FE0016147F9319>I<003F0800C0980300700600300C0030180030380020700000700000
+700000E00000E00000E00000E000406000806000803001003002000C1C0007E00015147E
+9318>I<07FFE000E07001C01801C00C01C00C01C00E03800E03800E03800E03800E0700
+1C07001C07001C0700380E00300E00700E00E00E01C01C0700FFFC0017147F931B>I<07
+FFFC00E01C01C00C01C00C01C00C01C00803810803810003830003FF0007020007020007
+02000700000E00000E00000E00000E00001C0000FFC00016147F9315>70
+D<003F8400E04C0380380600180C0018180018380010700000700000700000E00000E00F
+F8E000E0E000E06001C06001C03001C01803C00C058003F88016147E931A>I<07FC00E0
+01C001C001C001C0038003800380038007000700070007000E000E000E000E001C00FF80
+0E147F930F>73 D<07FC1FC000E0060001C0080001C0100001C0600001C0800003810000
+03860000038E0000039E0000076700000787000007038000070380000E01C0000E01C000
+0E00E0000E00E0001C00F000FF83FC001A147F931C>75 D<07FC0000E00001C00001C000
+01C00001C0000380000380000380000380000700000700000700000700200E00400E0040
+0E00800E01801C0780FFFF0013147F9317>I<07E01FC000E00600017004000170040001
+38040001380400021C0800021C0800020E0800020E080004071000040710000403900004
+0390000801E0000801E0000800E0000800E00018004000FE0040001A147F931A>78
+D<07FFC000E07001C01801C01C01C01C01C01C0380380380700380C003FF000701C00701
+C00700E00700E00E01C00E01C00E01C00E01C21C01C4FF807817147F9319>82
+D<07FC3F8000E01C0000F0100000702000007040000038800000390000003E0000001C00
+00001E0000001E0000003F00000067000000C7000001838000030380000603C0000401C0
+001C01E000FE07F80019147F931B>88 D<006001A0012003200220062004400C400C800D
+0019001A001C0018001800380058009810086007800C1480930E>96
+D<07B00C7010703060606060606060C0C0C0C8C0C841C862D03C700D0D7E8C12>I<3C00
+0C001800180018001800300033803C6030206030603060306030C060C06040C060802300
+1E000C147F930F>I<03C00C20187030E0600060006000C000C0004010602030C01F000C
+0D7F8C0F>I<003C000C0018001800180018003007B00C7010703060606060606060C0C0
+C0C8C0C841C862D03C700E147E9311>I<0780184030206040C040FF80C00080008000C0
+20C04061803E000B0D7E8C10>I<0018006C007C006C00C000C000C007F800C001800180
+018001800180030003000300030003000200060006006600E400C80070000E1A7F9310>
+I<01CC062C0C1C1818301830183018603060302030307010E00F600060006060C0E0C0C3
+807E000E137F8C10>I<1E0006000C000C000C000C00180019E01E301830383030303030
+30306060606460C460C8C0C8C0700E147E9313>I<06070600000000384C4C8C98181830
+323264643808147F930C>I<003000380030000000000000000001C00260043004600860
+0060006000C000C000C000C001800180018001806300E300C60078000D1A81930E>I<1E
+0006000C000C000C000C0018001838185C189C3118360038003F8061C060C860C860C8C0
+D0C0600E147F9312>I<30F8590C4E0C9C0C980C180C180C30183019303130316032601C
+100D7F8C15>110 D<0C78168C130426062606060606060C0C0C0C0C080C101A2019C018
+001800300030003000FC000F13818C11>112 D<03880C5818383030603060306030C060
+C060406060E021C01EC000C000C00180018001800FE00D137F8C0F>I<31E05A704C709C
+609800180018003000300030003000600060000C0D7F8C0F>I<0700188019C031803800
+1E000F0003804180E180C10082007C000A0D7E8C10>I<04000C000C000C001800FF8018
+001800300030003000300060006100610062006400380009127F910D>I<380C4C0C4C0C
+8C18981818181818303030323032307218B40F1C0F0D7F8C14>I<0E3C13CE238E430C43
+000300030006000608C608E610CA2071C00F0D7F8C13>120 D<380C4C0C4C0C8C189818
+18181818303030303030307018E00F60006000C0E0C0E18043003C000E137F8C11>I
+E /Fv 14 25 df<00000180000000018000000000C000000000C0000000006000000000
+6000FFFFFFF000FFFFFFF80000000018000000000C000000000600000000030000000003
+8000000001C000000000E00000000030FFFFFFFFFCFFFFFFFFFC26127E9501>0
+D<FFFFFFFFFCFFFFFFFFFC000000003000000000E000000001C000000003800000000300
+00000006000000000C000000001800FFFFFFF800FFFFFFF0000000006000000000600000
+0000C000000000C0000000018000000001800026127E8F05>4 D<000001800000000180
+00000000C000000000C000000000600000000060000000003000FFFFFFF8007FFFFFFC00
+0000000600000000030000000001C000000000E0FFFFFFFFFCFFFFFFFFFC00000000E000
+000001C0000000030000000006007FFFFFFC00FFFFFFF800000000300000000060000000
+006000000000C000000000C00000000180000000018000261C7E9709>8
+D<FFFFFFF07FFFFFE000000000000000000000000000000000FFFFFFF0FFFFFFF0000000
+000000000000000000000000007FFFFFE0FFFFFFF01C0E7E900B>10
+D<FF001FE0FF001FE01B027E8A20>I<001000001000000800000800000400000300FFFF
+C0FFFFC0000300000400000800000800001000001000120E7E9017>I<80000080000040
+000040000020000018000007FF8007FF8018000020000040000040000080000080000011
+0E7D9017>14 D<070000000FC0000018E000001830000030180000E0180180C00C038000
+0C060000060C0000038C000001F80000007000190C7D8F20>16 D<000000040000000002
+000000000200000000010000000000800000000060FFFFFFFFF8FFFFFFFFF00000000060
+00000000800000000100000000020000000002000000000400250E7E902A>I<02000000
+0004000000000400000000080000000010000000006000000000FFFFFFFFF0FFFFFFFFF0
+600000000010000000000800000000040000000004000000000200000000240E7D902A>
+I<0200000800040000040004000004000800000200100000010060000000C0FFFFFFFFF0
+FFFFFFFFE060000000C01000000100080000020004000004000400000400020000080024
+0E7D902A>I<000000040000000002000000000100000000010000000000C00000000020
+FFFFFFFFF8FFFFFFFFF825087E902A>22 D<FFFFFFFFF8FFFFFFFFF80000000020000000
+00C0000000010000000001000000000200000000040025087E8A2A>I<000C00000C0000
+0600FFFF80FFFF8011057E9D15>I E /Fw 25 121 df<FFFFFF80FFFFFF8019027D8A20>
+0 D<60F0F06004047C8B0C>I<400020C000606000C03001801803000C0600060C000318
+0001B00000E00000E00001B000031800060C000C06001803003001806000C0C000604000
+2013147A9320>I<0300030003000300C30CE31C73381FE0078007801FE07338E31CC30C
+03000300030003000E127D9215>I<003F800000C0600003001800040004000800020014
+000500220008802100108040802040404040408020802080110020800A00208004002080
+040020800A00208011002080208020404040404080204021001080220008801400050008
+000200040004000300180000C06000003F80001B1C7E9720>10 D<03C00FF01C38300C60
+066006C003C003C003C00360066006300C1C380FF003C010107E9115>14
+D<03C00FF01FF83FFC7FFE7FFEFFFFFFFFFFFFFFFF7FFE7FFE3FFC1FF80FF003C010107E
+9115>I<FFFFFFE07FFFFFE0000000000000000000000000000000000000000000000000
+0000000000000000FFFFFFE0FFFFFFE00000000000000000000000000000000000000000
+0000000000000000000000007FFFFFE0FFFFFFE01B167E9420>17
+D<000001800000078000001E00000078000001E00000078000000E00000038000000F000
+0003C000000F0000003C000000F0000000F00000003C0000000F00000003C0000000F000
+0000380000000E0000000780000001E0000000780000001E000000078000000180000000
+00000000000000000000000000000000000000000000000000000000007FFFFF00FFFFFF
+8019247D9920>20 D<0F8000201FE000203FF0002070780060601E0060C00F00C0C007C1
+C08001FF808000FF0080003E000F8000201FE000203FF0002070780060601E0060C00F00
+C0C007C1C08001FF808000FF0080003E001B147E9320>25 D<0006000000000C00000000
+0C000000001800000000380000000030000000007FFFFFF801FFFFFFF803800000000E00
+0000003C00000000F00000000038000000000E000000000700000000018000000000FFFF
+FFF8007FFFFFF8003000000000180000000018000000000C000000000C00000000060000
+0025187E952A>40 D<000003000000000180000000018000000000C000000000E0000000
+006000FFFFFFF000FFFFFFFC000000000E00000000038000000001E00000000078000000
+00E0000000038000000007000000000C00FFFFFFF800FFFFFFF0000000006000000000C0
+00000000C00000000180000000018000000003000025187E952A>I<007FF801FFF80780
+000E0000180000300000300000600000600000C00000C00000C00000FFFFF8FFFFF8C000
+00C00000C000006000006000003000003000001800000E000007800001FFF8007FF8151A
+7D961C>50 D<C0C0C0C0C0C0E0E0C0C0C0C0C0C0030E7E9000>55
+D<00000020000000E0000001E0000001E0000003E0000003E0000005E0000005E0000009
+E0000009E0000011E0000031E0000021E0000061E0000041E0000081E0000181E0000101
+E0000301E0000601E0000401E0000FFFF0001FFFF0003000F0003000F0006000F060C000
+F0718000F87F8000F8FF00007E7E00007C3C0000001F20809D21>65
+D<0001800000100003800000300003800000300003800000600007C00000E00007C00001
+E00005C00003E00005C00007E00005C00007E00005E0000DC00009E00019C00008E00033
+C00008E00073C00010F000E3C00010F001C3C00010700383C00020700303C00020780603
+800020780C038000403818078000403C38078000403C70078000801CE0078000801FC007
+8001001F80078001000F00078062000E000780FE00040007C0FC00000007F0FC00000003
+C07800000000002C1F7F9C32>77 D<0001FC000007FF0000083F8000300F800070078000
+E0078000E0060001E0040001E0000001F0000001F8000000FC0000007E0000003F800000
+1FE0000007F0000001F8000000FC0008007C0038003C0070003C0070003C00F0003800F0
+003800F8007000F80060007C0080007F0300003FFC00000FF00000191E7F9C19>83
+D<400002C00006C00006C00006C00006C00006C00006C00006C00006C00006C00006C000
+06C00006C00006C00006C00006C00006C00006C0000660000C60000C3000181C00700F01
+E003FF8000FE00171A7E981C>91 D<00FE0003FF800F01E01C007030001860000C60000C
+C00006C00006C00006C00006C00006C00006C00006C00006C00006C00006C00006C00006
+C00006C00006C00006C00006C00006C00006400002171A7E981C>I<003C00E001C00180
+0380038003800380038003800380038003800380038003800380030007001C00F0001C00
+070003000380038003800380038003800380038003800380038003800380018001C000E0
+003C0E297D9E15>102 D<F0001C00070003000380038003800380038003800380038003
+800380038003800380018001C000E0003C00E001C0018003800380038003800380038003
+80038003800380038003800380030007001C00F0000E297D9E15>I<004000C001800180
+0180030003000600060006000C000C0018001800180030003000600060006000C000C000
+600060006000300030001800180018000C000C0006000600060003000300018001800180
+00C000400A2A7D9E10>I<C000C000600060006000300030001800180018000C000C0006
+00060006000300030001800180018000C000C0018001800180030003000600060006000C
+000C0018001800180030003000600060006000C000C0000A2A7E9E10>I<C0C0C0C0C0C0
+C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C002
+297B9E0C>I<1F00308070406060E0E0E0E0E040E00060007000300018001C0033007180
+61C0E0C0E0E0E0E0E0E060E070C031C0198007000300018001C000C000E040E0E0E0E0E0
+C0C041C021801F000B257D9C12>120 D E /Fx 91 127 df<60F0F0F0F0F0F0F0F0F0F0
+F0F0F0600000000060F0F0600417789614>33 D<C060E0E0E0E0E0E0E0E0C060C060C060
+C060C06040400B0B7C9614>I<071C00071C00071C00071C00071C00FFFF80FFFF807FFF
+800E38000E38000E38000E38000E38000E38000E38007FFF80FFFF80FFFF801C70001C70
+001C70001C70001C700011177F9614>I<00800180018007E01FF039BC619CC18EC18EC1
+8EE18471807F801FE00FF001F8019C018E4186E186E186E186718C39B81FF00FC0018001
+8000800F1D7E9914>I<3806007C0E006C0E00EE1C00EE1C00EE3800EE38006C38007C70
+0038700000700000E00000E00001C00001C00001C000038000038000070000070E00071F
+000E1B000E3B800E3B801C3B801C3B80381B00381F00180E00111D7F9914>I<0700000F
+800018C00038E00038E00038E00038C00039CF80398F801F1C001E1C001E1C000E38001E
+3800377000677000E3F000E3E000E1C380E1E38063F3803F3F001E1E0011177F9614>I<
+60F0F878181818303060C080050C789614>I<0180038006000C001C0018003800700070
+007000E000E000E000E000E000E000E000E000E000700070007000380018001C000C0006
+0003800180091D799914>I<80C0603038181C0E0E0E0707070707070707070E0E0E1C18
+383060C080081D7C9914>I<038003800380638CF39E7FFC3FF80FE00FE03FF87FFCF39E
+638C0380038003800F107E9214>I<01C00001C00001C00001C00001C00001C00001C000
+FFFF80FFFF80FFFF8001C00001C00001C00001C00001C00001C00001C00011117F9314>
+I<70F8FCFC7C0C1830E0C0060A798414>I<FFFEFFFEFFFE0F037E8C14>I<70F8F8F87005
+05798414>I<0006000E000E001C001C003800380070007000E000E001C001C003800380
+0380070007000E000E001C001C003800380070007000E000E000C0000F1D7E9914>I<07
+C00FE01C7038383018701C701CE00EE00EE00EE00EE00EE00EE00EE00EE00E701C701C38
+3838381C700FE007C00F177E9614>I<0300030007000F003F00F7004700070007000700
+070007000700070007000700070007000700070007007FF07FF00C177C9614>I<0FC01F
+F03838701CE00EE00EE00E400E000E001C001C00380030007000E001C0030006000C0018
+0E300E7FFE7FFE0F177E9614>I<0FC01FF03838701C701C201C001C0018003800700FE0
+0FF00038001C000E000E400EE00EE00E701C78383FF00FC00F177E9614>I<00780000F8
+0001B80001B8000338000338000638000E38000C38001C3800383800303800703800E038
+00FFFF80FFFF8000380000380000380000380000380001FF0001FF0011177F9614>I<7F
+FC7FFC700070007000700070007000700077C07FF07838601C000C000E000E400EE00EE0
+1C601C78783FF00FC00F177E9614>I<01F007F80E1C1C1C381C300070007000E000E7C0
+EFF0F838F01CF00CE00EE00E600E700E700C381C1C380FF007C00F177E9614>I<E000FF
+FEFFFEE01CE0380030007000E000C001C001800380038007000700070007000E000E000E
+000E000E000E0004000F187E9714>I<0FE03FF8783C701CE00EE00EE00EE00E701C1EF0
+03801FF03838701CE00EE00EE00EE00EF01E701C38381FF007C00F177E9614>I<07C01F
+E038307038601CE01CE00CE00EE00E601E701E383E1FEE07CE000E001C001C001C703870
+3070E03FC01F000F177E9614>I<70F8F8F87000000000000070F8F8F8700510798F14>I<
+70F8F8F87000000000000060F0F8F878183070E0800515798F14>I<0006001E003E00F8
+01F003C00F801F003C00F800F000F8003C001F000F8003C001F000F8003E001E00060F15
+7E9514>I<FFFF80FFFF807FFF800000000000000000007FFF80FFFF80FFFF8011097F8F
+14>I<C000F000F8003E001F00078003E001F00078003E001E003E007801F003E007801F
+003E00F800F000C0000F157E9514>I<1FE03FF8701CE00EE00E400E003C007000E001C0
+03800380038003800300000000000000000003000780078003000F177E9614>I<01C000
+03E00003E0000360000360000770000770000770000770000630000E38000E38000E3800
+0E38001C1C001FFC001FFC001C1C001C1C00380E00380E00FE3F80FE3F8011177F9614>
+65 D<FFF0FFFC381E380E3807380738073807380E381E3FFC3FFC381E380E3807380738
+0738073807380E381EFFFCFFF810177F9614>I<01F18007FF800E1F801C078038078070
+0380700380700380E00000E00000E00000E00000E00000E00000E0000070038070038070
+03803807001C07000E0E0007FC0001F00011177F9614>I<FFE000FFF800383C00381E00
+380E00380700380700380700380380380380380380380380380380380380380380380380
+380700380700380E00381E00383C00FFF800FFE00011177F9614>I<FFFF00FFFF003807
+003807003807003807003800003800003838003838003FF8003FF8003838003838003800
+00380000380000380380380380380380380380FFFF80FFFF8011177F9614>I<FFFF80FF
+FF803803803803803803803803803800003800003838003838003FF8003FF80038380038
+3800380000380000380000380000380000380000380000FF0000FF000011177F9614>I<
+03C60FFE1C3E181E381E700E700E600EE000E000E000E000E07FE07FE00E600E700E700E
+381E181E1C3E0FFE03CE10177F9614>I<FE3F80FE3F80380E00380E00380E00380E0038
+0E00380E00380E00380E003FFE003FFE00380E00380E00380E00380E00380E00380E0038
+0E00380E00380E00FE3F80FE3F8011177F9614>I<FFF8FFF80700070007000700070007
+000700070007000700070007000700070007000700070007000700FFF8FFF80D177D9614
+>I<FE3F00FE3F00381C0038380038780038700038E00039E00039C0003B80003FC0003F
+E0003EE0003CF0003C7000387800383800381C00381C00380E00380E00FE1F80FE1F8011
+177F9614>75 D<FF00FF0038003800380038003800380038003800380038003800380038
+00380038003807380738073807FFFFFFFF10177E9614>I<FC1F80FC1F807C1F00763700
+76370076370076370077770077770073670073670073670073E70071C70071C700700700
+700700700700700700700700700700F80F80F80F8011177F9614>I<FE3F80FE3F803E0E
+003B0E003B0E003B0E003B0E003B8E00398E00398E0039CE0039CE0039CE0038CE0038CE
+0038EE00386E00386E00386E00386E00383E00FE3E00FE3E0011177F9614>I<1FF07FFC
+783C701CE00EE00EE00EE00EE00EE00EE00EE00EE00EE00EE00EE00EE00EE00EE00E701C
+783C7FFC1FF00F177E9614>I<FFF0FFFC381E380E38073807380738073807380E381E3F
+FC3FF038003800380038003800380038003800FE00FE0010177F9614>I<FFE000FFF800
+383C00381C00380E00380E00380E00380E00381C00383C003FF8003FF000383800381C00
+381C00381C00381C00381C00381C80381DC0381DC0FE0F80FE070012177F9614>82
+D<0FCC1FFC307C603CE01CE01CE01CE00070007E003FE00FF001F8001C001E000E600EE0
+0EE00EF01CF838FFF0C7E00F177E9614>I<7FFF80FFFF80E1C380E1C380E1C380E1C380
+01C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000
+01C00001C00001C0000FF8000FF80011177F9614>I<FE0FE0FE0FE03803803803803803
+803803803803803803803803803803803803803803803803803803803803803803803803
+803803801C07001C07000E0E0007FC0001F0001317809614>I<FC1F80FC1F80380E0038
+0E00380E003C1E001C1C001C1C001C1C001C1C000E38000E38000E38000E380006300007
+700007700007700003600003600003E00003E00001C00011177F9614>I<FC1F80FC1F80
+70070070070070070070070070070070070070070031C60033E6003BEE003B6E003B6E00
+3B6E003B6E003B6E001B6C001B6C001A2C001E3C001E3C001E3C0011177F9614>I<7E3E
+007E3E001C3C001E38000E78000F700007700007E00003E00003C00001C00003C00003E0
+0003E0000770000770000E78000E38001C3C001C1C003C1E00FE3F80FE3F8011177F9614
+>I<FC1F80FC1F80380E003C1E001C1C001E3C000E38000E380007700007700003600003
+E00003E00001C00001C00001C00001C00001C00001C00001C00001C00007F00007F00011
+177F9614>I<7FFEFFFEE01CE01CE038E038007000E000E001C001C00380070007000E00
+0E001C00380E380E700E700EFFFEFFFE0F177E9614>I<FFE0FFE0E000E000E000E000E0
+00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
+00E000E000FFE0FFE00B1D799914>I<C000E000E00070007000380038001C001C000E00
+0E000700070003800380038001C001C000E000E00070007000380038001C001C000E000E
+00060F1D7E9914>I<FFE0FFE000E000E000E000E000E000E000E000E000E000E000E000
+E000E000E000E000E000E000E000E000E000E000E000E000E000E0FFE0FFE00B1D7F9914
+>I<04001F007FC0F1E0E0E00B057C9614>I<FFFEFFFEFFFE0F037E7E14>I<0818306060
+C0C0C0F0F87830050C799914>I<1FC0007FF000707800201800001C00001C0007FC001F
+FC003C1C00701C00E01C00E01C00E01C00707C003FFF800F8F8011107E8F14>I<FC0000
+FC00001C00001C00001C00001C00001C00001CF8001DFE001F07001E03001C03801C01C0
+1C01C01C01C01C01C01C01C01C01C01C03801E03001F0E001DFC000CF8001217809614>
+I<03F80FFE1C0E380470006000E000E000E000E00060007000380E1C1E0FFC03F00F107E
+8F14>I<007E00007E00000E00000E00000E00000E00000E0007CE000FFE001C3E00301E
+00700E00E00E00E00E00E00E00E00E00E00E00E00E00700E00301E00383E001FEFC007CF
+C012177F9614>I<07E00FF01C38301C700CE00EE00EFFFEFFFEE00060007000380E1C1E
+0FFC03F00F107E8F14>I<00FC01FE038E07040700070007007FFEFFFE07000700070007
+0007000700070007000700070007000700FFF8FFF80F177F9614>I<07CF001FFF80383B
+80301800701C00701C00701C003018003838003FF00037C0007000007000003FF8001FFC
+003FFE00700F00E00380E00380E00380E003807007003C1E001FFC0007F00011197F8F14
+>I<FC0000FC00001C00001C00001C00001C00001C00001C78001DFE001F86001E07001C
+07001C07001C07001C07001C07001C07001C07001C07001C07001C0700FF8FE0FF8FE013
+17809614>I<06000F000F0006000000000000000000FF00FF0007000700070007000700
+0700070007000700070007000700FFF8FFF80D187C9714>I<006000F000F00060000000
+00000000001FF01FF0007000700070007000700070007000700070007000700070007000
+70007000700070007040E0E0C07F803F000C207E9714>I<FC0000FC00001C00001C0000
+1C00001C00001C00001CFF801CFF801C1C001C38001C70001CE0001DC0001FE0001FE000
+1E70001C38001C3C001C1C001C0E00FF1F80FF1F801117809614>I<FF80FF8003800380
+03800380038003800380038003800380038003800380038003800380038003800380FFFE
+FFFE0F177E9614>I<FB8E00FFDF003CF3803CF38038E38038E38038E38038E38038E380
+38E38038E38038E38038E38038E380FEFBE0FE79E01310808F14>I<FC7800FDFE001F86
+001E07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700FF8F
+E0FF8FE01310808F14>I<07C01FF03C78701C701CE00EE00EE00EE00EE00EE00E701C78
+3C3C781FF007C00F107E8F14>I<FCF800FDFE001F07001E03001C03801C01C01C01C01C
+01C01C01C01C01C01C01C01C03801E03001F0E001DFC001CF8001C00001C00001C00001C
+00001C00001C0000FF8000FF80001218808F14>I<03E7000FF7001C1F00300F00700F00
+E00700E00700E00700E00700E00700E00700700F00300F001C3F000FF70007C700000700
+000700000700000700000700000700003FE0003FE013187F8F14>I<FE1F00FE7F800EE3
+800F81000F00000F00000E00000E00000E00000E00000E00000E00000E00000E0000FFF0
+00FFF00011107F8F14>I<0FD83FF86038C038C038F0007F803FF007F8001C6006E006F0
+06F81CFFF8CFE00F107E8F14>I<06000E000E000E000E007FFCFFFC0E000E000E000E00
+0E000E000E000E000E0E0E0E0E0E0E1C07F801F00F157F9414>I<FC3F00FC3F001C0700
+1C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C1F000FFFE0
+03E7E01310808F14>I<FE3F80FE3F803C1E001C1C001C1C001C1C000E38000E38000E38
+0006300007700007700007700003E00003E00003E00011107F8F14>I<FE3F80FE3F8070
+0700380E00380E00380E0039CE0039CE0039CE001B6C001A6C001A6C001A6C001E7C001E
+7C000E380011107F8F14>I<7E3F007E3F001E3C000E780007700007E00003E00001C000
+03C00003E0000770000E78000E38001C1C00FE3F80FE3F8011107F8F14>I<FE3F80FE3F
+801C0E001C1C001C1C000E1C000E38000E380007380007300007300003700003700003E0
+0001E00001E00001C00001C00001C0000380007380007700007E00003C000011187F8F14
+>I<3FFF7FFF700E701C7038007000E001C0038007000E001C0738077007FFFFFFFF1010
+7F8F14>I<003E00FE01E003800380038003800380038003800380038003807F00FE007F
+00038003800380038003800380038003800380038001E000FE003E0F1D7E9914>I<E0E0
+E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0031D789914>I<7800
+FE000F00038003800380038003800380038003800380038001FC00FE01FC038003800380
+03800380038003800380038003800F00FE0078000F1D7E9914>I<1C103F38E7E041C00D
+047D9614>I E /Fy 54 122 df<0003FE00001FFF80007F03C001F803E003F007E003F0
+07E007E007E007E007E007E007E007E0018007E0000007E0000007E0000007E03FF0FFFF
+FFF0FFFFFFF007E003F007E003F007E003F007E003F007E003F007E003F007E003F007E0
+03F007E003F007E003F007E003F007E003F007E003F007E003F007E003F007E003F007E0
+03F007E003F007E003F007E003F007E003F007E003F07FFE3FFF7FFE3FFF20287FA724>
+12 D<0003FFF0001FFFF0007E07F001F807F003F00FF003F00FF007E007F007E003F007
+E003F007E003F007E003F007E003F007E003F007E003F0FFFFFFF0FFFFFFF007E003F007
+E003F007E003F007E003F007E003F007E003F007E003F007E003F007E003F007E003F007
+E003F007E003F007E003F007E003F007E003F007E003F007E003F007E003F007E003F007
+E003F007E003F007E003F07FFE3FFF7FFE3FFF20287FA724>I<3C7EFFFFFFFF7E3C0808
+7B8712>46 D<003FC00001FFF80007E07E000FC03F001F801F801F000F803F000FC03F00
+0FC07E0007E07E0007E07E0007E07E0007E0FE0007F0FE0007F0FE0007F0FE0007F0FE00
+07F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE00
+07F07E0007E07E0007E07E0007E03F000FC03F000FC01F000F801F801F800FC03F0007E0
+7E0001FFF800003FC0001C257EA421>48 D<000E00001E0000FE000FFE00FFFE00F0FE00
+00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00
+00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00
+00FE0000FE0000FE0000FE0000FE00FFFFFEFFFFFE17257BA421>I<00FF800007FFF000
+1E03FC003800FE0078007F007E007F80FF003F80FF003FC0FF003FC0FF001FC07E001FC0
+3C001FC000003FC000003F8000003F8000007F0000007F000000FE000000FC000001F000
+0003E0000007C000000F8000001E0000001C00C0003800C0007000C000C0018001800180
+0300018007FFFF800FFFFF801FFFFF803FFFFF807FFFFF00FFFFFF00FFFFFF001A257DA4
+21>I<00FF800007FFF0000F01FC001C007E003E007F007F003F807F803F807F803F807F
+803F807F807F803F007F000C007F0000007E000000FC000001F8000007F00000FFC00000
+FF80000001F0000000FC0000007E0000007F0000003F8000003F801C003FC03E003FC07F
+003FC0FF803FC0FF803FC0FF803F80FF803F807F007F807E007F003800FE001F01FC0007
+FFF00000FF80001A257DA421>I<00000E0000001E0000003E0000003E0000007E000000
+FE000001FE000003FE0000077E0000067E00000C7E00001C7E0000387E0000707E000060
+7E0000C07E0001C07E0003807E0007007E000E007E000C007E0018007E0038007E007000
+7E00E0007E00FFFFFFF0FFFFFFF00000FE000000FE000000FE000000FE000000FE000000
+FE000000FE000000FE00003FFFF0003FFFF01C257EA421>I<180006001F803E001FFFFC
+001FFFF8001FFFF0001FFFE0001FFF80001FFE0000180000001800000018000000180000
+001800000018000000187F80001BFFF0001F81FC001C007E0008007F0000003F0000003F
+8000003F8000003FC000003FC03C003FC07E003FC0FF003FC0FF003FC0FF003FC0FE003F
+807C003F8060007F0030007E001C00FC000F03F80007FFE00000FF00001A257DA421>I<
+000FF000003FFC0000F80E0003E0070007C01F800F803F801F803F801F003F803F003F80
+3F001F007E0000007E0000007E000000FE000000FE1FE000FE7FF800FE407C00FE803E00
+FF001F00FF001F80FF001F80FE001FC0FE001FC0FE001FC0FE001FC07E001FC07E001FC0
+7E001FC07E001FC03E001F803F001F801F001F000F003F000F803E0003E0F80001FFF000
+007FC0001A257DA421>I<300000003C0000003FFFFFE03FFFFFE03FFFFFC07FFFFF807F
+FFFF007FFFFE007FFFFC0060000C006000180060003000C0006000C000C000C001800000
+0180000003000000070000000E0000000E0000001E0000001E0000003E0000003C000000
+7C0000007C000000FC000000FC000000FC000000FC000001FC000001FC000001FC000001
+FC000001FC000001FC000001FC000000F80000007000001B277CA621>I<007FC00003FF
+F80007007C001C001E0018000F003800078038000780780007807C0007807F0007807FC0
+07007FE00F003FF81E003FFE3C001FFF78000FFFE00007FFF00003FFF80003FFFE0007FF
+FF001F1FFF003C07FF803C01FF807800FFC078003FC0F0000FC0F00007C0F00003C0F000
+03C0F0000380F8000380780003003C0007003E000E000F807C0007FFF00000FF80001A25
+7DA421>I<007F800003FFE00007C0F8000F807C001F003E003E003E007E001F007E001F
+00FE001F80FE001F80FE001F80FE001F80FE001FC0FE001FC0FE001FC0FE001FC07E003F
+C07E003FC03E007FC01F005FC00F809FC007FF9FC001FE1FC000001FC000001F8000001F
+8000001F803E003F007F003F007F003E007F003E007F007C007E00F8003801F0001C07E0
+000FFF800003FC00001A257DA421>I<3C7EFFFFFFFF7E3C000000000000000000003C7E
+FFFFFFFF7E3C081A7B9912>I<00000600000000000F00000000000F00000000001F8000
+0000001F80000000001F80000000003FC0000000003FC0000000007FE0000000007FE000
+0000007FE000000000DFF000000000CFF000000001CFF80000000187F80000000187F800
+00000307FC0000000303FC0000000703FE0000000601FE0000000601FE0000000C00FF00
+00000C00FF0000001800FF80000018007F80000018007F80000030003FC000003FFFFFC0
+00007FFFFFE0000060001FE00000E0001FF00000C0000FF00000C0000FF0000180000FF8
+0001800007F80003800007FC0003000003FC0007800003FC00FFF8007FFFF0FFF8007FFF
+F02C287EA731>65 D<FFFFFFF800FFFFFFFF0003F8003FC003F8000FE003F80007F003F8
+0003F803F80003F803F80003FC03F80003FC03F80001FC03F80001FC03F80003FC03F800
+03FC03F80003F803F80007F803F80007F003F8000FE003F8003FC003FFFFFF0003FFFFFF
+0003F8003FC003F8000FE003F80007F003F80003F803F80003FC03F80001FC03F80001FE
+03F80001FE03F80001FE03F80001FE03F80001FE03F80001FE03F80001FC03F80003FC03
+F80003FC03F80007F803F8000FF003F8003FE0FFFFFFFF80FFFFFFFC0027287EA72E>I<
+00007FC0040007FFF80C001FE01E1C007F00073C01FC0001FC03F80000FC07F000007C0F
+E000007C0FC000003C1FC000001C3F8000001C3F8000001C7F8000000C7F0000000C7F00
+00000CFF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF0000
+0000FF00000000FF00000000FF000000007F000000007F0000000C7F8000000C3F800000
+0C3F8000000C1FC00000180FC00000180FE000003007F000003003F800006001FC0001C0
+007F000380001FE01E000007FFF80000007FC00026287CA72F>I<FFFFFFF80000FFFFFF
+FF000003FC003FC00003FC000FE00003FC0003F80003FC0001FC0003FC0000FE0003FC00
+007E0003FC00007F0003FC00003F8003FC00003F8003FC00001F8003FC00001FC003FC00
+001FC003FC00001FC003FC00001FE003FC00001FE003FC00001FE003FC00001FE003FC00
+001FE003FC00001FE003FC00001FE003FC00001FE003FC00001FE003FC00001FE003FC00
+001FC003FC00001FC003FC00001FC003FC00001FC003FC00003F8003FC00003F8003FC00
+003F0003FC00007F0003FC0000FE0003FC0001FC0003FC0003F80003FC0007F00003FC00
+3FC000FFFFFFFF0000FFFFFFF800002B287EA732>I<FFFFFFFFC0FFFFFFFFC003FC001F
+C003FC0007E003FC0001E003FC0000E003FC0000E003FC00006003FC00006003FC000060
+03FC00003003FC01803003FC01803003FC01800003FC01800003FC03800003FC03800003
+FC0F800003FFFF800003FFFF800003FC0F800003FC03800003FC03800003FC01800003FC
+01800003FC01800C03FC01800C03FC00000C03FC00001C03FC00001803FC00001803FC00
+001803FC00003803FC00003803FC00007803FC0000F803FC0001F003FC000FF0FFFFFFFF
+F0FFFFFFFFF026287EA72B>I<FFFFFFFF80FFFFFFFF8003FC003F8003FC0007C003FC00
+03C003FC0001C003FC0001C003FC0000C003FC0000C003FC0000C003FC00006003FC0000
+6003FC01806003FC01800003FC01800003FC01800003FC03800003FC03800003FC0F8000
+03FFFF800003FFFF800003FC0F800003FC03800003FC03800003FC01800003FC01800003
+FC01800003FC01800003FC00000003FC00000003FC00000003FC00000003FC00000003FC
+00000003FC00000003FC00000003FC00000003FC000000FFFFFC0000FFFFFC000023287E
+A729>I<00007FC004000007FFF80C00001FE01E1C00007F00073C0001FC0001FC0003F8
+0000FC0007F000007C000FE000007C000FC000003C001FC000001C003F8000001C003F80
+00001C007F8000000C007F0000000C007F0000000C00FF0000000000FF0000000000FF00
+00000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF00
+03FFFFC0FF0003FFFFC07F000003FC007F800003FC007F800003FC003F800003FC003F80
+0003FC001FC00003FC000FC00003FC000FE00003FC0007F00003FC0003F80003FC0001FC
+0007FC00007F000EFC00001FE03C7C000007FFF03C0000007FC00C002A287CA733>I<FF
+FFF0FFFFF003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003
+FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003
+FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC0003
+FC0003FC00FFFFF0FFFFF014287EA718>73 D<FFFFF80000FFFFF8000003FC00000003FC
+00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00
+000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC0000
+0003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC000000
+03FC00018003FC00018003FC00018003FC00038003FC00030003FC00030003FC00070003
+FC00070003FC000F0003FC000F0003FC001F0003FC007E0003FC01FE00FFFFFFFE00FFFF
+FFFE0021287EA727>76 D<FFFC0000001FFF80FFFE0000003FFF8003FE0000003FE00003
+7F0000006FE000037F0000006FE000037F0000006FE000033F800000CFE000033F800000
+CFE000031FC000018FE000031FC000018FE000030FE000030FE000030FE000030FE00003
+07F000060FE0000307F000060FE0000303F8000C0FE0000303F8000C0FE0000303F8000C
+0FE0000301FC00180FE0000301FC00180FE0000300FE00300FE0000300FE00300FE00003
+007F00600FE00003007F00600FE00003003F80C00FE00003003F80C00FE00003003F80C0
+0FE00003001FC1800FE00003001FC1800FE00003000FE3000FE00003000FE3000FE00003
+0007F6000FE000030007F6000FE000030003FC000FE000030003FC000FE000030001F800
+0FE000030001F8000FE000030001F8000FE000078000F0000FE000FFFC00F003FFFF80FF
+FC006003FFFF8039287EA73E>I<FFFC0000FFFCFFFE0000FFFC03FF0000078003FF8000
+0300037FC0000300033FE0000300031FE0000300031FF0000300030FF80003000307FC00
+03000303FE0003000301FF0003000300FF00030003007F80030003007FC0030003003FE0
+030003001FF0030003000FF80300030007FC0300030003FC0300030003FE0300030001FF
+0300030000FF83000300007FC3000300003FE3000300001FE3000300001FF3000300000F
+FB0003000007FF0003000003FF0003000001FF0003000000FF00030000007F0003000000
+7F00030000003F00030000001F00030000000F00078000000700FFFC00000300FFFC0000
+03002E287EA733>I<FFFFFFF000FFFFFFFE0003FC007F8003FC001FE003FC0007F003FC
+0007F003FC0003F803FC0003F803FC0003FC03FC0003FC03FC0003FC03FC0003FC03FC00
+03FC03FC0003FC03FC0003F803FC0003F803FC0007F003FC0007F003FC001FE003FC007F
+8003FFFFFE0003FFFFF00003FC00000003FC00000003FC00000003FC00000003FC000000
+03FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003
+FC00000003FC00000003FC00000003FC000000FFFFF00000FFFFF0000026287EA72D>80
+D<FFFFFFE00000FFFFFFFC000003FC007F800003FC001FC00003FC000FE00003FC0007F0
+0003FC0003F80003FC0003F80003FC0003FC0003FC0003FC0003FC0003FC0003FC0003FC
+0003FC0003FC0003FC0003F80003FC0003F80003FC0007F00003FC000FE00003FC001FC0
+0003FC007F800003FFFFFC000003FFFFFC000003FC00FF000003FC003F800003FC001FC0
+0003FC001FE00003FC000FF00003FC000FF00003FC000FF00003FC000FF00003FC000FF0
+0003FC000FF00003FC000FF00003FC000FF00003FC000FF00003FC000FF00C03FC0007F0
+0C03FC0007F81803FC0003FC38FFFFF000FFF0FFFFF0003FC02E287EA731>82
+D<00FF004003FFE0C00F80F9C01E001FC03C000FC0780003C0780003C0780001C0F80001
+C0F80000C0F80000C0FC0000C0FE000000FF000000FFE000007FFF00007FFFE0003FFFF8
+001FFFFE000FFFFF0007FFFF8001FFFF80007FFFC00003FFC000003FE000000FE0000007
+E0000007E0C00003E0C00003E0C00003E0C00003E0E00003C0E00003C0F0000780F80007
+80FE000F00E7C03E00C1FFF800803FE0001B287CA724>I<7FFFFFFFFE7FFFFFFFFE7E00
+FF007E7800FF001E7000FF000E6000FF00066000FF0006E000FF0007E000FF0007C000FF
+0003C000FF0003C000FF0003C000FF00030000FF00000000FF00000000FF00000000FF00
+000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF0000
+0000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF000000
+00FF00000000FF00000000FF00000000FF00000000FF00000000FF000000FFFFFF0000FF
+FFFF0028277EA62D>I<FFFFF001FFF8FFFFF001FFF803FC00000F0003FC0000060003FC
+0000060003FC0000060003FC0000060003FC0000060003FC0000060003FC0000060003FC
+0000060003FC0000060003FC0000060003FC0000060003FC0000060003FC0000060003FC
+0000060003FC0000060003FC0000060003FC0000060003FC0000060003FC0000060003FC
+0000060003FC0000060003FC0000060003FC0000060003FC0000060003FC0000060003FC
+0000060003FC0000060001FC00000C0001FC00000C0000FE00000C0000FE00001800007F
+00003000003F00006000001FC001C0000007F00F80000001FFFE000000003FF000002D28
+7EA732>I<7FFFF03FFF807FFFF03FFF8003FE0003F00001FF0000C00001FF0001800000
+FF80038000007FC0070000007FC0060000003FE00C0000001FF01C0000001FF038000000
+0FF83000000007FC6000000007FEE000000003FFC000000001FF8000000000FF80000000
+00FF80000000007FC0000000003FE0000000003FE0000000003FF0000000003FF8000000
+006FF800000000E7FC00000001C3FE0000000183FE0000000301FF0000000700FF800000
+0E00FF8000000C007FC0000018003FE0000038003FE0000030001FF0000060000FF80000
+E0000FFC0001C00007FC0003E00003FE00FFFE007FFFF0FFFE007FFFF02C287EA731>88
+D<03FF80000FFFE0001F01F8003F80FC003F807E003F803E001F003F001F003F0000003F
+0000003F0000003F000007FF0000FFFF0007F03F001F803F003F003F007E003F007C003F
+00FC003F00FC003F00FC003F00FC005F007E00DF003F839F801FFE0FF803F803F81D1A7E
+9920>97 D<FFC00000FFC000000FC000000FC000000FC000000FC000000FC000000FC000
+000FC000000FC000000FC000000FC000000FC000000FC000000FC1FC000FCFFF800FDC0F
+C00FF003E00FE001F00FC001F80FC001FC0FC000FC0FC000FC0FC000FE0FC000FE0FC000
+FE0FC000FE0FC000FE0FC000FE0FC000FE0FC000FE0FC000FC0FC000FC0FC001F80FC001
+F80FE003F00FB007E00F1C0FC00E0FFF000C03FC001F287EA724>I<003FF001FFFC07E0
+3E0F807F1F807F3F007F3F003E7E003E7E0000FE0000FE0000FE0000FE0000FE0000FE00
+00FE0000FE00007E00007F00003F00003F80031F80070FC00607F01C01FFF0003FC0181A
+7E991D>I<00007FE000007FE0000007E0000007E0000007E0000007E0000007E0000007
+E0000007E0000007E0000007E0000007E0000007E0000007E0007F87E001FFE7E007E077
+E00FC01FE01F800FE03F0007E03F0007E07E0007E07E0007E0FE0007E0FE0007E0FE0007
+E0FE0007E0FE0007E0FE0007E0FE0007E0FE0007E07E0007E07E0007E07F0007E03F0007
+E01F000FE00F801FE007E077E003FFC7FE007F07FE1F287EA724>I<007F800001FFF000
+07E0F8000F803C001F003E003F001F003F001F007E001F007E001F80FE000F80FE000F80
+FFFFFF80FFFFFF80FE000000FE000000FE000000FE0000007E0000007E0000003F000180
+3F0001801F8003000FC0060003E03C0001FFF800003FC000191A7E991E>I<0007F0003F
+F800FC7C01F0FE03F0FE03E0FE07E0FE07E07C07E00007E00007E00007E00007E00007E0
+00FFFF80FFFF8007E00007E00007E00007E00007E00007E00007E00007E00007E00007E0
+0007E00007E00007E00007E00007E00007E00007E00007E00007E00007E00007E00007E0
+007FFF007FFF0017287EA714>I<00FF01F007FFE7F80F81FC781F00F8783E007C703E00
+7C007E007E007E007E007E007E007E007E007E007E003E007C003E007C001F00F8000F81
+F0000FFFE00018FF00001000000038000000380000003C0000001FFFF8001FFFFE000FFF
+FF800FFFFFC01FFFFFE03C000FE07C0003F0F80001F0F80001F0F80001F0F80001F07C00
+03E07C0003E03E0007C01FC03F8007FFFE0000FFF0001D267E9921>I<FFC00000FFC000
+000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000
+000FC000000FC000000FC000000FC0FC000FC3FF000FC60F800FC80FC00FD007E00FE007
+E00FE007E00FE007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007
+E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007
+E0FFFC7FFEFFFC7FFE1F287DA724>I<0F001F803FC03FC03FC03FC01F800F0000000000
+00000000000000000000FFC0FFC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC0
+0FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC0FFF8FFF80D297DA813>I<FFC000
+00FFC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000
+000FC000000FC000000FC000000FC000000FC01FF80FC01FF80FC003C00FC003000FC00E
+000FC01C000FC030000FC060000FC0C0000FC380000FC780000FCFC0000FDFE0000FF3F0
+000FE1F8000F80F8000F80FC000F807E000F803F000F801F800F800F800F800FC00F8007
+E00F8007F0FFF81FFEFFF81FFE1F287EA723>107 D<FFC0FFC00FC00FC00FC00FC00FC0
+0FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC0
+0FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC0FFFCFFFC0E287DA713>
+I<FF80FE003F8000FF83FF80FFE0000F860FC183F0000F8807E201F8000F9003E400F800
+0FB003FC00FC000FA003F800FC000FE003F800FC000FC003F000FC000FC003F000FC000F
+C003F000FC000FC003F000FC000FC003F000FC000FC003F000FC000FC003F000FC000FC0
+03F000FC000FC003F000FC000FC003F000FC000FC003F000FC000FC003F000FC000FC003
+F000FC000FC003F000FC000FC003F000FC000FC003F000FC00FFFC3FFF0FFFC0FFFC3FFF
+0FFFC0321A7D9937>I<FF80FC00FF83FF000F860F800F880FC00F9007E00FA007E00FA0
+07E00FE007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC0
+07E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E0FFFC
+7FFEFFFC7FFE1F1A7D9924>I<003FC00001FFF80007E07E000F801F001F000F803F000F
+C03E0007C07E0007E07E0007E0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007
+F0FE0007F0FE0007F07E0007E07E0007E03F000FC03F000FC01F801F800FC03F0007E07E
+0001FFF800003FC0001C1A7E9921>I<FFC1FC00FFCFFF800FDC0FC00FF007E00FE003F0
+0FC001F80FC001FC0FC001FC0FC000FC0FC000FE0FC000FE0FC000FE0FC000FE0FC000FE
+0FC000FE0FC000FE0FC000FE0FC000FC0FC001FC0FC001F80FC003F80FE003F00FF007E0
+0FDC1FC00FCFFF000FC3FC000FC000000FC000000FC000000FC000000FC000000FC00000
+0FC000000FC000000FC00000FFFC0000FFFC00001F257E9924>I<FF83E0FF8FF80F8C7C
+0F90FE0FB0FE0FA0FE0FA07C0FE07C0FC0000FC0000FC0000FC0000FC0000FC0000FC000
+0FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC000FFFE00FFFE00171A7E
+991B>114 D<03FC601FFFE03C03E07801E07000E0F00060F00060F80060FC0000FFE000
+7FFE003FFF801FFFC00FFFE001FFF0000FF80001F8C000F8C00078E00078E00078F00070
+F800F0FE03E0E7FF80C1FE00151A7E991A>I<00600000600000600000600000E00000E0
+0001E00001E00003E00007E0001FE000FFFFE0FFFFE007E00007E00007E00007E00007E0
+0007E00007E00007E00007E00007E00007E00007E00007E00007E00007E03007E03007E0
+3007E03007E03007E03003F06001F0C000FF80003F0014257FA419>I<FFC07FE0FFC07F
+E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007
+E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007E00FC007
+E00FC00FE00FC00FE007C017E003E067E001FFC7FE007F07FE1F1A7D9924>I<FFFC01FF
+FFFC01FF0FC000700FE0007007E0006007F000E003F000C003F801C001F8018001FC0180
+00FC030000FE0300007E0600007E0600003F0C00003F0C00001F9800001F9800001FF800
+000FF000000FF0000007E0000007E0000003C0000003C00000018000201A7F9923>I<FF
+F87FF81FF0FFF87FF81FF00FC00F8007800FC007C003000FE007C0070007E007E0060007
+E00FE0060003F00FE00C0003F01FF00C0003F019F00C0001F819F8180001F830F8180001
+FC30F8380000FC70FC300000FC607C3000007E607C6000007EC03E6000007FC03EE00000
+3FC03FC000003F801FC000001F801F8000001F801F8000001F000F8000000F000F000000
+0E000700000006000600002C1A7F992F>I<FFF80FFEFFF80FFE0FE003C007F0038003F0
+030001F8060000FC0E0000FE1C00007F3800003F7000001FE000000FC0000007E0000007
+F0000007F800000FF800001CFC0000387E0000703F0000E03F8000C01FC001800FC00300
+07E00F0003F0FFE01FFFFFE01FFF201A7F9923>I<FFFC01FFFFFC01FF0FC000700FE000
+7007E0006007F000E003F000C003F801C001F8018001FC018000FC030000FE0300007E06
+00007E0600003F0C00003F0C00001F9800001F9800001FF800000FF000000FF0000007E0
+000007E0000003C0000003C0000001800000018000000300000003000030060000780600
+00FC0E0000FC0C0000FC380000787000003FE000001F80000020257F9923>I
+E /Fz 25 122 df<60F0F06004047D830A>46 D<06000E00FE000E000E000E000E000E00
+0E000E000E000E000E000E000E000E000E000E000E000E00FFE00B157D9412>49
+D<0F8030E040708030C038E0384038003800700070006000C00180030006000C08080810
+183FF07FF0FFF00D157E9412>I<60307FE07FC0440040004000400040004F8070E04070
+0030003800384038E038E0388030406020C01F000D157E9412>53
+D<FFFC001C03801C00C01C00E01C00701C00701C00701C00701C00E01C00C01C03801FFE
+001C07801C01C01C00E01C00E01C00E01C00E01C00E01C00E11C00E11C0072FF803C1817
+7F961A>82 D<7FFFF8603818403808403808803804803804803804003800003800003800
+003800003800003800003800003800003800003800003800003800003800003800003800
+03FF8016177F9619>84 D<3FC0706070302038003803F81E3830387038E039E039E07970
+FF1F1E100E7F8D12>97 D<003E00000E00000E00000E00000E00000E00000E00000E0000
+0E0007CE001C3E00300E00700E00600E00E00E00E00E00E00E00E00E00600E00700E0030
+1E00182E0007CF8011177F9614>100 D<0FC0186030307038E018FFF8E000E000E00060
+0070083010183007C00D0E7F8D10>I<0F9E18E33060707070707070306018C02F802000
+60003FE03FF83FFC600EC006C006C006600C38380FE010157F8D12>103
+D<F8000038000038000038000038000038000038000038000038000038F8003B1C003C0E
+00380E00380E00380E00380E00380E00380E00380E00380E00380E00380E00FE3F801117
+7F9614>I<307878300000000000F8383838383838383838383838FE07177F960A>I<F800
+38003800380038003800380038003800383E383838303840388039803FC039E038E038F0
+3878383C383CFE7F10177F9613>107 D<F8F83E003B1CC7003C0F0380380E0380380E03
+80380E0380380E0380380E0380380E0380380E0380380E0380380E0380380E0380FE3F8F
+E01B0E7F8D1E>109 D<F8F8003B1C003C0E00380E00380E00380E00380E00380E00380E
+00380E00380E00380E00380E00FE3F80110E7F8D14>I<07C018303018600C600CE00EE0
+0EE00EE00EE00E701C3018183007C00F0E7F8D12>I<F9F0003E1C003806003807003803
+00380380380380380380380380380300380700380E003E1C0039F0003800003800003800
+00380000380000FE000011147F8D14>I<F9E03A703C7038203800380038003800380038
+00380038003800FF000C0E7F8D0E>114 D<1F4060C0C040C040E000FF007F801FC001E0
+80608060C060E0C09F000B0E7F8D0E>I<080008000800180018003800FFC03800380038
+00380038003800380038403840384038401C800F000A147F930E>I<F83E00380E00380E
+00380E00380E00380E00380E00380E00380E00380E00380E00381E001C2E0007CF80110E
+7F8D14>I<FE1F380E3C0C1C081C080E100E100720072007E003C003C001800180100E7F
+8D13>I<FEFE7C383838383810383C101C3C201C4C201E4E600ECE400E87400787800703
+80070380030300020100160E7F8D19>I<FE3F3C1C1C100E20074007C0038001C002E004
+F008701838383CFC7F100E7F8D13>I<FE1F380E3C0C1C081C080E100E100720072007E0
+03C003C00180018001000100E200E200A400780010147F8D13>I
+E /FA 1 66 df<0003000000030000000300000007800000078000000FC000000BC00000
+0BC0000011E0000011E0000031F0000020F0000020F00000407800004078000040780000
+803C0000803C0001003E0001FFFE0001001E0002000F0002000F0002000F000400078004
+0007800C0007C01E0007C0FF803FFC1E1D7E9C22>65 D E /FB 60
+123 df<01FFFFFF80003C00380000380070000038007000003800700000380070000070
+00E000007000E000007000E000007000E00000E001C00000E001C00000E001C00000E001
+C00001C003800001C003800001C003800001C00380000380070000038007000003800700
+00038007000007000E000007000E000007000E000007000E00000F001E0000FFE1FFC000
+211C7E9B23>5 D<00F800030C000E06041C0704380308300388700390700390E003A0E0
+03A0E003C0E00380E00380E00380600780600B883071900F80E016127E911B>11
+D<0001F000061800080C00100C00200E00400E00800E00801C01001C010018010038020F
+F00210C0020FE00200300400300400300400380400380800700800700800700800E01800
+E01801C0140180140300230E0020F8002000002000004000004000004000004000008000
+0080000017257F9C17>I<0780101FC0103FE0207FF020603040C0184080088000088000
+0480000500000500000600000600000600000400000400000400000C00000C00000C0000
+1800001800001800001800003000003000002000141B7F9115>I<003800007F00008780
+01030001000001800001800001C00000C00000E00000E00000700000F80003B800063C00
+0C1C00181C00381C00701C00701C00E01C00E01C00E01C00E01C00E01800E03800603000
+70600038C0000F8000111E7F9D12>I<01F807000C0018003800300070007FC0E000E000
+E000E000E00060006000300018600F800D127E9111>I<001000001000001000001FC000
+3040006F800080000100000200000600000C000008000018000030000030000020000060
+0000600000600000E00000C00000E00000E00000E00000E000007000007C00003F00001F
+E00007F80000F800003C00001C00000C0000180003100000E00012257F9C12>I<3C1F00
+4E61804681C04701C08F01C08E01C00E01C00E01C01C03801C03801C03801C0380380700
+380700380700380700700E00300E00000E00000E00001C00001C00001C00001C00003800
+003800003000121B7E9115>I<07800001C00001E00000E00000E00000F0000070000070
+00007800003800003800003C00001C00001C00001E00000E00001E00003F0000670000C7
+000187800303800603800E03C01C01C03801C07001E0E000E0C000F0141D7E9C18>21
+D<0FFFF81FFFF83FFFF8608400418400810400010400030C00030C00020C00060C00060C
+000E0C000C0C001C0E001C0E00380E0018060015127E9118>25 D<000100000200000200
+000200000200000400000400000400000400000800000800007E0001C9800710E00C1060
+181070381030702030702030E02070E02070E04070E040E0E040E06041C0608380308600
+1C9C0007E00001000001000001000001000002000002000002000002000014257E9C19>
+30 D<00FC03FE0E07180010002000200010C017201FE020004000400080008000800440
+0860303FE00F8010147F9213>34 D<1E3E60C0C0C0C0C0C0603E1E070C7E940C>44
+D<60F0F06004047C830C>58 D<60F0F0701010101020204080040C7C830C>I<00000180
+0000078000001E00000078000001E00000078000000E00000038000000F0000003C00000
+0F0000003C000000F0000000F00000003C0000000F00000003C0000000F0000000380000
+000E0000000780000001E0000000780000001E000000078000000180191A7D9620>I<00
+010003000600060006000C000C000C0018001800180030003000300060006000C000C000
+C0018001800180030003000300060006000C000C000C0018001800180030003000300060
+0060006000C000C00010297E9E15>I<003E0000C3000100C00200C00300600780600780
+7003003000003000003000003000FC700382700601700C01701800F03800E03000E07000
+E07000C0E001C0E001C0E00180E00380E00300E00600E00600600C003018001860000F80
+00141F7E9D16>64 D<00000C0000000C0000001C0000001C0000003C0000005C0000005C
+0000009E0000008E0000010E0000020E0000020E0000040E0000040E0000080E0000100E
+0000100E0000200700003FFF000040070000800700008007000100070001000700020007
+0004000700040007001C000780FF803FF01C1D7F9C1F>I<01FFFF00003C01C0003800E0
+003800F0003800700038007000700070007000F0007000F0007001E000E003C000E00780
+00E01F0000FFFC0001C00F0001C0078001C003C001C003C0038003C0038003C0038003C0
+038003C0070007800700070007000E0007001C000E007800FFFFC0001C1C7E9B1F>I<00
+01F808000E061800380138006000F001C0007003800070070000300F0000200E0000201C
+0000203C0000203C000000780000007800000078000000F0000000F0000000F0000000F0
+000000F0000100F0000100F0000100700002007000020030000400380008001C0010000E
+0060000701800000FE00001D1E7E9C1E>I<01FFFF80003C01E000380070003800380038
+003C0038001C0070001C0070001E0070001E0070001E00E0001E00E0001E00E0001E00E0
+001E01C0003C01C0003C01C0003C01C000380380007803800070038000F0038000E00700
+01C0070003800700070007001C000E007800FFFFC0001F1C7E9B22>I<01FFFFF8003C00
+78003800180038001000380010003800100070001000700010007008100070080000E010
+0000E0100000E0300000FFF00001C0200001C0200001C0200001C0200003804040038000
+400380008003800080070001000700010007000300070006000E003E00FFFFFC001D1C7E
+9B1F>I<01FFFFF0003C00F0003800300038002000380020003800200070002000700020
+007008200070080000E0100000E0100000E0300000FFF00001C0200001C0200001C02000
+01C020000380400003800000038000000380000007000000070000000700000007000000
+0F000000FFF000001C1C7E9B1B>I<0001F808000E061800380138006000F001C0007003
+800070070000300F0000200E0000201C0000203C0000203C000000780000007800000078
+000000F0000000F0000000F0007FF0F0000780F0000700F0000700F00007007000070070
+000E0030000E0038000E001C001E000E0064000701840000FE00001D1E7E9C21>I<01FF
+C3FF80003C0078000038007000003800700000380070000038007000007000E000007000
+E000007000E000007000E00000E001C00000E001C00000E001C00000FFFFC00001C00380
+0001C003800001C003800001C00380000380070000038007000003800700000380070000
+07000E000007000E000007000E000007000E00000F001E0000FFE1FFC000211C7E9B23>
+I<01FFC07F80003C001E0000380018000038002000003800400000380080000070020000
+00700400000070080000007010000000E040000000E0C0000000E1E0000000E2E0000001
+C470000001D070000001E038000001C0380000038038000003801C000003801C00000380
+0E000007000E000007000E0000070007000007000700000F00078000FFE03FF000211C7E
+9B23>75 D<01FE0000FF003E0000F0002E0001E0002E0002E0002E0002E0002E0004E000
+4E0009C0004E0009C000470011C000470011C00087002380008700438000870043800087
+00838001070107000107010700010382070001038207000203840E000203880E00020388
+0E000203900E000403A01C000403A01C000401C01C000C01C01C001C01803C00FF8103FF
+80281C7E9B28>77 D<0003F800000E0E000038038000E001C001C001C0038000E0070000
+E00F0000F01E0000F01C0000F03C0000F03C0000F0780000F0780000F0780000F0F00001
+E0F00001E0F00001E0F00003C0F00003C0F0000780F0000780F0000F0070000E0070001C
+00380038003C0070001C01C0000707800001FC00001C1E7E9C20>79
+D<01FFFF00003C03C0003800E0003800F00038007000380070007000F0007000F0007000
+F0007000E000E001E000E003C000E0070000E01E0001FFF00001C0000001C0000001C000
+0003800000038000000380000003800000070000000700000007000000070000000F0000
+00FFE000001C1C7E9B1B>I<01FFFE00003C03C0003800E0003800F00038007000380070
+007000F0007000F0007000F0007001E000E001C000E0078000E01E0000FFF00001C03800
+01C00C0001C00E0001C00E0003800E0003800E0003800E0003800E0007001E0007001E08
+07001E0807001E100F000F10FFE00F20000003C01D1D7E9B20>82
+D<000FC100303300400F0080060180060300060300060600040600040700000700000780
+0003F00001FF0000FFC0003FE00003E00000F00000700000300000302000302000306000
+606000606000C0600080F00300CC060083F800181E7E9C19>I<1FFFFFF01C0380703007
+0030200700206007002040070020400E0020800E0020800E0020000E0000001C0000001C
+0000001C0000001C00000038000000380000003800000038000000700000007000000070
+00000070000000E0000000E0000000E0000000E0000001E000007FFF00001C1C7F9B18>
+I<7FF03FE00F0007000E0006000E0004000E0004000E0004001C0008001C0008001C0008
+001C00080038001000380010003800100038001000700020007000200070002000700020
+00E0004000E0004000E0004000E0008000E0008000E00100006002000060040000300800
+001830000007C000001B1D7D9B1C>I<FFC00FF01C0003801C0003001C0002001C000200
+1C0004001C0008001E0008000E0010000E0030000E0020000E0040000E0040000E008000
+0E0100000F01000007020000070400000704000007080000070800000710000007200000
+03A0000003C00000038000000380000003000000030000001C1D7D9B18>I<FFC0FFC0FF
+3C001C003C1C001C00101C003C00101C003C00201C005C00401C005C00401C009C00801C
+009C00801C011C01001C011C01001C021C02001C041C02001C041C04001C081C08001C08
+1C08001C100E10001E100E10000E200E20000E200E20000E400E40000E800EC0000E800E
+80000F000F00000F000F00000E000E00000E000E00000C000C00000C000C0000281D7D9B
+27>I<01FFC0FF80001E003C00001C003000000E002000000E004000000F008000000701
+0000000782000000038400000003CC00000001D800000001F000000001E000000000E000
+000000F00000000170000000027800000004380000000838000000103C000000201C0000
+00401E000000800E000001000F0000020007000006000700001E000F8000FF803FF00021
+1C7F9B22>I<FFE007F80F0001E00F0001800F00010007000200078004000380080003C0
+180003C0100001C0200001E0400000E0800000F1000000F2000000760000007C00000038
+0000003800000070000000700000007000000070000000E0000000E0000000E0000000E0
+000001C000001FFC00001D1C7F9B18>I<00FFFFE000F001C001C003800180070001000E
+0001001E0002001C0002003800020070000000E0000001C0000003800000070000000F00
+00001E0000001C0000003800000070020000E0040001C0040003800400070008000F0008
+000E0018001C003000380070007001E000FFFFE0001B1C7E9B1C>I<3F00070007000E00
+0E000E000E001C001C001C001C0039E03A303C1838187018701C701C701CE038E038E038
+E030E070E060E0C061C023001E000E1D7E9C12>98 D<0007E00000E00000E00001C00001
+C00001C00001C000038000038000038000038001E7000717000C0F00180F00380E00300E
+00700E00700E00E01C00E01C00E01C00E01C00E03880E03880E038806078803199001E0E
+00131D7E9C16>100 D<01F007080C0818043808300870307FC0E000E000E000E000E000
+E0046008601030600F800E127E9113>I<0001E0000630000E78000EF0001C60001C0000
+1C00001C00001C0000380000380003FFC000380000380000700000700000700000700000
+700000E00000E00000E00000E00000E00001C00001C00001C00001C00001C00001800003
+8000038000630000F30000F60000E4000078000015257E9C14>I<0038C000C5C00183C0
+0303C00703800603800E03800E03801C07001C07001C07001C07001C0E001C0E001C0E00
+0C1E00047C00039C00001C00001C00003800603800F03000F07000E0C0007F0000121A80
+9114>I<01C003C003C001800000000000000000000000001C0027004700470087008700
+0E000E001C001C001C003800388038807080710032001C000A1C7E9B0E>105
+D<0007000F000F00060000000000000000000000000078009C010C020C021C041C001C00
+1C0038003800380038007000700070007000E000E000E000E001C061C0F180F300E6007C
+001024809B11>I<0FC00001C00001C00003800003800003800003800007000007000007
+00000700000E07000E08800E11C00E23C01C47801C83001D00001E00003FC00038E00038
+7000387000707100707100707100707200E03200601C00121D7E9C16>I<381F81F04E20
+C6184640E81C4680F01C8F00F01C8E00E01C0E00E01C0E00E01C1C01C0381C01C0381C01
+C0381C01C0703803807138038071380380E1380380E2700700643003003820127E9124>
+109 D<3C1F004E61804681C04701C08F01C08E01C00E01C00E01C01C03801C03801C0380
+1C0700380710380710380E10380E2070064030038014127E9119>I<07878009C86008D0
+3008E03011C03011C03801C03801C0380380700380700380700380600700E00700C00701
+800783000E86000E78000E00000E00001C00001C00001C00001C00003C0000FF0000151A
+819115>112 D<01C206260C1E181E381C301C701C701CE038E038E038E038E070E070E0
+7060F023E01CE000E000E001C001C001C001C003801FF00F1A7E9113>I<3C3C4E424687
+470F8E1E8E0C0E000E001C001C001C001C0038003800380038007000300010127E9113>
+I<01F0060C0C040C0E180C1C001F000FE00FF003F80038201C7018F018F010803060601F
+800F127E9113>I<00C001C001C001C00380038003800380FFF00700070007000E000E00
+0E000E001C001C001C001C00382038203840384018800F000C1A80990F>I<1C00C02701
+C04701C04701C08703808703800E03800E03801C07001C07001C07001C0700180E20180E
+20180E201C1E200C264007C38013127E9118>I<1C03270747074703870187010E010E01
+1C021C021C021C041804180818081C100C2007C010127E9114>I<1C00C0802701C1C047
+01C1C04701C0C087038040870380400E0380400E0380401C0700801C0700801C0700801C
+07010018060100180601001C0E02001C0F04000E13080003E1F0001A127E911E>I<0787
+8008C84010F0C020F1E020E3C040E18000E00000E00001C00001C00001C00001C0006380
+80F38080F38100E5810084C60078780013127E9118>I<1C00C02701C04701C04701C087
+03808703800E03800E03801C07001C07001C07001C0700180E00180E00180E001C1E000C
+3C0007DC00001C00001800603800F03000F06000E0C0004180003E0000121A7E9114>I<
+038107C10FF6081C10080010002000400080010002000400080410043C1867F843F081E0
+10127E9113>I E /FC 46 128 df<0000FE000003018000060180000C0380001C018000
+1C0000001800000038000000380000003800000038000003FFFE0000700E0000700E0000
+700E0000701C0000701C0000E01C0000E01C0000E0380000E0380000E0380001C0380001
+C0720001C0720001C0720001C07200038034000380180003800000030000000300000007
+000000C6000000E6000000CC000000780000001925819C17>12 D<0001FEE0000707E000
+0E07E0000C07C0001C01C0001C01C0001801C00038038000380380003803800038038003
+FFFF0000700700007007000070070000700E0000700E0000E00E0000E00E0000E01C0000
+E01C0000E01C0001C01C0001C0390001C0390001C0390001C0390003801A0003800C0003
+800000030000000300000007000000C6000000E6000000CC000000780000001B25819C18
+>I<183C3C3C0404080810204080060C779C0D>39 D<FFC0FFC0FFC00A037D890F>45
+D<3078F06005047C830D>I<0004000C00180038007807B8007000700070007000E000E0
+00E000E001C001C001C001C0038003800380038007000700070007000F00FFF00E1C7B9B
+15>49 D<003E000041800080C00100C00200E00440E00440E00840E00840E00840E01081
+C01081C01103800E0300000600000C000018000060000080000300000400000800401000
+802000802001007F070043FE0081FC00807800131D7D9B15>I<00001800000018000000
+38000000380000007800000078000000B800000138000001380000023C0000021C000004
+1C00000C1C0000081C0000101C0000101C0000201C0000201C00007FFC0000C01C000080
+1C0001001C0001001E0002000E0002000E0004000E000C000E001C001E00FF00FFC01A1D
+7E9C1F>65 D<0003F020001E0C60003002E000E003C001C001C0038001C0070000C00E00
+00801E0000801C0000803C0000803C000000780000007800000078000000F0000000F000
+0000F0000000F0000000F0000400F0000400F0000400F000080070000800700010003800
+2000180040000C0180000706000001F800001B1E7A9C1E>67 D<01FFFF00003C03C00038
+00E0003800E000380070003800700070007800700038007000380070007800E0007800E0
+007800E0007800E0007801C000F001C000F001C000F001C000E0038001E0038001C00380
+03C0038003800700070007000E0007001C00070038000E00E000FFFF80001D1C7E9B1F>
+I<01FFFFF0003C00F0003800300038002000380020003800200070002000700020007008
+200070080000E0100000E0100000E0300000FFF00001C0200001C0200001C0200001C020
+0003804080038000800380008003800100070001000700030007000200070006000E003C
+00FFFFFC001C1C7E9B1C>I<01FFFFF0003C00F000380030003800200038002000380020
+0070002000700020007008200070080000E0100000E0100000E0300000FFF00001C02000
+01C0200001C0200001C02000038040000380000003800000038000000700000007000000
+07000000070000000F000000FFF000001C1C7E9B1B>I<0003F020001E0C60003002E000
+E003C001C001C0038001C0070000C00E0000801E0000801C0000803C0000803C00000078
+0000007800000078000000F0000000F0000000F001FF80F0001E00F0001C00F0001C00F0
+001C00F0001C00700038007000380038003800180078000C0090000707100001F800001B
+1E7A9C20>I<01FFC3FF80003C0078000038007000003800700000380070000038007000
+007000E000007000E000007000E000007000E00000E001C00000E001C00000E001C00000
+FFFFC00001C003800001C003800001C003800001C0038000038007000003800700000380
+070000038007000007000E000007000E000007000E000007000E00000F001E0000FFE1FF
+C000211C7E9B1F>I<03FF0078007000700070007000E000E000E000E001C001C001C001
+C0038003800380038007000700070007000E000E000E000E001E00FFC0101C7D9B10>I<
+01FFC0003C0000380000380000380000380000700000700000700000700000E00000E000
+00E00000E00001C00001C00001C00001C00003800203800203800203800407000407000C
+0700180700380E00F0FFFFF0171C7E9B1A>76 D<01FE0001FE003E0001E0002E0003C000
+2E0005C0002E0005C0002E0009C0004E000B80004E001380004E00238000470023800087
+0047000087004700008700870000870107000107010E000107020E000107040E00010704
+0E000207081C000203881C000203901C000203A01C000403A038000403C038000403C038
+000C038038001C03007800FF8307FF00271C7E9B25>I<000F8400304C00403C00801801
+001803001803001806001006001006000007000007000003E00003FC0001FF00007F8000
+07C00001C00001C00000C00000C02000C02000C0600180600180600300600200F00400CC
+180083E000161E7D9C17>83 D<1FFFFFC01C0701C0300E00C0200E0080600E0080400E00
+80401C0080801C0080801C0080001C000000380000003800000038000000380000007000
+0000700000007000000070000000E0000000E0000000E0000000E0000001C0000001C000
+0001C0000001C0000003C000007FFE00001A1C799B1E>I<7FF03FE00F0007000E000600
+0E0004000E0004000E0004001C0008001C0008001C0008001C0008003800100038001000
+380010003800100070002000700020007000200070002000E0004000E0004000E0004000
+E0008000E0008000E00100006002000060040000300800001830000007C000001B1D789B
+1F>I<FF83FF07F03C007001C038007001803800F001003800F001003801700200380170
+040038027004003802700800380470080038047010003808701000380870200038107020
+00383070400038207040001C407080001C407080001C807100001C807100001D00720000
+1D007200001E007400001E007400001C003800001C003800001800300000180020000010
+00200000241D779B29>87 D<01E307170C0F180F380E300E700E700EE01CE01CE01CE01C
+E039E039E0396079319A1E0C10127C9115>97 D<3F00070007000E000E000E000E001C00
+1C001C001C0039E03A183C0C380C700C700E700E700EE01CE01CE01CE018E038E030E060
+60C031801E000F1D7C9C13>I<00F803040E041C0E181C300070007000E000E000E000E0
+00E000E0046008601030600F800F127C9113>I<0007E00000E00000E00001C00001C000
+01C00001C000038000038000038000038001E7000717000C0F00180F00380E00300E0070
+0E00700E00E01C00E01C00E01C00E01C00E03900E03900E03900607900319A001E0C0013
+1D7C9C15>I<00F807040C0418023804300470087FF0E000E000E000E000E00060046008
+301030600F800F127C9113>I<0003C0000670000C70001C60001C00001C000038000038
+0000380000380000380003FF8000700000700000700000700000700000E00000E00000E0
+0000E00000E00001C00001C00001C00001C00001C0000380000380000380000300000300
+00070000C60000E60000CC00007800001425819C0D>I<0078C001C5C00303C00603C00E
+03800C03801C03801C0380380700380700380700380700380E00380E00380E00181E000C
+7C00079C00001C00001C00003800003800C03000E07000C1C0007F0000121A7E9113>I<
+0FC00001C00001C0000380000380000380000380000700000700000700000700000E3E00
+0EC3000F03800E03801E03801C03801C03801C0380380700380700380700380E00700E40
+700E40701C40701C80E00C80600700121D7E9C15>I<0180038001000000000000000000
+0000000000001C002600470047008E008E000E001C001C001C0038003800710071007100
+720072003C00091C7C9B0D>I<0FC00001C00001C0000380000380000380000380000700
+000700000700000700000E07800E08800E11C00E21C01C41801C80001D00001E00003FC0
+0038E000387000387000707100707100707100707200E03200601C00121D7E9C13>107
+D<1F800380038007000700070007000E000E000E000E001C001C001C001C003800380038
+0038007000700070007000E200E200E200E40064003800091D7D9C0B>I<1C1E07802663
+18C04683A0E04703C0E08E0380E08E0380E00E0380E00E0380E01C0701C01C0701C01C07
+01C01C070380380E0388380E0388380E0708380E0710701C0320300C01C01D127C9122>
+I<383E004CC3004D03804E03809E03809C03801C03801C0380380700380700380700380E
+00700E40700E40701C40701C80E00C8060070012127C9117>I<00F800030C000E06001C
+0300180300300300700380700380E00700E00700E00700E00E00E00E00E01C0060180060
+300030E0000F800011127C9115>I<03878004C86004D03004E03009C03009C03801C038
+01C0380380700380700380700380600700E00700C00701800783000E86000E78000E0000
+0E00001C00001C00001C00001C0000380000FF0000151A809115>I<01E107130C0F180F
+380E300E700E700EE01CE01CE01CE01CE038E038E038607831F01E700070007000E000E0
+00E000E001C00FF8101A7C9113>I<1C3C2642468747078E068E000E000E001C001C001C
+001C0038003800380038007000300010127C9112>I<01F006080C080C1C18181C001F00
+1FC00FF007F0007800386030E030C030806060C01F000E127D9111>I<03000700070007
+000E000E000E000E00FFE01C001C001C0038003800380038007000700070007000E080E0
+80E100E100660038000B1A7C990E>I<1C01802E03804E03804E03808E07008E07001C07
+001C0700380E00380E00380E00380E00301C80301C80301C80383C80184D000F86001112
+7C9116>I<1C062E0E4E064E068E028E021C021C02380438043804380830083008301038
+2018400F800F127C9113>I<1E01832703874703874703838707018707010E07010E0701
+1C0E021C0E021C0E021C0E04180C04181C04181C081C1E080C263007C3C018127C911C>
+I<0387800CC8400870E01070E020E0C020E00000E00000E00001C00001C00001C00001C0
+00038100638100E38200C5820085840078780013127E9113>I<1C01802E03804E03804E
+03808E07008E07001C07001C0700380E00380E00380E00380E00301C00301C00301C0038
+3C001878000FB800003800003000007000E06000E0C0008180004300003C0000111A7C91
+14>I<70E0F1E0F1E060C00B04759C15>127 D E /FD 6 117 df<0001FC0080000E0380
+800038004180006000218001C00013800380000B80070000078006000007800E00000380
+1C000003801C0000018038000001803800000180780000008078000000807000000080F0
+00000000F000000000F000000000F000000000F000000000F000000000F000000000F000
+000000F000000000F0000000007000000000780000008078000000803800000080380000
+00801C000001001C000001000E0000010006000002000700000200038000040001C00008
+0000600010000038006000000E0380000001FC0000212A7DA827>67
+D<00FC000307800E01C01C00E01800F0380070780070700078700078F00038FFFFF8F000
+00F00000F00000F00000F000007000007800007800083800081C00100C00200600400381
+8000FE0015197E9818>101 D<0E0FC000FE3070001E4038000E8038000F001C000F001C
+000E001C000E001C000E001C000E001C000E001C000E001C000E001C000E001C000E001C
+000E001C000E001C000E001C000E001C000E001C000E001C000E001C000E001C001F003E
+00FFE1FFC01A197E981E>110 D<00FE000383800600C00C006018003038003878003C70
+001C70001CF0001EF0001EF0001EF0001EF0001EF0001EF0001E70001C70001C78003C38
+00381C00701C00700600C003838000FE0017197E981B>I<07E100181B00200700400300
+C00300C00100C00100E00100F000007C00003FE0001FF80007FC00003E00000F00800380
+800380800180C00180C00180E00100E00300D00200CC0C0083F00011197E9815>115
+D<0100000100000100000100000300000300000300000700000700000F00003F0000FFFF
+000700000700000700000700000700000700000700000700000700000700000700000700
+0007000007008007008007008007008007008007008007008003810003810001C200007C
+0011247FA315>I E /FE 9 117 df<FFFC00FFFF00F00F80F003C0F001E0F000F0F000F0
+F000F0F000F0F000F0F000F0F001E0F003E0F00FC0FFFF80FFFE00F00000F00000F00000
+F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000141D7C9C1B>
+80 D<03F8000FFE001C0F00380700700300600000E00000E00000E00000E00000F00000
+7800007F00003FE0001FFC0007FE0001FF00001F800007800003C00003C00001C00001C0
+0001C00001C0C00180E00380F007007C0E001FFC0007F000121F7E9D17>83
+D<03F00FFC1FFE3C0E78027000E000E000E000E000E000E000700078023C0E1FFE0FFC03
+F00F127F9112>99 D<F0F0F0F00000000000000070707070707070707070707070707070
+7070041D7E9C0A>105 D<03F0000FFC001FFE003C0F00780780700380E001C0E001C0E0
+01C0E001C0E001C0F003C07003807807803C0F001FFE000FFC0003F00012127F9115>
+111 D<E3E0EFF8FFFCF83EE01EE00EE007E007E007E007E007E00FE00EF01EF87CFFF8EF
+F0E3E0E000E000E000E000E000E000E000E000101A7D9115>I<E380E780EF80FC00F800
+F000F000E000E000E000E000E000E000E000E000E000E000E00009127D910E>114
+D<1FC03FF07FF0F030E000E000F0007F003FC01FE001F0003800388038F078FFF07FE01F
+C00D127F9110>I<1C001C001C001C001C001C00FFE0FFE01C001C001C001C001C001C00
+1C001C001C001C001C001C001C201FF00FF007C00C187F970F>I
+E /FF 85 128 df<FFFFF00F00F00F00300F00100F00100F00180F00080F00080F00080F
+00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F
+00000F00000F00000F00000F00000F8000FFF800151C7E9B1A>0
+D<00030000000300000007800000078000000FC000000BC0000013E0000011E0000021F0
+000020F0000040F8000040780000807C0000803C0001003E0001001E0002001F0002000F
+0004000F8004000780080007C0080003C0100001E0300001F0200000F0600000F87FFFFF
+F8FFFFFFFCFFFFFFFC1E1D7E9C23>I<007E1F0001C1B1800303E3C00703C3C00E03C180
+0E01C0000E01C0000E01C0000E01C0000E01C0000E01C000FFFFFC000E01C0000E01C000
+0E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C000
+0E01C0000E01C0000E01C0000E01C0000E01C0007F87FC001A1D809C18>11
+D<007E0001C1800301800703C00E03C00E01800E00000E00000E00000E00000E0000FFFF
+C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01
+C00E01C00E01C00E01C00E01C07F87F8151D809C17>I<007FC001C1C00303C00703C00E
+01C00E01C00E01C00E01C00E01C00E01C00E01C0FFFFC00E01C00E01C00E01C00E01C00E
+01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C07F
+CFF8151D809C17>I<3C42818181423C0807759D1F>23 D<60F0F0F0F0F0F0F060606060
+606060606060606060000000000060F0F060041E7C9D0C>33 D<6060F0F0F8F868680808
+08080808101010102020404080800D0C7F9C15>I<60F0F8680808081010204080050C7C
+9C0C>39 D<00800100020006000C000C00180018003000300030006000600060006000E0
+00E000E000E000E000E000E000E000E000E000E000E00060006000600060003000300030
+00180018000C000C000600020001000080092A7C9E10>I<800040002000300018001800
+0C000C000600060006000300030003000300038003800380038003800380038003800380
+03800380038003000300030003000600060006000C000C00180018003000200040008000
+092A7E9E10>I<0006000000060000000600000006000000060000000600000006000000
+0600000006000000060000000600000006000000060000FFFFFFE0FFFFFFE00006000000
+060000000600000006000000060000000600000006000000060000000600000006000000
+06000000060000000600001B1C7E9720>43 D<60F0F0701010101020204080040C7C830C
+>I<FFE0FFE00B0280890E>I<60F0F06004047C830C>I<03C00C301818300C300C700E60
+066006E007E007E007E007E007E007E007E007E007E007E007E007E00760066006700E30
+0C300C18180C3007E0101D7E9B15>48 D<010007003F00C7000700070007000700070007
+0007000700070007000700070007000700070007000700070007000700070007000700FF
+F80D1C7C9B15>I<07C01830201C400C400EF00FF80FF807F8077007000F000E000E001C
+001C00380070006000C00180030006010C01180110023FFE7FFEFFFE101C7E9B15>I<07
+E01830201C201C781E780E781E381E001C001C00180030006007C00030001C001C000E00
+0F000F700FF80FF80FF80FF00E401C201C183007C0101D7E9B15>I<000C00000C00001C
+00003C00003C00005C0000DC00009C00011C00031C00021C00041C000C1C00081C00101C
+00301C00201C00401C00C01C00FFFFC0001C00001C00001C00001C00001C00001C00001C
+0001FFC0121C7F9B15>I<300C3FF83FF03FC020002000200020002000200023E02C3030
+18301C200E000E000F000F000F600FF00FF00FF00F800E401E401C2038187007C0101D7E
+9B15>I<00F0030C04040C0E181E301E300C700070006000E3E0E430E818F00CF00EE006
+E007E007E007E007E007600760077006300E300C18180C3003E0101D7E9B15>I<400000
+7FFF807FFF007FFF00400200800400800400800800001000001000002000006000004000
+00C00000C00001C000018000018000038000038000038000038000078000078000078000
+078000078000078000030000111D7E9B15>I<03E00C301008200C200660066006700670
+067C0C3E183FB01FE007F007F818FC307E601E600FC007C003C003C003C0036002600430
+0C1C1007E0101D7E9B15>I<03C00C301818300C700C600EE006E006E007E007E007E007
+E0076007700F300F18170C2707C700060006000E300C780C78187018203010C00F80101D
+7E9B15>I<60F0F0600000000000000000000060F0F06004127C910C>I<60F0F060000000
+0000000000000060F0F0701010101020204080041A7C910C>I<FFFFFFE0FFFFFFE00000
+000000000000000000000000000000000000000000000000000000000000FFFFFFE0FFFF
+FFE01B0C7E8F20>61 D<0FE03038401CE00EF00EF00EF00E000C001C0030006000C00080
+01800100010001000100010001000000000000000000000003000780078003000F1D7E9C
+14>63 D<000600000006000000060000000F0000000F0000000F00000017800000178000
+0037C0000023C0000023C0000043E0000041E0000041E0000080F0000080F0000080F000
+010078000100780001FFF80002003C0002003C0002003C0004001E0004001E000C001F00
+0C000F001E001F00FF00FFF01C1D7F9C1F>65 D<FFFFC0000F0078000F003C000F001E00
+0F000E000F000F000F000F000F000F000F000F000F000E000F001E000F003C000F00F800
+0FFFF0000F003C000F001E000F000F000F0007000F0007800F0007800F0007800F000780
+0F0007800F000F000F000F000F001E000F007800FFFFE000191C7F9B1D>I<001F808000
+E0618001801980070007800E0003801C0003801C00018038000180780000807800008070
+000080F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000070
+0000807800008078000080380000801C0001001C0001000E000200070004000180080000
+E03000001FC000191E7E9C1E>I<FFFFC0000F00F0000F003C000F000E000F0007000F00
+07000F0003800F0003C00F0001C00F0001C00F0001E00F0001E00F0001E00F0001E00F00
+01E00F0001E00F0001E00F0001E00F0001C00F0001C00F0003C00F0003800F0007800F00
+07000F000E000F001C000F007000FFFFC0001B1C7E9B20>I<FFFFFC0F003C0F000C0F00
+040F00040F00060F00020F00020F01020F01000F01000F01000F03000FFF000F03000F01
+000F01000F01000F01010F00010F00020F00020F00020F00060F00060F000C0F003CFFFF
+FC181C7E9B1C>I<FFFFF80F00780F00180F00080F00080F000C0F00040F00040F01040F
+01000F01000F01000F03000FFF000F03000F01000F01000F01000F01000F00000F00000F
+00000F00000F00000F00000F00000F0000FFF800161C7E9B1B>I<001F808000E0618001
+801980070007800E0003801C0003801C00018038000180780000807800008070000080F0
+000000F0000000F0000000F0000000F0000000F0000000F000FFF0F0000F807000078078
+00078078000780380007801C0007801C0007800E00078007000B800180118000E0608000
+1F80001C1E7E9C21>I<FFF0FFF00F000F000F000F000F000F000F000F000F000F000F00
+0F000F000F000F000F000F000F000F000F000F000F000F000F000FFFFF000F000F000F00
+0F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F00
+0F000F000F000F000F00FFF0FFF01C1C7F9B1F>I<FFF00F000F000F000F000F000F000F
+000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F
+000F00FFF00C1C7F9B0F>I<07FF80007C00003C00003C00003C00003C00003C00003C00
+003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00
+003C00703C00F83C00F83C00F8380070780040700030E0000F8000111D7F9B15>I<FFF8
+000F80000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00
+000F00000F00000F00000F00000F00000F00080F00080F00080F00180F00180F00100F00
+300F00700F01F0FFFFF0151C7E9B1A>76 D<FF8000FF800F8000F8000F8000F8000BC001
+78000BC00178000BC001780009E002780009E002780008F004780008F004780008F00478
+00087808780008780878000878087800083C107800083C107800083C107800081E207800
+081E207800081E207800080F407800080F40780008078078000807807800080780780008
+030078001C03007800FF8307FF80211C7E9B26>I<FF001FF00F8003800FC001000BC001
+0009E0010008F0010008F0010008780100083C0100083E0100081E0100080F0100080F81
+00080781000803C1000801E1000801F1000800F1000800790008007D0008003D0008001F
+0008001F0008000F0008000700080003001C000300FF8001001C1C7F9B1F>I<003F8000
+00E0E0000380380007001C000E000E001C0007003C00078038000380780003C0780003C0
+700001C0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0
+700001C0780003C0780003C0380003803C0007801C0007000E000E0007001C0003803800
+00E0E000003F80001B1E7E9C20>I<FFFF800F00E00F00780F003C0F001C0F001E0F001E
+0F001E0F001E0F001E0F001C0F003C0F00780F00E00FFF800F00000F00000F00000F0000
+0F00000F00000F00000F00000F00000F00000F00000F0000FFF000171C7E9B1C>I<FFFF
+00000F01E0000F0078000F003C000F001C000F001E000F001E000F001E000F001E000F00
+1C000F003C000F0078000F01E0000FFF00000F01E0000F0070000F0078000F003C000F00
+3C000F003C000F003C000F003C000F003C000F003C100F003C100F001C100F001C10FFF0
+0E20000003C01C1D7E9B1F>82 D<07E0801C1980300580300380600180E00180E00080E0
+0080E00080F00000F800007C00007FC0003FF8001FFE0007FF0000FF80000F800007C000
+03C00001C08001C08001C08001C0C00180C00180E00300D00200CC0C0083F800121E7E9C
+17>I<7FFFFFC0700F01C0600F00C0400F0040400F0040C00F0020800F0020800F002080
+0F0020000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000
+0F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000
+1F800003FFFC001B1C7F9B1E>I<FFF01FF00F0003800F0001000F0001000F0001000F00
+01000F0001000F0001000F0001000F0001000F0001000F0001000F0001000F0001000F00
+01000F0001000F0001000F0001000F0001000F0001000F0001000F000100070002000780
+02000380040001C0040000E0180000706000000F80001C1D7F9B1F>I<FFE00FF01F0003
+C01F0001800F0001000F000100078002000780020007C0020003C0040003C0040003E00C
+0001E0080001E0080000F0100000F0100000F810000078200000782000003C4000003C40
+00003C4000001E8000001E8000001F8000000F0000000F00000006000000060000000600
+001C1D7F9B1F>I<FFE1FFC0FF1F003E003C1E003C00180F001E00100F001E00100F001E
+001007801F002007801F002007801F002003C027804003C027804003C027804001E043C0
+8001E043C08001E043C08000F081E10000F081E10000F081E10000F900F300007900F200
+007900F200007E007E00003E007C00003E007C00003C003C00001C003800001C00380000
+180018000008001000281D7F9B2B>I<FFF07FC00FC01E0007800C0007C0080003C01000
+01E0200001F0200000F0400000788000007C8000003D0000003E0000001F0000000F0000
+000F8000000F80000013C0000023E0000021E0000040F0000080F8000080780001007C00
+02003E0002001E0006001F001F001F80FF807FF01C1C7F9B1F>I<FFF003FC0F8001E007
+8000C007C0008003C0010003E0030001E0020000F0040000F8040000780800007C180000
+3C1000003E2000001F2000000F4000000FC0000007800000078000000780000007800000
+078000000780000007800000078000000780000007800000078000007FF8001E1C809B1F
+>I<FEFEC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0
+C0C0C0C0C0FEFE07297C9E0C>91 D<08081010202040404040808080808080B0B0F8F878
+7830300D0C7A9C15>I<FEFE060606060606060606060606060606060606060606060606
+06060606060606060606060606FEFE0729809E0C>I<E0E0E0E003047C9C0C>95
+D<1FC000307000783800781C00301C00001C00001C0001FC000F1C00381C00701C00601C
+00E01C40E01C40E01C40603C40304E801F870012127E9115>97 D<FC00001C00001C0000
+1C00001C00001C00001C00001C00001C00001C00001C00001C7C001D87001E01801C00C0
+1C00E01C00601C00701C00701C00701C00701C00701C00701C00601C00E01C00C01E0180
+19070010FC00141D7F9C17>I<03F80C0C181E301E700C6000E000E000E000E000E000E0
+0060007002300218040C1803E00F127F9112>I<001F8000038000038000038000038000
+038000038000038000038000038000038003F3800E0B80180780300380700380600380E0
+0380E00380E00380E00380E00380E003806003807003803003801807800E1B8003E3F014
+1D7F9C17>I<07E00C301818300C700E6006E006FFFEE000E000E000E000600070023002
+18040C1803E00F127F9112>I<00F8018C071E061E0E0C0E000E000E000E000E000E00FF
+E00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E007FE00F
+1D809C0D>I<00038007C4C01C78C0383880301800701C00701C00701C00701C00301800
+3838001C700027C0002000002000003000003FF8001FFF001FFF802003806001C0C000C0
+C000C0C000C06001803003001C0E0007F800121C7F9215>I<FC00001C00001C00001C00
+001C00001C00001C00001C00001C00001C00001C00001C7C001C87001D03001E03801C03
+801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03
+80FF9FF0141D7F9C17>I<18003C003C0018000000000000000000000000000000FC001C
+001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF80091D7F
+9C0C>I<00C001E001E000C0000000000000000000000000000007E000E000E000E000E0
+00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E060E0F0C0
+F1C061803E000B25839C0D>I<FC00001C00001C00001C00001C00001C00001C00001C00
+001C00001C00001C00001C0FE01C07801C06001C0C001C10001C20001C40001CE0001DE0
+001E70001C78001C38001C3C001C1C001C0E001C0F001C0F80FF9FE0131D7F9C16>I<FC
+001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C
+001C001C001C001C001C001C001C001C001C00FF80091D7F9C0C>I<FC7E07E0001C8388
+38001D019018001E01E01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C
+001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C00
+1C01C01C00FF8FF8FF8021127F9124>I<FC7C001C87001D03001E03801C03801C03801C
+03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C0380FF9FF014
+127F9117>I<03F0000E1C00180600300300700380600180E001C0E001C0E001C0E001C0
+E001C0E001C06001807003803003001806000E1C0003F00012127F9115>I<FC7C001D87
+001E01801C01C01C00E01C00E01C00701C00701C00701C00701C00701C00701C00E01C00
+E01C01C01E01801D07001CFC001C00001C00001C00001C00001C00001C00001C0000FF80
+00141A7F9117>I<03E0800E1980180580380780700380700380E00380E00380E00380E0
+0380E00380E003807003807003803807801807800E1B8003E38000038000038000038000
+0380000380000380000380001FF0141A7F9116>I<FCE01D381E781E781C301C001C001C
+001C001C001C001C001C001C001C001C001C00FFC00D127F9110>I<1F9020704030C010
+C010E010F8007F803FE00FF000F880388018C018C018E010D0608FC00D127F9110>I<04
+000400040004000C000C001C003C00FFE01C001C001C001C001C001C001C001C001C001C
+101C101C101C101C100C100E2003C00C1A7F9910>I<FC1F801C03801C03801C03801C03
+801C03801C03801C03801C03801C03801C03801C03801C03801C03801C07800C07800E1B
+8003E3F014127F9117>I<FF07E03C03801C01001C01000E02000E02000F060007040007
+040003880003880003C80001D00001D00000E00000E00000E00000400013127F9116>I<
+FF3FC7E03C0703C01C0701801C0701001C0B01000E0B82000E0B82000E1182000711C400
+0711C4000720C40003A0E80003A0E80003C0680001C0700001C070000180300000802000
+1B127F911E>I<FF0FE01E07001C06000E040007080003900003B00001E00000E00000F0
+0001F000013800021C00041C000C0E001807003C0780FE1FF014127F9116>I<FF07E03C
+03801C01001C01000E02000E02000F060007040007040003880003880003C80001D00001
+D00000E00000E00000E000004000004000008000008000F08000F10000F3000066000038
+0000131A7F9116>I<7FFC70386038407040F040E041C003C0038007000F040E041C043C
+0C380870087038FFF80E127F9112>I<FFFFF01401808B15>I<1C043F0843F080E00E047D
+9B15>126 D<6060F0F0F0F060600C047C9C15>I E /FG 70 126
+df<038700038700038700038700038700038700FFFFE0FFFFE07FFFE0070E00070E0007
+0E000E1C000E1C000E1C000E1C007FFFE0FFFFE0FFFFE01C38001C38001C38001C38001C
+38001C380013197F9816>35 D<00E001E0038007000E001C001C00380038007000700070
+00E000E000E000E000E000E000E000E000E000700070007000380038001C001C000E0007
+00038001E000E00B217A9C16>40 D<C000E000700038001C000E000E0007000700038003
+80038001C001C001C001C001C001C001C001C001C0038003800380070007000E000E001C
+0038007000E000C0000A217B9C16>I<0380038003800380E38EF39EFFFE3FF80FE00FE0
+3FF8FFFEF39EE38E03800380038003800F127D9516>I<00E00000E00000E00000E00000
+E00000E00000E00000E000FFFFE0FFFFE0FFFFE000E00000E00000E00000E00000E00000
+E00000E00000E00013137F9516>I<387C7E7E3E0E1E1C78F060070B798416>I<FFFF80FF
+FF80FFFF8011037E8D16>I<70F8F8F8700505788416>I<00018000038000038000070000
+0700000E00000E00001C00001C0000380000380000700000700000E00000E00001C00001
+C0000380000380000700000700000E00000E00001C00001C000038000038000070000070
+0000E00000E00000C0000011207E9C16>I<03E0000FF8001FFC001E3C00380E00780F00
+700700700700E00380E00380E00380E00380E00380E00380E00380E00380F00780700700
+700700780F003C1E001E3C001FFC000FF80003E00011197E9816>I<0300070007000F00
+1F00FF00FF00E70007000700070007000700070007000700070007000700070007000700
+FFF8FFF8FFF80D197B9816>I<07E0001FF8003FFC00783E00E00700F00780F003806003
+80000380000380000700000700000E00001C0000380000700000E00001C0000380000F00
+001E03803803807FFF80FFFF807FFF8011197E9816>I<07E0001FF8003FFC00781E0078
+0700300700000700000700000E00003E0007FC0007F00007FC00001E0000070000030000
+0380000380600380F00380E00700781E003FFC001FF80007E00011197E9816>I<007C00
+00FC0000DC0001DC00039C00039C00071C000F1C000E1C001E1C003C1C00381C00781C00
+F01C00FFFFE0FFFFE0FFFFE0001C00001C00001C00001C00001C0001FFC001FFC001FFC0
+13197F9816>I<3FFE007FFE007FFE007000007000007000007000007000007000007000
+0077F0007FFC007FFE00780F00300700000380000380600380F00380F00380E00700781E
+003FFC001FF80007E00011197E9816>I<70F8F8F870000000000000000070F8F8F87005
+12789116>58 D<387C7C7C38000000000000000038787C7C3C1C1C3870F0400618799116
+>I<000180000780001F80003E0000F80001F00007C0000F80003E0000FC0000F00000FC
+00003E00000F800007C00001F00000F800003E00001F8000078000018011157E9616>I<
+FFFFE0FFFFE07FFFE00000000000000000000000000000007FFFE0FFFFE0FFFFE0130B7F
+9116>I<C00000F00000FC00003E00000F800007C00001F00000F800003E00001F800007
+80001F80003E0000F80001F00007C0000F80003E0000FC0000F00000C0000011157E9616
+>I<00F80003FC0007FE000F07001C3B8038FF8079FF8073C7C07383C0E701C0E701C0E7
+01C0E701C0E701C0E701C0E701C073838073C78079FF0038FE001C38000F03C007FFC003
+FF0000FC0012197E9816>64 D<00E00001F00001F00001B00001B00003B80003B80003B8
+00031800071C00071C00071C00071C00071C000E0E000E0E000FFE000FFE001FFF001C07
+001C07001C07007E0FC0FF1FE07E0FC013197F9816>I<7FF800FFFE007FFF001C07001C
+07801C03801C03801C03801C03801C07001FFF001FFE001FFE001C1F001C03801C03C01C
+01C01C01C01C01C01C01C01C03C01C07807FFF80FFFF007FFC0012197F9816>I<7FF800
+FFFE007FFF001C0F001C07801C03C01C01C01C01C01C01E01C00E01C00E01C00E01C00E0
+1C00E01C00E01C00E01C00E01C01C01C01C01C03C01C07801C0F807FFF00FFFE007FF800
+1319809816>68 D<7FFFC0FFFFC07FFFC01C01C01C01C01C01C01C01C01C00001C00001C
+1C001C1C001FFC001FFC001FFC001C1C001C1C001C00001C00E01C00E01C00E01C00E01C
+00E07FFFE0FFFFE07FFFE013197F9816>I<7FFFE0FFFFE07FFFE01C00E01C00E01C00E0
+1C00E01C00001C00001C1C001C1C001FFC001FFC001FFC001C1C001C1C001C00001C0000
+1C00001C00001C00001C00007F8000FFC0007F800013197F9816>I<01F18007FB800FFF
+801F0F803C0780380380700380700380F00000E00000E00000E00000E00000E01FC0E01F
+E0E01FC0F003807003807007803807803C07801E0F800FFF8007FB8001F38013197F9816
+>I<7FFCFFFE7FFC03800380038003800380038003800380038003800380038003800380
+038003800380038003807FFCFFFE7FFC0F197D9816>73 D<FF8000FFC000FF80001C0000
+1C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0000
+1C00001C00401C00E01C00E01C00E01C00E0FFFFE0FFFFE0FFFFE013197F9816>76
+D<FC07E0FE0FE0FE0FE03A0B803B1B803B1B803B1B803B1B803B1B803BBB8039B38039B3
+8039B38039B38039F38038E38038E380380380380380380380380380380380FE0FE0FE0F
+E0FE0FE013197F9816>I<7E07F0FF0FF87F07F01D81C01D81C01D81C01DC1C01CC1C01C
+E1C01CE1C01C61C01C71C01C71C01C71C01C31C01C39C01C39C01C19C01C1DC01C0DC01C
+0DC01C0DC07F07C0FF87C07F03C01519809816>I<1FFC003FFE007FFF00780F00F00780
+E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380
+E00380E00380F00780F00780780F007FFF003FFE001FFC0011197E9816>I<7FF800FFFE
+007FFF001C0F801C03801C03C01C01C01C01C01C01C01C03C01C03801C0F801FFF001FFE
+001FF8001C00001C00001C00001C00001C00001C00001C00007F0000FF80007F00001219
+7F9816>I<7FF000FFFC007FFE001C0F001C07801C03801C03801C03801C03801C07801C
+0F001FFE001FFC001FFE001C0E001C07001C07001C07001C07001C07101C07381C07387F
+03F0FF83F07F01E01519809816>82 D<07E3001FFF003FFF00781F00F00700E00700E007
+00E00000F000007800003F80001FF00007FC0000FE00000F000007000003800003806003
+80E00380E00700F80F00FFFE00FFFC00C7F00011197E9816>I<7FFFE0FFFFE0FFFFE0E0
+E0E0E0E0E0E0E0E0E0E0E000E00000E00000E00000E00000E00000E00000E00000E00000
+E00000E00000E00000E00000E00000E00000E00007FC000FFE0007FC0013197F9816>I<
+7F07F0FF8FF87F07F01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C0
+1C01C01C01C01C01C01C01C01C01C01C01C01C01C00E03800E038007070007FF0003FE00
+00F8001519809816>I<FE0FE0FE0FE0FE0FE03803803C07801C07001C07001C07001E0F
+000E0E000E0E000E0E000E0E00071C00071C00071C00071C0003180003B80003B80003B8
+0001B00001F00001F00000E00013197F9816>I<7FFF80FFFF80FFFF80E00700E00F00E0
+1E00E01C00003C0000780000700000F00001E00001C00003C0000780000700000F00001E
+03801C03803C0380780380700380FFFF80FFFF80FFFF8011197E9816>90
+D<C00000E00000E000007000007000003800003800001C00001C00000E00000E00000700
+0007000003800003800001C00001C00000E00000E000007000007000003800003800001C
+00001C00000E00000E0000070000070000038000038000018011207E9C16>92
+D<03000F803FE0FDF8F07840100D067C9816>94 D<FFFF80FFFF80FFFF8011037E7E16>
+I<1FE0003FF0007FF800783C00300E00000E00000E0003FE001FFE003E0E00700E00E00E
+00E00E00E00E00783E007FFFE03FE7E00F83E013127E9116>97 D<FC0000FC0000FC0000
+1C00001C00001C00001C00001C7C001DFE001FFF001F07801E03C01C01C01C00E01C00E0
+1C00E01C00E01C00E01C00E01C01C01E03C01F07801FFF001DFE000C780013197F9816>
+I<03F80FFC1FFE3C1E780C7000E000E000E000E000E000F000700778073E0E1FFC0FF803
+F010127D9116>I<003F00003F00003F0000070000070000070000070003C7000FF7001F
+FF003C1F00780F00700700E00700E00700E00700E00700E00700E00700700F00780F003C
+1F001FFFE00FF7E007C7E013197F9816>I<03F0000FFC001FFE003C0F00780700700380
+E00380FFFF80FFFF80FFFF80E00000E000007003807803803E07801FFF0007FE0001F800
+11127E9116>I<001E00007F0001FF8001C7800383000380000380007FFF00FFFF00FFFF
+000380000380000380000380000380000380000380000380000380000380000380000380
+007FFC00FFFE007FFC0011197F9816>I<03E3C007F7E00FFFE01C1CC0380E00380E0038
+0E00380E00380E001C1C000FF8001FF0001BE0003800001800001FFC001FFF003FFF8070
+03C0E000E0E000E0E000E0E000E07001C07C07C03FFF800FFE0003F800131C7F9116>I<
+FC0000FC0000FC00001C00001C00001C00001C00001C78001DFC001FFE001F0F001E0700
+1C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700FF8FE0FF9FE0
+FF8FE013197F9816>I<03000780078003000000000000000000FF80FF80FF8003800380
+0380038003800380038003800380038003800380FFFCFFFEFFFC0F1A7C9916>I<003000
+780078003000000000000000000FF81FF80FF80038003800380038003800380038003800
+3800380038003800380038003800380038003800386070F0F0FFE07FC03F800D237E9916
+>I<7E0000FE00007E00000E00000E00000E00000E00000E7FE00E7FE00E7FE00E0F000E
+1E000E3C000E78000EF0000FF0000FF8000FBC000F1E000E0E000E07000E07807F87F0FF
+CFF07F87F01419809816>I<7FC000FFC0007FC00001C00001C00001C00001C00001C000
+01C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000
+01C00001C0007FFF00FFFF807FFF0011197E9816>I<F9C380FFEFC0FFFFE03C78E03C78
+E03870E03870E03870E03870E03870E03870E03870E03870E03870E03870E0FE7CF8FE7C
+F8FE7CF81512809116>I<FC7800FDFC00FFFE001F0F001E07001C07001C07001C07001C
+07001C07001C07001C07001C07001C07001C0700FF8FE0FF9FE0FF8FE013127F9116>I<
+03E0000FF8001FFC003C1E00780F00700700E00380E00380E00380E00380E00380F00780
+700700780F003C1E001FFC000FF80003E00011127E9116>I<FC7C00FDFE00FFFF001F07
+801E03C01C01C01C00E01C00E01C00E01C00E01C00E01C00E01C01C01E03C01F07801FFF
+001DFE001C78001C00001C00001C00001C00001C00001C0000FF8000FF8000FF8000131B
+7F9116>I<03E3800FF3801FFB803E0F80780780700780E00380E00380E00380E00380E0
+0380E003807007807807803C1F801FFB800FF38003E38000038000038000038000038000
+0380000380001FF0003FF8001FF0151B7F9116>I<7F0FC0FF3FE07F7FE007F04007C000
+0780000780000700000700000700000700000700000700000700000700007FFC00FFFC00
+7FFC0013127F9116>I<0FEC3FFC7FFCF03CE01CE01C70007F801FF007F8003C600EE00E
+F00EF81EFFFCFFF8C7E00F127D9116>I<0300000700000700000700000700007FFF00FF
+FF00FFFF0007000007000007000007000007000007000007000007010007038007038007
+038007870003FE0001FC0000F80011177F9616>I<FC3F00FC3F00FC3F001C07001C0700
+1C07001C07001C07001C07001C07001C07001C07001C07001C07001C1F001FFFE00FF7E0
+07C7E013127F9116>I<7F1FC0FF9FE07F1FC01C07001C07000E0E000E0E000E0E00071C
+00071C00071C00071C0003B80003B80003B80001F00001F00000E00013127F9116>I<FF
+1FE0FF1FE0FF1FE038038038038038038038038039F38039F38019F30019B30019B30019
+B3001DB7001D17001F1F000F1E000E0E0013127F9116>I<7F1FC07F3FC07F1FC00F1E00
+073C0003B80003F00001F00000E00001E00001F00003B800073C00071C000E0E007F1FC0
+FF3FE07F1FC013127F9116>I<7F1FC0FF9FE07F1FC01C07000E07000E0E000E0E00070E
+00071C00071C00039C00039C0003980001B80001B80000F00000F00000F00000E00000E0
+0000E00001C00079C0007BC0007F80007F00003C0000131B7F9116>I<001F80007F8000
+FF8001E00001C00001C00001C00001C00001C00001C00001C00001C00001C00003C0007F
+8000FF0000FF00007F800003C00001C00001C00001C00001C00001C00001C00001C00001
+C00001C00001E00000FF80007F80001F8011207E9C16>123 D<E0E0E0E0E0E0E0E0E0E0
+E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E00320779C16>I<7C0000FF0000FF
+800003C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001E00000
+FF00007F80007F8000FF0001E00001C00001C00001C00001C00001C00001C00001C00001
+C00001C00003C000FF8000FF00007C000011207E9C16>I E /FH
+52 128 df<003FC00001F0300003C0380007C07C000F807C000F807C000F8038000F8000
+000F8000000F8000000F800000FFFFFC00FFFFFC000F807C000F807C000F807C000F807C
+000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C
+000F807C007FE1FF807FE1FF80191D809C1B>12 D<003FFC0001F07C0003C07C0007C07C
+000F807C000F807C000F807C000F807C000F807C000F807C000F807C00FFFFFC00FFFFFC
+000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C
+000F807C000F807C000F807C000F807C000F807C007FF3FF807FF3FF80191D809C1B>I<
+78FCFCFCFC7806067D850D>46 D<03F8000F1E001C07003C07803803807803C07803C078
+03C0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F8
+03E07803C07803C03803803C07801C07000F1E0003F800131B7E9A18>48
+D<00600001E0000FE000FFE000F3E00003E00003E00003E00003E00003E00003E00003E0
+0003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0
+0003E0007FFF807FFF80111B7D9A18>I<78FCFCFCFC7800000000000078FCFCFCFC7806
+127D910D>58 D<00038000000380000007C0000007C0000007C000000FE000000FE00000
+1FF000001BF000003BF8000031F8000031F8000060FC000060FC0000E0FE0000C07E0000
+C07E0001803F0001FFFF0003FFFF8003001F8007001FC006000FC006000FC00C0007E00C
+0007E0FF803FFEFF803FFE1F1C7E9B24>65 D<FFFFF800FFFFFF000FC01F800FC00FC00F
+C007C00FC007E00FC007E00FC007E00FC007E00FC007E00FC007C00FC00F800FC03F000F
+FFFE000FC00F800FC007C00FC003E00FC003E00FC003F00FC003F00FC003F00FC003F00F
+C003F00FC007E00FC007E00FC01FC0FFFFFF00FFFFFC001C1C7E9B22>I<001FE02000FF
+F8E003F80FE007C003E00F8001E01F0000E03E0000E03E0000607E0000607C000060FC00
+0000FC000000FC000000FC000000FC000000FC000000FC000000FC0000007C0000607E00
+00603E0000603E0000C01F0000C00F80018007C0030003F80E0000FFFC00001FE0001B1C
+7D9B22>I<FFFFF800FFFFFF000FC01FC00FC007E00FC001F00FC001F80FC000F80FC000
+FC0FC0007C0FC0007C0FC0007E0FC0007E0FC0007E0FC0007E0FC0007E0FC0007E0FC000
+7E0FC0007E0FC0007C0FC0007C0FC0007C0FC000F80FC000F80FC001F00FC007E00FC01F
+C0FFFFFF00FFFFF8001F1C7E9B25>I<FFFFFF00FFFFFF000FC01F000FC007000FC00300
+0FC003800FC003800FC0C1800FC0C1800FC0C1800FC1C0000FC3C0000FFFC0000FFFC000
+0FC3C0000FC1C0000FC0C0000FC0C0600FC0C0600FC000E00FC000C00FC000C00FC001C0
+0FC001C00FC003C00FC00F80FFFFFF80FFFFFF801B1C7E9B1F>I<FFFFFF00FFFFFF000F
+C01F000FC007000FC003000FC003800FC003800FC001800FC0C1800FC0C1800FC0C0000F
+C1C0000FC3C0000FFFC0000FFFC0000FC3C0000FC1C0000FC0C0000FC0C0000FC0C0000F
+C000000FC000000FC000000FC000000FC000000FC00000FFFE0000FFFE0000191C7E9B1E
+>I<000FF008007FFE3801FC07F807E001F80F8000781F0000783F0000383E0000387E00
+00187C000018FC000000FC000000FC000000FC000000FC000000FC000000FC007FFFFC00
+7FFF7C0001F87E0001F83E0001F83F0001F81F0001F80F8001F807E001F801FC07F8007F
+FE78000FF818201C7D9B26>I<FFFC3FFFFFFC3FFF0FC003F00FC003F00FC003F00FC003
+F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FFFFFF00FFFFFF00FC003
+F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003
+F00FC003F00FC003F0FFFC3FFFFFFC3FFF201C7E9B25>I<FFFCFFFC0FC00FC00FC00FC0
+0FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC0
+0FC00FC0FFFCFFFC0E1C7E9B12>I<07FFF007FFF0001F80001F80001F80001F80001F80
+001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80
+001F80301F80781F80FC1F80FC1F80FC1F00783E00387C000FF000141C7F9B19>I<FFFC
+07FF00FFFC07FF000FC000E0000FC001C0000FC00380000FC00600000FC00C00000FC038
+00000FC07000000FC0E000000FC1C000000FC3C000000FC7E000000FCFF000000FFBF000
+000FF1F800000FE0FC00000FC0FE00000FC07E00000FC03F00000FC01F80000FC01FC000
+0FC00FC0000FC007E0000FC007F0000FC003F800FFFC1FFF80FFFC1FFF80211C7E9B25>
+I<FFFE00FFFE000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0
+000FC0000FC0000FC0000FC0000FC0000FC0030FC0030FC0030FC0070FC0070FC0060FC0
+0E0FC01E0FC07EFFFFFEFFFFFE181C7E9B1D>I<FFC00003FFFFE00007FF0FE00007F00D
+F0000DF00DF0000DF00DF0000DF00CF80019F00CF80019F00C7C0031F00C7C0031F00C3E
+0061F00C3E0061F00C1F00C1F00C1F00C1F00C1F00C1F00C0F8181F00C0F8181F00C07C3
+01F00C07C301F00C03E601F00C03E601F00C01FC01F00C01FC01F00C01FC01F00C00F801
+F00C00F801F0FFC0701FFFFFC0701FFF281C7E9B2D>I<FFE003FFFFE003FF0FF000300F
+F800300DFC00300CFE00300C7E00300C3F00300C1F80300C1FC0300C0FE0300C07F0300C
+03F0300C01F8300C01FC300C00FE300C007F300C003F300C001FB00C001FF00C000FF00C
+0007F00C0003F00C0001F00C0000F00C0000F0FFC00070FFC00030201C7E9B25>I<FFFF
+F800FFFFFE000FC03F800FC00F800FC007C00FC007E00FC007E00FC007E00FC007E00FC0
+07E00FC007C00FC007C00FC00F800FC03F000FFFFC000FC000000FC000000FC000000FC0
+00000FC000000FC000000FC000000FC000000FC000000FC000000FC00000FFFC0000FFFC
+00001B1C7E9B21>80 D<FFFFF00000FFFFFE00000FC03F00000FC00F80000FC007C0000F
+C007E0000FC007E0000FC007E0000FC007E0000FC007E0000FC007C0000FC00F80000FC0
+3E00000FFFF000000FC07C00000FC03E00000FC03F00000FC01F80000FC01F80000FC01F
+80000FC01F80000FC01F80000FC01F80000FC01F81800FC01F81800FC00FC180FFFC07C3
+00FFFC01FE00211C7E9B24>82 D<07F8201FFEE03C07E07801E07000E0F000E0F00060F0
+0060F80000FE0000FFE0007FFE003FFF003FFF800FFFC007FFE0007FE00003F00001F000
+00F0C000F0C000F0C000E0E000E0F001C0FC03C0EFFF0083FC00141C7D9B1B>I<7FFFFF
+E07FFFFFE0781F81E0701F80E0601F8060E01F8070C01F8030C01F8030C01F8030C01F80
+30001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F80
+00001F8000001F8000001F8000001F8000001F8000001F8000001F800007FFFE0007FFFE
+001C1C7E9B21>I<FFFC03FFFFFC03FF0FC000300FC000300FC000300FC000300FC00030
+0FC000300FC000300FC000300FC000300FC000300FC000300FC000300FC000300FC00030
+0FC000300FC000300FC000300FC000300FC0003007C0003007C0006003E000E001F001C0
+00FC0780007FFE00000FF800201C7E9B25>I<FFF87FFE0FFCFFF87FFE0FFC0FC007E000
+C00FC007F000C00FE003F001C007E003F0018007E007F8018007F007F8038003F00FFC03
+0003F00CFC030001F80CFC060001F81CFE060001FC187E0E0000FC187E0C0000FC303F0C
+0000FE303F1C00007E703F9800007E601F9800003F601FB000003FE01FF000003FC00FF0
+00001FC00FE000001F8007E000001F8007E000000F8007C000000F0003C0000007000380
+000007000380002E1C7F9B31>87 D<7FFE1FFE007FFE1FFE0007F001800003F803800001
+F807000001FC06000000FE0C0000007F1C0000003F380000003FB00000001FE00000000F
+E00000000FE000000007F000000003F800000007F80000000FFC0000000CFE000000187E
+000000387F000000703F800000601FC00000C01FC00001C00FE000038007F000030003F0
+00FFF01FFF80FFF01FFF80211C7F9B24>I<0FF8001C1E003E0F803E07803E07C01C07C0
+0007C0007FC007E7C01F07C03C07C07C07C0F807C0F807C0F807C0780BC03E13F80FE1F8
+15127F9117>97 D<FF0000FF00001F00001F00001F00001F00001F00001F00001F00001F
+00001F00001F3F801FE1E01F80701F00781F003C1F003C1F003E1F003E1F003E1F003E1F
+003E1F003E1F003C1F003C1F00781F80701EC1E01C3F00171D7F9C1B>I<03FC000E0E00
+1C1F003C1F00781F00780E00F80000F80000F80000F80000F80000F80000780000780180
+3C01801C03000E0E0003F80011127E9115>I<000FF0000FF00001F00001F00001F00001
+F00001F00001F00001F00001F00001F001F9F00F07F01C03F03C01F07801F07801F0F801
+F0F801F0F801F0F801F0F801F0F801F07801F07801F03C01F01C03F00F0FFE03F9FE171D
+7E9C1B>I<03FC000F07001C03803C01C07801C07801E0F801E0F801E0FFFFE0F80000F8
+0000F800007800007800603C00601E00C00F038001FC0013127F9116>I<007F0001E380
+03C7C00787C00F87C00F83800F80000F80000F80000F80000F8000FFF800FFF8000F8000
+0F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F8000
+0F80007FF0007FF000121D809C0F>I<03F0F00E1F383C0F383807307807807807807807
+807807803807003C0F001E1C0033F0003000003000003000003FFF003FFFC01FFFE01FFF
+F07801F8F00078F00078F000787000707800F01E03C007FF00151B7F9118>I<FF0000FF
+00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F0FC01F31E01F
+40F01F80F81F80F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F
+00F81F00F8FFE7FFFFE7FF181D7F9C1B>I<1E003F003F003F003F001E00000000000000
+0000000000007F007F001F001F001F001F001F001F001F001F001F001F001F001F001F00
+1F00FFC0FFC00A1E7F9D0E>I<007800FC00FC00FC00FC00780000000000000000000000
+0003FC03FC007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C00
+7C007C007C707CF87CF878F8F070E01F800E26839D0F>I<FF0000FF00001F00001F0000
+1F00001F00001F00001F00001F00001F00001F00001F03FC1F03FC1F01C01F03001F0E00
+1F1C001F38001F78001FFC001FBE001F1F001F0F001F0F801F07C01F03E01F01E0FFE7FE
+FFE7FE171D7F9C19>I<FF00FF001F001F001F001F001F001F001F001F001F001F001F00
+1F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B1D7F9C
+0E>I<FF0FC07E00FF31E18F001F40F207801F80FC07C01F80FC07C01F00F807C01F00F8
+07C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807
+C01F00F807C01F00F807C0FFE7FF3FF8FFE7FF3FF825127F9128>I<FF0FC0FF31E01F40
+F01F80F81F80F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00
+F81F00F8FFE7FFFFE7FF18127F911B>I<01FC000F07801C01C03C01E07800F07800F0F8
+00F8F800F8F800F8F800F8F800F8F800F87800F07800F03C01E01E03C00F078001FC0015
+127F9118>I<FF3F80FFE1E01F80F01F00781F007C1F003C1F003E1F003E1F003E1F003E
+1F003E1F003E1F003C1F007C1F00781F80F01FC1E01F3F001F00001F00001F00001F0000
+1F00001F0000FFE000FFE000171A7F911B>I<FE3E00FE47001E8F801E8F801E8F801F07
+001F00001F00001F00001F00001F00001F00001F00001F00001F00001F0000FFE000FFE0
+0011127F9114>114 D<1FD830786018E018E018F000FF807FE07FF01FF807FC007CC01C
+C01CE01CE018F830CFC00E127E9113>I<0300030003000300070007000F000F003FFCFF
+FC1F001F001F001F001F001F001F001F001F001F0C1F0C1F0C1F0C0F08079803F00E1A7F
+9913>I<FF07F8FF07F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00
+F81F00F81F00F81F00F81F01F80F01F80786FF01F8FF18127F911B>I<FFC1FCFFC1FC1F
+00601F80600F80C00F80C007C18007C18003E30003E30003F70001F60001FE0000FC0000
+FC0000780000780000300016127F9119>I<FF8FF8FEFF8FF8FE1F03E0301F03E0301F03
+E0300F87F0600F86F0600FC6F8E007CC78C007CC78C003FC7D8003F83D8003F83F8001F0
+1F0001F01F0000F01E0000E00E0000E00E001F127F9122>I<FFC7FCFFC7FC1F81C00F83
+8007C70003EE0001FC0001F80000F800007C0000FE0001DF00039F80070F800607C00C03
+E0FF07FCFF07FC16127F9119>I<FFC1FCFFC1FC1F00601F80600F80C00F80C007C18007
+C18003E30003E30003F70001F60001FE0000FC0000FC0000780000780000300000300000
+6000706000F8E000F8C000F980007300003E0000161A7F9119>I<38387C7CFC7EFC7E7C
+7C38380F067C9D18>127 D E /FI 21 122 df<1E003F007F80FFC0FFC0FFC0FFC07F80
+3F001E000A0A7B8915>46 D<7FFFFFFFFFF07FFFFFFFFFF07FFFFFFFFFF07F803FE00FF0
+7E003FE003F07C003FE001F078003FE000F070003FE00070F0003FE00078F0003FE00078
+F0003FE00078E0003FE00038E0003FE00038E0003FE00038E0003FE00038E0003FE00038
+00003FE0000000003FE0000000003FE0000000003FE0000000003FE0000000003FE00000
+00003FE0000000003FE0000000003FE0000000003FE0000000003FE0000000003FE00000
+00003FE0000000003FE0000000003FE0000000003FE0000000003FE0000000003FE00000
+00003FE0000000003FE0000000003FE0000000003FE0000000003FE0000000003FE00000
+00003FE0000000003FE0000000FFFFFFF80000FFFFFFF80000FFFFFFF8002D2D7DAC34>
+84 D<01FFE000000FFFF800001F007E00003F803F00003FC01F80003FC01FC0003FC00F
+C0001F800FE0000F000FE00000000FE00000000FE00000000FE00000007FE000003FFFE0
+0001FFCFE00007F80FE0000FE00FE0001F800FE0003F000FE0007F000FE000FE000FE000
+FE000FE000FE000FE000FE000FE000FE001FE0007F001FE0003F0037F0001FC0E7FF800F
+FFC3FF8001FF00FF80211E7E9D24>97 D<0000003F0000000FFF0000000FFF0000000FFF
+000000007F000000007F000000007F000000007F000000007F000000007F000000007F00
+0000007F000000007F000000007F000000007F000000007F00000FF87F00007FFE7F0001
+FC0F7F0003F003FF0007E000FF000FC0007F001F80007F003F80007F003F80007F007F00
+007F007F00007F00FF00007F00FF00007F00FF00007F00FF00007F00FF00007F00FF0000
+7F00FF00007F00FF00007F007F00007F007F00007F007F00007F003F80007F001F80007F
+000FC000FF0007C001FF0003E003FF0001F80F7FF8007FFC7FF8000FF07FF8252E7EAD2A
+>100 D<001FF00000FFFC0001F83F0007E00F800FC007C01F8007E01F8003E03F8003F0
+7F0003F07F0001F87F0001F8FF0001F8FF0001F8FFFFFFF8FFFFFFF8FF000000FF000000
+FF000000FF0000007F0000007F0000007F0000003F8000381F8000380FC0007007C000E0
+03E001C001F80F80007FFF00000FF8001D1E7E9D22>I<003FC03E0001FFF9FF0003F0FF
+CF8007C03E1F800FC03F0F801F801F87001F801F80003F801FC0003F801FC0003F801FC0
+003F801FC0003F801FC0003F801FC0001F801F80001F801F80000FC03F000007C03E0000
+07F0FC00000FFFF800000C3FC000001C000000001C000000001C000000001E000000001F
+000000001FFFFE00000FFFFFC0000FFFFFF00007FFFFF80003FFFFFC001FFFFFFE003E00
+01FE007C00003F007800001F00F800001F00F800001F00F800001F00F800001F007C0000
+3E003E00007C001F0000F8000FE007F00003FFFFC000003FFC0000212C7E9D25>103
+D<03F0000000FFF0000000FFF0000000FFF000000007F000000007F000000007F0000000
+07F000000007F000000007F000000007F000000007F000000007F000000007F000000007
+F000000007F000000007F01FC00007F07FF00007F1E0F80007F380FC0007F6007E0007FC
+007E0007FC007F0007F8007F0007F8007F0007F0007F0007F0007F0007F0007F0007F000
+7F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F
+0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F00
+FFFF8FFFF8FFFF8FFFF8FFFF8FFFF8252E7DAD2A>I<07800FC01FE03FF03FF03FF03FF0
+1FE00FC00780000000000000000000000000000007E0FFE0FFE0FFE00FE00FE00FE00FE0
+0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0
+0FE0FFFEFFFEFFFE0F2F7DAE14>I<07E0000000FFE0000000FFE0000000FFE00000000F
+E00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE0
+0000000FE00000000FE00000000FE00000000FE00000000FE00FFF800FE00FFF800FE00F
+FF800FE001E0000FE003C0000FE00780000FE00F00000FE01E00000FE03C00000FE07000
+000FE1E000000FE3C000000FE7E000000FEFF000000FFFF800000FFBF800000FF1FC0000
+0FE0FE00000FC07E00000FC07F00000FC03F80000FC01FC0000FC01FC0000FC00FE0000F
+C007F0000FC003F0000FC003F800FFFC0FFFC0FFFC0FFFC0FFFC0FFFC0222E7DAD27>
+107 D<03E01FC001FC0000FFE07FF007FF0000FFE1E0F81E0F8000FFE380FC380FC00007
+E6007E6007E00007EC007EC007E00007EC007FC007F00007F8007F8007F00007F8007F80
+07F00007F0007F0007F00007F0007F0007F00007F0007F0007F00007F0007F0007F00007
+F0007F0007F00007F0007F0007F00007F0007F0007F00007F0007F0007F00007F0007F00
+07F00007F0007F0007F00007F0007F0007F00007F0007F0007F00007F0007F0007F00007
+F0007F0007F00007F0007F0007F00007F0007F0007F00007F0007F0007F00007F0007F00
+07F000FFFF8FFFF8FFFF80FFFF8FFFF8FFFF80FFFF8FFFF8FFFF80391E7D9D3E>109
+D<03E01FC000FFE07FF000FFE1E0F800FFE380FC0007E6007E0007EC007E0007EC007F00
+07F8007F0007F8007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007
+F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0
+007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F00FFFF8FFFF8FFFF8F
+FFF8FFFF8FFFF8251E7D9D2A>I<001FF80000FFFF0003F81FC007E007E00FC003F01F80
+01F83F8001FC3F8001FC7F0000FE7F0000FE7F0000FEFF0000FFFF0000FFFF0000FFFF00
+00FFFF0000FFFF0000FFFF0000FFFF0000FF7F0000FE7F0000FE7F0000FE3F8001FC3F80
+01FC1F8001F80FC003F007E007E003F81FC000FFFF00001FF800201E7E9D25>I<03F07F
+8000FFF1FFF000FFF781FC00FFFE007E0007FC003F0007F8001F8007F0001FC007F0000F
+E007F0000FF007F0000FF007F00007F007F00007F807F00007F807F00007F807F00007F8
+07F00007F807F00007F807F00007F807F00007F807F00007F007F0000FF007F0000FE007
+F0000FE007F0001FC007F8001F8007FC003F0007FE007E0007F781FC0007F3FFF00007F0
+7F800007F000000007F000000007F000000007F000000007F000000007F000000007F000
+000007F000000007F000000007F0000000FFFF800000FFFF800000FFFF800000252B7E9D
+2A>I<03E0FC00FFE1FF00FFE30F80FFE61F8007EC3FC007EC3FC007F83FC007F81F8007
+F80F0007F8000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007
+F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007
+F00000FFFFC000FFFFC000FFFFC0001A1E7E9D1F>114 D<01FF0C0FFFFC1E01FC38007C
+70003C70001CF0001CF0001CF8001CFE0000FFC0007FFE007FFFC03FFFF00FFFF807FFFC
+01FFFE000FFE0000FF60003FE0001FE0000FF0000FF0000FF8000EF8001EFE001CFF80F8
+E3FFE0C0FF80181E7E9D1D>I<00380000380000380000380000780000780000780000F8
+0000F80001F80003F80007F8001FFFFCFFFFFCFFFFFC03F80003F80003F80003F80003F8
+0003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80E03F8
+0E03F80E03F80E03F80E03F80E03F80E01F81C00FC1C007C38003FF0000FE0172A7FA91D
+>I<03F0003F00FFF00FFF00FFF00FFF00FFF00FFF0007F0007F0007F0007F0007F0007F
+0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F00
+07F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007
+F0007F0007F0007F0007F000FF0007F000FF0003F001FF0001F0037F0000FC0E7FF8007F
+FC7FF8001FF07FF8251E7D9D2A>I<FFFC00FFC0FFFC00FFC0FFFC00FFC00FE0001C000F
+F0003C0007F000380007F000380003F800700003F800700003FC00F00001FC00E00001FE
+01E00000FE01C00000FE01C000007F038000007F038000003F870000003F870000003FCF
+0000001FCE0000001FFE0000000FFC0000000FFC00000007F800000007F800000007F800
+000003F000000003F000000001E000000001E00000221E7E9D27>I<FFFE1FFF81FFE0FF
+FE1FFF81FFE0FFFE1FFF81FFE007F001F8001E0007F001FC001C0007F000FC003C0003F8
+00FC00380003F801FE00380003FC01FE00780001FC01FE00700001FC03BF00700000FE03
+BF00E00000FE07BF80E00000FF071F81E000007F071F81C000007F0E0FC1C000003F8E0F
+C38000003F9E0FC38000003F9C07E78000001FDC07E70000001FFC07F70000001FF803FF
+0000000FF803FE0000000FF001FE00000007F001FC00000007F001FC00000007E000FC00
+000003E000F800000003C0007800000001C000700000331E7F9D36>I<FFFE03FFE0FFFE
+03FFE0FFFE03FFE007F800780003FC00F00001FC01E00000FE03C000007F03C000007F87
+8000003FCF0000001FDE0000000FFC00000007F800000007F800000003F800000001FC00
+000003FE00000007FF000000077F8000000F3F8000001E1FC000003C0FE00000780FF000
+00F007F80000E003F80001E001FC0003C000FE00FFF807FFF0FFF807FFF0FFF807FFF024
+1E7F9D27>I<7FFE007FE07FFE007FE07FFE007FE007F0000E0007F8001E0003F8001C00
+03F8001C0001FC00380001FC00380001FE00780000FE00700000FF00F000007F00E00000
+7F00E000003F81C000003F81C000001FC38000001FC38000001FE78000000FE70000000F
+FF00000007FE00000007FE00000003FC00000003FC00000003FC00000001F800000001F8
+00000000F000000000F000000000E000000000E000000001E000000001C000003803C000
+007C03800000FE07800000FE07000000FE0E000000FC1E000000787C0000003FF0000000
+0FC0000000232B7F9D27>I E end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 300dpi
+TeXDict begin
+
+%%EndSetup
+%%Page: 57 1
+57 56 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y Fy(26.)52 b(Examples)0
+158 y FF(The)14 b FG(Dash)p FF(,)e FG(Dashto)f FF(and)j
+FG(Mono)e FF(cell)h(t)o(yp)q(es)h(in)f(some)f(of)h(these)h(examples)e
+(use)i(the)g FG(arrsy10)e FF(fon)o(t:)17 b(See)d Fw(x)q
+FF(14)e(and)h FG(\\arrsy)0 208 y FF(in)g Fw(x)q FF(25.)k(Also,)d
+FG(\\bb)f FF(in)o(v)o(ok)o(es)g(the)i(bbm)d(family)f(of)i(fon)o(ts.)-79
+299 y Fr(1)62 b Fx($$)-79 349 y Fr(2)g Fx(\\grid=.75c)o(m)-79
+399 y Fr(3)g Fx(\\Diagram)-79 448 y Fr(4)g Fx(A')176
+b(&)137 b(&)19 b(\\rTo)f(^{f'})g(&)137 b(&)19 b(B')529
+b(\\\\)-79 498 y Fr(5)278 b Fx(&)19 b(\\rdTo)f(<a)h(\\dh{2pt})o(&)e(&)
+137 b(&)176 b(&)19 b(\\rdTo)f(_b)215 b(\\\\)-79 548 y
+Fr(6)62 b Fx(\\dTo)18 b(<{g'})g(&)137 b(&)19 b(A)196
+b(&)137 b(&)19 b(\\dTo)f(<{h'})g(:{.25})-79 598 y Fr(7)886
+b Fx(\\rTo)18 b(^f)h(:{.25})e(\\br)-79 648 y Fr(8)1043
+b Fx(&)195 b(&)20 b(B)137 b(\\\\)-79 697 y Fr(9)1455
+b Fx(\\\\)-95 747 y Fr(10)61 b Fx(C')176 b(&)137 b(&)19
+b(\\rTo)f(^{k'})g(:{.75})f(\\dTo)h(<g)h(:{.25})e(\\br)-95
+797 y Fr(11)689 b Fx(&)137 b(&)19 b(D')117 b(&)195 b(&)20
+b(\\dTo)e(>h)h(\\\\)-95 847 y Fr(12)277 b Fx(&)19 b(\\rdTo)f(_c)h
+(\\dh{.5pt)o(}&&)134 b(&)176 b(&)19 b(\\rdTo)f(_d)215
+b(\\\\)-95 897 y Fr(13)277 b Fx(&)137 b(&)19 b(C)196
+b(&)137 b(&)19 b(\\rTo)f(^k)h(&)195 b(&)20 b(D)137 b(\\\\)-95
+946 y Fr(14)61 b Fx(\\endDiagra)o(m)-95 996 y Fr(15)g
+Fx($$)889 1135 y
+gsave
+ 889 1135 a 889 1135 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 889 1135 a 741
+1146 a Fw(\000)-21 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)-21 b Fv(\021)889 1135 y
+grestore
+
+889 1135 a 889 1135 a
+gsave
+ 889 1135 a 889 1135 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 889 1135
+a 888 1123 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 888 1123 a 873 1117 a Fu(f)892 1105 y Ft(0)888
+1135 y
+grestore
+ 888 1135 a 800 1224 a
+gsave
+ 800 1224 a 800 1224 a
+currentpoint currentpoint translate -2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 800
+1224 a 698 1234 a Fw(\000)h(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)
+h(\000)-19 b Fv(\021)800 1224 y
+grestore
+ 800 1224 a 800 1224 a
+gsave
+
+800 1224 a 800 1224 a
+currentpoint currentpoint translate -2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 800 1224 a 800 1236 a
+currentpoint currentpoint translate 2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 800 1236
+a 782 1249 a Fu(a)800 1224 y
+grestore
+ 800 1224 a 1154 1224 a
+gsave
+ 1154
+1224 a 1154 1224 a
+currentpoint currentpoint translate -2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 1154 1224 a 1052 1234 a Fw(\000)-13
+b(\000)k(\000)g(\000)g(\000)g(\000)g(\000)d Fv(\021)1154
+1224 y
+grestore
+ 1154 1224 a 1154 1224 a
+gsave
+ 1154 1224 a 1154 1224
+a
+currentpoint currentpoint translate -2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 1154 1224 a 1149 1236 a
+currentpoint currentpoint translate 2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 1149 1236 a 1134 1257 a Fu(b)1149
+1224 y
+grestore
+ 1149 1224 a 711 1313 a
+gsave
+ 711 1313 a 711 1313 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 711
+1313 a 553 1323 a Fw(\000)c(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)-15 b Fv(\021)711
+1313 y
+grestore
+ 711 1313 a 711 1313 a
+gsave
+ 711 1313 a 711 1313 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 711
+1313 a 705 1325 a
+currentpoint currentpoint translate 5594036 neg 0 atan rotate neg exch
+neg exch translate
+ 705 1325 a 677 1335 a Fu(g)694 1323
+y Ft(0)705 1313 y
+grestore
+ 705 1313 a 1066 1313 a
+gsave
+ 1066 1313 a
+1066 1313 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 1066 1313 a 907 1323 a Fw(\000)f(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)
+-16 b Fv(\021)1066 1313 y
+grestore
+ 1066 1313 a 1066 1313 a
+gsave
+ 1066
+1313 a 1066 1313 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 1066 1313 a 983 1325 a
+currentpoint currentpoint translate 5594036 neg 0 atan rotate neg exch
+neg exch translate
+ 983 1325 a
+952 1335 a Fu(h)971 1323 y Ft(0)983 1313 y
+grestore
+ 983 1313 a
+1066 1313 a
+gsave
+ 1066 1313 a 1066 1313 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 1066 1313 a 889 1313
+a
+1 setgray
+ 889 1313 a 912 1323 306 21 v 1066 1313 a
+grestore
+ 1066 1313
+a 1066 1313 a
+gsave
+ 1066 1313 a 1066 1313 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 1066 1313 a 912
+1323 a Fw(\000)h(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)-15 b Fv(\021)1066 1313 y
+grestore
+
+1066 1313 a 1066 1313 a
+gsave
+ 1066 1313 a 1066 1313 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 1066
+1313 a 989 1300 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 989 1300 a 979 1294 a Fu(f)989 1313
+y
+grestore
+ 989 1313 a 889 1490 a
+gsave
+ 889 1490 a 889 1490 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 889 1490
+a 742 1500 a Fw(\000)-23 b(\000)-9 b(\000)h(\000)f(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)-22 b Fv(\021)889 1490
+y
+grestore
+ 889 1490 a 889 1490 a
+gsave
+ 889 1490 a 889 1490 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 889 1490
+a 961 1477 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 961 1477 a -15 w Fu(k)965 1465 y Ft(0)961
+1490 y
+grestore
+ 961 1490 a 889 1490 a
+gsave
+ 889 1490 a 889 1490 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 889
+1490 a 711 1490 a
+1 setgray
+ 711 1490 a 730 1500 310 21 v 889 1490
+a
+grestore
+ 889 1490 a 889 1490 a
+gsave
+ 889 1490 a 889 1490 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 889 1490
+a 730 1500 a Fw(\000)-14 b(\000)-9 b(\000)g(\000)h(\000)f(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)c Fv(\021)889 1490
+y
+grestore
+ 889 1490 a 889 1490 a
+gsave
+ 889 1490 a 889 1490 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 889 1490
+a 807 1502 a
+currentpoint currentpoint translate 5594036 neg 0 atan rotate neg exch
+neg exch translate
+ 807 1502 a 790 1513 a Fu(g)807 1490 y
+grestore
+ 807
+1490 a 1243 1490 a
+gsave
+ 1243 1490 a 1243 1490 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 1243 1490
+a 1084 1500 a Fw(\000)g(\000)k(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)c Fv(\021)1243 1490 y
+grestore
+ 1243
+1490 a 1243 1490 a
+gsave
+ 1243 1490 a 1243 1490 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 1243 1490
+a 1239 1477 a
+currentpoint currentpoint translate 5594036 neg 0 atan rotate neg exch
+neg exch translate
+ 1239 1477 a 11 x Fu(h)1239 1490 y
+grestore
+ 1239
+1490 a 800 1578 a
+gsave
+ 800 1578 a 800 1578 a
+currentpoint currentpoint translate -2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 800 1578 a 698
+1589 a Fw(\000)-23 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+-22 b Fv(\021)800 1578 y
+grestore
+ 800 1578 a 800 1578 a
+gsave
+ 800 1578
+a 800 1578 a
+currentpoint currentpoint translate -2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 800 1578 a 797 1591 a
+currentpoint currentpoint translate 2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 797 1591 a 782 1603
+a Fu(c)797 1578 y
+grestore
+ 797 1578 a 1154 1578 a
+gsave
+ 1154 1578 a
+1154 1578 a
+currentpoint currentpoint translate -2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 1154 1578 a 1052 1589 a Fw(\000)-14 b(\000)-9
+b(\000)g(\000)h(\000)f(\000)g(\000)c Fv(\021)1154 1578
+y
+grestore
+ 1154 1578 a 1154 1578 a
+gsave
+ 1154 1578 a 1154 1578 a
+currentpoint currentpoint translate -2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 1154
+1578 a 1149 1591 a
+currentpoint currentpoint translate 2797018 neg 2797018 atan rotate
+neg exch neg exch translate
+ 1149 1591 a 1132 1611 a Fu(d)1149
+1578 y
+grestore
+ 1149 1578 a 1066 1667 a
+gsave
+ 1066 1667 a 1066 1667
+a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 1066 1667 a 913 1677 a Fw(\000)d(\000)-9 b(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-16 b Fv(\021)1066
+1667 y
+grestore
+ 1066 1667 a 1066 1667 a
+gsave
+ 1066 1667 a 1066 1667
+a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 1066 1667 a 1065 1654 a
+currentpoint currentpoint translate 0 neg 5594036 atan rotate neg exch
+neg exch translate
+ 1065 1654 a -9 w Fu(k)1065
+1667 y
+grestore
+ 1065 1667 a 690 1146 a FB(A)721 1129 y Fs(0)1043
+1146 y FB(B)1076 1129 y Fs(0)873 1323 y FB(A)322 b(B)689
+1500 y(C)722 1483 y Fs(0)1042 1500 y FB(D)1077 1483 y
+Fs(0)872 1677 y FB(C)h(D)0 1852 y FH(G.)16 b(Bredon)p
+FF(,)11 b FC(Intr)n(o)n(duction)16 b(to)e(Comp)n(act)h(T)m(r)n
+(ansformation)f(Gr)n(oups)p FF(,)g(page)g(75.)-79 1944
+y Fr(1)62 b Fx($$)-79 1993 y Fr(2)g Fx(\\Dg)-79 2043
+y Fr(3)g Fx(F\\times)17 b(K\\times)g(U)98 b(&)19 b(\\rTo)f(^{\\rm)f
+(proj})97 b(&)215 b(&)19 b(K\\times)e(U)157 b(\\\\)-79
+2093 y Fr(4)62 b Fx(\\dTo)352 b(&)431 b(&)215 b(&)19
+b(\\dTo)f(>{\\rm)g(proj})g(\\\\)-79 2143 y Fr(5)62 b
+Fx(F\\times_K)16 b(\(K\\times)h(U\))i(&)g({})g(\\approx)d(F\\times)h(U)
+j(&)f(\\rTo)f(^{\\rm)g(proj}&)f(U)196 b(\\\\)-79 2193
+y Fr(6)62 b Fx(\\endDg)-79 2242 y Fr(7)g Fx($$)1012 2377
+y
+gsave
+ 1012 2377 a 1012 2377 a
+currentpoint currentpoint translate 0 neg 7515619 atan rotate neg exch
+neg exch translate
+ 1012 2377 a 885 2387 a Fw(\000)-21
+b(\000)-9 b(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g
+(\000)g(\000)-20 b Fv(\021)1012 2377 y
+grestore
+ 1012 2377 a 1012
+2377 a
+gsave
+ 1012 2377 a 1012 2377 a
+currentpoint currentpoint translate 0 neg 7515619 atan rotate neg exch
+neg exch translate
+ 1012 2377 a 1033 2364
+a
+currentpoint currentpoint translate 0 neg 7515619 atan rotate neg exch
+neg exch translate
+ 1033 2364 a 1003 2358 a Fr(pro)r(j)1033 2377 y
+grestore
+ 1033
+2377 a 774 2471 a
+gsave
+ 774 2471 a 774 2471 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 774 2471 a 701
+2482 a Fw(\000)i(\000)-9 b(\000)g(\000)g(\000)-18 b Fv(\021)774
+2471 y
+grestore
+ 774 2471 a 1250 2471 a
+gsave
+ 1250 2471 a 1250 2471 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+
+1250 2471 a 1178 2482 a Fw(\000)g(\000)-9 b(\000)g(\000)g(\000)-16
+b Fv(\021)1250 2471 y
+grestore
+ 1250 2471 a 1250 2471 a
+gsave
+ 1250 2471
+a 1250 2471 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1250 2471 a 1248 2459 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 1248 2459 a 10
+x Fr(pro)r(j)1248 2471 y
+grestore
+ 1248 2471 a 1122 2566 a
+gsave
+ 1122
+2566 a 1122 2566 a
+currentpoint currentpoint translate 0 neg 4036624 atan rotate neg exch
+neg exch translate
+ 1122 2566 a 1088 2576 a Fw(\000)d(\000)-9
+b(\000)g(\000)g(\000)-18 b Fv(\021)1122 2566 y
+grestore
+ 1122 2566
+a 1122 2566 a
+gsave
+ 1122 2566 a 1122 2566 a
+currentpoint currentpoint translate 0 neg 4036624 atan rotate neg exch
+neg exch translate
+ 1122 2566 a 1157
+2553 a
+currentpoint currentpoint translate 0 neg 4036624 atan rotate neg exch
+neg exch translate
+ 1157 2553 a 1127 2547 a Fr(pro)r(j)1157 2566 y
+grestore
+
+1157 2566 a 671 2387 a FB(F)15 b Fw(\002)10 b FB(K)i
+Fw(\002)d FB(U)318 b(K)12 b Fw(\002)e FB(U)639 2576 y(F)15
+b Fw(\002)713 2582 y Fu(K)754 2576 y FF(\()p FB(K)e Fw(\002)c
+FB(U)c FF(\))12 b Fw(\031)g FB(F)j Fw(\002)9 b FB(U)158
+b(U)954 2770 y FF(57)p eop
+%%Page: 58 2
+58 57 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)-79 42 y Fr(1)62 b Fx($$)-79
+91 y Fr(2)g Fx(\\joined)17 b(\\let\\labe)o(lst)o(yle)o(\\t)o(ext)o(st)o
+(yle)-79 141 y Fr(3)62 b Fx(\\Graph{3cm)o(,2)o(}{3)o(cm)o(,4})-79
+191 y Fr(4)g Fx(\\Line)18 b(\(0,0\))f(\(0,4\))h(<{f\(z,s\)})-79
+241 y Fr(5)62 b Fx(\\Line)18 b(\(0,4\))f(\(2,4\))h(^{H\(z,t\)})-79
+291 y Fr(6)62 b Fx(\\Line)18 b(\(0,0\))f(\(2,0\))h(_{*})-79
+340 y Fr(7)62 b Fx(\\Line)18 b(\(2,0\))f(\(2,4\))-79
+390 y Fr(8)62 b Fx(\\Line)18 b(\(0,4\))f(\(2,2\))h(_{\\;\\;H\(z,)o(0\))
+e(=)j(f\(z,1\)})e(\\ro)-79 440 y Fr(9)62 b Fx(\\endGraph)-95
+490 y Fr(10)f Fx(\\qquad\\qqu)o(ad)-95 540 y Fr(11)g
+Fx(H'\(z,t,s\))16 b(=)-95 589 y Fr(12)61 b Fx(\\cases{f\(z)o(,2)o(s/\()
+o(2-)o(t\)\))o(&)17 b(if)h($0\\le)g(2s\\le)g(2)h(-)g(t$\\cr)-95
+639 y Fr(13)198 b Fx(\\cr)-95 689 y Fr(14)g Fx(H\(z,2s)18
+b(-)h(2)g(+)g(t\)&)g(if)g($2)f(-)i(t\\le)e(2s\\le)f(2$\\cr})-95
+739 y Fr(15)61 b Fx($$)263 1012 y
+gsave
+ 263 1012 a 263 1012
+a
+currentpoint currentpoint translate 5594036 neg 0 atan rotate neg exch
+neg exch translate
+ 263 1012 a 82 1022 a Fw(\000)-17 b(\000)-9 b(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)
+-17 b(\000)263 1012 y
+grestore
+ 263 1012 a 263 1012 a
+gsave
+ 263 1012
+a 263 1012 a
+currentpoint currentpoint translate 5594036 neg 0 atan rotate neg exch
+neg exch translate
+ 263 1012 a 263 999 a
+currentpoint currentpoint translate -5594036 neg 0 atan rotate neg
+exch neg exch translate
+ 263 999 a 147 1009
+a FB(f)t FF(\()p FB(z)r(;)7 b(s)p FF(\))263 1012 y
+grestore
+ 263
+1012 a 440 834 a
+gsave
+ 440 834 a 440 834 a
+currentpoint currentpoint translate 0 neg 5594038 atan rotate neg exch
+neg exch translate
+ 440 834 a 259 845
+a Fw(\000)-17 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)-17 b(\000)440
+834 y
+grestore
+ 440 834 a 440 834 a
+gsave
+ 440 834 a 440 834 a
+currentpoint currentpoint translate 0 neg 5594038 atan rotate neg exch
+neg exch translate
+ 440 834
+a 440 822 a
+currentpoint currentpoint translate 0 neg 5594038 atan rotate neg exch
+neg exch translate
+ 440 822 a 378 812 a FB(H)s FF(\()p FB(z)r(;)7
+b(t)p FF(\))440 834 y
+grestore
+ 440 834 a 440 1189 a
+gsave
+ 440 1189 a
+440 1189 a
+currentpoint currentpoint translate 0 neg 5594038 atan rotate neg exch
+neg exch translate
+ 440 1189 a 259 1199 a Fw(\000)-17 b(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f
+(\000)g(\000)g(\000)-17 b(\000)440 1189 y
+grestore
+ 440 1189 a
+440 1189 a
+gsave
+ 440 1189 a 440 1189 a
+currentpoint currentpoint translate 0 neg 5594038 atan rotate neg exch
+neg exch translate
+ 440 1189 a 440 1201
+a
+currentpoint currentpoint translate 0 neg 5594038 atan rotate neg exch
+neg exch translate
+ 440 1201 a 430 1220 a Fw(\003)440 1189 y
+grestore
+ 440 1189 a
+617 1012 a
+gsave
+ 617 1012 a 617 1012 a
+currentpoint currentpoint translate 5594036 neg 0 atan rotate neg exch
+neg exch translate
+ 617 1012 a 436 1022
+a Fw(\000)g(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h
+(\000)f(\000)g(\000)g(\000)g(\000)g(\000)-16 b(\000)617
+1012 y
+grestore
+ 617 1012 a 440 923 a
+gsave
+ 440 923 a 440 923 a
+currentpoint currentpoint translate -2797018 neg 5594038 atan rotate
+neg exch neg exch translate
+ 440 923
+a 238 933 a Fw(\000)d(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)
+-19 b(\000)440 923 y
+grestore
+ 440 923 a 440 923 a
+gsave
+ 440 923 a 440
+923 a
+currentpoint currentpoint translate -2797018 neg 5594038 atan rotate
+neg exch neg exch translate
+ 440 923 a 300 967 a FB(H)s FF(\()p FB(z)r(;)7 b
+FF(0\))k(=)h FB(f)t FF(\()p FB(z)r(;)7 b FF(1\))440 923
+y
+grestore
+ 440 923 a 784 1022 a FB(H)822 1005 y Fs(0)833 1022
+y FF(\()p FB(z)r(;)g(t;)g(s)p FF(\))k(=)1013 937 y Fq(8)1013
+974 y(<)1013 1049 y(:)1057 972 y FB(f)t FF(\()p FB(z)r(;)c
+FF(2)p FB(s=)p FF(\(2)j Fw(\000)f FB(t)p FF(\)\))53 b(if)13
+b(0)e Fw(\024)h FF(2)p FB(s)g Fw(\024)f FF(2)e Fw(\000)h
+FB(t)1057 1072 y(H)s FF(\()p FB(z)r(;)d FF(2)p FB(s)i
+Fw(\000)h FF(2)f(+)g FB(t)p FF(\))42 b(if)13 b(2)c Fw(\000)g
+FB(t)j Fw(\024)g FF(2)p FB(s)f Fw(\024)h FF(2)-79 1471
+y Fr(1)62 b Fx($$)-79 1520 y Fr(2)g Fx(\\def\\mod{\\)o(ma)o(thr)o(el)o
+({\\b)o(ig/)o(}})-79 1570 y Fr(3)g Fx(\\Dg)-79 1620 y
+Fr(4)g Fx({\\rm)18 b(Spin}\(3\))f(&)156 b(&)137 b(&)g(&)19
+b(SU\(2\))136 b(\\\\)-79 1670 y Fr(5)337 b Fx(&)19 b(\\rdTo)37
+b(&)137 b(&)19 b(\\ldTo)293 b(\\\\)-79 1720 y Fr(6)337
+b Fx(&)156 b(&)19 b(SO\(3\))450 b(\\\\)-79 1769 y Fr(7)337
+b Fx(&)156 b(&)19 b(\\dTo)470 b(\\\\)-79 1819 y Fr(8)62
+b Fx(&)19 b(O\(3\)\\mod)e(O\(1\)^3)g(=)i({})g(&)g(SO\(3\)\\mod\()o
+(O\(1)o(\)^3)o(\\c)o(ap)d(SO\(3\)\))i(\\\\)-79 1869 y
+Fr(9)62 b Fx(\\endDg)-95 1919 y Fr(10)f Fx($$)1030 2150
+y
+gsave
+ 1030 2150 a 1030 2150 a
+currentpoint currentpoint translate -2983488 neg 2797019 atan rotate
+neg exch neg exch translate
+ 1030 2150 a 937 2161 a Fw(\000)-18
+b(\000)-9 b(\000)g(\000)g(\000)h(\000)f(\000)-18 b Fv(\021)1030
+2150 y
+grestore
+ 1030 2150 a 1207 2150 a
+gsave
+ 1207 2150 a 1207 2150
+a
+currentpoint currentpoint translate -2983488 neg -2797019 atan rotate
+neg exch neg exch translate
+ 1207 2150 a 1114 2161 a Fw(\000)g(\000)-8 b(\000)f(\000)g(\000)g
+(\000)g(\000)-17 b Fv(\021)1207 2150 y
+grestore
+ 1207 2150 a 1119
+2339 a
+gsave
+ 1119 2339 a 1119 2339 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1119 2339 a 1053 2350
+a Fw(\000)k(\000)k(\000)g(\000)d Fv(\021)1119 2339 y
+grestore
+
+1119 2339 a 875 2066 a FF(Spin)o(\(3\))231 b FB(S)r(U)5
+b FF(\(2\))1062 2255 y FB(S)r(O)q FF(\(3\))597 2444 y
+FB(O)q FF(\(3\))695 2411 y Fq(\016)730 2444 y FB(O)q
+FF(\(1\))816 2427 y Fr(3)846 2444 y FF(=)12 b FB(S)r(O)q
+FF(\(3\))1015 2411 y Fq(\016)1051 2444 y FF(\()p FB(O)q
+FF(\(1\))1153 2427 y Fr(3)1181 2444 y Fw(\\)d FB(S)r(O)q
+FF(\(3\)\))954 2770 y(58)p eop
+%%Page: 59 3
+59 58 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y FH(S.)16 b(Mac)g(Lane)p
+FF(,)d FC(Cate)n(gories)h(for)g(the)h(Working)h(Mathematician)p
+FF(,)e(page)g(109.)-79 133 y Fr(1)62 b Fx($$)-79 183
+y Fr(2)g Fx(\\def\\cod{{)o(\\r)o(m)17 b(cod}\\,})g(\\def\\dom)o({{\\)o
+(rm)f(dom}\\,})-79 232 y Fr(3)62 b Fx(\\cellwidth)o(+=)o(2mm)-79
+282 y Fr(4)g Fx(\\Dg)-79 332 y Fr(5)g Fx(&)19 b(F)g(&)h(_{\\cod)d(u})i
+(&)g(\\rEq)136 b(&)19 b(F)g(&)g(_{\\cod)f(u})h(&)97 b(&)255
+b(&)19 b(F_i)293 b(\\\\)-79 382 y Fr(6)62 b Fx(&)19 b(\\uTo)f(>{p_u})g
+(&)h(&)235 b(&)19 b(\\uTo)f(&)157 b(&)97 b(&)20 b(\\ruTo)d(<{p_i})h
+(\\tx{-5pt)o(})f(&)-79 432 y Fr(7)1376 b Fx(\\uDashto)17
+b(>{\\mu_i})f(\\\\)-79 482 y Fr(8)62 b Fx({\\mit\\Pi}_)o({u)o(:j\\)o
+(to)16 b(k}F_k)i(=)h({\\mit\\Pi})o(_u)d(&)-79 531 y Fr(9)101
+b Fx(F)19 b(&)h(_{\\cod)d(u})i(&)g(\\lTo)f(^f)h(\\up{3pt})d(\\lTo)j(_g)
+f(\\up{-3pt})-95 581 y Fr(10)630 b Fx(&)19 b({\\mit\\Pi}_)o(i)d(&)k(&)f
+(F_i)f(&)i(\\lDashto)c(^e)j(&)g(d)333 b(\\\\)-95 631
+y Fr(11)61 b Fx(&)19 b(\\dTo)f(>{p_u})g(&)h(&)235 b(&)19
+b(\\dTo)f(>{p_{\\dom)e(u}})705 b(\\\\)-95 681 y Fr(12)61
+b Fx(&)19 b(F)g(&)h(_{\\cod)d(u})i(&)g(\\lTo)f(^{Fu})g(&)h(F)g(&)g
+(_{\\dom)f(u})803 b(\\\\)-95 731 y Fr(13)61 b Fx(\\endDg)-95
+780 y Fr(14)g Fx($$)1018 915 y
+gsave
+ 1018 915 a 1018 915 a
+currentpoint currentpoint translate 0 neg 3793467 atan rotate neg exch
+neg exch translate
+
+1018 915 a 1013 925 a FF(=)1018 915 y
+grestore
+ 1018 915 a 842
+1009 a
+gsave
+ 842 1009 a 842 1009 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 842 1009 a 774 1019 a Fw(\000)-15
+b(\000)-9 b(\000)g(\000)g(\000)-15 b Fv(\021)842 1009
+y
+grestore
+ 842 1009 a 842 1009 a
+gsave
+ 842 1009 a 842 1009 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 842 1009
+a 846 1022 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 846 1022 a 10 x Fu(p)863 1036 y Fe(u)846
+1009 y
+grestore
+ 846 1009 a 1138 1009 a
+gsave
+ 1138 1009 a 1138 1009 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+
+1138 1009 a 1070 1019 a Fw(\000)f(\000)-9 b(\000)g(\000)g(\000)-15
+b Fv(\021)1138 1009 y
+grestore
+ 1138 1009 a 1276 1009 a
+gsave
+ 1276 1009
+a 1276 1009 a
+currentpoint currentpoint translate 2983488 neg 3615060 atan rotate
+neg exch neg exch translate
+ 1276 1009 a 1164 1019 a Fw(\000)-21 b(\000)-9
+b(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)-20
+b Fv(\021)1276 1009 y
+grestore
+ 1276 1009 a 1276 1009 a
+gsave
+ 1276 1009
+a 1276 1009 a
+currentpoint currentpoint translate 2983488 neg 3615060 atan rotate
+neg exch neg exch translate
+ 1276 1009 a 1277 997 a
+currentpoint currentpoint translate -2983488 neg 3615060 atan rotate
+neg exch neg exch translate
+ 1277 997 a 1247
+991 a Fu(p)1264 995 y Fe(i)1277 1009 y
+grestore
+ 1277 1009 a 1391
+1009 a
+gsave
+ 1391 1009 a 1391 1009 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 1391 1009 a 1327 1019
+a Fv(\013)-9 b(\013)g(\013)g(\013)g(\013)-14 b(\014)1391
+1009 y
+grestore
+ 1391 1009 a 1391 1009 a
+gsave
+ 1391 1009 a 1391 1009
+a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 1391 1009 a 1392 1022 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1392 1022 a 10 x Fu(\026)1412
+1036 y Fe(i)1392 1009 y
+grestore
+ 1392 1009 a 1018 1091 a
+gsave
+ 1018
+1091 a 1018 1091 a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1018 1091 a 930 1102 a Fw(\000)-19
+b(\000)-9 b(\000)g(\000)g(\000)g(\000)-18 b Fv(\021)1018
+1091 y
+grestore
+ 1018 1091 a 1018 1091 a
+gsave
+ 1018 1091 a 1018 1091
+a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1018 1091 a 1011 1104 a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1011 1104 a 1001 1098 a Fu(f)1011
+1091 y
+grestore
+ 1011 1091 a 1018 1116 a
+gsave
+ 1018 1116 a 1018 1116
+a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1018 1116 a 930 1126 a Fw(\000)f(\000)-9 b(\000)g(\000)g(\000)g(\000)
+-18 b Fv(\021)1018 1116 y
+grestore
+ 1018 1116 a 1018 1116 a
+gsave
+ 1018
+1116 a 1018 1116 a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1018 1116 a 1011 1104 a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1011 1104
+a 1002 1116 a Fu(g)1011 1116 y
+grestore
+ 1011 1116 a 1286 1104
+a
+gsave
+ 1286 1104 a 1286 1104 a
+currentpoint currentpoint translate 0 neg -3287380 atan rotate neg
+exch neg exch translate
+ 1286 1104 a 1205 1114 a Fv(\013)-9
+b(\013)g(\013)g(\013)h(\013)f(\013)-14 b(\014)1286 1104
+y
+grestore
+ 1286 1104 a 1286 1104 a
+gsave
+ 1286 1104 a 1286 1104 a
+currentpoint currentpoint translate 0 neg -3287380 atan rotate neg
+exch neg exch translate
+ 1286
+1104 a 1281 1116 a
+currentpoint currentpoint translate 0 neg -3287380 atan rotate neg
+exch neg exch translate
+ 1281 1116 a -8 w Fu(e)1281 1104 y
+grestore
+
+1281 1104 a 842 1198 a
+gsave
+ 842 1198 a 842 1198 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 842 1198
+a 767 1208 a Fw(\000)e(\000)-9 b(\000)g(\000)g(\000)-15
+b Fv(\021)842 1198 y
+grestore
+ 842 1198 a 842 1198 a
+gsave
+ 842 1198 a
+842 1198 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 842 1198 a 838 1186 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 838 1186 a 10 x Fu(p)855
+1200 y Fe(u)838 1198 y
+grestore
+ 838 1198 a 1138 1198 a
+gsave
+ 1138 1198
+a 1138 1198 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1138 1198 a 1068 1208 a Fw(\000)d(\000)-9
+b(\000)g(\000)g(\000)-18 b Fv(\021)1138 1198 y
+grestore
+ 1138 1198
+a 1138 1198 a
+gsave
+ 1138 1198 a 1138 1198 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1138 1198 a 1137
+1186 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 1137 1186 a 10 x Fu(p)1154 1200 y Fp(dom)t Fe(u)1137
+1198 y
+grestore
+ 1137 1198 a 1018 1293 a
+gsave
+ 1018 1293 a 1018 1293
+a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1018 1293 a 922 1303 a Fw(\000)j(\000)-9 b(\000)g(\000)g(\000)g(\000)
+-14 b Fv(\021)1018 1293 y
+grestore
+ 1018 1293 a 1018 1293 a
+gsave
+ 1018
+1293 a 1018 1293 a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1018 1293 a 1007 1305 a
+currentpoint currentpoint translate 0 neg -3793467 atan rotate neg
+exch neg exch translate
+ 1007 1305
+a -23 w Fu(F)t(u)1007 1293 y
+grestore
+ 1007 1293 a 826 925 a FB(F)859
+931 y Fr(co)q(d)5 b Fu(u)1122 925 y FB(F)1160 931 y Fr(co)q(d)g
+Fu(u)1370 925 y FB(F)1397 931 y Fu(i)539 1114 y FB(\005)574
+1120 y Fu(u)p Fr(:)p Fu(j)r Fh(\021)p Fu(k)668 1114 y
+FB(F)695 1120 y Fu(k)726 1114 y FF(=)12 b FB(\005)805
+1120 y Fu(u)826 1114 y FB(F)859 1120 y Fr(co)q(d)5 b
+Fu(u)1114 1114 y FB(\005)1149 1120 y Fu(i)1162 1114 y
+FB(F)1189 1120 y Fu(i)1380 1114 y FB(d)826 1303 y(F)859
+1309 y Fr(co)q(d)g Fu(u)1122 1303 y FB(F)1154 1309 y
+Fr(dom)h Fu(u)0 1670 y FH(S.)16 b(Mac)g(Lane)p FF(,)d
+FC(Cate)n(gories)h(for)g(the)h(Working)h(Mathematician)p
+FF(,)e(page)g(117.)-79 1761 y Fr(1)62 b Fx($$)-79 1811
+y Fr(2)g Fx(\\Dg)-79 1861 y Fr(3)g Fx(u)215 b(&)20 b(\\rTo)e(^{e_1})56
+b(&)19 b(v)137 b(&)20 b(&)f(\\rTo)f(\\up{3pt})e(^f)j(\\rTo)f
+(\\up{-3pt})e(_g)j(&)g(d)79 b(\\\\)-79 1911 y Fr(4)62
+b Fx(\\uDashto)17 b(>s)h(&)294 b(&)19 b(\\dTo)f(>e)h(&)373
+b(&)352 b(&)19 b(\\uTo)g(\\\\)-79 1961 y Fr(5)62 b Fx(w)215
+b(&)20 b(\\rTo)e(^{ee_1s})e(&)j(w)137 b(&)20 b({})e(=)i({\\mit\\Pi})o
+(k_)o(i)d(&)i(\\rTo)253 b(&)19 b(k_i)39 b(\\\\)-79 2010
+y Fr(6)62 b Fx(\\endDg)-79 2060 y Fr(7)g Fx($$)812 2195
+y
+gsave
+ 812 2195 a 812 2195 a
+currentpoint currentpoint translate 0 neg 2910900 atan rotate neg exch
+neg exch translate
+ 812 2195 a 740 2205 a Fw(\000)-15
+b(\000)-9 b(\000)g(\000)g(\000)-14 b Fv(\021)812 2195
+y
+grestore
+ 812 2195 a 812 2195 a
+gsave
+ 812 2195 a 812 2195 a
+currentpoint currentpoint translate 0 neg 2910900 atan rotate neg exch
+neg exch translate
+ 812 2195
+a 813 2182 a
+currentpoint currentpoint translate 0 neg 2910900 atan rotate neg exch
+neg exch translate
+ 813 2182 a 797 2178 a Fu(e)813 2182 y Fp(1)813
+2195 y
+grestore
+ 813 2195 a 1066 2182 a
+gsave
+ 1066 2182 a 1066 2182 a
+currentpoint currentpoint translate 0 neg 5101974 atan rotate neg exch
+neg exch translate
+
+1066 2182 a 924 2193 a Fw(\000)f(\000)-9 b(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)h(\000)f(\000)g(\000)-14 b Fv(\021)1066
+2182 y
+grestore
+ 1066 2182 a 1066 2182 a
+gsave
+ 1066 2182 a 1066 2182
+a
+currentpoint currentpoint translate 0 neg 5101974 atan rotate neg exch
+neg exch translate
+ 1066 2182 a 1066 2170 a
+currentpoint currentpoint translate 0 neg 5101974 atan rotate neg exch
+neg exch translate
+ 1066 2170 a 1056 2164 a Fu(f)1066
+2182 y
+grestore
+ 1066 2182 a 1066 2207 a
+gsave
+ 1066 2207 a 1066 2207
+a
+currentpoint currentpoint translate 0 neg 5101974 atan rotate neg exch
+neg exch translate
+ 1066 2207 a 924 2218 a Fw(\000)f(\000)-9 b(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)h(\000)f(\000)g(\000)-14 b Fv(\021)1066
+2207 y
+grestore
+ 1066 2207 a 1066 2207 a
+gsave
+ 1066 2207 a 1066 2207
+a
+currentpoint currentpoint translate 0 neg 5101974 atan rotate neg exch
+neg exch translate
+ 1066 2207 a 1066 2220 a
+currentpoint currentpoint translate 0 neg 5101974 atan rotate neg exch
+neg exch translate
+ 1066 2220 a 1057 2232 a Fu(g)1066
+2207 y
+grestore
+ 1066 2207 a 720 2289 a
+gsave
+ 720 2289 a 720 2289 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 720
+2289 a 642 2300 a Fv(\013)-9 b(\013)g(\013)g(\013)g(\013)g(\013)-16
+b(\014)720 2289 y
+grestore
+ 720 2289 a 720 2289 a
+gsave
+ 720 2289 a 720
+2289 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 720 2289 a 719 2302 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 719 2302 a 10 x Fu(s)719
+2289 y
+grestore
+ 719 2289 a 904 2289 a
+gsave
+ 904 2289 a 904 2289 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 904
+2289 a 829 2300 a Fw(\000)-22 b(\000)-9 b(\000)g(\000)g(\000)g(\000)-21
+b Fv(\021)904 2289 y
+grestore
+ 904 2289 a 904 2289 a
+gsave
+ 904 2289 a
+904 2289 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 904 2289 a 905 2277 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+ 905 2277 a 10 x Fu(e)905
+2289 y
+grestore
+ 905 2289 a 1228 2289 a
+gsave
+ 1228 2289 a 1228 2289 a
+currentpoint currentpoint translate 2983488 neg 0 atan rotate neg exch
+neg exch translate
+
+1228 2289 a 1160 2300 a Fw(\000)-16 b(\000)-9 b(\000)g(\000)g(\000)-15
+b Fv(\021)1228 2289 y
+grestore
+ 1228 2289 a 812 2384 a
+gsave
+ 812 2384
+a 812 2384 a
+currentpoint currentpoint translate 0 neg 2910900 atan rotate neg exch
+neg exch translate
+ 812 2384 a 744 2394 a Fw(\000)c(\000)-9
+b(\000)g(\000)g(\000)-19 b Fv(\021)812 2384 y
+grestore
+ 812 2384
+a 812 2384 a
+gsave
+ 812 2384 a 812 2384 a
+currentpoint currentpoint translate 0 neg 2910900 atan rotate neg exch
+neg exch translate
+ 812 2384 a 812 2371
+a
+currentpoint currentpoint translate 0 neg 2910900 atan rotate neg exch
+neg exch translate
+ 812 2371 a 780 2367 a Fu(ee)812 2371 y Fp(1)828 2367
+y Fu(s)812 2384 y
+grestore
+ 812 2384 a 1110 2384 a
+gsave
+ 1110 2384 a
+1110 2384 a
+currentpoint currentpoint translate 0 neg 3719362 atan rotate neg exch
+neg exch translate
+ 1110 2384 a 1065 2394 a Fw(\000)g(\000)-10
+b(\000)i(\000)f(\000)-19 b Fv(\021)1110 2384 y
+grestore
+ 1110 2384
+a 708 2205 a FB(u)162 b(v)303 b(d)705 2394 y(w)154 b(w)20
+b FF(=)12 b FB(\005)s(k)1043 2400 y Fu(i)1210 2394 y
+FB(k)1232 2400 y Fu(i)954 2770 y FF(59)p eop
+%%Page: 60 4
+60 59 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y FH(S.)16 b(Mac)g(Lane)g(and)f(I.)h
+(Mo)q(erdijk)p FF(,)c FC(She)n(aves)k(In)f(Ge)n(ometry)g(and)g(L)n(o)n
+(gic)p FF(,)f(page)f(232.)-79 133 y Fr(1)62 b Fx($$)-79
+183 y Fr(2)g Fx(\\cellwidth)o(+=)o(3mm)-79 232 y Fr(3)g
+Fx(\\Dg)-79 282 y Fr(4)g Fx(Y)117 b(&)20 b(\\rMono)d(^y)i(&)g(A)333
+b(&)19 b(\\rLine)e(\\jh)i(&)g(\\stop)312 b(\\\\)-79 332
+y Fr(5)62 b Fx(\\dEpi)37 b(&)216 b(&)19 b(\\dEpi)253
+b(&)235 b(&)19 b(\\mx{-1cm})232 b(\\\\)-79 382 y Fr(6)62
+b Fx(D)117 b(&)20 b(\\rMono)d(^d)i(&)g(i_A\(A\))233 b(&)i(&)19
+b(\\dLine)e(>{\\eta_A})g(\\jn)h(\\\\)-79 432 y Fr(7)62
+b Fx(\\dMono)17 b(&)216 b(&)19 b(\\dMono)939 b(\\\\)-79
+482 y Fr(8)62 b Fx(X)117 b(&)20 b(\\rMono)d(_x)i(&)g(\\overline)o({i_)o
+(A\()o(A\)})d(&)j(\\lTo)f(\\jt)58 b(&)19 b(\\stop)312
+b(\\\\)-79 531 y Fr(9)62 b Fx(\\endDg)-95 581 y Fr(10)f
+Fx($$)923 715 y
+gsave
+ 923 715 a 923 715 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 923 715 a 818 726
+a Fv(\016)-10 b Fw(\000)h(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-14
+b Fv(\021)923 715 y
+grestore
+ 923 715 a 923 715 a
+gsave
+ 923 715 a 923
+715 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 923 715 a 924 703 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 924 703 a 915 697 a Fu(y)924
+715 y
+grestore
+ 924 715 a 1115 715 a
+gsave
+ 1115 715 a 1115 715 a
+currentpoint currentpoint translate 0 neg 1945767 atan rotate neg exch
+neg exch translate
+ 1115
+715 a 1077 726 a Fw(\000)-20 b(\000)-9 b(\000)g(\000)-19
+b(\000)1115 715 y
+grestore
+ 1115 715 a 793 810 a
+gsave
+ 793 810 a 793
+810 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 793 810 a 717 820 a Fw(\000)j(\000)-9 b(\000)g(\000)g(\000)-15
+b Fv(\021)-30 b(\014)793 810 y
+grestore
+ 793 810 a 1053 810 a
+gsave
+ 1053
+810 a 1053 810 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1053 810 a 977 820 a Fw(\000)-17 b(\000)-9
+b(\000)g(\000)g(\000)-16 b Fv(\021)-30 b(\014)1053 810
+y
+grestore
+ 1053 810 a 923 904 a
+gsave
+ 923 904 a 923 904 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 923 904 a
+819 915 a Fv(\016)-18 b Fw(\000)-9 b(\000)g(\000)h(\000)f(\000)g(\000)
+-21 b Fv(\021)923 904 y
+grestore
+ 923 904 a 923 904 a
+gsave
+ 923 904 a
+923 904 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 923 904 a 906 892 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 906 892 a -9 w Fu(d)906
+904 y
+grestore
+ 906 904 a 1176 904 a
+gsave
+ 1176 904 a 1176 904 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 1176
+904 a 983 915 a Fw(\000)k(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)h
+(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-16
+b(\000)1176 904 y
+grestore
+ 1176 904 a 1176 904 a
+gsave
+ 1176 904 a 1176
+904 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 1176 904 a 1176 892 a
+currentpoint currentpoint translate 5966976 neg 0 atan rotate neg exch
+neg exch translate
+ 1176 892 a 10 x Fu(\021)1193
+906 y Fe(A)1176 904 y
+grestore
+ 1176 904 a 793 999 a
+gsave
+ 793 999 a
+793 999 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 793 999 a 717 1009 a Fv(\016)-9 b Fw(\000)g(\000)g(\000)g
+(\000)c Fv(\021)793 999 y
+grestore
+ 793 999 a 1053 999 a
+gsave
+ 1053 999
+a 1053 999 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1053 999 a 987 1009 a Fv(\016)-8 b Fw(\000)f(\000)g(\000)d
+Fv(\021)1053 999 y
+grestore
+ 1053 999 a 923 1093 a
+gsave
+ 923 1093 a 923
+1093 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 923 1093 a 820 1104 a Fv(\016)-18 b Fw(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)-22 b Fv(\021)923
+1093 y
+grestore
+ 923 1093 a 923 1093 a
+gsave
+ 923 1093 a 923 1093 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 923
+1093 a 906 1106 a
+currentpoint currentpoint translate 0 neg 4107633 atan rotate neg exch
+neg exch translate
+ 906 1106 a 897 1118 a Fu(x)906 1093
+y
+grestore
+ 906 1093 a 1115 1093 a
+gsave
+ 1115 1093 a 1115 1093 a
+currentpoint currentpoint translate 0 neg -1945767 atan rotate neg
+exch neg exch translate
+ 1115
+1093 a 1049 1104 a Fw(\000)i(\000)h Fv(\021)1115 1093
+y
+grestore
+ 1115 1093 a 776 726 a FB(Y)237 b(A)775 915 y(D)191
+b(i)1014 921 y Fu(A)1042 915 y FF(\()p FB(A)p FF(\))774
+1104 y FB(X)p 1000 1068 105 2 v 192 w(i)1014 1110 y Fu(A)1042
+1104 y FF(\()p FB(A)p FF(\))0 1325 y FH(K.)17 b(S.)e(Bro)o(wn)p
+FF(,)e FC(Cohomolo)n(gy)i(of)g(Gr)n(oups)p FF(,)e(page)h(280.)-79
+1417 y Fr(1)62 b Fx($$)-79 1467 y Fr(2)g Fx(\\let\\^\\wid)o(eh)o(at)16
+b(\\let\\~\\wid)o(eti)o(ld)o(e)-79 1516 y Fr(3)62 b Fx(\\flexible)16
+b(\\columndis)o(t=1)o(cm)-79 1566 y Fr(4)62 b Fx(\\xgrid+=2m)o(m)16
+b(\\ygrid+=-2m)o(m)-79 1616 y Fr(5)62 b Fx(\\Diagram)-79
+1666 y Fr(6)219 b Fx(&)176 b(&)g(&)157 b(&H^0)18 b(\\bTo\(-1,-)o(4\))e
+(\\hx{-2pt})-79 1716 y Fr(7)945 b Fx(&\\cdots)36 b(&H^{n-1})g(&H^n)i
+(&H^{n+1})e(&H^{n+2})17 b(&\\cdots)g(\\\\)-79 1765 y
+Fr(8)62 b Fx(\\mx{5mm}&)173 b(&)j(&)157 b(&\\dTo)57 b(&)156
+b(&\\dTo)96 b(&\\dEpi&\\dB)o(ar)75 b(&\\dBar)17 b(&\\mx{-2mm}\\)o(\\)
+-79 1815 y Fr(9)62 b Fx(\\cdots)37 b(&\\^H^{-3})16 b(&\\^H^{-2})g
+(&\\^H^{-1}&)o(\\^H)o(^0)36 b(&\\cdots)g(&\\^H^{n-1})o(&\\^)o(H^)o
+(n&\\)o(^H)o(^{n)o(+1)o(}&\\)o(^H^)o({n)o(+2})o(&\\)o(cdo)o(ts\\)o(\\)
+-95 1865 y Fr(10)218 b Fx(&\\dBar)76 b(&\\dBar)g(&\\dInto)37
+b(&\\dTo)57 b(&)156 b(&\\dTo)18 b(\\dx{-2mm})546 b(\\\\)-95
+1915 y Fr(11)61 b Fx(\\cdots)37 b(&\\~H_{n+2)o(}&\\)o(~H_)o({n)o(+1})o
+(&\\)o(~H_)o(n)56 b(&\\~H_{n-1)o(}&)o(\\cd)o(ots)o(&\\)o(~H_)o(0)16
+b(\\aTo\(1,4\))h(\\hx{-2pt)o(})331 b(\\\\)-95 1965 y
+Fr(12)61 b Fx(\\endDiagra)o(m)-95 2014 y Fr(13)g Fx($$)752
+2345 y
+gsave
+ 752 2345 a 752 2345 a
+currentpoint currentpoint translate 5966976 neg 2106542 atan rotate
+neg exch neg exch translate
+ 752 2345 a 592 2356 a Fw(\000)-21
+b(\000)-9 b(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)-20 b Fv(\021)752 2345 y
+grestore
+ 752
+2345 a 827 2251 a
+gsave
+ 827 2251 a 827 2251 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 827 2251 a 752
+2261 a Fw(\000)e(\000)-9 b(\000)g(\000)g(\000)-21 b Fv(\021)827
+2251 y
+grestore
+ 827 2251 a 1087 2251 a
+gsave
+ 1087 2251 a 1087 2251 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+
+1087 2251 a 1011 2261 a Fw(\000)g(\000)-9 b(\000)g(\000)g(\000)-21
+b Fv(\021)1087 2251 y
+grestore
+ 1087 2251 a 1229 2251 a
+gsave
+ 1229 2251
+a 1229 2251 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1229 2251 a 1153 2261 a Fw(\000)f(\000)-9
+b(\000)g(\000)h(\000)-21 b Fv(\021)-30 b(\014)1229 2251
+y
+grestore
+ 1229 2251 a 1371 2251 a
+gsave
+ 1371 2251 a 1371 2251 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1371
+2251 a 1295 2261 a FF(=)-17 b(=)-9 b(=)g(=)g(=)-17 b(=)1371
+2251 y
+grestore
+ 1371 2251 a 1512 2251 a
+gsave
+ 1512 2251 a 1512 2251
+a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1512 2251 a 1437 2261 a FF(=)f(=)-9 b(=)h(=)f(=)-17
+b(=)1512 2251 y
+grestore
+ 1512 2251 a 402 2440 a
+gsave
+ 402 2440 a 402
+2440 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 402 2440 a 326 2450 a FF(=)g(=)-9 b(=)g(=)g(=)-16
+b(=)402 2440 y
+grestore
+ 402 2440 a 544 2440 a
+gsave
+ 544 2440 a 544 2440
+a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 544 2440 a 468 2450 a FF(=)f(=)-9 b(=)g(=)g(=)-16 b(=)544
+2440 y
+grestore
+ 544 2440 a 686 2440 a
+gsave
+ 686 2440 a 686 2440 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 686
+2440 a 610 2450 a FB(,)-7 b Fw(\000)-13 b(\000)k(\000)g(\000)d
+Fv(\021)686 2440 y
+grestore
+ 686 2440 a 827 2440 a
+gsave
+ 827 2440 a 827
+2440 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 827 2440 a 752 2450 a Fw(\000)-22 b(\000)-9 b(\000)g(\000)g
+(\000)-21 b Fv(\021)827 2440 y
+grestore
+ 827 2440 a 1087 2440 a
+gsave
+
+1087 2440 a 1087 2440 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1087 2440 a 1011 2450 a Fw(\000)g(\000)-9
+b(\000)g(\000)g(\000)-21 b Fv(\021)1087 2440 y
+grestore
+ 1087 2440
+a 1154 2345 a
+gsave
+ 1154 2345 a 1154 2345 a
+currentpoint currentpoint translate 5966976 neg 2106542 atan rotate
+neg exch neg exch translate
+ 1154 2345 a 994
+2356 a Fw(\000)g(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)h(\000)f(\000)-20 b Fv(\021)1154
+2345 y
+grestore
+ 1154 2345 a 799 2167 a FB(H)837 2149 y Fr(0)945
+2167 y Fw(\001)7 b(\001)g(\001)41 b FB(H)1074 2149 y
+Fu(n)p Fs(\000)p Fr(1)1199 2167 y FB(H)1237 2149 y Fu(n)1319
+2167 y FB(H)1357 2149 y Fu(n)p Fr(+1)1461 2167 y FB(H)1499
+2149 y Fu(n)p Fr(+2)1606 2167 y Fw(\001)7 b(\001)g(\001)295
+2356 y(\001)g(\001)g(\001)371 2345 y Fq(b)361 2356 y
+FB(H)399 2338 y Fs(\000)p Fr(3)512 2345 y Fq(b)503 2356
+y FB(H)541 2338 y Fs(\000)p Fr(2)654 2345 y Fq(b)644
+2356 y FB(H)682 2338 y Fs(\000)p Fr(1)809 2345 y Fq(b)799
+2356 y FB(H)837 2338 y Fr(0)945 2356 y Fw(\001)g(\001)g(\001)1045
+2345 y Fq(b)1036 2356 y FB(H)1074 2338 y Fu(n)p Fs(\000)p
+Fr(1)1208 2345 y Fq(b)1199 2356 y FB(H)1237 2338 y Fu(n)1329
+2345 y Fq(b)1319 2356 y FB(H)1357 2338 y Fu(n)p Fr(+1)1471
+2345 y Fq(b)1461 2356 y FB(H)1499 2338 y Fu(n)p Fr(+2)1606
+2356 y Fw(\001)g(\001)g(\001)295 2545 y(\001)g(\001)g(\001)362
+2534 y Fq(e)353 2545 y FB(H)388 2551 y Fu(n)p Fr(+2)504
+2534 y Fq(e)494 2545 y FB(H)529 2551 y Fu(n)p Fr(+1)667
+2534 y Fq(e)657 2545 y FB(H)692 2551 y Fu(n)787 2534
+y Fq(e)778 2545 y FB(H)813 2551 y Fu(n)p Fs(\000)p Fr(1)945
+2545 y Fw(\001)g(\001)g(\001)1070 2534 y Fq(e)1061 2545
+y FB(H)1096 2551 y Fr(0)954 2770 y FF(60)p eop
+%%Page: 61 5
+61 60 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y FH(George)15 b(W.)h(Whitehead)p
+FF(,)11 b FC(Elements)k(of)g(Homotopy)g(The)n(ory)p FF(,)e(page)h(592.)
+-79 133 y Fr(1)62 b Fx($$)-79 183 y Fr(2)g Fx(\\def\\T{{\\b)o(f)16
+b(T}})j(\\def\\S{{\\)o(bf)d(S}})-79 232 y Fr(3)62 b Fx(\\landscape)16
+b(\\let\\labe)o(lst)o(yl)o(e\\t)o(ex)o(tst)o(yl)o(e)-79
+282 y Fr(4)62 b Fx(\\cellpush=)o(10)o(pt)16 b(\\xscale=2.)o(2)-79
+332 y Fr(5)62 b Fx(\\Diagram)-79 382 y Fr(6)199 b Fx(&)353
+b(&)19 b(H_n\(X^+\\cu)o(p\\T)d(A^+,)i(X^+\))g(&)-79 432
+y Fr(7)121 b Fx(\\lTo)18 b(^{H_n\(k_1)o(\)})e(&)157 b(&)19
+b(H_n\(\\T)e(A^+,A^+\))-79 482 y Fr(8)670 b Fx(\\aTo)18
+b(\(-3,-2\))f(_{H_n\(p_1\))o(})-79 531 y Fr(9)670 b Fx(\\aTo)18
+b(\(3,-4\))f(^{\\partial_)o(1})369 b(\\\\)-95 581 y Fr(10)198
+b Fx(&)353 b(&)19 b(\\dTo)f(>{H_n{q_1})o(})605 b(\\\\)-95
+631 y Fr(11)198 b Fx(&)353 b(&)19 b(H_n\(\\S)e(A^+,P\))214
+b(&)-95 681 y Fr(12)453 b Fx(&)157 b(&)19 b(*)g(\\dx{.7})684
+b(\\\\)-95 731 y Fr(13)198 b Fx(&)20 b(\\ruTo)d(_{H_n\(q_4\))o(})g
+(\\tx{15pt)o(})-95 780 y Fr(14)571 b Fx(&)19 b(\\uTo)f(>{H_n\(t\)})644
+b(\\\\)-95 830 y Fr(15)61 b Fx(H_n\(X^+\\cu)o(p\\)o(T)17
+b(A^+,P\))g(\\aTo)h(\(2,4\))37 b(^{H_n\(j_1\))o(})17
+b(\\tx{15pt})-95 880 y Fr(16)473 b Fx(\\aTo)18 b(\(2,-4\))f
+(_{H_n\(j_2\))o(})g(\\tx{15pt})-95 930 y Fr(17)198 b
+Fx(&)59 b(&)f(&)78 b(&)157 b(&)58 b(&)19 b(H_{n-1}\(A\))d(&)-95
+980 y Fr(18)787 b Fx(\\rTo)18 b(^{H_{n-1})o(\(i_)o(A\))o(})f(&)i
+(H_{n-1}\(A)o(^+,)o(P\))d(\\\\)-95 1029 y Fr(19)198 b
+Fx(&)20 b(\\rdTo)d(^{H_n\(q_2\))o(})g(\\tx{15pt)o(})-95
+1079 y Fr(20)571 b Fx(&)490 b(&)19 b(&)g(&)h(\\ruTo)233
+b(\\\\)-95 1129 y Fr(21)198 b Fx(&)353 b(&)19 b(H_n\(X^+/A^)o(+,P)o(\))
+193 b(&)-95 1179 y Fr(22)100 b Fx(\\lTo)18 b(^{P_n\(X,A\))o(})36
+b(&)20 b(H_n\(X,A\))-95 1229 y Fr(23)493 b Fx(\\aTo)18
+b(\(1,-2\))f(>{H_n\(i_X)o(\)})585 b(\\\\)-95 1279 y Fr(24)198
+b Fx(&)353 b(&)19 b(\\uTo)f(>{H_n\(q_3\))o(})605 b(\\\\)-95
+1328 y Fr(25)198 b Fx(&)353 b(&)19 b(H_n\(X^+\\cu)o(p\\T)d(A^+,\\T)h
+(A^+\)&)-95 1378 y Fr(26)100 b Fx(\\lTo)18 b(_{H_n\(k_2\))o(})f(&)i(&)g
+(H_n\(X^+,A^)o(+\))-95 1428 y Fr(27)512 b Fx(\\aTo)18
+b(\(3,4\))g(_{\\partia)o(l_2)o(})-95 1478 y Fr(28)512
+b Fx(\\aTo)18 b(\(-3,2\))f(_{H_n\(p_X\)})565 b(\\\\)-95
+1528 y Fr(29)61 b Fx(\\endDiagra)o(m)-95 1577 y Fr(30)g
+Fx($$)954 2770 y FF(61)p eop
+%%Page: 62 6
+62 61 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)1491 2502 y
+gsave
+ 1491 2502 a 1491
+2502 a
+currentpoint currentpoint translate 90 neg rotate neg exch neg exch
+translate
+ 1491 2502 a 2593 1516 a
+gsave
+ 2593 1516 a 2593 1516
+a
+currentpoint currentpoint translate 0 neg -12306864 atan rotate neg
+exch neg exch translate
+ 2593 1516 a 2374 1526 a Fw(\000)-14 b(\000)-9 b(\000)h(\000)f(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)c
+Fv(\021)2593 1516 y
+grestore
+ 2593 1516 a 2593 1516 a
+gsave
+ 2593 1516
+a 2593 1516 a
+currentpoint currentpoint translate 0 neg -12306864 atan rotate neg
+exch neg exch translate
+ 2593 1516 a 2564 1528 a
+currentpoint currentpoint translate 0 neg -12306864 atan rotate neg
+exch neg exch translate
+ 2564 1528 a 2499
+1518 a FB(H)2534 1524 y Fu(n)2556 1518 y FF(\()p FB(k)2594
+1524 y Fr(1)2612 1518 y FF(\))2564 1516 y
+grestore
+ 2564 1516 a
+2593 1634 a
+gsave
+ 2593 1634 a 2593 1634 a
+currentpoint currentpoint translate -3729358 neg -12306864 atan rotate
+neg exch neg exch translate
+ 2593 1634 a 2298
+1644 a Fw(\000)-19 b(\000)-9 b(\000)g(\000)g(\000)g(\000)h(\000)f(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)h(\000)f(\000)-19 b Fv(\021)2593
+1634 y
+grestore
+ 2593 1634 a 2593 1634 a
+gsave
+ 2593 1634 a 2593 1634
+a
+currentpoint currentpoint translate -3729358 neg -12306864 atan rotate
+neg exch neg exch translate
+ 2593 1634 a 2586 1622 a
+currentpoint currentpoint translate 3729358 neg -12306864 atan rotate
+neg exch neg exch translate
+ 2586 1622 a 31 x FB(H)2621
+1659 y Fu(n)2643 1653 y FF(\()p FB(p)2680 1659 y Fr(1)2699
+1653 y FF(\))2586 1634 y
+grestore
+ 2586 1634 a 3281 1752 a
+gsave
+ 3281
+1752 a 3281 1752 a
+currentpoint currentpoint translate -7458716 neg 9435275 atan rotate
+neg exch neg exch translate
+ 3281 1752 a 2975 1763 a Fw(\000)k(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)-14 b Fv(\021)3281 1752 y
+grestore
+ 3281 1752
+a 3281 1752 a
+gsave
+ 3281 1752 a 3281 1752 a
+currentpoint currentpoint translate -7458716 neg 9435275 atan rotate
+neg exch neg exch translate
+ 3281 1752 a 3278
+1740 a
+currentpoint currentpoint translate 7458716 neg 9435275 atan rotate
+neg exch neg exch translate
+ 3278 1740 a -6 x FB(@)3300 1740 y Fr(1)3278 1752
+y
+grestore
+ 3278 1752 a 2203 1634 a
+gsave
+ 2203 1634 a 2203 1634 a
+currentpoint currentpoint translate -3729358 neg 0 atan rotate neg
+exch neg exch translate
+ 2203
+1634 a 2147 1644 a Fw(\000)-22 b(\000)-9 b(\000)g(\000)-22
+b Fv(\021)2203 1634 y
+grestore
+ 2203 1634 a 2203 1634 a
+gsave
+ 2203 1634
+a 2203 1634 a
+currentpoint currentpoint translate -3729358 neg 0 atan rotate neg
+exch neg exch translate
+ 2203 1634 a 2201 1622 a
+currentpoint currentpoint translate 3729358 neg 0 atan rotate neg exch
+neg exch translate
+ 2201 1622 a 10
+x FB(H)2236 1638 y Fu(n)2258 1632 y FB(q)2277 1638 y
+Fr(1)2201 1634 y
+grestore
+ 2201 1634 a 1974 1870 a
+gsave
+ 1974 1870 a
+1974 1870 a
+currentpoint currentpoint translate 3729358 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1974 1870 a 1812 1881 a Fw(\000)-13 b(\000)k(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)d
+Fv(\021)1974 1870 y
+grestore
+ 1974 1870 a 1974 1870 a
+gsave
+ 1974 1870
+a 1974 1870 a
+currentpoint currentpoint translate 3729358 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1974 1870 a 1978 1883 a
+currentpoint currentpoint translate -3729358 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1978 1883 a 31
+x FB(H)2013 1920 y Fu(n)2036 1914 y FF(\()p FB(q)2071
+1920 y Fr(4)2089 1914 y FF(\))1978 1870 y
+grestore
+ 1978 1870 a
+2203 1988 a
+gsave
+ 2203 1988 a 2203 1988 a
+currentpoint currentpoint translate 7458716 neg 0 atan rotate neg exch
+neg exch translate
+ 2203 1988 a 2033
+1999 a Fw(\000)-19 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-18 b Fv(\021)2203
+1988 y
+grestore
+ 2203 1988 a 2203 1988 a
+gsave
+ 2203 1988 a 2203 1988
+a
+currentpoint currentpoint translate 7458716 neg 0 atan rotate neg exch
+neg exch translate
+ 2203 1988 a 2205 2001 a
+currentpoint currentpoint translate -7458716 neg 0 atan rotate neg
+exch neg exch translate
+ 2205 2001 a 10 x FB(H)2240
+2017 y Fu(n)2262 2011 y FF(\()p FB(t)p FF(\))2205 1988
+y
+grestore
+ 2205 1988 a 1974 1752 a
+gsave
+ 1974 1752 a 1974 1752 a
+currentpoint currentpoint translate 7458716 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1974
+1752 a 1722 1763 a Fw(\000)h(\000)-9 b(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)-16 b Fv(\021)1974
+1752 y
+grestore
+ 1974 1752 a 1974 1752 a
+gsave
+ 1974 1752 a 1974 1752
+a
+currentpoint currentpoint translate 7458716 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1974 1752 a 1977 1740 a
+currentpoint currentpoint translate -7458716 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1977 1740 a 1852 1729 a FB(H)1887
+1735 y Fu(n)1909 1729 y FF(\()p FB(j)1942 1735 y Fr(1)1961
+1729 y FF(\))1977 1752 y
+grestore
+ 1977 1752 a 1974 2225 a
+gsave
+ 1974
+2225 a 1974 2225 a
+currentpoint currentpoint translate -7458716 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1974 2225 a 1716 2235 a Fw(\000)f(\000)-9
+b(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)-16
+b Fv(\021)1974 2225 y
+grestore
+ 1974 2225 a 1974 2225 a
+gsave
+ 1974 2225
+a 1974 2225 a
+currentpoint currentpoint translate -7458716 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1974 2225 a 1971 2237 a
+currentpoint currentpoint translate 7458716 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1971 2237 a 1847
+2268 a FB(H)1882 2274 y Fu(n)1904 2268 y FF(\()p FB(j)1937
+2274 y Fr(2)1956 2268 y FF(\))1971 2225 y
+grestore
+ 1971 2225 a
+3320 1988 a
+gsave
+ 3320 1988 a 3320 1988 a
+currentpoint currentpoint translate 0 neg 8204576 atan rotate neg exch
+neg exch translate
+ 3320 1988 a 3184
+1999 a Fw(\000)f(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)-15 b Fv(\021)3320 1988 y
+grestore
+ 3320 1988 a 3320 1988
+a
+gsave
+ 3320 1988 a 3320 1988 a
+currentpoint currentpoint translate 0 neg 8204576 atan rotate neg exch
+neg exch translate
+ 3320 1988 a 3300 1976 a
+currentpoint currentpoint translate 0 neg 8204576 atan rotate neg exch
+neg exch translate
+ 3300
+1976 a 3214 1966 a FB(H)3249 1972 y Fu(n)p Fs(\000)p
+Fr(1)3314 1966 y FF(\()p FB(i)3344 1972 y Fu(A)3371 1966
+y FF(\))3300 1988 y
+grestore
+ 3300 1988 a 1974 2106 a
+gsave
+ 1974 2106
+a 1974 2106 a
+currentpoint currentpoint translate -3729358 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1974 2106 a 1804 2117 a Fw(\000)h(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g
+(\000)c Fv(\021)1974 2106 y
+grestore
+ 1974 2106 a 1974 2106 a
+gsave
+ 1974
+2106 a 1974 2106 a
+currentpoint currentpoint translate -3729358 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1974 2106 a 1970 2094 a
+currentpoint currentpoint translate 3729358 neg 7221536 atan rotate
+neg exch neg exch translate
+ 1970 2094
+a -10 x FB(H)2005 2090 y Fu(n)2027 2084 y FF(\()p FB(q)2062
+2090 y Fr(2)2080 2084 y FF(\))1970 2106 y
+grestore
+ 1970 2106 a
+2892 2106 a
+gsave
+ 2892 2106 a 2892 2106 a
+currentpoint currentpoint translate 3729358 neg 5332987 atan rotate
+neg exch neg exch translate
+ 2892 2106 a 2763
+2117 a Fw(\000)c(\000)-9 b(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g
+(\000)g(\000)-16 b Fv(\021)2892 2106 y
+grestore
+ 2892 2106 a 2463
+2225 a
+gsave
+ 2463 2225 a 2463 2225 a
+currentpoint currentpoint translate 0 neg -8204576 atan rotate neg
+exch neg exch translate
+ 2463 2225 a 2332 2235
+a Fw(\000)e(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-18
+b Fv(\021)2463 2225 y
+grestore
+ 2463 2225 a 2463 2225 a
+gsave
+ 2463 2225
+a 2463 2225 a
+currentpoint currentpoint translate 0 neg -8204576 atan rotate neg
+exch neg exch translate
+ 2463 2225 a 2436 2237 a
+currentpoint currentpoint translate 0 neg -8204576 atan rotate neg
+exch neg exch translate
+ 2436 2237 a 2353
+2227 a FB(P)2380 2233 y Fu(n)2402 2227 y FF(\()p FB(X)q(;)7
+b(A)p FF(\))2436 2225 y
+grestore
+ 2436 2225 a 2853 2343 a
+gsave
+ 2853
+2343 a 2853 2343 a
+currentpoint currentpoint translate -3729358 neg 4102288 atan rotate
+neg exch neg exch translate
+ 2853 2343 a 2749 2353 a Fw(\000)-22
+b(\000)-8 b(\000)f(\000)g(\000)g(\000)g(\000)g(\000)-21
+b Fv(\021)2853 2343 y
+grestore
+ 2853 2343 a 2853 2343 a
+gsave
+ 2853 2343
+a 2853 2343 a
+currentpoint currentpoint translate -3729358 neg 4102288 atan rotate
+neg exch neg exch translate
+ 2853 2343 a 2850 2330 a
+currentpoint currentpoint translate 3729358 neg 4102288 atan rotate
+neg exch neg exch translate
+ 2850 2330 a -10
+x FB(H)2885 2326 y Fu(n)2907 2320 y FF(\()p FB(i)2937
+2326 y Fu(X)2969 2320 y FF(\))2850 2343 y
+grestore
+ 2850 2343 a
+2203 2343 a
+gsave
+ 2203 2343 a 2203 2343 a
+currentpoint currentpoint translate 3729358 neg 0 atan rotate neg exch
+neg exch translate
+ 2203 2343 a 2151
+2353 a Fw(\000)f(\000)-9 b(\000)g(\000)-22 b Fv(\021)2203
+2343 y
+grestore
+ 2203 2343 a 2203 2343 a
+gsave
+ 2203 2343 a 2203 2343
+a
+currentpoint currentpoint translate 3729358 neg 0 atan rotate neg exch
+neg exch translate
+ 2203 2343 a 2205 2355 a
+currentpoint currentpoint translate -3729358 neg 0 atan rotate neg
+exch neg exch translate
+ 2205 2355 a 11 x FB(H)2240
+2372 y Fu(n)2262 2366 y FF(\()p FB(q)2297 2372 y Fr(3)2316
+2366 y FF(\))2205 2343 y
+grestore
+ 2205 2343 a 2593 2461 a
+gsave
+ 2593
+2461 a 2593 2461 a
+currentpoint currentpoint translate 0 neg -12306864 atan rotate neg
+exch neg exch translate
+ 2593 2461 a 2361 2471 a Fw(\000)-14
+b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f
+(\000)g(\000)g(\000)g(\000)g(\000)c Fv(\021)2593 2461
+y
+grestore
+ 2593 2461 a 2593 2461 a
+gsave
+ 2593 2461 a 2593 2461 a
+currentpoint currentpoint translate 0 neg -12306864 atan rotate neg
+exch neg exch translate
+ 2593
+2461 a 2550 2448 a
+currentpoint currentpoint translate 0 neg -12306864 atan rotate neg
+exch neg exch translate
+ 2550 2448 a 2485 2479 a FB(H)2520
+2485 y Fu(n)2542 2479 y FF(\()p FB(k)2580 2485 y Fr(2)2599
+2479 y FF(\))2550 2461 y
+grestore
+ 2550 2461 a 3281 2225 a
+gsave
+ 3281
+2225 a 3281 2225 a
+currentpoint currentpoint translate 7458716 neg 9435275 atan rotate
+neg exch neg exch translate
+ 3281 2225 a 2981 2235 a Fw(\000)e(\000)-9
+b(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h
+(\000)f(\000)g(\000)-14 b Fv(\021)3281 2225 y
+grestore
+ 3281 2225
+a 3281 2225 a
+gsave
+ 3281 2225 a 3281 2225 a
+currentpoint currentpoint translate 7458716 neg 9435275 atan rotate
+neg exch neg exch translate
+ 3281 2225 a 3284
+2237 a
+currentpoint currentpoint translate -7458716 neg 9435275 atan rotate
+neg exch neg exch translate
+ 3284 2237 a 29 x FB(@)3306 2272 y Fr(2)3284 2225
+y
+grestore
+ 3284 2225 a 2593 2343 a
+gsave
+ 2593 2343 a 2593 2343 a
+currentpoint currentpoint translate 3729358 neg -12306864 atan rotate
+neg exch neg exch translate
+ 2593
+2343 a 2312 2353 a Fw(\000)-19 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-18
+b Fv(\021)2593 2343 y
+grestore
+ 2593 2343 a 2593 2343 a
+gsave
+ 2593 2343
+a 2593 2343 a
+currentpoint currentpoint translate 3729358 neg -12306864 atan rotate
+neg exch neg exch translate
+ 2593 2343 a 2600 2330 a
+currentpoint currentpoint translate -3729358 neg -12306864 atan rotate
+neg exch neg exch translate
+ 2600 2330 a 2458
+2361 a FB(H)2493 2367 y Fu(n)2515 2361 y FF(\()p FB(p)2552
+2367 y Fu(X)2584 2361 y FF(\))2600 2343 y
+grestore
+ 2600 2343 a
+2015 1526 a FB(H)2050 1532 y Fu(n)2072 1526 y FF(\()p
+FB(X)2125 1509 y Fr(+)2163 1526 y Fw([)9 b FH(T)p FB(A)2264
+1509 y Fr(+)2291 1526 y FB(;)e(X)2347 1509 y Fr(+)2375
+1526 y FF(\))462 b FB(H)2888 1532 y Fu(n)2911 1526 y
+FF(\()p FH(T)p FB(A)2991 1509 y Fr(+)3019 1526 y FB(;)7
+b(A)3069 1509 y Fr(+)3096 1526 y FF(\))2090 1763 y FB(H)2125
+1769 y Fu(n)2147 1763 y FF(\()p FH(S)p FB(A)2221 1745
+y Fr(+)2249 1763 y FB(;)g(P)f FF(\))655 b Fw(\003)1512
+1999 y FB(H)1547 2005 y Fu(n)1569 1999 y FF(\()p FB(X)1622
+1982 y Fr(+)1659 1999 y Fw([)9 b FH(T)p FB(A)1760 1982
+y Fr(+)1788 1999 y FB(;)e(P)f FF(\))1123 b FB(H)3014
+2005 y Fu(n)p Fs(\000)p Fr(1)3079 1999 y FF(\()p FB(A)p
+FF(\))318 b FB(H)3495 2005 y Fu(n)p Fs(\000)p Fr(1)3559
+1999 y FF(\()p FB(A)3606 1982 y Fr(+)3634 1999 y FB(;)7
+b(P)f FF(\))2062 2235 y FB(H)2097 2241 y Fu(n)2119 2235
+y FF(\()p FB(X)2172 2218 y Fr(+)2200 2235 y FB(=)n(A)2250
+2218 y Fr(+)2277 2235 y FB(;)h(P)f FF(\))291 b FB(H)2671
+2241 y Fu(n)2693 2235 y FF(\()p FB(X)q(;)7 b(A)p FF(\))2002
+2471 y FB(H)2037 2477 y Fu(n)2059 2471 y FF(\()p FB(X)2112
+2454 y Fr(+)2149 2471 y Fw([)i FH(T)p FB(A)2250 2454
+y Fr(+)2278 2471 y FB(;)e FH(T)p FB(A)2361 2454 y Fr(+)2388
+2471 y FF(\))463 b FB(H)2902 2477 y Fu(n)2924 2471 y
+FF(\()p FB(X)2977 2454 y Fr(+)3005 2471 y FB(;)7 b(A)3055
+2454 y Fr(+)3082 2471 y FF(\))1491 2502 y
+grestore
+ 1491 2502 a
+954 2770 a FF(62)p eop
+%%Page: 63 7
+63 62 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y FH(J.)16 b(McCleary)p
+FF(,)d FC(A)i(User's)f(to)h(Sp)n(e)n(ctr)n(al)f(Se)n(quenc)n(es)p
+FF(,)h(page)f(13.)-79 133 y Fr(1)62 b Fx($$)-79 183 y
+Fr(2)g Fx(\\dotted)-79 232 y Fr(3)g Fx(\\grid=7mm)-79
+282 y Fr(4)g Fx(\\yscale=2)-79 332 y Fr(5)g Fx(\\Diagram)-79
+382 y Fr(6)g Fx(&&&&&&&&&x)o(z&)o(&&&)o(xy)o(z&&)o(&&x)o(y^)o(2z&)o(&&)
+o(&xy)o(^3)o(z&\\)o(\\)-79 432 y Fr(7)g Fx(\\\\)-79 482
+y Fr(8)g Fx(z&&&&zy&&&)o(&z)o(y^2)o(&&)o(&&z)o(y^3)o(\\\\)-79
+531 y Fr(9)g Fx(\\dy{-.2})-95 581 y Fr(10)f Fx(&&&&&&&&&x)o(&&)o(&&x)o
+(y&)o(&&&)o(xy^)o(2&)o(&&&)o(xy)o(^3\\)o(\\)-95 631 y
+Fr(11)g Fx(\\\\)-95 681 y Fr(12)g Fx(&&&&y&&&&y)o(^2)o(&&&)o(&y)o(^3\\)
+o(\\)-95 731 y Fr(13)g Fx(\\Modify)-95 780 y Fr(14)g
+Fx(\\Line)18 b(\(0,0\))f(\(4,0\))h(\\dt{1pt})-95 830
+y Fr(15)61 b Fx(\\Line)18 b(\(4,0\))f(\(8,0\))-95 880
+y Fr(16)61 b Fx(\\Line)18 b(\(8,0\))f(\(12,0\))-95 930
+y Fr(17)61 b Fx(\\Line)18 b(\(12,0\))f(\(22.5,0\))-95
+980 y Fr(18)61 b Fx(\\Line)18 b(\(0,0\))f(\(0,3\))h(\\dt{1pt})-95
+1029 y Fr(19)61 b Fx(\\Line)18 b(\(0,3\))f(\(0,5.2\))-95
+1079 y Fr(20)61 b Fx(\\To)18 b(\(9,2\))g(\(12,0\))-95
+1129 y Fr(21)61 b Fx(\\To)18 b(\(9,5\))g(\(12,3\))-95
+1179 y Fr(22)61 b Fx(\\endDiagra)o(m)-95 1229 y Fr(23)g
+Fx($$)772 1431 y FB(xz)277 b(xy)q(z)257 b(xy)1458 1413
+y Fr(2)1477 1431 y FB(z)248 b(xy)1789 1413 y Fr(3)1808
+1431 y FB(z)40 1761 y(z)300 b(z)r(y)281 b(z)r(y)723 1744
+y Fr(2)1011 1761 y FB(z)r(y)1053 1744 y Fr(3)782 1960
+y FB(x)296 b(xy)278 b(xy)1469 1943 y Fr(2)1754 1960 y
+FB(xy)1799 1943 y Fr(3)370 2290 y FB(y)301 b(y)712 2273
+y Fr(2)1022 2290 y FB(y)1043 2273 y Fr(3)40 1431 y Fw(\017)61
+b(\017)h(\017)g(\017)f(\017)h(\017)g(\017)g(\017)f(\017)145
+b(\017)61 b(\017)h(\017)144 b(\017)62 b(\017)g(\017)144
+b(\017)62 b(\017)f(\017)145 b(\017)40 1596 y(\017)61
+b(\017)h(\017)g(\017)f(\017)h(\017)g(\017)g(\017)f(\017)h(\017)g(\017)f
+(\017)h(\017)g(\017)f(\017)h(\017)g(\017)f(\017)h(\017)g(\017)f(\017)h
+(\017)g(\017)122 1761 y(\017)g(\017)g(\017)144 b(\017)62
+b(\017)g(\017)144 b(\017)62 b(\017)f(\017)145 b(\017)61
+b(\017)h(\017)g(\017)f(\017)h(\017)g(\017)f(\017)h(\017)g(\017)40
+1960 y(\017)f(\017)h(\017)g(\017)f(\017)h(\017)g(\017)g(\017)f(\017)145
+b(\017)61 b(\017)h(\017)144 b(\017)62 b(\017)g(\017)144
+b(\017)62 b(\017)f(\017)145 b(\017)40 2125 y(\017)61
+b(\017)h(\017)g(\017)f(\017)h(\017)g(\017)g(\017)f(\017)h(\017)g(\017)f
+(\017)h(\017)g(\017)f(\017)h(\017)g(\017)f(\017)h(\017)g(\017)f(\017)h
+(\017)g(\017)40 2290 y(\017)f(\017)h(\017)g(\017)144
+b(\017)62 b(\017)g(\017)144 b(\017)62 b(\017)f(\017)145
+b(\017)61 b(\017)h(\017)g(\017)f(\017)h(\017)g(\017)f(\017)h(\017)g
+(\017)216 2280 y
+gsave
+ 216 2280 a 216 2280 a
+currentpoint currentpoint translate 0 neg 5221100 atan rotate neg exch
+neg exch translate
+ 216 2280 a 46
+2290 a Fw(\000)-18 b(\000)-8 b(\000)f(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)-17 b(\000)216 2280
+y
+grestore
+ 216 2280 a 546 2280 a
+gsave
+ 546 2280 a 546 2280 a
+currentpoint currentpoint translate 0 neg 5221100 atan rotate neg exch
+neg exch translate
+ 546 2280
+a 400 2290 a Fw(\000)-22 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)-22 b(\000)546 2280
+y
+grestore
+ 546 2280 a 877 2280 a
+gsave
+ 877 2280 a 877 2280 a
+currentpoint currentpoint translate 0 neg 5221100 atan rotate neg exch
+neg exch translate
+ 877 2280
+a 740 2290 a Fw(\000)-15 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)-15 b(\000)877 2280 y
+grestore
+ 877
+2280 a 1476 2280 a
+gsave
+ 1476 2280 a 1476 2280 a
+currentpoint currentpoint translate 0 neg 13705387 atan rotate neg
+exch neg exch translate
+ 1476 2280
+a 1071 2290 a Fw(\000)-21 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-20
+b(\000)1476 2280 y
+grestore
+ 1476 2280 a 50 2016 a
+gsave
+ 50 2016 a 50
+2016 a
+currentpoint currentpoint translate 8353752 neg 0 atan rotate neg exch
+neg exch translate
+ 50 2016 a -219 2026 a Fw(\000)f(\000)-9 b(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)-21 b(\000)50
+2016 y
+grestore
+ 50 2016 a 50 1569 a
+gsave
+ 50 1569 a 50 1569 a
+currentpoint currentpoint translate 5743202 neg 0 atan rotate neg exch
+neg exch translate
+ 50 1569
+a -116 1579 a Fw(\000)-13 b(\000)k(\000)g(\000)g(\000)g(\000)g(\000)h
+(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)d(\000)50
+1569 y
+grestore
+ 50 1569 a 918 2115 a
+gsave
+ 918 2115 a 918 2115 a
+currentpoint currentpoint translate -5221100 neg 3915825 atan rotate
+neg exch neg exch translate
+ 918
+2115 a 733 2125 a Fw(\000)c(\000)-9 b(\000)h(\000)f(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-14
+b Fv(\021)918 2115 y
+grestore
+ 918 2115 a 918 1586 a
+gsave
+ 918 1586 a
+918 1586 a
+currentpoint currentpoint translate -5221100 neg 3915825 atan rotate
+neg exch neg exch translate
+ 918 1586 a 733 1596 a Fw(\000)e(\000)-9 b(\000)h(\000)f
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+-14 b Fv(\021)918 1586 y
+grestore
+ 918 1586 a 954 2770 a FF(63)p
+eop
+%%Page: 64 8
+64 63 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y FH(J.)16 b(McCleary)p
+FF(,)d FC(A)i(User's)f(to)h(Sp)n(e)n(ctr)n(al)f(Se)n(quenc)n(es)p
+FF(,)h(page)f(346.)-79 133 y Fr(1)62 b Fx($$)-79 183
+y Fr(2)g Fx(\\cellpush+)o(=5)o(pt)-79 232 y Fr(3)g Fx(\\cellwidth)o(+=)
+o(2mm)-79 282 y Fr(4)g Fx(\\Dg)-79 332 y Fr(5)g Fx(&&_{N+t'}X)o(_p)36
+b(&)19 b(\\rTo)f(^{g_{p+q})o(})f(&)i(_N)g(X_{p+q})36
+b(\\\\)-79 382 y Fr(6)62 b Fx(&&)19 b(\\dFillcel)o(l{\\)o(;\\)o(cdo)o
+(ts\\)o(;\\)o(rig)o(ht)o(arr)o(ow)o(fil)o(l})d(&)-79
+432 y Fr(7)690 b Fx(&)19 b(\\dFillcel)o(l{\\)o(;\\)o(cdo)o(ts\\)o(;\\)o
+(rig)o(ht)o(arr)o(owf)o(il)o(l})d(\\\\)-79 482 y Fr(8)964
+b Fx(\\\\)-79 531 y Fr(9)62 b Fx(&&)19 b(_{N+t'}X_)o(1)e(&)i(\\rTo)f
+(^{g_{q+1})o(})f(&)i(_N)g(X_{q+1})36 b(\\\\)-95 581 y
+Fr(10)61 b Fx(&&)19 b(\\dTo)136 b(&)333 b(&)19 b(\\dTo)155
+b(\\\\)-95 631 y Fr(11)61 b Fx(S^{N+t+t'})o(X)16 b(\\aTo)i(\(2,5\))g
+(^{f_p})f(\\tx{.7})g(\\hx{5pt})g(&)i(\\rTo)f(^f)h(&)-95
+681 y Fr(12)120 b Fx(S^{N+t'}X)36 b(&)19 b(\\rTo)f(^{g_q})96
+b(&)19 b(_N)g(X_q)116 b(\\\\)-95 731 y Fr(13)963 b Fx(\\\\)-95
+780 y Fr(14)61 b Fx(&&)235 b(&)333 b(&)19 b(\\dFillcel)o(l{\\)o(ri)o
+(ght)o(arr)o(ow)o(fil)o(l\\)o(;\\c)o(dot)o(s\\)o(;\\r)o(ig)o(hta)o(rr)o
+(owf)o(ill)o(})d(\\\\)-95 830 y Fr(15)963 b Fx(\\\\)-95
+880 y Fr(16)61 b Fx(&&)235 b(&)333 b(&)19 b(_N)g(X_1)116
+b(\\\\)-95 930 y Fr(17)61 b Fx(&&)235 b(&)333 b(&)19
+b(\\dTo)155 b(\\\\)-95 980 y Fr(18)61 b Fx(&&)235 b(&)333
+b(&)19 b(S^N)f(X)i(\\bTo)e(\(-2,6\))f(<g)i(\\hx{.2})e(\\\\)-95
+1029 y Fr(19)61 b Fx(\\endDg)-95 1079 y Fr(20)g Fx($$)1161
+1214 y
+gsave
+ 1161 1214 a 1161 1214 a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1161 1214 a 1103 1224
+a Fw(\000)-16 b(\000)-10 b(\000)h(\000)-16 b Fv(\021)1161
+1214 y
+grestore
+ 1161 1214 a 1161 1214 a
+gsave
+ 1161 1214 a 1161 1214
+a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1161 1214 a 1163 1201 a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1163 1201 a 1128 1193 a Fu(g)1144
+1197 y Fe(p)p Fp(+)p Fe(q)1163 1214 y
+grestore
+ 1163 1214 a 1007
+1355 a
+gsave
+ 1007 1355 a 1007 1355 a
+currentpoint currentpoint translate -4475232 neg 0 atan rotate neg
+exch neg exch translate
+ 1007 1355 a 928 1366 a
+Fw(\001)7 b(\001)g(\001)17 b(\000)-23 b(\000)-9 b(\000)g(\000)-22
+b Fv(\021)1007 1355 y
+grestore
+ 1007 1355 a 1314 1355 a
+gsave
+ 1314 1355
+a 1314 1355 a
+currentpoint currentpoint translate -4475232 neg 0 atan rotate neg
+exch neg exch translate
+ 1314 1355 a 1236 1366 a Fw(\001)7 b(\001)g(\001)16
+b(\000)-23 b(\000)-8 b(\000)f(\000)-22 b Fv(\021)1314
+1355 y
+grestore
+ 1314 1355 a 1161 1497 a
+gsave
+ 1161 1497 a 1161 1497
+a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1161 1497 a 1103 1507 a Fw(\000)-16 b(\000)-10 b(\000)h(\000)-15
+b Fv(\021)1161 1497 y
+grestore
+ 1161 1497 a 1161 1497 a
+gsave
+ 1161 1497
+a 1161 1497 a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1161 1497 a 1163 1485 a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1163 1485 a 1129
+1476 a Fu(g)1145 1480 y Fe(q)q Fp(+1)1163 1497 y
+grestore
+ 1163
+1497 a 1007 1591 a
+gsave
+ 1007 1591 a 1007 1591 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1007 1591
+a 961 1602 a Fw(\000)i(\000)h Fv(\021)1007 1591 y
+grestore
+ 1007
+1591 a 1314 1591 a
+gsave
+ 1314 1591 a 1314 1591 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1314 1591
+a 1271 1602 a Fw(\000)-20 b(\000)-8 b(\000)-19 b Fv(\021)1314
+1591 y
+grestore
+ 1314 1591 a 864 1450 a
+gsave
+ 864 1450 a 864 1450 a
+currentpoint currentpoint translate 7458720 neg 5151710 atan rotate
+neg exch neg exch translate
+ 864
+1450 a 644 1460 a Fw(\000)-12 b(\000)j(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g
+(\000)g(\000)e Fv(\021)864 1450 y
+grestore
+ 864 1450 a 864 1450
+a
+gsave
+ 864 1450 a 864 1450 a
+currentpoint currentpoint translate 7458720 neg 5151710 atan rotate
+neg exch neg exch translate
+ 864 1450 a 869 1437 a
+currentpoint currentpoint translate -7458720 neg 5151710 atan rotate
+neg exch neg exch translate
+ 869 1437
+a 835 1429 a Fu(f)851 1433 y Fe(p)869 1450 y
+grestore
+ 869 1450
+a 836 1686 a
+gsave
+ 836 1686 a 836 1686 a
+currentpoint currentpoint translate 0 neg 5405808 atan rotate neg exch
+neg exch translate
+ 836 1686 a 785 1696
+a Fw(\000)-16 b(\000)-9 b(\000)g(\000)-16 b Fv(\021)836
+1686 y
+grestore
+ 836 1686 a 836 1686 a
+gsave
+ 836 1686 a 836 1686 a
+currentpoint currentpoint translate 0 neg 5405808 atan rotate neg exch
+neg exch translate
+ 836
+1686 a 845 1673 a
+currentpoint currentpoint translate 0 neg 5405808 atan rotate neg exch
+neg exch translate
+ 845 1673 a 835 1667 a Fu(f)845 1686
+y
+grestore
+ 845 1686 a 1161 1686 a
+gsave
+ 1161 1686 a 1161 1686 a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1161
+1686 a 1109 1696 a Fw(\000)c(\000)-10 b(\000)h(\000)h(\000)-20
+b Fv(\021)1161 1686 y
+grestore
+ 1161 1686 a 1161 1686 a
+gsave
+ 1161 1686
+a 1161 1686 a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1161 1686 a 1176 1673 a
+currentpoint currentpoint translate 0 neg 4858239 atan rotate neg exch
+neg exch translate
+ 1176 1673 a 1160
+1665 a Fu(g)1176 1669 y Fe(q)1176 1686 y
+grestore
+ 1176 1686 a
+1314 1875 a
+gsave
+ 1314 1875 a 1314 1875 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 1314 1875 a 1177
+1885 a Fw(\000)k(\000)-9 b(\000)-16 b Fv(\021)18 b Fw(\001)7
+b(\001)g(\001)17 b(\000)-16 b(\000)-9 b(\000)-15 b Fv(\021)1314
+1875 y
+grestore
+ 1314 1875 a 1314 2158 a
+gsave
+ 1314 2158 a 1314 2158
+a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1314 2158 a 1266 2169 a Fw(\000)-22 b(\000)-8 b(\000)-20
+b Fv(\021)1314 2158 y
+grestore
+ 1314 2158 a 1146 1969 a
+gsave
+ 1146 1969
+a 1146 1969 a
+currentpoint currentpoint translate -8950464 neg 4398909 atan rotate
+neg exch neg exch translate
+ 1146 1969 a 871 1980 a Fw(\000)i(\000)-9
+b(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+-16 b Fv(\021)1146 1969 y
+grestore
+ 1146 1969 a 1146 1969 a
+gsave
+ 1146
+1969 a 1146 1969 a
+currentpoint currentpoint translate -8950464 neg 4398909 atan rotate
+neg exch neg exch translate
+ 1146 1969 a 1137 1982 a
+currentpoint currentpoint translate 8950464 neg 4398909 atan rotate
+neg exch neg exch translate
+ 1137 1982
+a 1120 1994 a Fu(g)1137 1969 y
+grestore
+ 1137 1969 a 940 1230 a
+Fu(N)s Fr(+)p Fu(t)1007 1222 y Ft(0)1020 1224 y FB(X)1054
+1230 y Fu(p)180 b(N)1283 1224 y FB(X)1317 1230 y Fu(p)p
+Fr(+)p Fu(q)940 1514 y(N)s Fr(+)p Fu(t)1007 1505 y Ft(0)1021
+1507 y FB(X)1055 1513 y Fr(1)1251 1514 y Fu(N)1283 1507
+y FB(X)1317 1513 y Fu(q)q Fr(+1)572 1696 y FB(S)599 1679
+y Fu(N)s Fr(+)p Fu(t)p Fr(+)p Fu(t)704 1667 y Ft(0)719
+1696 y FB(X)h(S)961 1679 y Fu(N)s Fr(+)p Fu(t)1028 1667
+y Ft(0)1042 1696 y FB(X)1272 1703 y Fu(N)1304 1696 y
+FB(X)1338 1702 y Fu(q)1272 2081 y(N)1304 2074 y FB(X)1338
+2080 y Fr(1)1266 2263 y FB(S)1293 2246 y Fu(N)1325 2263
+y FB(X)954 2770 y FF(64)p eop
+%%Page: 65 9
+65 64 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y FH(P)l(.)16 b(J.)g(Hilton)d(and)j
+(U.)f(Stamm)o(bac)o(h)p FF(,)d FC(A)i(Course)h(in)g(Homolo)n(gic)n(al)f
+(A)o(lgebr)n(a)p FF(,)f(page)h(149.)-79 133 y Fr(1)62
+b Fx($$)-79 183 y Fr(2)g Fx(\\let~\\tild)o(e)-79 232
+y Fr(3)g Fx(\\cellwidth)o(+=)o(17m)o(m)16 b(\\columndist)o(+=)o(12m)o
+(m)-79 282 y Fr(4)62 b Fx(\\gravitate)o(le)o(ft)-79 332
+y Fr(5)g Fx(\\Dg)-79 382 y Fr(6)101 b Fx(&)118 b(&)19
+b(K)254 b(&)20 b(\\rMono)95 b(&&)19 b(E_1^\\alpha)o(&)e(\\rEpi^{\\)o
+(eta)o('}&)o(&)f(A')117 b(\\\\)-79 432 y Fr(7)101 b Fx(&)19
+b(\\ldTo&)292 b(&)235 b(&&)215 b(&)118 b(&)19 b(\\ruBar)213
+b(\\\\)-79 482 y Fr(8)62 b Fx(~K&)117 b(&)19 b(\\dBar\\rMo)o(no\\)o(br)
+o(&)e(~E_1^\\al)o(pha)o(&&)f(\\dTo\\rEpi^)o({~\\)o(et)o(a'})o(\\b)o(r&)
+-79 531 y Fr(9)1102 b Fx(A')430 b(\\\\)-95 581 y Fr(10)61
+b Fx(\\dBar&)c(&)293 b(&)235 b(&&)215 b(&)118 b(&)78
+b(&)19 b(\\dTo>\\alp)o(ha)d(\\\\)-95 631 y Fr(11)100
+b Fx(&)118 b(&)19 b(K)254 b(&)20 b(\\rMono\\d)o(To\\)o(br&)o(&)c
+(E_1\\ax{2mm})o(&)g(\\rEpi\\dTo\\b)o(r&)o(&)h(A)97 b(\\\\)-95
+681 y Fr(12)j Fx(&)19 b(\\ldTo&)292 b(&)118 b(&)19 b(\\ldTo&)213
+b(&)118 b(&)19 b(\\ldBar)213 b(\\\\)-95 731 y Fr(13)61
+b Fx(~K&)117 b(&)19 b(\\rMono)154 b(&)20 b(~E_1)e(&)h(\\rEpi_{~\\)o
+(eta)o(}&)55 b(&)20 b(A)450 b(\\\\)-95 780 y Fr(14)61
+b Fx(\\endDg)-95 830 y Fr(15)g Fx($$)931 969 y
+gsave
+ 931 969
+a 931 969 a
+currentpoint currentpoint translate 0 neg 6716225 atan rotate neg exch
+neg exch translate
+ 931 969 a 746 980 a Fv(\016)-16 b Fw(\000)-9
+b(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)-19 b Fv(\021)931 969 y
+grestore
+ 931 969 a
+1346 969 a
+gsave
+ 1346 969 a 1346 969 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1346 969 a 1181 980
+a Fw(\000)c(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)h(\000)f(\000)g(\000)g(\000)-22 b Fv(\021)-30 b(\014)1346
+969 y
+grestore
+ 1346 969 a 1346 969 a
+gsave
+ 1346 969 a 1346 969 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1346
+969 a 1349 957 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1349 957 a 1334 951 a Fu(\021)1352 939
+y Ft(0)1349 969 y
+grestore
+ 1349 969 a 559 1064 a
+gsave
+ 559 1064 a 559
+1064 a
+currentpoint currentpoint translate -2983488 neg -5034634 atan rotate
+neg exch neg exch translate
+ 559 1064 a 402 1074 a Fw(\000)-12 b(\000)j(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)d Fv(\021)559
+1064 y
+grestore
+ 559 1064 a 1377 1064 a
+gsave
+ 1377 1064 a 1377 1064 a
+currentpoint currentpoint translate 2983488 neg 5407569 atan rotate
+neg exch neg exch translate
+
+1377 1064 a 1214 1074 a FF(=)-23 b(=)-9 b(=)h(=)f(=)g(=)g(=)g(=)g(=)g
+(=)g(=)g(=)g(=)g(=)-22 b(=)1377 1064 y
+grestore
+ 1377 1064 a 719
+1158 a
+gsave
+ 719 1158 a 719 1158 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 719 1158 a 548 1169 a FF(=)i(=)-9
+b(=)g(=)g(=)g(=)g(=)g(=)g(=)g(=)g(=)g(=)h(=)f(=)-20 b(=)719
+1158 y
+grestore
+ 719 1158 a 601 1158 a
+gsave
+ 601 1158 a 601 1158 a
+currentpoint currentpoint translate 0 neg 6343290 atan rotate neg exch
+neg exch translate
+ 601
+1158 a 400 1158 a
+1 setgray
+ 400 1158 a 427 1169 338 21 v 601 1158
+a
+grestore
+ 601 1158 a 601 1158 a
+gsave
+ 601 1158 a 601 1158 a
+currentpoint currentpoint translate 0 neg 6343290 atan rotate neg exch
+neg exch translate
+ 601 1158
+a 427 1169 a Fv(\016)k Fw(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)h
+(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-20 b
+Fv(\021)601 1158 y
+grestore
+ 601 1158 a 1144 1158 a
+gsave
+ 1144 1158 a
+1144 1158 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 1144 1158 a 984 1169 a Fw(\000)h(\000)-9
+b(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)-18 b Fv(\021)1144 1158 y
+grestore
+ 1144 1158 a 1003 1158
+a
+gsave
+ 1003 1158 a 1003 1158 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1003 1158 a 801 1158 a
+1 setgray
+ 801
+1158 a 838 1169 338 21 v 1003 1158 a
+grestore
+ 1003 1158 a 1003
+1158 a
+gsave
+ 1003 1158 a 1003 1158 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1003 1158 a 838 1169 a
+Fw(\000)-23 b(\000)-8 b(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)-22 b Fv(\021)-30
+b(\014)1003 1158 y
+grestore
+ 1003 1158 a 1003 1158 a
+gsave
+ 1003 1158
+a 1003 1158 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1003 1158 a 1006 1146 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1006 1146 a 994
+1140 a Fr(~)-20 b Fu(\021)1009 1128 y Ft(0)1007 1158
+y
+grestore
+ 1007 1158 a 400 1347 a
+gsave
+ 400 1347 a 400 1347 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 400 1347
+a 229 1358 a FF(=)-13 b(=)k(=)g(=)g(=)g(=)g(=)g(=)g(=)g(=)g(=)g(=)g(=)c
+(=)400 1347 y
+grestore
+ 400 1347 a 1548 1158 a
+gsave
+ 1548 1158 a 1548
+1158 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 1548 1158 a 1378 1169 a Fw(\000)f(\000)-9 b(\000)g(\000)g(\000)h
+(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)c
+Fv(\021)1548 1158 y
+grestore
+ 1548 1158 a 1548 1158 a
+gsave
+ 1548 1158
+a 1548 1158 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 1548 1158 a 1544 1146 a
+currentpoint currentpoint translate 5966976 neg 0 atan rotate neg exch
+neg exch translate
+ 1544 1146 a 10
+x Fu(\013)1544 1158 y
+grestore
+ 1544 1158 a 931 1347 a
+gsave
+ 931 1347
+a 931 1347 a
+currentpoint currentpoint translate 0 neg 6716225 atan rotate neg exch
+neg exch translate
+ 931 1347 a 746 1358 a Fv(\016)f Fw(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)-17 b Fv(\021)931 1347 y
+grestore
+ 931 1347
+a 801 1347 a
+gsave
+ 801 1347 a 801 1347 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 801 1347 a 612 1347
+a
+1 setgray
+ 612 1347 a 641 1358 313 21 v 801 1347 a
+grestore
+ 801 1347 a
+801 1347 a
+gsave
+ 801 1347 a 801 1347 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 801 1347 a 641 1358
+a Fw(\000)-12 b(\000)j(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)e Fv(\021)801 1347 y
+grestore
+ 801 1347 a 1346
+1347 a
+gsave
+ 1346 1347 a 1346 1347 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1346 1347 a 1177 1358
+a Fw(\000)-18 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)h(\000)f(\000)g(\000)g(\000)g(\000)-17 b Fv(\021)-30
+b(\014)1346 1347 y
+grestore
+ 1346 1347 a 1206 1347 a
+gsave
+ 1206 1347
+a 1206 1347 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 1206 1347 a 1017 1347 a
+1 setgray
+ 1017 1347 a 1035
+1358 333 21 v 1206 1347 a
+grestore
+ 1206 1347 a 1206 1347 a
+gsave
+ 1206
+1347 a 1206 1347 a
+currentpoint currentpoint translate -5966976 neg 0 atan rotate neg
+exch neg exch translate
+ 1206 1347 a 1035 1358 a Fw(\000)-13
+b(\000)k(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)d Fv(\021)1206 1347 y
+grestore
+ 1206 1347 a 559 1442
+a
+gsave
+ 559 1442 a 559 1442 a
+currentpoint currentpoint translate -2983488 neg -5034634 atan rotate
+neg exch neg exch translate
+ 559 1442 a 402 1452 a Fw(\000)g(\000)j(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)d
+Fv(\021)559 1442 y
+grestore
+ 559 1442 a 973 1442 a
+gsave
+ 973 1442 a 973
+1442 a
+currentpoint currentpoint translate -2983488 neg -5407569 atan rotate
+neg exch neg exch translate
+ 973 1442 a 814 1452 a Fw(\000)-21 b(\000)-9 b(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-20
+b Fv(\021)973 1442 y
+grestore
+ 973 1442 a 1377 1442 a
+gsave
+ 1377 1442
+a 1377 1442 a
+currentpoint currentpoint translate -2983488 neg -5407569 atan rotate
+neg exch neg exch translate
+ 1377 1442 a 1207 1452 a FF(=)j(=)-9 b(=)g(=)g(=)g(=)g(=)g
+(=)g(=)g(=)g(=)h(=)f(=)g(=)-17 b(=)1377 1442 y
+grestore
+ 1377 1442
+a 601 1536 a
+gsave
+ 601 1536 a 601 1536 a
+currentpoint currentpoint translate 0 neg 6343290 atan rotate neg exch
+neg exch translate
+ 601 1536 a 427 1547
+a Fv(\016)j Fw(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)h(\000)f(\000)g(\000)g(\000)-18 b Fv(\021)601
+1536 y
+grestore
+ 601 1536 a 1003 1536 a
+gsave
+ 1003 1536 a 1003 1536 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+
+1003 1536 a 834 1547 a Fw(\000)h(\000)-9 b(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-17
+b Fv(\021)-30 b(\014)1003 1536 y
+grestore
+ 1003 1536 a 1003 1536
+a
+gsave
+ 1003 1536 a 1003 1536 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1003 1536 a 1008 1549 a
+currentpoint currentpoint translate 0 neg 6379245 atan rotate neg exch
+neg exch translate
+ 1008
+1549 a 1002 1568 a Fr(~)-20 b Fu(\021)1008 1536 y
+grestore
+ 1008
+1536 a 699 980 a FB(K)382 b(E)1149 963 y Fu(\013)1147
+990 y Fr(1)1527 980 y FB(A)1558 963 y Fs(0)392 1158 y
+FF(~)381 1169 y FB(K)783 1158 y FF(~)773 1169 y FB(E)806
+1152 y Fu(\013)804 1179 y Fr(1)1184 1169 y FB(A)1215
+1152 y Fs(0)699 1358 y FB(K)j(E)1150 1364 y Fr(1)1532
+1358 y FB(A)392 1536 y FF(~)381 1547 y FB(K)786 1536
+y FF(~)777 1547 y FB(E)808 1553 y Fr(1)1190 1547 y FB(A)954
+2770 y FF(65)p eop
+%%Page: 66 10
+66 65 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)0 42 y FH(George)15 b(W.)h(Whitehead)p
+FF(,)11 b FC(Elements)k(of)g(Homotopy)g(The)n(ory)p FF(,)e(page)h(650.)
+-79 133 y Fr(1)62 b Fx($$)-79 183 y Fr(2)g Fx(\\cellpush=)o(4p)o(t)-79
+232 y Fr(3)g Fx(\\let\\label)o(st)o(yle)o(\\t)o(ext)o(sty)o(le)-79
+282 y Fr(4)g Fx(\\lpad=1in)16 b(\\bpad=1cm)-79 332 y
+Fr(5)62 b Fx(\\Graph{4in)o(,4)o(}{3)o(.5)o(in,)o(1in)o(})-79
+382 y Fr(6)g Fx(\\To)18 b(\(0,0\))g(\(3.3,0\))76 b(\\hd{p})-79
+432 y Fr(7)62 b Fx(\\To)18 b(\(0,0\))g(\(0,3.5\))76 b(\\hd{q})-79
+482 y Fr(8)62 b Fx(\\Line)18 b(\(2,0\))f(\(2,3.25\))g(\\Line)h(\(0,1\))
+f(\(3.2,1\))g(\\Dot)h(\(2,1\))-79 531 y Fr(9)62 b Fx(\\Dot)18
+b(\(0,0\))-95 581 y Fr(10)61 b Fx(\045)-95 631 y Fr(11)g
+Fx(\\Dot)18 b(\(2,0\))g(\\Dot)g(\(2.25,0\))e(\\Dot)i(\(2.5,0\))f(\\Dot)
+h(\(2.75,0\))f(\\Dot)h(\(3,0\))-95 681 y Fr(12)61 b Fx(\045)-95
+731 y Fr(13)g Fx(\\Dot)18 b(\(0,1\))g(\\Dot)g(\(0,1.25\))e(\\Dot)i
+(\(0,1.5\))f(\\Dot)h(\(0,1.75\))-95 780 y Fr(14)61 b
+Fx(\\Dot)18 b(\(0,2\))g(\\Dot)g(\(0,2.25\))e(\\Dot)i(\(0,2.5\))f(\\Dot)
+h(\(0,2.75\))f(\\Dot)h(\(0,3\))-95 830 y Fr(15)61 b Fx(\045)-95
+880 y Fr(16)g Fx(\\Line)18 b(\(0,2.25\))e(\(2.5,0\))37
+b(^{d^p})17 b(:{.35,5pt})f(\\ro)-95 930 y Fr(17)61 b
+Fx(\\Line)18 b(\(0,3\))f(\(3,0\))38 b(^{p)18 b(+)h(q)h(=)f(m)g(+)g(n})g
+(:{.35,5pt})d(\\ro)-95 980 y Fr(18)61 b Fx(\045)-95 1029
+y Fr(19)g Fx(\\Math{q)17 b(=)i(n})g(\(-.1,1\))e(*1)97
+b(\\Math{E_{0)o(,p-)o(1})o(^2)16 b(=)j(E_{0,p-1}^p)o(})d(\(-.1,2.25\))g
+(*1)-95 1079 y Fr(20)61 b Fx(\\Math{p)17 b(=)i(m})g(\(2,-.2\))e(*{.55})
+g(\\Math{E_{p)o(,0})o(^2)f(=)j(E_{p,0}^p})d(\(2.75,-.2\))g(*{.6})-95
+1129 y Fr(21)61 b Fx(\\endGraph)-95 1179 y Fr(22)g Fx($$)1020
+2324 y
+gsave
+ 1020 2324 a 1020 2324 a
+currentpoint currentpoint translate 0 neg 15629758 atan rotate neg
+exch neg exch translate
+ 1020 2324 a 525 2335 a
+Fw(\000)-21 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)-21 b Fv(\021)1020 2324 y
+grestore
+ 1020 2324 a 1505
+2335 a FB(p)525 1799 y
+gsave
+ 525 1799 a 525 1799 a
+currentpoint currentpoint translate 16577001 neg 0 atan rotate neg
+exch neg exch translate
+ 525 1799
+a 0 1810 a Fw(\000)j(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)
+g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)-18 b Fv(\021)525 1799
+y
+grestore
+ 525 1799 a 515 1285 a FB(q)1125 1837 y
+gsave
+ 1125 1837 a
+1125 1837 a
+currentpoint currentpoint translate 15392929 neg 0 atan rotate neg
+exch neg exch translate
+ 1125 1837 a 637 1847 a Fw(\000)c(\000)-9
+b(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h
+(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)
+-21 b(\000)1125 1837 y
+grestore
+ 1125 1837 a 1005 2024 a
+gsave
+ 1005 2024
+a 1005 2024 a
+currentpoint currentpoint translate 0 neg 15156100 atan rotate neg
+exch neg exch translate
+ 1005 2024 a 525 2035 a Fw(\000)j(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-17
+b(\000)1005 2024 y
+grestore
+ 1005 2024 a 1125 2024 a
+gsave
+ 1125 2024
+a 1125 2024 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 1125 2024 a 1115 2035 a Fw(\017)1125 2024
+y
+grestore
+ 1125 2024 a 525 2324 a
+gsave
+ 525 2324 a 525 2324 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525 2324
+a 515 2335 a Fw(\017)525 2324 y
+grestore
+ 525 2324 a 1125 2324
+a
+gsave
+ 1125 2324 a 1125 2324 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 1125 2324 a 1115 2335 a Fw(\017)1125
+2324 y
+grestore
+ 1125 2324 a 1200 2324 a
+gsave
+ 1200 2324 a 1200 2324
+a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 1200 2324 a 1190 2335 a Fw(\017)1200 2324 y
+grestore
+ 1200 2324
+a 1275 2324 a
+gsave
+ 1275 2324 a 1275 2324 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 1275 2324 a 1265
+2335 a Fw(\017)1275 2324 y
+grestore
+ 1275 2324 a 1350 2324 a
+gsave
+ 1350
+2324 a 1350 2324 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 1350 2324 a 1340 2335 a Fw(\017)1350
+2324 y
+grestore
+ 1350 2324 a 1425 2324 a
+gsave
+ 1425 2324 a 1425 2324
+a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 1425 2324 a 1415 2335 a Fw(\017)1425 2324 y
+grestore
+ 1425 2324
+a 525 2024 a
+gsave
+ 525 2024 a 525 2024 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525 2024 a 515 2035
+a Fw(\017)525 2024 y
+grestore
+ 525 2024 a 525 1949 a
+gsave
+ 525 1949 a
+525 1949 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525 1949 a 515 1960 a Fw(\017)525 1949 y
+grestore
+ 525
+1949 a 525 1874 a
+gsave
+ 525 1874 a 525 1874 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525 1874 a 515
+1885 a Fw(\017)525 1874 y
+grestore
+ 525 1874 a 525 1799 a
+gsave
+ 525 1799
+a 525 1799 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525 1799 a 515 1810 a Fw(\017)525 1799 y
+grestore
+
+525 1799 a 525 1724 a
+gsave
+ 525 1724 a 525 1724 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525 1724
+a 515 1735 a Fw(\017)525 1724 y
+grestore
+ 525 1724 a 525 1649 a
+gsave
+
+525 1649 a 525 1649 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525 1649 a 515 1660 a Fw(\017)525
+1649 y
+grestore
+ 525 1649 a 525 1574 a
+gsave
+ 525 1574 a 525 1574 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525
+1574 a 515 1585 a Fw(\017)525 1574 y
+grestore
+ 525 1574 a 525 1499
+a
+gsave
+ 525 1499 a 525 1499 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525 1499 a 515 1510 a Fw(\017)525
+1499 y
+grestore
+ 525 1499 a 525 1424 a
+gsave
+ 525 1424 a 525 1424 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 525
+1424 a 515 1435 a Fw(\017)525 1424 y
+grestore
+ 525 1424 a 900 1987
+a
+gsave
+ 900 1987 a 900 1987 a
+currentpoint currentpoint translate -10656643 neg 11840715 atan rotate
+neg exch neg exch translate
+ 900 1987 a 396 1997 a Fw(\000)g(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)-16 b(\000)900 1987 y
+grestore
+ 900 1987 a 900 1987 a
+gsave
+ 900
+1987 a 900 1987 a
+currentpoint currentpoint translate -10656643 neg 11840715 atan rotate
+neg exch neg exch translate
+ 900 1987 a 728 1954 a FB(d)750 1939
+y Fu(p)749 1987 y
+grestore
+ 749 1987 a 975 1874 a
+gsave
+ 975 1874 a 975
+1874 a
+currentpoint currentpoint translate -14208858 neg 14208858 atan rotate
+neg exch neg exch translate
+ 975 1874 a 339 1885 a Fw(\000)k(\000)j(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)e(\000)
+975 1874 y
+grestore
+ 975 1874 a 975 1874 a
+gsave
+ 975 1874 a 975 1874
+a
+currentpoint currentpoint translate -14208858 neg 14208858 atan rotate
+neg exch neg exch translate
+ 975 1874 a 655 1833 a FB(p)9 b FF(+)g FB(q)k FF(=)f
+FB(m)d FF(+)h FB(n)784 1874 y
+grestore
+ 784 1874 a 495 2024 a
+gsave
+ 495
+2024 a 495 2024 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 495 2024 a 395 2035 a FB(q)i FF(=)g
+FB(n)495 2024 y
+grestore
+ 495 2024 a 495 1649 a
+gsave
+ 495 1649 a 495
+1649 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 495 1649 a 202 1660 a FB(E)235 1645 y Fr(2)233
+1670 y(0)p Fu(;p)p Fs(\000)p Fr(1)332 1660 y FF(=)g FB(E)409
+1640 y Fu(p)407 1671 y Fr(0)p Fu(;p)p Fs(\000)p Fr(1)495
+1649 y
+grestore
+ 495 1649 a 1125 2384 a
+gsave
+ 1125 2384 a 1125 2384 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+
+1125 2384 a 1063 2395 a FB(p)f FF(=)h FB(m)1125 2384
+y
+grestore
+ 1125 2384 a 1350 2384 a
+gsave
+ 1350 2384 a 1350 2384 a
+currentpoint currentpoint translate 0 neg rotate neg exch neg exch
+translate
+ 1350
+2384 a 1225 2395 a FB(E)1258 2380 y Fr(2)1256 2405 y
+Fu(p;)p Fr(0)1313 2395 y FF(=)g FB(E)1390 2375 y Fu(p)1388
+2406 y(p;)p Fr(0)1350 2384 y
+grestore
+ 1350 2384 a 954 2770 a FF(66)p
+eop
+%%Page: 67 11
+67 66 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)-79 42 y Fr(1)62 b Fx($$)-79
+91 y Fr(2)g Fx(\\rotatedla)o(be)o(ls)16 b(\\let\\label)o(sty)o(le)o
+(\\te)o(xt)o(sty)o(le)g(\\scale=2)-79 141 y Fr(3)62 b
+Fx(\\Diagram)-79 191 y Fr(4)82 b Fx(&)19 b(&)g(F\(3,2\))e(\\aLine)h
+(\(1,-4\))f(>{F\(3,1,1)o(\)})f(:{.4})i(\\br)38 b(\\\\)-79
+241 y Fr(5)82 b Fx(&)19 b(&)156 b(&)20 b(\\rdLine)d(>{F\(1,2,)o(2\)})f
+(\\pt{right)o(,.7)o(5})g(\\\\)-79 291 y Fr(6)82 b Fx(&)19
+b(&)156 b(&)177 b(&)19 b(F\(1,4\))370 b(\\\\)-79 340
+y Fr(7)62 b Fx(F\(2,3\))17 b(\\aDash)h(\(4,1\))f(^{F\(1,1,3\))o(})g
+(:{.4})g(\\pp)156 b(\\\\)-79 390 y Fr(8)82 b Fx(&)19
+b(&)156 b(&)20 b(F\(4,1\))d(\\aLine)g(\(1,2\))h(>{F\(1,3,1)o(\)})75
+b(\\\\)-79 440 y Fr(9)62 b Fx(\\Modify)-95 490 y Fr(10)f
+Fx(\\Pt{top})17 b(\(2,4\))g(\\Pt{b1})g(\(0,1\))h(\\Pt{b2})f(\(3,0\))-95
+540 y Fr(11)61 b Fx(\\Pt{LeftF})16 b(\(1.65,2\))g(\\Pt{BackF})g
+(\(2,2.5\))-95 589 y Fr(12)61 b Fx(\\Pt{Bottom)o(F})16
+b(\(2.5,1\))h(\\Pt{Right)o(F})f(\(3.1,2.25\))-95 639
+y Fr(13)61 b Fx(\\Nul)38 b(\\pt{b1})17 b(\\pt{b2})271
+b(\\pt{bottom,)o(.8)o(})-95 689 y Fr(14)61 b Fx(\\Nul)38
+b(\\pt{Botto)o(mF)o(})17 b(\\pt{botto)o(m})94 b(\\pt{BottomL)o(,2)o(})
+-95 739 y Fr(15)61 b Fx(\\Dash)18 b(\\pt{Botto)o(mF)o(})f(\\pt{botto)o
+(m})94 b(\\tl\\circ)17 b(\\dt{3pt})-95 789 y Fr(16)61
+b Fx(\\Line)18 b(\\pt{botto)o(m})e(\\pt{Bottom)o(L})94
+b(\\hd{F\(1,1,2)o(,1)o(\)})-95 839 y Fr(17)61 b Fx(\\Line)18
+b(\\pt{b1})f(\\pt{b2})g(_{F\(2,2,)o(1\)})35 b(\\br)-95
+888 y Fr(18)61 b Fx(\\Nul)38 b(\\pt{b1})17 b(\\pt{top})251
+b(\\pt{left,.2)o(5})16 b(\\pt{back,.)o(75)o(})-95 938
+y Fr(19)61 b Fx(\\Nul)38 b(\\pt{BackF)o(})16 b(\\pt{back})173
+b(\\pt{BackL,2)o(})-95 988 y Fr(20)61 b Fx(\\Nul)38 b(\\pt{LeftF)o(})16
+b(\\pt{left})173 b(\\pt{LeftL,2)o(})-95 1038 y Fr(21)61
+b Fx(\\Dash)18 b(\\pt{BackF)o(})e(\\pt{back})173 b(\\tl\\circ)17
+b(\\dt{3pt})-95 1088 y Fr(22)61 b Fx(\\Line)18 b(\\pt{back})e
+(\\pt{BackL)o(})173 b(\\hd{F\(1,1,1)o(,2)o(\)})-95 1137
+y Fr(23)61 b Fx(\\Line)18 b(\\pt{b1})f(\\pt{top})f(<{F\(2,1,2\))o(})g
+(\\br)-95 1187 y Fr(24)61 b Fx(\\Line)18 b(\\pt{LeftF)o(})e
+(\\pt{LeftL})153 b(\\tl\\bullet)16 b(\\hd{F\(2,1,)o(1,1)o(\)})g(\\jt)j
+(\\br)-95 1237 y Fr(25)61 b Fx(\\Nul)38 b(\\pt{Right)o(F})16
+b(\\pt{right})133 b(\\pt{RightL,)o(3})-95 1287 y Fr(26)61
+b Fx(\\Line)18 b(\\pt{Right)o(F})e(\\pt{RightL)o(})114
+b(\\tl\\bullet)16 b(\\hd{F\(1,2,)o(1,1)o(\)})g(\\jt)j(\\br)-95
+1337 y Fr(27)61 b Fx(\\endDiagra)o(m)-95 1386 y Fr(28)g
+Fx($$)1029 2114 y
+gsave
+ 1029 2114 a 1029 2114 a
+currentpoint currentpoint translate 3729358 neg 14917432 atan rotate
+neg exch neg exch translate
+ 1029 2114 a
+608 2124 a Fv(\013)-8 b(\013)f(\013)g(\013)g(\013)g(\013)g(\013)g(\013)
+g(\013)g(\013)g(\013)g(\013)g(\013)g(\013)g(\013)g(\013)g(\013)h(\013)f
+(\013)g(\013)g(\013)g(\013)g(\013)g(\013)g(\013)g(\013)g(\013)g(\013)g
+(\013)g(\013)g(\013)g(\013)g(\013)h(\013)f(\013)g(\013)1029
+2114 y
+grestore
+ 1029 2114 a 1029 2114 a
+gsave
+ 1029 2114 a 1029 2114
+a
+currentpoint currentpoint translate 3729358 neg 14917432 atan rotate
+neg exch neg exch translate
+ 1029 2114 a 863 2091 a FB(F)6 b FF(\(1)p FB(;)h FF(1)p
+FB(;)g FF(3\))945 2114 y
+grestore
+ 945 2114 a 1147 1996 a
+gsave
+ 1147
+1996 a 1147 1996 a
+currentpoint currentpoint translate -14917432 neg 3729358 atan rotate
+neg exch neg exch translate
+ 1147 1996 a 660 1996 a
+1 setgray
+ 660 1996 a
+690 2006 915 21 v 1147 1996 a
+grestore
+ 1147 1996 a 1147 1996 a
+gsave
+
+1147 1996 a 1147 1996 a
+currentpoint currentpoint translate -14917432 neg 3729358 atan rotate
+neg exch neg exch translate
+ 1147 1996 a 690 2006 a Fw(\000)-18
+b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)-17
+b(\000)1147 1996 y
+grestore
+ 1147 1996 a 1147 1996 a
+gsave
+ 1147 1996
+a 1147 1996 a
+currentpoint currentpoint translate -14917432 neg 3729358 atan rotate
+neg exch neg exch translate
+ 1147 1996 a 973 1973 a FB(F)6 b FF(\(3)p
+FB(;)h FF(1)p FB(;)g FF(1\))1055 1996 y
+grestore
+ 1055 1996 a 1265
+1760 a
+gsave
+ 1265 1760 a 1265 1760 a
+currentpoint currentpoint translate -7458716 neg 7458716 atan rotate
+neg exch neg exch translate
+ 1265 1760 a 968 1770 a
+Fw(\000)-17 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)
+f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)h(\000)-17 b(\000)1265
+1760 y
+grestore
+ 1265 1760 a 1265 1760 a
+gsave
+ 1265 1760 a 1265 1760
+a
+currentpoint currentpoint translate -7458716 neg 7458716 atan rotate
+neg exch neg exch translate
+ 1265 1760 a 1183 1737 a FB(F)6 b FF(\(1)p FB(;)h FF(2)p
+FB(;)g FF(2\))1265 1760 y
+grestore
+ 1265 1760 a 1383 2232 a
+gsave
+ 1383
+2232 a 1383 2232 a
+currentpoint currentpoint translate 7458716 neg 3729358 atan rotate
+neg exch neg exch translate
+ 1383 2232 a 1150 2242 a Fw(\000)-12
+b(\000)j(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)e(\000)1383
+2232 y
+grestore
+ 1383 2232 a 1383 2232 a
+gsave
+ 1383 2232 a 1383 2232
+a
+currentpoint currentpoint translate 7458716 neg 3729358 atan rotate
+neg exch neg exch translate
+ 1383 2232 a 1301 2276 a FB(F)6 b FF(\(1)p FB(;)h FF(3)p
+FB(;)g FF(1\))1383 2232 y
+grestore
+ 1383 2232 a 966 1534 a FB(F)f
+FF(\(3)p FB(;)h FF(2\))1439 2006 y FB(F)f FF(\(1)p FB(;)h
+FF(4\))494 2242 y FB(F)f FF(\(2)p FB(;)h FF(3\))1202
+2479 y FB(F)f FF(\(4)p FB(;)h FF(1\))910 2350 y
+gsave
+ 910 2350
+a 910 2350 a
+currentpoint currentpoint translate -3729358 neg 11188074 atan rotate
+neg exch neg exch translate
+ 910 2350 a 910 2350 a
+grestore
+ 910 2350 a 1113 2320
+a
+gsave
+ 1113 2320 a 1113 2320 a
+currentpoint currentpoint translate -2770849 neg -1058864 atan rotate
+neg exch neg exch translate
+ 1113 2320 a 1113 2320 a
+grestore
+ 1113
+2320 a 1113 2320 a
+gsave
+ 1113 2320 a 1113 2320 a
+currentpoint currentpoint translate -2770849 neg -1058864 atan rotate
+neg exch neg exch translate
+ 1113 2320
+a 1025 2330 a Fv(\013)-9 b(\013)g(\013)g(\013)g(\013)g(\013)g(\013)1113
+2320 y
+grestore
+ 1113 2320 a 1136 2242 a Fw(\016)1050 2484 y
+gsave
+ 1050
+2484 a 1050 2484 a
+currentpoint currentpoint translate -2405159 neg -921240 atan rotate
+neg exch neg exch translate
+ 1050 2484 a 981 2494 a Fw(\000)-23
+b(\000)-9 b(\000)g(\000)h(\000)-22 b(\000)1050 2484 y
+grestore
+
+1050 2484 a 920 2570 a FB(F)6 b FF(\(1)p FB(;)h FF(1)p
+FB(;)g FF(2)p FB(;)g FF(1\))910 2350 y
+gsave
+ 910 2350 a 910
+2350 a
+currentpoint currentpoint translate -3729358 neg 11188074 atan rotate
+neg exch neg exch translate
+ 910 2350 a 537 2350 a
+1 setgray
+ 537 2350 a 614 2361 597
+21 v 910 2350 a
+grestore
+ 910 2350 a 910 2350 a
+gsave
+ 910 2350 a 910
+2350 a
+currentpoint currentpoint translate -3729358 neg 11188074 atan rotate
+neg exch neg exch translate
+ 910 2350 a 614 2361 a Fw(\000)-16 b(\000)-9 b(\000)h(\000)f
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g
+(\000)-15 b(\000)910 2350 y
+grestore
+ 910 2350 a 910 2350 a
+gsave
+ 910
+2350 a 910 2350 a
+currentpoint currentpoint translate -3729358 neg 11188074 atan rotate
+neg exch neg exch translate
+ 910 2350 a 830 2394 a FB(F)6 b FF(\(2)p
+FB(;)h FF(2)p FB(;)g FF(1\))912 2350 y
+grestore
+ 912 2350 a 792
+1878 a
+gsave
+ 792 1878 a 792 1878 a
+currentpoint currentpoint translate 11188074 neg 7458716 atan rotate
+neg exch neg exch translate
+ 792 1878 a 792 1878 a
+grestore
+ 792
+1878 a 965 1796 a
+gsave
+ 965 1796 a 965 1796 a
+currentpoint currentpoint translate 2578128 neg -2008000 atan rotate
+neg exch neg exch translate
+ 965 1796 a 965
+1796 a
+grestore
+ 965 1796 a 815 2018 a
+gsave
+ 815 2018 a 815 2018 a
+currentpoint currentpoint translate -713450 neg -4145418 atan rotate
+neg exch neg exch translate
+ 815
+2018 a 815 2018 a
+grestore
+ 815 2018 a 965 1796 a
+gsave
+ 965 1796 a 965
+1796 a
+currentpoint currentpoint translate 2578128 neg -2008000 atan rotate
+neg exch neg exch translate
+ 965 1796 a 865 1807 a Fv(\013)-9 b(\013)g(\013)g(\013)g(\013)g
+(\013)g(\013)g(\013)965 1796 y
+grestore
+ 965 1796 a 1018 1888 a
+Fw(\016)845 1643 y
+gsave
+ 845 1643 a 845 1643 a
+currentpoint currentpoint translate 2271420 neg -1768140 atan rotate
+neg exch neg exch translate
+ 845 1643 a 767
+1653 a Fw(\000)-16 b(\000)-9 b(\000)g(\000)g(\000)-14
+b(\000)845 1643 y
+grestore
+ 845 1643 a 688 1581 a FB(F)6 b FF(\(1)p
+FB(;)h FF(1)p FB(;)g FF(1)p FB(;)g FF(2\))792 1878 y
+gsave
+
+792 1878 a 792 1878 a
+currentpoint currentpoint translate 11188074 neg 7458716 atan rotate
+neg exch neg exch translate
+ 792 1878 a 367 1878 a
+1 setgray
+ 367 1878
+a 400 1888 786 21 v 792 1878 a
+grestore
+ 792 1878 a 792 1878 a
+gsave
+
+792 1878 a 792 1878 a
+currentpoint currentpoint translate 11188074 neg 7458716 atan rotate
+neg exch neg exch translate
+ 792 1878 a 400 1888 a Fw(\000)-14
+b(\000)-9 b(\000)h(\000)f(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)d(\000)792 1878 y
+grestore
+ 792 1878 a 792
+1878 a
+gsave
+ 792 1878 a 792 1878 a
+currentpoint currentpoint translate 11188074 neg 7458716 atan rotate
+neg exch neg exch translate
+ 792 1878 a 710 1855 a FB(F)6
+b FF(\(2)p FB(;)h FF(1)p FB(;)g FF(2\))792 1878 y
+grestore
+ 792
+1878 a 696 2039 a
+gsave
+ 696 2039 a 696 2039 a
+currentpoint currentpoint translate -1363986 neg -7905486 atan rotate
+neg exch neg exch translate
+ 696 2039 a 441
+2039 a
+1 setgray
+ 441 2039 a 437 2049 402 21 v 696 2039 a
+grestore
+ 696 2039
+a 696 2039 a
+gsave
+ 696 2039 a 696 2039 a
+currentpoint currentpoint translate -1363986 neg -7905486 atan rotate
+neg exch neg exch translate
+ 696 2039 a 437 2049
+a Fw(\000)-20 b(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-20
+b(\000)696 2039 y
+grestore
+ 696 2039 a 936 2006 a Fw(\017)344 2093
+y FB(F)6 b FF(\(2)p FB(;)h FF(1)p FB(;)g FF(1)p FB(;)g
+FF(1\))1329 1901 y
+gsave
+ 1329 1901 a 1329 1901 a
+currentpoint currentpoint translate 1139925 neg 1284136 atan rotate
+neg exch neg exch translate
+ 1329 1901
+a 1329 1901 a
+grestore
+ 1329 1901 a 1397 1841 a
+gsave
+ 1397 1841 a 1397
+1841 a
+currentpoint currentpoint translate 3030492 neg 3415941 atan rotate
+neg exch neg exch translate
+ 1397 1841 a 1252 1841 a
+1 setgray
+ 1252 1841 a 1248 1851
+254 21 v 1397 1841 a
+grestore
+ 1397 1841 a 1397 1841 a
+gsave
+ 1397 1841
+a 1397 1841 a
+currentpoint currentpoint translate 3030492 neg 3415941 atan rotate
+neg exch neg exch translate
+ 1397 1841 a 1248 1851 a Fw(\000)-14 b(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)-13
+b(\000)1397 1841 y
+grestore
+ 1397 1841 a 1278 1947 a Fw(\017)1403
+1755 y FB(F)6 b FF(\(1)p FB(;)h FF(2)p FB(;)g FF(1)p
+FB(;)g FF(1\))954 2770 y(67)p eop
+%%Page: 68 12
+68 67 bop 0 -58 a Fz(T)o(yp)q(esetting)9 b(diagrams)g(with)j(kuvio.tex)
+1145 b(Revision)10 b(2.5.12)-79 42 y Fr(1)62 b Fx($$)-79
+91 y Fr(2)g Fx(\\def\\y#1#2)o({Y)o(\(#1)o(,#)o(2\)})16
+b(\\def\\RP{{)o(\\bb)g(R}P})-79 141 y Fr(3)62 b Fx(\\gravitate)o(ri)o
+(ght)-79 191 y Fr(4)g Fx(\\Dg)-79 241 y Fr(5)g Fx(&&&\\RP^1)17
+b(=)i({}&)f(\\y11)g(&)i(\\rInto)d(&)i(\\y21)f(&)h(\\rInto)f(&)h(\\y31)f
+(&)h(\\rInto)e(&)j(\\y41)e(&)h(\\rInto)e(&)i(\\cdots)f(\\\\)-79
+291 y Fr(6)62 b Fx(&&&)195 b(&)117 b(&)157 b(&)19 b(\\dTo)f(&)157
+b(&)19 b(\\dTo)f(&)156 b(&)20 b(\\dTo)e(&)333 b(\\\\)-79
+340 y Fr(7)62 b Fx(&&\\RP^2)17 b(=)i({}&&)116 b(&)157
+b(&)19 b(\\y12)f(&)h(\\rInto)f(&)h(\\y22)f(&)h(\\rInto)e(&)j(\\y32)e(&)
+h(\\rInto)e(&)i(\\cdots)f(\\\\)-79 390 y Fr(8)62 b Fx(&&)195
+b(&&)117 b(&)157 b(&)117 b(&)157 b(&)19 b(\\dTo)f(&)156
+b(&)20 b(\\dTo)e(&)333 b(\\\\)-79 440 y Fr(9)62 b Fx(&\\RP^3)17
+b(=)j({}&&&)115 b(&)157 b(&)117 b(&)157 b(&)19 b(\\y13)f(&)h(\\rInto)e
+(&)j(\\y23)e(&)h(\\rInto)e(&)i(\\cdots)f(\\\\)-95 490
+y Fr(10)61 b Fx(&)196 b(&&&)116 b(&)157 b(&)117 b(&)157
+b(&)117 b(&)156 b(&)20 b(\\dTo)e(&)333 b(\\\\)-95 540
+y Fr(11)61 b Fx(\\RP^4)18 b(=)h({}&&&&)115 b(&)157 b(&)117
+b(&)157 b(&)117 b(&)156 b(&)20 b(\\y14)e(&)h(\\rInto)e(&)i(\\cdots)f
+(\\\\)-95 589 y Fr(12)61 b Fx(\\endDg)-95 639 y Fr(13)g
+Fx($$)666 781 y
+gsave
+ 666 781 a 666 781 a
+currentpoint currentpoint translate 0 neg 4406548 atan rotate neg exch
+neg exch translate
+ 666 781 a 597 791
+a FB(,)-7 b Fw(\000)-22 b(\000)-9 b(\000)g(\000)g(\000)-21
+b Fv(\021)666 781 y
+grestore
+ 666 781 a 945 781 a
+gsave
+ 945 781 a 945
+781 a
+currentpoint currentpoint translate 0 neg 4406548 atan rotate neg exch
+neg exch translate
+ 945 781 a 876 791 a FB(,)-7 b Fw(\000)-22 b(\000)-9
+b(\000)g(\000)g(\000)-21 b Fv(\021)945 781 y
+grestore
+ 945 781
+a 1224 781 a
+gsave
+ 1224 781 a 1224 781 a
+currentpoint currentpoint translate 0 neg 4406548 atan rotate neg exch
+neg exch translate
+ 1224 781 a 1155 791
+a FB(,)-7 b Fw(\000)-22 b(\000)-9 b(\000)g(\000)g(\000)-21
+b Fv(\021)1224 781 y
+grestore
+ 1224 781 a 1484 781 a
+gsave
+ 1484 781 a
+1484 781 a
+currentpoint currentpoint translate 0 neg 3797606 atan rotate neg exch
+neg exch translate
+ 1484 781 a 1434 791 a FB(,)-7 b Fw(\000)-21
+b(\000)-10 b(\000)i(\000)f(\000)-21 b Fv(\021)1484 781
+y
+grestore
+ 1484 781 a 805 875 a
+gsave
+ 805 875 a 805 875 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 805 875 a
+740 886 a Fw(\000)e(\000)-9 b(\000)g(\000)h(\000)-22
+b Fv(\021)805 875 y
+grestore
+ 805 875 a 1084 875 a
+gsave
+ 1084 875 a 1084
+875 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1084 875 a 1019 886 a Fw(\000)f(\000)-8 b(\000)f(\000)g(\000)-22
+b Fv(\021)1084 875 y
+grestore
+ 1084 875 a 1363 875 a
+gsave
+ 1363 875 a
+1363 875 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1363 875 a 1298 886 a Fw(\000)g(\000)-9 b(\000)g(\000)g
+(\000)-22 b Fv(\021)1363 875 y
+grestore
+ 1363 875 a 945 970 a
+gsave
+ 945
+970 a 945 970 a
+currentpoint currentpoint translate 0 neg 4406548 atan rotate neg exch
+neg exch translate
+ 945 970 a 876 980 a FB(,)-7 b Fw(\000)-22
+b(\000)-9 b(\000)g(\000)g(\000)-21 b Fv(\021)945 970
+y
+grestore
+ 945 970 a 1224 970 a
+gsave
+ 1224 970 a 1224 970 a
+currentpoint currentpoint translate 0 neg 4406548 atan rotate neg exch
+neg exch translate
+ 1224 970
+a 1155 980 a FB(,)-7 b Fw(\000)-22 b(\000)-9 b(\000)g(\000)g(\000)-21
+b Fv(\021)1224 970 y
+grestore
+ 1224 970 a 1484 970 a
+gsave
+ 1484 970 a
+1484 970 a
+currentpoint currentpoint translate 0 neg 3797606 atan rotate neg exch
+neg exch translate
+ 1484 970 a 1434 980 a FB(,)-7 b Fw(\000)-21
+b(\000)-10 b(\000)i(\000)f(\000)-21 b Fv(\021)1484 970
+y
+grestore
+ 1484 970 a 1084 1064 a
+gsave
+ 1084 1064 a 1084 1064 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1084
+1064 a 1019 1075 a Fw(\000)e(\000)-8 b(\000)f(\000)g(\000)-22
+b Fv(\021)1084 1064 y
+grestore
+ 1084 1064 a 1363 1064 a
+gsave
+ 1363 1064
+a 1363 1064 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1363 1064 a 1298 1075 a Fw(\000)g(\000)-9
+b(\000)g(\000)g(\000)-22 b Fv(\021)1363 1064 y
+grestore
+ 1363 1064
+a 1224 1159 a
+gsave
+ 1224 1159 a 1224 1159 a
+currentpoint currentpoint translate 0 neg 4406548 atan rotate neg exch
+neg exch translate
+ 1224 1159 a 1155
+1169 a FB(,)-7 b Fw(\000)-22 b(\000)-9 b(\000)g(\000)g(\000)-21
+b Fv(\021)1224 1159 y
+grestore
+ 1224 1159 a 1484 1159 a
+gsave
+ 1484 1159
+a 1484 1159 a
+currentpoint currentpoint translate 0 neg 3797606 atan rotate neg exch
+neg exch translate
+ 1484 1159 a 1434 1169 a FB(,)-7 b Fw(\000)-21
+b(\000)-10 b(\000)i(\000)f(\000)-21 b Fv(\021)1484 1159
+y
+grestore
+ 1484 1159 a 1363 1253 a
+gsave
+ 1363 1253 a 1363 1253 a
+currentpoint currentpoint translate -2983488 neg 0 atan rotate neg
+exch neg exch translate
+ 1363
+1253 a 1298 1264 a Fw(\000)f(\000)-9 b(\000)g(\000)g(\000)-22
+b Fv(\021)1363 1253 y
+grestore
+ 1363 1253 a 1484 1348 a
+gsave
+ 1484 1348
+a 1484 1348 a
+currentpoint currentpoint translate 0 neg 3797606 atan rotate neg exch
+neg exch translate
+ 1484 1348 a 1434 1358 a FB(,)-7 b Fw(\000)-21
+b(\000)-10 b(\000)i(\000)f(\000)-21 b Fv(\021)1484 1348
+y
+grestore
+ 1484 1348 a 322 791 a Fo(R)p FB(P)390 774 y Fr(1)419
+791 y FF(=)12 b FB(Y)d FF(\(1)p FB(;)e FF(1\))153 b FB(Y)10
+b FF(\(2)p FB(;)d FF(1\))152 b FB(Y)10 b FF(\(3)p FB(;)d
+FF(1\))153 b FB(Y)9 b FF(\(4)p FB(;)e FF(1\))153 b Fw(\001)7
+b(\001)g(\001)601 980 y Fo(R)p FB(P)669 963 y Fr(2)698
+980 y FF(=)12 b FB(Y)e FF(\(1)p FB(;)d FF(2\))152 b FB(Y)10
+b FF(\(2)p FB(;)d FF(2\))153 b FB(Y)9 b FF(\(3)p FB(;)e
+FF(2\))153 b Fw(\001)7 b(\001)g(\001)880 1169 y Fo(R)p
+FB(P)948 1152 y Fr(3)978 1169 y FF(=)k FB(Y)f FF(\(1)p
+FB(;)d FF(3\))153 b FB(Y)9 b FF(\(2)p FB(;)e FF(3\))153
+b Fw(\001)7 b(\001)g(\001)1159 1358 y Fo(R)p FB(P)1227
+1341 y Fr(4)1257 1358 y FF(=)12 b FB(Y)d FF(\(1)p FB(;)e
+FF(4\))153 b Fw(\001)7 b(\001)g(\001)-79 1523 y Fr(1)62
+b Fx($$)-79 1573 y Fr(2)g Fx(\\def\\M{{\\c)o(al)16 b(M}\\dot})h
+(\\def\\inv{)o(^{-)o(1})o(})g(\\def\\orlz)o(#1)o({\\l)o(ang)o(le)o
+(#1\\)o(ra)o(ngl)o(e})-79 1623 y Fr(3)62 b Fx(\\let\\label)o(st)o(yle)o
+(\\t)o(ext)o(sty)o(le)-79 1673 y Fr(4)g Fx(\\Dg)-79 1722
+y Fr(5)g Fx([q\(g,b\),t])16 b(\\aNul)h(\(1,-1\))h(\\aMapsto)e(\(2,-4\))
+i(&&&)g(\\rMapsto)f(&&&)-79 1772 y Fr(6)395 b Fx(q\(g,\\phi\(b,)o(t\))o
+(\))17 b(\\aNul)g(\(-1,-1\))g(\\aMapsto)g(\(-2,-4\))g(\\mx{12pt})f
+(\\\\)-79 1822 y Fr(7)199 b Fx(&)20 b(\\M)e(R_s)h(&)137
+b(&)19 b(\\rTo)77 b(&)156 b(&)20 b(\\beta\\inv)o(\(W)o(_s\))55
+b(\\\\)-79 1872 y Fr(8)199 b Fx(&)157 b(&)19 b(\\rdTo)f(&)176
+b(&)19 b(\\ldTo)f(>{R_s})272 b(\\\\)-79 1922 y Fr(9)199
+b Fx(&)157 b(&)137 b(&)19 b(\\beta\\inv)o(\\or)o(lz{)o(s})369
+b(\\\\)-95 1971 y Fr(10)198 b Fx(&)39 b(&)19 b(q\(g,r_s\(b\)\))d(&)j
+({})g(=)g({})g(&)g(q\(g,r_s\(\\p)o(hi)o(\(b,)o(t\)\))o(\))350
+b(\\\\)-95 2021 y Fr(11)61 b Fx(\\endDg)-95 2071 y Fr(12)g
+Fx($$)676 2255 y
+gsave
+ 676 2255 a 676 2255 a
+currentpoint currentpoint translate -1491744 neg 2797019 atan rotate
+neg exch neg exch translate
+ 676 2255 a 676
+2255 a
+grestore
+ 676 2255 a 706 2397 a
+gsave
+ 706 2397 a 706 2397 a
+currentpoint currentpoint translate -5966976 neg 3747163 atan rotate
+neg exch neg exch translate
+ 706
+2397 a 516 2407 a Fw(7\000)-13 b(\000)k(\000)g(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g(\000)g(\000)d
+Fv(\021)706 2397 y
+grestore
+ 706 2397 a 967 2208 a
+gsave
+ 967 2208 a 967
+2208 a
+currentpoint currentpoint translate 0 neg 11974508 atan rotate neg
+exch neg exch translate
+ 967 2208 a 679 2218 a Fw(7\000)c(\000)-9 b(\000)g(\000)g(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)h(\000)f
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-15
+b Fv(\021)967 2208 y
+grestore
+ 967 2208 a 1232 2255 a
+gsave
+ 1232 2255
+a 1232 2255 a
+currentpoint currentpoint translate -1491744 neg -3583451 atan rotate
+neg exch neg exch translate
+ 1232 2255 a 1232 2255 a
+grestore
+ 1232 2255 a 1225
+2397 a
+gsave
+ 1225 2397 a 1225 2397 a
+currentpoint currentpoint translate -5966976 neg -3819525 atan rotate
+neg exch neg exch translate
+ 1225 2397 a 1033 2407
+a Fw(7\000)-23 b(\000)-9 b(\000)g(\000)g(\000)g(\000)h(\000)f(\000)g
+(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)g(\000)-22
+b Fv(\021)1225 2397 y
+grestore
+ 1225 2397 a 942 2303 a
+gsave
+ 942 2303
+a 942 2303 a
+currentpoint currentpoint translate 0 neg 5594038 atan rotate neg exch
+neg exch translate
+ 942 2303 a 822 2313 a Fw(\000)k(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)h(\000)-18 b Fv(\021)942
+2303 y
+grestore
+ 942 2303 a 853 2397 a
+gsave
+ 853 2397 a 853 2397 a
+currentpoint currentpoint translate -2983488 neg 2797019 atan rotate
+neg exch neg exch translate
+ 853
+2397 a 755 2407 a Fw(\000)f(\000)-9 b(\000)g(\000)g(\000)g(\000)g(\000)
+-17 b Fv(\021)853 2397 y
+grestore
+ 853 2397 a 1030 2397 a
+gsave
+ 1030
+2397 a 1030 2397 a
+currentpoint currentpoint translate -2983488 neg -2797019 atan rotate
+neg exch neg exch translate
+ 1030 2397 a 937 2407 a Fw(\000)c(\000)-9
+b(\000)g(\000)g(\000)g(\000)g(\000)-20 b Fv(\021)1030
+2397 y
+grestore
+ 1030 2397 a 1030 2397 a
+gsave
+ 1030 2397 a 1030 2397
+a
+currentpoint currentpoint translate -2983488 neg -2797019 atan rotate
+neg exch neg exch translate
+ 1030 2397 a 1027 2385 a
+currentpoint currentpoint translate 2983488 neg -2797019 atan rotate
+neg exch neg exch translate
+ 1027 2385 a 28 x FB(R)1059
+2419 y Fu(s)1027 2397 y
+grestore
+ 1027 2397 a 504 2218 a FF([)p
+FB(q)q FF(\()p FB(g)q(;)7 b(b)p FF(\))p FB(;)g(t)p FF(])574
+b FB(q)q FF(\()p FB(g)q(;)7 b(\036)p FF(\()p FB(b;)g(t)p
+FF(\)\))715 2313 y Fw(M)778 2302 y FF(_)765 2313 y FB(R)797
+2319 y Fu(s)1039 2313 y FB(\014)1064 2296 y Fs(\000)p
+Fr(1)1109 2313 y FF(\()p FB(W)1164 2319 y Fu(s)1182 2313
+y FF(\))881 2502 y FB(\014)906 2485 y Fs(\000)p Fr(1)951
+2502 y Fw(h)p FB(s)p Fw(i)735 2596 y FB(q)q FF(\()p FB(g)q(;)g(r)830
+2602 y Fu(s)848 2596 y FF(\()p FB(b)p FF(\)\))k(=)h FB(q)q
+FF(\()p FB(g)q(;)7 b(r)1064 2602 y Fu(s)1082 2596 y FF(\()p
+FB(\036)p FF(\()p FB(b;)g(t)p FF(\)\)\))954 2770 y(68)p
+eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/macros/generic/diagrams/kuvio/kuvio.sty b/macros/generic/diagrams/kuvio/kuvio.sty
new file mode 100644
index 0000000000..f423274704
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/kuvio.sty
@@ -0,0 +1,28 @@
+% kuvio.sty
+% Anders G S Svensson
+% $Date: 1996/01/17 10:06:55 $
+% $Revision: 1.2 $
+
+\def\Revision@$#1 #2 ${v#2}
+\def\Date@$#1 #2 #3 ${#2}
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{kuvio}
+ [\Date@$Date: 1996/01/17 10:06:55 $ \Revision@$Revision: 1.2 $]
+
+\DeclareOption{arrsy}{\AtEndOfPackage{\RequirePackage{arrsy}\arrsy}}
+\DeclareOption{cmarrows}{\PassOptionsToPackage{cmarrows}{arrsy}}
+
+\DeclareOption{autocompile}{\AtEndOfPackage{\autocompile}}
+\DeclareOption{gridlines}{\AtEndOfPackage{\gridlines}}
+\DeclareOption{kuviofmt}{\AtEndOfPackage{\kuviofmt}}
+\DeclareOption{nocompile}{\AtEndOfPackage{\nocompile}}
+\DeclareOption{overgrid}{\AtEndOfPackage{\overgrid}}
+\DeclareOption{recompile}{\AtEndOfPackage{\recompile}}
+\DeclareOption{forcekdg}{\AtEndOfPackage{\forcekdg}}
+\DeclareOption{unforcekdg}{\AtEndOfPackage{\let\forcekdg\relax}}
+\ProcessOptions
+
+\AtBeginDocument{\@ifpackageloaded{amsmath}{\forcekdg}{}}
+
+\input kuvio
diff --git a/macros/generic/diagrams/kuvio/kuvio.tex b/macros/generic/diagrams/kuvio/kuvio.tex
new file mode 100644
index 0000000000..96c7244be3
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/kuvio.tex
@@ -0,0 +1,1891 @@
+% kuvio.tex
+% patchlevel 216
+%
+%%
+%% Copyright (C) 1994-1996 Anders G S Svensson <svensson@math.ubc.ca>
+%%
+%% The file kuvio.tex may be freely distributed and used, with the
+%% following restrictions.
+%%
+%% 1. Substantial use of kuvio.tex in any published work should be suitably
+%% acknowledged.
+%%
+%% 2. No changes or modifications are to be made to kuvio.tex.
+%%
+%% 3. The documentation, "Typesetting diagrams with kuvio.tex", must
+%% be distributed with kuvio.tex.
+%%
+%% I would enjoy receiving a copy of any book, journal article or thesis
+%% prepared using kuvio.tex.
+%%
+%% Thank you.
+%%
+\chardef\kuvioletter=\catcode`\@\catcode`\@=11
+\chardef\K@aa=\catcode`\? \catcode`\?=7
+\gdef\K@ab{\global\let\K@ab\kuviobye}%
+\gdef\kuviobye{\gdef\D@kuviolevel{0}%
+\K@ac\@\kuvioletter\K@ac\?\K@aa
+\K@ac\~\K@ad\K@ac\??Z\K@ae
+\K@ac\??Y\K@af\K@ac\??X\K@ag
+\K@ac\??W\K@ah\K@ac\??V\K@ai
+\K@ac\??U\K@aj\K@ac\??T\K@ak
+\K@ac\??S\K@al\K@ac\??R\K@am
+\K@ac\??Q\K@an\K@ac\??P\K@ao
+\K@ac\??O\K@ap\K@ac\??N\K@aq
+\K@ac\??A\K@ar
+\endinput}%
+\gdef\K@as#1#2{\chardef#2=\catcode`#1 \catcode`#1=14 }%
+\K@as\~\K@ad\K@as\??Z\K@ae
+\K@as\??Y\K@af\K@as\??X\K@ag
+\K@as\??W\K@ah\K@as\??V\K@ai
+\K@as\??U\K@aj\K@as\??T\K@ak
+\K@as\??S\K@al\K@as\??R\K@am
+\K@as\??Q\K@an\K@as\??P\K@ao
+\K@as\??O\K@ap\K@as\??N\K@aq
+\K@as\??A\K@ar
+\ifx\D@kuvioloaded\relax
+\ifcase\D@kuviolevel\relax
+\gdef\K@ab{\message{again}\kuviobye}%
+\or\relax
+\or\catcode`\??Z=9 \or\catcode`\??Y=9 \or\catcode`\??X=9
+\or\catcode`\??W=9 \or\catcode`\??V=9 \or\catcode`\??U=9
+\or\catcode`\??T=9 \or\catcode`\??S=9 \or\catcode`\??R=9
+\or\catcode`\??Q=9 \or\catcode`\??P=9 \or\catcode`\??O=9
+\or\catcode`\??N=9 \or\catcode`\??A=9
+\fi
+\else
+\chardef\K@at=\catcode`\( \chardef\K@au=\catcode`\_
+\chardef\K@av=\catcode`\^ \chardef\K@aw=\catcode`\<
+\chardef\K@ax=\catcode`\> \chardef\K@ay=\catcode`\:
+\chardef\K@az=\catcode`\/ \chardef\K@ba=\catcode`\*
+\chardef\K@bb=\catcode`\| \gdef\D@kuviolevel{1}%
+\catcode`\~=9 \let\D@kuvioloaded\relax\global\let\K@ab\relax
+\fi
+\K@ab
+~\def\kuviocs#1{%
+~{\escapechar=-1
+~\expandafter\ifx\csname D@\string#1@k@D\endcsname\relax
+~\xdef\K@bc{\string#1}\else\xdef\K@bc{D@\string#1@k@D}\fi
+~}\csname\K@bc\endcsname}
+~\def\nonkuviocs#1{%
+~{\escapechar=-1
+~\expandafter\ifx\csname D@\string#1@nk@D\endcsname\relax
+~\xdef\K@bc{\string#1}\else\xdef\K@bc{D@\string#1@nk@D}\fi
+~}\csname\K@bc\endcsname}
+~\def\K@bd#1#2{%
+~{\escapechar=-1
+~\expandafter\ifx\csname\string#2\endcsname\relax
+~\xdef\K@bc{\string#2}\else
+~\aftergroup\K@be\aftergroup#2\xdef\K@bc{D@\string#2@k@D}\fi
+~}\def\K@bf{#1}\expandafter\K@bf\csname\K@bc\endcsname}
+~\def\K@bg{\K@bd\def}
+~\def\K@bh{\K@bd\let}
+~\def\K@bi#1#2{%
+~{\escapechar=-1
+~\expandafter\ifx\csname\string#2\endcsname\relax
+~\else\expandafter\expandafter\expandafter\let\expandafter\expandafter
+~\csname D@\string#2@nk@D\endcsname\csname\string#2\endcsname
+~\aftergroup\K@bj\aftergroup#2\fi
+~\xdef\K@bc{\string#2}%
+~}\def\K@bf{#1}\expandafter\K@bf\csname\K@bc\endcsname}
+~\def\K@bk{\K@bi\def}
+~\def\K@bl{\K@bi\let}
+~\def\K@bm#1#2{%
+~{\escapechar=-1
+~\expandafter\ifx\csname\string#1\endcsname\relax
+~\xdef\K@bc{\string#1}\else
+~\aftergroup\K@be\aftergroup#1\xdef\K@bc{D@\string#1@k@D}\fi
+~\expandafter\ifx\csname D@\string#2@k@D\endcsname\relax
+~\xdef\K@bf{\string#2}\else\xdef\K@bf{D@\string#2@k@D}\fi
+~}\expandafter\expandafter\expandafter\let\expandafter\expandafter
+~\csname\K@bc\endcsname\csname\K@bf\endcsname}
+~\let\kuviodef\K@bg\let\rekuviodef\K@bk
+~\let\kuviolet\K@bh\let\rekuviolet\K@bl
+~\let\kuviodefine\K@bd\let\rekuviodefine\K@bi
+~\def\kuvioforce#1{%
+~{\escapechar=-1
+~\expandafter\ifx\csname D@\string#1@k@D\endcsname\relax
+~\else\xdef\K@bc{\let\noexpand#1\expandafter\noexpand
+~\csname D@\string#1@k@D\endcsname\let\expandafter\noexpand
+~\csname D@\string#1@k@D\endcsname\relax}\aftergroup\K@bc\fi
+~}}
+~\def\K@be#1{\immediate\write16
+~{** \ifnum\D@kuviolevel=1 \else(kuvio.tex) \fi
+~\string#1\K@bn already defined: use \string\kuviocs\string#1}}
+~\def\K@bj#1{\immediate\write16
+~{** \ifnum\D@kuviolevel=1 \else(kuvio.tex) \fi
+~\string#1\K@bn redefined}}
+~\def\K@bn{ }
+~{\newlinechar=`\!\catcode`\ =13 \let \K@bn
+~\immediate\write16{***************************************************
+~!** Diagrams for dvips users **
+~!** patchlevel 216, 19 Feb 1996 **
+~!** Anders G S Svensson <svensson@math.ubc.ca> **
+~!***************************************************}}
+~\def\K@ac#1#2{\catcode`#1=#2\relax}\def\K@bo{\K@bp{2}{rotation}\global\let
+~\K@bo\relax}\def\K@bq{\K@bp{3}{frames and shades}\global\let\K@bq\relax
+~}\def\K@br{\K@bp{4}{figures and graphs}\global\let\K@br\relax}\def\K@bs
+~{\K@bp{5}{shifts}\global\let\K@bs\relax}\def\K@bt{\K@bp{6}{diagrams}\global
+~\let\K@bt\relax}\def\K@bu{\K@bp{7}{kdg files}\global\let\K@bu\relax}\def
+~\K@bv{\K@bp{8}{kuv files}\global\let\K@bv\relax}\def\K@bw{\K@bp
+~{9}{modification cells}\global\let\K@bw\relax}\def\K@bx{\K@bp{10}{text
+~modifications}\global\let\K@bx\relax}\def\K@by{\K@bp
+~{11}{modifications}\global\let\K@by\relax}\def\K@bz{\K@bp{12}{rotated
+~labels}\global\let\K@bz\relax}\def\K@ca{\K@bp{13}{points}\global\let\K@ca
+~\relax}\def\K@cb{\K@bp{14}{box and frame modifications}\global\let\K@cb
+~\relax}\def\K@cc{\K@bp{15}{dots}\global\let\K@cc\relax}\def\K@bp#1#2{\gdef
+~\D@kuviolevel{#1}\gdef\K@cd{\message{#2}}\input kuvio.tex\relax}\def
+~\kuviofmt{\xdef\K@bc{\everyjob={\the\everyjob\message{** kuvio.tex (p216)
+~Anders G S Svensson **}}}\K@bc\K@bo\K@bq\K@br\K@bs\K@bt\K@bu\K@bv\K@bw
+~\K@bx\K@by\K@bz\K@ca\K@cb\K@cc\let\kuviofmt\relax}\def\K@ce{\K@cd\catcode
+~`\(=\K@at\catcode`\_=\K@au\catcode`\^=\K@av\catcode`\<=\K@aw\catcode
+~`\>=\K@ax\catcode`\:=\K@ay\catcode`\/=\K@az\catcode`\*=\K@ba\catcode
+~`\|=\K@bb\let\K@cf\let\def\let{\global\K@cf}\K@cf\def\gdef}\K@bk
+~\dvipsspecial#1{\special{ps:#1}}\def\kuviospecial{\let\K@cg}\kuviospecial
+~\dvipsspecial\def\kuvio{{\tt kuvio.tex}}\def\kuviopatchlevel{216}\def
+~\kuviodate{19 Feb 1996}\newhelp\K@ch{Expect chaos to ensue.}\def
+~\kuviorequire#1{\relax\ifnum#1>\kuviopatchlevel\relax\errhelp=\K@ch
+~\errmessage{Hmm. Looks like I'll need a newer patchlevel of kuvio.tex.}\fi
+~}\def\K@ci{}\def\K@cj#1{}\def\K@ck#1#2{}\def\K@cl{{}}\def\K@cm{0}\def\K@cn
+~{.5}\def\K@co{1}\def\K@cp{-1}\def\K@cq#1#2{#1#2}\def\K@cr#1#2{#2#1}\def
+~\K@cs#1#2{{#2}{#1}}\def\K@ct#1#2{\let\K@bf#1\let#1#2\let#2\K@bf}\def\K@cu
+~#1\K@cv{\def\K@cw{#1}\K@cx}\def\K@cx{\K@cw\let\K@cy\K@cx\else\let\K@cy
+~\relax\fi\K@cy}\let\K@cv\fi\newif\ifkuvio@\def\K@cz{\relax\kuvio@false
+~}\newwrite\K@da\newwrite\K@db\newread\K@dc\newread\K@dd\newcount\K@de
+~\newcount\K@df\newcount\K@dg\newcount\K@dh\newcount\K@di\newcount\K@dj
+~\newcount\K@dk\newcount\K@dl\newdimen\K@dm\newdimen\K@dn\newdimen\K@do
+~\newdimen\K@dp\newtoks\K@dq\newtoks\K@dr\newbox\K@ds\newbox\K@dt
+~\newbox\K@du
+??V\begingroup\K@ce\def\K@dv#1{\bgroup\K@dw\K@dx{\K@dy\K@dr}{\the\K@dr}\def
+??V\K@dz{\egroup\egroup\egroup\K@ea}\def\Modify{\egroup\egroup\egroup\K@by
+??V\K@eb}\let\K@ec\relax\let\K@ed\relax\let\K@ee\relax\K@ef\setbox\K@du
+??V=\hbox\bgroup\vbox\bgroup\halign\bgroup&\K@eg\K@eh{##}\cr}\def\endDiagram
+??V{\K@dz\egroup}%
+~\def\K@ei{\K@dv}\K@bk\Diagram{\bgroup\K@bt\K@ej\K@ek\K@el\everyDiagram
+~\K@ei{Diagram}}\K@bl\everyDiagram\relax
+??V\def\K@ea{\K@em\global\setbox\K@ds=\hbox{\hbox to \K@en sp{\hfil\vbox to
+??V\K@eo sp{\vfil}}\K@ep\K@eq\K@er}\K@dx{}{{}{1}{\gdef\noexpand\K@es{\K@es
+??V}\gdef\noexpand\K@et{\K@et}\gdef\noexpand\K@eu{\K@eu}\gdef\noexpand\K@ev
+??V{\K@ev}}}\K@ew\K@ex\K@ey\egroup\Displaybox\K@ds}%
+~\let\K@ew\relax\let\K@dw\relax\let\K@dx\K@ck\K@bg\compileto{\bgroup\K@ez
+~\K@fa}\def\K@fa#1{\egroup\def\K@ej{\K@fb{#1}\global\let\K@ej\relax\let
+~\K@ek\relax}}\def\K@ez{\catcode`\ =9 \catcode`\??I=9 }\K@bg\recompileto
+~{\bgroup\K@ez\K@fc}\def\K@fc#1{\egroup\def\K@ej{\K@fd{#1}\global\let\K@ej
+~\relax\let\K@ek\relax}}\K@bg\recompile{\let\K@fb\K@fd}\K@bg\nocompile{\let
+~\K@fe\K@ck}\K@bg\forcekdg{\def\K@el{\def\K@ei{\K@ff}\def\K@fg{\K@fh}\def
+~\K@fi{\K@fj}\K@bu}}\let\K@el\relax\def\K@fb#1{\K@fe0{#1}}\def\K@fd#1{\K@fe
+~1{#1}}\K@bg\autocompileto{\bgroup\K@ez\K@fk}\def\K@fk#1{\egroup\K@fl
+~\autocompilecounter\def\K@ek{\global\advance\autocompilecounter by 1 \K@fb
+~{#1-\the\autocompilecounter}}}\K@bg\autocompile{\kuviocs\autocompileto
+~{.\jobname}}\let\K@ej\relax\let\K@ek\relax\edef\K@fl#1{\noexpand\newcount
+~#1\gdef\noexpand\K@fl##1{\global##1=0 }}\def\K@fe#1#2{\let\K@el\relax\gdef
+~\K@fm{#2}\ifcase#1 \immediate\openin\K@dc=#2.kuv \def\K@fn{\K@fd{#2}}\ifeof
+~\K@dc\immediate\closein\K@dc\def\K@bc{\K@fd{#2}}\else\def\K@dw{\K@fo
+~{reading #2.kuv}}\def\K@ei{\K@fp}\def\K@fg{\K@fq}\def\K@fi{\K@fr}\let\K@bc
+~\K@bv\fi\or\immediate\openout\K@da=#2.kuv \let\K@dx\K@fs\def\K@dw{\K@fo
+~{compiling #2.kuv}}\def\K@ei{\K@ff}\def\K@fg{\K@fh}\def\K@fi{\K@fj}\let
+~\K@bc\K@bu\let\K@ew\K@ft\fi\K@bc}\def\K@fm{\jobname}\def\K@fs
+~#1#2{{#1\immediate\write\K@da{#2}}}\def\K@ft{\immediate\closeout\K@da\K@fu
+~{done}}\def\K@fo#1{\message{(#1}}\def\K@fu#1{\message{#1)}}
+??U\begingroup\K@ce\def\K@ff{\K@fv\K@dv}\def\K@fh{\K@fv\K@fw}\def\K@fv
+??U#1#2{\let\K@fo\message\let\K@fu\message\def\K@fx{\K@fy{\relax
+??U}\expandafter\def\csname#2\endcsname{#1{}}\input\K@fm.kdg \K@fy
+??U{}}\expandafter\expandafter\expandafter\K@fz\expandafter\expandafter
+??U\csname#2\endcsname\csname end#2\endcsname\K@fx}%
+~\def\K@ga#1#2#3#4{\def\K@bc##1#3{\def\K@gb{#1#2##1#3}\gdef\K@fy####1{\K@gc
+~{#1#2##1#3####1}}#4}\K@bc}\def\K@fz{\K@ga{}}\def\K@gd{\K@ga{\relax}}\def
+~\K@ge{\K@ga{\relax\relax}}\def\K@gc#1{\immediate\openout\K@db=\K@fm.kdg
+~\K@dr={#1}\immediate\write\K@db{\the\K@dr}\immediate\closeout\K@db}%
+??U\def\K@fj#1{\let\K@fo\message\let\K@fu\message\expandafter\expandafter
+??U\expandafter\K@gf\expandafter\expandafter\csname#1\endcsname\csname
+??Uend#1\endcsname{\K@gg{#1}}}%
+~\let\K@gf\K@fz
+??U\def\K@gg#1{\expandafter\expandafter\expandafter\K@gh\expandafter
+??U\expandafter\csname end#1\endcsname\K@gb\Modify\K@gi\expandafter\def
+??U\csname#1\endcsname{\K@gj{}}\K@fy{\relax}\input\K@fm.kdg \K@fy{}}\endgroup
+~\def\K@gk#1#2#3#4#5\Modify#6\K@gi{\def\K@gl{#6}\ifx\K@gl\K@ci\def\K@bc
+~##1#1{\def\K@gm####1{####1={\vbox {\offinterlineskip\hbox{$##1$}\null
+~}}}}\K@bc#5\else\def\K@gm##1{##1={\vbox {\offinterlineskip\hbox
+~{$#5$}\null}}}\fi}\let\K@gn\K@gk\def\K@go{\K@gk{}}\def\K@gh{\K@gk{}{}}%
+??T\begingroup\K@ce\def\K@fp{\K@gp\K@gq\K@ff\K@dv}\def\K@fq{\K@gp\K@gr\K@fh
+??T\K@fw}\def\K@fr{\let\K@gs\K@gt\K@gp\K@gu\K@fj\K@gj}\def\K@gp
+??T#1#2#3{\immediate\read\K@dc to\K@bf\ifx\K@bf\K@gv\def\K@bc{\K@gs
+??T#1#3}\else\def\K@bc{\immediate\closein\K@dc\K@fn#2}\fi\K@bc}%
+~\def\kuviorevision#1{\def\K@dy##1{##1={{kuvio}{216}{#1}}}\def\K@gv
+~{{kuvio}{216}{#1} }}\kuviorevision{}
+??T\def\K@gs#1#2#3{\def\K@fx{\K@gw#1#2{#3}}\expandafter\expandafter
+??T\expandafter\K@fz\expandafter\expandafter\csname#3\endcsname\csname
+??Tend#3\endcsname\K@fx}\def\K@gw#1#2#3{\def\K@bc{\K@fy{\relax}\expandafter
+??T\def\csname#3\endcsname{\K@fn#2{}}\input\K@fm.kdg \K@fy{}}\immediate\openin
+??T\K@dd=\K@fm.kdg \ifeof\K@dd\immediate\closein\K@dd\immediate\closein\K@dc
+??T\let\K@fo\message\let\K@fu\message\else\immediate\read\K@dd to \K@bf
+??T\immediate\closein\K@dd\ifx\K@bf\K@gb\let\K@bc#1\else\immediate\closein
+??T\K@dc\let\K@fo\message\let\K@fu\message\fi\fi\K@bc}\def\K@gt#1#2#3{\def
+??T\K@fx{\expandafter\expandafter\expandafter\K@gh\expandafter\expandafter
+??T\csname end#3\endcsname\K@gb\Modify\K@gi\K@gw#1#2{#3}}\expandafter
+??T\expandafter\expandafter\K@gf\expandafter\expandafter\csname#3\endcsname
+??T\csname end#3\endcsname\K@fx}\def\K@gq{\K@dw\def\K@gx{\K@gy\K@gz\let\gr
+??T\K@ha}\K@hb\K@hc\K@hd\K@he\K@hf\let\stop\relax\let\grav\relax\let\base
+??T\relax\K@hg\K@hh\K@hi\catcode`\@=11 \immediate\read\K@dc to\K@bf
+??T\expandafter\K@hj\K@bf\K@fu{done}\K@ex\K@ey\egroup\Displaybox\K@ds}\def
+??T\K@gr{\let\K@hk\K@hl\let\K@hm\K@hj\K@gu}\def\K@hj#1#2#3#4#5 {\def\K@en
+??T{#1}\def\K@hn{#5}\def\K@ho{#3}\def\K@hp{#4}\global\setbox\K@ds=\hbox{\hbox
+??Tto #1sp{\hfil\vbox to #2sp{\vfil}}\K@hq}}\def\K@gu{\K@dw\def\K@gx{\let\gr
+??T\K@ha}\catcode`\@=11 \immediate\read\K@dc to\K@bf\expandafter\K@hm\K@bf
+??T\K@fu{done}\K@ex\K@hr\egroup\Displaybox\K@ds}\def\K@hm#1#2#3#4 {\def\K@en
+??T{#1}\def\K@hp{#4}\global\setbox\K@ds=\hbox{\hbox to #1sp{\hfil\vbox to
+??T#2sp{\vfil}}\K@hq}}\def\K@hq{\immediate\read\K@dc to\K@bf\ifeof\K@dc\def
+??T\K@bc{\immediate\closein\K@dc}\else\def\K@bc{\expandafter\K@hs\K@bf\K@hq
+??T}\fi\K@bc}\def\K@hs#1#2#3 {\def\K@bf{#1}\ifx\K@bf\K@ci\def\K@bc
+??T##1{{##1\ifnum#2=0 \immediate\read\K@dc to\K@bf\expandafter\K@ht\K@bf\fi
+??T}}\else\def\K@bc{\K@hu{#1}{#2}}\fi\K@bc{#3}}\def\K@ht#1#2#3 {\K@hu
+??T{#1}{#2}{#3}}\def\K@hu#1#2#3{\llap{\hbox to \K@en sp{\hskip#1 \smash{\hbox
+??T{\raise#2\hbox{\K@hv#3}}}\hss}}}\endgroup
+~\K@bk\newDiagram{\bgroup\K@ez\K@hw}\def\K@hw#1{\egroup\expandafter\ifx
+~\csname D@every#1@\endcsname\relax\expandafter\expandafter\expandafter\let
+~\expandafter\expandafter\csname D@@#1@@\endcsname\csname#1\endcsname
+~\expandafter\def\csname D@every#1@\endcsname{\expandafter\expandafter
+~\expandafter\let\expandafter\expandafter\csname#1\endcsname\csname
+~D@@#1@@\endcsname}\fi\expandafter\K@bk\csname#1\endcsname{\bgroup\K@bt
+~\csname D@every#1@\endcsname\K@ej\K@ek\K@el\everyDiagram\csname
+~every#1\endcsname\K@ei{#1}}\expandafter\K@bk\csname end#1\endcsname{\K@dz
+~\egroup}\expandafter\let\csname every#1\endcsname\relax}
+??V\def\K@ef{\K@df=-1\relax\K@de=-1\relax\let\K@hx\K@cp\everycr{\noalign
+??V{\global\advance\K@df by 1\relax\ifnum\K@hx<\K@de\xdef\K@hx{\the\K@de}\fi
+??V\global\K@de=-1}}\global\K@dg=0 \global\K@dh=0 \let\K@hy\K@ci\let\K@hz
+??V\K@ci\let\K@ia\K@ci\let\K@ib\K@ci\let\K@ic\K@ci\let\K@id\K@ci\let\K@ie
+??V\K@ci\let\K@if\K@ci\let\K@ig\K@ci\let\K@ih\K@ci\let\K@ii\K@ci\global
+??V\let\K@ij\relax\global\let\K@hn\K@cp\global\let\K@ik\K@ci\K@il\let\\\cr
+??V\let\K@es\K@cp\let\K@et\K@cp\let\K@eu\K@cm\let\K@ev\K@cm\let\K@im\K@cm
+??V\let\K@in\K@ci\K@hg\K@hd\K@he\K@hb\K@gy\let\gr\K@ha}%
+~\def\K@hb{\let\K@io(\let\K@ip\(\catcode`\(=\active\let\K@iq_\let\K@ir
+~\_\catcode`\_=\active\let\K@is^\let\K@it\^\catcode`\^=\active\let\K@iu
+~<\let\K@iv\<\catcode`\<=\active\let\K@iw>\let\K@ix\>\catcode`\>=\active
+~\let\K@iy:\let\K@iz\:\catcode`\:=\active}{\catcode`\(=\active\catcode
+~`\_=\active\catcode`\^=\active\catcode`\<=\active\catcode`\>=\active
+~\catcode`\:=\active\gdef\K@ja{\let(\K@jb\let<\K@jc\let>\K@jd\let_\K@je
+~\let^\K@jf\let:\K@jg\let\((\let\__\let\^^\let\<<\let\>>\let\::} \gdef
+~\K@gy{\let(\K@io\let\(\K@ip\let_\K@iq\let\_\K@ir\let^\K@is\let\^\K@it
+~\let<\K@iu\let\<\K@iv\let>\K@iw\let\>\K@ix\let:\K@iy\let\:\K@iz} \gdef
+~\K@hc{\def(##1,##2){}\let_\K@jh\let^\K@jh\let<\K@jh\let>\K@jh\let:\K@cj
+~\let\((\let\__\let\^^\let\<<\let\>>\let\::} \gdef\K@ji{\let(\K@jj\let
+~_\K@jk\let^\K@jl\let<\K@jm\let>\K@jn\let:\K@jo} }\def\K@jj{(}\def\K@jk
+~{_}\def\K@jl{^}\def\K@jm{<}\def\K@jn{>}\def\K@jo{:}\def\K@jh{\def\K@jp
+~##1{\K@cj}\let\K@jq\K@cj\futurelet\K@jr\K@js}\def\K@hg{\let\K@jt\dh\let
+~\K@ju\dt\let\K@jv\up\let\K@jw\rt\let\K@jx\mv\let\K@jy\nl\let\K@jz\ru
+~\let\K@ka\rr\let\K@kb\rm\let\K@kc\ro\let\K@kd\pt\let\K@ke\fd\let\K@kf
+~\rl\let\K@kg\br\let\K@kh\pp\let\K@ki\jt\let\K@kj\jh\let\K@kk\jn\let
+~\K@kl\rw\let\K@km\hx\let\K@kn\hy\let\K@ko\tx\let\K@kp\ty\let\K@kq\fx
+~\let\K@kr\fy\let\K@ks\ts\let\K@kt\hs\let\K@ku\fs\let\K@kv\tr\let\K@kw
+~\hr\let\K@kx\fr\let\K@ky\db\let\K@kz\lb\let\K@la\rb\let\K@lb\nw\let
+~\K@lc\tl\let\K@ld\hd\let\K@le\pl\let\K@lf\pd\let\K@lg\lw}\def\K@lh{\let
+~\dh\K@li\let\dt\K@lj\let\up\K@lk\let\rt\K@ll\let\mv\K@lm\let\nl\K@ln
+~\let\ru\K@lo\let\rr\K@lp\let\rm\K@lq\let\ro\K@lr\let\pt\K@ls\let\fd
+~\K@lt\let\rl\K@lu\let\br\K@lv\let\pp\K@lw\let\jt\K@lx\let\jh\K@ly\let
+~\jn\K@lz\let\rw\K@ma\let\K@mb\K@mc\let\K@md\K@me\let\hx\K@mf\let\hy
+~\K@mg\let\tx\K@mh\let\ty\K@mi\let\fx\K@mj\let\fy\K@mk\let\ts\K@ml\let
+~\hs\K@mm\let\fs\K@mn\let\tr\K@mo\let\hr\K@mp\let\fr\K@mq\let\db\K@mr
+~\let\lb\K@ms\let\rb\K@mt\let\nw\K@mu\let\lw\K@mv}\def\K@gz{\let\dh\K@jt
+~\let\dt\K@ju\let\up\K@jv\let\rt\K@jw\let\mv\K@jx\let\nl\K@jy\let\ru
+~\K@jz\let\rr\K@ka\let\rm\K@kb\let\ro\K@kc\let\pt\K@kd\let\fd\K@ke\let
+~\rl\K@kf\let\br\K@kg\let\pp\K@kh\let\jt\K@ki\let\jh\K@kj\let\jn\K@kk
+~\let\rw\K@kl\let\K@mb\K@kl\let\K@md\K@kl\let\hx\K@km\let\hy\K@kn\let
+~\tx\K@ko\let\ty\K@kp\let\fx\K@kq\let\fy\K@kr\let\ts\K@ks\let\hs\K@kt
+~\let\fs\K@ku\let\tr\K@kv\let\hr\K@kw\let\fr\K@kx\let\db\K@ky\let\lb
+~\K@kz\let\rb\K@la\let\nw\K@lb\let\tl\K@lc\let\hd\K@ld\let\pl\K@le\let
+~\pd\K@lf\let\lw\K@lg}\def\K@hh{\let\dh\K@cj\let\dt\K@cj\let\up\K@cj\let
+~\rt\K@cj\let\mv\K@cj\let\nl\relax\let\ru\K@cj\let\rr\K@cj\let\rm\K@cj
+~\let\ro\relax\let\pt\K@cj\let\fd\K@cj\let\rl\relax\let\br\relax\let\pp
+~\relax\let\jt\relax\let\jh\relax\let\jn\relax\let\rw\K@cj\let\K@mb
+~\K@cj\let\K@md\K@cj\let\hx\K@cj\let\hy\K@cj\let\tx\K@cj\let\ty\K@cj
+~\let\fx\K@cj\let\fy\K@cj\let\ts\K@cj\let\hs\K@cj\let\fs\K@cj\let\tr
+~\K@cj\let\hr\K@cj\let\fr\K@cj\let\db\relax\let\lb\relax\let\rb\relax
+~\let\nw\relax\let\lw\K@jh}
+??V\def\K@mw#1{\xdef\K@hy{\K@hy{\the\K@de}{#1}}}\def\K@mx#1{\relax\K@di=\K@df
+??V\multiply\K@di by -1 \advance\K@di by \K@ho\xdef\K@hz{{\the\K@di}{#1}\K@hz
+??V}}\def\K@my#1{\xdef\K@ia{\K@ia{\the\K@de}{#1}}}\def\K@mz#1{\relax\K@di
+??V=\K@df\multiply\K@di by -1 \advance\K@di by \K@ho\xdef\K@ib{{\the\K@di
+??V}{#1}\K@ib}}\def\K@na#1{\xdef\K@ic{\K@ic{\the\K@de}{#1}}}\def\K@nb{\xdef
+??V\K@id{\K@id{\the\K@df}{\the\K@de}}}\def\K@nc{\xdef\K@ie{\K@ie{\the\K@df
+??V}{\the\K@de}}}\def\K@nd{\xdef\K@if{\K@if{\the\K@df}{\the\K@de}}}\def\K@ne
+??V{\xdef\K@ig{\K@ig{\the\K@df}{\the\K@de}}}\def\K@nf{\xdef\K@ih{\K@ih{\the
+??V\K@df}{\the\K@de}}}\def\K@ng{\xdef\K@ii{\K@ii{\the\K@df}{\the\K@de}}}\def
+??V\K@nh{\global\let\K@ni\K@co}\def\K@nj{\xdef\K@ij{\the\K@de}}\def\K@nk{\xdef
+??V\K@hn{\the\K@df}}\def\K@nl{\def\grav{\relax\K@nj}\def\base{\relax\K@nk
+??V}}\def\K@nm{\let\K@nj\relax\let\K@nk\relax}\def\K@hd{\let\K@nn\stop\let
+??V\K@no\grav\let\K@np\base\let\K@nq\safe\let\K@nr\nodot\let\K@ns\dx\let
+??V\K@nt\dy\let\K@nu\dl\let\K@nv\dr\let\K@nw\mx\let\K@nx\my\let\K@ny\ml
+??V\let\K@nz\mr\let\K@oa\ax\let\K@ob\al\let\K@oc\ar}\def\K@he{\K@nl\def
+??V\stop{\relax\K@nh}\def\safe{\relax\K@od}\def\nodot{\relax\K@oe}\def\dl
+??V{\relax\K@nb}\def\dr{\relax\K@nc}\def\ml{\relax\K@nd}\def\mr{\relax\K@ne
+??V}\def\al{\relax\K@nf}\def\ar{\relax\K@ng}\def\mx{\relax\K@my}\def\my
+??V{\relax\K@mz}\def\dx{\relax\K@mw}\def\dy{\relax\K@mx}\def\ax{\relax\K@na
+??V}}\def\K@hf{\let\K@nb\relax\let\K@nc\relax\let\K@nd\relax\let\K@ne
+??V\relax\let\K@nf\relax\let\K@ng\relax\let\K@my\K@cj\let\K@mz\K@cj\let
+??V\K@mw\K@cj\let\K@mx\K@cj\let\K@na\K@cj}\def\K@of{\let\stop\K@nn\let\grav
+??V\K@no\let\base\K@np\let\safe\K@nq\let\nodot\K@nr\let\dx\K@ns\let\dy
+??V\K@nt\let\dl\K@nu\let\dr\K@nv\let\mx\K@nw\let\my\K@nx\let\ml\K@ny\let
+??V\mr\K@nz\let\ax\K@oa\let\al\K@ob\let\ar\K@oc}\def\K@od#1{{\K@of#1}}%
+~\def\K@jb#1,#2){\gdef\K@og{#1@#2}}\def\K@jc{\K@oh0}\def\K@jd{\K@oh1}\def
+~\K@je{\K@oh2}\def\K@jf{\K@oh3}\def\K@oh#1{\def\K@jp##1{\let\K@oi\K@cl\let
+~\K@oj\K@cl\let\K@ok\K@cl\K@ol##1;@\K@oi\K@oj\K@ok\edef\K@bc{\noexpand
+~\K@om {#1{\K@oi}{\K@oj}{\K@ok}}}\K@bc} \def\K@jq{\K@om{#1}}\futurelet\K@jr
+~\K@js}\def\K@om#1#2{\K@dr={#1@#2}\K@on}\def\K@oo#1#2{\K@dr={#1@#2}\def\K@bc
+~{\K@op#1{{}}@{#2}\K@on}\ifnum\K@oq=1\relax\else\ifnum\K@oq=5\relax\else
+~\let\K@bc\K@on\fi\fi\K@bc}\def\K@op#1#2#3@#4{\setbox\K@dt\hbox{$\K@gx
+~\labelstyle\hskip\K@or sp\hskip\K@os{\K@ot}{}sp \hskip\K@ou sp \hskip\K@ov
+~{\K@ot}{}sp \hskip\K@ow#4\hskip\K@ow\hskip\K@os{\K@ot}{}sp\hskip\K@or sp
+~\hskip\K@ov{\K@ot}{}sp \hskip\K@ou sp$}\K@di=\wd\K@dt\xdef\K@ox{\K@ox
+~{#2}{\the\K@di}}}\def\K@oy#1{\if\noexpand\K@jr\noexpand#1\let\K@bc\K@oz
+~\else\if\noexpand\K@jr\K@bn\def\K@bc{\K@pa\futurelet\K@jr\K@js @}\else
+~\let\K@bc\K@jq\fi\fi\K@bc}\def\OptDelim#1#2{\def\K@oz#1##1#2{\K@jp
+~{##1}}\def\K@js{\K@oy{#1}}}\OptDelim[] \def\K@on{\edef\K@bc{\global\K@dq
+~={\the\K@dq{\the\K@dr}}}\K@bc}\def\K@jg#1{\K@ol#1;@\K@pb\K@pc\K@pd}\def
+~\K@ol#1;#2@#3#4#5{\def\K@bf{#2}\ifx\K@bf\K@ci\let\K@pe\K@pf\K@pg
+~#1;@#3#4#5\else\let\K@ph\K@pi\let\K@pj\K@pk\K@pl#1;#2@#3#4#5\fi}\def
+~\K@pg#1;#2@#3#4#5{\def\K@bf{#2}\ifx\K@bf\K@ci\def\K@bf{#1,;}\else\edef
+~\K@bf{#1,#2}\fi\expandafter\K@pe\K@bf @#3#4#5}\def\K@pf
+~#1,#2;@#3#4#5{\setbox\K@du=\hbox{\K@do=#1pt}\def\K@bf{#2} \ifdim\wd\K@du
+~>\z@\ifx\K@bf\K@ci\K@pm#1@#5\else\setbox\K@du=\hbox{\K@do=#2pt}\ifdim\wd
+~\K@du>\z@\K@pm#1@#4\K@pm\K@pn#2@#5\else\K@pm#1@#5\xdef#3{\K@pn#2}\fi\fi
+~\else\gdef#3{#1}\ifx\K@bf\K@ci\else\K@pm\K@pn#2@#5\fi\fi}\def\K@pn
+~#1,{#1}\def\K@po#1;{#1}\def\K@pl#1;#2@#3#4#5{\K@pp#1,@#3#4#5\def\K@bf
+~{#2}\ifx\K@bf\K@ci\else\edef\K@bf{\K@po#2}\expandafter\K@pp\K@bf
+~,@#3#4#5\fi}\def\K@pp#1,#2@#3#4#5{\def\K@bf{#2}\ifx\K@bf\K@ci\K@ph
+~#1@#3#5\else\K@pj#1,#2@#4#5\fi}\def\K@pi#1@#2#3{\setbox\K@du=\hbox{\K@do
+~=#1pt}\ifdim\wd\K@du>\z@\K@pm#1@#3\else\gdef#2{#1}\fi}\def\K@pk
+~#1,#2,@#3#4{\K@pm#1@#3\K@pm#2@#4}\def\K@pm#1@#2{\K@do=#1 \K@di=\K@do\xdef
+~#2{\the\K@di}}\let\K@hp\K@cm\def\K@pq#1{\bgroup\edef\endgr{\noexpand\K@pr
+~{\K@hp}\egroup}\K@ps{#1}\K@hp\edef\K@bc{\noexpand\K@pr{\K@hp}}\K@bc}\def
+~\K@ha{\relax\K@pq}\def\K@pt#1{\K@ps{#1}\K@pu\global\let\K@pu\K@pu}\let\gr
+~\K@ha\def\K@ps#1#2{\K@do=1sp \K@do=#1\K@do\ifdim\K@do>1sp \else\ifdim
+~\K@do<\z@\else\def#2{#1}\fi\fi}\def\gray{\gr\K@pv}\let\grey\gray\def
+~\endgray{\endgr}\let\endgrey\endgray\def\white{\gr1}\let\endwhite\endgray
+~\def\black{\gr0}\let\endblack\endgray\def\K@li#1{\let\K@ph\K@pw\let\K@pj
+~\K@px\K@pl#1;@\K@py\K@pz\K@qa}\def\K@mf#1{\gdef\K@pz{#1}}\def\K@mg#1{\K@do
+~=#1 \K@di=\K@do\xdef\K@qa{\the\K@di}}\def\K@lj#1{\let\K@ph\K@pw\let\K@pj
+~\K@px\K@pl#1;@\K@qb\K@qc\K@qd}\def\K@mh#1{\gdef\K@qc{#1}}\def\K@mi#1{\K@do
+~=#1 \K@di=\K@do\xdef\K@qd{\the\K@di}}\def\K@lt#1{\K@li{#1}\K@lj{#1}}\def
+~\K@mj#1{\K@mh{#1}\K@mf{#1}}\def\K@mk#1{\K@mi{#1}\K@mg{#1}}\def\K@ml#1{\gdef
+~\K@qe{#1}}\def\K@mm#1{\gdef\K@qf{#1}}\def\K@mn#1{\K@ml{#1}\K@mm{#1}}\def
+~\K@mo#1{\K@do=#1 \K@di=\K@do\xdef\K@qg{\the\K@di}}\def\K@mp#1{\K@do=#1
+~\K@di=\K@do\xdef\K@qh{\the\K@di}}\def\K@mq#1{\K@mo{#1}\K@mp{#1}}\def\K@px
+~#1,#2@#3#4{\K@do=#2 \K@di=\K@do\xdef#4{\the\K@di}\gdef#3{#1}}\def\K@lk
+~#1{\K@do=#1 \K@di=\K@do\xdef\K@qi{\the\K@di}}\def\K@ll#1{\K@do=#1 \K@di
+~=\K@do\xdef\K@qj{\the\K@di}}\def\K@lm#1{\K@qk#1@}\def\K@qk#1,#2@{\K@ll
+~{#1}\K@lk{#2}}\def\K@lo#1{\K@do=#1 \K@di=\K@do\xdef\K@ql{\the\K@di}}\def
+~\K@lp#1{\K@do=#1 \K@di=\K@do\xdef\K@qm{\the\K@di}}\def\K@lq#1{\K@qn#1@}\def
+~\K@qn#1,#2@{\K@lp{#1}\K@lo{#2}}\def\K@mv{\let\K@jp\K@qo\def\K@jq{\global
+~\let\K@qp\K@ci}\futurelet\K@jr\K@qq}\let\K@qr\relax\K@bg\kuvioldlabels
+~{\K@cz\let\K@qr\K@ci}\def\K@qo#1{\egroup\K@do=#1 \gdef\K@ow{#1}}\def\K@ln
+~{\global\let\K@qs\K@ci}\def\K@lr{\global\let\K@qt\K@cl}\def\K@mr{\global
+~\let\K@qu\K@qv}\def\K@ms{\gdef\K@qu{2}}\def\K@mt{\gdef\K@qu{3}}\let\K@qw
+~\K@cm\let\K@qv\K@co\def\braced{\K@cz\let\K@qw\K@co\let\K@qv\K@cm}\def
+~\loose{\K@cz\let\K@qw\K@cm\let\K@qv\K@co\columndist=0pt}\def\K@mu{\global
+~\let\K@qx\K@ci}\def\K@ma#1{\K@do=#1 \K@di=\K@do\divide\K@di by 2 \xdef\K@qy
+~{=\the\K@di}\def\K@qz{\egroup\K@cj}}\def\K@mc#1{\K@do=#1 \global\K@dr
+~={{#1}}}\def\K@me#1{\K@do=#1 \gdef\K@ra{#1}}\def\K@qz#1{\egroup\K@do=#1
+~\K@di=\K@do\xdef\K@qy{\the\K@di}}\def\K@lu{\global\let\K@rb\K@ci\global\let
+~\K@rc\K@ci\let\K@jp\K@qz\let\K@jq\relax\futurelet\K@jr\K@qq}\def\K@lv
+~{\global\let\K@rc\K@ci\let\K@jp\K@qz\let\K@jq\relax\futurelet\K@jr\K@qq
+~}\def\K@lw{\global\let\K@rd\K@ci}\def\K@lx{\global\let\K@re\K@cl}\def\K@ly
+~{\global\let\K@rf\K@cl}\def\K@lz{\K@lx\K@ly}\let\K@rg\K@cl\def\joined
+~{\K@cz\let\K@rg\K@ci}\def\K@ls#1{\K@ca\K@rh#1,@}\def\K@ri#1{\K@ca\K@rj#1,@}
+??O\begingroup\K@ce\def\K@rh#1,#2@{{\K@ji\K@ed\def\K@bf{#2}\ifx\K@bf\K@ci
+??O\K@rk#1@,@\else\K@rk#1@#2@\fi }}\def\K@rk#1@#2,@{\xdef\K@in{{#1}\K@in
+??O}\xdef\K@rl{{#1@#2}\K@rl}}\def\K@rj#1,#2@{{\K@ji\K@ed\def\K@bf{#2}\ifx
+??O\K@bf\K@ci\ifx\K@in\K@ci\K@rk#1@,@\else\ifx\K@rm\K@ci\edef\K@gl
+??O{#1}\K@dr={\K@rn {\csname D@pt@#1@x\endcsname}{\csname D@pt@#1@y\endcsname
+??O}{\csname D@pt@#1@type\endcsname}}\expandafter\K@ro\K@in{}\ifx\K@gl\relax
+??O\else\K@rk#1@,@\fi\else\K@rk#1@,@\fi\fi\else\K@rk#1@#2@\fi }}\def
+??O\K@ro#1#2{\def\K@bf{#1}\ifx\K@bf\K@gl\the\K@dr\K@dr={}\let\K@gl\relax\fi
+??O\def\K@bf{#2}\ifx\K@bf\K@ci\let\K@bc\relax\else\def\K@bc{\K@ro{#2}}\fi
+??O\K@bc}\def\K@rn#1#2#3{\ifx\K@rp\K@ci\xdef\K@rp{#1,#2}\expandafter\ifx
+??O#3\relax\else\xdef\K@rq{\K@rr{#3}{}}\fi\else\xdef\K@rm
+??O{#1,#2}\expandafter\ifx#3\relax\else\xdef\K@rs{\K@rr{#3}{}}\fi\fi}%
+~\def\K@pr#1{\K@cg{#1 setgray}}\def\K@pw#1@#2#3{\K@do=#1 \K@di=-\K@do\xdef
+~#2{\the\K@di}}
+??V\def\K@eg{\global\advance\K@de by 1\relax\global\let\K@ni\K@cm\let\K@rt
+??V\K@ru}\def\K@eh#1{\K@dr={#1}\edef\K@bc{\gdef\expandafter\noexpand\csname
+??VD@Entry@\the\K@dh @\endcsname{\noexpand\D@\the\K@df @\the\K@de @\the\K@dr
+??V@}}\K@bc\global\advance\K@dh by 1\relax\setbox\K@du=\hbox{\K@hi\K@hf
+??V\K@hc\K@hh\let\gr\K@cj\let\endgr\relax\global\setbox\K@dt=\hbox\bgroup
+??V\K@rv$\vertexstyle\K@gx#1\K@rw}}\def\K@rw{\K@rt\K@di=\wd\K@dt\K@dj=\ht
+??V\K@dt\K@dk=\dp\K@dt {\count8=\K@di\advance\count8 by \K@dj\advance\count8
+??Vby \K@dk\relax\ifnum\count8>0 \K@nh\fi }\ifnum\K@ni=1\relax\expandafter
+??V\xdef\csname D@whd@\the\K@df @\the\K@de @\endcsname{\the\K@di @\the\K@dj
+??V@\the\K@dk @}\xdef\K@ik{\K@ik{\the\K@df}{\the\K@de}}\fi}\def\K@em{\advance
+??V\K@df by -1 \xdef\K@ho{\the\K@df}\let\K@rx\K@cm\let\K@ry\K@ho\let\K@rz
+??V\K@cm\let\K@sa\K@hx\K@sb\let\K@sc\K@sd\K@nm\let\K@nh\relax\K@se\K@sf
+??V\ifx\K@sg\relax\else\xdef\K@sh{\K@hy\K@ic\K@ia\K@hz\K@ib\K@id\K@ie\K@if
+??V\K@ig\K@ih\K@ii}\ifx\K@sh\K@ci {\K@dm=\K@hx\K@dm\K@di=\K@dm\xdef\K@en
+??V{\the\K@di}\K@dn=\K@ho\K@dn\K@di=\K@dn\xdef\K@eo{\the\K@di}}\def\K@bs
+??V\K@si{\K@sj}\fi\fi\K@bs\K@si\K@sk{.}\K@dx{}{{\K@en}{\K@eo}{\K@ho}{\K@hp
+??V}{\K@hn}}\K@hf\let\st@p\relax\K@nm}%
+~\let\K@sk\K@cj
+??V\def\K@sb{\def\K@bc{\K@sl{0}{0}}\expandafter\K@bc\K@ik{}{}}\def\K@sl
+??V#1#2#3#4{\def\K@bf{#3}\ifx\K@bf\K@ci\def\K@bc{\K@sm{#1}{#2}\K@sn\K@sl
+??V{#1}{#2}{}{}}\else\def\K@bc{\K@so{#1}{#2}{#3}{#4}}\fi\ifnum#1>\K@ho
+??V\relax\let\K@bc\relax\fi\K@bc}\def\K@so#1#2#3#4{\def\K@bc{\K@sm
+??V{#1}{#2}\K@sn\K@sl{#1}{#2}{#3}{#4}}\ifnum#1=#3\relax\ifnum#2=#4\relax
+??V\def\K@bc{\K@sn\K@sl{#1}{#2}}\fi\fi\K@bc}\def\K@sn#1#2#3{\ifnum#3<\K@hx
+??V\relax\K@di=#3 \advance\K@di by 1 \edef\K@bc{\noexpand#1{#2}{\the\K@di
+??V}}\else\K@di=#2 \advance\K@di by 1 \edef\K@bc{\noexpand#1{\the\K@di
+??V}{0}}\fi\K@bc}\def\K@sm#1#2{\global\expandafter\let\csname
+??VD@whd@#1@#2@\endcsname\relax}\def\K@se{\K@sp\K@sq0\K@sr\K@ja\K@lh\let
+??V\gr\K@pt\let\endgr\relax\let\D@\K@ss\K@st0\K@dh\K@su}\def\K@sv{\global
+??V\let\K@sw\K@co\global\expandafter\let\csname D@as@1@\endcsname\relax
+??V\global\let\K@sx\K@co\global\expandafter\let\csname D@cs@1@\endcsname
+??V\relax\global\let\K@sy\K@co\global\expandafter\let\csname
+??VD@ws@1@\endcsname\relax\global\let\K@sz\relax}\def\K@ta#1{\global
+??V\expandafter\let\csname D@Bindings@#1@\endcsname\K@ci\K@di=#1\relax\ifnum
+??V#1<\K@hx\advance\K@di by 1 \edef\K@bc{\noexpand\K@ta{\the\K@di}}\else\let
+??V\K@bc\relax\fi\K@bc}\def\K@tb#1{\K@di=#1\relax\ifnum#1<\K@hx\advance
+??V\K@di by 1 \edef\K@bc{\noexpand\K@tc{#1}{\the\K@di}}\K@bc{\expandafter\K@td
+??V\K@cs}\K@ck\K@td\edef\K@bc{\noexpand\K@tb{\the\K@di}}\else\let\K@bc\relax
+??V\fi\K@bc}\def\K@sp{\ifx\K@ij\relax\ifx\K@te\relax\K@di=\K@hx\divide
+??V\K@di by 2 \multiply\K@di by 2 \ifnum\K@di=\K@hx\multiply\K@di by 5 \else
+??V\multiply\K@di by 5 \advance\K@di by 5 \fi\else\K@di=\K@te\multiply\K@di
+??Vby 10 \fi\else\K@di=\K@ij\multiply\K@di by 10 \fi\xdef\K@ij{\the\K@di
+??V}}\def\K@su#1{\edef\K@tf{\expandafter\noexpand\csname D@Entry@\the
+??V#1@\endcsname}\csname D@Entry@\the#1@\endcsname}\def\K@ss#1@#2@#3@{\K@df
+??V=#1\relax\K@de=#2\relax\K@tg#3\K@th}\def\K@eq{\K@gy\K@ec\K@gz\let\gr
+??V\K@ha\K@st\K@im\K@dg\K@ti}\def\K@st#1#2#3{\edef\K@bf{#2{\the#2}}\global
+??V#2=#1 \expandafter\K@tj\K@bf#3}\def\K@tj#1#2#3{\ifnum#1=#2 \let\K@bc\relax
+??V\else\def\K@bc{#3#1\global\advance#1 by 1 \K@tj#1{#2}#3}\fi\K@bc}\def
+??V\K@ti#1{\csname D@Cell@\the#1@\endcsname}\def\K@tk#1{\ifcase#1 \relax\or
+??V\K@tl0{-1}\K@tm\K@tn{-1}0\K@tl01\K@to\K@tp{-1}\K@hx\or\K@tl{-1}{-1}\K@tm
+??V\K@tn00\K@tl11\K@to\K@tp\K@ho\K@hx\or\K@tl{-1}0\K@tm\K@tn0{-1}\K@tl
+??V10\K@to\K@tp\K@ho{-1}\or\K@tl{-1}1\K@tm\K@tn0\K@hx\K@tl1{-1}\K@to\K@tp
+??V\K@ho0\or\K@tl01\K@tm\K@tn{-1}\K@hx\K@tl0{-1}\K@to\K@tp{-1}0\or\K@tl
+??V11\K@tm\K@tn\K@ho\K@hx\K@tl{-1}{-1}\K@to\K@tp00\or\K@tl10\K@tm\K@tn\K@ho
+??V{-1}\K@tl{-1}0\K@to\K@tp0{-1}\or\K@tl1{-1}\K@tm\K@tn\K@ho0\K@tl{-1}1\K@to
+??V\K@tp0\K@hx\fi}\def\K@tl#1#2#3#4#5#6{\K@di=\K@df\K@dj=\K@de\let#3\relax
+??V\K@cu\ifnum\K@di=#5\relax\let\K@bc\K@tq\else\ifnum\K@dj=#6\relax\let
+??V\K@bc\K@tq\else\let\K@bc\K@tr\fi\fi\K@bc{#1}{#2}{#3}{#4}\ifx#3\relax
+??V\K@cv}\def\K@tq#1#2#3#4{\xdef#3{\the\K@di}\xdef#4{\the\K@dj}}\def\K@tr
+??V#1#2#3#4{\advance\K@di by #1\relax\advance\K@dj by #2\relax\K@ts{\the
+??V\K@di}{\the\K@dj}\K@bf\ifx\K@bf\relax\else\xdef#3{\the\K@di}\xdef#4{\the
+??V\K@dj}\fi}%
+~\def\K@tt#1#2#3{\ifx\K@rq\relax\xdef\K@bc{\noexpand\K@sc @\K@tn,\noexpand
+~\K@tu @\K@tm,\noexpand\K@tv @}\K@bc\else\let\K@tu\K@tn\let\K@tv\K@tm\fi
+~\ifnum#1=9 \let\K@tw\K@tx\else\K@ty1\K@qc\K@tz\K@ty1\K@pz\K@ua\ifnum
+~#1=0 \ifx\K@qe\relax\else\K@ub\K@tu by {-1}\K@qe\fi\ifx\K@qg\relax
+~\else\K@ub\K@tv by 1\K@qg\fi\fi\K@di=\K@qc\advance\K@di by \K@tu\edef
+~\K@tu{\the\K@di}\K@di=\K@qd\advance\K@di by \K@tv\edef\K@tv{\the\K@di}\ifx
+~\K@rs\relax\edef\K@bc{\noexpand\K@sc @\K@tp,\noexpand\K@uc @\K@to
+~,\noexpand\K@ud @}\K@bc\else\let\K@uc\K@tp\let\K@ud\K@to\fi\ifnum#1=0
+~\ifx\K@qf\relax\else\K@ub\K@uc by {-1}\K@qf\fi\ifx\K@qh\relax\else
+~\K@ub\K@ud by 1\K@qh\fi\fi\K@di=\K@pz\advance\K@di by \K@uc\edef\K@uc
+~{\the\K@di}\K@di=\K@qa\advance\K@di by \K@ud\edef\K@ud{\the\K@di}\K@ue
+~\ifnum\K@uf=0 \K@di=\K@ug\relax\ifnum\K@di<0 \multiply\K@di by -1 \fi\edef
+~\K@tw{\the\K@di}\else\ifnum\K@ug=0 \K@di=\K@uf\relax\ifnum\K@di<0
+~\multiply\K@di by -1 \fi\edef\K@tw{\the\K@di}\else\K@uh\fi\fi\fi
+~\ifnum\K@tw>0 \K@ui{#1}{#2}{#3}\fi}\def\K@ue{\K@di=\K@uc\multiply\K@di by
+~-1 \advance\K@di by \K@tu\multiply\K@di by -1 \edef\K@ug{\the\K@di}\K@di
+~=\K@ud\multiply\K@di by -1 \advance\K@di by \K@tv\multiply\K@di by -1 \edef
+~\K@uf{\the\K@di}}\def\K@ui#1#2#3{\ifnum#1=0 \K@uj{#1}\K@oq\else\def\K@oq
+~{#1}\fi {\ifnum#1=0 \ifx\K@tz\K@ci\let\K@tz\K@cm\let\K@uk\K@cm\let\K@ul
+~\K@cm\fi\K@um\K@tu\K@tv\K@tz\K@uk\K@ul\ifx\K@ua\K@ci\let\K@ua\K@cm\let
+~\K@un\K@cm\let\K@uo\K@cm\fi\K@um\K@uc\K@ud\K@ua\K@un\K@uo\fi\K@up\K@oq
+~}\K@uq#1{#2}\ifx\K@rl\K@ci\else\K@ur{#1}#2\fi\ifnum\K@us<\K@ut\relax
+~\else\ifx\K@pu\K@ci\else\edef\K@pu{\noexpand\K@pr{\K@pu}}\fi\K@uu
+~{#1}{#2}{#3}\fi}\def\K@uu#1#2#3{\ifnum#1=9 \K@uv{#1}{#2}{#3}\else\K@uw
+~{#1}{#2}{#3}\fi\ifx\K@rb\relax\def\K@gl{#3}\ifx\K@gl\K@ci\else\ifx
+~\K@qt\K@ux\def\K@uy{\K@bz\K@uz}\else\let\K@uy\K@va\fi\K@vb
+~{#1}{#2}#3{}\fi\fi}
+??S\begingroup\K@ce\def\K@uv#1#2#3{\K@di=\K@tu\advance\K@di by \K@qj\edef
+??S\K@vc{\the\K@di}\K@di=\K@tv\advance\K@di by \K@qi\edef\K@vd{\the\K@di
+??S}\K@um\K@vc\K@vd000\ifx\K@qs\relax {\dimen0=\K@tw sp \K@dx{}{{}{0}{\dimen
+??S0=\K@tw sp}}\edef\K@bc##1{\noexpand\K@ve1@\K@vc sp,\K@vd sp@{\noexpand\K@hv
+??S0{\noexpand\K@vf\noexpand\K@vg{\K@vh}\hskip\K@qm sp\raise\K@ql sp
+??S\noexpand\K@hv2{##1}\noexpand\K@vi}}}\ifx\K@rc\K@ci\K@bc{\K@pr{1}\K@hv
+??S0{\hskip\K@qb sp \lower\K@vj\hbox{$\vcenter{ \hbox{\vrule width \K@us sp
+??Sheight \K@qy sp depth \K@qy sp}}$}\hskip\K@py sp}\hskip\K@vk\dimen0}\fi
+??S\ifx\K@rb\relax\K@dr={\K@vl#2}\K@bc{\K@pu\K@hv0{\hskip\K@qb sp \the\K@dr
+??S{\K@us sp}\hskip\K@py sp}\hskip\K@vk\dimen0}\fi }\fi}%
+~\def\K@uw#1#2#3{\K@di=\K@tu\advance\K@di by \K@uc\divide\K@di by 2 \advance
+~\K@di by \K@qj\edef\K@vc{\the\K@di}\K@di=\K@tv\advance\K@di by \K@ud
+~\divide\K@di by 2 \advance\K@di by \K@qi\edef\K@vd{\the\K@di}\ifx\K@qs
+~\relax\edef\K@bc##1{\noexpand\K@ve1@\K@vc sp,\K@vd sp@{\noexpand\K@hv
+~0{\noexpand\K@vf\noexpand\K@vm{\K@uf}{\K@ug}\hskip\K@qm sp\raise\K@ql sp
+~\noexpand\K@hv1{##1}\noexpand\K@vi}}}\ifx\K@rc\K@ci\K@bc{\K@pr{1}\hbox
+~{\hskip\K@qb sp \lower\K@vj\hbox{$\vcenter{ \hbox{\vrule width \K@us sp
+~height \K@qy sp depth \K@qy sp}}$}\hskip\K@py sp}}\fi\ifx\K@rb\relax\K@dr
+~={\K@vl#2}\K@bc{\K@pu\hbox{\hskip\K@qb sp \the\K@dr{\K@us sp}\hskip\K@py
+~sp}}\fi\fi}\def\K@vb#1#2#3{\def\K@bf{#3}\ifx\K@bf\K@ci\let\K@bc\relax
+~\else\def\K@bc{\K@uy{#1}{#2}#3@\K@vb{#1}{#2}}\fi\K@bc}
+??O\def\K@ur#1#2#3{\edef\K@gl{\K@vn{#2}}\def\K@bf{\K@vo{#1}{#2}}\expandafter
+??O\K@bf\K@rl{}}\def\K@vo#1#2#3#4{\K@vp{#1}{#2}#3@\def\K@bf{#4}\ifx\K@bf\K@ci
+??O\let\K@bc\relax\else\def\K@bc{\K@vo{#1}{#2}{#4}}\fi\K@bc}\def\K@vp
+??O#1#2#3@#4@{{\K@ji\K@ed\ifnum#1=9 \global\expandafter\let\csname
+??OD@pt@#3@x\endcsname\K@tn\global\expandafter\let\csname D@pt@#3@y\endcsname
+??O\K@tm\global\expandafter\let\csname D@pt@#3@type\endcsname\relax\else
+??O\def\K@bf{#4}\ifx\K@bf\K@ci\else\let\K@gl\K@bf\fi\K@di=\K@qb\advance\K@di
+??Oby \K@qm\relax\K@vq\K@tu\K@ug\K@vq\K@tv\K@uf\K@di=\K@py\multiply\K@di
+??Oby -1 \advance\K@di by \K@qm\relax\K@vq\K@uc\K@ug\K@vq\K@ud\K@uf\K@do
+??O=\K@tu sp \multiply\K@do by -1 \advance\K@do by \K@uc sp \K@do=\K@gl\K@do
+??O\K@di=\K@do\advance\K@di by \K@tu\advance\K@di by \K@qj\relax\K@vr\K@dj
+??O=\K@ql\times\K@uf\over{-\K@tw}\advance\K@di by \K@dj\expandafter\xdef
+??O\csname D@pt@#3@x\endcsname{\the\K@di}\K@do=\K@tv sp \multiply\K@do by -1
+??O\advance\K@do by \K@ud sp \K@do=\K@gl\K@do\K@di=\K@do\advance\K@di by
+??O\K@tv\advance\K@di by \K@qi\relax\K@vr\K@dj=\K@ql\times\K@ug\over\K@tw
+??O\advance\K@di by \K@dj\expandafter\xdef\csname D@pt@#3@y\endcsname{\the
+??O\K@di}\expandafter\gdef\csname D@pt@#3@type\endcsname{#2}\fi }}%
+~\def\K@vq#1#2{\K@dk=\K@tw\relax\K@vs\K@dj=\K@di\times#2\over\K@dk\advance
+~\K@dj by #1 \edef#1{\the\K@dj}}\def\K@vr#1=#2\times#3\over#4{\K@dk=#2 \K@dl
+~=#4\relax\K@vs#1=\K@dk\times#3\over\K@dl}\let\K@ux\K@cl\def\rotatedlabels
+~{\let\K@ux\K@ci}\def\K@va#1#2#3#4@#5@{{\def\K@bf{#4}\ifx\K@bf\K@ci\else
+~\K@vt#4\fi\K@vu{#1}{#2}\let\K@vv\K@co\K@vw{#3}\multiply\K@dp by \K@vv
+~\advance\K@dp by \K@ql sp \edef\K@bc##1{\noexpand\K@vx @\K@vc sp,\K@vd
+~sp@{##1}{\the\K@do}{\the\K@dp}}\K@bc{\K@vy{$\labelstyle#5$}}}}\def\K@vt
+~#1#2#3{\def\K@bf{#1}\ifx\K@bf\K@cl\else\def\K@pb{#1}\fi\def\K@bf{#2}\ifx
+~\K@bf\K@cl\else\def\K@pc{#2}\fi\def\K@bf{#3}\ifx\K@bf\K@cl\else\def\K@pd
+~{#3}\fi}
+??P\begingroup\K@ce\def\K@uz#1#2#3#4@#5@{{\def\K@bf{#4}\ifx\K@bf\K@ci\else
+??P\K@vt#4\fi\K@vu{#1}{#2}\let\K@vv\K@co\let\K@vz\K@wa\K@vw{#3}\multiply
+??P\K@dp by \K@vv\advance\K@dp by \K@ql sp \edef\K@bc##1{\noexpand\K@vx
+??P@\K@vc sp,\K@vd sp@{##1}{\the\K@do}{\the\K@dp}}\K@bc{\K@vy{$\labelstyle#5$}}}}%
+~\def\K@vu#1#2{\def\K@wb{\K@wc}\edef\K@vx{\noexpand\K@wd{\K@uf}{\K@ug}}\edef
+~\K@vw{\noexpand\K@vz{\K@oq}}\K@do=\K@us sp \K@do=\K@pb\K@do\advance\K@do
+~by \K@pc sp \advance\K@do by \K@qb sp \advance\K@do by \K@qm sp \K@dp=\K@tw
+~sp \advance\K@do by -.5\K@dp\K@dp=\K@or sp \advance\K@dp by \K@os#2sp
+~\advance\K@dp by \K@pd sp}
+??S\def\K@vu#1#2{\ifnum#1=9 \def\K@wb{\K@we}\edef\K@vx{\noexpand\K@wf\K@vh
+??S}\edef\K@vw{\noexpand\K@wg{\K@vh}}\K@do=\K@us sp \K@do=\K@pb\K@do
+??S\advance\K@do by \K@pc sp \advance\K@do by \K@qb sp \advance\K@do by \K@qm
+??Ssp \K@dp=-\K@tw sp \advance\K@do by \K@vk\K@dp\K@dp=\K@or sp \advance\K@dp
+??Sby \K@os#2sp \advance\K@dp by \K@pd sp \else\def\K@wb{\K@wc}\edef\K@vx
+??S{\noexpand\K@wd{\K@uf}{\K@ug}}\edef\K@vw{\noexpand\K@vz{\K@oq}}\K@do=\K@us
+??Ssp \K@do=\K@pb\K@do\advance\K@do by \K@pc sp \advance\K@do by \K@qb sp
+??S\advance\K@do by \K@qm sp \K@dp=\K@tw sp \advance\K@do by -.5\K@dp\K@dp
+??S=\K@or sp \advance\K@dp by \K@os#2sp \advance\K@dp by \K@pd sp \fi}\def
+??S\K@wf#1@#2,#3@#4#5#6{\K@dr={#4}\K@dx{}{{}{0}{\let\noexpand\K@vy\expandafter
+??S\noexpand\K@vy\noexpand\K@gx}}\K@ve0@#2,#3@{\K@vf\K@wh{#1}\hskip#5 \raise
+??S#6 \hbox{\K@wb{#1}{}\the\K@dr}\K@vi}}%
+~\def\K@gx{\K@gy\K@gz\K@ec\let\gr\K@ha}\def\K@wh#1{\edef\K@bc{\noexpand\K@vg
+~{#1}}\K@bc}\def\K@we#1#2{\K@di=#1 \multiply\K@di by -1 \edef\K@bc
+~{\noexpand\K@vg{\the\K@di}}\K@bc}\def\K@wd#1#2@#3,#4@#5#6#7{\K@dr={#5}\K@dx
+~{}{{}{0}{\let\noexpand\K@vy\expandafter\noexpand\K@vy\noexpand\K@gx}}\K@ve
+~0@#3,#4@{\K@vf\K@wi{#1}{#2}\hskip#6 \raise#7 \hbox{\K@wb{#1}{#2}\the\K@dr
+~}\K@vi}}\def\K@wi#1#2{\edef\K@bc{\noexpand\K@vm{#1}{#2}}\K@bc}\def\K@wc
+~#1#2{\K@di=#1 \multiply\K@di by -1 \edef\K@bc{\noexpand\K@vm{\the\K@di
+~}{#2}}\K@bc}\def\K@uq#1#2{\ifnum#1=9 \relax\else\ifnum#1=0 \K@wj\K@qb
+~\K@re\K@tz\K@rq\K@wk{#2}\K@wj\K@py\K@rf\K@ua\K@rs\K@wl{#2}\else\K@wm\K@qb
+~\K@re\K@wk{#2}\K@wm\K@py\K@rf\K@wl{#2}\fi\fi\K@di=\K@qb\advance\K@di by
+~\K@py\multiply\K@di by -1 \advance\K@di by \K@tw\edef\K@us{\the\K@di
+~}}\def\K@wj#1#2#3#4#5#6{\K@di=#1\relax\ifx#2\K@rg\advance\K@di by \K@wn
+~\advance\K@di by \K@wo#6\else\ifx#3\K@ci\else\advance\K@di by #5\relax
+~\advance\K@di by \K@wp\advance\K@di by \K@wq#6\fi\fi\edef#1{\the\K@di}}
+??O\def\K@wj#1#2#3#4#5#6{\K@di=#1\relax\ifx#2\K@rg\advance\K@di by \K@wn
+??O\advance\K@di by \K@wo#6\else\ifx#3\K@ci\ifx#4\relax\else\advance\K@di
+??Oby \K@wr\advance\K@di by \K@ws#6\advance\K@di by #4\relax\advance\K@di
+??Oby \K@wt\fi\else\advance\K@di by #5\relax\advance\K@di by \K@wp
+??O\advance\K@di by \K@wq#6\fi\fi\edef#1{\the\K@di}}%
+~\def\K@wm#1#2#3#4{\K@di=#1\relax\ifx#2\K@rg\advance\K@di by \K@wn
+~\advance\K@di by \K@wo#4\else\advance\K@di by #3\relax\advance\K@di by
+~\K@wp\advance\K@di by \K@wq#4\fi\edef#1{\the\K@di}}
+??S\def\K@wg#1#2{\K@wu\K@di=#1\mod{360}\edef\K@vh{\the\K@di}\ifnum\K@di=0 \def
+??S\K@gl{{1}}\else\ifnum\K@di=90 \def\K@gl{{7}}\else\ifnum\K@di=180 \def
+??S\K@gl{{5}}\else\ifnum\K@di=270 \def\K@gl{{3}}\else\divide\K@di by 90
+??S\ifcase\K@di\def\K@gl{{8}}\or\def\K@gl{{6}}\or\def\K@gl{{4}}\or\def
+??S\K@gl{{2}}\fi\fi\fi\fi\fi\expandafter\K@vz\K@gl{#2}}%
+~\def\K@vz#1#2{\ifcase#1 \relax\or\let\K@bc\K@wv\or\let\K@bc\K@ww\or
+~\let\K@bc\K@wx\or\let\K@bc\K@wy\or\let\K@bc\K@wz\or\let\K@bc\K@xa\or
+~\let\K@bc\K@xb\or\let\K@bc\K@xc\fi\K@bc{#2}}\def\K@wv#1{\ifcase#1
+~\K@cf\K@vy\K@xd\or\K@cf\K@vy\K@xe\let\K@vv\K@cp\or\K@cf\K@vy\K@xe\let
+~\K@vv\K@cp\or\K@cf\K@vy\K@xd\fi}\def\K@ww#1{\ifcase#1 \K@cf\K@vy\K@xf
+~\let\K@vv\K@cp\or\K@cf\K@vy\K@xg\or\K@cf\K@vy\K@xf\let\K@vv\K@cp\or
+~\K@cf\K@vy\K@xg\fi}\def\K@wx#1{\ifcase#1 \K@cf\K@vy\K@xh\let\K@vv\K@cp
+~\or\K@cf\K@vy\K@xi\or\K@cf\K@vy\K@xh\let\K@vv\K@cp\or\K@cf\K@vy\K@xi
+~\fi}\def\K@wy#1{\ifcase#1 \K@cf\K@vy\K@xj\let\K@vv\K@cp\or\K@cf\K@vy
+~\K@xk\or\K@cf\K@vy\K@xk\or\K@cf\K@vy\K@xj\let\K@vv\K@cp\fi}\def\K@wz
+~#1{\ifcase#1 \K@cf\K@vy\K@xe\or\K@cf\K@vy\K@xd\let\K@vv\K@cp\or\K@cf
+~\K@vy\K@xe\or\K@cf\K@vy\K@xd\let\K@vv\K@cp\fi}\def\K@xa#1{\ifcase#1
+~\K@cf\K@vy\K@xf\or\K@cf\K@vy\K@xg\let\K@vv\K@cp\or\K@cf\K@vy\K@xf\or
+~\K@cf\K@vy\K@xg\let\K@vv\K@cp\fi}\def\K@xb#1{\ifcase#1 \K@cf\K@vy\K@xh
+~\or\K@cf\K@vy\K@xi\let\K@vv\K@cp\or\K@cf\K@vy\K@xi\let\K@vv\K@cp\or
+~\K@cf\K@vy\K@xh\fi}\def\K@xc#1{\ifcase#1 \K@cf\K@vy\K@xj\or\K@cf\K@vy
+~\K@xk\let\K@vv\K@cp\or\K@cf\K@vy\K@xk\let\K@vv\K@cp\or\K@cf\K@vy\K@xj
+~\fi}\def\K@xh#1{\K@hv2{\lower\K@vj\hbox{#1}}}\def\K@xj#1{\K@hv2{\vbox
+~{\offinterlineskip\hbox{#1}\null}}}\def\K@xd#1{\K@hv1{\vbox
+~{\offinterlineskip\hbox{#1}\null}}}\def\K@xg#1{\K@hv0{\vbox
+~{\offinterlineskip\hbox{#1}\null}}}\def\K@xi#1{\K@hv0{\lower\K@vj\hbox
+~{#1}}}\def\K@xk#1{\K@hv0{\vtop{\offinterlineskip\null\hbox{#1}}}}\def\K@xe
+~#1{\K@hv1{\vtop{\offinterlineskip\null\hbox{#1}}}}\def\K@xf#1{\K@hv2{\vtop
+~{\offinterlineskip\null\hbox{#1}}}}\def\K@xl#1#2{\K@vg{180}}
+??P\def\K@wa#1#2{\ifcase#1 \relax\or\let\K@bc\K@xm\or\let\K@bc\K@xn\or
+??P\let\K@bc\K@xo\or\let\K@bc\K@xp\or\let\K@bc\K@xq\or\let\K@bc\K@xr\or
+??P\let\K@bc\K@xs\or\let\K@bc\K@xt\fi\K@bc{#2}}\def\K@xm#1{\let\K@wb\K@ck
+??P\ifcase#1 \K@cf\K@vy\K@xd\or\K@cf\K@vy\K@xe\let\K@vv\K@cp\or\K@cf
+??P\K@vy\K@xe\let\K@vv\K@cp\or\K@cf\K@vy\K@xd\fi}\def\K@xn#1{\let\K@wb
+??P\K@ck\ifcase#1 \K@cf\K@vy\K@xe\let\K@vv\K@cp\or\K@cf\K@vy\K@xd\or
+??P\K@cf\K@vy\K@xe\let\K@vv\K@cp\or\K@cf\K@vy\K@xd\fi}\def\K@xo#1{\K@cf
+??P\K@vy\K@xd\ifcase#1 \let\K@vv\K@cp\let\K@wb\K@xl\or\let\K@wb\K@ck\or
+??P\let\K@vv\K@cp\let\K@wb\K@xl\or\let\K@wb\K@ck\fi}\def\K@xp#1{\let\K@wb
+??P\K@xl\ifcase#1 \K@cf\K@vy\K@xd\let\K@vv\K@cp\or\K@cf\K@vy\K@xe\or
+??P\K@cf\K@vy\K@xe\or\K@cf\K@vy\K@xd\let\K@vv\K@cp\fi}\def\K@xq#1{\let
+??P\K@wb\K@xl\ifcase#1 \K@cf\K@vy\K@xe\or\K@cf\K@vy\K@xd\let\K@vv\K@cp\or
+??P\K@cf\K@vy\K@xe\or\K@cf\K@vy\K@xd\let\K@vv\K@cp\fi}\def\K@xr#1{\let
+??P\K@wb\K@xl\ifcase#1 \K@cf\K@vy\K@xe\or\K@cf\K@vy\K@xd\let\K@vv\K@cp\or
+??P\K@cf\K@vy\K@xe\or\K@cf\K@vy\K@xd\let\K@vv\K@cp\fi}\def\K@xs#1{\K@cf
+??P\K@vy\K@xd\ifcase#1 \let\K@wb\K@ck\or\let\K@vv\K@cp\let\K@wb\K@xl\or
+??P\let\K@vv\K@cp\let\K@wb\K@xl\or\let\K@wb\K@ck\fi}\def\K@xt#1{\let\K@wb
+??P\K@ck\ifcase#1 \K@cf\K@vy\K@xd\or\K@cf\K@vy\K@xe\let\K@vv\K@cp\or
+??P\K@cf\K@vy\K@xe\let\K@vv\K@cp\or\K@cf\K@vy\K@xd\fi}\endgroup
+~\def\K@cf#1#2{\def#1{#2}}\def\K@uj#1#2{\ifnum\K@uf>0 \ifnum\K@ug>0 \def
+~#2{8}\else\ifnum\K@ug=0 \def#2{7}\else\def#2{6}\fi\fi\else\ifnum\K@uf
+~=0 \ifnum\K@ug>0 \def#2{1}\else\ifnum\K@ug=0 \relax\else\def#2{5}\fi\fi
+~\else\ifnum\K@ug>0 \def#2{2}\else\ifnum\K@ug=0 \def#2{3}\else\def
+~#2{4}\fi\fi\fi\fi}\def\K@xu#1#2#3#4{\ifx#1\K@rg\let#2\K@ck\fi\ifx
+~#3\K@rg\let#4\K@ck\fi}\def\K@up#1{\global\let\K@wk\K@cm\global\let\K@wl
+~\K@cm\K@di=\K@uf\relax\ifnum\K@di<0 \multiply\K@di by -1 \fi\K@dj=\K@ug
+~\relax\ifnum\K@dj<0 \multiply\K@dj by -1 \fi\ifcase#1 \let\K@bc\relax\or
+~\K@xv\K@bc\or\K@xw\K@bc\or\K@xx\K@bc\or\K@xy\K@bc\or\K@xz\K@bc\or
+~\K@ya\K@bc\or\K@yb\K@bc\or\K@yc\K@bc\fi\K@bc}\def\K@xv#1{\K@xu\K@re
+~\K@yd\K@rf\K@ye\def#1{\K@yd1\K@wk\K@ye1\K@wl}}\def\K@xw#1{\K@xu\K@re\K@yd
+~\K@rf\K@ye\def#1{\K@yd2\K@wk\K@ye2\K@wl}}\def\K@xx#1{\K@xu\K@re\K@yd\K@rf
+~\K@ye\def#1{\K@yd3\K@wk\K@ye3\K@wl}}\def\K@xy#1{\K@xu\K@re\K@yd\K@rf\K@ye
+~\def#1{\K@yd4\K@wk\K@ye4\K@wl}}\def\K@xz#1{\K@xu\K@re\K@ye\K@rf\K@yd
+~\K@ct\K@pz\K@qc\K@ct\K@qa\K@qd\K@ct\K@tz\K@ua\K@ct\K@uk\K@un\K@ct\K@ul
+~\K@uo\def#1{\K@yd1\K@wl\K@ye1\K@wk}}\def\K@ya#1{\K@xu\K@re\K@ye\K@rf\K@yd
+~\K@ct\K@pz\K@qc\K@ct\K@qa\K@qd\K@ct\K@tz\K@ua\K@ct\K@uk\K@un\K@ct\K@ul
+~\K@uo\def#1{\K@yd2\K@wl\K@ye2\K@wk}}\def\K@yb#1{\K@xu\K@re\K@ye\K@rf\K@yd
+~\K@ct\K@pz\K@qc\K@ct\K@qa\K@qd\K@ct\K@tz\K@ua\K@ct\K@uk\K@un\K@ct\K@ul
+~\K@uo\def#1{\K@yd3\K@wl\K@ye3\K@wk}}\def\K@yc#1{\K@xu\K@re\K@ye\K@rf\K@yd
+~\K@ct\K@pz\K@qc\K@ct\K@qa\K@qd\K@ct\K@tz\K@ua\K@ct\K@uk\K@un\K@ct\K@ul
+~\K@uo\def#1{\K@yd4\K@wl\K@ye4\K@wk}}\def\K@yd#1#2{\ifcase#1 \relax\or
+~\K@yf{#2}\or\K@yg{#2}\or\K@yh{#2}\or\K@yi{#2}\fi}\def\K@yf#1{\K@dk=\K@tz
+~\advance\K@dk by \K@uk\advance\K@dk by \K@ul\relax\ifnum\K@dk>0 \K@dk
+~=\K@tz\divide\K@dk by -2 \advance\K@dk by \K@qc\multiply\K@dk by -1 \K@vs
+~\K@dl=\K@dk\times\K@tw\over\K@dj\xdef#1{\the\K@dl}\fi}\def\K@yg#1{\K@dk
+~=\K@tz\advance\K@dk by \K@uk\advance\K@dk by \K@ul\relax\ifnum\K@dk>0
+~\K@dk=\K@ul\advance\K@dk by \K@vj\advance\K@dk by \K@qd\K@dl=\K@tz\divide
+~\K@dl by -2 \advance\K@dl by \K@qc\multiply\K@dl by -1 \K@yj#1\fi}\def\K@yh
+~#1{\K@dk=\K@tz\advance\K@dk by \K@uk\advance\K@dk by \K@ul\relax\ifnum
+~\K@dk>0 \K@dk=\K@vj\advance\K@dk by \K@ul\relax\K@vs\K@dl=\K@dk\times\K@tw
+~\over\K@di\xdef#1{\the\K@dl}\fi}\def\K@yi#1{\K@dk=\K@tz\advance\K@dk by
+~\K@uk\advance\K@dk by \K@ul\relax\ifnum\K@dk>0 \K@dk=\K@ul\advance\K@dk
+~by \K@vj\advance\K@dk by \K@qd\K@dl=\K@tz\divide\K@dl by 2 \advance\K@dl
+~by \K@qc\relax\K@yj#1\fi}\def\K@ye#1#2{\ifcase#1 \relax\or\K@yk{#2}\or
+~\K@yl{#2}\or\K@ym{#2}\or\K@yn{#2}\fi}\def\K@yk#1{\K@dk=\K@ua\advance
+~\K@dk by \K@un\advance\K@dk by \K@uo\relax\ifnum\K@dk>0 \K@dk=\K@ua
+~\divide\K@dk by 2 \advance\K@dk by \K@pz\relax\K@vs\K@dl=\K@dk\times\K@tw
+~\over\K@dj\xdef#1{\the\K@dl}\fi}\def\K@yl#1{\K@dk=\K@ua\advance\K@dk by
+~\K@un\advance\K@dk by \K@uo\relax\ifnum\K@dk>0 \K@dk=\K@vj\advance\K@dk
+~by -\K@un\advance\K@dk by \K@qa\multiply\K@dk by -1 \K@dl=\K@ua\divide
+~\K@dl by 2 \advance\K@dl by \K@pz\relax\K@yj#1\fi}\def\K@ym#1{\K@dk=\K@ua
+~\advance\K@dk by \K@un\advance\K@dk by \K@uo\relax\ifnum\K@dk>0 \K@dk
+~=-\K@vj\advance\K@dk by \K@un\relax\K@vs\K@dl=\K@dk\times\K@tw\over\K@di
+~\xdef#1{\the\K@dl}\fi}\def\K@yn#1{\K@dk=\K@ua\advance\K@dk by \K@un
+~\advance\K@dk by \K@uo\relax\ifnum\K@dk>0 \K@dk=\K@vj\advance\K@dk by
+~-\K@un\advance\K@dk by \K@qa\multiply\K@dk by -1 \K@dl=\K@ua\divide\K@dl
+~by -2 \advance\K@dl by \K@pz\multiply\K@dl by -1 \K@yj#1\fi}\def\K@yj
+~#1{\ifnum\K@dk=0 \ifnum\K@dl<0 \K@vs\K@dk=\K@dl\times\K@tw\over\K@dj\xdef
+~#1{\the\K@dk}\else\global\let#1\K@cm\fi\else\ifnum\K@dl=0 \ifnum\K@dk
+~<0 \K@vs\K@dl=\K@dk\times\K@tw\over\K@di\xdef#1{\the\K@dl}\else\global
+~\let#1\K@cm\fi\else\ifnum\K@dk<0 \ifnum\K@dl<0 \K@yo#1\else\K@vs\K@dl
+~=\K@dk\times\K@tw\over\K@di\xdef#1{\the\K@dl}\fi\else\ifnum\K@dl<0 \K@vs
+~\K@dk=\K@dl\times\K@tw\over\K@dj\xdef#1{\the\K@dk}\else\K@yo#1\fi\fi\fi
+~\fi}\def\K@yo#1{\K@do=\K@di sp \divide\K@do by \K@dk\K@dp=\K@dj sp
+~\divide\K@dp by \K@dl\ifdim\K@do=\K@dp\K@vs\K@dh=\K@dk\times\K@tw\over
+~\K@di\K@vs\K@dg=\K@dl\times\K@tw\over\K@dj\ifnum\K@dh<\K@dg\xdef#1{\the
+~\K@dh}\else\xdef#1{\the\K@dg}\fi\else\ifdim\K@dp<\K@do\K@vs\K@dl=\K@dk
+~\times\K@tw\over\K@di\xdef#1{\the\K@dl}\else\K@vs\K@dk=\K@dl\times\K@tw
+~\over\K@dj\xdef#1{\the\K@dk}\fi\fi}
+??V\def\K@er{\K@hc\K@hh\K@ee\let\gr\K@cj\let\endgr\relax\K@hi\let\D@\K@yp
+??V\K@st0\K@dh\K@yq\K@yr}%
+~\def\K@hi{\def\K@ys##1##2{\K@rt\let\K@rt\relax}\def\K@yt##1##2{\K@rt\let
+~\K@rt\relax}\def\K@yu##1##2{\K@rt\let\K@rt\relax}\def\K@yv##1{\K@rt\let
+~\K@rt\relax}}
+??V\def\K@yq#1{\csname D@Entry@\the#1@\endcsname}\def\K@eb{\K@em\let\K@ec
+??V\K@yw\let\K@ed\K@yx\let\K@ee\K@yy\def\K@um{\K@yz}\let\K@dz\K@za\let
+??V\K@rt\egroup\global\setbox\K@ds=\hbox\bgroup\hbox to \K@en sp{\hfil\vbox
+??Vto \K@eo sp{\vfil}}\K@ep\K@eq\K@er\let\gr\K@pt\let\endgr\relax\K@lh
+??V\K@ja\K@zb\K@zc\K@zd\let\\\relax\setbox\K@du=\hbox\bgroup}%
+??Q\begingroup\K@ce\def\K@zd{\let\hd\K@ze\let\pd\K@zf\let\tl\K@zg\let\pl
+??Q\K@zh\let\pt\K@ri\def\Text{\K@bx\K@zi}\def\Txt{\K@bx\K@zj}\def\Math{\K@bx
+??Q\K@zk}\def\Label{\K@bx\K@zl}\def\Vertex{\K@bx\K@zm}\def\Pt{\K@ca\K@zn}\def
+??Q\Dot{\K@bx\K@zo}\def\Box{\K@cb\K@zp}\def\Frame{\K@cb\K@zq}}%
+~\def\K@ze#1{\gdef\K@zr{\K@dr={#1}}}\def\K@zg#1{\gdef\K@zs{\K@dr={#1}}}\def
+~\K@zf#1{\hd{\phantom{#1}}}\def\K@zh#1{\tl{\phantom{#1}}}
+??V\def\K@za{\K@rt\egroup\K@dx{}{{}{1}{\gdef\noexpand\K@es{\K@es}\gdef
+??V\noexpand\K@et{\K@et}\gdef\noexpand\K@eu{\K@eu}\gdef\noexpand\K@ev{\K@ev
+??V}}}\K@ew\K@ex\K@ey\egroup\Displaybox\K@ds}%
+??X\begingroup\K@ce\def\K@zt{$\egroup\null\egroup\K@di=\wd\K@ds\xdef\K@en
+??X{\the\K@di}\K@dj=\ht\K@ds\xdef\K@eo{\the\K@dj}\K@dx{}{{\K@en}{\K@eo
+??X}{}{\K@hp}}\let\K@gi\K@zu\K@zv}\def\K@zw{\K@di=\K@en\relax\K@dj=\K@eo
+??X\relax\K@zv}\def\K@zv{\ifx\K@zx\K@ci\K@dm=\K@di sp \divide\K@dm by \K@zy
+??X\let\K@hx\K@zy\else\K@dm=\K@zx\divide\K@di by \K@dm\edef\K@hx{\the\K@di
+??X}\fi\let\K@rz\K@cm\let\K@sa\K@hx\ifx\K@zz\K@ci\K@dn=\K@dj sp \divide
+??X\K@dn by \K@Aa\let\K@ho\K@Aa\else\K@dn=\K@zz\divide\K@dj by \K@dm\edef
+??X\K@ho{\the\K@dj}\fi\let\K@rx\K@cm\let\K@ry\K@ho\let\K@sc\K@Ab\let\K@in
+??X\K@ci\let\K@ec\K@yw\let\K@ed\K@yx\let\K@ee\K@yy\let\K@rt\egroup\global
+??X\setbox\K@ds=\hbox\bgroup\hbox to \K@en sp{\vbox to \K@eo sp{\vss}\hss
+??X}\K@Ac\K@ep{\llap{\box\K@ds}\K@Ad{\K@gm\K@dr}{{0pt}{0pt}{0{\the\K@dr
+??X}}}}\K@Ae\let\gr\K@pt\let\endgr\relax\K@hg\K@lh\K@hb\K@ja\K@zb\K@zc
+??X\K@zd\K@Af\setbox\K@du=\hbox\bgroup}\def\K@zu{\K@rt\egroup\K@ew\K@ex
+??X\K@hr\egroup\Displaybox\K@ds}%
+??Q\def\K@zb{\let\K@Ag/\let\K@Ah\/\catcode`\/=\active\let\K@Ai|\let\K@Aj
+??Q\|\catcode`\|=\active\let\K@Ak*\let\K@Al\*\catcode`\*=\active}{\catcode
+??Q`\/=\active\catcode`\|=\active\catcode`\*=\active\catcode`\(=\active
+??Q\gdef\K@zc{\let(\K@Am\let/\K@An\let|\K@Ao\let*\K@Ap\let\((\let\//\let
+??Q\||\let\**}\gdef\K@yw{\let/\K@Ag\let\/\K@Ah\let|\K@Ai\let\|\K@Aj\let
+??Q*\K@Ak\let\*\K@Al}\gdef\K@yy{\let/\K@cj\let|\K@cj\let*\K@cj\let\//\let
+??Q\||\let\**}\gdef\K@yx{\let/\K@Aq\let|\K@Ar\let*\K@As}}\def\K@Aq{/}\def
+??Q\K@Ar{|}\def\K@As{*}\def\K@Am#1,#2){\ifx\K@rp\K@ci\xdef\K@rp{#1,#2}\else
+??Q\ifx\K@rm\K@ci\xdef\K@rm{#1,#2}\fi\fi}\def\K@An#1{\edef\K@bf{\K@At
+??Q#1.@}\ifx\K@bf\K@ci\else\global\let\K@vh\K@bf\fi}\def\K@Ao#1{\K@do=#1
+??Q\K@di=\K@do\xdef\K@tx{\the\K@di}}\def\K@Ap#1{\gdef\K@vk{#1}}%
+~\def\K@At#1.#2@{#1}\def\K@ex#1{#1\K@ds\K@Au\K@ds\K@Av\K@ds\K@Aw\K@ds
+~\K@Ax\K@ds}
+??V\def\K@ey#1{\ifmmode\ifnum\K@ho=0 \let\K@Av\K@cj\fi\fi\K@do=\K@eu sp
+??V\advance\K@do by \K@Ay\K@dp=\K@ev sp \advance\K@dp by \K@Ay\relax\ifx
+??V\K@hn\K@cp\else\let\K@Az\K@Ba\let\K@Av\K@cj\fi\global\setbox#1=\hbox
+??V{\hskip\K@do\vtop{\offinterlineskip\vbox\bgroup\vskip\K@Ay\K@Az
+??V#1\vskip\K@Ay}\hskip\K@dp}}\def\K@Az#1{\ifx\K@Bb\relax\vskip-\K@vj\vskip
+??V\ifnum\K@es=-1 \K@vj\else\K@es sp\fi\box#1\vskip\K@vj\egroup\else\vskip
+??V\ifnum\K@es=-1 \K@vj\else\K@es sp\fi\egroup\vskip-\K@vj\box#1\vskip\K@vj
+??V\fi\vskip\ifnum\K@et=-1 -\K@vj\else\K@et sp\fi}\def\K@Ba#1{\K@di=-\K@ho
+??V\advance\K@di by \K@hn\relax\multiply\K@di by -1 \K@di=\csname D@Y\the
+??V\K@di @\endcsname\relax\vskip-\K@vj\vskip\ifnum\K@es=-1 \K@vj\else\K@es
+??Vsp\fi\hbox{\raise\K@vj\hbox{\lower\K@di sp\box#1}}\egroup\vskip\K@vj
+??V\vskip\ifnum\K@et=-1 -\K@vj\else\K@et sp\fi}%
+??X\def\K@hr#1{\global\setbox#1=\hbox{\hskip\K@hk\vtop{\offinterlineskip
+??X\vbox\bgroup\vskip\K@hk\ifx\K@Bc\relax\box#1\egroup\else\egroup\box#1
+??X\fi\vskip\K@hk}\hskip\K@hk}}%
+~\def\K@Aw#1{\global\setbox#1=\hbox{\hskip\K@Bd\vtop{\vbox{\vskip\K@Be\box
+~#1} \vskip\K@Bf}\hskip\K@Bg}}\def\K@Bh#1{\ifmmode\K@Bi#1\fi}\let\K@Av\K@Bh
+~\def\K@Bi#1{\global\setbox#1=\hbox{$\vcenter{\box#1}$}}\K@bg\center{\K@cz
+~\let\K@Av\K@Bi}\K@bm\centre\center\def\K@Bj{\K@cz\let\K@Av\K@Bh}\K@bh
+~\uncenter\K@Bj\K@bh\uncentre\K@Bj\K@bh\centermath\K@Bj\K@bh\centremath
+~\K@Bj\K@bg\deep{\K@cz\let\K@Av\K@cj\let\K@Bb\K@ci\let\K@Bc\K@ci}\K@bg
+~\tall{\K@cz\let\K@Av\K@cj\let\K@Bb\relax\let\K@Bc\relax}\let\K@Bb\K@ci\let
+~\K@Bc\relax\let\K@Au\K@cj\K@bg\landscape{\K@cz\def\K@Au{\K@bo\K@Bk
+~}}\K@bg\oplandscape{\K@cz\def\K@Au{\K@bo\K@Bl}}
+??Z\begingroup\K@ce\def\K@Bk#1{\global\setbox#1=\hbox{\K@Bm\box#1\K@Bn}\K@Bo
+??Z\K@Bg\K@Bd}\def\K@Bl#1{\global\setbox#1=\hbox{\K@Bp\box#1\K@Bq}\K@Bo\K@Bd
+??Z\K@Bg}\def\K@Bo#1#2{\let\K@bf\K@Be\let\K@Be#1\let#1\K@Bf\let\K@Bf#2\let
+??Z#2\K@bf}\def\K@Bm{\K@Br\bgroup\setbox\K@du=\hbox\bgroup\K@Bs}\def\K@Bn
+??Z{\K@Bt\egroup\K@do=\ht\K@du\advance\K@do by \dp\K@du\hbox to \K@do{\hfil
+??Z\vbox to \wd\K@du{\vfill\K@vf\K@vg{90}\K@xg{\box\K@du}\K@vi }}\egroup
+??Z}\K@bh\endland\K@Bn\def\K@Bp{\K@Br\bgroup\setbox\K@du=\hbox\bgroup\K@Bs
+??Z}\def\K@Bq{\K@Bt\egroup\K@do=\ht\K@du\advance\K@do by \dp\K@du\hbox to
+??Z\K@do{\hfil\vbox to \wd\K@du{\vfill\K@vf\K@vg{-90}\K@xf{\box\K@du}\K@vi
+??Z}}\egroup}\K@bh\endopland\K@Bq\def\K@Bu{\K@Br\bgroup\setbox\K@du=\hbox
+??Z\bgroup\K@Bs}\K@bg\endflip{\K@Bt\egroup\K@do=\ht\K@du\ht\K@du=\dp\K@du\dp
+??Z\K@du=\K@do\hbox to \wd\K@du{\hfil\K@vf\K@vg{180}\hbox to \z@{\box\K@du
+??Z\hss}\K@vi }\egroup}\def\K@Bv{\K@cg{currentpoint currentpoint translate 1
+??Z-1 scale neg exch neg exch translate}}\def\K@Bw{\K@cg{currentpoint
+??Zcurrentpoint translate -1 1 scale neg exch neg exch translate}}\def\K@Bx
+??Z{\K@Br\bgroup\setbox\K@du=\hbox\bgroup\K@Bs}\K@bg\endhmir{\K@Bt\egroup
+??Z\K@do=\ht\K@du\ht\K@du=\dp\K@du\dp\K@du=\K@do\hbox{\K@vf\K@Bv\box\K@du
+??Z\K@vi}\egroup}\def\K@By{\K@Br\bgroup\setbox\K@du=\hbox\bgroup\K@Bs}\K@bg
+??Z\endvmir{\K@Bt\egroup\hbox to \wd\K@du{\hfil\K@vf\K@Bw\hbox to \z@{\box
+??Z\K@du\hss}\K@vi}\egroup}\def\K@Bz#1{\K@Br\bgroup\edef\K@bc{\noexpand\K@vg
+??Z{\K@At#1.@}}\setbox\K@du=\hbox\bgroup\K@Bs}\K@bg\endrot{\K@Bt\egroup\K@do
+??Z=\ht\K@du\advance\K@do by -\dp\K@du\hbox{\phantom{\copy\K@du}\hbox to \z@
+??Z{\hskip-.5\wd\K@du\raise.5\K@do\hbox{\K@vf\K@bc\hbox to \z@{\hss\vbox to
+??Z\z@{\vss\box\K@du\vss}\hss}\K@vi}\hss}}\egroup}\endgroup
+~\K@bk\land{\relax\K@bo\K@Bm}\K@bg\opland{\relax\K@bo\K@Bp}\K@bg\flip{\relax
+~\K@bo\K@Bu}\K@bg\hmir{\relax\K@bo\K@Bx}\K@bg\hmirror{\relax\K@bo\K@Bv}\K@bg
+~\vmir{\relax\K@bo\K@By}\K@bg\rot{\relax\K@bo\K@Bz}\def\K@Br#1{\ifmmode
+~\ifinner\def\K@Bs{$}\else\def\K@Bs{$\displaystyle}\fi\def\K@Bt{$}\else
+~\let\K@Bs\bgroup\let\K@Bt\egroup\fi #1\let\K@Br\relax}\K@bg\squish{\relax
+~\ifmmode\def\next{\mathpalette\K@Ca}\else\let\next\K@Cb\fi\next}\def
+~\K@Cb#1{\hbox to \z@{\hss#1\hss}}\def\K@Ca#1#2{\hbox to \z@{\hss$\m@th
+~#1{#2}$\hss}}\K@bg\squash{\relax\ifmmode\def\next{\mathpalette\K@Cc}\else
+~\let\next\K@Cd\fi\next}\def\K@Cd#1{\setbox\z@\hbox to \z@{\hss#1\hss
+~}\K@Ce}\def\K@Cc#1#2{\setbox\z@\hbox to \z@{\hss$\m@th#1{#2}$\hss}\K@Ce
+~}\def\K@Ce{\ht\z@\z@\dp\z@\z@\box\z@}
+??Y\begingroup\K@ce\def\K@Cf{\K@Br\bgroup\hbox\bgroup\K@Cg\vtop\bgroup
+??Y\vbox\bgroup\K@Ch\vskip\K@Be\vskip\K@Ci\hbox\bgroup\hskip\K@Bd\hskip
+??Y\K@Ci\K@Bs}\K@bg\endframe{\K@Bt\hskip\K@Bg\hskip\K@Ci\egroup\egroup
+??Y\vskip\K@Bf\vskip\K@Ci\K@Ch\egroup\K@Cg\egroup\egroup}%
+~\K@bg\frame{\relax\K@bq\K@Cf}\K@bg\framed{\let\K@Ax\K@Cj}\let\K@Ax\K@cj
+~\def\K@Cj#1{\global\setbox#1=\hbox{\K@Cg\vtop{\vbox{\K@Ch\box#1}\K@Ch
+~}\K@Cg}}\def\K@Cg{\K@Ck\vrule width \K@Cl\K@Cm}\def\K@Ch{\K@Ck\hrule
+~height \K@Cl\K@Cm}
+??Y\def\K@Cn#1#2{\K@Br\bgroup\K@Co#1@\K@qc\K@qd\K@Co#2@\K@pz\K@qa\setbox
+??Y8=\hbox\bgroup\K@Cg\vtop\bgroup\vbox\bgroup\K@Ch\vskip\K@Be\vskip\K@Ci
+??Y\hbox\bgroup\hskip\K@Bd\hskip\K@Ci\K@Bs}\def\K@Cp{\K@Bt\hskip\K@Bg\hskip
+??Y\K@Ci\egroup\egroup\vskip\K@Bf\vskip\K@Ci\K@Ch\egroup\K@Cg\egroup
+??Y\dimen4=-\wd8 \advance\dimen4 by \K@qc\relax\multiply\dimen4 by -1
+??Y\advance\dimen4 by \K@pz\relax\ifdim\dimen4>\z@\dimen8=\ht8 \dimen6=-\dp
+??Y8 \advance\dimen8 by \K@qa\advance\dimen6 by \K@qd\multiply\dimen6 by -1
+??Y\K@do=\K@qc\K@dp=\K@pz\multiply\K@dp by -1 \setbox\K@du=\hbox{\ifdim\K@do
+??Y>\z@\hskip\K@do\fi\vrule width\dimen4 height \dimen8 depth \dimen6 \ifdim
+??Y\K@dp>\z@\hskip\K@dp\fi}\multiply\K@dp by -1 \hbox{\K@Cq\box\K@du\K@Cr
+??Y\llap{\K@ha1\vrule width\wd8 height \ht8 depth \dp8 \endgr\ifdim\K@dp>\z@
+??Y\hskip\K@dp\fi}\llap{\box8 \ifdim\K@dp>\z@\hskip\K@dp\fi}}\else\box8 \fi
+??Y\egroup}\def\K@Cs{\K@Bt\hskip\K@Bg\hskip\K@Ci\egroup\egroup\vskip\K@Bf
+??Y\vskip\K@Ci\K@Ch\egroup\K@Cg\egroup\K@do=-\wd8 \advance\K@do by \K@qc
+??Y\multiply\K@do by -1 \advance\K@do by \K@pz\relax\ifdim\K@do>\z@\dimen
+??Y8=\ht8 \dimen6=-\dp8 \setbox\K@du=\hbox{\phantom{\copy8}}\ifdim\K@qa>\z@
+??Y\setbox\K@du=\vbox{\offinterlineskip\hbox to \wd8{\hskip\K@qc\vrule
+??Ywidth \K@do height \K@qa\hss} \box\K@du}\setbox8=\vbox{\vskip\K@qa\box8}\fi
+??Y\ifdim\K@qd<\z@\K@dp=\K@qd\multiply\K@dp by -1 \setbox\K@du=\vtop
+??Y{\offinterlineskip\box\K@du\hbox to \wd8{\hskip\K@qc\vrule width \K@do
+??Yheight \K@dp\hss}}\setbox8=\vtop{\box8\vskip\K@dp}\fi\ifdim\K@qa<\z@
+??Y\advance\dimen8 by \K@qa\fi\ifdim\K@qd>\z@\advance\dimen6 by \K@qd\fi
+??Y\multiply\dimen6 by -1 \K@do=\K@qc\multiply\K@do by -1 \K@dp=\K@pz\setbox
+??Y\K@du=\hbox{\ifdim\K@do>\z@\vrule width \K@do height \dimen8 depth \dimen
+??Y6 \fi\box\K@du\ifdim\K@dp>\z@\vrule width \K@dp height \dimen8 depth
+??Y\dimen6 \fi}\hbox{\K@Cq\box\K@du\K@Cr\llap{\hbox{\ifdim\K@do>\z@\hskip
+??Y\K@do\fi\box8 \ifdim\K@dp>\z@\hskip\K@dp\fi}}}\else\box8 \fi\egroup
+??Y}\K@bg\endshade{\K@Bt\hskip\K@Bg\hskip\K@Ci\egroup\egroup\vskip\K@Bf
+??Y\vskip\K@Ci\K@Ch\egroup\K@Cg\egroup\dimen4=-\wd8 \advance\dimen4 by
+??Y\K@qc\relax\multiply\dimen4 by -1 \advance\dimen4 by \K@pz\relax\ifdim
+??Y\dimen4>\z@\dimen8=\ht8 \dimen6=-\dp8 \advance\dimen8 by \K@qa\advance
+??Y\dimen6 by \K@qd\multiply\dimen6 by -1 \K@do=\K@qc\K@dp=\K@pz\multiply
+??Y\K@dp by -1 \setbox\K@du=\hbox{\ifdim\K@do>\z@\hskip\K@do\fi\vrule
+??Ywidth\dimen4 height \dimen8 depth \dimen6 \ifdim\K@dp>\z@\hskip\K@dp\fi
+??Y}\multiply\K@dp by -1 \hbox{\K@Cq\box\K@du\K@Cr\llap{\K@ha1\dimen6=\K@Cl
+??Y\dimen2=\wd8 \K@do=\ht8 \K@dp=\dp8 \ifdim\K@qd<\z@\advance\K@dp by -\dimen
+??Y6 \fi\ifdim\K@qa>\z@\advance\K@do by -\dimen6 \fi\ifdim\K@qc<\z@
+??Y\advance\dimen2 by -\dimen6 \fi\ifdim\K@pz>\z@\advance\dimen2 by -\dimen
+??Y6 \else\dimen6=\z@\fi\vrule width\dimen2 height \K@do depth \K@dp\hskip
+??Y\dimen6 \endgr\ifdim\K@dp>\z@\hskip\K@dp\fi}\llap{\box8 \ifdim\K@dp>\z@
+??Y\hskip\K@dp\fi}}\else\box8 \fi\egroup}\def\K@Co#1,#2@#3#4{\edef
+??Y#3{#1}\edef#4{#2}}\endgroup
+~\K@bg\shade{\relax\K@bq\K@Cn}\K@bg\NoTeXviewHack{\def\endshade{\K@Cp}}\K@bg
+~\TeXshades{\def\endshade{\K@Cs}}
+??N\begingroup\K@ce\def\K@zp{\K@rt\let\K@pu\K@ci\let\K@rp\K@ci\let\K@rm
+??N\K@ci\let\K@qj\K@cm\let\K@qi\K@cm\let\K@qm\K@cm\let\K@ql\K@cm\def\K@rt
+??N{\egroup\K@Ct}\setbox\K@du=\hbox\bgroup}\def\K@Ct{\ifx\K@rm\K@ci\else
+??N\K@Cu\expandafter\K@Cv\K@rp @\K@tn\K@tm\edef\K@bc{\noexpand\K@sc @\K@tn
+??N,\noexpand\K@tu @\K@tm,\noexpand\K@tv @}\K@bc\expandafter\K@Cv\K@rm @\K@tp
+??N\K@to\edef\K@bc{\noexpand\K@sc @\K@tp,\noexpand\K@uc @\K@to,\noexpand\K@ud
+??N@}\K@bc\ifnum\K@tu>\K@uc\relax\K@ct\K@tu\K@uc\fi\ifnum\K@tv>\K@ud\relax
+??N\K@ct\K@tv\K@ud\fi\K@di=\K@tu\multiply\K@di by -1 \advance\K@di by \K@uc
+??N\relax\K@dj=\K@tv\multiply\K@dj by -1 \advance\K@dj by \K@ud\relax\K@do
+??N=\K@tu sp \advance\K@do by \K@qj sp \advance\K@do by \K@qm sp \K@dp=\K@tv
+??Nsp \advance\K@dp by \K@qi sp \advance\K@do by \K@ql sp \edef\K@bc{\noexpand
+??N\K@ve0@\the\K@do,\the\K@dp @{\noexpand\K@Bs\vrule width \the\K@di sp
+??Nheight \the\K@dj sp \noexpand\K@Bt}}\K@bc\fi}%
+??Q\def\K@Cu{\ifx\K@pu\K@ci\def\K@Bs{\relax}\def\K@Bt{\relax}\else\edef\K@Bs
+??Q{\noexpand\K@ha{\K@pu}}\def\K@Bt{\endgr}\fi}\endgroup
+??N\def\K@zq{\K@rt\let\K@pu\K@ci\let\K@rp\K@ci\let\K@rm\K@ci\let\K@qj\K@cm
+??N\let\K@qi\K@cm\let\K@qm\K@cm\let\K@ql\K@cm\let\K@ra\K@Cw\def\K@rt
+??N{\egroup\K@Cx}\setbox\K@du=\hbox\bgroup\def\rw{\K@md}}\def\K@Cx{\ifx\K@rm
+??N\K@ci\else\bgroup\K@Cu\expandafter\K@Cv\K@rp @\K@tn\K@tm\edef\K@bc
+??N{\noexpand\K@sc @\K@tn,\noexpand\K@tu @\K@tm,\noexpand\K@tv @}\K@bc
+??N\expandafter\K@Cv\K@rm @\K@tp\K@to\edef\K@bc{\noexpand\K@sc @\K@tp
+??N,\noexpand\K@uc @\K@to,\noexpand\K@ud @}\K@bc\ifnum\K@tu>\K@uc\relax\K@ct
+??N\K@tu\K@uc\fi\ifnum\K@tv>\K@ud\relax\K@ct\K@tv\K@ud\fi\K@di=\K@tu
+??N\multiply\K@di by -1 \advance\K@di by \K@uc\relax\K@dj=\K@tv\multiply\K@dj
+??Nby -1 \advance\K@dj by \K@ud\relax\K@do=\K@tu sp \advance\K@do by \K@qj
+??Nsp \advance\K@do by \K@qm sp \K@dp=\K@tv sp \advance\K@dp by \K@qi sp
+??N\advance\K@do by \K@ql sp \edef\K@bc{\noexpand\K@ve0@\the\K@do,\the\K@dp
+??N@{\noexpand\K@Bs\noexpand\K@Cy{\the\K@di sp}{\the\K@dj sp}\noexpand\K@Bt
+??N}}\K@bc\egroup\fi}\def\K@Cy#1#2{\hbox to #1{\vbox to #2{\vfil}\hfil}\llap
+??N{\vbox to #2{ \vfil\hbox to #1{\vrule width \K@ra height #2 \hss\vrule
+??Nwidth \K@ra height #2} \vfil}}\llap{\hbox to #1{\hfil\vbox to #2{ \hrule
+??Nheight \K@ra width #1 \vss\hrule height \K@ra width #1}\hfil}}}\endgroup
+??X\def\K@gj#1{\bgroup\K@dw\K@dx{\K@dy\K@dr}{\the\K@dr}\def\K@gi{\K@Cz}\def
+??X\Modify{\K@by\K@Af\K@zt}\global\setbox\K@ds=\vbox\bgroup\offinterlineskip
+??X\hbox\bgroup$}\K@bk\endFigure{\K@gi\egroup}%
+~\def\K@fi{\K@gj}\K@bk\Figure{\bgroup\K@br\K@ej\K@ek\K@el\everyFigure\K@fi
+~{Figure}}\K@bl\everyFigure\relax
+??X\def\K@Cz{$\egroup\null\egroup\K@dx{\K@di=\wd\K@ds\K@dj=\ht\K@ds}{{\the
+??X\K@di}{\the\K@dj}{}{\K@hp}}\K@ew\K@ex\K@hr\egroup\Displaybox\K@ds}%
+~\K@bk\newFigure{\bgroup\K@ez\K@Da}\def\K@Da#1{\egroup\expandafter\ifx
+~\csname D@every#1@\endcsname\relax\expandafter\expandafter\expandafter\let
+~\expandafter\expandafter\csname D@@#1@@\endcsname\csname#1\endcsname
+~\expandafter\def\csname D@every#1@\endcsname{\expandafter\expandafter
+~\expandafter\let\expandafter\expandafter\csname#1\endcsname\csname
+~D@@#1@@\endcsname}\fi\expandafter\K@bk\csname#1\endcsname{\bgroup\K@br
+~\csname D@every#1@\endcsname\K@ej\K@ek\K@el\everyFigure\csname
+~every#1\endcsname\K@fi{#1}}\expandafter\K@bk\csname end#1\endcsname{\K@gi
+~\egroup}\expandafter\let\csname every#1\endcsname\relax}
+??X\def\K@fw#1#2#3{\bgroup\K@dw\K@dx{\K@dy\K@dr}{\the\K@dr}\let\K@pe\K@Db
+??X\K@pg#2;@\K@en\K@zx\K@zy\K@pg#3;@\K@eo\K@zz\K@Aa\K@dx{}{{\K@en}{\K@eo
+??X}{}{\K@hp}}\let\K@Dc\K@zu\let\K@hk\K@hl\let\K@Ad\K@ck\global\setbox\K@ds
+??X=\hbox to \K@en sp {\vbox to \K@eo sp{\vss}\hss}\K@by\K@Af\K@zw}\K@bk
+??X\endGraph{\K@Dc\egroup}%
+~\def\K@fg{\K@fw}\K@bk\Graph{\bgroup\K@br\K@ej\K@ek\K@el\everyGraph\K@fg
+~{Graph}}\K@bl\everyGraph\relax
+??X\def\K@Ad{\K@dx}%
+~\def\K@Af{\def\K@um##1##2##3##4##5{}}\K@bk\newGraph{\bgroup\K@ez\K@Dd}\def
+~\K@Dd#1{\egroup\K@br\expandafter\ifx\csname D@every#1@\endcsname\relax
+~\expandafter\expandafter\expandafter\let\expandafter\expandafter\csname
+~D@@#1@@\endcsname\csname#1\endcsname\expandafter\def\csname
+~D@every#1@\endcsname{\expandafter\expandafter\expandafter\let\expandafter
+~\expandafter\csname#1\endcsname\csname D@@#1@@\endcsname}\fi\expandafter
+~\K@bk\csname#1\endcsname{\bgroup\K@br\csname D@every#1@\endcsname\K@ej
+~\K@ek\K@el\everyGraph\csname every#1\endcsname\K@fg{#1}}\expandafter
+~\K@bk\csname end#1\endcsname{\K@Dc\egroup}\expandafter\let\csname
+~every#1\endcsname\relax}
+??X\def\K@Db#1,#2;@#3#4#5{\K@do=#1\relax\ifdim\K@do<\z@\multiply\K@do by -1
+??X\fi\K@di=\K@do\edef#3{\the\K@di}\def\K@bf{#2}\ifx\K@bf\K@ci\else\setbox
+??X\K@du=\hbox{\K@do=\K@pn#2pt}\ifdim\wd\K@du>\z@\K@do=\K@pn#2\relax\ifdim
+??X\K@do=\z@\else\edef#4{\the\K@do}\fi\else\K@di=\K@pn#2\relax\ifnum\K@di
+??X>\z@\edef#5{\the\K@di}\fi\fi\fi}\endgroup
+~\K@bg\gridlines{\K@cz\K@De\let\K@gf\K@gd\let\K@gh\K@go}\K@bg\overgrid
+~{\K@cz\K@De\let\K@gf\K@ge\let\K@gh\K@gn\let\K@Ac\K@cr}\let\K@Ac\K@cq\def
+~\K@De{\let\K@fz\K@gd\let\K@ep\K@Df\let\K@ep\K@Df\def\K@Cz{\K@zt\K@zu
+~}}\let\K@ep\relax\def\K@Dg#1#2{\K@do=1sp \K@do=#1\K@do\ifdim\K@do>1sp
+~\else\ifdim\K@do<\z@\else\K@do=1000sp \K@do=#1\K@do\ifdim\K@do=\z@\let
+~#2\K@ci\else\def#2{#1}\fi\fi\fi}\def\K@Df{\let\K@tz\K@ci\let\K@ua\K@ci
+~\let\K@rp\K@ci\let\K@rm\K@ci\let\K@zr\K@ci\let\K@zs\K@ci\let\K@qd\K@cm
+~\let\K@qc\K@ci\let\K@qa\K@cm\let\K@pz\K@ci\let\K@qj\K@cm\let\K@qi\K@cm
+~\let\K@qm\K@cm\let\K@ql\K@cm\def\K@qb{-65536}\let\K@py\K@qb\let\K@pu\K@Dh
+~\let\K@qs\relax\let\K@rb\relax\let\K@rc\relax\let\K@rl\K@ci\let\K@qe
+~\relax\let\K@qf\relax\let\K@qg\relax\let\K@qh\relax\let\K@rq\relax\let
+~\K@rs\relax\ifnum\K@ho>0 \K@di=0 \K@cu\let\K@tm\K@rx\edef\K@tn{\the\K@di
+~}\let\K@to\K@ry\let\K@tp\K@tn {\K@Af\K@tt0{{Line}{}}{}}\ifnum\K@di<\K@hx
+~\advance\K@di by 1 \K@cv\fi\ifnum\K@hx>0 \K@di=0 \K@cu\edef\K@tm{\the
+~\K@di}\let\K@tn\K@rz\let\K@to\K@tm\let\K@tp\K@sa {\K@Af\K@tt
+~0{{Line}{}}{}}\ifnum\K@di<\K@ho\advance\K@di by 1 \K@cv\fi}\K@bk\newcell
+~{\bgroup\K@ez\K@Di}\def\K@Di#1{\egroup\expandafter\K@bk\csname#1\endcsname
+~{\K@Dj{#1}} \expandafter\K@bk\csname a#1\endcsname{\null\K@yu0{#1}}
+~\expandafter\K@bk\csname r#1\endcsname{\null\K@yu1{#1}} \expandafter\K@bk
+~\csname rd#1\endcsname{\null\K@yu2{#1}} \expandafter\K@bk\csname
+~d#1\endcsname{\null\K@yu3{#1}} \expandafter\K@bk\csname ld#1\endcsname
+~{\null\K@yu4{#1}} \expandafter\K@bk\csname l#1\endcsname{\null\K@yu5{#1}}
+~\expandafter\K@bk\csname lu#1\endcsname{\null\K@yu6{#1}} \expandafter\K@bk
+~\csname u#1\endcsname{\null\K@yu7{#1}} \expandafter\K@bk\csname
+~ru#1\endcsname{\null\K@yu8{#1}} \expandafter\K@bk\csname b#1\endcsname
+~{\null\K@yu{10}{#1}} \expandafter\edef\csname D@#1b@x\endcsname
+~##1##2{\lower\K@vj\hbox{$\expandafter\noexpand\csname#1box\endcsname
+~{##2}$}} \expandafter\ifx\csname#1box\endcsname\relax\expandafter\K@bi
+~\expandafter\edef\csname#1box\endcsname##1{\hbox to ##1{$\expandafter
+~\noexpand\csname#1fill\endcsname$}} \fi\expandafter\let\csname
+~D@#1@lwp@\endcsname\K@cm\expandafter\let\csname D@#1@lp@\endcsname\K@cm
+~\expandafter\let\csname D@#1@cp@\endcsname\K@cm\expandafter\let\csname
+~D@#1@jp@\endcsname\K@cm\expandafter\let\csname D@#1@bp@\endcsname\K@cm
+~\expandafter\let\csname D@#1@lpt@\endcsname\K@ci\expandafter\let\csname
+~D@#1@ppt@\endcsname\K@ci\expandafter\let\csname D@#1@pp@\endcsname\K@cm
+~\expandafter\let\csname D@#1@ap@\endcsname\K@cm}\def\K@Dj#1{\K@rt\K@bw
+~\K@Dk\edef\K@pb{\K@Dl{#1}{}}\let\K@oi\K@pb\global\K@dr={{#1}{}}\def\K@rt
+~{\egroup\K@Dm}\setbox\K@du=\hbox\bgroup}
+??S\def\K@Dn#1{\K@rt\K@Dk\edef\K@pb{\K@Dl{Fillcell}{}}\let\K@oi\K@pb\global
+??S\K@dr={{Fillcell}{#1}}\def\K@rt{\egroup\K@Dm}\setbox\K@du=\hbox\bgroup}\def
+??S\K@Do#1{\K@rt\K@Dk\edef\K@pb{\K@Dl{Boxcell}{}}\let\K@oi\K@pb\global\K@dr
+??S={{Boxcell}{#1}}\def\K@rt{\egroup\K@Dm}\setbox\K@du=\hbox\bgroup}\def\K@Dp
+??S{\K@rt\K@Dk\edef\K@pb{\K@Dl{Rule}{}}\let\K@oi\K@pb\edef\K@bc{\global
+??S\K@dr={{\K@Dq}}}\K@bc\def\K@rt{\egroup\expandafter\K@Dr\the\K@dr\K@Dm
+??S}\setbox\K@du=\hbox\bgroup\def\rw{\K@mb}}\def\K@Dr#1{\K@do=#1 \divide
+??S\K@do by 2 \K@di=\K@pd\advance\K@di by \K@do\xdef\K@pd{\the\K@di}\K@di
+??S=\K@qy\advance\K@di by \K@do\xdef\K@qy{\the\K@di}\global\K@dr
+??S={{Rule}{#1}}}\def\K@Dk{\let\K@rp\K@ci\let\K@rm\K@ci\let\K@vh\K@cm\let
+??S\K@vk\K@cn\let\K@tx\K@Ds\let\K@zr\K@ci\let\K@zs\K@ci\let\K@pu\K@ci\let
+??S\K@qs\relax\let\K@rc\relax\let\K@rb\relax\let\K@qy\K@cm\let\K@rl\K@ci
+??S\let\K@pc\K@cm\let\K@oj\K@pc\let\K@pd\K@cm\let\K@ok\K@pd\let\K@qt\K@ci
+??S\let\K@re\K@ci\let\K@rf\K@ci\let\K@rq\relax\let\K@rs\relax\let\K@qe\relax
+??S\let\K@qf\relax\let\K@qg\relax\let\K@qh\relax\let\K@qj\K@cm\let\K@qi\K@cm
+??S\let\K@qm\K@cm\let\K@ql\K@cm\let\K@qb\K@cm\let\K@qd\K@cm\let\K@qc\K@ci
+??S\let\K@py\K@cm\let\K@qa\K@cm\let\K@pz\K@ci\K@dq={}}\def\K@Dm{\ifx\K@rc
+??S\K@ci\expandafter\K@Dt\K@qy @\K@di\K@Du {\expandafter\K@Dv\the\K@dr}\edef
+??S\K@qy{\the\K@di}\fi\ifx\K@rp\K@ci\else\expandafter\K@Dw\fi}\def\K@Dw{\ifx
+??S\K@rm\K@ci\ifnum\K@tx>0 \expandafter\K@Cv\K@rp @\K@tn\K@tm\edef\K@bc
+??S{\noexpand\K@tt9{\the\K@dr}{\the\K@dq}}{\K@gx\let\K@up\K@cj\K@bc }\fi
+??S\else\let\K@Dx\relax\let\K@Dy\relax\def\K@Dz{\let\K@up\K@cj\K@bc
+??S}\expandafter\K@Cv\K@rp @\K@tn\K@tm\expandafter\K@Cv\K@rm @\K@tp\K@to
+??S\let\K@tz\K@ci\let\K@ua\K@ci\K@Ea\K@zs\K@qe\K@qg\K@rq\K@re\K@rp\K@tz
+??S\K@uk\K@ul\K@Eb\K@Ec\K@tn\K@tm\K@Dy\K@Ea\K@zr\K@qf\K@qh\K@rs\K@rf\K@rm
+??S\K@ua\K@un\K@uo\K@Ed\K@Ee\K@tp\K@to\K@Dx\edef\K@bc{\noexpand\K@tt0{\the
+??S\K@dr}{\the\K@dq}}{\K@gx\K@Dz\K@Dy\K@Dx }\fi}\def\K@Ea
+??S#1#2#3#4#5#6#7#8#9{\ifx#1\K@ci\def\K@fx{\K@Ef#2#3#4#5#6#7#8#9}\else\def
+??S\K@fx{\K@Eg#1#7#8#9#2#3#4}\fi\K@fx}\def\K@Ef#1#2#3#4#5#6#7#8{\let#1\relax
+??S\let#2\relax\ifx\K@sc\K@Ab\else\ifx#3\relax\ifx#4\K@ci\expandafter
+??S\K@Eh#5@#6#7#8\fi\fi\fi\def\K@fx##1##2##3##4##5{}\K@fx}\def\K@Eg
+??S#1#2#3#4#5#6#7#8#9{\def\K@Dz{\K@bc}\setbox\K@dt=\hbox{$\vertexstyle\K@gx
+??S#1\the\K@dr$}\K@do=\wd\K@dt\K@di=\K@do\edef#2{\the\K@di}\K@do=\ht\K@dt\K@di
+??S=\K@do\edef#3{\the\K@di}\K@do=\dp\K@dt\K@di=\K@do\edef#4{\the\K@di}\ifx
+??S#5\relax\def#8{\relax}\else\K@ty{-1}#5#2\K@di=#5\relax\multiply\K@di by
+??S-2 \edef#8{\hskip\the\K@di sp}\fi\ifx#6\relax\def#9{\lower\noexpand\K@vj
+??S}\else\K@di=-\K@vj\advance\K@di by #6\relax\edef#9{\raise\the\K@di
+??Ssp}\fi\def\K@fx{\K@Ei#1#7#8#9}\K@fx}\def\K@Ei#1#2#3#4#5#6#7{\edef
+??S#7{\noexpand#1\ifx#2\relax\noexpand\K@Ej1@#5,#6@\else\noexpand\K@ve
+??S1@#5sp,#6sp@\fi {#4\hbox{#3\noexpand\noexpand\noexpand\K@gx $\noexpand
+??S\noexpand\noexpand\vertexstyle\noexpand\the\noexpand\K@dr$}}}}\def\K@Eh
+??S#1,#2@#3#4#5{\K@Ek#1.,#2.@#3#4#5}\def\K@Ek#1.#2,#3.#4@#5#6#7{\def\K@bf
+??S{#2#4}\ifx\K@bf\K@ci\ifnum#1>-1 \ifnum#1>\K@hx\relax\else\ifnum#3>-1
+??S\ifnum#3>\K@ho\relax\else\K@di=-\K@ho\advance\K@di by #3 \multiply\K@di
+??Sby -1 \K@ts{\the\K@di}{#1}\K@bf\ifx\K@bf\relax\else\expandafter\K@El
+??S\K@bf#5#6#7\def\K@Dz{\K@bc}\fi\fi\fi\fi\fi\fi}%
+~\def\K@Cv#1,#2@#3#4{\gdef#3{#1}\gdef#4{#2}}
+??V\def\K@yu#1#2{\K@rt\K@Em\def\K@oq{#1}\def\K@ot{#2}\global\K@dr
+??V={{#2}{}}\def\K@rt{\egroup\K@En{#1}}\setbox\K@du=\hbox\bgroup}\def\K@ys
+??V#1#2{\K@rt\K@Em\def\K@oq{#1}\def\CellName{Fillcell}\global\K@dr
+??V={{Fillcell}{#2}}\def\K@rt{\egroup\K@En{#1}}\setbox\K@du=\hbox\bgroup}\def
+??V\K@yt#1#2{\K@rt\K@Em\def\K@oq{#1}\def\CellName{Boxcell}\global\K@dr
+??V={{Boxcell}{#2}}\def\K@rt{\egroup\K@En{#1}}\setbox\K@du=\hbox\bgroup}\def
+??V\K@yv#1{\K@rt\K@Em\def\K@oq{#1}\def\CellName{Rule}\edef\K@bc{\global\K@dr
+??V={{\K@Dq}}}\K@bc\def\K@rt{\egroup\expandafter\K@Eo\the\K@dr\K@En
+??V{#1}}\setbox\K@du=\hbox\bgroup\def\rw{\K@mb}}\def\K@Eo#1{\K@do=#1 \divide
+??V\K@do by 2 \K@di=\K@pd\advance\K@di by \K@do\xdef\K@pd{\the\K@di}\K@di
+??V=\K@qy\advance\K@di by \K@do\xdef\K@qy{\the\K@di}\global\K@dr
+??V={{Rule}{#1}}}\def\K@Em{\let\K@qu\K@qw\let\K@qx\relax\let\K@pu\K@ci\let
+??V\K@qs\relax\let\K@qp\K@qr\def\K@ow{0pt}\let\K@rc\relax\let\K@rb\relax
+??V\let\K@qy\K@cm\let\K@rd\relax\let\K@py\K@cm\let\K@qb\K@cm\let\K@pb\K@ci
+??V\let\K@rl\K@ci\let\K@pc\K@cm\let\K@pd\K@cm\let\K@qt\K@ci\let\K@re\K@ci
+??V\let\K@rf\K@ci\let\K@qj\K@cm\let\K@qi\K@cm\let\K@qm\K@cm\let\K@ql\K@cm
+??V\let\K@qd\K@cm\let\K@qc\K@ci\let\K@qa\K@cm\let\K@pz\K@ci\let\K@og\K@ci
+??V\let\K@ox\K@ci\K@dq={}}\def\K@Ep#1#2#3#4#5#6#7#8#9{\ifcase#1 #2\or#3\or
+??V#4\or#5\or#6\or #7\or#8\or#9\fi}\def\K@En#1{\def\K@oq{#1}\let\K@fx\K@ci
+??V\ifx\K@og\K@ci\ifnum#1=0 \let\K@fx\relax\else {\K@tk{#1}}\fi\else\ifnum
+??V#1=10 \edef\K@to{\the\K@df}\edef\K@tp{\the\K@de}\expandafter\K@Eq\K@og
+??V@\K@tm\K@tn\K@Er{\let\K@fx\relax}\K@Es\K@oq\else\ifnum#1=0 \edef\K@tm
+??V{\the\K@df}\edef\K@tn{\the\K@de}\expandafter\K@Eq\K@og @\K@to\K@tp\K@Er
+??V{\let\K@fx\relax}\K@Es\K@oq\else {\K@tk{#1}}\fi\fi\fi\let\K@Et\K@cm
+??V\ifx\K@qp\relax\expandafter\K@Eu\K@ox{}{}\fi\K@Ev\K@oq\ifx\K@fx\K@ci\ifx
+??V\K@qs\K@ci\let\K@pu\K@cl\fi\ifx\K@rc\K@ci\expandafter\K@Dt\K@qy @\K@dk
+??V\K@Du {\expandafter\K@Dv\the\K@dr}\edef\K@qy{\ifx\K@rb\relax1\else2\fi\the
+??V\K@dk}\fi\ifx\K@rd\relax\K@Ew\K@oq{\the\K@dg}\K@fx\global\advance\K@dg
+??Vby 1 \else\K@dk=\K@im\advance\K@dk by -1 \xdef\K@im{\the\K@dk}\K@Ew\K@oq
+??V\K@im\K@fx\fi\fi\K@fx}\def\K@Eu#1#2{\def\K@bf{#1}\ifx\K@bf\K@ci\let
+??V\K@bc\relax\else\ifx\K@bf\K@cl\ifx\K@pb\K@ci\def\K@bf{\K@Dl{\K@ot
+??V}{}}\else\let\K@bf\K@pb\fi\fi\ifdim\K@bf pt=.5pt \ifnum#2>\K@Et\relax
+??V\def\K@Et{#2}\fi\fi\let\K@bc\K@Eu\fi\K@bc}\def\K@Es#1{\ifnum\K@to>\K@tm
+??V\ifnum\K@tp>\K@tn\def#1{2}\else\ifnum\K@tp=\K@tn\def#1{3}\else\def
+??V#1{4}\fi\fi\else\ifnum\K@to=\K@tm\ifnum\K@tp>\K@tn\def#1{1}\else
+??V\ifnum\K@tp=\K@tn\relax\else\def#1{5}\fi\fi\else\ifnum\K@tp>\K@tn\def
+??V#1{8}\else\ifnum\K@tp=\K@tn\def#1{7}\else\def#1{6}\fi\fi\fi\fi}\def
+??V\K@Er#1{\ifnum\K@to<0\relax #1\else\ifnum\K@to>\K@ho\relax #1\else\ifnum
+??V\K@tp<0\relax #1\else\ifnum\K@tp>\K@hx\relax #1\fi\fi\fi\fi}\def\K@Dt
+??V#1#2@#3#4#5{\if#1=#3=#2 \else #3=#1#2 \advance#3 by #4 \advance#3 by #5
+??V\fi}\def\K@Ew#1#2#3{\edef#3{\gdef\expandafter\noexpand\csname
+??VD@Cell@#2@\endcsname{\noexpand\K@Ex#1@\the\K@dr @\K@tm @\K@tn @\K@to @\K@tp
+??V@{\the\K@dq}@{{\K@pb}{\K@rl}}{{\K@pc}{\K@pd}}{{\K@qb}{\K@py}}{{\K@qc
+??V}{\K@qd}}{{\K@pz}{\K@qa}}{{\K@pu}{\K@qt}}{{\K@qj}{\K@qm}}{{\K@qi}{\K@ql
+??V}}@{\K@qy}{\K@re}{\K@rf}@}}}\def\K@Eq#1@#2@#3#4{\K@di=\K@At#2.@\relax
+??V\multiply\K@di by -1 \advance\K@di by \K@df\edef#3{\the\K@di}\K@di=\K@At
+??V#1.@\relax\advance\K@di by \K@de\edef#4{\the\K@di}}\def\K@Ey#1{\ifnum
+??V#1=1\relax\ifx\K@qx\relax\K@Ez\K@tm\K@tn\K@tp\K@Et\fi\else\ifnum
+??V#1=5\relax\ifx\K@qx\relax\K@Ez\K@tm\K@tp\K@tn\K@Et\fi\else\ifnum\K@tn
+??V=\K@tp\else\K@Fa\fi\fi\fi}\def\K@Ez#1#2#3#4{{\K@di=\K@sw\relax\advance
+??V\K@di by 1 \K@Fb{A:r#1,c#2-#3}\expandafter\xdef\csname D@as@\K@sw
+??V@\endcsname{\noexpand\K@Fc{#1}{#2}{#3}{#4}\expandafter\noexpand\csname
+??VD@as@\the\K@di @\endcsname}\xdef\K@sw{\the\K@di}}\global\expandafter\let
+??V\csname D@as@\K@sw @\endcsname\relax}\def\K@Fa{{\ifnum\K@tn>\K@tp\relax
+??V\K@ct\K@tn\K@tp\K@ct\K@tm\K@to\fi\K@Fb{W:r\K@tm-\K@to,c\K@tn-\K@tp}\K@di
+??V=\K@sy\relax\advance\K@di by 1 \expandafter\xdef\csname D@ws@\K@sy
+??V@\endcsname{\noexpand\K@Fd {\K@tm}{\K@tn}{\K@to}{\K@tp}{\K@qu}\expandafter
+??V\noexpand\csname D@ws@\the\K@di @\endcsname}\xdef\K@sy{\the\K@di}}\global
+??V\expandafter\let\csname D@ws@\K@sy @\endcsname\relax}%
+~\K@bk\displaystretches{\K@cz\let\K@Fb\K@Fe\let\K@sk\K@Fe}\let\K@Fb\K@cj
+~\def\K@vl#1#2{\csname D@#1b@x\endcsname{#2}}\def\K@ov#1#2{\csname
+~D@#1@lwp@\endcsname}\def\K@os#1#2{\csname D@#1@lp@\endcsname}\def\K@Dv
+~#1#2{\csname D@#1@bp@\endcsname}\def\K@wq#1#2{\csname D@#1@cp@\endcsname
+~}\def\K@wo#1#2{\csname D@#1@jp@\endcsname}
+??O\def\K@ws#1#2{\csname D@#1@pp@\endcsname}\def\K@rr#1#2{\csname
+??OD@#1@ap@\endcsname}%
+~\def\K@Dl#1#2{\expandafter\ifx\csname D@#1@lpt@\endcsname\K@ci\K@Ff\else
+~\csname D@#1@lpt@\endcsname\fi}
+??O\def\K@vn#1{\expandafter\ifx\csname D@#1@ppt@\endcsname\K@ci\K@Fg\else
+??O\csname D@#1@ppt@\endcsname\fi}%
+~\def\D@Fillcellb@x#1#2{\lower\K@vj\hbox to #2{$#1$}}\K@bk\aFillcell#1{\null
+~\K@ys0{#1}}\K@bk\rFillcell#1{\null\K@ys1{#1}}\K@bk\rdFillcell#1{\null\K@ys
+~2{#1}}\K@bk\dFillcell#1{\null\K@ys3{#1}}\K@bk\ldFillcell#1{\null\K@ys
+~4{#1}}\K@bk\lFillcell#1{\null\K@ys5{#1}}\K@bk\luFillcell#1{\null\K@ys
+~6{#1}}\K@bk\uFillcell#1{\null\K@ys7{#1}}\K@bk\ruFillcell#1{\null\K@ys
+~8{#1}}\K@bk\bFillcell#1{\null\K@ys{10}{#1}}\K@bk\Fillcell#1{\K@bw\K@Dn
+~{#1}}\def\D@Boxcellb@x#1#2{\lower\K@vj\hbox{$#1{#2}$}}\K@bk\aBoxcell
+~#1{\null\K@yt0{#1}}\K@bk\rBoxcell#1{\null\K@yt1{#1}}\K@bk\rdBoxcell#1{\null
+~\K@yt2{#1}}\K@bk\dBoxcell#1{\null\K@yt3{#1}}\K@bk\ldBoxcell#1{\null\K@yt
+~4{#1}}\K@bk\lBoxcell#1{\null\K@yt5{#1}}\K@bk\luBoxcell#1{\null\K@yt
+~6{#1}}\K@bk\uBoxcell#1{\null\K@yt7{#1}}\K@bk\ruBoxcell#1{\null\K@yt
+~8{#1}}\K@bk\bBoxcell#1{\null\K@yt{10}{#1}}\K@bk\Boxcell#1{\K@bw\K@Do
+~{#1}}\def\D@Ruleb@x#1#2{\lower\K@vj\hbox{$\vcenter{ \hbox{\vrule width#2
+~height #1}}$}}\K@bk\aRule{\null\K@yv0}\K@bk\rRule{\null\K@yv1}\K@bk\rdRule
+~{\null\K@yv2}\K@bk\dRule{\null\K@yv3}\K@bk\ldRule{\null\K@yv4}\K@bk\lRule
+~{\null\K@yv5}\K@bk\luRule{\null\K@yv6}\K@bk\uRule{\null\K@yv7}\K@bk\ruRule
+~{\null\K@yv8}\K@bk\bRule{\null\K@yv{10}}\K@bk\Rule{\K@bw\K@Dp}\def\K@hv
+~#1#2{\hbox to \z@{\ifnum#1=0 \else\hss\fi\smash{#2}\ifnum#1=2 \else\hss\fi
+~}}\def\K@ve#1@#2,#3@#4{\llap{\hbox to \K@en sp{\hskip#2 \smash{\hbox{\raise
+~#3\hbox{\K@hv#1{#4}}}}\hss}}\K@dx{\K@Fh\K@hv\K@Fh\K@wi\K@Fh\K@wh\K@Fh
+~\K@vm\K@Fh\K@vg\K@Fh\K@wc\K@Fh\K@we\K@Fh\K@ha\K@Fh\K@pt\K@Fh\endgr\K@Fh
+~\K@vj\K@Fh\K@cg}{{#2}{#3}{#1{#4}}}}\def\K@Fh#1{\def#1{\noexpand#1}}\def
+~\K@Ej#1@#2,#3@#4{\K@sc @#2,\K@Fi @#3,\K@Fj @\K@ve#1@\K@Fi sp,\K@Fj
+~sp@{#4}}\def\K@Fk @#1,#2@#3,#4@{\K@do=#1\K@dm\ifdim\K@do<\z@\K@di=\K@do
+~\edef#2{\the\K@di}\else\K@Fl#1.@\K@Fm\K@Fn\ifnum\K@Fm<\K@hx\K@di=\csname
+~D@X\K@Fm @\endcsname\ifnum\K@Fn>0 \K@do=\csname D@dx\K@Fm @\endcsname sp
+~\K@do=.\K@Fn\K@do\advance\K@di by \K@do\fi\edef#2{\the\K@di}\else\K@di
+~=\K@Fm\advance\K@di by -\K@hx\K@do=\csname D@X\K@hx @\endcsname sp
+~\advance\K@do by \the\K@di\K@dm\advance\K@do by .\K@Fn\K@dm\K@di=\K@do
+~\edef#2{\the\K@di}\fi\fi\K@do=#3\K@dn\ifdim\K@do<\z@\K@di=\K@do\edef
+~#4{\the\K@di}\else\K@Fl#3.@\K@Fo\K@Fp\ifnum\K@Fo<\K@ho\K@di=\csname
+~D@Y\K@Fo @\endcsname\ifnum\K@Fp>0 \K@do=\csname D@dy\K@Fo @\endcsname sp
+~\K@do=.\K@Fp\K@do\advance\K@di by \K@do\fi\edef#4{\the\K@di}\else\K@di
+~=\K@Fo\advance\K@di by -\K@ho\K@do=\K@eo sp \advance\K@do by \the\K@di
+~\K@dn\advance\K@do by .\K@Fp\K@dn\K@di=\K@do\edef#4{\the\K@di}\fi\fi
+~}\def\K@sd @#1,#2@#3,#4@{\K@do=#1\K@dm\K@di=\K@do\edef#2{\the\K@di}\K@do
+~=#3\K@dn\K@di=\K@do\edef#4{\the\K@di}}\def\K@Ab @#1,#2@#3,#4@{\setbox
+~\K@du=\hbox{\global\K@do=#1\K@dm=0pt}\K@di=\K@do\edef#2{\the\K@di}\setbox
+~\K@du=\hbox{\global\K@do=#3\K@dn=0pt}\K@di=\K@do\edef#4{\the\K@di}}\def
+~\K@Fl#1.#2@#3#4{\def\K@gl{#1}\ifx\K@gl\K@ci\let#3\K@cm\else\def#3{#1}\fi
+~\def\K@gl{#2}\ifx\K@gl\K@ci\let#4\K@cm\else\edef#4{\K@At#2@}\fi}\def
+~\K@vm#1#2{\K@cg{currentpoint currentpoint translate #1 neg #2 atan rotate
+~neg exch neg exch translate}}\def\K@vg#1{\K@cg{currentpoint currentpoint
+~translate #1 neg rotate neg exch neg exch translate}}\def\K@vf{\K@cg
+~{gsave}}\def\K@vi{\K@cg{grestore}}\def\K@Fq#1,#2@#3,#4@#5{\K@Ej
+~#2@#3,#4@{\hbox{\K@vf\K@vg{#1}\K@hv{#2}{#5}\K@vi}}}
+??R\begingroup\K@ce\def\K@zl#1{\K@Fr{\lower\K@vj\hbox{$\labelstyle#1$}}}\def
+??R\K@zm#1{\K@Fr{\lower\K@vj\hbox{$\vertexstyle#1$}}}\def\K@zi#1{\K@Fr
+??R{#1}}\def\K@zj#1{\K@Fr{\lower\K@vj\hbox{$\vcenter{\hbox{#1}}$}}}\def\K@zk
+??R#1{\K@Fr{\lower\K@vj\hbox{$#1$}}}\def\K@zo{\K@zm{\diagramdot}}%
+??O\def\K@zn#1{\K@rt\let\K@rp\K@ci\def\K@rt{\egroup\K@Fs{#1}}\setbox\K@du
+??O=\hbox\bgroup}\def\K@Fs#1{\ifx\K@rp\K@ci\else\def\K@bf{\K@Ft
+??O{#1}}\expandafter\K@bf\K@rp @\fi}\def\K@Ft#1#2,#3@{{\K@ji\K@ed
+??O\expandafter\xdef\csname D@pt@#1@x\endcsname{#2}\expandafter\xdef\csname
+??OD@pt@#1@y\endcsname{#3}\global\expandafter\let\csname
+??OD@pt@#1@type\endcsname\relax\xdef\K@in{{#1}\K@in}}}\endgroup
+??R\def\K@Fr#1{\K@rt\def\K@rt{\egroup\K@Fu}\let\K@pu\K@ci\let\K@rp\K@ci\let
+??R\K@rm\K@ci\let\K@rq\relax\let\K@rs\relax\let\K@vh\K@cm\let\K@vk\K@cn\let
+??R\K@pb\K@cn\let\K@qj\K@cm\let\K@qi\K@cm\let\K@qm\K@cm\let\K@ql\K@cm
+??R\setbox\K@dt=\hbox{\K@gx#1}\K@dx{\K@dr={\K@gx#1}\edef\K@bf{\the\wd\K@dt
+??R}}{{}{0}{\K@do=\K@bf\setbox\K@dt=\hbox{\the\K@dr}}}\setbox\K@du=\hbox
+??R\bgroup}\def\K@Fu{\ifx\K@rp\K@ci\else\K@Cu\relax\ifx\K@rm\K@ci\K@Fv
+??R\else\K@Fw\fi\K@bc{\hskip\K@qm sp\raise\K@ql sp \K@hv2{\K@hv0{\K@Bs\box
+??R\K@dt\K@Bt}\hskip\K@vk\K@do}}\fi}\def\K@Fv{\expandafter\K@Cv\K@rp @\K@tn
+??R\K@tm\ifx\K@rq\relax\edef\K@bc{\noexpand\K@sc @\K@tn,\noexpand\K@tu
+??R@\K@tm,\noexpand\K@tv @}\else\def\K@bc{\let\K@tu\K@tn\let\K@tv\K@tm}\fi
+??R\K@bc\K@di=\K@tu\advance\K@di by \K@qj\relax\K@dj=\K@tv\advance\K@dj by
+??R\K@qi\relax\K@do=\wd\K@dt\edef\K@bc##1{\noexpand\K@ve0@\the\K@di sp,\the
+??R\K@dj sp@{\noexpand\K@vf\noexpand\K@vg{\K@vh}##1\noexpand\K@vi}}}\def\K@Fw
+??R{\expandafter\K@Cv\K@rp @\K@tn\K@tm\ifx\K@rq\relax\edef\K@bc{\noexpand
+??R\K@sc @\K@tn,\noexpand\K@tu @\K@tm,\noexpand\K@tv @}\else\def\K@bc{\let
+??R\K@tu\K@tn\let\K@tv\K@tm}\fi\K@bc\expandafter\K@Cv\K@rm @\K@tp\K@to\ifx
+??R\K@rs\relax\edef\K@bc{\noexpand\K@sc @\K@tp,\noexpand\K@uc @\K@to
+??R,\noexpand\K@ud @}\else\def\K@bc{\let\K@uc\K@tp\let\K@ud\K@to}\fi\K@bc
+??R\K@ue\K@uh\K@di=\K@tu\advance\K@di by \K@qj\relax\K@dj=\K@tv\advance\K@dj
+??Rby \K@qi\relax\K@do=\wd\K@dt\K@dp=\K@tw sp \edef\K@bc##1{\noexpand\K@ve
+??R0@\the\K@di sp,\the\K@dj sp@{\noexpand\K@vf\noexpand\K@vm{\K@uf}{\K@ug
+??R}\K@dp=\the\K@dp\hskip\K@pb\K@dp\noexpand\K@wc{\K@uf}{\K@ug}\noexpand
+??R\K@vg{\K@vh}##1\noexpand\K@vi}}}\endgroup
+??W\begingroup\K@ce\def\K@si{\K@sg\expandafter\K@Fx\expandafter\K@Fy\K@hy
+??W{}{}\expandafter\K@Fx\expandafter\K@Fz\K@ic{}{}\expandafter\K@Fx
+??W\expandafter\K@Ga\K@ia{}{}\expandafter\K@Fx\expandafter\K@Gb\K@id
+??W{}{}\expandafter\K@Gc\expandafter\K@ie\K@ie{}{}\expandafter\K@Fx
+??W\expandafter\K@Gd\K@ie{}{}\expandafter\K@Fx\expandafter\K@Ge\K@ih
+??W{}{}\expandafter\K@Gc\expandafter\K@ii\K@ii{}{}\expandafter\K@Fx
+??W\expandafter\K@Gf\K@ii{}{}\expandafter\K@Fx\expandafter\K@Gg\K@if
+??W{}{}\expandafter\K@Gc\expandafter\K@ig\K@ig{}{}\expandafter\K@Fx
+??W\expandafter\K@Gh\K@ig{}{}\K@Gi\global\expandafter\let\expandafter\K@en
+??W\csname D@X\K@sa @\endcsname\expandafter\K@Fx\expandafter\K@Gj\K@hz
+??W{}{}\expandafter\K@Fx\expandafter\K@Gk\K@ib{}{}\K@Gl\global\expandafter
+??W\let\expandafter\K@eo\csname D@Y\K@ry @\endcsname\K@sj}\def\K@Fx
+??W#1#2#3{\def\K@bf{#3}\ifx\K@bf\K@ci\let\K@bc\relax\else\def\K@bc
+??W{#1{#2}{#3}\K@Fx#1}\fi\K@bc}\def\K@Gc#1{\let#1\K@ci\let\K@bf\K@ci\K@di
+??W=0 \K@Gm#1}\def\K@Gm#1#2#3{\def\K@gl{#2}\ifx\K@gl\K@ci\xdef#1{#1\K@bf}\let
+??W\K@bc\relax\else\def\K@bc{\K@Gm#1}\ifnum#2>\K@di\xdef#1{#1\K@bf}\def
+??W\K@bf{{#2}{#3}}\K@di=#2 \else\xdef\K@bf{{#2}{#3}\K@bf}\fi\fi\K@bc}\def
+??W\K@Gb#1#2{\K@Gn{#2}{#1}{#2}{-1}{<0}{\K@Go d\K@Gp}}\def\K@Gg#1#2{\K@Gn
+??W{#2}{#1}{#2}{-1}{<0}{\K@Go m\K@Gq}}\def\K@Ge#1#2{\K@Gn
+??W{#2}{#1}{#2}{-1}{<0}{\K@Go a\K@Gr}}\def\K@Go#1#2#3#4#5{\K@Gs{#1l}\K@Gt
+??W{#4}{#5}{#3}{#5}\multiply\K@dj by -1 #2{#5}{\K@dj}}\def\K@Gd#1#2{\K@Gn
+??W{#2}{#1}{#2}1{>\K@hx}{\K@Gu d\K@Gv}}\def\K@Gh#1#2{\K@Gn{#2}{#1}{#2}1{>\K@hx
+??W}{\K@Gu m\K@Gq}}\def\K@Gf#1#2{\K@Gn{#2}{#1}{#2}1{>\K@hx}{\K@Gu a\K@Gr}}\def
+??W\K@Gu#1#2#3#4#5{\K@Gs{#1r}\K@Gt{#4}{#5}{#5}{#3}#2{#5}{\K@dj}}\def\K@Gt
+??W#1#2#3#4{\K@sg\K@ts{#1}{#2}\K@bf\expandafter\K@El\K@bf\K@ua\K@un\K@uo
+??W\K@dj=\K@tz\advance\K@dj by \K@ua\divide\K@dj by 2 \advance\K@dj by
+??W\csname D@X#3@\endcsname\multiply\K@dj by -1 \advance\K@dj by \csname
+??WD@X#4@\endcsname\relax}\def\K@Fy#1#2{\K@Gs{dx}\K@Gw X{#1}{#2}\K@Gp\K@hx
+??W1}\def\K@Gj#1#2{\K@Gs{dy}\K@Gw Y{#1}{#2}\K@Gx\K@ho1}\def\K@Ga#1#2{\K@Gs
+??W{mx}\K@Gw X{#1}{#2}\K@Gq\K@hx0}\def\K@Gk#1#2{\K@Gs{my}\K@Gw Y{#1}{#2}\K@Gy
+??W\K@ho0}\def\K@Fz#1#2{\K@Gs{ax}\K@Gw{}{#1}{#2}\K@Gr0{}}\def\K@Gw
+??W#1#2#3#4#5#6{\setbox\K@du=\hbox{$\K@dp=#3pt$}\def\K@bc{#4{#2}}\ifdim\wd
+??W\K@du=\z@\K@di=#2 \advance\K@di by 1 \ifnum\K@di>#5 \K@dp=\z@\else\K@dp
+??W=\csname D@#1\the\K@di @\endcsname sp \multiply\K@dp by -1 \advance\K@dp
+??Wby \csname D@#1#2@\endcsname sp \K@dp=#3\K@dp\ifcase#6 \multiply\K@dp by
+??W-1 \or\edef\K@bc{\noexpand#4{\the\K@di}}\fi\fi\else\K@dp=#3 \fi\K@dk
+??W=\K@dp\K@bc{\K@dk}}\endgroup
+~\K@bg\flexible{\K@cz\def\K@Gz{\K@Ha}\def\K@Ev{\K@Ey}\def\K@Hb{\K@Hc}\def
+~\K@sq{\K@ta}\def\K@sr{\K@sv}\let\K@om\K@oo\def\K@sf{\K@Hd}}\def\K@He{\def
+~\K@Gz{\K@Hf}\let\K@Ev\K@cj\let\K@Hb\relax\def\K@sq{\K@ta0\K@tb}\let\K@sr
+~\relax\let\K@sf\relax}\let\K@te\relax
+??V\def\K@Hd{\K@Gs{A}\csname D@as@1@\endcsname\K@Gs{W}\csname
+??VD@ws@1@\endcsname\K@Gs{C}\csname D@cs@1@\endcsname}%
+~\K@bg\gravitateleft{\K@cz\let\K@te\K@cm}\K@bg\gravitateright{\K@cz\def\K@te
+~{\K@hx}}
+??V\def\K@Hg#1#2{\K@Gn{#2}{#1}{#2}{-1}{<0}\K@Hh}\def\K@Gn#1#2#3#4#5#6{\K@di
+??V=#1 \advance\K@di by #4\relax\ifnum\K@di#5\relax\let\K@bc\K@ck\else
+??V\K@ts{#2}{\the\K@di}\K@bf\ifx\K@bf\relax\edef\K@bc{\noexpand\K@Gn{\the
+??V\K@di}{#2}{#3}{#4}}\else\expandafter\K@El\K@bf\K@tz\K@uk\K@ul\edef\K@bc
+??V{\noexpand\K@Hi{\the\K@di}{#2}{#3}{#4}}\fi\fi\K@bc{#5}{#6}}\def\K@Hi
+??V#1#2#3#4#5#6{#6{#1}{#2}{#3}}\def\K@Hh#1#2#3{\K@sg\K@ts{#2}{#3}\K@bf
+??V\expandafter\K@El\K@bf\K@ua\K@un\K@uo\K@dk=\K@tz\advance\K@dk by \K@ua
+??V\divide\K@dk by 2 \advance\K@dk by \csname D@X#1@\endcsname\multiply\K@dk
+??Vby -1 \advance\K@dk by \csname D@X#3@\endcsname\K@dj=\csname
+??VD@X#1@\endcsname\advance\K@dj by \K@dm\multiply\K@dj by -1 \advance\K@dj
+??Vby \csname D@X#3@\endcsname\relax\ifnum\K@dk<\K@dj\K@dj=\K@dk\fi\ifnum
+??V\K@dj<0\relax\def\K@bc{\global\let\K@sc\K@Fk\K@tc{#1}{#3}\K@Hj\K@Hk\K@Hl
+??V}\else\let\K@bc\relax\fi\K@bc}\def\K@Hj#1#2{\K@Gr{#1}{\K@dj}\K@td
+??V{#2}{#1}}\def\K@Hl#1#2{\multiply\K@dj by -1 \K@Gr{#2}{\K@dj}\K@td
+??V{#1}{#2}}\def\K@Hk#1#2{\K@dj=\K@ua\divide\K@dj by 2 \advance\K@dj by
+??V\csname D@X#1@\endcsname\multiply\K@dj by -1 \K@Gr{#1}{\K@dj}\K@dj=\K@tz
+??V\divide\K@dj by 2 \multiply\K@dj by -1 \advance\K@dj by \csname
+??VD@X#2@\endcsname\multiply\K@dj by -1 \K@Gr{#2}{\K@dj}}\def\K@tc
+??V#1#2#3#4#5{{\K@di=#1 \multiply\K@di by 10 \advance\K@di by -\K@ij\K@dj=#2
+??V\multiply\K@dj by 10 \advance\K@dj by -\K@ij\K@dk=\K@di\multiply\K@dk by
+??V\K@dj\ifnum\K@dk<0 \gdef\K@bc{#4}\else\ifnum\K@di<0 \gdef\K@bc{#3}\else
+??V\gdef\K@bc{#5}\fi\fi }\K@bc{#1}{#2}}\def\K@td#1#2{\K@Hm
+??V{B:c#1-#2}\expandafter\xdef\csname D@Bindings@#1@\endcsname{{#2}\csname
+??VD@Bindings@#1@\endcsname}}%
+~\K@bk\displaybindings{\K@cz\let\K@Hm\K@Fe\let\K@sk\K@Fe}\let\K@Hm\K@cj
+~\K@bg\displayall{\K@cz\let\K@Hm\K@Fe\let\K@Gs\K@Fe\let\K@Fb\K@Fe\let
+~\K@sk\K@Fe}
+??V\def\K@Hn#1#2#3{\def\K@bf{#3}\ifx\K@bf\K@ci\let\K@bc\K@ck\else
+??V\expandafter\ifx\csname D@Bound@#2@#3@\endcsname\relax {\advance#1 by
+??V\csname D@X#3@\endcsname\expandafter\xdef\csname D@X#3@\endcsname{\the
+??V#1}}\K@Gs{X#3}\expandafter\let\csname D@Bound@#2@#3@\endcsname\K@ci\def
+??V\K@bc{\def\K@bc{\K@Hn{#1}{#3}}\expandafter\expandafter\expandafter\K@bc
+??V\csname D@Bindings@#3@\endcsname{}\K@Hn}\else\let\K@bc\K@Hn\fi\fi\K@bc
+??V{#1}{#2}}\def\K@Fc#1#2#3#4{\let\K@tz\K@cm\K@Ho{#1}{#2}\K@tz\K@uk\K@ul
+??V\let\K@ua\K@cm\K@Ho{#1}{#3}\K@ua\K@un\K@uo\K@sg\K@dj=\K@tz\divide\K@dj
+??Vby 2 \advance\K@dj by \csname D@X#2@\endcsname\relax\ifnum#4>\K@Hp\relax
+??V\advance\K@dj by #4\else\advance\K@dj by \K@Hp\fi\multiply\K@dj by -1
+??V\advance\K@dj by \csname D@X#3@\endcsname\K@di=\K@ua\divide\K@di by -2
+??V\advance\K@dj by \K@di\ifnum\K@dj<0 \K@tc{#2}{#3}\K@Hq{\K@Hr{#4}}\K@Hs\fi
+??V}\def\K@Hq#1#2{\K@Gr{#1}{\K@dj}\K@td{#2}{#1}}\def\K@Hs#1#2{\multiply\K@dj
+??Vby -1 \K@Gr{#2}{\K@dj}\K@td{#1}{#2}}\def\K@Hr#1#2#3{\K@dj=\K@ua\advance
+??V\K@dj by \K@tz\divide\K@dj by 2 \ifnum#1>\K@Hp\relax\advance\K@dj by
+??V#1\else\advance\K@dj by \K@Hp\fi\divide\K@dj by 2 \K@di=\csname
+??VD@X#3@\endcsname\multiply\K@di by -1 \advance\K@di by \K@dj\K@Gr{#3}{\K@di
+??V}\K@di=\csname D@X#2@\endcsname\advance\K@di by \K@dj\multiply\K@di by
+??V-1 \K@Gr{#2}{\K@di}}\def\K@Gr#1#2{\K@Gq{#1}{#2}\def\K@bc{\K@Hn
+??V{#2}{#1}}{\expandafter\expandafter\expandafter\K@bc\csname
+??VD@Bindings@#1@\endcsname{}}}%
+~\def\displaymovements{\K@cz\let\K@Gs\K@Fe\let\K@sk\K@Fe}\let\K@Gs\K@cj
+~\def\K@Fe#1{\message{(#1)}}
+??V\def\K@Gp#1#2{\K@Ht X{#1}{#2}1{<\K@hx}}\def\K@Gv#1#2{\K@Ht
+??VX{#1}{#2}{-1}{>0}}\def\K@Gx#1#2{\K@Ht Y{#1}{#2}1{<\K@ho}}\def\K@Ht
+??V#1#2#3#4#5{\K@di=#2 \K@cu\K@Hu{#1}{\the\K@di}{#3}\ifnum\K@di#5 \advance
+??V\K@di by #4 \K@cv}\def\K@Gq#1#2{\K@Hu X{#1}{#2}}\def\K@Gy#1#2{\K@Hu
+??VY{#1}{#2}}\def\K@Hu#1#2#3{\global\let\K@sc\K@Fk\K@Gs{#1#2}{\advance#3 by
+??V\csname D@#1#2@\endcsname\expandafter\xdef\csname D@#1#2@\endcsname{\the
+??V#3}}}\def\K@Fd#1#2#3#4#5{\ifcase#5\relax\K@Hv{#2}{#4}\or\K@Hw
+??V{#1}{#2}{#3}{#4}\or\K@Hx{#1}{#2}{#3}{#4}\or\K@Hy{#1}{#2}{#3}{#4}\fi}\def
+??V\K@Hv#1#2{\K@sg\K@dj=\csname D@X#1@\endcsname\advance\K@dj by \K@Hz\relax
+??V\multiply\K@dj by -1 \advance\K@dj by \csname D@X#2@\endcsname\relax
+??V\ifnum\K@dj<0 \K@tc{#1}{#2}\K@Hq\K@Ia\K@Hs\fi}\def\K@Hw#1#2#3#4{\K@sg\let
+??V\K@tz\K@cm\let\K@gl\K@cm\K@Ho{#1}{#2}\K@tz\K@uk\K@ul\K@Ho{#1}{#4}\K@gl
+??V\K@un\K@uo\K@Ib{#2}{#4}\K@dj\K@tz\K@gl\let\K@gl\K@cm\let\K@ua\K@cm\K@Ho
+??V{#3}{#2}\K@gl\K@uk\K@ul\K@Ho{#3}{#4}\K@ua\K@un\K@uo\K@Ib{#2}{#4}\K@dk
+??V\K@gl\K@ua\relax\ifnum\K@dk<\K@dj\K@dj=\K@dk\fi\ifnum\K@dj<0 \K@tc
+??V{#2}{#4}\K@Hq\K@Ic\K@Hs\fi}\def\K@Hx#1#2#3#4{\K@sg\let\K@tz\K@cm\let
+??V\K@ua\K@cm\let\K@gl\K@cm\K@Ho{#1}{#2}\K@tz\K@uk\K@ul\K@Ho{#3}{#4}\K@ua
+??V\K@un\K@uo\K@Ho{#3}{#2}\K@gl\K@uk\K@ul\K@Ib{#2}{#4}\K@dj\K@gl\K@ua\relax
+??V\ifnum\K@dj<0 \K@tc{#2}{#4}\K@Hq\K@Ic\K@Hs\fi}\def\K@Hy#1#2#3#4{\K@sg\let
+??V\K@tz\K@cm\let\K@ua\K@cm\let\K@gl\K@cm\K@Ho{#1}{#2}\K@tz\K@uk\K@ul\K@Ho
+??V{#3}{#4}\K@ua\K@un\K@uo\K@Ho{#1}{#4}\K@gl\K@un\K@uo\K@Ib{#2}{#4}\K@dj
+??V\K@tz\K@gl\relax\ifnum\K@dj<0 \K@tc{#2}{#4}\K@Hq\K@Ic\K@Hs\fi}\def\K@Ib
+??V#1#2#3#4#5{#3=#4 \advance#3 by #5 \divide#3 by 2 \advance#3 by \csname
+??VD@X#1@\endcsname\advance#3 by \K@Id\multiply#3 by -1 \advance#3 by
+??V\csname D@X#2@\endcsname}\def\K@Ic#1#2{\K@dk=\K@tz\multiply\K@dk by -1
+??V\advance\K@dk by \K@ua\divide\K@dk by 2 \advance\K@dk by \csname
+??VD@X#1@\endcsname\advance\K@dk by \csname D@X#2@\endcsname {\advance\K@dj
+??Vby \K@dk\divide\K@dj by -2 \K@Gr{#2}{\K@dj}}{\advance\K@dj by -\K@dk\divide
+??V\K@dj by 2 \K@Gr{#1}{\K@dj}}}\def\K@Ia#1#2{\K@di=\K@Hz\divide\K@di by 2
+??V\K@dj=\csname D@X#2@\endcsname\multiply\K@dj by -1 \advance\K@dj by \K@di
+??V\K@Gr{#2}{\K@dj}\K@dj=\csname D@X#1@\endcsname\advance\K@dj by \K@di
+??V\multiply\K@dj by -1 \K@Gr{#1}{\K@dj}}\def\K@Ho#1#2#3#4#5{\K@ts
+??V{#1}{#2}\K@bf\ifx\K@bf\relax\else\expandafter\K@El\K@bf#3#4#5\fi}\def
+??V\K@Ie#1#2#3{{\K@di=0 \K@dk=0 \K@cu\expandafter\xdef\csname D@#1\the\K@di
+??V@\endcsname{\the\K@dk}\ifnum\K@di<#3\relax\advance\K@di by 1 \advance\K@dk
+??Vby #2\relax\K@cv }}\def\K@Hf{\K@Ie X\K@dm\K@hx}\def\K@Ha{\K@Ie X\z@\K@hx
+??V}\def\K@If{\K@Ie Y\K@dn\K@ho}\def\K@sg{\K@Gz\K@If\let\K@sg\relax}\def\K@Ig
+??V#1#2#3{\K@di=0 \K@cu\ifnum\K@di<#3\relax\K@dj=\K@di\K@dk=\csname
+??VD@#1\the\K@di @\endcsname\multiply\K@dk by -1 \advance\K@di by 1 \advance
+??V\K@dk by \csname D@#1\the\K@di @\endcsname\expandafter\xdef\csname
+??VD@d#2\the\K@dj @\endcsname{\the\K@dk}\K@cv}\def\K@sj{\K@sg\K@Ig Xx\K@hx
+??V\K@Ig Yy\K@ho}\def\K@Ih#1#2#3#4{\K@di=\csname D@#10@\endcsname\K@dj=0
+??V\K@dk=\K@di\global\let#3\K@cm\global\let#4\K@cm\K@cu\ifnum\csname
+??VD@#1\the\K@dj @\endcsname<\K@di\xdef#3{\the\K@dj}\K@di=\csname D@#1\the
+??V\K@dj @\endcsname\fi\ifnum\csname D@#1\the\K@dj @\endcsname>\K@dk\xdef
+??V#4{\the\K@dj}\K@dk=\csname D@#1\the\K@dj @\endcsname\fi\ifnum\K@dj<#2
+??V\advance\K@dj by 1 \K@cv\ifnum\K@di=0 \else\multiply\K@di by -1 \K@dj=0
+??V\K@cu\K@dk=\csname D@#1\the\K@dj @\endcsname\advance\K@dk by \K@di
+??V\expandafter\xdef\csname D@#1\the\K@dj @\endcsname{\the\K@dk}\ifnum\K@dj
+??V<#2\relax\advance\K@dj by 1 \K@cv\fi}\def\K@Gi{\K@Ih X\K@hx\K@rz\K@sa
+??V}\def\K@Gl{\K@Ih Y\K@ho\K@rx\K@ry}\def\K@tg{\let\K@rt\K@ru\let\K@ni\K@cm
+??V\K@Ii\global\setbox\K@dt=\hbox\bgroup$\vertexstyle\K@gy\K@gz\K@rv}%
+~\def\K@rv{\let\box\copy\let\unhbox\unhcopy\let\unvbox\unvcopy}\def\K@ru
+~{$\egroup}
+??A\begingroup\K@ce\def\K@Ij{\ifx\K@Ik\relax\expandafter\global\expandafter
+??A\edef\K@tf{\let\expandafter\noexpand\csname D@\the\K@df @\the\K@de
+??A@\endcsname\noexpand\K@ci}\else\expandafter\global\expandafter\let\K@tf
+??A\relax\fi}%
+~\def\K@Il{\expandafter\global\expandafter\let\K@tf\relax}\K@bg\dotted{\K@cz
+~\K@cc\def\K@yr{\K@Im}\def\K@Ii{\K@In}\def\K@Il{\K@Ij}\def\K@Io{\K@Ip}}\let
+~\K@yr\relax\let\K@Ii\relax\let\K@Io\K@ck\def\K@oe{\global\let\K@Ik\relax}
+??A\def\K@In{\let\K@Ik\K@ci}\def\K@Ip#1#2{\expandafter\let\csname
+??AD@#1@#2@\endcsname\K@ci}%
+??V\def\K@th{\K@rt\K@ts{\the\K@df}{\the\K@de}\K@bf\ifx\K@bf\relax\K@Il
+??V\else\K@Hb\fi}%
+??A\def\K@Im{\K@di=0 \K@dj=0 \K@cu\K@cu\expandafter\let \expandafter\K@bf
+??A\csname D@\the\K@di @\the\K@dj @\endcsname\ifx\K@bf\K@ci\else\K@dk=\K@ho
+??A\advance\K@dk by -\K@di\edef\K@bc{\noexpand\K@Ej1@\the\K@dj,\the\K@dk
+??A@}{\K@bc{\lower\K@vj\hbox{$\vertexstyle\diagramdot$}}}\fi\ifnum\K@dj<\K@hx
+??A\advance\K@dj by 1 \K@cv\ifnum\K@di<\K@ho\advance\K@di by 1 \K@dj=0
+??A\K@cv}\endgroup
+??V\def\K@Hc{{\K@di=\K@sx\relax\advance\K@di by 1 \K@Fb{C:r\the\K@df,c\the
+??V\K@de}\K@dj=\K@de\multiply\K@dj by 10 \ifnum\K@dj<\K@ij\relax\let\K@bc
+??V\K@cr\else\let\K@bc\K@cq\fi\expandafter\xdef\csname D@cs@\K@sx
+??V@\endcsname{\K@bc{\noexpand\K@Hg{\the\K@df}{\the\K@de}}{\expandafter
+??V\noexpand\csname D@cs@\the\K@di @\endcsname}}\xdef\K@sx{\the\K@di}}\global
+??V\expandafter\let\csname D@cs@\K@sx @\endcsname\relax}\def\K@Ex
+??V#1@#2@#3@#4@#5@#6@#7@#8@#9@{\def\K@tm{#3}\def\K@tn{#4}\def\K@to{#5}\def
+??V\K@tp{#6}\K@Iq\K@tm\K@tn\K@tz\K@uk\K@ul\K@Iq\K@to\K@tp\K@ua\K@un\K@uo
+??V\edef\K@pb{\K@Ep0#8}\expandafter\K@Ir\K@pb\K@pb\K@rl\edef\K@pc{\K@Ep
+??V1#8}\expandafter\K@Ir\K@pc\K@pc\K@pd\edef\K@qb{\K@Ep2#8}\expandafter\K@Ir
+??V\K@qb\K@qb\K@py\edef\K@qc{\K@Ep3#8}\expandafter\K@Ir\K@qc\K@qc\K@qd\edef
+??V\K@pz{\K@Ep4#8}\expandafter\K@Ir\K@pz\K@pz\K@qa\edef\K@pu{\K@Ep
+??V5#8}\expandafter\K@Ir\K@pu\K@pu\K@qt\ifx\K@pu\K@cl\let\K@qs\K@ci\else
+??V\let\K@qs\relax\fi\edef\K@qj{\K@Ep6#8}\expandafter\K@Ir\K@qj\K@qj\K@qm
+??V\edef\K@qi{\K@Ep7#8}\expandafter\K@Ir\K@qi\K@qi\K@ql\let\K@rq\relax\let
+??V\K@rs\relax\K@di=\K@ho\advance\K@di by -\K@tm\edef\K@tm{\the\K@di}\K@di
+??V=\K@ho\advance\K@di by -\K@to\edef\K@to{\the\K@di}\edef\K@qy{\K@Ep
+??V0#9{}{}{}{}{}}\edef\K@re{\K@Ep1#9{}{}{}{}{}}\edef\K@rf{\K@Ep
+??V2#9{}{}{}{}{}}\expandafter\K@Is\K@qy @\ifx\K@rb\relax\ifx\K@pb\K@ci\edef
+??V\K@pb{\K@Dl#2}\fi\fi\expandafter\K@tt{#1}{#2}{#7}}\def\K@Is#1#2@{\ifcase
+??V#1 \let\K@rc\relax\let\K@rb\relax\or\let\K@rc\K@ci\let\K@rb\relax\def
+??V\K@qy{#2}\or\let\K@rc\K@ci\let\K@rb\K@ci\def\K@qy{#2}\fi}\def\K@Ir
+??V#1#2#3#4{\def#3{#1}\def#4{#2}}\def\K@Iq#1#2#3#4#5{\K@ts{#1}{#2}\K@bf\ifx
+??V\K@bf\relax\let#3\K@cm\let#4\K@cm\let#5\K@cm\else\expandafter\K@El\K@bf
+??V#3#4#5\fi}\def\K@El#1@#2@#3@#4#5#6{\def#4{#1}\def#5{#2}\def#6{#3}}\def
+??V\K@ts#1#2#3{\expandafter\let \expandafter#3\csname D@whd@#1@#2@\endcsname}%
+~\def\K@ub#1by #2#3{\K@di=#3 \multiply\K@di by #2 \advance\K@di by #1 \edef
+~#1{\the\K@di}}\def\K@ty#1#2#3{\ifx#2\K@ci\let#2\K@cm\else\setbox\K@du
+~=\hbox{\K@do=#2pt}\ifdim\wd\K@du>\z@\K@do=#2 \K@di=\K@do\multiply\K@di by
+~#1 \edef#2{\the\K@di}\else\ifx#3\K@ci\let#2\K@cm\else\K@do=#3sp \K@do
+~=#2\K@do\K@di=\K@do\multiply\K@di by -2 \advance\K@di by #3 \divide\K@di
+~by -2 \edef#2{\the\K@di}\fi\fi\fi}\def\K@vs#1=#2\times#3\over#4{\ifnum
+~#3<10737418 #1=#3 \multiply#1 by 100 \divide#1 by #4\relax\multiply#1 by
+~#2\relax\divide#1 by 100 \else {\ifnum#2<0 \multiply#2 by -1 \multiply#4
+~by -1 \fi\K@It#1=#2\times#3\over#4}\fi}\def\K@It#1=#2\times#3\over#4{\K@de
+~=1 \K@cu\multiply\K@de by 2 \ifnum#2>\K@de\K@cv\K@df=#3 \divide\K@df by
+~\K@de\divide#4 by \K@de\multiply\K@df by #2\relax\divide\K@df by
+~#4\relax\xdef\K@bc{#1=\the\K@df}\aftergroup\K@bc}\def\K@uh{\K@di=\K@ug
+~\relax\ifnum\K@di<0 \multiply\K@di by -1 \fi\K@dj=\K@uf\relax\ifnum\K@dj
+~<0 \multiply\K@dj by -1 \fi\K@dk=1 \let\K@bf\K@ci\K@cu\ifnum\K@di<23171
+~\ifnum\K@dj<23171 \let\K@bf\relax\fi\fi\ifx\K@bf\K@ci\divide\K@di by 2
+~\divide\K@dj by 2 \multiply\K@dk by 2 \K@cv\multiply\K@di by \K@di
+~\multiply\K@dj by \K@dj\advance\K@di by \K@dj\expandafter\K@Iu\the\K@di
+~=\K@dj\multiply\K@dj by \K@dk\edef\K@tw{\the\K@dj}}\def\K@Iu#1=#2{{\K@dh
+~=#1\relax\K@df=32768 \K@de=0 \K@cu\divide\K@df by 2 \K@dg=\K@de\advance
+~\K@dg by \K@df\multiply\K@dg by \K@dg\ifnum\K@dg>\K@dh\else\advance
+~\K@de by \K@df\fi\ifnum\K@df>1 \K@cv\global#2=\K@de}}\def\K@wu#1=#2\mod
+~#3{#1=#2\relax\ifnum#1<0 \K@cu\advance#1 by #3\relax\ifnum#1<0 \K@cv
+~\else\K@cu\ifnum#1>#3\relax\advance#1 by -#3\relax\K@cv\ifnum
+~#1=#3\relax #1=0 \fi\fi}
+??V\def\K@yp#1@#2@#3@{\K@Io{#1}{#2}\setbox\K@du=\hbox{\K@Iv#3\K@rt}\K@dx{\K@dr
+??V={\K@Iv#3\K@rt}}{{}{0}{\setbox\K@du=\hbox{\the\K@dr}}}\K@Iw{#1}{#2}\K@di
+??V=\K@ho\advance\K@di by -#1 \edef\K@bc{\noexpand\K@Ej1@#2,\the\K@di @}\K@bc
+??V{\lower\K@vj\hbox{\box\K@dt}}}\def\K@Iw#1#2{\K@di=\wd\K@dt\divide\K@di by
+??V2 \K@dj=\K@di\advance\K@dj by \csname D@X#2@\endcsname\advance\K@dj by
+??V-\K@en\advance\K@dj by -\K@ev\relax\ifnum\K@dj>0 \advance\K@dj by \K@ev
+??V\xdef\K@ev{\the\K@dj}\fi\K@dj=\K@di\advance\K@dj by -\csname
+??VD@X#2@\endcsname\advance\K@dj by -\K@eu\relax\ifnum\K@dj>0 \advance\K@dj
+??Vby \K@eu\xdef\K@eu{\the\K@dj}\fi\K@di=\wd\K@dt\advance\K@di by \ht\K@dt
+??V\advance\K@di by \dp\K@dt\ifnum\K@di>0 \ifnum#1=\K@rx\K@dj=\ht\K@dt
+??V\ifnum\K@dj>\K@es\xdef\K@es{\the\K@dj}\fi\fi\ifnum#1=\K@ry\K@dj=\dp
+??V\K@dt\relax\ifnum\K@dj>\K@et\xdef\K@et{\the\K@dj}\fi\fi\fi}%
+??S\def\K@yz#1#2#3#4#5{\K@di=#3 \divide\K@di by 2 \K@dj=\K@di\advance\K@dj
+??Sby #1 \advance\K@dj by -\K@en\advance\K@dj by -\K@ev\relax\ifnum\K@dj>0
+??S\advance\K@dj by \K@ev\xdef\K@ev{\the\K@dj}\fi\K@dj=#1\advance\K@dj by
+??S\K@eu\multiply\K@dj by -1 \advance\K@dj by \K@di\relax\ifnum\K@dj>0
+??S\advance\K@dj by \K@eu\xdef\K@eu{\the\K@dj}\fi\K@di=#4 \advance\K@di by
+??S#2\relax\ifnum\K@di>\K@eo\relax\advance\K@di by -\K@eo\relax\ifnum\K@di
+??S>\K@es\relax\xdef\K@es{\the\K@di}\fi\fi\K@di=#2 \multiply\K@di by -1
+??S\advance\K@di by #5\relax\ifnum\K@di>0\relax\ifnum\K@di>\K@et\relax\xdef
+??S\K@et{\the\K@di}\fi\fi}\endgroup
+??V\def\K@Iv{\let\K@rt\K@ru\global\setbox\K@dt=\hbox\bgroup$\vertexstyle\K@gx
+??V}\endgroup
+~\def\K@vj{\fontdimen22\textfont2}\def\K@Ix#1#2#3#4{\let\K@gl\K@ci\K@Iy
+~#1#2{}\ifx\K@gl\relax#3\else#4\fi}\def\K@Iy#1#2#3{\if\noexpand#1#2\let
+~\K@gl\relax\fi\def\K@bf{#3}\ifx\K@bf\K@ci\let\K@bc\relax\else\def\K@bc
+~{\K@Iy#1#3}\fi\K@bc}\def\K@Iz{\let\K@Ja\relax\K@dr={}\futurelet\K@jr\K@Jb
+~}\def\K@Jb{\if=\noexpand\K@jr\def\K@bc{\K@Jc\expandafter\futurelet
+~\expandafter\K@jr\expandafter\K@Jd @}\else\if\noexpand\K@jr\K@bn\def
+~\K@bc{\K@pa\expandafter\futurelet\expandafter\K@jr\expandafter\K@Jb
+~@}\else\def\K@bc{\expandafter\futurelet\expandafter\K@jr\expandafter
+~\K@Je}\fi\fi\K@bc}\def\K@Jd{\if\noexpand\K@jr\K@bn\def\K@bc{\K@pa
+~\expandafter\futurelet\expandafter\K@jr\expandafter\K@Je @}\else\let\K@bc
+~\K@Je\fi\K@bc}\def\K@Jc#1@#2{#1}\def\K@pa#1@ {#1}\def\K@Je{\if-\noexpand
+~\K@jr\def\K@bc{\K@dr={-}\K@Jc\expandafter\futurelet\expandafter\K@jr
+~\expandafter\K@Jf @}\else\let\K@bc\K@Jg\fi\K@bc}\def\K@Jf{\if\noexpand
+~\K@jr\K@bn\def\K@bc{\K@pa\expandafter\futurelet\expandafter\K@jr
+~\expandafter\K@Jg @}\else\let\K@bc\K@Jg\fi\K@bc}\def\K@Jg{\if.\noexpand
+~\K@jr\ifx\K@Ja\relax\let\K@Ja\K@ci\let\K@bc\K@Jh\else\if\noexpand\K@jr
+~\K@bn\def\K@bc{\K@pa\K@Ji @}\else\let\K@bc\K@Ji\fi\fi\else\K@Ix\K@jr
+~{0123456789}{\let\K@Ji\K@Jj\let\K@bc\K@Jh}{\if\noexpand\K@jr\K@bn\def\K@bc
+~{\K@pa\K@Ji @}\else\let\K@bc\K@Ji\fi}\fi\K@bc}\def\K@Jh#1{\edef\K@bc
+~{\K@dr={\the\K@dr#1}}\K@bc\futurelet\K@jr\K@Jg}\def\K@qq{\ifcat\noexpand
+~\K@jr\bgroup\def\K@bc{\bgroup\K@ez\K@jp}\else\let\K@bc\K@jq\fi\K@bc
+~}\def\K@Jk#1#2{\K@cz\def\K@jp##1{\egroup\def\K@Ji{\expandafter\let\csname
+~D@##1@#1@\endcsname\K@ci}\def\K@Jj{\expandafter\edef\csname
+~D@##1@#1@\endcsname{\the\K@dr}}\K@Iz}\def\K@jq{\let\K@Ji\relax\def\K@Jj
+~{\edef#2{\the\K@dr}}\K@Iz}\futurelet\K@jr\K@qq}\K@bk\labelpoint{\K@Jk
+~{lpt}\K@Ff}\K@bk\ptpoint{\K@Jk{ppt}\K@Fg}\def\K@Jl{\if\noexpand\K@jr\K@bn
+~\def\K@bc{\K@pa\futurelet\K@jr\K@Jl @}\else\if+\noexpand\K@jr\def\K@bc
+~{\K@Jc\futurelet\K@jr\K@Jm @}\else\def\K@bc{\afterassignment\K@Jn\K@do}\fi
+~\fi\K@bc}\def\K@Jm{\if\noexpand\K@jr\K@bn\def\K@bc{\K@pa\futurelet\K@jr
+~\K@Jm @}\else\if=\noexpand\K@jr\def\K@bc{\afterassignment\K@Jo\K@do}\else
+~\def\K@bc{\afterassignment\K@Jn\K@do}\fi\fi\K@bc}\def\K@Jp#1{\edef
+~#1{\the\K@do}}\def\K@Jq#1{\edef#1{\the\K@di}}\def\K@Jr#1{\K@di=\K@do\K@Jq
+~#1}\def\K@Js#1{\advance\K@do by #1\edef#1{\the\K@do}}\def\K@Jt#1{\advance
+~\K@di by #1\edef#1{\the\K@di}}\def\K@Ju#1{\K@di=\K@do\K@Jt#1}\def\K@Jv
+~#1#2{\K@cz\def\K@jp##1{\egroup\def\K@Jo{\expandafter\K@Ju\csname
+~D@##1@#1@\endcsname}\def\K@Jn{\expandafter\K@Jr\csname D@##1@#1@\endcsname
+~}\futurelet\K@jr\K@Jl}\def\K@jq{\def\K@Jo{\K@Ju#2}\def\K@Jn{\K@Jr
+~#2}\futurelet\K@jr\K@Jl}\futurelet\K@jr\K@qq}\K@bk\labelwidthpad{\K@Jv
+~{lwp}\K@ou}\K@bk\labelpad{\K@Jv{lp}\K@or}\K@bk\breakpad{\K@Jv{bp}\K@Du
+~}\K@bk\cellpush{\K@Jv{cp}\K@wp}\K@bk\ptpush{\K@Jv{pp}\K@wr}\K@bk\atpush
+~{\K@Jv{ap}\K@wt}\K@bk\joinpush{\K@Jv{jp}\K@wn}\def\K@Jw#1#2{\K@cz\def\K@Jo
+~{#1}\def\K@Jn{#2}\futurelet\K@jr\K@Jl}\K@bg\MinimumCellLength{\K@Jw {\K@Ju
+~\K@ut}{\K@Jr\K@ut}}\K@bg\celllength{\K@Jw {\K@Ju\K@Ds}{\K@Jr\K@Ds}}\K@bg
+~\cellwidth{\K@Jw {\K@Ju\K@Hp}{\K@Jr\K@Hp}}\K@bg\columndist{\K@Jw {\K@Ju
+~\K@Hz}{\K@Jr\K@Hz}}\K@bg\bracewidth{\K@Jw {\K@Ju\K@Id}{\K@Jr\K@Id}}\K@bk
+~\Diagrampad{\K@Jw {\K@Js\K@Ay}{\K@Jp\K@Ay}}\K@bk\Figurepad{\K@Jw {\K@Js
+~\K@hk}{\K@Jp\K@hk}}\K@bk\Graphpad{\K@Jw {\K@Js\K@hl}{\K@Jp\K@hl}}\K@bg\tpad
+~{\K@Jw {\K@Js\K@Be}{\K@Jp\K@Be}}\K@bg\bpad{\K@Jw {\K@Js\K@Bf}{\K@Jp\K@Bf
+~}}\K@bg\lpad {\K@Jw{\K@Js\K@Bd}{\K@Jp\K@Bd}}\K@bg\rpad {\K@Jw{\K@Js\K@Bg
+~}{\K@Jp\K@Bg}}\K@bg\vpad{\K@Jw {\K@dp=\K@do\K@Js\K@Be\K@do=\K@dp\K@Js\K@Bf
+~}{\K@Jp\K@Be\let\K@Bf\K@Be}}\K@bg\hpad{\K@Jw {\K@dp=\K@do\K@Js\K@Bd\K@do
+~=\K@dp\K@Js\K@Bg}{\K@Jp\K@Bd\let\K@Bg\K@Bd}}\K@bg\framepad{\K@Jw {\K@Js
+~\K@Ci}{\K@Jp\K@Ci}}\K@bg\framerulewidth{\K@Jw {\K@Js\K@Cl}{\K@Jp\K@Cl
+~}}\K@bg\Rulewidth{\K@Jw {\K@Js\K@Dq}{\K@Jp\K@Dq}}\K@bg\Framerulewidth{\K@Jw
+~{\K@Js\K@Cw}{\K@Jp\K@Cw}}\def\K@il{\let\xgrid\K@dm\let\ygrid\K@dn}\def
+~\K@Ae{\let\xunit\K@dm\let\yunit\K@dn}\def\K@Jx#1#2{\ifdim#1<\z@\else#2\fi
+~}\K@bg\xgrid{\K@Jw {\advance\K@do by \K@dm\K@Jx\K@do{\K@dm=\K@do\let\K@Jy
+~\K@co}}{\K@Jx\K@do{\K@dm=\K@do\let\K@Jy\K@co}}}\K@bg\ygrid{\K@Jw {\advance
+~\K@do by \K@dn\K@Jx\K@do{\K@dn=\K@do\let\K@Jz\K@co}}{\K@Jx\K@do{\K@dn
+~=\K@do\let\K@Jz\K@co}}}\K@bg\grid{\K@Jw {\K@dp=\K@do\advance\K@do by \K@dm
+~\K@Jx\K@do{\K@dm=\K@do\let\K@Jy\K@co}\advance\K@dp by \K@dn\K@Jx\K@dp
+~{\K@dn=\K@dp\let\K@Jz\K@co}}{\K@Jx\K@do{\K@dm=\K@do\let\K@Jy\K@co\K@dn
+~=\K@do\let\K@Jz\K@co}}}\def\K@Ka#1#2{\ifdim#1>\z@#2\fi}\K@bg\xunit{\K@Jw
+~{\ifx\K@zx\K@ci\else\advance\K@do by \K@zx\fi\K@Ka\K@do{\K@Jp\K@zx}}{\K@Ka
+~\K@do{\K@Jp\K@zx}}}\K@bg\yunit{\K@Jw {\ifx\K@zz\K@ci\else\advance\K@do by
+~\K@zz\fi\K@Ka\K@do{\K@Jp\K@zz}}{\K@Ka\K@do{\K@Jp\K@zz}}}\K@bg\unit{\K@Jw
+~{\K@dp=\K@do\ifx\K@zx\K@ci\else\advance\K@do by \K@zx\fi\K@Ka\K@do{\K@Jp
+~\K@zx}\ifx\K@zz\K@ci\else\advance\K@dp by \K@zz\fi\K@Ka\K@dp{\edef\K@zz
+~{\the\K@dp}}}{\K@Ka\K@do{\K@Jp\K@zx\let\K@zz\K@zx}}}\K@bg\xscale{\K@cz\let
+~\K@Ji\relax\def\K@Jj{\K@do=\the\K@dr\K@dm\ifdim\K@do<\z@\else\K@dm=\K@do
+~\edef\K@Jy{\the\K@dr}\fi}\K@Iz}\K@bg\yscale{\K@cz\let\K@Ji\relax\def\K@Jj
+~{\K@do=\the\K@dr\K@dn\ifdim\K@do<\z@\else\K@dn=\K@do\edef\K@Jz{\the\K@dr
+~}\fi}\K@Iz}\K@bg\scale{\K@cz\let\K@Ji\relax\def\K@Jj{\K@do=\the\K@dr\K@dm
+~\ifdim\K@do<\z@\else\K@dm=\K@do\K@dn=\the\K@dr\K@dn\edef\K@Jy{\the\K@dr
+~}\let\K@Jz\K@Jy\fi}\K@Iz}\def\K@Kb{\ifnum\K@di>0 \K@Ji\fi}\K@bg\xrange
+~{\K@cz\def\K@Ji{\K@Jq\K@zy\let\K@zx\K@ci}\afterassignment\K@Kb\K@di}\K@bg
+~\yrange{\K@cz\def\K@Ji{\K@Jq\K@Aa\let\K@zz\K@ci}\afterassignment\K@Kb\K@di
+~}\K@bg\range{\K@cz\def\K@Ji{\K@Jq\K@zy\let\K@Aa\K@zy\let\K@zx\K@ci\let
+~\K@zz\K@ci}\afterassignment\K@Kb\K@di}\K@bg\gridgray{\K@cz\let\K@Ji\relax
+~\def\K@Jj{\edef\K@bc{\noexpand\K@Dg{\the\K@dr}}\K@bc\K@Dh}\K@Iz}\K@bm
+~\gridgrey\gridgray\K@bg\graygray{\K@cz\let\K@Ji\relax\def\K@Jj{\edef
+~\K@bc{\noexpand\K@Dg{\the\K@dr}}\K@bc\K@pv}\K@Iz}\K@bm\greygrey\graygray
+~\K@bg\framegray{\K@cz\let\K@Ji\relax\def\K@Jj{\edef\K@bc{\noexpand\K@Dg
+~{\the\K@dr}}\K@bc\K@Kc\ifx\K@Kc\K@ci\let\K@Ck\relax\let\K@Cm\relax\else
+~\edef\K@Ck{\noexpand\K@ha{\K@Kc}}\def\K@Cm{\endgr}\fi}\K@Iz}\K@bm
+~\framegrey\framegray\K@bg\shadegray{\K@cz\let\K@Ji\relax\def\K@Jj{\edef
+~\K@bc{\noexpand\K@Dg{\the\K@dr}}\K@bc\K@Kd\ifx\K@Kd\K@ci\let\K@Cq\relax
+~\let\K@Cr\relax\else\edef\K@Cq{\noexpand\K@ha{\K@Kd}}\def\K@Cr{\endgr}\fi
+~}\K@Iz}\K@bm\shadegrey\shadegray\kuviocs\MinimumCellLength=0pt \K@He\ifx
+~\@@agss@arrsy@@\relax\else\let\A@rightarrow\rightarrow\let\A@leftarrow
+~\leftarrow\let\A@leftrightarrow\leftrightarrow\let\A@leftharpoonup
+~\leftharpoonup\let\A@leftharpoondown\leftharpoondown\let\A@rightharpoonup
+~\rightharpoonup\let\A@rightharpoondown\rightharpoondown\fi\K@bg\latexTo
+~{\font\K@Ke=line10 \def\K@Kf{\smash{\hbox{\kern-4pt\raise\K@vj\hbox{\K@Ke
+~\char"2D}\hskip.5pt}}}\newfill{srightarrow}--\K@Kf\newfill
+~{sleftarrow}\K@Kf--\let\Tofill\srightarrowfill}\K@bk\newfill{\bgroup\K@ez
+~\K@Kg}\def\K@Kg#1{\egroup\K@Kh{#1}}\def\K@Kh#1#2#3#4{\expandafter\def
+~\csname D@@#1fill\endcsname{\m@th\mathord{#2}\mkern-8mu \cleaders\hbox
+~{$\mkern-2mu\mathord{#3}\mkern-2mu$}\hfill\mkern-8mu\mathord
+~{#4}}\expandafter\K@bk\csname#1fill\endcsname{\ifmmode\csname
+~D@@#1fill\endcsname\else $\csname D@@#1fill\endcsname$\fi}}
+\K@ab
+%-----------------------------------------------------------------------------
+\rekuviodef\into{\lhook\joinrel\A@rightarrow}
+\rekuviodef\cdotfill{\cleaders
+ \hbox{$\m@th\mkern1.5mu\mathord\cdot\mkern1.5mu$}\hfill}
+\rekuviolet\cmleftarrowfill\leftarrowfill
+
+\newfill{leftarrow}\A@leftarrow--
+\newfill{rleftarrow}{-\mkern-12mu\A@leftarrow\mkern-5mu}--
+\newfill{Leftarrow}\Leftarrow==
+\newfill{leftharpoonup}\A@leftharpoonup--
+\newfill{leftharpoondown}\A@leftharpoondown--
+\newfill{hookleftarrow}\A@leftarrow-{-\mkern-8mu\rhook}
+\rekuviolet\leftintofill\hookleftarrowfill
+\newfill{lleftarrow}{\A@leftarrow\mkern-13mu\A@leftarrow\mkern-5mu}--
+\newfill{leftepi}{\A@leftarrow\mkern-15mu\A@leftarrow\mkern-3mu}--
+\newfill{rlleftarrow}{-\mkern-12mu\A@leftarrow\mkern-13mu\A@leftarrow
+ \mkern-5mu}--
+\newfill{llleftarrow}{\A@leftarrow\mkern-13mu\A@leftarrow
+ \mkern-13mu\A@leftarrow\mkern-10mu}--
+\newfill{rllleftarrow}{-\mkern-12mu\A@leftarrow\mkern-13mu\A@leftarrow
+ \mkern-13mu\A@leftarrow\mkern-10mu}--
+
+\rekuviolet\cmrightarrowfill\rightarrowfill
+\newfill{rightarrow}--\A@rightarrow
+\newfill{lrightarrow}--{\mkern-5mu\A@rightarrow\mkern-12mu-}
+\newfill{Rightarrow}==\Rightarrow
+\newfill{rightharpoonup}--\A@rightharpoonup
+\newfill{rightharpoondown}--\A@rightharpoondown
+\newfill{hookrightarrow}{\lhook\mkern-8mu-}-\A@rightarrow
+\rekuviolet\rightintofill\hookrightarrowfill
+\newfill{rrightarrow}--{\mkern-5mu\A@rightarrow\mkern-13mu\A@rightarrow}
+\newfill{rightepi}--{\mkern-3mu\A@rightarrow\mkern-15mu\A@rightarrow}
+\newfill{lrrightarrow}--{\mkern-5mu\A@rightarrow\mkern-13mu\A@rightarrow
+ \mkern-12mu-}
+\newfill{rrrightarrow}--{\mkern-10mu\A@rightarrow\mkern-13mu\A@rightarrow
+ \mkern-13mu\A@rightarrow}
+\newfill{lrrrightarrow}--{\mkern-10mu\A@rightarrow\mkern-13mu\A@rightarrow
+ \mkern-13mu\A@rightarrow\mkern-12mu-}
+
+\newfill{relbar}---
+\rekuviolet\linefill\relbarfill
+\newfill{Relbar}===
+\rekuviolet\barfill\Relbarfill
+\newfill{mapsto}{\mapstochar\mkern-5mu-}-\A@rightarrow
+\newfill{leftrightarrow}\A@leftarrow-\A@rightarrow
+\newfill{Leftrightarrow}\Leftarrow=\Rightarrow
+
+\def\kuviojoin{\hbox{$\mkern-8mu$}}
+
+\kuviodef\leftarrowxfill{\leftarrowfill\kuviojoin\relbarfill}
+\kuviodef\leftarrowxxfill{\leftarrowfill\kuviojoin\relbarfill
+ \kuviojoin\relbarfill}
+\kuviodef\xleftarrowxfill{\relbarfill\kuviojoin\leftarrowfill
+ \kuviojoin\relbarfill}
+\kuviodef\leftarrowxxxfill{\leftarrowfill\kuviojoin\relbarfill
+ \kuviojoin\relbarfill\kuviojoin\relbarfill}
+\kuviodef\xxleftarrowxfill{\relbarfill\kuviojoin\relbarfill
+ \kuviojoin\leftarrowfill\kuviojoin\relbarfill}
+
+\kuviodef\rightarrowxfill{\rightarrowfill\kuviojoin\relbarfill}
+\kuviodef\rightarrowxxfill{\rightarrowfill\kuviojoin\relbarfill
+ \kuviojoin\relbarfill}
+\kuviodef\xrightarrowxfill{\relbarfill\kuviojoin\rightarrowfill
+ \kuviojoin\relbarfill}
+\kuviodef\rightarrowxxxfill{\rightarrowfill\kuviojoin\relbarfill
+ \kuviojoin\relbarfill\kuviojoin\relbarfill}
+\kuviodef\xxrightarrowxfill{\relbarfill\kuviojoin\relbarfill
+ \kuviojoin\rightarrowfill\kuviojoin\relbarfill}
+
+\kuviodef\lleftarrowxfill{\lleftarrowfill\kuviojoin\relbarfill}
+\kuviodef\lleftarrowxxfill{\lleftarrowfill\kuviojoin\relbarfill
+ \kuviojoin\relbarfill}
+\kuviodef\xlleftarrowxfill{\relbarfill\kuviojoin\lleftarrowfill
+ \kuviojoin\relbarfill}
+\kuviodef\lleftarrowxxxfill{\lleftarrowfill\kuviojoin\relbarfill
+ \kuviojoin\relbarfill\kuviojoin\relbarfill}
+\kuviodef\xxlleftarrowxfill{\relbarfill\kuviojoin\relbarfill
+ \kuviojoin\lleftarrowfill\kuviojoin\relbarfill}
+
+\kuviodef\rrightarrowxfill{\rrightarrowfill\kuviojoin\relbarfill}
+\kuviodef\rrightarrowxxfill{\rrightarrowfill\kuviojoin\relbarfill
+ \kuviojoin\relbarfill}
+\kuviodef\xrrightarrowxfill{\relbarfill\kuviojoin\rrightarrowfill
+ \kuviojoin\relbarfill}
+\kuviodef\rrightarrowxxxfill{\rrightarrowfill\kuviojoin\relbarfill
+ \kuviojoin\relbarfill\kuviojoin\relbarfill}
+\kuviodef\xxrrightarrowxfill{\relbarfill\kuviojoin\relbarfill
+ \kuviojoin\rrightarrowfill\kuviojoin\relbarfill}
+
+\kuviodef\llleftarrowxfill{\llleftarrowfill\kuviojoin\relbarfill}
+\kuviodef\llleftarrowxxfill{\llleftarrowfill\kuviojoin\relbarfill
+ \kuviojoin\relbarfill}
+\kuviodef\xllleftarrowxfill{\relbarfill\kuviojoin\llleftarrowfill
+ \kuviojoin\relbarfill}
+
+\kuviodef\llleftarrowxxxfill{\llleftarrowfill\kuviojoin\relbarfill
+ \kuviojoin\relbarfill\kuviojoin\relbarfill}
+\kuviodef\xxllleftarrowxfill{\relbarfill\kuviojoin\relbarfill
+ \kuviojoin\llleftarrowfill\kuviojoin\relbarfill}
+
+\kuviodef\rrrightarrowxfill{\rrrightarrowfill\kuviojoin\relbarfill}
+\kuviodef\rrrightarrowxxfill{\rrrightarrowfill\kuviojoin\relbarfill
+ \kuviojoin\relbarfill}
+\kuviodef\xrrrightarrowxfill{\relbarfill\kuviojoin\rrrightarrowfill
+ \kuviojoin\relbarfill}
+\kuviodef\rrrightarrowxxxfill{\rrrightarrowfill\kuviojoin\relbarfill
+ \kuviojoin\relbarfill\kuviojoin\relbarfill}
+\kuviodef\xxrrrightarrowxfill{\relbarfill\kuviojoin\relbarfill
+ \kuviojoin\rrrightarrowfill\kuviojoin\relbarfill}
+
+\rekuviolet\labelstyle\scriptstyle
+\rekuviolet\vertexstyle\displaystyle
+\rekuviolet\diagramdot\bullet
+
+\rekuviodef\Displaybox#1{%
+ \ifvmode
+ \ifinner
+ \box#1%
+ \else
+ \vskip-\lastskip
+ \vskip\baselineskip
+ \box#1%
+ {\advance\parskip by -\baselineskip\vskip-\parskip}%
+ \fi
+ \else
+ \box#1%
+ \fi}
+
+\kuviocs\grid=1cm
+\kuviocs\range=1
+
+\Diagrampad=5pt
+\Figurepad=0pt
+\Graphpad=0pt
+
+\kuviocs\vpad=0pt
+\kuviocs\hpad=0pt
+
+\kuviocs\gridgray=.5
+\kuviocs\framegray=0
+\kuviocs\shadegray=0
+\kuviocs\graygray=.5
+
+\kuviocs\framepad=5pt
+\kuviocs\framerulewidth=.4pt
+\kuviocs\Framerulewidth=.4pt
+\kuviocs\Rulewidth=5pt
+
+\kuviocs\celllength=1cm
+\kuviocs\cellwidth=1cm
+\kuviocs\columndist=15mm
+\kuviocs\bracewidth=1cm
+
+\labelpoint=.5
+\labelpoint{Fillcell}={}
+\labelpoint{Boxcell}={}
+\labelpoint{Rule}={}
+
+\ptpoint=.5
+\ptpoint{Fillcell}={}
+\ptpoint{Boxcell}={}
+\ptpoint{Rule}={}
+
+\labelwidthpad=5pt
+\labelwidthpad{Fillcell}=0pt
+\labelwidthpad{Boxcell}=0pt
+\labelwidthpad{Rule}=0pt
+
+\labelpad=3pt
+\labelpad{Fillcell}=0pt
+\labelpad{Boxcell}=0pt
+\labelpad{Rule}=0pt
+
+\breakpad=2.5pt
+\breakpad{Fillcell}=0pt
+\breakpad{Boxcell}=0pt
+\breakpad{Rule}=0pt
+
+\cellpush=2pt
+\cellpush{Fillcell}=0pt
+\cellpush{Boxcell}=0pt
+\cellpush{Rule}=1pt
+
+\ptpush=0pt
+\ptpush{Fillcell}=0pt
+\ptpush{Boxcell}=0pt
+\ptpush{Rule}=1pt
+
+\atpush=3pt
+\atpush{Fillcell}=0pt
+\atpush{Boxcell}=0pt
+\atpush{Rule}=0pt
+
+\joinpush=-1pt
+\joinpush{Fillcell}=0pt
+\joinpush{Boxcell}=0pt
+\joinpush{Rule}=1pt
+
+\newcell{To}
+\rekuviolet\Tofill\rightarrowfill
+
+\newcell{One}
+\rekuviolet\Onefill\rightarrowfill
+
+\newcell{Bij}
+\rekuviolet\Bijfill\leftrightarrowfill
+
+\newcell{Mapsto}
+\rekuviolet\Mapstofill\mapstofill
+
+\newcell{Into}
+\rekuviolet\Intofill\rightintofill
+
+\newcell{Epi}
+\rekuviolet\Epifill\rightepifill
+
+\newcell{Line}
+\rekuviolet\Linefill\linefill
+
+\newcell{Nul}
+\rekuviolet\Nulfill\hfil
+
+\newcell{Dots}
+\rekuviolet\Dotsfill\cdotfill
+
+\newcell{Two}
+\rekuviolet\Twofill\Rightarrowfill
+\labelpad{Two}=.8pt
+\atpush{Two}=.8pt
+\breakpad{Two}=.8pt
+
+\newcell{Impl}
+\rekuviolet\Implfill\Rightarrowfill
+\labelpad{Impl}=.8pt
+\atpush{Impl}=.8pt
+\breakpad{Impl}=.8pt
+
+\newcell{Bar}
+\rekuviolet\Barfill\barfill
+\labelpad{Bar}=.8pt
+\atpush{Bar}=.8pt
+\breakpad{Bar}=.8pt
+
+\newcell{Null}
+\rekuviolet\Nullfill\hfil
+\labelpad{Null}=.8pt
+\atpush{Null}=.8pt
+\breakpad{Null}=.8pt
+
+\newcell{Eq}
+\rekuviodef\Eqfill{\hfil=\hfil}
+\labelpad{Eq}=.8pt
+\atpush{Eq}=.8pt
+\breakpad{Eq}=.8pt
+
+\newDiagram{Diag}
+\rekuviodef\everyDiag{\kuviocs\flexible\kuviocs\xgrid=0pt}
+
+\newDiagram{Dg}
+\rekuviodef\everyDg{\kuviocs\flexible\kuviocs\xgrid=0pt
+ \kuviocs\ygrid+=-2mm\kuviocs\cellwidth+=3mm
+ \kuviocs\bracewidth+=-2.5mm}
+
+\newDiagram{Long}
+\rekuviodef\everyLong{\kuviocs\flexible\kuviocs\xgrid=0pt
+ \kuviocs\ygrid+=-5mm\kuviocs\bracewidth+=-2.5mm}
+
+\def\inputarrsy{\input arrsy\relax}
+\rekuviodefine{\long\def}\arrsy{
+ \inputarrsy
+
+ \rekuviolet\epi\rightepi
+ \rekuviolet\mono\rightmono
+
+ \newfill{Leftharpoonup}\A@Leftharpoonup==
+ \rekuviolet\Leftparafill\Leftharpoonupfill
+ \newfill{Leftharpoondown}\A@Leftharpoondown==
+ \rekuviolet\Leftallofill\Leftharpoondownfill
+
+ \newfill{Rightharpoonup}==\A@Rightharpoonup
+ \rekuviolet\Rightallofill\Rightharpoonupfill
+ \newfill{Rightharpoondown}==\A@Rightharpoondown
+ \rekuviolet\Rightparafill\Rightharpoondownfill
+
+ \newfill{Lleftarrow}\A@Lleftarrow\A@Rrelbar\A@Rrelbar
+ \newfill{Rrightarrow}\A@Rrelbar\A@Rrelbar\A@Rrightarrow
+ \newfill{Rrelbar}\A@Rrelbar\A@Rrelbar\A@Rrelbar
+ \rekuviolet\equivfill\Rrelbarfill
+ \newfill{Lleftrightarrow}\A@Lleftarrow\A@Rrelbar\A@Rrightarrow
+
+ \newfill{dashbar}{\mkern8mu}\A@dashbar{\mkern8mu}
+ \rekuviolet\dashfill\dashbarfill
+ \newfill{rightdash}{\mkern8mu}\A@dashbar\A@shortrightarrow
+ \newfill{leftdash}\A@shortleftarrow\A@dashbar{\mkern8mu}
+
+ \newfill{rightepi}--\A@rightepi
+ \newfill{leftepi}\A@leftepi--
+ \newfill{rightmono}{\A@rightmonotail\mkern2mu}-\A@rightarrow
+ \newfill{leftmono}\A@leftarrow-{\mkern2mu\A@leftmonotail}
+ \newfill{rightmonotail}{\A@rightmonotail\mkern2mu}--
+ \newfill{leftmonotail}--{\mkern2mu\A@leftmonotail}
+ \newfill{rightiso}{\A@rightmonotail\mkern2mu}-\A@rightepi
+ \newfill{leftiso}\A@leftepi-{\mkern2mu\A@leftmonotail}
+
+ \newfill{rightdashmono}{\A@rightmonotail\mkern2mu}\A@dashbar
+ \A@shortrightarrow
+ \newfill{leftdashmono}\A@shortleftarrow\A@dashbar{\mkern2mu\A@leftmonotail}
+ \newfill{rightdashmonotail}{\A@rightmonotail\mkern2mu}\A@dashbar{\mkern8mu}
+ \newfill{leftdashmonotail}{\mkern8mu}\A@dashbar{\mkern2mu\A@leftmonotail}
+ \newfill{rightdashepi}{\mkern8mu}\A@dashbar
+ {\mkern-2.5mu\A@shortrightarrow\mkern-7.5mu\A@shortrightarrow}
+ \newfill{leftdashepi}{\A@shortleftarrow\mkern-7.5mu\A@shortleftarrow
+ \mkern-2.5mu}\A@dashbar{\mkern8mu}
+ \newfill{rightdashiso}{\A@rightmonotail\mkern4mu}\A@dashbar
+ {\mkern-2.5mu\A@shortrightarrow\mkern-7.5mu\A@shortrightarrow}
+ \newfill{leftdashiso}{\A@shortleftarrow\mkern-7.5mu\A@shortleftarrow
+ \mkern-2.5mu}\A@dashbar{\mkern4mu\A@leftmonotail}
+
+ \newfill{squiggle}{\mkern8mu}\A@squiggle{\mkern8mu}
+
+ \newcell{Allo}
+ \rekuviolet\Allofill\Rightallofill
+ \labelpad{Allo}=.8pt
+ \atpush{Allo}=.8pt
+ \breakpad{Allo}=.8pt
+
+ \newcell{Para}
+ \rekuviolet\Parafill\Rightparafill
+ \labelpad{Para}=.8pt
+ \atpush{Para}=.8pt
+ \breakpad{Para}=.8pt
+
+ \newcell{Three}
+ \rekuviolet\Threefill\Rrightarrowfill
+ \labelpad{Three}=1.5pt
+ \atpush{Three}=1.5pt
+ \breakpad{Three}=1.5pt
+
+ \newcell{Equiv}
+ \rekuviolet\Equivfill\Rrelbarfill
+ \labelpad{Equiv}=1.5pt
+ \atpush{Equiv}=1.5pt
+ \breakpad{Equiv}=1.5pt
+
+ \newcell{Nulll}
+ \rekuviolet\Nulllfill\hfil
+ \labelpad{Nulll}=1.5pt
+ \atpush{Nulll}=1.5pt
+ \breakpad{Nulll}=1.5pt
+
+ \newcell{Dash}
+ \rekuviolet\Dashfill\dashfill
+
+ \newcell{Dashto}
+ \rekuviolet\Dashtofill\rightdashfill
+
+ \newcell{Mono}
+ \rekuviolet\Monofill\rightmonofill
+
+ \newcell{Tail}
+ \rekuviolet\Tailfill\rightmonotailfill
+
+ \newcell{Iso}
+ \rekuviolet\Isofill\rightisofill
+}
+
+\kuviobye
+
+% kuvio.fw: $Revision: 2.8 $
+% COPYRIGHT.fw: $Revision: 1.2 $
+% Diagrams.fw: $Revision: 1.72 $
+% _prepare.fw: $Revision: 2.75 $
+% _parse.fw: $Revision: 1.13 $
+% _process.fw: $Revision: 2.31 $
+% _explode.fw: $Revision: 2.44 $
+% _setnodes.fw: $Revision: 1.26 $
+% _setcells.fw: $Revision: 2.30 $
+% _place.fw: $Revision: 2.51 $
+% _modify.fw: $Revision: 2.47 $
+% _display.fw: $Revision: 1.42 $
+% Cells.fw: $Revision: 1.29 $
+% _cellmod.fw: $Revision: 2.37 $
+% _cellentry.fw: $Revision: 1.45 $
+% _extent.fw: $Revision: 2.10 $
+% _predefined.fw: $Revision: 1.23 $
+% Labelling.fw: $Revision: 2.33 $
+% Registers.fw: $Revision: 2.26 $
+% Fill.fw: $Revision: 1.19 $
+% Arrsy.fw: $Revision: 1.19 $
+% macros.fw: $Revision: 1.15 $
+
+% Tangle completed Mon Feb 19 13:43:03 PST 1996.
+% Mangle completed Mon Feb 19 13:43:15 PST 1996.
diff --git a/macros/generic/diagrams/kuvio/patchlevel_216 b/macros/generic/diagrams/kuvio/patchlevel_216
new file mode 100644
index 0000000000..bc76f37e72
--- /dev/null
+++ b/macros/generic/diagrams/kuvio/patchlevel_216
@@ -0,0 +1 @@
+19 Feb 1996
diff --git a/macros/generic/diagrams/taylor/Borceux-to-Taylor.tex b/macros/generic/diagrams/taylor/Borceux-to-Taylor.tex
new file mode 100644
index 0000000000..d48eef3845
--- /dev/null
+++ b/macros/generic/diagrams/taylor/Borceux-to-Taylor.tex
@@ -0,0 +1,796 @@
+\message{Partial emulation of Francis Borceux's diagrams using...............}
+% you need Paul Taylor's commutative diagrams package loaded as well.
+\input diagrams
+\message{<Emulation (PT) version 0.21, 16 June 1994>}
+
+% The macro names have been taken from Francis Borceux's "diagram.tex"
+% and replaced with equivalent commands in Paul Taylor's package.
+
+% The "ternary" (4x2), curved, multiple and free arrows have not yet
+% been implemented. To do so requires an option to be added to PT's
+% diagrams which, it is intended, will be in the next version.
+
+% Some of these commands can of course be implemented essentially by
+% copying FB's macros. You can do this if you want to, but I shall not
+% do it myself, distribute your code or guarantee that it will work
+% in future.
+
+% If you want to add commands which do have translations, please send
+% them to me, accompanied by a test file which exercises them. Please
+% test it with both FB's macros and the emulation. Your contributions
+% will then be included in this file, with acknowledgement.
+
+% The commands below are terminated with "\relax". This is to ensure
+% that anything that follows is printed afterwards instead of being
+% interpreted as a label or optional argument. DO NOT MAKE A HABIT OF
+% PUTTING \relax AFTER ARROW COMMANDS. If anything follows a horizontal
+% arrow within a cell, the "through" feature is disabled, so the filler
+% is printed in two parts instead of one. When the filler is made from
+% repeated components, such as those with double shafts, this may result
+% in gaps if the arrow is too short.
+
+% In this version all size parameters are ignored. We ought to save the
+% size specified in \DIAGV, and convert that in sized diagonals to cells.
+
+% If you think this emulation was worth the effort, please tell me!
+% (Otherwise I shaln't bother to maintain it.)
+
+%***************************************************************************
+
+%% crossed LaTeX arrowheads
+\def\lhxla{\lhla\mkern-3mu\scriptaxis+}%%
+\def\rhxla{\scriptaxis+\mkern-2mu\rhla}%%
+\def\uhxla{\hbox{\uhla\raise-1.5ex\hbox to0pt{\hss$\scriptstyle+$\hss}}}%%
+\def\dhxla{\hbox{\dhla\lower-1ex\hbox to0pt{\hss$\scriptstyle+$\hss}}}%%
+\newarrowhead{+la}\rhxla\lhxla\dhxla\uhxla
+
+\newarrowtail+++++
+
+\newarrow{Into}+--->
+\newarrow{Bi}+---{+la}
+\newarrow{Onto}----{+la}
+
+%\newarrow{To}---->
+%\newarrow{Dotsto}....>
+%\newarrow{Eq}=====
+%\newarrow{Mono}
+%\newarrow{ar}---->
+%\newarrow{dotar}....>
+%\newarrow{mono}+--->
+%\newarrow{epi}----{+>}
+%\newarrow{bimo}+---{+la}
+%\newarrow{iso}--{iso}->
+
+% It would be better to define \newarrow's with names like FBar, FBmono, etc
+
+% nohcheck allows arrows in text (ie not maths) mode, amongst other things.
+% The assumption is that you start off with a correct FB diagram; in this
+% case you don't want extra &s being inserted!
+% 2620000sp is approx 40pt (4em at 10pt size)
+\diagramstyle[heads=LaTeX,nohcheck,size=2620000sp]
+
+% This was for debugging, to list the commands as they're defined.
+%\let\ddef\def
+%\ddef\zdef#1{\message{\string#1^^J}\ddef#1}
+%\let\def\zdef
+
+% The begin/end diagram commands.
+\def\DIAG#1{\begin{diagram}[]\relax#1\relax}
+\def\DIAGV#1#2{\dimen0=#1\DiagramCellHeight\CellSize=.01\dimen0
+ \begin{diagram}[]\relax#2\relax}
+\def\diag{\relax\end{diagram}}
+
+% \diagv{t}{l}{b} prints the last item of the diagram and
+% adds a t points extra space at the top of the diagram
+% adds a l points extra space at the left of the diagram
+% adds a b points extra space at the bottom of the diagram
+\def\diagv#1#2#3{\relax\end{diagram}}% currently ignored.
+
+% Overprint, next cell & next line commands
+\def\n#1{&#1}
+\def\nn#1{\\#1}
+\def\cross#1#2{\relax#1\relax#2\relax}
+
+% Make the next arrow bold.
+\def\B{\csname diagramstyle\endcsname[thick]}
+
+% Not implemented.
+\def\movename#1#2#3{#1}
+\def\com{}
+
+% commutative diagram symbol
+%\newcommand{\com}{\begin{picture}(12,8)%
+%\put(6,4){\oval(8,8)[b]}\put(6,4){\oval(8,8)[r]}%
+%\put(6,8){\vector(-1,0){2}}\end{picture}}%
+
+\def\adj{\mbox{$\dashv$}}
+
+% Natural transformations
+\def\nat{\pile{\rTo\\\Downarrow\\\rTo}}
+
+\def\Nat#1#2#3{\pile{\rTo^{#1\qquad}\\
+ \Downarrow{\scriptstyle#2}\\
+ \rTo^{#3\quad}}}
+
+\def\binat{\pile{\rTo\\\Downarrow\\\rTo\\\Downarrow\\\rTo}}
+
+\def\Binat#1#2#3#4#5{\pile{\rTo^{#1\qquad}\\
+ \Downarrow{\scriptstyle#2}\\
+ \rTo^{#3\quad}\\
+ \Downarrow{\scriptstyle#2}\\
+ \rTo^{#3\quad}}}
+
+%***************************************************************************
+% PRIMARY ARROW COMMANDS - FULLY TESTED
+%***************************************************************************
+
+% right-ward in-text arrows
+\def\ar {\rTo\relax}
+\def\dotar{\rDotsto\relax}
+\def\mono {\rInto\relax}
+\def\epi {\rOnto\relax}
+\def\bimo {\rBi\relax}
+\def\iso {\rTo^{\cong}\relax}
+\def\biar {\pile{\rTo\\\rTo}\relax}
+\def\eql {\rEq\relax}
+\def\adjar{\pile{\lTo\\\rTo}\relax}
+
+% labelled right-ward in-text arrows
+\def\Ar #1{\rTo^{#1}\relax}
+\def\Dotar#1{\rDotsto^{#1}\relax}
+\def\Mono #1{\rInto^{#1}\relax}
+\def\Epi #1{\rOnto^{#1}\relax}
+\def\Bimo #1{\rBi^{#1}\relax}
+\def\Iso #1{\rTo^{{\cong}{#1}}\relax}
+\def\Biar #1#2{\pile{\rTo^{#1}\\\rTo_{#2}}\relax}
+%\def\Eql #1{\rEq^{#1}\relax}
+\def\Adjar#1#2{\pile{\lTo^{#1}\\\rTo_{#2}}\relax}
+
+% left-ward in-text arrows
+\def\bkar {\lTo\relax}
+\def\bkdotar{\lDotsto\relax}
+\def\bkmono {\lInto\relax}
+\def\bkepi {\lOnto\relax}
+\def\bkbimo {\lBi\relax}
+\def\bkiso {\lTo^{\cong}\relax}
+\def\bkbiar {\pile{\lTo\\\lTo}\relax}
+\def\bkeql {\lEq\relax}
+\def\bkadjar{\pile{\rTo\\\lTo}\relax}
+
+% labelled left-ward in-text arrows
+\def\Bkar #1{\lTo^{#1}\relax}
+\def\Bkdotar#1{\lDotsto^{#1}\relax}
+\def\Bkmono #1{\lInto^{#1}\relax}
+\def\Bkepi #1{\lOnto^{#1}\relax}
+\def\Bkbimo #1{\lBi^{#1}\relax}
+\def\Bkiso #1{\lTo^{{\cong}{#1}}\relax}
+\def\Bkbiar #1#2{\pile{\lTo^{#1}\\\lTo_{#2}}\relax}
+%\def\Bkeql #1{\lEq^{#1}\relax}
+\def\Bkadjar#1#2{\pile{\rTo^{#1}\\\lTo_{#2}}\relax}
+
+% east-ward diagram arrows
+\def\ear {\rTo\relax}
+\def\edotar{\rDotsto\relax}
+\def\emono {\rInto\relax}
+\def\eepi {\rOnto\relax}
+\def\ebimo {\rBi\relax}
+\def\eiso {\rTo^{\cong}\relax}
+\def\ebiar {\pile{\rTo\\\rTo}\relax}
+\def\eeql {\rEq\relax}
+\def\eadjar{\pile{\lTo\\\rTo}\relax}
+
+% labelled east-ward diagram arrows
+\def\Ear #1{\rTo^{#1}\relax}
+\def\Edotar#1{\rDotsto^{#1}\relax}
+\def\Emono #1{\rInto^{#1}\relax}
+\def\Eepi #1{\rOnto^{#1}\relax}
+\def\Ebimo #1{\rBi^{#1}\relax}
+\def\Eiso #1{\rTo^{{\cong}{#1}}\relax}
+\def\Ebiar #1#2{\pile{\rTo^{#1}\\\rTo_{#2}}\relax}
+%\def\Eeql #1{\rEq^{#1}\relax}
+\def\Eadjar#1#2{\pile{\lTo^{#1}\\\rTo_{#2}}\relax}
+
+% labelled east-ward diagram arrows
+\def\eaR #1{\rTo_{#1}\relax}
+\def\edotaR#1{\rDotsto_{#1}\relax}
+\def\emonO #1{\rInto_{#1}\relax}
+\def\eepI #1{\rOnto_{#1}\relax}
+\def\ebimO #1{\rBi_{#1}\relax}
+\def\eisO #1{\rTo_{{\cong}{#1}}\relax}
+%\def\ebiaR #1#2{\pile{\rTo_{#1}\\\rTo_{#2}}\relax}
+%\def\eeqL #1{\rEq_{#1}\relax}
+%\def\eadjaR#1#2{\pile{\lTo_{#1}\\\rTo_{#2}}\relax}
+
+
+% west-ward diagram arrows
+\def\war {\lTo\relax}
+\def\wdotar{\lDotsto\relax}
+\def\wmono {\lInto\relax}
+\def\wepi {\lOnto\relax}
+\def\wbimo {\lBi\relax}
+\def\wiso {\lTo^{\cong}\relax}
+\def\wbiar {\pile{\lTo\\\lTo}\relax}
+\def\weql {\lEq\relax}
+\def\wadjar{\pile{\rTo\\\lTo}\relax}
+
+% labelled west-ward diagram arrows
+\def\War #1{\lTo^{#1}\relax}
+\def\Wdotar#1{\lDotsto^{#1}\relax}
+\def\Wmono #1{\lInto^{#1}\relax}
+\def\Wepi #1{\lOnto^{#1}\relax}
+\def\Wbimo #1{\lBi^{#1}\relax}
+%\def\Wiso #1{\lTo^{{\cong}{#1}}\relax}%%%%%%% FB's has no \cong!!!!!!!!
+\def\Wiso #1{\lTo^{{#1}}\relax}
+\def\Wbiar #1#2{\pile{\lTo^{#1}\\\lTo_{#2}}\relax}
+%\def\Weql #1{\lEq^{#1}\relax}
+\def\Wadjar#1#2{\pile{\rTo^{#1}\\\lTo_{#2}}\relax}
+
+% labelled west-ward diagram arrows
+\def\waR #1{\lTo_{#1}\relax}
+\def\wdotaR#1{\lDotsto_{#1}\relax}
+\def\wmonO #1{\lInto_{#1}\relax}
+\def\wepI #1{\lOnto_{#1}\relax}
+\def\wbimO #1{\lBi_{#1}\relax}
+%\def\wisO #1{\lTo_{{\cong}{#1}}\relax}%%%%%%%%%%%%% FB's has no \cong!!!!!!!
+\def\wisO #1{\lTo_{{#1}}\relax}
+%\def\wbiaR #1#2{\pile{\lTo_{#1}\\\lTo_{#2}}\relax}
+%\def\weqL #1{\lEq_{#1}\relax}
+%\def\wadjaR#1#2{\pile{\rTo_{#1}\\\lTo_{#2}}\relax}
+
+
+% north-ward diagram arrows
+\def\nar {\uTo\relax}
+\def\ndotar{\uDotsto\relax}
+\def\nmono {\uInto\relax}
+\def\nepi {\uOnto\relax}
+\def\nbimo {\uBi\relax}
+\def\niso {\uTo>{\cong}\relax}
+\def\nbiar {\uTo\uTo\relax}
+\def\neql {\uEq\relax}
+\def\nadjar{\uTo\dTo\relax}
+
+% labelled north-ward diagram arrows
+\def\Nar #1{\uTo^{#1}\relax}
+\def\Ndotar#1{\uDotsto^{#1}\relax}
+\def\Nmono #1{\uInto^{#1}\relax}
+\def\Nepi #1{\uOnto^{#1}\relax}
+\def\Nbimo #1{\uBi^{#1}\relax}
+\def\Niso #1{\uTo<{#1}>{\cong}\relax}
+\def\Nbiar #1#2{uTo^{#1}\uTo_{#2}\relax}
+%\def\Neql #1{\uEq^{#1}\relax}
+\def\Nadjar#1#2{\uTo^{#1}\dTo_{#2}\relax}
+
+% labelled north-ward diagram arrows
+\def\naR #1{\uTo_{#1}\relax}
+\def\ndotaR#1{\uDotsto_{#1}\relax}
+\def\nmonO #1{\uInto_{#1}\relax}
+\def\nepI #1{\uOnto_{#1}\relax}
+\def\nbimO #1{\uBi_{#1}\relax}
+%\def\nisO #1{\uTo_{{\cong}{#1}}\relax}
+%\def\nbiaR #1#2{uTo_{#1}\\\uTo_{#2}\relax}
+%\def\neqL #1{\uEq_{#1}\relax}
+%\def\nadjaR#1#2{\uTo_{#1}\dTo_{#2}\relax}
+
+
+% south-ward diagram arrows
+\def\sar {\dTo\relax}
+\def\sdotar{\dDotsto\relax}
+\def\smono {\dInto\relax}
+\def\sepi {\dOnto\relax}
+\def\sbimo {\dBi\relax}
+\def\siso {\dTo>{\cong}\relax}
+\def\sbiar {\dTo\dTo\relax}
+\def\seql {\dEq\relax}
+\def\sadjar{\dTo\uTo\relax}
+
+% labelled south-ward diagram arrows
+\def\Sar #1{\dTo^{#1}\relax}
+\def\Sdotar#1{\dDotsto^{#1}\relax}
+\def\Smono #1{\dInto^{#1}\relax}
+\def\Sepi #1{\dOnto^{#1}\relax}
+\def\Sbimo #1{\dBi^{#1}\relax}
+\def\Siso #1{\dTo<{#1}>{\cong}\relax}
+\def\Sbiar #1#2{\dTo^{#1}\dTo_{#2}\relax}
+%\def\Seql #1{\dEq^{#1}\relax}
+\def\Sadjar#1#2{\dTo^{#1}\uTo_{#2}\relax}
+
+% labelled south-ward diagram arrows
+\def\saR #1{\dTo_{#1}\relax}
+\def\sdotaR#1{\dDotsto_{#1}\relax}
+\def\smonO #1{\dInto_{#1}\relax}
+\def\sepI #1{\dOnto_{#1}\relax}
+\def\sbimO #1{\dBi_{#1}\relax}
+%\def\sisO #1{\dTo_{{\cong}{#1}}\relax}
+%\def\sbiaR #1#2{\dTo_{#1}\dTo_{#2}\relax}
+%\def\seqL #1{\dEq_{#1}\relax}
+%\def\sadjaR#1#2{\dTo_{#1}\uTo_{#2}\relax}
+
+% east-ward variable-length diagram arrows
+\def\earv #1{\rTo\relax}
+\def\edotarv#1{\rDotsto\relax}
+\def\emonov #1{\rInto\relax}
+\def\eepiv #1{\rOnto\relax}
+\def\ebimov #1{\rBi\relax}
+\def\eisov #1{\rTo^{\cong}\relax}
+\def\ebiarv #1{\pile{\rTo\\\rTo}\relax}
+\def\eeqlv #1{\rEq\relax}
+\def\eadjarv#1{\pile{\lTo\\\rTo}\relax}
+
+% labelled east-ward variable-length diagram arrows
+\def\Earv #1#2{\rTo^{#1}\relax}
+\def\Edotarv#1#2{\rDotsto^{#1}\relax}
+\def\Emonov #1#2{\rInto^{#1}\relax}
+\def\Eepiv #1#2{\rOnto^{#1}\relax}
+\def\Ebimov #1#2{\rBi^{#1}\relax}
+\def\Eisov #1#2{\rTo^{{\cong}{#1}}\relax}
+\def\Ebiarv #1#2#3{\pile{\rTo^{#1}\\\rTo_{#2}}\relax}
+%\def\Eeqlv #1#2{\rEq^{#1}\relax}
+\def\Eadjarv#1#2#3{\pile{\lTo^{#1}\\\rTo_{#2}}\relax}
+
+% labelled east-ward variable-length diagram arrows
+\def\eaRv #1#2{\rTo_{#1}\relax}
+\def\edotaRv#1#2{\rDotsto_{#1}\relax}
+\def\emonOv #1#2{\rInto_{#1}\relax}
+\def\eepIv #1#2{\rOnto_{#1}\relax}
+\def\ebimOv #1#2{\rBi_{#1}\relax}
+\def\eisOv #1#2{\rTo_{{\cong}{#1}}\relax}
+%\def\ebiaRv #1#2#3{\pile{\rTo_{#1}\\\rTo_{#2}}\relax}
+%\def\eeqLv #1#2{\rEq_{#1}\relax}
+%\def\eadjaRv#1#2#3{\pile{\lTo_{#1}\\\rTo_{#2}}\relax}
+
+
+% west-ward variable-length diagram arrows
+\def\warv #1{\lTo\relax}
+\def\wdotarv#1{\lDotsto\relax}
+\def\wmonov #1{\lInto\relax}
+\def\wepiv #1{\lOnto\relax}
+\def\wbimov #1{\lBi\relax}
+\def\wisov #1{\lTo^{\cong}\relax}
+\def\wbiarv #1{\pile{\lTo\\\lTo}\relax}
+\def\weqlv #1{\lEq\relax}
+\def\wadjarv#1{\pile{\rTo\\\lTo}\relax}
+
+% labelled west-ward variable-length diagram arrows
+\def\Warv #1#2{\lTo^{#1}\relax}
+\def\Wdotarv#1#2{\lDotsto^{#1}\relax}
+\def\Wmonov #1#2{\lInto^{#1}\relax}
+\def\Wepiv #1#2{\lOnto^{#1}\relax}
+\def\Wbimov #1#2{\lBi^{#1}\relax}
+\def\Wisov #1#2{\lTo^{{\cong}{#1}}\relax}
+\def\Wbiarv #1#2#3{\pile{\lTo^{#1}\\\lTo_{#2}}\relax}
+%\def\Weqlv #1#2{\lEq^{#1}\relax}
+\def\Wadjarv#1#2#3{\pile{\rTo^{#1}\\\lTo_{#2}}\relax}
+
+% labelled west-ward variable-length diagram arrows
+\def\waRv #1#2{\lTo_{#1}\relax}
+\def\wdotaRv#1#2{\lDotsto_{#1}\relax}
+\def\wmonOv #1#2{\lInto_{#1}\relax}
+\def\wepIv #1#2{\lOnto_{#1}\relax}
+\def\wbimOv #1#2{\lBi_{#1}\relax}
+\def\wisOv #1#2{\lTo_{{\cong}{#1}}\relax}
+%\def\wbiaRv #1#2#3{\pile{\lTo_{#1}\\\lTo_{#2}}\relax}
+%\def\weqLv #1#2{\lEq_{#1}\relax}
+%\def\wadjaRv#1#2#3{\pile{\rTo_{#1}\\\lTo_{#2}}\relax}
+
+
+% north-ward variable-length diagram arrows
+\def\narv #1{\uTo\relax}
+\def\ndotarv#1{\uDotsto\relax}
+\def\nmonov #1{\uInto\relax}
+\def\nepiv #1{\uOnto\relax}
+\def\nbimov #1{\uBi\relax}
+\def\nisov #1{\uTo>{\cong}\relax}
+\def\nbiarv #1{\uTo\uTo\relax}
+\def\neqlv #1{\uEq\relax}
+\def\nadjarv#1{\uTo\dTo\relax}
+
+% labelled north-ward variable-length diagram arrows
+\def\Narv #1#2{\uTo^{#1}\relax}
+\def\Ndotarv#1#2{\uDotsto^{#1}\relax}
+\def\Nmonov #1#2{\uInto^{#1}\relax}
+\def\Nepiv #1#2{\uOnto^{#1}\relax}
+\def\Nbimov #1#2{\uBi^{#1}\relax}
+\def\Nisov #1#2{\uTo<{#1}>{\cong}\relax}
+\def\Nbiarv #1#2#3{\uTo^{#1}\uTo_{#2}\relax}
+%\def\Neqlv #1#2{\uEq^{#1}\relax}
+\def\Nadjarv#1#2#3{\uTo^{#1}\dTo_{#2}\relax}
+
+% labelled north-ward variable-length diagram arrows
+\def\naRv #1#2{\uTo_{#1}\relax}
+\def\ndotaRv#1#2{\uDotsto_{#1}\relax}
+\def\nmonOv #1#2{\uInto_{#1}\relax}
+\def\nepIv #1#2{\uOnto_{#1}\relax}
+\def\nbimOv #1#2{\uBi_{#1}\relax}
+%\def\nisOv #1#2{\uTo_{{\cong}{#1}}\relax}
+%\def\nbiaRv #1#2#3{\uTo_{#1}\uTo_{#2}\relax}
+%\def\neqLv #1#2{\uEq_{#1}\relax}
+%\def\nadjaRv#1#2#3{\uTo_{#1}\dTo_{#2}\relax}
+
+
+% south-ward variable-length diagram arrows
+\def\sarv #1{\dTo\relax}
+\def\sdotarv#1{\dDotsto\relax}
+\def\smonov #1{\dInto\relax}
+\def\sepiv #1{\dOnto\relax}
+\def\sbimov #1{\dBi\relax}
+\def\sisov #1{\dTo>{\cong}\relax}
+\def\sbiarv #1{\dTo\dTo\relax}
+\def\seqlv #1{\dEq\relax}
+\def\sadjarv#1{\dTo\uTo\relax}
+
+% labelled south-ward variable-length diagram arrows
+\def\Sarv #1#2{\dTo^{#1}\relax}
+\def\Sdotarv#1#2{\dDotsto^{#1}\relax}
+\def\Smonov #1#2{\dInto^{#1}\relax}
+\def\Sepiv #1#2{\dOnto^{#1}\relax}
+\def\Sbimov #1#2{\dBi^{#1}\relax}
+\def\Sisov #1#2{\dTo<{#1}>{\cong}\relax}
+\def\Sbiarv #1#2#3{\dTo^{#1}\dTo_{#2}\relax}
+%\def\Seqlv #1#2{\dEq^{#1}\relax}
+\def\Sadjarv#1#2#3{\dTo^{#1}\uTo_{#2}\relax}
+
+% labelled south-ward variable-length diagram arrows
+\def\saRv #1#2{\dTo_{#1}\relax}
+\def\sdotaRv#1#2{\dDotsto_{#1}\relax}
+\def\smonOv #1#2{\dInto_{#1}\relax}
+\def\sepIv #1#2{\dOnto_{#1}\relax}
+\def\sbimOv #1#2{\dBi_{#1}\relax}
+%\def\sisOv #1#2{\dTo_{{\cong}{#1}}\relax}
+%\def\sbiaRv #1#2#3{\dTo_{#1}\dTo_{#2}\relax}
+%\def\seqLv #1#2{\dEq_{#1}\relax}
+%\def\sadjaRv#1#2#3{\dTo_{#1}\uTo_{#2}\relax}
+
+%***************************************************************************
+% THE SECONDARY ARROWS NEED THOROUGH TESTING!
+%***************************************************************************
+
+% north-east-ward diagram arrows
+\def\near {\ruTo\relax}
+\def\nedotar{\ruDotsto\relax}
+\def\nemono {\ruInto\relax}
+\def\neepi {\ruOnto\relax}
+\def\nebimo {\ruBi\relax}
+\def\neiso {\ruTo^{\cong}\relax}
+\def\nebiar {\ruTo\ruTo\relax}
+\def\neeql {\ruEq\relax}
+\def\neadjar{\ldTo\ruTo\relax}
+
+% labelled north-east-ward diagram arrows
+\def\Near #1{\ruTo^{#1}\relax}
+\def\Nedotar#1{\ruDotsto^{#1}\relax}
+\def\Nemono #1{\ruInto^{#1}\relax}
+\def\Neepi #1{\ruOnto^{#1}\relax}
+\def\Nebimo #1{\ruBi^{#1}\relax}
+\def\Neiso #1{\ruTo^{{\cong}{#1}}\relax}
+\def\Nebiar #1#2{\ruTo^{#1}\ruTo_{#2}\relax}
+%\def\Neeql #1{\ruEq^{#1}\relax}
+\def\Neadjar#1#2{\ldTo^{#1}\ruTo_{#2}\relax}
+
+% labelled north-east-ward diagram arrows
+\def\neaR #1{\ruTo_{#1}\relax}
+\def\nedotaR#1{\ruDotsto_{#1}\relax}
+\def\nemonO #1{\ruInto_{#1}\relax}
+\def\neepI #1{\ruOnto_{#1}\relax}
+\def\nebimO #1{\ruBi_{#1}\relax}
+%\def\neisO #1{\ruTo_{{\cong}{#1}}\relax}
+%\def\nebiaR #1#2{\ruTo_{#1}\ruTo_{#2}\relax}
+%\def\neeqL #1{\ruEq_{#1}\relax}
+%\def\neadjaR#1#2{\ldTo_{#1}\ruTo_{#2}\relax}
+
+
+% north-west-ward diagram arrows
+\def\nwar {\luTo\relax}
+\def\nwdotar{\luDotsto\relax}
+\def\nwmono {\luInto\relax}
+\def\nwepi {\luOnto\relax}
+\def\nwbimo {\luBi\relax}
+\def\nwiso {\luTo^{\cong}\relax}
+\def\nwbiar {\luTo\luTo\relax}
+\def\nweql {\luEq\relax}
+\def\nwadjar{\luTo\rdTo\relax}
+
+% labelled north-west-ward diagram arrows
+\def\Nwar #1{\luTo^{#1}\relax}
+\def\Nwdotar#1{\luDotsto^{#1}\relax}
+\def\Nwmono #1{\luInto^{#1}\relax}
+\def\Nwepi #1{\luOnto^{#1}\relax}
+\def\Nwbimo #1{\luBi^{#1}\relax}
+\def\Nwiso #1{\luTo^{{\cong}{#1}}\relax}
+\def\Nwbiar #1#2{\luTo^{#1}\luTo_{#2}\relax}
+%\def\Nweql #1{\luEq^{#1}\relax}
+\def\Nwadjar#1#2{\luTo^{#1}\rdTo_{#2}\relax}
+
+% labelled north-west-ward diagram arrows
+\def\nwaR #1{\luTo_{#1}\relax}
+\def\nwdotaR#1{\luDotsto_{#1}\relax}
+\def\nwmonO #1{\luInto_{#1}\relax}
+\def\nwepI #1{\luOnto_{#1}\relax}
+\def\nwbimO #1{\luBi_{#1}\relax}
+%\def\nwisO #1{\luTo_{{\cong}{#1}}\relax}
+%\def\nwbiaR #1#2{\luTo_{#1}\luTo_{#2}\relax}
+%\def\nweqL #1{\luEq_{#1}\relax}
+%\def\nwadjaR#1#2{\luTo_{#1}\rdTo_{#2}\relax}
+
+
+% south-east-ward diagram arrows
+\def\sear {\rdTo\relax}
+\def\sedotar{\rdDotsto\relax}
+\def\semono {\rdInto\relax}
+\def\seepi {\rdOnto\relax}
+\def\sebimo {\rdBi\relax}
+\def\seiso {\rdTo^{\cong}\relax}
+\def\sebiar {\rdTo\rdTo\relax}
+\def\seeql {\rdEq\relax}
+\def\seadjar{\rdTo\luTo\relax}
+
+% labelled south-east-ward diagram arrows
+\def\Sear #1{\rdTo^{#1}\relax}
+\def\Sedotar#1{\rdDotsto^{#1}\relax}
+\def\Semono #1{\rdInto^{#1}\relax}
+\def\Seepi #1{\rdOnto^{#1}\relax}
+\def\Sebimo #1{\rdBi^{#1}\relax}
+\def\Seiso #1{\rdTo^{{\cong}{#1}}\relax}
+\def\Sebiar #1#2{\rdTo^{#1}\rdTo_{#2}\relax}
+%\def\Seeql #1{\rdEq^{#1}\relax}
+\def\Seadjar#1#2{\rdTo^{#1}\luTo_{#2}\relax}
+
+% labelled south-east-ward diagram arrows
+\def\seaR #1{\rdTo_{#1}\relax}
+\def\sedotaR#1{\rdDotsto_{#1}\relax}
+\def\semonO #1{\rdInto_{#1}\relax}
+\def\seepI #1{\rdOnto_{#1}\relax}
+\def\sebimO #1{\rdBi_{#1}\relax}
+%\def\seisO #1{\rdTo_{{\cong}{#1}}\relax}
+%\def\sebiaR #1#2{\rdTo_{#1}\rdTo_{#2}\relax}
+%\def\seeqL #1{\rdEq_{#1}\relax}
+%\def\seadjaR#1#2{\rdTo_{#1}\luTo_{#2}\relax}
+
+
+% south-west-ward diagram arrows
+\def\swar {\ldTo\relax}
+\def\swdotar{\ldDotsto\relax}
+\def\swmono {\ldInto\relax}
+\def\swepi {\ldOnto\relax}
+\def\swbimo {\ldBi\relax}
+\def\swiso {\ldTo^{\cong}\relax}
+\def\swbiar {\ldTo\ldTo\relax}
+\def\sweql {\ldEq\relax}
+\def\swadjar{\ruTo\ldTo\relax}% ?
+
+% labelled south-west-ward diagram arrows
+\def\Swar #1{\ldTo^{#1}\relax}
+\def\Swdotar#1{\ldDotsto^{#1}\relax}
+\def\Swmono #1{\ldInto^{#1}\relax}
+\def\Swepi #1{\ldOnto^{#1}\relax}
+\def\Swbimo #1{\ldBi^{#1}\relax}
+\def\Swiso #1{\ldTo^{{\cong}{#1}}\relax}
+\def\Swbiar #1#2{\ldTo^{#1}\ldTo_{#2}\relax}
+%\def\Sweql #1{\ldEq^{#1}\relax}
+\def\Swadjar#1#2{\ruTo^{#1}\ldTo_{#2}\relax}% ?
+
+% labelled south-west-ward diagram arrows
+\def\swaR #1{\ldTo_{#1}\relax}
+\def\swdotaR#1{\ldDotsto_{#1}\relax}
+\def\swmonO #1{\ldInto_{#1}\relax}
+\def\swepI #1{\ldOnto_{#1}\relax}
+\def\swbimO #1{\ldBi_{#1}\relax}
+%\def\swisO #1{\ldTo_{{\cong}{#1}}\relax}
+%\def\swbiaR #1#2{\ldTo_{#1}\ldTo_{#2}\relax}
+%\def\sweqL #1{\ldEq_{#1}\relax}
+%\def\swadjaR#1#2{\ruTo_{#1}\ldTo_{#2}\relax}% ?
+
+% secondary variable-length diagram arrows
+\def\nwarv#1{\luTo\relax}%
+\def\nearv#1{\ruTo\relax}%
+\def\swarv#1{\ldTo\relax}%
+\def\searv#1{\rdTo\relax}%
+
+% labelled secondary variable-length diagram arrows
+\def\nwaRv#1#2{\luTo^{#1}\relax}%
+\def\neaRv#1#2{\ruTo^{#1}\relax}%
+\def\swaRv#1#2{\ldTo^{#1}\relax}%
+\def\seaRv#1#2{\rdTo^{#1}\relax}%
+\def\Nwarv#1#2{\luTo^{#1}\relax}%
+\def\Nearv#1#2{\ruTo^{#1}\relax}%
+\def\Swarv#1#2{\ldTo^{#1}\relax}%
+\def\Searv#1#2{\rdTo^{#1}\relax}%
+
+% curved arrows second argument is length
+\def\Necurve#1#2{\uTo^{#1}\relax}
+\def\Nwcurve#1#2{\uTo^{#1}\relax}
+\def\Securve#1#2{\dTo^{#1}\relax}
+\def\Swcurve#1#2{\dTo^{#1}\relax}
+\def\Encurve#1#2{\rTo^{#1}\relax}
+\def\Escurve#1#2{\rTo^{#1}\relax}
+\def\Wncurve#1#2{\lTo^{#1}\relax}
+\def\Wscurve#1#2{\lTo^{#1}\relax}
+
+%***************************************************************************
+% THE TERNARY ARROWS ARE NOT CORRECTLY PLACED!
+%***************************************************************************
+
+% ternary arrows --- MISPLACED!
+\def\nnwar{\luTo[diagonalbase=(1,2)](2,4)\relax}
+\def\nnear{\ruTo[diagonalbase=(1,2)](2,4)\relax}
+\def\wnwar{\luTo[diagonalbase=(2,1)](4,2)\relax}
+\def\enear{\ruTo[diagonalbase=(2,1)](4,2)\relax}
+\def\sswar{\ldTo[diagonalbase=(1,2)](2,4)\relax}
+\def\ssear{\rdTo[diagonalbase=(1,2)](2,4)\relax}
+\def\wswar{\ldTo[diagonalbase=(2,1)](4,2)\relax}
+\def\esear{\rdTo[diagonalbase=(2,1)](4,2)\relax}
+
+% labelled ternary arrows --- MISPLACED!
+\def\Nnwar#1{\luTo[diagonalbase=(1,2)](2,4)^{#1}\relax}
+\def\Nnear#1{\ruTo[diagonalbase=(1,2)](2,4)^{#1}\relax}
+\def\Wnwar#1{\luTo[diagonalbase=(2,1)](4,2)^{#1}\relax}
+\def\Enear#1{\ruTo[diagonalbase=(2,1)](4,2)^{#1}\relax}
+\def\Sswar#1{\ldTo[diagonalbase=(1,2)](2,4)^{#1}\relax}
+\def\Ssear#1{\rdTo[diagonalbase=(1,2)](2,4)^{#1}\relax}
+\def\Wswar#1{\ldTo[diagonalbase=(2,1)](4,2)^{#1}\relax}
+\def\Esear#1{\rdTo[diagonalbase=(2,1)](4,2)^{#1}\relax}
+
+% labelled ternary arrows --- MISPLACED!
+\def\nnwaR#1{\luTo[diagonalbase=(1,2)](2,4)_{#1}\relax}
+\def\nneaR#1{\ruTo[diagonalbase=(1,2)](2,4)_{#1}\relax}
+\def\wnwaR#1{\luTo[diagonalbase=(2,1)](4,2)_{#1}\relax}
+\def\eneaR#1{\ruTo[diagonalbase=(2,1)](4,2)_{#1}\relax}
+\def\sswaR#1{\ldTo[diagonalbase=(1,2)](2,4)_{#1}\relax}
+\def\sseaR#1{\rdTo[diagonalbase=(1,2)](2,4)_{#1}\relax}
+\def\wswaR#1{\ldTo[diagonalbase=(2,1)](4,2)_{#1}\relax}
+\def\eseaR#1{\rdTo[diagonalbase=(2,1)](4,2)_{#1}\relax}
+
+%***************************************************************************
+% THE CURVED ARROWS ARE NOT SUPPORTED!
+%***************************************************************************
+
+% curved arrows
+\def\necurve#1{\uTo^{#1}\relax}
+\def\nwcurve#1{\uTo^{#1}\relax}
+\def\securve#1{\dTo^{#1}\relax}
+\def\swcurve#1{\dTo^{#1}\relax}
+\def\encurve#1{\rTo^{#1}\relax}
+\def\escurve#1{\rTo^{#1}\relax}
+\def\wncurve#1{\lTo^{#1}\relax}
+\def\wscurve#1{\lTo^{#1}\relax}
+
+% The remainder of this file is included so that the original
+% and emulated versions appear to have the same commands in them.
+%
+% missing commands
+%\def\ADJAR#1{}% draws a pair of adjoint arrows of length n units
+%\def\AR#1{}% draws an arrow of length n units
+%\def\BIAR#1{}% draws a pair of arrows of length n units
+%\def\BIMO#1{}% draws a bimorphism of length n units
+%\def\BKADJAR#1{}% draws a pair of adjoint arrows of length n units
+%\def\BKAR#1{}% draws a pointing back arrow of length n units
+%\def\BKBIAR#1{}% draws a pair of pointing back arrows of length n units
+%\def\BKBIMO#1{}% draws a pointing back bimorphism of length n units
+%\def\BKDOTAR#1{}% draws a backward dotted arrow
+%\def\BKEPI#1{}% draws a pointing back epimorphism of length n units
+%\def\BKMONO#1{}% draws a pointing back monomorphism of length n units
+%\def\DOTAR#1{}% draws a dotted arrow of length n units
+%\def\EADJAR#1{}% draws an east pair of adjoint arrows of length n
+%\def\EAR#1{}% draws an east arrow of length n units
+%\def\EBIAR#1{}% draws an east pair of arrows of length n units
+%\def\EBIMO#1{}% draws an east bimorphism of length n units
+%\def\EDOTAR{}% draws a dotted arrow of length n units
+%\def\EEPI#1{}% draws an east epimorphism of length n units
+%\def\EEQL#1{}% draws an east equality of length n units
+%\def\EMONO#1{}% draws an east monomorphism of length n units
+%\def\ENEAR{f}{g}{}% draws a east-north-east arrow with names f, g
+%\def\EPI#1{}% draws an epimorphism of length n units
+%\def\EQL#1{}% draws an equality of length n units
+%\def\ESEAR{f}{g}% draws an east-south-east arrow with names f, g
+%\def\MONO{}%
+%\def\NADJAR#1{}% draws a pair of vertical adjoint arrows of length n pt
+%\def\NAR#1{}% draws a north arrow of length n pt
+%\def\NBIAR#1{}% draws a pair of north arrows of length n pt
+%\def\NBIMO#1{}% draws a north bimorphism of length n pt
+%\def\NDOTAR#1{}% draws a north dotted arrow of length n units
+%\def\NEADJAR{}% draws a north-east pair of adjoint arrows
+%\def\NEAR{}% draws a north-east arrow
+%\def\NEARV#1{}% draws a north-east arrow of length nx100 units
+%\def\NEBIAR{}% draws a pair of north-east arrows
+%\def\NEBIMO{}% draws a north-east bimorphism
+%\def\NEDOTAR{}% draws a north-east dotted arrow
+%\def\NEEPI{}% draws a north-east epimorphism
+%\def\NEEQL{}% draws a north-east equality
+%\def\NEMONO{}% draws a north-east monomorphism
+%\def\NEPI#1{}% draws a north epimorphism of length n pt
+%\def\NMONO#1{}% draws a north monomorphism of length n pt
+%\def\NNEAR{f}{g}{}% draws a north-north-east arrow with names f, g
+%\def\NNWAR{f}{g}{}% draws a north-north-west arrow with names f, g
+%\def\NWADJAR{}% draws a north-west pair of adjoint arrows
+%\def\NWAR{}% draws a north-west arrow
+%\def\NWARV#1{}% draws a north-west arrow of length nx100 units
+%\def\NWBIAR{}% draws a pair of north-west arrows
+%\def\NWBIMO{}% draws a north-west bimorphism
+%\def\NWDOTAR{}% draws a north-west dotted arrow
+%\def\NWEPI{}% draws a north-west epimorphism
+%\def\NWMONO{}% draws a north-west monomorphism
+%\def\SADJAR#1{}% draws a pair of vertical adjoint arrows of length n units
+%\def\SAR#1{}% draws a south arrow of length n units
+%\def\SBIAR#1{}% draws a pair of south arrows of length n units
+%\def\SBIMO#1{}% draws a south bimorphism of length n units
+%\def\SDOTAR#1{}% draws a south dotted arrow of length n units
+%\def\SEADJAR{}% draws a south-east pair of adjoint arrows
+%\def\SEAR{}% draws a south-east arrow
+%\def\SEARV#1{}% draws a south-east arrow of length nx100 units
+%\def\SEBIAR{}% draws a pair of south-east arrows
+%\def\SEBIMO{}% draws a south-east bimorphism
+%\def\SEDOTAR{}% draws a south-east dotted arrow
+%\def\SEEPI{}% draws a south-east epimorphism
+%\def\SEEQL{}% draws a south-east equality
+%\def\SEMONO{}% draws a south-east monomorphism
+%\def\SEPI#1{}% draws a south epimorphism of length n units
+%\def\SEQL#1{}% draws a vertical equality of length n units
+%\def\SMONO#1{}% draws a south monomorphism of length n units
+%\def\SSEAR{f}{g}{}% draws a south-south-east arrow with names f, g
+%\def\SSWAR{f}{g}{}% draws a south-south-west arrow with names f, g
+%\def\SWADJAR{}% draws a south-west pair of adjoint arrows
+%\def\SWAR{}% draws a south-west arrow
+%\def\SWARV#1{}% draws a south-west arrow of length nx100 units
+%\def\SWBIAR{}% draws a pair of south-west arrows
+%\def\SWBIMO{}% draws a south-west bimorphism
+%\def\SWDOTAR{}% draws a south-west dotted arrow
+%\def\SWEPI{}% draws a south-west epimorphism
+%\def\SWMONO{}% draws a south-west monomorphism
+%\def\WADJAR#1{}% draws a pair of adjoint arrows of length n units
+%\def\WAR#1{}% draws a pointing back arrow of length n units
+%\def\WBIAR#1{}% draws a pair of pointing back arrows of length n units
+%\def\WBIMO#1{}% draws a pointing back bimorphism of length n units
+%\def\WDOTAR{}% draws a dotted arrow of length n units
+%\def\WEPI#1{}% draws a pointing back epimorphism of length n units
+%\def\WMONO#1{}% draws a pointing back monomorphism of length n units
+%\def\WNWAR{f}{g}% draws a west-north-west arrow with names f, g
+%\def\WSWAR{f}{g}% draws a west-south-west arrow with names f, g
+%
+%\newcount\ARROW{}%
+%\newcount\ARROWLENGTH{}%
+%\newcount\COLUMN{}%
+%\newcount\LINE{}%
+%\newcount\NUMBER{}%
+%\newcount\NUMBEROFDOTS{}%
+%\newcount\SCALE{}%
+%\newcount\SOURCE{}%
+%\newcount\TARGET
+%\newcount\WIDTH
+%\newskip\firstitem
+%\newskip\itemlength
+%\newskip\seconditem
+%
+%\def\Freear{}%
+%\def\Hbicase{}%
+%\def\Hcase{}%
+%\def\N{}%
+%\def\Tbicase{}%
+%\def\Tcase{}%
+%\def\Vbicase{}%
+%\def\Vcase{}%
+%\def\changecounters{}%
+%\def\conclude{}%
+%\def\crosslength{}%
+%\def\fdbicase{}%
+%\def\fdcase{}%
+%\def\freear{}%
+%\def\hbicase{}%
+%\def\hcasE{}%
+%\def\hcase{}%
+%\def\initialize{}%
+%\def\lowername{}%
+%\def\movearrow{}%
+%\def\movevertex{}%
+%\def\sdbicase{}%
+%\def\sdcase{}%
+%\def\tbicase{}%
+%\def\tcase{}%
+%\def\tlowername{}%
+%\def\truex{}%
+%\def\truey{}%
+%\def\truez{}%
+%\def\vbicase{}%
+%\def\vcasE{}%
+%\def\vcase{}%
+%
+%
+%\let\def\ddef\bye \ No newline at end of file
diff --git a/macros/generic/diagrams/taylor/V3,90.tex b/macros/generic/diagrams/taylor/V3,90.tex
new file mode 100644
index 0000000000..b5b5223039
--- /dev/null
+++ b/macros/generic/diagrams/taylor/V3,90.tex
@@ -0,0 +1,1908 @@
+% mangletex (24 Nov 1995) run at 16:49 BST Sunday 11 April 2004
+\message{<Paul Taylor's commutative diagrams, version 3.90, 11 April 2004>}%
+%%
+\message{#===============================================================#}%
+\message{........PostScript mode (dvips) is now the default...............}%
+\message{(DVI mode has not been supported since 1992 and produces inferior}%
+\message{results which are completely unsuitable for publication. However,}%
+\message{if you really still need it, read the manual for how to get it.)}%
+\message{#===============================================================#}%
+%%
+%% This code runs the LaTeX \ProvidesPackage command iff it is defined.
+%% included at the request of Michael Downes <mjd@ams.org> March 2002.
+%% Put \listfiles in your LaTeX preamble to see the effect.
+\expandafter\ifx\csname ProvidesPackage\endcsname\relax\toks0=\expandafter{%
+\fi\ProvidesPackage{diagrams}[2004/04/11 v3.90 Paul Taylor's commutative
+diagrams]%%
+\toks0=\bgroup}%%
+%%======================================================================%
+%% TeX macros for drawing category-theoretic diagrams %
+%% %
+%% Paul Taylor %
+%% %
+%% www.ctan.org/tex-archive/macros/generic/diagrams/taylor %
+%% www.cs.man.ac.uk/~pt/diagrams %
+%% %
+%% PLEASE READ THE MANUAL! %
+%% %
+%% Please ensure that you are registered with me as a user so that %
+%% you can be informed of future releases. Any electronic mail %
+%% message with "commutative" or "diagram" in the subject line %
+%% (such as your request for the package, a question about it, or %
+%% even an otherwise blank message) automatically registers you. %
+%% %
+%% %
+%% CONTENTS: %
+%% (O) corruption-sensitive hacks (to approx line 328) %
+%% Arrow components & commands - starts approx line 1240 %
+%% (22) auxillary macros for adjustment of components %
+%% (23) bits of arrows (\rhvee etc) %
+%% (24) arrow commands (\rTo etc) %
+%% (25) miscellaneous %
+%% Apart from these five sections, the rest is intended to be totally %
+%% meaningless in the undocumented version, which is approximately %
+%% 1910 lines long. Please do not waste trees by printing it out. %
+%% %
+%% COPYRIGHT NOTICE: %
+%% This package may be copied and used freely for any academic %
+%% (not commercial or military) purpose, on condition that it %
+%% is not altered in any way, and that an acknowledgement is %
+%% included in any published work making substantial use of it. %
+%% %
+%% IT IS SUPPLIED "AS IS", WITHOUT WARRANTY, EXPRESS OR IMPLIED. %
+%% %
+%% If you are doing something where mistakes cost money (or where %
+%% success brings financial profit) then you must use commercial %
+%% software, not this package. In any case, please remember to %
+%% keep several backup copies of all files, and check everything %
+%% visually before sending final copy to the publishers. %
+%% %
+%% You may use this package as a (substantial) aid to writing an %
+%% academic research or text book on condition that %
+%% (i) you contact me at a suitable time to ensure that you have %
+%% an up-to-date version (and any infelicities can be fixed), %
+%% (ii) you send me a copy of the book when it's published. %
+%% %
+%% HISTORY %
+%% 3.90 Released 11 April 2004 %
+%% use PostScript=Rokicki not pure DVI by default %
+%% 3.89 Released 7 July 2002 %
+%% Added support for pdftex, which is recognised automatically. %
+%% 3.88 Released 1 September 2000 %
+%% Square hook tail: \newarrow{SquareInto}{sqhook}---> %
+%% 3.87 Released 1 September 1999 %
+%% This version was used for the final 1200dpi PS copy of my book %
+%% ``Practical Foundations of Mathematics'' (Cambridge Univ Press) %
+%% see http://www.dcs.qmw.ac.uk/~pt/Practical_Foundations %
+%% 3.86 Released 1 September 1998 %
+%% New options hug and nohug in PostScript mode: [PS,nohug] uses %
+%% PS for the arrows without rotating the labels, but the way of %
+%% calculating the actual position of these horizontal labels on %
+%% will remain subject to alteration for some period of time --- %
+%% please send me examples if you feel that adjustment is needed. %
+%% %
+%% Suppress indentation of following text (due to LaTeX change) %
+%% Mangle \left@label and \right@label (conflict with Elsevier). %
+%% midvshaft and snake for vertical arrows %
+%% New option [gap=width] (default=shortfall) to use instead of %
+%% ~{\;} on horizontals and PS diagonals, as this caused ^ and _ %
+%% labels to be moved too far away from the shaft. %
+%% Added >-> and <-< heads and tails, same as >> and << but the %
+%% shaft goes *through* the extra arrowhead. %
+%% 3.85 Released 20 August 1997 %
+%% New option [crab=distance] shifts horizontals and PS diagonals %
+%% transversally by the specified distance (positive=upward). %
+%% New option [snake=distance] shifts midshaft horizontals and %
+%% PS diagonals longitudinally by the specified distance. %
+%% New option [leftflush], like [flushleft] but reckons alignment %
+%% from multiple verticals, or from text if there's no vertical. %
+%% Most of the history has been suppressed from the user version. %
+%% 3.83 Released 18 May 1995 %
+%% "dotted" option (set dot filler on maps) %
+%% Parallel maps (\pile) outside diagrams stretch correctly. %
+%% Option "LaTeXeqno" uses LaTeX's equation number and style %
+%% for "eqno"; LaTeX's \label command picks this up. %
+%% Suppress warnings & 2nd pass errors with "silent" option. %
+%% 3.81 Second alpha release 18 July 1994 %
+%% \overprint{text} sets text in maths and overprints it in the %
+%% current cell, centered in the column irrespective of other stuff%
+%% "repositionpullbacks" option uses this for \SEpbk etc %
+%% \newdiagramgrid declaration, grid option and pentagon grid. %
+%% 3.80 Alpha release for adjusted diagonals 15 July 1994. %
+%% Introduced landscape and portrait options. %
+%% Diagonals adjusted to meet their endpoints, at last!!!! %
+%% 3.28 Released 30 November 1993 %
+%% Peter Freyd's \puncture symbol provided. %
+%% 3.25 Released 30 January 1993 %
+%% LaTeX heads made default (unless \tenln undefined, when vee) %
+%% Circle, cross, little vee, little black triangle heads. %
+%% First-use warning when defaulted diagonal components are used. %
+%% AMSTEX emulation - works at least when amstex not present. %
+%% 3.24 Release 7 Sept 1992 advertised to users. %
+%% PostScript option introduced: %
+%% LaTeX, vee, curlyvee, triangle & blacktriangle heads & tails %
+%% TPIC option introduced as an alternative to \LaTeX@make@line. %
+%% Postscript arrows (basic code). %
+%% Implemented \newarrow \newarrowhead etc. %
+%% Horizontal arrows outside diagram can stretch by wordspacing. %
+%% Added < and > for labels on left and right of arrow; %
+%% 3.16 (20.7.90) as mass mailed; only have mangled version %
+%% -- all following version numbers are post-facto -- %
+%% 3 (Jan 90) stretching vertical arrows %
+%% 2 (Sept 89) horizontals stretch to objects; "superscript" labels %
+%% 1 (1987) horizontal arrows stretch to edge of cell %
+%% 0 (1986) implementation of Knuth's TeXercise 18.46 for my thesis %
+%%======================================================================%
+
+%%======================================================================%
+%% %
+%% (1) CORRUPTION-SENSITIVE HACKS %
+%% %
+%%======================================================================%
+
+%% CORRUPTION & \catcode WARNING
+
+%% BITNET (IBM) machines may corrupt certain important characters
+%% in transmission by electronic mail:
+%% 0123456789=digits, abcdefghijklmnopqrstuvwxyz=lowers,
+%% ABCDEFGHIJKLMNOPQRSTUVWXYZ=uppers, @=at (internal names),
+%% {}=curly braces (grouping), \=backslash (keywords),
+%% %=percent (comment), #=hash/sharp (argument), +=plus, -=minus,
+%% <>=angle brackets (relations \ifnum,\ifdim), ==equals,
+%% ,=comma, .=dot, :=colon, ;=semicolon, =space
+%% $=dollar (maths) is only used in the "bits of maps" section
+
+%% The following characters are marked by a comment including the word "ASCII",
+%% except in comments and messages:
+%% &=and (alignment), ~=tilde, |=vertical, []=square brackets,
+%% ^=caret (superscript), _=underline (subscript),
+%% `=grave/backquote (catcodes), '=acute/single quote (octal),
+%% "=double quote (hex), ()=round brackets,
+%% /=slash, ?=query, !=pling/bang,
+
+%% The \catcode's marked * are assumed for reading this file:
+%% \=0* {=1* }=2* $=3 &=4 return=5* #=6 ^=7 _=8 ignored=9*
+%% space=10* letter=11* other=12 active=13 %=14* invalid=15
+%% If you want to load this package inside Stallman's "texinfo", you must do
+%%% @catcode`@\=0 \catcode`\%=14 \input diagrams \catcode`\%=12 \catcode`\\=13
+%% and then use @diagram @rTo @\ @enddiagram etc. (braces {} stay the same).
+%% Also need @catcode`@&=4.
+
+%%*** You *MUST NOT* use the internal commands (with names beginning \CD@)****
+%% don't load me twice!
+\ifx\diagram\undefined\else\message{WARNING: the \string\diagram\space command
+is already defined and will not be loaded again}\expandafter\endinput\fi
+
+%% make @ letter, saving its old code to restore at the end of this file
+%%% look for this on the last line of the file if you think something's missing!
+%% the other \catcode assignments are to make it work with texinfo.
+\edef\cdrestoreat{%%
+\noexpand\catcode\lq\noexpand\@=\the\catcode\lq\@%%
+\noexpand\catcode\lq\noexpand\#=\the\catcode\lq\#%%
+\noexpand\catcode\lq\noexpand\$=\the\catcode\lq\$%%
+\noexpand\catcode\lq\noexpand\<=\the\catcode\lq\<%%
+\noexpand\catcode\lq\noexpand\>=\the\catcode\lq\>%%
+\noexpand\catcode\lq\noexpand\:=\the\catcode\lq\:%% Johannes L. Braams's
+\noexpand\catcode\lq\noexpand\;=\the\catcode\lq\;%% Babel languages package
+\noexpand\catcode\lq\noexpand\!=\the\catcode\lq\!%% makes these \active.
+\noexpand\catcode\lq\noexpand\?=\the\catcode\lq\?%%
+\noexpand\catcode\lq\noexpand\+=\the\catcode\rq53%
+%% texinfo @+ is @outer@active
+}\catcode\lq\@=11 \catcode\lq\#=6 \catcode\lq\<=12 \catcode\lq\>=12 \catcode
+\rq53=12 \catcode\lq\:=12 \catcode\lq\;=12 \catcode\lq\!=12 \catcode\lq\?=12
+
+%% Change y to n if pool_size in your implementation of TeX is small.
+%% This is reasonable if you have a small ("personal") computer, but if you
+%%% have a sun, dec, hp, ... workstation or a mainframe, complain to your local
+%% system manager and get him/her to install a version of TeX with bigger
+%% parameters. The "hash size" (number of command names) gets you next.
+\ifx\diagram@help@messages\undefined\let\diagram@help@messages y\fi
+
+%% The following macro is used to include literal PostScript commands in the
+%% DVI file for rotation, etc. Since this goes beyond standard TeX, it is
+%%% dependent on the convention used by your local DVI-to-PostScript translator.
+%% Choose whichever line applies to the program used at your site, or, if
+%% yours is not listed, consult the manual, experiment with this macro and
+%% (please) tell me what is needed to make it work.
+%%
+%%
+%%% dvips (Tomas Rokicki, Radical Eye) labrea.stanford.edu /pub/dvips9999.tar.Z
+%% CTAN: dviware/dvips
+\def\cdps@Rokicki#1{\special{ps:#1}}\let\cdps@dvips\cdps@Rokicki\let
+\cdps@RadicalEye\cdps@Rokicki\let\CD@IK\cdps@Rokicki\let\CD@HB\cdps@Rokicki
+%%
+%% I'm not sure that the rest work.
+%%
+%% dvitps (Stephan Bechtolsheim, Integrated Computer Systems)
+%% arthur.cs.purdue.edu /pub/TeXPS-9.99.tar.Z
+\def\cdps@Bechtolsheim#1{\special{dvitps: Literal "#1"}}%
+%% ASCII two dbl quotes
+\let\cdps@dvitps\cdps@Bechtolsheim\let\cdps@IntegratedComputerSystems
+\cdps@Bechtolsheim%%
+%% dvitops (James Clark)
+%% CTAN: dviware/dvitops
+\def\cdps@Clark#1{\special{dvitops: inline #1}}%%
+\let\cdps@dvitops\cdps@Clark%%
+%% OzTeX (Andrew Trevorrow) cannot be used
+\let\cdps@OzTeX\empty\let\cdps@oztex\empty\let\cdps@Trevorrow\empty%%
+%% dvi3ps (Kevin Coombes)
+%% CTAN: dviware/dvi2ps/dvi3ps
+\def\cdps@Coombes#1{\special{ps-string #1}}%%
+%% psprint (Trevorrow) CTAN: dviware/psprint
+%% dvi2ps (Senn) CTAN: dviware/dvi2ps
+%% psdvi (Elwell) CTAN: dviware/dvi2ps/psdvi
+
+\count@=\year\multiply\count@12 \advance\count@\month%%
+\ifnum\count@>24080 %% (August 2006)
+\message{***********************************************************}%%ascii
+\message{! YOU HAVE AN OUT OF DATE VERSION OF COMMUTATIVE DIAGRAMS! *}%%
+\message{! it expired in December 2004 and is time-bombed for January *}%%
+\message{! You may get an up to date version of this package from *}%%ascii
+\message{! ftp://ftp.dcs.qmw.ac.uk/pub/tex/contrib/pt/diagrams/ *}%%
+\message{***********************************************************}%%ascii
+\ifnum\count@>24083 %% (November 2006)
+\errhelp{You may press RETURN and carry on for the time being.}\message{! It
+is embarrassing to see papers in conference proceedings}\message{! and
+journals containing bugs which I had fixed years before.}\message{! It is easy
+to obtain and install a new version, which will}\errmessage{! remain
+compatible with your files. Please get it NOW.}\fi\fi
+
+\def\CD@DE{\global\let}\def\CD@RH{\outer\def}
+
+%% safe names for braces, tab (&) and maths ($), as commands and for messages
+{\escapechar\m@ne\xdef\CD@o{\string\{}\xdef\CD@yC{\string\}}%%
+%%
+%% three ASCII ampersands (ands) (&&&) appear on the next line
+\catcode\lq\&=4 \CD@DE\CD@Q=&\xdef\CD@S{\string\&}%%ascii three ands
+%%
+%% ASCII ^ and _ each appear twice on next line
+%% six ASCII dollars ($$$$$$) appear on the next two lines.
+\catcode\lq\$=3 \CD@DE\CD@k=$\CD@DE\CD@ND=$%%ascii three dollars
+\xdef\CD@nC{\string\$}\gdef\CD@LG{$$}%%ascii three dollars
+%%
+%% two ASCII underlines (__) appear on the next line.
+\catcode\lq\_=8 \CD@DE\CD@lJ=_%%ascii two underlines
+%%
+%% eight ASCII carets (^^^^^^^^) appear on the next three lines.
+\obeylines\catcode\lq\^=7 \CD@DE\@super=^%%ascii two carets
+\ifnum\newlinechar=10 \gdef\CD@uG{^^J}%%ascii two carets
+\else\ifnum\newlinechar=13 \gdef\CD@uG{^^M}%%ascii two carets
+\else\ifnum\newlinechar=-1 \gdef\CD@uG{^^J}%%ascii two carets
+\else\CD@DE\CD@uG\space\expandafter\message{! input error: \noexpand
+\newlinechar\space is ASCII \the\newlinechar, not LF=10 or CR=13.}%%
+\fi\fi\fi}%%
+
+%% avoid using <> (because I personally re-define them to mean \langle\rangle)
+\mathchardef\lessthan=\rq30474 \mathchardef\greaterthan=\rq30476
+
+%% LaTeX line and arrowhead font
+%% the "hit return" comments show up if the font is missing.
+\ifx\tenln\undefined%%
+\font\tenln=line10\relax%% Hit return - who needs diagonals?
+\fi\ifx\tenlnw\undefined\ifx\tenln\nullfont\let\tenlnw\nullfont\else%%
+\font\tenlnw=linew10\relax%% Hit return - who needs diagonals?
+\fi\fi%%
+
+%% report line numbers in TeX3 only
+\ifx\inputlineno\undefined\csname newcount\endcsname\inputlineno\inputlineno
+\m@ne\message{***************************************************}\message{!
+Obsolete TeX (version 2). You should upgrade to *}\message{! version 3, which
+has been available since 1990. *}\message{***********************************%
+****************}\fi
+
+\def\cd@shouldnt#1{\CD@KB{* THIS (#1) SHOULD NEVER HAPPEN! *}}
+
+%% turn round- and square-bracketed arguments into curly-bracketed
+\def\get@round@pair#1(#2,#3){#1{#2}{#3}}%%ascii round brackets ()
+\def\get@square@arg#1[#2]{#1{#2}}%%ascii square brackets []
+\def\CD@AE#1{\CD@PK\let\CD@DH\CD@@E\CD@@E#1,],}%%ascii sq brackets
+\def\CD@m{[}\def\CD@RD{]}\def\commdiag#1{{\let\enddiagram\relax\diagram[]#1%
+\enddiagram}}
+
+%% ASCII open square bracket occurs on next line
+\def\CD@BF{{\ifx\CD@EH[\aftergroup\get@square@arg\aftergroup\CD@YH\else
+\aftergroup\CD@JH\fi}}%%
+\def\CD@CF#1#2{\def\CD@YH{#1}\def\CD@JH{#2}\futurelet\CD@EH\CD@BF}
+
+%% ASCII vertical bar (|) occurs on the next line
+\def\CD@KK{|}
+
+\def\CD@PB{%% arguments to maps inside diagrams
+\tokcase\CD@DD:\CD@y\break@args;\catcase\@super:\upper@label;\catcase\CD@lJ:%
+\lower@label;\tokcase{~}:\middle@label;%%ascii tilde
+\tokcase<:\CD@iF;%%ascii less-than
+\tokcase>:\CD@iI;%%ascii greater-than
+\tokcase(:\CD@BC;%%)%ascii open round bracket
+\tokcase[:\optional@;%%]%ascii open square bracket
+\tokcase.:\CD@JJ;%%ascii dot 12.7.94
+\catcase\space:\eat@space;\catcase\bgroup:\positional@;\default:\CD@@A
+\break@args;\endswitch}
+
+\def\switch@arg{%% arguments to horizontal maps outside diagrams
+\catcase\@super:\upper@label;\catcase\CD@lJ:\lower@label;\tokcase[:\optional@
+;%%]%ascii open square bracket
+\tokcase.:\CD@JJ;%%ascii dot 12.7.94 % ; was : before 15.6.97
+\catcase\space:\eat@space;\catcase\bgroup:\positional@;\tokcase{~}:%
+\middle@label;%%ascii tilde (questionable!)
+\default:\CD@y\break@args;\endswitch}
+
+%% That's as much as you get to read "in clear" - the rest is private!
+
+\let\CD@tJ\relax\ifx\protect\undefined\let\protect\relax\fi\ifx\AtEndDocument
+\undefined\def\CD@PG{\CD@gB}\def\CD@GF#1#2{}\else\def\CD@PG#1{\edef\CD@CH{#1}%
+\expandafter\CD@oC\CD@CH\CD@OD}\def\CD@oC#1\CD@OD{\AtEndDocument{\typeout{%
+\CD@tA: #1}}}\def\CD@GF#1#2{\gdef#1{#2}\AtEndDocument{#1}}\fi\def\CD@ZA#1#2{%
+\def#1{\CD@PG{#2\CD@mD\CD@W}\CD@DE#1\relax}}\def\CD@uF#1\repeat{\def\CD@p{#1}%
+\CD@OF}\def\CD@OF{\CD@p\relax\expandafter\CD@OF\fi}\def\CD@sF#1\repeat{\def
+\CD@q{#1}\CD@PF}\def\CD@PF{\CD@q\relax\expandafter\CD@PF\fi}\def\CD@tF#1%
+\repeat{\def\CD@r{#1}\CD@QF}\def\CD@QF{\CD@r\relax\expandafter\CD@QF\fi}\def
+\CD@tG#1#2#3{\def#2{\let#1\iftrue}\def#3{\let#1\iffalse}#3}\if y%
+\diagram@help@messages\def\CD@rG#1#2{\csname newtoks\endcsname#1#1=%
+\expandafter{\csname#2\endcsname}}\else\csname newtoks\endcsname\no@cd@help
+\no@cd@help{See the manual}\def\CD@rG#1#2{\let#1\no@cd@help}\fi\chardef\CD@lF
+=1 \chardef\CD@lI=2 \chardef\CD@MH=5 \chardef\CD@tH=6 \chardef\CD@sH=7
+\chardef\CD@PC=9 \dimendef\CD@hI=2 \dimendef\CD@hF=3 \dimendef\CD@mF=4
+\dimendef\CD@mI=5 \dimendef\CD@wJ=6 \dimendef\CD@tI=8 \dimendef\CD@sI=9
+\skipdef\CD@uB=1 \skipdef\CD@NF=2 \skipdef\CD@tB=3 \skipdef\CD@ZE=4 \skipdef
+\CD@JK=5 \skipdef\CD@kI=6 \skipdef\CD@kF=7 \skipdef\CD@qI=8 \skipdef\CD@pI=9
+\countdef\CD@JC=9 \countdef\CD@gD=8 \countdef\CD@A=7 \def\sdef#1#2{\def#1{#2}%
+}\def\CD@L#1{\expandafter\aftergroup\csname#1\endcsname}\def\CD@RC#1{%
+\expandafter\def\csname#1\endcsname}\def\CD@sD#1{\expandafter\gdef\csname#1%
+\endcsname}\def\CD@vC#1{\expandafter\edef\csname#1\endcsname}\def\CD@nF#1#2{%
+\expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname}\def\CD@EE
+#1#2{\expandafter\CD@DE\csname#1\expandafter\endcsname\csname#2\endcsname}%
+\def\CD@AK#1{\csname#1\endcsname}\def\CD@XJ#1{\expandafter\show\csname#1%
+\endcsname}\def\CD@ZJ#1{\expandafter\showthe\csname#1\endcsname}\def\CD@WJ#1{%
+\expandafter\showbox\csname#1\endcsname}\def\CD@tA{Commutative Diagram}\edef
+\CD@kH{\string\par}\edef\CD@dC{\string\diagram}\edef\CD@HD{\string\enddiagram
+}\edef\CD@EC{\string\\}\def\CD@eF{LaTeX}\ifx\@ignoretrue\undefined
+\expandafter\CD@tG\csname if@ignore\endcsname\ignore@true\ignore@false\def
+\@ignoretrue{\global\ignore@true}\def\@ignorefalse{\global\ignore@false}\fi
+
+\def\CD@g{{\ifnum0=\lq}\fi}\def\CD@wC{\ifnum0=\lq{\fi}}\def\catcase#1:{\ifcat
+\noexpand\CD@EH#1\CD@tJ\expandafter\CD@kC\else\expandafter\CD@dJ\fi}\def
+\tokcase#1:{\ifx\CD@EH#1\CD@tJ\expandafter\CD@kC\else\expandafter\CD@dJ\fi}%
+\def\CD@kC#1;#2\endswitch{#1}\def\CD@dJ#1;{}\let\endswitch\relax\def\default:%
+#1;#2\endswitch{#1}\ifx\at@\undefined\def\at@{@}\fi\edef\CD@P{\CD@o pt\CD@yC}%
+\CD@RC{\CD@P>}#1>#2>{\CD@z\rTo\sp{#1}\sb{#2}\CD@z}\CD@RC{\CD@P<}#1<#2<{\CD@z
+\lTo\sp{#1}\sb{#2}\CD@z}\CD@RC{\CD@P)}#1)#2){\CD@z\rTo\sp{#1}\sb{#2}\CD@z}%
+%%ascii round
+\CD@RC{\CD@P(}#1(#2({\CD@z\lTo\sp{#1}\sb{#2}\CD@z}%%ascii brack
+\def\CD@O{\def\endCD{\enddiagram}\CD@RC{\CD@P A}##1A##2A{\uTo<{##1}>{##2}%
+\CD@z\CD@z}\CD@RC{\CD@P V}##1V##2V{\dTo<{##1}>{##2}\CD@z\CD@z}\CD@RC{\CD@P=}{%
+\CD@z\hEq\CD@z}\CD@RC{\CD@P\CD@KK}{\vEq\CD@z\CD@z}\CD@RC{\CD@P\string\vert}{%
+\vEq\CD@z\CD@z}\CD@RC{\CD@P.}{\CD@z\CD@z}\let\CD@z\CD@Q}\def\CD@IE{\let\tmp
+\CD@JE\ifcat A\noexpand\CD@CH\else\ifcat=\noexpand\CD@CH\else\ifcat\relax
+\noexpand\CD@CH\else\let\tmp\at@\fi\fi\fi\tmp}\def\CD@JE#1{\CD@nF{tmp}{\CD@P
+\string#1}\ifx\tmp\relax\def\tmp{\at@#1}\fi\tmp}\def\CD@z{}\begingroup
+\aftergroup\def\aftergroup\CD@T\aftergroup{\aftergroup\def\catcode\lq\@%
+\active\aftergroup @\endgroup{\futurelet\CD@CH\CD@IE}}\newcount\CD@uA
+\newcount\CD@vA\newcount\CD@wA\newcount\CD@xA\newdimen\CD@OA\newdimen\CD@PA
+\CD@tG\CD@gE\CD@@A\CD@y\CD@tG\CD@hE\CD@EA\CD@BA\newdimen\CD@RA\newdimen\CD@SA
+\newcount\CD@yA\newcount\CD@zA\newdimen\CD@QA\newbox\CD@DA\CD@tG\CD@lE\CD@dA
+\CD@bA\newcount\CD@LH\newcount\CD@TC\def\CD@V#1#2{\ifdim#1<#2\relax#1=#2%
+\relax\fi}\def\CD@X#1#2{\ifdim#1>#2\relax#1=#2\relax\fi}\newdimen\CD@XH\CD@XH
+=1sp \newdimen\CD@zC\CD@zC\z@\def\CD@cJ{\ifdim\CD@zC=1em\else\CD@nJ\fi}\def
+\CD@nJ{\CD@zC1em\def\CD@NC{\fontdimen8\textfont3 }\CD@@J\CD@NJ\setbox0=\vbox{%
+\CD@t\noindent\CD@k\null\penalty-9993\null\CD@ND\null\endgraf\setbox0=%
+\lastbox\unskip\unpenalty\setbox1=\lastbox\global\setbox\CD@IG=\hbox{\unhbox0%
+\unskip\unskip\unpenalty\setbox0=\lastbox}\global\setbox\CD@KG=\hbox{\unhbox1%
+\unskip\unpenalty\setbox1=\lastbox}}}\newdimen\CD@@I\CD@@I=1true in \divide
+\CD@@I300 \def\CD@zH#1{\multiply#1\tw@\advance#1\ifnum#1<\z@-\else+\fi\CD@@I
+\divide#1\tw@\divide#1\CD@@I\multiply#1\CD@@I}\def\MapBreadth{%
+\afterassignment\CD@gI\CD@LF}\newdimen\CD@LF\newdimen\CD@oI\def\CD@gI{\CD@oI
+\CD@LF\CD@V\CD@@I{4\CD@XH}\CD@X\CD@@I\p@\CD@zH\CD@oI\ifdim\CD@LF>\z@\CD@V
+\CD@oI\CD@@I\fi\CD@cJ}\def\CD@RJ#1{\CD@zD\count@\CD@@I#1\ifnum\count@>\z@
+\divide\CD@@I\count@\fi\CD@gI\CD@NJ}\def\CD@NJ{\dimen@\CD@QC\count@\dimen@
+\divide\count@5\divide\count@\CD@@I\edef\CD@OC{\the\count@}}\def\CD@AJ{\CD@QJ
+\z@}\def\CD@QJ#1{\CD@tI\axisheight\advance\CD@tI#1\relax\advance\CD@tI-.5%
+\CD@oI\CD@zH\CD@tI\CD@sI-\CD@tI\advance\CD@tI\CD@LF}\newdimen\CD@DC\CD@DC\z@
+\newdimen\CD@eJ\CD@eJ\z@\def\CD@CJ#1{\CD@sI#1\relax\CD@tI\CD@sI\advance\CD@tI
+\CD@LF\relax}\def\horizhtdp{height\CD@tI depth\CD@sI}\def\axisheight{%
+\fontdimen22\the\textfont\tw@}\def\script@axisheight{\fontdimen22\the
+\scriptfont\tw@}\def\ss@axisheight{\fontdimen22\the\scriptscriptfont\tw@}\def
+\CD@NC{0.4pt}\def\CD@VK{\fontdimen3\textfont\z@}\def\CD@UK{\fontdimen3%
+\textfont\z@}\newdimen\PileSpacing\newdimen\CD@nA\CD@nA\z@\def\CD@RG{%
+\ifincommdiag1.3em\else2em\fi}\newdimen\CD@YB\def\CellSize{\afterassignment
+\CD@kB\DiagramCellHeight}\newdimen\DiagramCellHeight\DiagramCellHeight-%
+\maxdimen\newdimen\DiagramCellWidth\DiagramCellWidth-\maxdimen\def\CD@kB{%
+\DiagramCellWidth\DiagramCellHeight}\def\CD@QC{3em}\newdimen\MapShortFall\def
+\MapsAbut{\MapShortFall\z@\objectheight\z@\objectwidth\z@}\newdimen\CD@iA
+\CD@iA\z@\def\newarrowhead{\CD@mG h\CD@BG\CD@GG>}\def\newarrowtail{\CD@mG t%
+\CD@BG\CD@GG>}\def\newarrowmiddle{\CD@mG m\CD@BG\hbox@maths\empty}\def
+\newarrowfiller{\CD@mG f\CD@bE\CD@MK-}\def\CD@mG#1#2#3#4#5#6#7#8#9{\CD@RC{r#1%
+:#5}{#2{#6}}\CD@RC{l#1:#5}{#2{#7}}\CD@RC{d#1:#5}{#3{#8}}\CD@RC{u#1:#5}{#3{#9}%
+}\CD@vC{-#1:#5}{\expandafter\noexpand\csname-#1:#4\endcsname\noexpand\CD@MC}%
+\CD@vC{+#1:#5}{\expandafter\noexpand\csname+#1:#4\endcsname\noexpand\CD@MC}}%
+\CD@ZA\CD@MC{\CD@eF\space diagonals are used unless PostScript is set}\def
+\defaultarrowhead#1{\edef\CD@sJ{#1}\CD@@J}\def\CD@@J{\CD@IJ\CD@sJ<>ht\CD@IJ
+\CD@sJ<>th}\def\CD@IJ#1#2#3#4#5{\CD@HJ{r#4}{#3}{l#5}{#2}{r#4:#1}\CD@HJ{r#5}{#%
+2}{l#4}{#3}{l#4:#1}\CD@HJ{d#4}{#3}{u#5}{#2}{d#4:#1}\CD@HJ{d#5}{#2}{u#4}{#3}{u%
+#4:#1}}\def\CD@HJ#1#2#3#4#5{\begingroup\aftergroup\CD@GJ\CD@L{#1+:#2}\CD@L{#1%
+:#2}\CD@L{#3:#4}\CD@L{#5}\endgroup}\def\CD@GJ#1#2#3#4{\csname newbox%
+\endcsname#1\def#2{\copy#1}\def#3{\copy#1}\setbox#1=\box\voidb@x}\def\CD@sJ{}%
+\CD@@J\def\CD@GJ#1#2#3#4{\setbox#1=#4}\ifx\tenln\nullfont\def\CD@sJ{vee}\else
+\let\CD@sJ\CD@eF\fi\def\CD@xF#1#2#3{\begingroup\aftergroup\CD@wF\CD@L{#1#2:#3%
+#3}\CD@L{#1#2:#3}\aftergroup\CD@yF\CD@L{#1#2:#3-#3}\CD@L{#1#2:#3}\endgroup}%
+\def\CD@wF#1#2{\def#1{\hbox{\rlap{#2}\kern.4\CD@zC#2}}}\def\CD@yF#1#2{\def#1{%
+\hbox{\rlap{#2}\kern.4\CD@zC#2\kern-.4\CD@zC}}}\CD@xF lh>\CD@xF rt>\CD@xF rh<%
+\CD@xF rt<\def\CD@yF#1#2{\def#1{\hbox{\kern-.4\CD@zC\rlap{#2}\kern.4\CD@zC#2}%
+}}\CD@xF rh>\CD@xF lh<\CD@xF lt>\CD@xF lt<\def\CD@wF#1#2{\def#1{\vbox{\vbox to%
+\z@{#2\vss}\nointerlineskip\kern.4\CD@zC#2}}}\def\CD@yF#1#2{\def#1{\vbox{%
+\vbox to\z@{#2\vss}\nointerlineskip\kern.4\CD@zC#2\kern-.4\CD@zC}}}\CD@xF uh>%
+\CD@xF dt>\CD@xF dh<\CD@xF dt<\def\CD@yF#1#2{\def#1{\vbox{\kern-.4\CD@zC\vbox
+to\z@{#2\vss}\nointerlineskip\kern.4\CD@zC#2}}}\CD@xF dh>\CD@xF ut>\CD@xF uh<%
+\CD@xF ut<\def\CD@BG#1{\hbox{\mathsurround\z@\offinterlineskip\CD@k\mkern-1.5%
+mu{#1}\mkern-1.5mu\CD@ND}}\def\hbox@maths#1{\hbox{\CD@k#1\CD@ND}}\def\CD@GG#1%
+{\hbox to\CD@LF{\setbox0=\hbox{\offinterlineskip\mathsurround\z@\CD@k{#1}%
+\CD@ND}\dimen0.5\wd0\advance\dimen0-.5\CD@oI\CD@zH{\dimen0}\kern-\dimen0%
+\unhbox0\hss}}\def\CD@sB#1{\hbox to2\CD@LF{\hss\offinterlineskip\mathsurround
+\z@\CD@k{#1}\CD@ND\hss}}\def\CD@vF#1{\hbox{\mathsurround\z@\CD@k{#1}\CD@ND}}%
+\def\CD@bE#1{\hbox{\kern-.15\CD@zC\CD@k{#1}\CD@ND\kern-.15\CD@zC}}\def\CD@MK#%
+1{\vbox{\offinterlineskip\kern-.2ex\CD@GG{#1}\kern-.2ex}}\def\@fillh{%
+\xleaders\vrule\horizhtdp}\def\@fillv{\xleaders\hrule width\CD@LF}\CD@nF{rf:-%
+}{@fillh}\CD@nF{lf:-}{@fillh}\CD@nF{df:-}{@fillv}\CD@nF{uf:-}{@fillv}\CD@nF{%
+rh:}{null}\CD@nF{rm:}{null}\CD@nF{rt:}{null}\CD@nF{lh:}{null}\CD@nF{lm:}{null%
+}\CD@nF{lt:}{null}\CD@nF{dh:}{null}\CD@nF{dm:}{null}\CD@nF{dt:}{null}\CD@nF{%
+uh:}{null}\CD@nF{um:}{null}\CD@nF{ut:}{null}\CD@nF{+h:}{null}\CD@nF{+m:}{null%
+}\CD@nF{+t:}{null}\CD@nF{-h:}{null}\CD@nF{-m:}{null}\CD@nF{-t:}{null}\def
+\CD@@D{\hbox{\vrule height 1pt depth-1pt width 1pt}}\CD@RC{rf:}{\CD@@D}\CD@nF
+{lf:}{rf:}\CD@nF{+f:}{rf:}\CD@RC{df:}{\CD@@D}\CD@nF{uf:}{df:}\CD@nF{-f:}{df:}%
+\def\CD@BD{\CD@U\null\CD@@D\null\CD@@D\null}\edef\CD@lG{\string\newarrow}\def
+\newarrow#1#2#3#4#5#6{\begingroup\edef\@name{#1}\edef\CD@oJ{#2}\edef\CD@iD{#3%
+}\edef\CD@QG{#4}\edef\CD@jD{#5}\edef\CD@LE{#6}\let\CD@HE\CD@sG\let\CD@FK
+\CD@BH\let\@x\CD@AH\ifx\CD@oJ\CD@iD\let\CD@oJ\empty\fi\ifx\CD@LE\CD@jD\let
+\CD@LE\empty\fi\def\CD@LI{r}\def\CD@SF{l}\def\CD@IC{d}\def\CD@yJ{u}\def\CD@gH
+{+}\def\@m{-}\ifx\CD@iD\CD@jD\ifx\CD@QG\CD@iD\let\CD@QG\empty\fi\ifx\CD@LE
+\empty\ifx\CD@iD\CD@aE\let\@x\CD@yG\else\let\@x\CD@zG\fi\fi\else\edef\CD@a{%
+\CD@iD\CD@oJ}\ifx\CD@a\empty\ifx\CD@QG\CD@jD\let\CD@QG\empty\fi\fi\fi\ifmmode
+\aftergroup\CD@kG\else\CD@@A\CD@oB rh{head\space\space}\CD@LE\CD@oB rf{filler%
+}\CD@iD\CD@oB rm{middle}\CD@QG\ifx\CD@jD\CD@iD\else\CD@oB rf{filler}\CD@jD\fi
+\CD@oB rt{tail\space\space}\CD@oJ\CD@gE\CD@HE\CD@FK\@x\CD@nG l-2+2{lu}{nw}%
+\NorthWest\CD@nG r+2+2{ru}{ne}\NorthEast\CD@nG l-2-2{ld}{sw}\SouthWest\CD@nG r%
++2-2{rd}{se}\SouthEast\else\aftergroup\CD@b\CD@L{r\@name}\fi\fi\endgroup}\def
+\CD@sG{\CD@vG\CD@LI\CD@SF rl\Horizontal@Map}\def\CD@BH{\CD@vG\CD@IC\CD@yJ du%
+\Vertical@Map}\def\CD@AH{\CD@vG\CD@gH\@m+-\Vector@Map}\def\CD@yG{\CD@vG\CD@gH
+\@m+-\Slant@Map}\def\CD@zG{\CD@vG\CD@gH\@m+-\Slope@Map}\catcode\lq\/=\active
+\def\CD@vG#1#2#3#4#5{\CD@jG#1#3#5t:\CD@oJ/f:\CD@iD/m:\CD@QG/f:\CD@jD/h:\CD@LE
+//\CD@jG#2#4#5h:\CD@LE/f:\CD@jD/m:\CD@QG/f:\CD@iD/t:\CD@oJ//}\def\CD@jG#1#2#3%
+#4//{\edef\CD@fG{#2}\aftergroup\sdef\CD@L{#1\@name}\aftergroup{\aftergroup#3%
+\CD@M#4//\aftergroup}}\def\CD@M#1/{\edef\CD@EH{#1}\ifx\CD@EH\empty\else\CD@L{%
+\CD@fG#1}\expandafter\CD@M\fi}\catcode\lq\/=12 \def\CD@nG#1#2#3#4#5#6#7#8{%
+\aftergroup\sdef\CD@L{#6\@name}\aftergroup{\CD@L{#2\@name}\if#2#4\aftergroup
+\CD@CI\else\aftergroup\CD@BI\fi\CD@L{#1\@name}%
+%% ASCII round brackets and comma (,) appear on the next line
+\aftergroup(\aftergroup#3\aftergroup,\aftergroup#5\aftergroup)\aftergroup}}%
+\def\CD@oB#1#2#3#4{\expandafter\ifx\csname#1#2:#4\endcsname\relax\CD@y\CD@gB{%
+arrow#3 "#4" undefined}\fi}\CD@rG\CD@VE{All five components must be defined
+before an arrow.}\CD@rG\CD@SE{\CD@lG, unlike \string\HorizontalMap, is a
+declaration.}\def\CD@b#1{\CD@YA{Arrows \string#1 etc could not be defined}%
+\CD@VE}\def\CD@kG{\CD@YA{misplaced \CD@lG}\CD@SE}\def\newdiagramgrid#1#2#3{%
+\CD@RC{cdgh@#1}{#2,],}%% ASCII close square bracket
+\CD@RC{cdgv@#1}{#3,],}}%% ASCII close square bracket
+\CD@tG\ifincommdiag\incommdiagtrue\incommdiagfalse\CD@tG\CD@@F\CD@IF\CD@HF
+\newcount\CD@VA\CD@VA=0 \def\CD@yH{\CD@VA6 }\def\CD@OB{\CD@VA1 \global\CD@yA1
+\CD@DE\CD@YF\empty}\def\CD@YF{}\def\CD@nB#1{\relax\CD@MD\edef\CD@vJ{#1}%
+\begingroup\CD@rE\else\ifcase\CD@VA\ifmmode\else\CD@YG\CD@E0\fi\or\CD@cE5\or
+\CD@YG\CD@F5\or\CD@YG\CD@B5\or\CD@YG\CD@B5\or\CD@YG\CD@C5\or\CD@cE7\or\CD@YG
+\CD@D7\fi\fi\endgroup\xdef\CD@YF{#1}}\def\CD@pB#1#2#3#4#5{\relax\CD@MD\xdef
+\CD@vJ{#4}\begingroup\ifnum\CD@VA<#1 \expandafter\CD@cE\ifcase\CD@VA0\or#2\or
+#3\else#2\fi\else\ifnum\CD@VA<6 \CD@tJ\CD@YG\CD@B#2\else\CD@YG\CD@G#2\fi\fi
+\endgroup\CD@DE\CD@YF\CD@vJ\ifincommdiag\let\CD@ZD#5\else\let\CD@ZD\CD@LK\fi}%
+\def\CD@yI{\global\CD@yA=\ifnum\CD@VA<5 1\else2\fi\relax}\def\CD@OI{\CD@VA
+\CD@yA}\def\CD@cE#1{\aftergroup\CD@VA\aftergroup#1\aftergroup\relax}\def
+\CD@HH{\def\CD@nB##1{\relax}\let\CD@pB\CD@FH\let\CD@yH\relax\let\CD@OB\relax
+\let\CD@yI\relax\let\CD@OI\relax}\def\CD@FH#1#2#3#4#5{\ifincommdiag\let\CD@ZD
+#5\else\xdef\CD@vJ{#4}\let\CD@ZD\CD@LK\fi}\def\CD@YG#1{\aftergroup#1%
+\aftergroup\relax\CD@cE}\def\CD@B{\CD@YE\CD@S\CD@ME\CD@Q}\def\CD@G{\CD@YE{%
+\CD@yC\CD@S}\CD@XE\CD@QD\CD@Q}\def\CD@F{\CD@YE{*\CD@S}\CD@RE\clubsuit\CD@Q}%
+\def\CD@C{\CD@YE{\CD@S*\CD@S}\CD@RE\CD@Q\clubsuit\CD@Q}\def\CD@D{\CD@YE\CD@EC
+\CD@TE\\}\def\CD@E{\CD@YE\CD@nC\CD@QE\CD@k}\def\CD@LK{\CD@YA{\CD@vJ\space
+ignored \CD@dH}\CD@WE}\def\CD@FE{}\def\CD@d{\CD@YA{maps must never be enclosed
+in braces}\CD@OE}\def\CD@dH{outside diagram}\def\CD@FC{\string\HonV, \string
+\VonH\space and \string\HmeetV}\CD@rG\CD@ME{The way that horizontal and
+vertical arrows are terminated implicitly means\CD@uG that they cannot be
+mixed with each other or with \CD@FC.}\CD@rG\CD@XE{\string\pile\space is for
+parallel horizontal arrows; verticals can just be put together in\CD@uG a cell%
+. \CD@FC\space are not meaningful in a \string\pile.}\CD@rG\CD@RE{The
+horizontal maps must point to an object, not each other (I've put in\CD@uG one
+which you're unlikely to want). Use \string\pile\space if you want them
+parallel.}\CD@rG\CD@TE{Parallel horizontal arrows must be in separate layers
+of a \string\pile.}\CD@rG\CD@QE{Horizontal arrows may be used \CD@dH s, but
+must still be in maths.}\CD@rG\CD@WE{Vertical arrows, \CD@FC\space\CD@dH s don%
+'t know where\CD@uG where to terminate.}\CD@rG\CD@OE{This prevents them from
+stretching correctly.}\def\CD@YE#1{\CD@YA{"#1" inserted \ifx\CD@YF\empty
+before \CD@vJ\else between \CD@YF\ifx\CD@YF\CD@vJ s\else\space and \CD@vJ\fi
+\fi}}\count@=\year\multiply\count@12 \advance\count@\month\ifnum\count@>24087
+\message{because this one expired in December 2006!}\expandafter\endinput\fi
+\def\Horizontal@Map{\CD@nB{horizontal map}\CD@LC\CD@TJ\CD@qD}\def\CD@TJ{%
+\CD@GB-9999 \let\CD@ZD\CD@XD\ifincommdiag\else\CD@cJ\ifinpile\else\skip2\z@
+plus 1.5\CD@VK minus .5\CD@UK\skip4\skip2 \fi\fi\let\CD@kD\@fillh\CD@nF{%
+fill@dot}{rf:.}}\def\Vector@Map{\CD@HK4}\def\Slant@Map{\CD@HK{\CD@EF255\else6%
+\fi}}\def\Slope@Map{\CD@HK\CD@OC}\def\CD@HK#1#2#3#4#5#6{\CD@LC\def\CD@WK{2}%
+\def\CD@aK{2}\def\CD@ZK{1}\def\CD@bK{1}\let\Horizontal@Map\CD@nI\def\CD@OG{#1%
+}\def\CD@NI{\CD@U#2#3#4#5#6}}\def\CD@nI{\CD@TJ\CD@JB\let\CD@ZD\CD@TD\CD@qD}%
+\CD@tG\CD@pE\CD@rA\CD@qA\CD@rA\def\cds@missives{\CD@rA}\def\CD@TD{\CD@vE\let
+\CD@OG\CD@OC\CD@x\CD@zE\CD@WF\fi\setbox0\hbox{\incommdiagfalse\CD@HI}\CD@pE
+\CD@aD\else\global\CD@YC\CD@bD\fi\ifvoid6 \ifvoid7 \CD@eE\fi\fi\CD@zE\else
+\CD@BD\global\CD@YC\let\CD@CG\CD@IH\CD@YD\fi\else\CD@NI\CD@MI\global\CD@YC
+\CD@YD\fi}\def\CD@LC{\begingroup\dimen1=\MapShortFall\dimen2=\CD@RG\dimen5=%
+\MapShortFall\setbox3=\box\voidb@x\setbox6=\box\voidb@x\setbox7=\box\voidb@x
+\CD@pD\mathsurround\z@\skip2\z@ plus1fill minus 1000pt\skip4\skip2 \CD@TB}%
+\CD@tG\CD@tE\CD@UB\CD@TB\def\CD@U#1#2#3#4#5{\let\CD@oJ#1\let\CD@iD#2\let
+\CD@QG#3\let\CD@jD#4\let\CD@LE#5\CD@TB\ifx\CD@iD\CD@jD\CD@UB\fi}\def\CD@qD#1#%
+2#3#4#5{\CD@U#1#2#3#4#5\CD@tD}\def\Vertical@Map{\CD@pB433{vertical map}\CD@cD
+\CD@LC\CD@GB-9995 \let\CD@kD\@fillv\CD@nF{fill@dot}{df:.}\CD@qD}\def
+\break@args{\def\CD@tD{\CD@ZD}\CD@ZD\endgroup\aftergroup\CD@FE}\def\CD@MJ{%
+\setbox1=\CD@oJ\setbox5=\CD@LE\ifvoid3 \ifx\CD@QG\null\else\setbox3=\CD@QG\fi
+\fi\CD@@G2\CD@iD\CD@@G4\CD@jD}\def\CD@pF#1{\ifvoid1\else\CD@oF1#1\fi\ifvoid2%
+\else\CD@oF2#1\fi\ifvoid3\else\CD@oF3#1\fi\ifvoid4\else\CD@oF4#1\fi\ifvoid5%
+\else\CD@oF5#1\fi} \def\CD@oF#1#2{\setbox#1\vbox{\offinterlineskip\box#1%
+\dimen@\prevdepth\advance\dimen@-#2\relax\setbox0\null\dp0\dimen@\ht0-\dimen@
+\box0}}\def\CD@@G#1#2{\ifx#2\CD@kD\setbox#1=\box\voidb@x\else\setbox#1=#2\def
+#2{\xleaders\box#1}\fi}\CD@ZA\CD@BK{\string\HorizontalMap, \string
+\VerticalMap\space and \string\DiagonalMap\CD@uG are obsolete - use \CD@lG
+\space to pre-define maps}\def\HorizontalMap#1#2#3#4#5{\CD@BK\CD@nB{old
+horizontal map}\CD@LC\CD@TJ\def\CD@oJ{\CD@UH{#1}}\CD@SH\CD@iD{#2}\def\CD@QG{%
+\CD@UH{#3}}\CD@SH\CD@jD{#4}\def\CD@LE{\CD@UH{#5}}\CD@tD}\def\VerticalMap#1#2#%
+3#4#5{\CD@BK\CD@pB433{vertical map}\CD@cD\CD@LC\CD@GB-9995 \let\CD@kD\@fillv
+\def\CD@oJ{\CD@GG{#1}}\CD@VH\CD@iD{#2}\def\CD@QG{\CD@GG{#3}}\CD@VH\CD@jD{#4}%
+\def\CD@LE{\CD@GG{#5}}\CD@tD}\def\DiagonalMap#1#2#3#4#5{\CD@BK\CD@LC\def
+\CD@OG{4}\let\CD@kD\undefined\let\CD@ZD\CD@YD\def\CD@WK{2}\def\CD@aK{2}\def
+\CD@ZK{1}\def\CD@bK{1}\def\CD@QG{\CD@vF{#3}}\ifPositiveGradient\let\mv\raise
+\def\CD@oJ{\CD@vF{#5}}\def\CD@iD{\CD@vF{#4}}\def\CD@jD{\CD@vF{#2}}\def\CD@LE{%
+\CD@vF{#1}}\else\let\mv\lower\def\CD@oJ{\CD@vF{#1}}\def\CD@iD{\CD@vF{#2}}\def
+\CD@jD{\CD@vF{#4}}\def\CD@LE{\CD@vF{#5}}\fi\CD@tD}\def\CD@aE{-}\def\CD@AD{%
+\empty}\def\CD@SH{\CD@EG\CD@bE\CD@aE\@fillh}\def\CD@VH{\CD@EG\CD@MK\CD@KK
+\@fillv}\def\CD@EG#1#2#3#4#5{\def\CD@CH{#5}\ifx\CD@CH#2\let#4#3\else\let#4%
+\null\ifx\CD@CH\empty\else\ifx\CD@CH\CD@AD\else\let#4\CD@CH\fi\fi\fi}\def
+\CD@UH#1{\hbox{\mathsurround\z@\offinterlineskip\def\CD@CH{#1}\ifx\CD@CH
+\empty\else\ifx\CD@CH\CD@AD\else\CD@k\mkern-1.5mu{\CD@CH}\mkern-1.5mu\CD@ND
+\fi\fi}}\def\CD@yD#1#2{\setbox#1=\hbox\bgroup\setbox0=\hbox{\CD@k\labelstyle(%
+)\CD@ND}%% ASCII round brackets
+\setbox1=\null\ht1\ht0\dp1\dp0\box1 \kern.1\CD@zC\CD@k\bgroup\labelstyle
+\aftergroup\CD@LD\CD@xD}\def\CD@LD{\CD@ND\kern.1\CD@zC\egroup\CD@tD}\def
+\CD@xD{\futurelet\CD@EH\CD@mJ}\def\CD@mJ{%% qualifiers on label arguments
+\catcase\bgroup:\CD@v;\catcase\egroup:\missing@label;\catcase\space:\CD@TF;%
+\tokcase[:\CD@XF;%%]%ascii close square bracket
+\default:\CD@zJ;\endswitch}\def\CD@v{\let\CD@MD\CD@c\let\CD@CH}\def\CD@zJ#1{%
+\let\CD@UF\egroup{\let\actually@braces@missing@around@macro@in@label\CD@ZH
+\let\CD@MD\CD@xC\let\CD@UF\CD@VF#1%
+\actually@braces@missing@around@macro@in@label}\CD@UF}\def
+\actually@braces@missing@around@macro@in@label{\let\CD@CH=}\def\missing@label
+{\egroup\CD@YA{missing label}\CD@PE}\def\CD@xC{\egroup\missing@label}\outer
+\def\CD@ZH{}\def\CD@UF{}\def\CD@VF{\CD@wC\CD@UF}\def\CD@MD{}\def\CD@XF{\let
+\CD@N\CD@xD\get@square@arg\CD@AE}\CD@rG\CD@PE{The text which has just been
+read is not allowed within map labels.}\def\CD@c{\egroup\CD@YA{missing \CD@yC
+\space inserted after label}\CD@PE}\def\upper@label{\CD@oD\CD@yD6}\def
+\lower@label{\def\positional@{\CD@@A\break@args}\CD@yD7}\def\middle@label{%
+\CD@yD3}\CD@tG\CD@yE\CD@pD\CD@oD\def\CD@iF{\ifPositiveGradient\CD@tJ
+\expandafter\upper@label\else\expandafter\lower@label\fi}\def\CD@iI{%
+\ifPositiveGradient\CD@tJ\expandafter\lower@label\else\expandafter
+\upper@label\fi}\def\positional@{\CD@gB{labels as positional arguments are
+obsolete}\CD@yE\CD@tJ\expandafter\upper@label\else\expandafter\lower@label\fi
+-}\def\CD@tD{\futurelet\CD@EH\switch@arg}\def\eat@space{\afterassignment
+\CD@tD\let\CD@EH= }\def\CD@TF{\afterassignment\CD@xD\let\CD@EH= }\def\CD@BC{%
+\get@round@pair\CD@uD}\def\CD@uD#1#2{\def\CD@WK{#1}\def\CD@aK{#2}\CD@tD}\def
+\optional@{\let\CD@N\CD@tD\get@square@arg\CD@AE}\def\CD@JJ.{\CD@sC\CD@tD}\def
+\CD@sC{\let\CD@iD\fill@dot\let\CD@jD\fill@dot\def\CD@MI{\let\CD@iD\dfdot\let
+\CD@jD\dfdot}}\def\CD@MI{}\def\CD@@E#1,{\CD@nH#1,\begingroup\ifx\@name\CD@RD
+\CD@FF\aftergroup\CD@e\fi\aftergroup\CD@jC\else\expandafter\def\expandafter
+\CD@RF\expandafter{\csname\@name\endcsname}\expandafter\CD@vD\CD@RF\CD@KD\ifx
+\CD@RF\empty\aftergroup\CD@pC\expandafter\aftergroup\csname\CD@FB\@name
+\endcsname\expandafter\aftergroup\csname\CD@FB @\@name\endcsname\else\gdef
+\CD@GE{#1}\CD@gB{\string\relax\space inserted before `[\CD@GE'}\message{(I was
+trying to read this as a \CD@tA\ option.)}\aftergroup\CD@H\fi\fi\endgroup}%
+\def\CD@vD#1#2\CD@KD{\def\CD@RF{#2}}\def\CD@jC{\let\CD@CH\CD@N\let\CD@N\relax
+\CD@CH}\def\CD@H#1],{%% ASCII close square bracket
+\CD@jC\relax\def\CD@RF{#1}\ifx\CD@RF\empty\def\CD@RF{[\CD@GE]}%
+%% ASCII open and close square bracket
+\else\def\CD@RF{[\CD@GE,#1]}%% ASCII open and close square bracket
+\fi\CD@RF}\def\CD@pC#1#2{\ifx#2\undefined\ifx#1\undefined\CD@gB{option `%
+\@name' undefined}\else#1\fi\else\CD@FF\expandafter#2\CD@GK\CD@PK\else\CD@QK
+\fi\fi\CD@DH}\CD@tG\CD@FF\CD@QK\CD@PK\def\CD@nH#1,{\CD@FF\ifx\CD@GK\undefined
+\CD@e\else\expandafter\CD@oH\CD@GK,#1,(,),(,)[]%
+%%ASCII 5commas two pairs round, pair square
+\fi\fi\CD@FF\else\CD@mH#1==,\fi}\def\CD@e{\CD@gB{option `\@name' needs (x,y)
+value}\CD@PK\let\@name\empty}\def\CD@mH#1=#2=#3,{\def\@name{#1}\def\CD@GK{#2}%
+\def\CD@RF{#3}\ifx\CD@RF\empty\let\CD@GK\undefined\fi}%
+%% ASCII 2commas 2pair round, pair square on next line
+\def\CD@oH#1(#2,#3)#4,(#5,#6)#7[]{\def\CD@GK{{#2}{#3}}\def\CD@RF{#1#4#5#6}%
+\ifx\CD@RF\empty\def\CD@RF{#7}\ifx\CD@RF\empty\CD@e\fi\else\CD@e\fi}\def
+\CD@FB{cds@}\let\CD@N\relax\def\CD@zD#1{\ifx\CD@GK\undefined\CD@gB{option `%
+\@name' needs a value}\else#1\CD@GK\relax\fi}\def\CD@BE#1#2{\ifx\CD@GK
+\undefined#1#2\relax\else#1\CD@GK\relax\fi}\def\cds@@showpair#1#2{\message{x=%
+#1,y=#2}}\def\cds@@diagonalbase#1#2{\edef\CD@ZK{#1}\edef\CD@bK{#2}}\def\CD@DI
+#1{\CD@nF{@x}{cdps@#1}\ifx\@x\relax\CD@f{#1}{unknown}\else\ifx\@x\empty\CD@f{%
+#1}{cannot be used}\else\let\CD@IK\@x\fi\fi}\def\CD@f#1#2{\CD@gB{PostScript
+translator `#1' #2}\CD@ZB\let\cds@PS\empty\let\cds@noPS\empty}\def\CD@PH{}%
+\def\CD@PJ{\CD@fA\edef\CD@PH{\noexpand\CD@KB{\@name\space ignored within maths%
+}}}\def\diagramstyle{\CD@cJ\let\CD@N\relax\CD@CF\CD@AE\CD@AE}\let
+\diagramsstyle\diagramstyle\CD@tG\CD@sE\CD@SB\CD@RB\CD@tG\CD@qE\CD@EB\CD@DB
+\CD@tG\CD@oE\CD@pA\CD@oA\CD@tG\CD@iE\CD@HA\CD@GA\CD@HA\CD@tG\CD@jE\CD@JA
+\CD@IA\CD@tG\CD@kE\CD@LA\CD@KA\CD@tG\CD@vE\CD@aB\CD@ZB\CD@tG\CD@EF\CD@DK
+\CD@CK\CD@tG\CD@rE\CD@JB\CD@IB\CD@tG\CD@mE\CD@gA\CD@fA\CD@tG\CD@nE\CD@kA
+\CD@jA\CD@tG\CD@AF\CD@iG\CD@hG\CD@RC{cds@ }{}\CD@RC{cds@}{}\CD@RC{cds@1em}{%
+\CellSize1\CD@zC}\CD@RC{cds@1.5em}{\CellSize1.5\CD@zC}\CD@RC{cds@2em}{%
+\CellSize2\CD@zC}\CD@RC{cds@2.5em}{\CellSize2.5\CD@zC}\CD@RC{cds@3em}{%
+\CellSize3\CD@zC}\CD@RC{cds@3.5em}{\CellSize3.5\CD@zC}\CD@RC{cds@4em}{%
+\CellSize4\CD@zC}\CD@RC{cds@4.5em}{\CellSize4.5\CD@zC}\CD@RC{cds@5em}{%
+\CellSize5\CD@zC}\CD@RC{cds@6em}{\CellSize6\CD@zC}\CD@RC{cds@7em}{\CellSize7%
+\CD@zC}\CD@RC{cds@8em}{\CellSize8\CD@zC}\def\cds@abut{\MapsAbut\dimen1\z@
+\dimen5\z@}\def\cds@alignlabels{\CD@IA\CD@KA}\def\cds@amstex{\ifincommdiag
+\CD@O\else\def\CD{\diagram[amstex]}%%ascii square brackets []
+\fi\CD@T\catcode\lq\@\active}\def\cds@b{\let\CD@dB\CD@bB}\def\cds@balance{%
+\let\CD@hA\CD@AA}\let\cds@bottom\cds@b\def\cds@center{\cds@vcentre
+\cds@nobalance}\let\cds@centre\cds@center\def\cds@centerdisplay{\CD@HA\CD@PJ
+\cds@balance}\let\cds@centredisplay\cds@centerdisplay\def\cds@crab{\CD@BE
+\CD@DC{.5\PileSpacing}}\CD@RC{cds@crab-}{\CD@DC-.5\PileSpacing}\CD@RC{%
+cds@crab+}{\CD@DC.5\PileSpacing}\CD@RC{cds@crab++}{\CD@DC1.5\PileSpacing}%
+\CD@RC{cds@crab--}{\CD@DC-1.5\PileSpacing}\def\cds@defaultsize{\CD@BE{\let
+\CD@QC}{3em}\CD@NJ}\def\cds@displayoneliner{\CD@DB}\let\cds@dotted\CD@sC\def
+\cds@dpi{\CD@RJ{1truein}}\def\cds@dpm{\CD@RJ{100truecm}}\let\CD@XA\undefined
+\def\cds@eqno{\let\CD@XA\CD@GK\let\CD@EJ\empty}\def\cds@fixed{\CD@qA}\CD@tG
+\CD@fE\CD@J\CD@I\def\cds@flushleft{\CD@I\CD@GA\CD@PJ\cds@nobalance\CD@BE
+\CD@nA\CD@nA}\def\cds@gap{\CD@AJ\setbox3=\null\ht3=\CD@tI\dp3=\CD@sI\CD@BE{%
+\wd3=}\MapShortFall} \def\cds@grid{\ifx\CD@GK\undefined\let\h@grid\relax\let
+\v@grid\relax\else\CD@nF{h@grid}{cdgh@\CD@GK}\CD@nF{v@grid}{cdgv@\CD@GK}\ifx
+\h@grid\relax\CD@gB{unknown grid `\CD@GK'}\else\CD@WB\fi\fi}\let\h@grid\relax
+\let\v@grid\relax\def\cds@gridx{\ifx\CD@GK\undefined\else\cds@grid\fi\let
+\CD@CH\h@grid\let\h@grid\v@grid\let\v@grid\CD@CH}\def\cds@h{\CD@zD
+\DiagramCellHeight}\def\cds@hcenter{\let\CD@hA\CD@aA}\let\cds@hcentre
+\cds@hcenter\def\cds@heads{\CD@BE{\let\CD@sJ}\CD@sJ\CD@@J\CD@vE\else\ifx
+\CD@sJ\CD@eF\else\CD@MC\fi\fi}\let\cds@height\cds@h\let\cds@hmiddle
+\cds@balance\def\cds@htriangleheight{\CD@BE\DiagramCellHeight
+\DiagramCellHeight\DiagramCellWidth1.73205\DiagramCellHeight}\def
+\cds@htrianglewidth{\CD@BE\DiagramCellWidth\DiagramCellWidth
+\DiagramCellHeight.57735\DiagramCellWidth}\CD@tG\CD@zE\CD@eE\CD@dE\CD@eE\def
+\cds@hug{\CD@eE} \def\cds@inline{\CD@gA\let\CD@PH\empty}\def
+\cds@inlineoneliner{\CD@EB}\CD@RC{cds@l>}{\CD@zD{\let\CD@RG}\dimen2=\CD@RG}%
+\def\cds@labelstyle{\CD@zD{\let\labelstyle}}\def\cds@landscape{\CD@kA}\def
+\cds@large{\CellSize5\CD@zC}\let\CD@EJ\empty\def\CD@FJ{\refstepcounter{%
+equation}\def\CD@XA{\hbox{\@eqnnum}}}\def\cds@LaTeXeqno{\let\CD@EJ\CD@FJ}\def
+\cds@lefteqno{\CD@pA}\def\cds@leftflush{\cds@flushleft\CD@J}\def
+\cds@leftshortfall{\CD@zD{\dimen1 }}\def\cds@lowershortfall{%
+\ifPositiveGradient\cds@leftshortfall\else\cds@rightshortfall\fi}\def
+\cds@loose{\CD@VB}\def\cds@midhshaft{\CD@JA}\def\cds@midshaft{\CD@JA}\def
+\cds@midvshaft{\CD@LA}\def\cds@moreoptions{\CD@@A}\let\cds@nobalance
+\cds@hcenter\def\cds@nohcheck{\CD@HH}\def\cds@nohug{\CD@dE} \def
+\cds@nooptions{\def\CD@aC{\CD@WD}}\let\cds@noorigin\cds@nobalance\def
+\cds@nopixel{\CD@@I4\CD@XH\CD@cJ}\def\cds@noPostScript{\global\let\CD@n\empty
+\CD@BE\CD@DI\empty\CD@ZB\let\cds@PS\empty\let\cds@noPS\empty}\def\cds@noPS{%
+\CD@ZB\global\let\CD@n\empty}\def\cds@notextflow{\CD@RB}\def\cds@noTPIC{%
+\CD@CK}\def\cds@objectstyle{\CD@zD{\let\objectstyle}}\def\cds@origin{\let
+\CD@hA\CD@iB}\def\cds@p{\CD@zD\PileSpacing}\CD@tG\CD@hK\CD@dK\CD@cK\CD@cK\let
+\cds@pilespacing\cds@p\def\cds@pixelsize{\CD@zD\CD@@I\CD@gI}\def\cds@portrait
+{\CD@jA}\def\cds@PostScript{\CD@aB\global\let\CD@n\empty\let\cds@PS\CD@aB\let
+\cds@noPS\CD@ZB\CD@BE\CD@DI\empty}\def\cds@PS{\CD@aB\global\let\CD@n\empty}%
+\CD@GF\CD@n{\typeout{\CD@tA: try the PostScript option for better results}}%
+\def\cds@repositionpullbacks{\let\make@pbk\CD@fH\let\CD@qH\CD@pH}\def
+\cds@righteqno{\CD@oA}\def\cds@rightshortfall{\CD@zD{\dimen5 }}\def
+\cds@ruleaxis{\CD@zD{\let\axisheight}}\def\cds@cmex{\let\CD@GG\CD@sB\let
+\CD@QJ\CD@CJ}\def\cds@s{\cds@height\DiagramCellWidth\DiagramCellHeight}\def
+\cds@scriptlabels{\let\labelstyle\scriptstyle}\def\cds@shortfall{\CD@zD
+\MapShortFall\dimen1\MapShortFall\dimen5\MapShortFall}\def\cds@showfirstpass{%
+\CD@BE{\let\CD@nD}\z@}\def\cds@silent{\def\CD@KB##1{}\def\CD@gB##1{}}\let
+\cds@size\cds@s\def\cds@small{\CellSize2\CD@zC}\def\cds@snake{\CD@BE\CD@eJ\z@
+}\def\cds@t{\let\CD@dB\CD@fB}\def\cds@textflow{\CD@SB\CD@PJ}\def\cds@thick{%
+\let\CD@rF\tenlnw\CD@LF\CD@NC\CD@BE\MapBreadth{2\CD@LF}\CD@@J}\def\cds@thin{%
+\let\CD@rF\tenln\CD@BE\MapBreadth{\CD@NC}\CD@@J}\def\cds@tight{\CD@WB}\let
+\cds@top\cds@t\def\cds@TPIC{\CD@DK}\def\cds@uppershortfall{%
+\ifPositiveGradient\cds@rightshortfall\else\cds@leftshortfall\fi}\def
+\cds@vcenter{\let\CD@dB\CD@cB}\let\cds@vcentre\cds@vcenter\def
+\cds@vtriangleheight{\CD@BE\DiagramCellHeight\DiagramCellHeight
+\DiagramCellWidth.577035\DiagramCellHeight}\def\cds@vtrianglewidth{\CD@BE
+\DiagramCellWidth\DiagramCellWidth\DiagramCellHeight1.73205\DiagramCellWidth}%
+\def\cds@vmiddle{\let\CD@dB\CD@eB}\def\cds@w{\CD@zD\DiagramCellWidth}\let
+\cds@width\cds@w\def\diagram{\relax\protect\CD@bC}\def\enddiagram{\protect
+\CD@SG}\def\CD@bC{\CD@g\CD@uI\incommdiagtrue\edef\CD@wI{\the\CD@NB}\global
+\CD@NB\z@\boxmaxdepth\maxdimen\everycr{}\ifx\pdfoutput\undefined\else\ifx
+\pdfoutput\relax\else\ifnum\pdfoutput>\z@\CD@dK\CD@aB\global\let\CD@n\empty
+\fi\fi\fi\CD@aC}\def\CD@aC{\CD@y\let\CD@N\CD@ZC\CD@CF\CD@AE\CD@WD}\def\CD@ZC{%
+\CD@gE\expandafter\CD@aC\else\expandafter\CD@WD\fi}\def\CD@WD{\let\CD@EH
+\relax\CD@nE\CD@vE\else\CD@hK\else\CD@KB{landscape ignored without PostScript%
+}\CD@jA\fi\fi\fi\CD@EJ\setbox2=\vbox\bgroup\CD@JF\CD@VD}\def\CD@cH{\CD@nE
+\CD@fB\else\CD@dB\fi\CD@hA\nointerlineskip\setbox0=\null\ht0-\CD@pI\dp0\CD@pI
+\wd0\CD@kI\box0 \global\CD@QA\CD@kF\global\CD@yA\CD@XB\ifx\CD@NK\undefined
+\global\CD@RA\CD@kF\else\global\CD@RA\CD@NK\fi\egroup\CD@zF\CD@nE\setbox2=%
+\hbox to\dp2{\vrule height\wd2 depth\CD@QA width\z@\global\CD@QA\ht2\ht2\z@
+\dp2\z@\wd2\z@\CD@hK\pdfliteral{q 0 1 -1 0 0 0 cm}\else\global\CD@iG\CD@IK{0 1
+bturn}\fi\box2\CD@gK\hss}\CD@DB\fi\ifnum\CD@yA=1 \else\CD@DB\fi\global
+\@ignorefalse\CD@mE\leavevmode\fi\ifvmode\CD@TA\else\ifmmode\CD@PH\CD@GI\else
+\CD@qE\CD@gA\fi\ifinner\CD@gA\fi\CD@mE\CD@GI\else\CD@sE\CD@QB\else\CD@TA\fi
+\fi\fi\fi\CD@dD}\def\CD@dD{\global\CD@NB\CD@wI\relax\CD@xE\global\CD@ID\else
+\aftergroup\CD@mC\fi\if@ignore\aftergroup\ignorespaces\fi\CD@wC\ignorespaces}%
+\def\CD@fB{\advance\CD@pI\dimen1\relax}\def\CD@eB{\advance\CD@pI.5\dimen1%
+\relax}\def\CD@bB{}\def\CD@cB{\CD@fB\advance\CD@pI\CD@YB\divide\CD@pI2
+\advance\CD@pI-\axisheight\relax}\def\CD@aA{}\def\CD@iB{\CD@kF\z@}\def\CD@AA{%
+\ifdim\dimen2>\CD@kF\CD@kF\dimen2 \else\dimen2\CD@kF\CD@kI\dimen0 \advance
+\CD@kI\dimen2 \fi}\def\CD@QB{\skip0\z@\relax\loop\skip1\lastskip\ifdim\skip1>%
+\z@\unskip\advance\skip0\skip1 \repeat\vadjust{\prevdepth\dp\strutbox\penalty
+\predisplaypenalty\vskip\abovedisplayskip\CD@UA\penalty\postdisplaypenalty
+\vskip\belowdisplayskip}\ifdim\skip0=\z@\else\hskip\skip0 \global\@ignoretrue
+\fi}\def\CD@TA{\CD@LG\kern-\displayindent\CD@UA\CD@LG\global\@ignoretrue}\def
+\CD@UA{\hbox to\hsize{\CD@fE\ifdim\CD@RA=\z@\else\advance\CD@QA-\CD@RA\setbox
+2=\hbox{\kern\CD@RA\box2}\fi\fi\setbox1=\hbox{\ifx\CD@XA\undefined\else\CD@k
+\CD@XA\CD@ND\fi}\CD@oE\CD@iE\else\advance\CD@QA\wd1 \fi\wd1\z@\box1 \fi\dimen
+0\wd2 \advance\dimen0\wd1 \advance\dimen0-\hsize\ifdim\dimen0>-\CD@nA\CD@HA
+\fi\advance\dimen0\CD@QA\ifdim\dimen0>\z@\CD@KB{wider than the page by \the
+\dimen0 }\CD@HA\fi\CD@iE\hss\else\CD@V\CD@QA\CD@nA\fi\CD@GI\hss\kern-\wd1\box
+1 }}\def\CD@GI{\CD@AF\CD@@F\else\CD@SC\global\CD@hG\fi\fi\kern\CD@QA\box2 }%
+\CD@tG\CD@wE\CD@YC\CD@XC\def\CD@JF{\CD@cJ\ifdim\DiagramCellHeight=-\maxdimen
+\DiagramCellHeight\CD@QC\fi\ifdim\DiagramCellWidth=-\maxdimen
+\DiagramCellWidth\CD@QC\fi\global\CD@XC\CD@IF\let\CD@FE\empty\let\CD@z\CD@Q
+\let\overprint\CD@eH\let\CD@s\CD@rJ\let\enddiagram\CD@ED\let\\\CD@cC\let\par
+\CD@jH\let\CD@MD\empty\let\switch@arg\CD@PB\let\shift\CD@iA\baselineskip
+\DiagramCellHeight\lineskip\z@\lineskiplimit\z@\mathsurround\z@\tabskip\z@
+\CD@OB}\def\CD@VD{\penalty-123 \begingroup\CD@jA\aftergroup\CD@K\halign
+\bgroup\global\advance\CD@NB1 \vadjust{\penalty1}\global\CD@FA\z@\CD@OB\CD@j#%
+#\CD@DD\CD@Q\CD@Q\CD@OI\CD@j##\CD@DD\cr}\def\CD@ED{\CD@MD\CD@GD\crcr\egroup
+\global\CD@JD\endgroup}\def\CD@j{\global\advance\CD@FA1 \futurelet\CD@EH\CD@i
+}\def\CD@i{\ifx\CD@EH\CD@DD\CD@tJ\hskip1sp plus 1fil \relax\let\CD@DD\relax
+\CD@vI\else\hfil\CD@k\objectstyle\let\CD@FE\CD@d\fi}\def\CD@DD{\CD@MD\relax
+\CD@yI\CD@vI\global\CD@QA\CD@iA\penalty-9993 \CD@ND\hfil\null\kern-2\CD@QA
+\null}\def\CD@cC{\cr}\def\across#1{\span\omit\mscount=#1 \global\advance
+\CD@FA\mscount\global\advance\CD@FA\m@ne\CD@sF\ifnum\mscount>2 \CD@fJ\repeat
+\ignorespaces}\def\CD@fJ{\relax\span\omit\advance\mscount\m@ne}\def\CD@qJ{%
+\ifincommdiag\ifx\CD@iD\@fillh\ifx\CD@jD\@fillh\ifdim\dimen3>\z@\else\ifdim
+\dimen2>93\CD@@I\ifdim\dimen2>18\p@\ifdim\CD@LF>\z@\count@\CD@bJ\advance
+\count@\m@ne\ifnum\count@<\z@\count@20\let\CD@aJ\CD@uJ\fi\xdef\CD@bJ{\the
+\count@}\fi\fi\fi\fi\fi\fi\fi}\def\CD@cG#1{\vrule\horizhtdp width#1\dimen@
+\kern2\dimen@}\def\CD@uJ{\rlap{\dimen@\CD@@I\CD@V\dimen@{.182\p@}\CD@zH
+\dimen@\advance\CD@tI\dimen@\CD@cG0\CD@cG0\CD@cG2\CD@cG6\CD@cG6\CD@cG2\CD@cG0%
+\CD@cG0\CD@cG2\CD@cG6\CD@cG0\CD@cG0\CD@cG2\CD@cG2\CD@cG6\CD@cG0\CD@cG0\CD@cG2%
+\CD@cG6\CD@cG2\CD@cG2\CD@cG0\CD@cG0}}\def\CD@bJ{10}\def\CD@aJ{}\def\CD@XD{%
+\CD@gE\CD@TB\fi\CD@x\CD@WF\CD@HI}\def\CD@x{\CD@QJ\CD@DC\CD@MJ\ifdim\CD@DC=\z@
+\else\CD@pF\CD@DC\fi\ifvoid3 \setbox3=\null\ht3\CD@tI\dp3\CD@sI\else\CD@V{\ht
+3}\CD@tI\CD@V{\dp3}\CD@sI\fi\dimen3=.5\wd3 \ifdim\dimen3=\z@\CD@tE\else\dimen
+3-\CD@XH\fi\else\CD@TB\fi\CD@V{\dimen2}{\wd7}\CD@V{\dimen2}{\wd6}\CD@qJ
+\advance\dimen2-2\dimen3 \dimen4.5\dimen2 \dimen2\dimen4 \advance\dimen2%
+\CD@eJ\advance\dimen4-\CD@eJ\advance\dimen2-\wd1 \advance\dimen4-\wd5 \ifvoid
+2 \else\CD@V{\ht3}{\ht2}\CD@V{\dp3}{\dp2}\CD@V{\dimen2}{\wd2}\fi\ifvoid4 \else
+\CD@V{\ht3}{\ht4}\CD@V{\dp3}{\dp4}\CD@V{\dimen4}{\wd4}\fi\advance\skip2\dimen
+2 \advance\skip4\dimen4 \CD@tE\advance\skip2\skip4 \dimen0\dimen5 \advance
+\dimen0\wd5 \skip3-\skip4 \advance\skip3-\dimen0 \let\CD@jD\empty\else\skip3%
+\z@\relax\dimen0\z@\fi}\def\CD@WF{\offinterlineskip\lineskip.2\CD@zC\ifvoid6
+\else\setbox3=\vbox{\hbox to2\dimen3{\hss\box6\hss}\box3}\fi\ifvoid7 \else
+\setbox3=\vtop{\box3 \hbox to2\dimen3{\hss\box7\hss}}\fi}\def\CD@HI{\kern
+\dimen1 \box1 \CD@aJ\CD@iD\hskip\skip2 \kern\dimen0 \ifincommdiag\CD@jE
+\penalty1\fi\kern\dimen3 \penalty\CD@GB\hskip\skip3 \null\kern-\dimen3 \else
+\hskip\skip3 \fi\box3 \CD@jD\hskip\skip4 \box5 \kern\dimen5}\def\CD@MF{\ifnum
+\CD@LH>\CD@TC\CD@V{\dimen1}\objectheight\CD@V{\dimen5}\objectheight\else\CD@V
+{\dimen1}\objectwidth\CD@V{\dimen5}\objectwidth\fi}\def\CD@Y{\begingroup
+\ifdim\dimen7=\z@\kern\dimen8 \else\ifdim\dimen6=\z@\kern\dimen9 \else\dimen5%
+\dimen6 \dimen6\dimen9 \CD@KJ\dimen4\dimen2 \CD@dG{\dimen4}\dimen6\dimen5
+\dimen7\dimen8 \CD@KJ\CD@iC{\dimen2}\ifdim\dimen2<\dimen4 \kern\dimen2 \else
+\kern\dimen4 \fi\fi\fi\endgroup}\def\CD@jJ{\CD@JI\setbox\z@\hbox{\lower
+\axisheight\hbox to\dimen2{\CD@DF\ifPositiveGradient\dimen8\ht\CD@MH\dimen9%
+\CD@mI\else\dimen8\dp3 \dimen9\dimen1 \fi\else\dimen8 \ifPositiveGradient
+\objectheight\else\z@\fi\dimen9\objectwidth\fi\advance\dimen8
+\ifPositiveGradient-\fi\axisheight\CD@Y\unhbox\z@\CD@DF\ifPositiveGradient
+\dimen8\dp3 \dimen9\dimen0 \else\dimen8\ht\CD@MH\dimen9\CD@mF\fi\else\dimen8
+\ifPositiveGradient\z@\else\objectheight\fi\dimen9\objectwidth\fi\advance
+\dimen8 \ifPositiveGradient\else-\fi\axisheight\CD@Y}}}\def\CD@bD{\dimen6
+\CD@aK\DiagramCellHeight\dimen7 \CD@WK\DiagramCellWidth\CD@jJ
+\ifPositiveGradient\advance\dimen7-\CD@ZK\DiagramCellWidth\else\dimen7 \CD@ZK
+\DiagramCellWidth\dimen6\z@\fi\advance\dimen6-\CD@bK\DiagramCellHeight\CD@mK
+\setbox0=\rlap{\kern-\dimen7 \lower\dimen6\box\z@}\ht0\z@\dp0\z@\raise
+\axisheight\box0 }\def\CD@mK{\setbox0\hbox{\ht\z@\z@\dp\z@\z@\wd\z@\z@\CD@hK
+\expandafter\pdfliteral{q \CD@eK\space\CD@lK\space\CD@kK\space\CD@eK\space0 0
+cm}\else\global\CD@iG\CD@eD{\the\CD@TC\space\ifPositiveGradient\else-\fi\the
+\CD@LH\space bturn}\fi\box\z@\CD@gK}}\def\CD@vB{\advance\CD@hF-\CD@mI\CD@wJ
+\CD@hF\advance\CD@wJ\CD@hI\ifvoid\CD@sH\ifdim\CD@wJ<.1em\ifnum\CD@gD=\@m\else
+\CD@aG h\CD@wJ<.1em:objects overprint:\CD@FA\CD@gD\fi\fi\else\ifhbox\CD@sH
+\CD@SK\else\CD@TK\fi\advance\CD@wJ\CD@mI\CD@bH{-\CD@mI}{\box\CD@sH}{\CD@wJ}%
+\z@\fi\CD@hF-\CD@mF\CD@gD\CD@FA\CD@hI\z@}\def\CD@SK{\setbox\CD@sH=\hbox{%
+\unhbox\CD@sH\unskip\unpenalty}\setbox\CD@tH=\hbox{\unhbox\CD@tH\unskip
+\unpenalty}\setbox\CD@sH=\hbox to\CD@wJ{\CD@OA\wd\CD@sH\unhbox\CD@sH\CD@PA
+\lastkern\unkern\ifdim\CD@PA=\z@\CD@UB\advance\CD@OA-\wd\CD@tH\else\CD@TB\fi
+\ifnum\lastpenalty=\z@\else\CD@JA\unpenalty\fi\kern\CD@PA\ifdim\CD@hF<\CD@OA
+\CD@JA\fi\ifdim\CD@hI<\wd\CD@tH\CD@JA\fi\CD@jE\CD@hI\CD@wJ\advance\CD@hI-%
+\CD@OA\advance\CD@hI\wd\CD@tH\ifdim\CD@hI<2\wd\CD@tH\CD@aG h\CD@hI<2\wd\CD@tH
+:arrow too short:\CD@FA\CD@gD\fi\divide\CD@hI\tw@\CD@hF\CD@wJ\advance\CD@hF-%
+\CD@hI\fi\CD@tE\kern-\CD@hI\fi\hbox to\CD@hI{\unhbox\CD@tH}\CD@HG}}\CD@tG
+\ifinpile\inpiletrue\inpilefalse\inpilefalse\def\pile{\protect\CD@UJ\protect
+\CD@uH}\def\CD@uH#1{\CD@l#1\CD@QD}\def\CD@UJ{\CD@nB{pile}\setbox0=\vtop
+\bgroup\aftergroup\CD@lD\inpiletrue\let\CD@FE\empty\let\pile\CD@KF\let\CD@QD
+\CD@PD\let\CD@GD\CD@FD\CD@yH\baselineskip.5\PileSpacing\lineskip.1\CD@zC
+\relax\lineskiplimit\lineskip\mathsurround\z@\tabskip\z@\let\\\CD@wH}\def
+\CD@l{\CD@DE\CD@YF\empty\halign\bgroup\hfil\CD@k\let\CD@FE\CD@d\let\\\CD@vH##%
+\CD@MD\CD@ND\hfil\CD@Q\CD@R##\cr}\CD@rG\CD@NE{pile only allows one column.}%
+\CD@rG\CD@UE{you left it out!}\def\CD@R{\CD@QD\CD@Q\relax\CD@YA{missing \CD@yC
+\space inserted after \string\pile}\CD@NE}\def\CD@PD{\CD@MD\crcr\egroup
+\egroup}\def\CD@GD{\CD@MD}\def\CD@FD{\CD@MD\relax\CD@QD\CD@YA{missing \CD@yC
+\space inserted between \string\pile\space and \CD@HD}\CD@UE}\def\CD@QD{%
+\CD@MD}\def\CD@lD{\vbox{\dimen1\dp0 \unvbox0 \setbox0=\lastbox\advance\dimen1%
+\dp0 \nointerlineskip\box0 \nointerlineskip\setbox0=\null\dp0.5\dimen1\ht0-%
+\dp0 \box0}\ifincommdiag\CD@tJ\penalty-9998 \fi\xdef\CD@YF{pile}}\def\CD@vH{%
+\cr}\def\CD@wH{\noalign{\skip@\prevdepth\advance\skip@-\baselineskip
+\prevdepth\skip@}}\def\CD@KF#1{#1}\def\CD@TK{\setbox\CD@sH=\vbox{\unvbox
+\CD@sH\setbox1=\lastbox\setbox0=\box\voidb@x\CD@tF\setbox\CD@sH=\lastbox
+\ifhbox\CD@sH\CD@rC\repeat\unvbox0 \global\CD@QA\CD@ZE}\CD@ZE\CD@QA}\def
+\CD@rC{\CD@jE\setbox\CD@sH=\hbox{\unhbox\CD@sH\unskip\setbox\CD@sH=\lastbox
+\unskip\unhbox\CD@sH}\ifdim\CD@wJ<\wd\CD@sH\CD@aG h\CD@wJ<\wd\CD@sH:arrow in
+pile too short:\CD@FA\CD@gD\else\setbox\CD@sH=\hbox to\CD@wJ{\unhbox\CD@sH}%
+\fi\else\CD@gJ\fi\setbox0=\vbox{\box\CD@sH\nointerlineskip\ifvoid0 \CD@tJ\box
+1 \else\vskip\skip0 \unvbox0 \fi}\skip0=\lastskip\unskip}\def\CD@gJ{\penalty7
+\noindent\unhbox\CD@sH\unskip\setbox\CD@sH=\lastbox\unskip\unhbox\CD@sH
+\endgraf\setbox\CD@tH=\lastbox\unskip\setbox\CD@tH=\hbox{\CD@JG\unhbox\CD@tH
+\unskip\unskip\unpenalty}\ifcase\prevgraf\cd@shouldnt P\or\ifdim\CD@wJ<\wd
+\CD@tH\CD@aG h\CD@wJ<\wd\CD@sH:object in pile too wide:\CD@FA\CD@gD\setbox
+\CD@sH=\hbox to\CD@wJ{\hss\unhbox\CD@tH\hss}\else\setbox\CD@sH=\hbox to\CD@wJ
+{\hss\kern\CD@hF\unhbox\CD@tH\kern\CD@hI\hss}\fi\or\setbox\CD@sH=\lastbox
+\unskip\CD@SK\else\cd@shouldnt Q\fi\unskip\unpenalty}\def\CD@cD{\CD@MJ\ifvoid
+3 \setbox3=\null\ht3\axisheight\dp3-\ht3 \dimen3.5\CD@LF\else\dimen4\dp3
+\dimen3.5\wd3 \setbox3=\CD@GG{\box3}\dp3\dimen4 \ifdim\ht3=-\dp3 \else\CD@TB
+\fi\fi\dimen0\dimen3 \advance\dimen0-.5\CD@LF\setbox0\null\ht0\ht3\dp0\dp3\wd
+0\wd3 \ifvoid6\else\setbox6\hbox{\unhbox6\kern\dimen0\kern2pt}\dimen0\wd6 \fi
+\ifvoid7\else\setbox7\hbox{\kern2pt\kern\dimen3\unhbox7}\dimen3\wd7 \fi
+\setbox3\hbox{\ifvoid6\else\kern-\dimen0\unhbox6\fi\unhbox3 \ifvoid7\else
+\unhbox7\kern-\dimen3\fi}\ht3\ht0\dp3\dp0\wd3\wd0 \CD@tE\dimen4=\ht\CD@MH
+\advance\dimen4\dp5 \advance\dimen4\dimen1 \let\CD@jD\empty\else\dimen4\ht3
+\fi\setbox0\null\ht0\dimen4 \offinterlineskip\setbox8=\vbox spread2ex{\kern
+\dimen5 \box1 \CD@iD\vfill\CD@tE\else\kern\CD@eJ\fi\box0}\ht8=\z@\setbox9=%
+\vtop spread2ex{\kern-\ht3 \kern-\CD@eJ\box3 \CD@jD\vfill\box5 \kern\dimen1}%
+\dp9=\z@\hskip\dimen0plus.0001fil \box9 \kern-\CD@LF\box8 \CD@kE\penalty2 \fi
+\CD@tE\penalty1 \fi\kern\PileSpacing\kern-\PileSpacing\kern-.5\CD@LF\penalty
+\CD@GB\null\kern\dimen3}\def\CD@cI{\ifhbox\CD@VA\CD@KB{clashing verticals}\ht
+\CD@MH.5\dp\CD@VA\dp\CD@MH-\ht5 \CD@yB\ht\CD@MH\z@\dp\CD@MH\z@\fi\dimen1\dp
+\CD@VA\CD@xA\prevgraf\unvbox\CD@VA\CD@wA\lastpenalty\unpenalty\setbox\CD@VA=%
+\null\setbox\CD@lI=\hbox{\CD@JG\unhbox\CD@lI\unskip\unpenalty\dimen0\lastkern
+\unkern\unkern\unkern\kern\dimen0 \CD@HG}\setbox\CD@lF=\hbox{\unhbox\CD@lF
+\dimen0\lastkern\unkern\unkern\global\CD@QA\lastkern\unkern\kern\dimen0 }%
+\CD@tF\ifnum\CD@xA>4 \CD@zI\repeat\unskip\unskip\advance\CD@mF.5\wd\CD@VA
+\advance\CD@mF\wd\CD@lF\advance\CD@mI.5\wd\CD@VA\advance\CD@mI\wd\CD@lI\ifnum
+\CD@FA=\CD@lA\CD@OA.5\wd\CD@VA\edef\CD@NK{\the\CD@OA}\fi\setbox\CD@VA=\hbox{%
+\kern-\CD@mF\box\CD@lF\unhbox\CD@VA\box\CD@lI\kern-\CD@mI\penalty\CD@wA
+\penalty\CD@NB}\ht\CD@VA\dimen1 \dp\CD@VA\z@\wd\CD@VA\CD@tB\CD@vB}\def\CD@zI{%
+\ifdim\wd\CD@lF<\CD@QA\setbox\CD@lF=\hbox to\CD@QA{\CD@JG\unhbox\CD@lF}\fi
+\advance\CD@xA\m@ne\setbox\CD@VA=\hbox{\box\CD@lF\unhbox\CD@VA}\unskip\setbox
+\CD@lF=\lastbox\setbox\CD@lF=\hbox{\unhbox\CD@lF\unskip\unpenalty\dimen0%
+\lastkern\unkern\unkern\global\CD@QA\lastkern\unkern\kern\dimen0 }}\def\CD@yB
+{\dimen1\dp\CD@VA\ifhbox\CD@VA\CD@xB\else\CD@zB\fi\setbox\CD@VA=\vbox{%
+\penalty\CD@NB}\dp\CD@VA-\dp\CD@MH\wd\CD@VA\CD@tB}\def\CD@zB{\unvbox\CD@VA
+\CD@wA\lastpenalty\unpenalty\ifdim\dimen1<\ht\CD@MH\CD@aG v\dimen1<\ht\CD@MH:%
+rows overprint:\CD@NB\CD@wA\fi}\def\CD@xB{\dimen0=\ht\CD@VA\setbox\CD@VA=%
+\hbox\bgroup\advance\dimen1-\ht\CD@MH\unhbox\CD@VA\CD@xA\lastpenalty
+\unpenalty\CD@wA\lastpenalty\unpenalty\global\CD@RA-\lastkern\unkern\setbox0=%
+\lastbox\CD@tF\setbox\CD@VA=\hbox{\box0\unhbox\CD@VA}\setbox0=\lastbox\ifhbox
+0 \CD@kJ\repeat\global\CD@SA-\lastkern\unkern\global\CD@QA\CD@JK\unhbox\CD@VA
+\egroup\CD@JK\CD@QA\CD@bH{\CD@SA}{\box\CD@VA}{\CD@RA}{\dimen1}}\def\CD@kJ{%
+\setbox0=\hbox to\wd0\bgroup\unhbox0 \unskip\unpenalty\dimen7\lastkern\unkern
+\ifnum\lastpenalty=1 \unpenalty\CD@UB\else\CD@TB\fi\ifnum\lastpenalty=2
+\unpenalty\dimen2.5\dimen0\advance\dimen2-.5\dimen1\advance\dimen2-%
+\axisheight\else\dimen2\z@\fi\setbox0=\lastbox\dimen6\lastkern\unkern\setbox1%
+=\lastbox\setbox0=\vbox{\unvbox0 \CD@tE\kern-\dimen1 \else\ifdim\dimen2=\z@
+\else\kern\dimen2 \fi\fi}\ifdim\dimen0<\ht0 \CD@aG v\dimen0<\ht0:upper part of
+vertical too short:{\CD@tE\CD@NB\else\CD@wA\fi}\CD@xA\else\setbox0=\vbox to%
+\dimen0{\unvbox0}\fi\setbox1=\vtop{\unvbox1}\ifdim\dimen1<\dp1 \CD@aG v\dimen
+1<\dp1:lower part of vertical too short:\CD@NB\CD@wA\else\setbox1=\vtop to%
+\dimen1{\ifdim\dimen2=\z@\else\kern-\dimen2 \fi\unvbox1 }\fi\box1 \kern\dimen
+6 \box0 \kern\dimen7 \CD@HG\global\CD@QA\CD@JK\egroup\CD@JK\CD@QA\relax}%
+\countdef\CD@u=14 \newcount\CD@CA\newcount\CD@XB\newcount\CD@NB\let\CD@LB
+\insc@unt\newcount\CD@FA\newcount\CD@lA\let\CD@mA\CD@XB\newcount\CD@MB\CD@tG
+\CD@DF\CD@bI\CD@aI\CD@aI\def\CD@nD{-1}\def\CD@K{\ifnum\CD@nD<\z@\else
+\begingroup\scrollmode\showboxdepth\CD@nD\showboxbreadth\maxdimen\showlists
+\endgroup\fi\CD@bI\CD@zF\CD@CA=\CD@u\advance\CD@CA1 \CD@XB=\CD@CA\ifnum\CD@NB
+=1 \CD@JA\fi\advance\CD@XB\CD@NB\dimen1\z@\skip0\z@\count@=\insc@unt\advance
+\count@\CD@u\divide\count@2 \ifnum\CD@XB>\count@\CD@KB{The diagram has too
+many rows! It can't be reformatted.}\else\CD@NG\CD@WI\fi\CD@cH}\def\CD@NG{%
+\CD@NB\CD@CA\CD@uF\ifnum\CD@NB<\CD@XB\setbox\CD@NB\box\voidb@x\advance\CD@NB1%
+\relax\repeat\CD@NB\CD@CA\skip\z@\z@\CD@uF\CD@GB\lastpenalty\unpenalty\ifnum
+\CD@GB>\z@\CD@KE\repeat\ifnum\CD@GB=-123 \CD@tJ\unpenalty\else\cd@shouldnt D%
+\fi\ifx\v@grid\relax\else\CD@NB\CD@XB\advance\CD@NB\m@ne\expandafter\CD@VJ
+\v@grid\fi\CD@MB\CD@mA\CD@tB\z@\CD@XG\ifx\h@grid\relax\else\expandafter\CD@LJ
+\h@grid\fi\count@\CD@XB\advance\count@\m@ne\CD@YB\ht\count@}\def\CD@KE{%
+\ifcase\CD@GB\or\CD@MG\else\CD@uA-\lastpenalty\unpenalty\CD@vA\lastpenalty
+\unpenalty\setbox0=\lastbox\CD@WG\fi\CD@wD}\def\CD@wD{\skip1\lastskip\unskip
+\advance\skip0\skip1 \ifdim\skip1=\z@\else\expandafter\CD@wD\fi}\def\CD@MG{%
+\setbox0=\lastbox\CD@pI\dp0 \advance\CD@pI\skip\z@\skip\z@\z@\advance\CD@NF
+\CD@pI\CD@uE\ifnum\CD@NB>\CD@CA\CD@NF\DiagramCellHeight\CD@pI\CD@NF\advance
+\CD@pI-\CD@qI\fi\fi\CD@qI\ht0 \CD@NF\CD@qI\setbox\CD@NB\hbox{\unhbox\CD@NB
+\unhbox0}\dp\CD@NB\CD@pI\ht\CD@NB\CD@qI\advance\CD@NB1 }\def\CD@WG{\ifnum
+\CD@uA<\z@\advance\CD@uA\CD@XB\ifnum\CD@uA<\CD@CA\CD@UG\else\CD@OA\dp\CD@uA
+\CD@PA\ht\CD@uA\setbox\CD@uA\hbox{\box\z@\penalty\CD@vA\penalty\CD@GB\unhbox
+\CD@uA}\dp\CD@uA\CD@OA\ht\CD@uA\CD@PA\fi\else\CD@UG\fi}\def\CD@UG{\CD@KB{%
+diagonal goes outside diagram (lost)}}\def\CD@fI{\advance\CD@uA\CD@XB\ifnum
+\CD@uA<\CD@CA\CD@UG\else\ifnum\CD@uA=\CD@NB\CD@VG\else\ifnum\CD@uA>\CD@NB
+\cd@shouldnt M\else\CD@OA\dp\CD@uA\CD@PA\ht\CD@uA\setbox\CD@uA\hbox{\box\z@
+\penalty\CD@vA\penalty\CD@GB\unhbox\CD@uA}\dp\CD@uA\CD@OA\ht\CD@uA\CD@PA\fi
+\fi\fi}\def\CD@WI{\CD@t\CD@AJ\setbox\CD@PC=\hbox{\CD@k A\@super f\CD@lJ f%
+\CD@ND}\CD@ZE\z@\CD@JK\z@\CD@kI\z@\CD@kF\z@\CD@NB=\CD@XB\CD@NF\z@\CD@uB\z@
+\CD@uF\ifnum\CD@NB>\CD@CA\advance\CD@NB\m@ne\CD@qI\ht\CD@NB\CD@pI\dp\CD@NB
+\advance\CD@NF\CD@qI\CD@rI\advance\CD@uB\CD@NF\CD@KC\CD@ZI\CD@w\ht\CD@NB
+\CD@qI\dp\CD@NB\CD@pI\nointerlineskip\box\CD@NB\CD@NF\CD@pI\setbox\CD@NB\null
+\ht\CD@NB\CD@uB\repeat\CD@wB\nointerlineskip\box\CD@NB\CD@gG\CD@ZE
+\DiagramCellWidth{width}\CD@gG\CD@JK\DiagramCellHeight{height}\CD@VA\CD@LB
+\advance\CD@VA-\CD@lA\advance\CD@VA\m@ne\advance\CD@VA\CD@mA\dimen0\wd\CD@VA
+\CD@tI\axisheight\dimen1\CD@uB\advance\dimen1-\CD@YB\dimen2\CD@kI\advance
+\dimen2-\dimen0 \advance\CD@XB-\CD@CA\advance\CD@LB-\CD@lA}\count@\year
+\multiply\count@12 \advance\count@\month\ifnum\count@>24090 \loop\iftrue
+\message{gone October 2007!}\repeat\fi\def\CD@wB{\CD@qI-\CD@NF\CD@pI\CD@NF
+\setbox\CD@MH=\null\dp\CD@MH\CD@NF\ht\CD@MH-\CD@NF\CD@mF\z@\CD@mI\z@\CD@lA
+\CD@LB\advance\CD@lA-\CD@MB\advance\CD@lA\CD@mA\CD@FA\CD@LB\CD@VA\CD@MB\CD@sF
+\ifnum\CD@FA>\CD@lA\advance\CD@FA\m@ne\advance\CD@VA\m@ne\CD@tB\wd\CD@VA
+\setbox\CD@FA=\box\voidb@x\CD@yB\repeat\CD@w\ht\CD@NB\CD@qI\dp\CD@NB\CD@pI}%
+\def\CD@gG#1#2#3{\ifdim#1>.01\CD@zC\CD@PA#2\relax\advance\CD@PA#1\relax
+\advance\CD@PA.99\CD@zC\count@\CD@PA\divide\count@\CD@zC\CD@KB{increase cell #%
+3 to \the\count@ em}\fi}\def\CD@rI{\CD@FA=\CD@LB\penalty4 \noindent\unhbox
+\CD@NB\CD@sF\unskip\setbox0=\lastbox\ifhbox0 \advance\CD@FA\m@ne\setbox\CD@FA
+\hbox to\wd0{\null\penalty-9990\null\unhbox0}\repeat\CD@lA\CD@FA\advance
+\CD@FA\CD@MB\advance\CD@FA-\CD@mA\ifnum\CD@FA<\CD@LB\count@\CD@FA\advance
+\count@\m@ne\dimen0=\wd\count@\count@\CD@MB\advance\count@\m@ne\CD@tB\wd
+\count@\CD@sF\ifnum\CD@FA<\CD@LB\CD@DJ\CD@XG\dimen0\wd\CD@FA\advance\CD@FA1
+\repeat\fi\CD@sF\CD@GB\lastpenalty\unpenalty\ifnum\CD@GB>\z@\CD@vA
+\lastpenalty\unpenalty\CD@VG\repeat\endgraf\unskip\ifnum\lastpenalty=4
+\unpenalty\else\cd@shouldnt S\fi}\def\CD@VG{\advance\CD@vA\CD@lA\advance
+\CD@vA\m@ne\setbox0=\lastbox\ifnum\CD@vA<\CD@LB\setbox\CD@vA\hbox{\box0%
+\penalty\CD@GB\unhbox\CD@vA}\else\CD@UG\fi}\def\CD@bG{}\CD@tG\CD@uE\CD@WB
+\CD@VB\def\CD@DJ{\advance\dimen0\wd\CD@FA\divide\dimen0\tw@\CD@uE\dimen0%
+\DiagramCellWidth\else\CD@V{\dimen0}\DiagramCellWidth\CD@pJ\fi\advance\CD@tB
+\dimen0 }\def\CD@XG{\setbox\CD@MB=\vbox{}\dp\CD@MB=\CD@uB\wd\CD@MB\CD@tB
+\advance\CD@MB1 }\def\CD@LJ#1,{\def\CD@GK{#1}\ifx\CD@GK\CD@RD\else\advance
+\CD@tB\CD@GK\DiagramCellWidth\CD@XG\expandafter\CD@LJ\fi}\def\CD@VJ#1,{\def
+\CD@GK{#1}\ifx\CD@GK\CD@RD\else\ifnum\CD@NB>\CD@CA\CD@NF\CD@GK
+\DiagramCellHeight\advance\CD@NF-\dp\CD@NB\advance\CD@NB\m@ne\ht\CD@NB\CD@NF
+\fi\expandafter\CD@VJ\fi}\def\CD@pJ{\CD@wE\CD@OA\dimen0 \advance\CD@OA-%
+\DiagramCellWidth\ifdim\CD@OA>2\MapShortFall\CD@KB{badly drawn diagonals (see
+manual)}\let\CD@pJ\empty\fi\else\let\CD@pJ\empty\fi}\def\CD@KC{\CD@VA\CD@mA
+\CD@sF\ifnum\CD@VA<\CD@MB\dimen0\dp\CD@VA\advance\dimen0\CD@NF\dp\CD@VA\dimen
+0 \advance\CD@VA1 \repeat}\def\CD@bH#1#2#3#4{\ifnum\CD@FA<\CD@LB\CD@OA=#1%
+\relax\setbox\CD@FA=\hbox{\setbox0=#2\dimen7=#4\relax\dimen8=#3\relax\ifhbox
+\CD@FA\unhbox\CD@FA\advance\CD@OA-\lastkern\unkern\fi\ifdim\CD@OA=\z@\else
+\kern-\CD@OA\fi\raise\dimen7\box0 \kern-\dimen8 }\ifnum\CD@FA=\CD@lA\CD@V
+\CD@kF\CD@OA\fi\else\cd@shouldnt O\fi}\def\CD@w{\setbox\CD@NB=\hbox{\CD@FA
+\CD@lA\CD@VA\CD@mA\CD@PA\z@\relax\CD@sF\ifnum\CD@FA<\CD@LB\CD@tB\wd\CD@VA
+\relax\CD@eI\advance\CD@FA1 \advance\CD@VA1 \repeat}\CD@V\CD@kI{\wd\CD@NB}\wd
+\CD@NB\z@}\def\CD@eI{\ifhbox\CD@FA\CD@OA\CD@tB\relax\advance\CD@OA-\CD@PA
+\relax\ifdim\CD@OA=\z@\else\kern\CD@OA\fi\CD@PA\CD@tB\advance\CD@PA\wd\CD@FA
+\relax\unhbox\CD@FA\advance\CD@PA-\lastkern\unkern\fi}\def\CD@ZI{\setbox
+\CD@sH=\box\voidb@x\CD@VA=\CD@MB\CD@FA\CD@LB\CD@VA\CD@mA\advance\CD@VA\CD@FA
+\advance\CD@VA-\CD@lA\advance\CD@VA\m@ne\CD@tB\wd\CD@VA\count@\CD@LB\advance
+\count@\m@ne\CD@hF.5\wd\count@\advance\CD@hF\CD@tB\CD@A\m@ne\CD@gD\@m\CD@sF
+\ifnum\CD@FA>\CD@lA\advance\CD@FA\m@ne\advance\CD@hF-\CD@tB\CD@PI\wd\CD@VA
+\CD@tB\advance\CD@hF\CD@tB\advance\CD@VA\m@ne\CD@tB\wd\CD@VA\repeat\CD@mF
+\CD@kF\CD@mI-\CD@mF\CD@vB}\newcount\CD@GB\def\CD@s{}\def\CD@t{\mathsurround
+\z@\hsize\z@\rightskip\z@ plus1fil minus\maxdimen\parfillskip\z@\linepenalty
+9000 \looseness0 \hfuzz\maxdimen\hbadness10000 \clubpenalty0 \widowpenalty0
+\displaywidowpenalty0 \interlinepenalty0 \predisplaypenalty0
+\postdisplaypenalty0 \interdisplaylinepenalty0 \interfootnotelinepenalty0
+\floatingpenalty0 \brokenpenalty0 \everypar{}\leftskip\z@\parskip\z@
+\parindent\z@\pretolerance10000 \tolerance10000 \hyphenpenalty10000
+\exhyphenpenalty10000 \binoppenalty10000 \relpenalty10000 \adjdemerits0
+\doublehyphendemerits0 \finalhyphendemerits0 \CD@IA\prevdepth\z@}\newbox
+\CD@KG\newbox\CD@IG\def\CD@JG{\unhcopy\CD@KG}\def\CD@HG{\unhcopy\CD@IG}\def
+\CD@iJ{\hbox{}\penalty1\nointerlineskip}\def\CD@PI{\penalty5 \noindent\setbox
+\CD@MH=\null\CD@mF\z@\CD@mI\z@\ifnum\CD@FA<\CD@LB\ht\CD@MH\ht\CD@FA\dp\CD@MH
+\dp\CD@FA\unhbox\CD@FA\skip0=\lastskip\unskip\else\CD@OK\skip0=\z@\fi\endgraf
+\ifcase\prevgraf\cd@shouldnt Y \or\cd@shouldnt Z \or\CD@RI\or\CD@XI\else
+\CD@QI\fi\unskip\setbox0=\lastbox\unskip\unskip\unpenalty\noindent\unhbox0%
+\setbox0\lastbox\unpenalty\unskip\unskip\unpenalty\setbox0\lastbox\CD@tF
+\CD@GB\lastpenalty\unpenalty\ifnum\CD@GB>\z@\setbox\z@\lastbox\CD@lB\repeat
+\endgraf\unskip\unskip\unpenalty}\def\CD@YJ{\CD@uA\CD@XB\advance\CD@uA-\CD@NB
+\CD@vA\CD@FA\advance\CD@vA-\CD@lA\advance\CD@vA1 \expandafter\message{%
+prevgraf=\the\prevgraf at (\the\CD@uA,\the\CD@vA)}}\def\CD@XI{\CD@CE\setbox
+\CD@lI=\lastbox\setbox\CD@lI=\hbox{\unhbox\CD@lI\unskip\unpenalty}\unskip
+\ifdim\ht\CD@lI>\ht\CD@PC\setbox\CD@MH=\copy\CD@lI\else\ifdim\dp\CD@lI>\dp
+\CD@PC\setbox\CD@MH=\copy\CD@lI\else\CD@FG\CD@lI\fi\fi\advance\CD@mF.5\wd
+\CD@lI\advance\CD@mI.5\wd\CD@lI\setbox\CD@lI=\hbox{\unhbox\CD@lI\CD@HG}\CD@bH
+\CD@mF{\box\CD@lI}\CD@mI\z@\CD@yB\CD@vB}\def\CD@CE{\ifnum\CD@A>0 \advance
+\dimen0-\CD@tB\CD@iA-.5\dimen0 \CD@A-\CD@A\else\CD@A0 \CD@iA\z@\fi\setbox
+\CD@MH=\lastbox\setbox\CD@MH=\hbox{\unhbox\CD@MH\unskip\unskip\unpenalty
+\setbox0=\lastbox\global\CD@QA\lastkern\unkern}\advance\CD@iA-.5\CD@QA\unskip
+\setbox\CD@MH=\null\CD@mI\CD@iA\CD@mF-\CD@iA}\def\CD@Z{\ht\CD@MH\CD@tI\dp
+\CD@MH\CD@sI}\def\CD@FG#1{\setbox\CD@MH=\hbox{\CD@V{\ht\CD@MH}{\ht#1}\CD@V{%
+\dp\CD@MH}{\dp#1}\CD@V{\wd\CD@MH}{\wd#1}\vrule height\ht\CD@MH depth\dp\CD@MH
+width\wd\CD@MH}}\def\CD@QI{\CD@CE\CD@Z\setbox\CD@lI=\lastbox\unskip\setbox
+\CD@lF=\lastbox\unskip\setbox\CD@lF=\hbox{\unhbox\CD@lF\unskip\global\CD@yA
+\lastpenalty\unpenalty}\advance\CD@yA9999 \ifcase\CD@yA\CD@VI\or\CD@YI\or
+\CD@TI\or\CD@dI\or\CD@cI\or\CD@SI\else\cd@shouldnt9\fi}\def\CD@VI{\CD@FG
+\CD@lI\CD@UI\setbox\CD@sH=\box\CD@lF\setbox\CD@tH=\box\CD@lI}\def\CD@YI{%
+\CD@FG\CD@lF\setbox\CD@lI\hbox{\penalty8 \unhbox\CD@lI\unskip\unpenalty\ifnum
+\lastpenalty=8 \else\CD@xH\fi}\CD@UI\setbox\CD@lF=\hbox{\unhbox\CD@lF\unskip
+\unpenalty\global\setbox\CD@DA=\lastbox}\ifdim\wd\CD@lF=\z@\else\CD@xH\fi
+\setbox\CD@sH=\box\CD@DA}\def\CD@xH{\CD@KB{extra material in \string\pile
+\space cell (lost)}}\def\CD@UI{\CD@yB\ifvoid\CD@sH\else\CD@KB{Clashing
+horizontal arrows}\CD@mI.5\CD@hF\CD@mF-\CD@mI\CD@vB\CD@mI\z@\CD@mF\z@\fi
+\CD@hI\CD@hF\advance\CD@hI-\CD@mI\CD@hF-\CD@mF\CD@JC\CD@FA}\def\CD@RI{\setbox
+0\lastbox\unskip\CD@iA\z@\CD@Z\ifdim\skip0>\z@\CD@tJ\CD@A0 \else\ifnum\CD@A<1
+\CD@A0 \dimen0\CD@tB\fi\advance\CD@A1 \fi}\def\VonH{\CD@MA46\VonH{.5\CD@LF}}%
+\def\HonV{\CD@MA57\HonV{.5\CD@LF}}\def\HmeetV{\CD@MA44\HmeetV{-\MapShortFall}%
+}\def\CD@MA#1#2#3#4{\CD@pB34#1{\string#3}\CD@SD\CD@GB-999#2 \dimen0=#4\CD@tI
+\dimen0\advance\CD@tI\axisheight\CD@sI\dimen0\advance\CD@sI-\axisheight\CD@CF
+\CD@HC\CD@ZD}\def\CD@HC#1{\setbox0=\hbox{\CD@k#1\CD@ND}\dimen0.5\wd0 \CD@tI
+\ht0 \CD@sI\dp0 \CD@ZD}\def\CD@SD{\setbox0=\null\ht0=\CD@tI\dp0=\CD@sI\wd0=%
+\dimen0 \copy0\penalty\CD@GB\box0 }\def\CD@TI{\CD@GC\CD@yB}\def\CD@dI{\CD@GC
+\CD@vB}\def\CD@SI{\CD@GC\CD@yB\CD@vB}\def\CD@GC{\setbox\CD@lI=\hbox{\unhbox
+\CD@lI}\setbox\CD@lF=\hbox{\unhbox\CD@lF\global\setbox\CD@DA=\lastbox}\ht
+\CD@MH\ht\CD@DA\dp\CD@MH\dp\CD@DA\advance\CD@mF\wd\CD@DA\advance\CD@mI\wd
+\CD@lI}\CD@tG\ifPositiveGradient\CD@CI\CD@BI\CD@CI\CD@tG\ifClimbing\CD@rB
+\CD@qB\CD@rB\newcount\DiagonalChoice\DiagonalChoice\m@ne\ifx\tenln\nullfont
+\CD@tJ\def\CD@qF{\CD@KH\ifPositiveGradient/\else\CD@k\backslash\CD@ND\fi}%
+\else\def\CD@qF{\CD@rF\char\count@}\fi\let\CD@rF\tenln\def\Use@line@char#1{%
+\hbox{#1\CD@rF\ifPositiveGradient\else\advance\count@64 \fi\char\count@}}\def
+\CD@cF{\Use@line@char{\count@\CD@TC\multiply\count@8\advance\count@-9\advance
+\count@\CD@LH}}\def\CD@ZF{\Use@line@char{\ifcase\DiagonalChoice\CD@gF\or
+\CD@fF\or\CD@fF\else\CD@gF\fi}}\def\CD@gF{\ifnum\CD@TC=\z@\count@\rq33 \else
+\count@\CD@TC\multiply\count@\sixt@@n\advance\count@-9\advance\count@\CD@LH
+\advance\count@\CD@LH\fi}\def\CD@fF{\count@\rq\ifcase\CD@LH55\or\ifcase\CD@TC
+66\or22\or52\or61\or72\fi\or\ifcase\CD@TC66\or25\or22\or63\or52\fi\or\ifcase
+\CD@TC66\or16\or36\or22\or76\fi\or\ifcase\CD@TC66\or27\or25\or67\or22\fi\fi
+\relax}\def\CD@uC#1{\hbox{#1\setbox0=\Use@line@char{#1}\ifPositiveGradient
+\else\raise.3\ht0\fi\copy0 \kern-.7\wd0 \ifPositiveGradient\raise.3\ht0\fi
+\box0}}\def\CD@jF#1{\hbox{\setbox0=#1\kern-.75\wd0 \vbox to.25\ht0{%
+\ifPositiveGradient\else\vss\fi\box0 \ifPositiveGradient\vss\fi}}}\def\CD@jI#%
+1{\hbox{\setbox0=#1\dimen0=\wd0 \vbox to.25\ht0{\ifPositiveGradient\vss\fi
+\box0 \ifPositiveGradient\else\vss\fi}\kern-.75\dimen0 }}\CD@RC{+h:>}{%
+\Use@line@char\CD@fF}\CD@RC{-h:>}{\Use@line@char\CD@gF}\CD@nF{+t:<}{-h:>}%
+\CD@nF{-t:<}{+h:>}\CD@RC{+t:>}{\CD@jF{\Use@line@char\CD@fF}}\CD@RC{-t:>}{%
+\CD@jI{\Use@line@char\CD@gF}}\CD@nF{+h:<}{-t:>}\CD@nF{-h:<}{+t:>}\CD@RC{+h:>>%
+}{\CD@uC\CD@fF}\CD@RC{-h:>>}{\CD@uC\CD@gF}\CD@nF{+t:<<}{-h:>>}\CD@nF{-t:<<}{+%
+h:>>}\CD@nF{+h:>->}{+h:>>}\CD@nF{-h:>->}{-h:>>}\CD@nF{+t:<-<}{-h:>>}\CD@nF{-t%
+:<-<}{+h:>>}\CD@RC{+t:>>}{\CD@jF{\CD@uC\CD@fF}}\CD@RC{-t:>>}{\CD@jI{\CD@uC
+\CD@gF}}\CD@nF{+h:<<}{-t:>>}\CD@nF{-h:<<}{+t:>>}\CD@nF{+t:>->}{+t:>>}\CD@nF{-%
+t:>->}{-t:>>}\CD@nF{+h:<-<}{-t:>>}\CD@nF{-h:<-<}{+t:>>}\CD@RC{+f:-}{\CD@EF
+\null\else\CD@cF\fi}\CD@nF{-f:-}{+f:-}\def\CD@tC#1#2{\vbox to#1{\vss\hbox to#%
+2{\hss.\hss}\vss}}\def\hfdot{\CD@tC{2\axisheight}{.5em}}%
+%% % .7em until 29.7.98
+\def\vfdot{\CD@tC{1ex}\z@}%% % 1.46ex until 29.7.98
+\def\CD@bF{\hbox{\dimen0=.3\CD@zC\dimen1\dimen0 \ifnum\CD@LH>\CD@TC\CD@iC{%
+\dimen1}\else\CD@dG{\dimen0}\fi\CD@tC{\dimen0}{\dimen1}}}\newarrowfiller{.}%
+\hfdot\hfdot\vfdot\vfdot\def\dfdot{\CD@bF\CD@CK}\CD@RC{+f:.}{\dfdot}\CD@RC{-f%
+:.}{\dfdot}\def\CD@@K#1{\hbox\bgroup\def\CD@CH{#1\egroup}\afterassignment
+\CD@CH%%
+\count@=\rq}\def\lnchar{\CD@@K\CD@qF}\let\laf\lnchar\let\lah\lnchar\def\lad{%
+\CD@@K\xlad}\def\xlad{\setbox2=\hbox{\CD@qF}\setbox0=\hbox to.3\wd2{\hss.\hss
+}\dimen0=\ht0 \advance\dimen0-\dp0 \dimen1=.3\ht2 \advance\dimen1-\dimen0 \dp
+0=.5\dimen1 \dimen1=.3\ht2 \advance\dimen1\dimen0 \ht0=.5\dimen1 \raise\dp0%
+\box0}\def\lahh{\CD@@K\xlahh}\def\lat{\CD@@K\xlat}\def\xlat{\setbox0=\hbox{%
+\CD@qF}\dimen0=\ht0 \setbox1=\hbox to.25\wd0{\ifcase\DiagonalChoice\box0\hss
+\or\hss\box0 \or\hss\box0 \or\box0\hss\fi}\vbox to.25\dimen0{\ifClimbing\box1%
+\vss\else\vss\box1\fi\kern\z@}}\def\xlahh{\setbox0=\hbox{\CD@qF}%
+\ifPositiveGradient\CD@tJ\copy0 \kern-.7\wd0 \mv.3\ht0\box0 \else\ifClimbing
+\CD@tJ\copy0 \kern-.7\wd0 \mv.3\ht0\box0 \else\mv-.3\ht0\copy0 \kern-.7\wd0
+\box0 \fi\fi}\def\CD@dF#1{\setbox#1=\hbox{\dimen5\dimen#1 \setbox8=\box#1
+\dimen1\wd8 \count@\dimen5 \divide\count@\dimen1 \ifnum\count@=0 \box8 \ifdim
+\dimen5<.95\dimen1 \CD@gB{diagonal line too short}\fi\else\dimen3=\dimen5
+\advance\dimen3-\dimen1 \divide\dimen3\count@\dimen4\dimen3 \CD@dG{\dimen4}%
+\ifPositiveGradient\multiply\dimen4\m@ne\fi\dimen6\dimen1 \advance\dimen6-%
+\dimen3 \loop\raise\count@\dimen4\copy8 \ifnum\count@>0 \kern-\dimen6 \advance
+\count@\m@ne\repeat\fi}}\def\CD@CG#1{\CD@EF\CD@xJ{#1}\else\CD@dF{#1}\fi}\def
+\CD@IH#1{}\newdimen\objectheight\objectheight1.8ex \newdimen\objectwidth
+\objectwidth1em \def\CD@YD{\dimen6=\CD@aK\DiagramCellHeight\dimen7=\CD@WK
+\DiagramCellWidth\CD@KJ\ifnum\CD@LH>0 \ifnum\CD@TC>0 \CD@aF\else\aftergroup
+\CD@VC\fi\else\aftergroup\CD@UC\fi}\def\CD@VC{\CD@YA{diagonal map is nearly
+vertical}\CD@NA}\def\CD@UC{\CD@YA{diagonal map is nearly horizontal}\CD@NA}%
+\CD@rG\CD@NA{Use an orthogonal map instead}\def\CD@aF{\CD@MJ\dimen3\dimen7%
+\dimen7\dimen6\CD@iC{\dimen7}\advance\dimen3-\dimen7 \CD@MF\ifnum\CD@LH>%
+\CD@TC\advance\dimen6-\dimen1\advance\dimen6-\dimen5 \CD@iC{\dimen1}\CD@iC{%
+\dimen5}\else\dimen0\dimen1\advance\dimen0\dimen5\CD@dG{\dimen0}\advance
+\dimen6-\dimen0 \fi\dimen2.5\dimen7\advance\dimen2-\dimen1 \dimen4.5\dimen7%
+\advance\dimen4-\dimen5 \ifPositiveGradient\dimen0\dimen5 \advance\dimen1-%
+\CD@WK\DiagramCellWidth\advance\dimen1 \CD@ZK\DiagramCellWidth\setbox6=\llap{%
+\unhbox6\kern.1\ht2}\setbox7=\rlap{\kern.1\ht2\unhbox7}\else\dimen0\dimen1
+\advance\dimen1-\CD@ZK\DiagramCellWidth\setbox7=\llap{\unhbox7\kern.1\ht2}%
+\setbox6=\rlap{\kern.1\ht2\unhbox6}\fi\setbox6=\vbox{\box6\kern.1\wd2}\setbox
+7=\vtop{\kern.1\wd2\box7}\CD@dG{\dimen0}\advance\dimen0-\axisheight\advance
+\dimen0-\CD@bK\DiagramCellHeight\dimen5-\dimen0 \advance\dimen0\dimen6
+\advance\dimen1.5\dimen3 \ifdim\wd3>\z@\ifdim\ht3>-\dp3\CD@TB\fi\fi\dimen3%
+\dimen2 \dimen7\dimen2\advance\dimen7\dimen4 \ifvoid3 \else\CD@tE\else\dimen8%
+\ht3\advance\dimen8-\axisheight\CD@iC{\dimen8}\CD@X{\dimen8}{.5\wd3}\dimen9%
+\dp3\advance\dimen9\axisheight\CD@iC{\dimen9}\CD@X{\dimen9}{.5\wd3}%
+\ifPositiveGradient\advance\dimen2-\dimen9\advance\dimen4-\dimen8 \else
+\advance\dimen4-\dimen9\advance\dimen2-\dimen8 \fi\fi\advance\dimen3-.5\wd3
+\fi\dimen9=\CD@aK\DiagramCellHeight\advance\dimen9-2\DiagramCellHeight\CD@tE
+\advance\dimen2\dimen4 \CD@CG{2}\dimen2-\dimen0\advance\dimen2\dp2 \else
+\CD@CG{2}\CD@CG{4}\ifPositiveGradient\dimen2-\dimen0\advance\dimen2\dp2 \dimen
+4\dimen5\advance\dimen4-\ht4 \else\dimen4-\dimen0\advance\dimen4\dp4 \dimen2%
+\dimen5\advance\dimen2-\ht2 \fi\fi\setbox0=\hbox to\z@{\kern\dimen1 \ifvoid1
+\else\ifPositiveGradient\advance\dimen0-\dp1 \lower\dimen0 \else\advance
+\dimen5-\ht1 \raise\dimen5 \fi\rlap{\unhbox1}\fi\raise\dimen2\rlap{\unhbox2}%
+\ifvoid3 \else\lower.5\dimen9\rlap{\kern\dimen3\unhbox3}\fi\kern.5\dimen7
+\lower.5\dimen9\box6 \lower.5\dimen9\box7 \kern.5\dimen7 \CD@tE\else\raise
+\dimen4\llap{\unhbox4}\fi\ifvoid5 \else\ifPositiveGradient\advance\dimen5-\ht
+5 \raise\dimen5 \else\advance\dimen0-\dp5 \lower\dimen0 \fi\llap{\unhbox5}\fi
+\hss}\ht0=\axisheight\dp0=-\ht0\box0 }\def\NorthWest{\CD@BI\CD@rB
+\DiagonalChoice0 }\def\NorthEast{\CD@CI\CD@rB\DiagonalChoice1 }\def\SouthWest
+{\CD@CI\CD@qB\DiagonalChoice3 }\def\SouthEast{\CD@BI\CD@qB\DiagonalChoice2 }%
+\def\CD@aD{\vadjust{\CD@uA\CD@FA\advance\CD@uA\ifPositiveGradient\else-\fi
+\CD@ZK\relax\CD@vA\CD@NB\advance\CD@vA-\CD@bK\relax\hbox{\advance\CD@uA
+\ifPositiveGradient-\fi\CD@WK\advance\CD@vA\CD@aK\hbox{\box6 \kern\CD@DC\kern
+\CD@eJ\penalty1 \box7 \box\z@}\penalty\CD@uA\penalty\CD@vA}\penalty\CD@uA
+\penalty\CD@vA\penalty104}}\def\CD@eH#1{\relax\vadjust{\hbox@maths{#1}%
+\penalty\CD@FA\penalty\CD@NB\penalty\tw@}}\def\CD@lB{\ifcase\CD@GB\or\or
+\CD@bH{.5\wd0}{\box0}{.5\wd0}\z@\or\unhbox\z@\setbox\z@\lastbox\CD@bH{.5\wd0}%
+{\box0}{.5\wd0}\z@\unpenalty\unpenalty\setbox\z@\lastbox\or\CD@TG\else
+\advance\CD@GB-100 \ifnum\CD@GB<\z@\cd@shouldnt B\fi\setbox\z@\hbox{\kern
+\CD@mF\copy\CD@MH\kern\CD@mI\CD@uA\CD@XB\advance\CD@uA-\CD@NB\penalty\CD@uA
+\CD@uA\CD@FA\advance\CD@uA-\CD@lA\penalty\CD@uA\unhbox\z@\global\CD@yA
+\lastpenalty\unpenalty\global\CD@zA\lastpenalty\unpenalty}\CD@uA-\CD@yA\CD@vA
+\CD@zA\CD@fI\fi}\def\CD@TG{\unhbox\z@\setbox\z@\lastbox\CD@uA\lastpenalty
+\unpenalty\advance\CD@uA\CD@mA\CD@vA\CD@XB\advance\CD@vA-\lastpenalty
+\unpenalty\dimen1\lastkern\unkern\setbox3\lastbox\dimen0\lastkern\unkern
+\setbox0=\hbox to\z@{\unhbox0\setbox0\lastbox\setbox7\lastbox\unpenalty\CD@eJ
+\lastkern\unkern\CD@DC\lastkern\unkern\setbox6\lastbox\dimen7\CD@tB\advance
+\dimen7-\wd\CD@uA\ifdim\dimen7<\z@\CD@CI\multiply\dimen7\m@ne\let\mv\empty
+\else\CD@BI\def\mv{\raise\ht1}\kern-\dimen7 \fi\ifnum\CD@vA>\CD@NB\dimen6%
+\CD@uB\advance\dimen6-\ht\CD@vA\else\dimen6\z@\fi\CD@jJ\CD@mK\setbox1\null\ht
+1\dimen6\wd1\dimen7 \dimen7\dimen2 \dimen6\wd1 \CD@KJ\CD@uA\CD@LH\CD@vA\CD@TC
+\dimen6\ht1 \CD@KJ\setbox2\null\divide\dimen2\tw@\advance\dimen2\CD@eJ\CD@eG{%
+\dimen2}\wd2\dimen2 \dimen0.5\dimen7 \advance\dimen0\ifPositiveGradient\else-%
+\fi\CD@eJ\CD@dG{\dimen0}\advance\dimen0-\axisheight\ht2\dimen0 \dimen0\CD@DC
+\CD@eG{\dimen0}\advance\dimen0\ht2\ht2\dimen0 \dimen0\ifPositiveGradient-\fi
+\CD@DC\CD@dG{\dimen0}\advance\dimen0\wd2\wd2\dimen0 \setbox4\null\dimen0 .6%
+\CD@zC\CD@eG{\dimen0}\ht4\dimen0 \dimen0 .2\CD@zC\CD@dG{\dimen0}\wd4\dimen0
+\dimen0\wd2 \ifvoid6\else\dimen1\ht4 \advance\dimen1\ht2 \CD@CC6+-\raise
+\dimen1\rlap{\ifPositiveGradient\advance\dimen0-\wd6\advance\dimen0-\wd4 \else
+\advance\dimen0\wd4 \fi\kern\dimen0\box6}\fi\dimen0\wd2 \ifvoid7\else\dimen1%
+\ht4 \advance\dimen1-\ht2 \CD@CC7-+\lower\dimen1\rlap{\ifPositiveGradient
+\advance\dimen0\wd4 \else\advance\dimen0-\wd7\advance\dimen0-\wd4 \fi\kern
+\dimen0\box7}\fi\mv\box0\hss}\ht0\z@\dp0\z@\CD@bH{\z@}{\box\z@}{\z@}{%
+\axisheight}}\def\CD@CC#1#2#3{\dimen4.5\wd#1 \ifdim\dimen4>.25\dimen7\dimen4=%
+.25\dimen7\fi\ifdim\dimen4>\CD@zC\dimen4.4\dimen4 \advance\dimen4.6\CD@zC\fi
+\CD@eG{\dimen4}\dimen5\axisheight\CD@dG{\dimen5}\advance\dimen4-\dimen5 \dimen
+5\dimen4\CD@eG{\dimen5}\advance\dimen0\ifPositiveGradient#2\else#3\fi\dimen5
+\CD@dG{\dimen4}\advance\dimen1\dimen4 } \def\CD@eD#1{\expandafter\CD@IK{#1}}%
+\CD@ZA\CD@EK{output is PostScript dependent}\def\CD@SC{\CD@IK{/bturn {gsave
+currentpoint currentpoint translate 4 2 roll neg exch atan rotate neg exch neg
+exch translate } def /eturn {currentpoint grestore moveto} def}}\def\CD@gK{%
+\relax\CD@hK\pdfliteral{Q}\else\CD@IK{eturn}\fi} \def\CD@OJ#1{\count@#1\relax
+\multiply\count@7\advance\count@16577\divide\count@33154 }\def\CD@fD#1{%
+\expandafter\special{#1}} \def\CD@xJ#1{\setbox#1=\hbox{\dimen0\dimen#1\CD@dG{%
+\dimen0}\CD@OJ{\dimen0}\setbox0=\null\ifPositiveGradient\count@-\count@\ht0%
+\dimen0 \else\dp0\dimen0 \fi\box0 \CD@uA\count@\CD@OJ\CD@LF\CD@fD{pn \the
+\count@}\CD@fD{pa 0 0}\CD@OJ{\dimen#1}\CD@fD{pa \the\count@\space\the\CD@uA}%
+\CD@fD{fp}\kern\dimen#1}}\def\CD@JI{\CD@KJ\begingroup\ifdim\dimen7<\dimen6
+\dimen2=\dimen6 \dimen6=\dimen7 \dimen7=\dimen2 \count@\CD@LH\CD@LH\CD@TC
+\CD@TC\count@\else\dimen2=\dimen7 \fi\ifdim\dimen6>.01\p@\CD@KI\global\CD@QA
+\dimen0 \else\global\CD@QA\dimen7 \fi\endgroup\dimen2\CD@QA\CD@iK\CD@lK{%
+\ifPositiveGradient\else-\fi\dimen6}\CD@iK\CD@kK{\ifPositiveGradient-\fi
+\dimen6}\CD@iK\CD@eK{\dimen7}}\def\CD@KI{\CD@hJ\ifdim\dimen7>1.73\dimen6
+\divide\dimen2 4 \multiply\CD@TC2 \else\dimen2=0.353553\dimen2 \advance\CD@LH
+-\CD@TC\multiply\CD@TC4 \fi\dimen0=4\dimen2 \CD@ZG4\CD@ZG{-2}\CD@ZG2\CD@ZG{-2%
+.5}}\def\CD@AI{\begingroup\count@\dimen0 \dimen2 45pt \divide\count@\dimen2
+\ifdim\dimen0<\z@\advance\count@\m@ne\fi\ifodd\count@\advance\count@1\CD@@A
+\else\CD@y\fi\advance\dimen0-\count@\dimen2 \CD@gE\multiply\dimen0\m@ne\fi
+\ifnum\count@<0 \multiply\count@-7 \fi\dimen3\dimen1 \dimen6\dimen0 \dimen7
+3754936sp \ifdim\dimen0<6\p@\def\CD@OG{4000}\fi\CD@KJ\dimen2\dimen3\CD@dG{%
+\dimen2}\CD@hJ\multiply\CD@TC-6 \dimen0\dimen2 \CD@ZG1\CD@ZG{0.3}\dimen1%
+\dimen0 \dimen2\dimen3 \dimen0\dimen3 \CD@ZG3\CD@ZG{1.5}\CD@ZG{0.3}\divide
+\count@2 \CD@gE\multiply\dimen1\m@ne\fi\ifodd\count@\dimen2\dimen1\dimen1%
+\dimen0\dimen0-\dimen2 \fi\divide\count@2 \ifodd\count@\multiply\dimen0\m@ne
+\multiply\dimen1\m@ne\fi\global\CD@QA\dimen0\global\CD@RA\dimen1\endgroup
+\dimen6\CD@QA\dimen7\CD@RA}\def\CD@OC{255}\let\CD@OG\CD@OC\def\CD@KJ{%
+\begingroup\ifdim\dimen7<\dimen6 \dimen9\dimen7\dimen7\dimen6\dimen6\dimen9%
+\CD@@A\else\CD@y\fi\dimen2\z@\dimen3\CD@XH\dimen4\CD@XH\dimen0\z@\dimen8=%
+\CD@OG\CD@XH\CD@lC\global\CD@yA\dimen\CD@gE0\else3\fi\global\CD@zA\dimen
+\CD@gE3\else0\fi\endgroup\CD@LH\CD@yA\CD@TC\CD@zA}\def\CD@lC{\count@\dimen6
+\divide\count@\dimen7 \advance\dimen6-\count@\dimen7 \dimen9\dimen4 \advance
+\dimen9\count@\dimen0 \ifdim\dimen9>\dimen8 \CD@@C\else\CD@AC\ifdim\dimen6>%
+\z@\dimen9\dimen6 \dimen6\dimen7 \dimen7\dimen9 \expandafter\expandafter
+\expandafter\CD@lC\fi\fi}\def\CD@@C{\ifdim\dimen0=\z@\ifdim\dimen9<2\dimen8
+\dimen0\dimen8 \fi\else\advance\dimen8-\dimen4 \divide\dimen8\dimen0 \ifdim
+\count@\CD@XH<2\dimen8 \count@\dimen8 \dimen9\dimen4 \advance\dimen9\count@
+\dimen0 \CD@AC\fi\fi}\def\CD@AC{\dimen4\dimen0 \dimen0\dimen9 \advance\dimen2%
+\count@\dimen3 \dimen9\dimen2 \dimen2\dimen3 \dimen3\dimen9 }\def\CD@ZG#1{%
+\CD@dG{\dimen2}\advance\dimen0 #1\dimen2 }\def\CD@dG#1{\divide#1\CD@TC
+\multiply#1\CD@LH}\def\CD@eG#1{\divide#1\CD@vA\multiply#1\CD@uA}\def\CD@iC#1{%
+\divide#1\CD@LH\multiply#1\CD@TC}\def\CD@hJ{\dimen6\CD@LH\CD@XH\multiply
+\dimen6\CD@LH\dimen7\CD@TC\CD@XH\multiply\dimen7\CD@TC\CD@KJ}\def\CD@iK#1#2{%
+\begingroup\dimen@#2\relax\loop\ifdim\dimen2<.4\maxdimen\multiply\dimen2\tw@
+\multiply\dimen@\tw@\repeat\divide\dimen2\@cclvi\divide\dimen@\dimen2\relax
+\multiply\dimen@\@cclvi\expandafter\CD@jK\the\dimen@\endgroup\let#1\CD@fK}{%
+\catcode\lq p=12 \catcode\lq0=12 \catcode\lq.=12 \catcode\lq t=12 \gdef\CD@jK
+#1pt{\gdef\CD@fK{#1}}}\ifx\errorcontextlines\undefined\CD@tJ\let\CD@GH\relax
+\else\def\CD@GH{\errorcontextlines\m@ne}\fi\ifnum\inputlineno<0 \let\CD@CD
+\empty\let\CD@W\empty\let\CD@mD\relax\let\CD@uI\relax\let\CD@vI\relax\let
+\CD@zF\relax\message{! Why not upgrade to TeX version 3? (available since 1990%
+)}\else\def\CD@W{ at line \number\inputlineno}\def\CD@mD{ - first occurred}%
+\def\CD@uI{\edef\CD@h{\the\inputlineno}\global\let\CD@jB\CD@h}\def\CD@h{9999}%
+\def\CD@vI{\xdef\CD@jB{\the\inputlineno}}\def\CD@jB{\CD@h}\def\CD@zF{\ifnum
+\CD@h<\inputlineno\edef\CD@CD{\space at lines \CD@h--\the\inputlineno}\else
+\edef\CD@CD{\CD@W}\fi}\fi\let\CD@CD\empty\def\CD@YA#1#2{\CD@GH\errhelp=#2%
+\expandafter\errmessage{\CD@tA: #1}}\def\CD@KB#1{\begingroup\expandafter
+\message{! \CD@tA: #1\CD@CD}\ifnum\CD@XB>\CD@NB\ifnum\CD@CA>\CD@NB\else\ifnum
+\CD@lA>\CD@FA\else\ifnum\CD@LB>\CD@FA\advance\CD@XB-\CD@NB\advance\CD@FA-%
+\CD@lA\advance\CD@FA1\relax\expandafter\message{! (error detected at row \the
+\CD@XB, column \the\CD@FA, but probably caused elsewhere)}\fi\fi\fi\fi
+\endgroup}\def\CD@gB#1{{\expandafter\message{\CD@tA\space Warning: #1\CD@W}}}%
+\def\CD@CB#1#2{\CD@gB{#1 \string#2 is obsolete\CD@mD}}\def\CD@AB#1{\CD@CB{%
+Dimension}{#1}\CD@DE#1\CD@BB\CD@BB}\def\CD@BB{\CD@OA=}\def\CD@@B#1{\CD@CB{%
+Count}{#1}\CD@DE#1\CD@OH\CD@OH}\def\CD@OH{\count@=}\def\HorizontalMapLength{%
+\CD@AB\HorizontalMapLength}\def\VerticalMapHeight{\CD@AB\VerticalMapHeight}%
+\def\VerticalMapDepth{\CD@AB\VerticalMapDepth}\def\VerticalMapExtraHeight{%
+\CD@AB\VerticalMapExtraHeight}\def\VerticalMapExtraDepth{\CD@AB
+\VerticalMapExtraDepth}\def\DiagonalLineSegments{\CD@@B\DiagonalLineSegments}%
+\ifx\tenln\nullfont\CD@ZA\CD@KH{\CD@eF\space diagonal line and arrow font not
+available}\else\let\CD@KH\relax\fi\def\CD@aG#1#2<#3:#4:#5#6{\begingroup\CD@PA
+#3\relax\advance\CD@PA-#2\relax\ifdim.1em<\CD@PA\CD@uA#5\relax\CD@vA#6\relax
+\ifnum\CD@uA<\CD@vA\count@\CD@vA\advance\count@-\CD@uA\CD@KB{#4 by \the\CD@PA
+}\if#1v\let\CD@CH\CD@JK\edef\tmp{\the\CD@uA--\the\CD@vA,\the\CD@FA}\else
+\advance\count@\count@\if#1l\advance\count@-\CD@A\else\if#1r\advance\count@
+\CD@A\fi\fi\advance\CD@PA\CD@PA\let\CD@CH\CD@ZE\edef\tmp{\the\CD@NB,\the
+\CD@uA--\the\CD@vA}\fi\divide\CD@PA\count@\ifdim\CD@CH<\CD@PA\global\CD@CH
+\CD@PA\fi\fi\fi\endgroup}\CD@tG\CD@xE\CD@JD\CD@ID\CD@rG\CD@xI{See the message
+above.}\CD@rG\CD@lH{Perhaps you've forgotten to end the diagram before
+resuming the text, in\CD@uG which case some garbage may be added to the
+diagram, but we should be ok now.\CD@uG Alternatively you've left a blank line
+in the middle - TeX will now complain\CD@uG that the remaining \CD@S s are
+misplaced - so please use comments for layout.}\CD@rG\CD@hD{You have already
+closed too many brace pairs or environments; an \CD@HD\CD@uG command was (%
+over)due.}\CD@rG\CD@hH{\CD@dC\space and \CD@HD\space commands must match.}%
+\def\CD@jH{\ifnum\inputlineno=0 \else\expandafter\CD@iH\fi}\def\CD@iH{\CD@MD
+\CD@GD\crcr\CD@YA{missing \CD@HD\space inserted before \CD@kH- type "h"}%
+\CD@lH\enddiagram\CD@AG\CD@kH\par}\def\CD@AG#1{\edef\enddiagram{\noexpand
+\CD@rD{#1\CD@W}}}\def\CD@rD#1{\CD@YA{\CD@HD\space(anticipated by #1) ignored}%
+\CD@xI\let\enddiagram\CD@SG}\def\CD@SG{\CD@YA{misplaced \CD@HD\space ignored}%
+\CD@hH}\def\CD@mC{\CD@YA{missing \CD@HD\space inserted.}\CD@hD\CD@AG{closing
+group}}\ifx\DeclareOption\undefined\else\ifx\DeclareOption\@notprerr\else
+\DeclareOption*{\let\CD@N\relax\let\CD@DH\relax\expandafter\CD@@E
+\CurrentOption,}\fi\fi
+%%======================================================================%
+%% %
+%% (22) AUXILLARY MACROS FOR ADJUSTMENT OF COMPONENTS %
+%% %
+%%======================================================================%
+
+%% NOTE: The recommended way of defining arrow commands is now
+%% \newarrow{Name}{tail}{filler}{middle}{filler}{head}
+%% which defines \rName, \lName, \dName and \uName using arrow parts which
+%% have themselves previously been defined using the commands
+%% \newarrowtail, \newarrowfiller, \newarrowmiddle and \newarrowhead.
+
+%% The components \rhvee etc have been retained for the time being, as an
+%% intermediate stage and to continue to support the old \HorizontalMap and
+%% \VerticalMap commands, but you should not rely on the continued existence
+%% of these macros.
+
+%% The various components usually need some correction
+%% - longitudinally, ie to prevent gaps and overprints with the shaft,
+%% - transversally, ie to prevent "steps" in the junction with the shaft.
+%% The former can be done safely ad hoc, eg with \mkern1mu.
+%% The latter are now done with the macros \scriptaxis, \boldscriptaxis,
+%% \shifthook and \raisehook, which include pixel corrections.
+
+%% Please note that these and the other auxillary macros which follow are
+%% interim. When it becomes clear exactly what kinds of adjustments are
+%% needed for characters, this job will be done by a suitable extension
+%% to the language of \newarrowhead, etc. If you have any other ideas for
+%% transformations of general use please tell me.
+
+%% By all means experiment with other characters for arrowheads, but
+%% please, in your own interests, do not rely on macros like \rhvee,
+%% send me a copy of your definitions for distribution to other users
+%% in this file, and keep track of where your efforts get copied so
+%% that they can be replaced with the "official" version when it is
+%% incorporated.
+
+%% ***** DONT use macros with mangled names like \Cd@gH. *****
+
+\catcode\lq\$=3 %% make sure that $ means maths-shift
+\def\vboxtoz{\vbox to\z@}%% \z@ is in plain TeX and means 0pt
+
+%% print #1 in \scriptstyle, adjusting for the maths axis height
+\def\scriptaxis#1{\@scriptaxis{$\scriptstyle#1$}}%%
+\def\ssaxis#1{\@ssaxis{$\scriptscriptstyle#1$}}%%
+\def\@scriptaxis#1{\dimen0\axisheight\advance\dimen0-\ss@axisheight\raise
+\dimen0\hbox{#1}}\def\@ssaxis#1{\dimen0\axisheight\advance\dimen0-%
+\ss@axisheight\raise\dimen0\hbox{#1}}
+
+%% Some of the characters would look better in bold since they're
+%% taken from sub/superscript fonts; we use LaTeX's \boldmath to
+%% do this, defining this to do nothing if it doesn't exist.
+%% With the old LaTeX font selection at other than 10pt you may still
+%% get nothing happenning. Also, PK fonts may be missing.
+%% If you have problems, DONT use boldhook or boldlittlevee.
+\ifx\boldmath\undefined%%
+\let\boldscriptaxis\scriptaxis%%
+\def\boldscript#1{\hbox{$\scriptstyle#1$}}%%
+\def\boldscriptscript#1{\hbox{$\scriptscriptstyle#1$}}%%
+\else\def\boldscriptaxis#1{\@scriptaxis{\boldmath$\scriptstyle#1$}}%%
+\def\boldscript#1{\hbox{\boldmath$\scriptstyle#1$}}%%
+\def\boldscriptscript#1{\hbox{\boldmath$\scriptscriptstyle#1$}}%%
+\fi
+
+%% #1= {} or \boldmath; #2= + or -; #3=\subset or \supset
+\def\raisehook#1#2#3{\hbox{\setbox3=\hbox{#1$\scriptscriptstyle#3$}%
+%% the character to use
+\dimen0\ss@axisheight%% \scriptscriptstyle axis height
+\dimen1\axisheight\advance\dimen1-\dimen0%% difference in axis heights
+\dimen2\ht3\advance\dimen2-\dimen0%
+%% height of char above axis (half spread)
+\advance\dimen2-0.021em\advance\dimen1 #2\dimen2%
+%% shift = axis_difference +/- half_spread
+\raise\dimen1\box3}}%% print the character
+%% Mark Dawson suggested using the width
+\def\shifthook#1#2#3{\setbox1=\hbox{#1$\scriptscriptstyle#3$}\dimen0\wd1%
+\divide\dimen0 12\CD@zH{\dimen0}%% "u"
+\dimen1\wd1\advance\dimen1-2\dimen0 \advance\dimen1-2\CD@oI\CD@zH{\dimen1}%
+\kern#2\dimen1\box1}%% print
+
+%% use the extension font (cmex) for double vertical arrows
+\def\@cmex{\mathchar"03}%%ascii double quote
+
+%% ************* P U L L B A C K S ************
+
+%% These will probably be replaced by something less ad hoc
+%% in a future version.
+
+\def\make@pbk#1{\setbox\tw@\hbox to\z@{#1}\ht\tw@\z@\dp\tw@\z@\box\tw@}\def
+\CD@fH#1{\overprint{\hbox to\z@{#1}}}\def\CD@qH{\kern0.11em}\def\CD@pH{\kern0%
+.35em}
+
+%% This is a hack for my book ``Practical Foundations of Mathematics''
+%% and WILL NOT BE SUPPORTED --- DO NOT USE IT!
+\def\dblvert{\def\CD@rH{\kern.5\PileSpacing}}\def\CD@rH{}
+
+\def\SEpbk{\make@pbk{\CD@qH\CD@rH\vrule depth 2.87ex height -2.75ex width 0.%
+95em \vrule height -0.66ex depth 2.87ex width 0.05em \hss}}
+
+\def\SWpbk{\make@pbk{\hss\vrule height -0.66ex depth 2.87ex width 0.05em
+\vrule depth 2.87ex height -2.75ex width 0.95em \CD@qH\CD@rH}}
+
+\def\NEpbk{\make@pbk{\CD@qH\CD@rH\vrule depth -3.81ex height 4.00ex width 0.%
+95em \vrule height 4.00ex depth -1.72ex width 0.05em \hss}}
+
+\def\NWpbk{\make@pbk{\hss\vrule height 4.00ex depth -1.72ex width 0.05em
+\vrule depth -3.81ex height 4.00ex width 0.95em \CD@qH\CD@rH}}
+
+%% Freyd & Scedrov puncture symbol for non-commuting polygon
+\def\puncture{{\setbox0\hbox{A}\vrule height.53\ht0 depth-.47\ht0 width.35\ht
+0 \kern.12\ht0 \vrule height\ht0 depth-.65\ht0 width.06\ht0 \kern-.06\ht0
+\vrule height.35\ht0 depth0pt width.06\ht0 \kern.12\ht0 \vrule height.53\ht0
+depth-.47\ht0 width.35\ht0 }}
+
+%% 2-cells: (24.11.95)
+%%% \NEclck puts a clockwise (ie southeast) arrow to the northwest of cell etc
+\def\NEclck{\overprint{\raise2.5ex\rlap{ \CD@rH$\scriptstyle\searrow$}}}%%
+\def\NEanti{\overprint{\raise2.5ex\rlap{ \CD@rH$\scriptstyle\nwarrow$}}}%%
+\def\NWclck{\overprint{\raise2.5ex\llap{$\scriptstyle\nearrow$ \CD@rH}}}%%
+\def\NWanti{\overprint{\raise2.5ex\llap{$\scriptstyle\swarrow$ \CD@rH}}}%%
+\def\SEclck{\overprint{\lower1ex\rlap{ \CD@rH$\scriptstyle\swarrow$}}}%%
+\def\SEanti{\overprint{\lower1ex\rlap{ \CD@rH$\scriptstyle\nearrow$}}}%%
+\def\SWclck{\overprint{\lower1ex\llap{$\scriptstyle\nwarrow$ \CD@rH}}}%%
+\def\SWanti{\overprint{\lower1ex\llap{$\scriptstyle\searrow$ \CD@rH}}}
+
+%%======================================================================%
+%% %
+%% (23) BITS OF ARROWS %
+%% %
+%%======================================================================%
+
+%% ********** H E A D S ***********
+
+%% \diagramstyle[heads=xxx] defines {>} as {xxx} where xxx
+%% has been defined by \newarrowhead{xxx} and \newarrowtail{xxx}
+
+%% vee head
+\def\rhvee{\mkern-10mu\greaterthan}%%
+\def\lhvee{\lessthan\mkern-10mu}%%
+\def\dhvee{\vboxtoz{\vss\hbox{$\vee$}\kern0pt}}%%
+\def\uhvee{\vboxtoz{\hbox{$\wedge$}\vss}}%%
+\newarrowhead{vee}\rhvee\lhvee\dhvee\uhvee
+
+%% little vee head
+\def\dhlvee{\vboxtoz{\vss\hbox{$\scriptstyle\vee$}\kern0pt}}%%
+\def\uhlvee{\vboxtoz{\hbox{$\scriptstyle\wedge$}\vss}}%%
+\newarrowhead{littlevee}{\mkern1mu\scriptaxis\rhvee}{\scriptaxis\lhvee}%
+\dhlvee\uhlvee\ifx\boldmath\undefined%%
+\newarrowhead{boldlittlevee}{\mkern1mu\scriptaxis\rhvee}{\scriptaxis\lhvee}%
+\dhlvee\uhlvee\else%%
+\def\dhblvee{\vboxtoz{\vss\boldscript\vee\kern0pt}}%%
+\def\uhblvee{\vboxtoz{\boldscript\wedge\vss}}%%
+\newarrowhead{boldlittlevee}{\mkern1mu\boldscriptaxis\rhvee}{\boldscriptaxis
+\lhvee}\dhblvee\uhblvee%%
+\fi
+
+%% curly vee head (uses AMS symbols fonts)
+\def\rhcvee{\mkern-10mu\succ}%%
+\def\lhcvee{\prec\mkern-10mu}%%
+\def\dhcvee{\vboxtoz{\vss\hbox{$\curlyvee$}\kern0pt}}%%
+\def\uhcvee{\vboxtoz{\hbox{$\curlywedge$}\vss}}%%
+\newarrowhead{curlyvee}\rhcvee\lhcvee\dhcvee\uhcvee
+
+%% double vee head %% will probably be withdrawn later
+\def\rhvvee{\mkern-13mu\gg}%% 24.8.92 changed 10mu to 13mu
+\def\lhvvee{\ll\mkern-13mu}%% to make rule go through
+\def\dhvvee{\vboxtoz{\vss\hbox{$\vee$}\kern-.6ex\hbox{$\vee$}\kern0pt}}%%
+\def\uhvvee{\vboxtoz{\hbox{$\wedge$}\kern-.6ex \hbox{$\wedge$}\vss}}%%
+\newarrowhead{doublevee}\rhvvee\lhvvee\dhvvee\uhvvee
+
+%% open and closed triangles (uses AMS symbols fonts)
+\def\triangleup{{\scriptscriptstyle\bigtriangleup}}%%
+\def\littletriangledown{{\scriptscriptstyle\triangledown}}%% AMS
+\def\rhtriangle{\triangleright\mkern1.2mu}%% 29.1.93
+\def\lhtriangle{\triangleleft\mkern.8mu}%%
+\def\uhtriangle{\vbox{\kern-.2ex \hbox{$\scriptscriptstyle\bigtriangleup$}%
+\kern-.25ex}}%%
+%% Changed \scriptstyle\triangledown to \scriptscriptstyle\bigtriangledown
+%% at the suggestion of Martin Hofmann (25.11.92) to avoid using AMS symbols
+%% and also for compatibility with upward arrow.
+\def\dhtriangle{\vbox{\kern-.28ex \hbox{$\scriptscriptstyle\bigtriangledown$}%
+\kern-.1ex}}%% 15.1.93 from -.25ex
+\def\dhblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\blacktriangledown$}}}%
+%% AMS
+\def\uhblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\blacktriangle$}}}%
+%% AMS
+\def\dhlblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\scriptstyle
+\blacktriangledown$}}}%% AMS
+\def\uhlblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\scriptstyle
+\blacktriangle$}}}%% AMS
+\newarrowhead{triangle}\rhtriangle\lhtriangle\dhtriangle\uhtriangle
+\newarrowhead{blacktriangle}{\mkern-1mu\blacktriangleright\mkern.4mu}{%
+\blacktriangleleft}\dhblack\uhblack\newarrowhead{littleblack}{\mkern-1mu%
+\scriptaxis\blacktriangleright}{\scriptaxis\blacktriangleleft\mkern-2mu}%
+\dhlblack\uhlblack
+
+%% LaTeX arrowheads
+\def\rhla{\hbox{\setbox0=\lnchar55\dimen0=\wd0\kern-.6\dimen0\ht0\z@\raise
+\axisheight\box0\kern.1\dimen0}}%%
+\def\lhla{\hbox{\setbox0=\lnchar33\dimen0=\wd0\kern.05\dimen0\ht0\z@\raise
+\axisheight\box0\kern-.5\dimen0}}%%
+\def\dhla{\vboxtoz{\vss\rlap{\lnchar77}}}%%
+\def\uhla{\vboxtoz{\setbox0=\lnchar66 \wd0\z@\kern-.15\ht0\box0\vss}}%% 1/93
+\newarrowhead{LaTeX}\rhla\lhla\dhla\uhla
+
+%% double LaTeX arrowheads %% will probably be withdrawn later
+\def\lhlala{\lhla\kern.3em\lhla}%%
+\def\rhlala{\rhla\kern.3em\rhla}%%
+\def\uhlala{\hbox{\uhla\raise-.6ex\uhla}}%%
+\def\dhlala{\hbox{\dhla\lower-.6ex\dhla}}%%
+\newarrowhead{doubleLaTeX}\rhlala\lhlala\dhlala\uhlala
+
+%% circles % \rho is a Greek letter!
+\def\hhO{\scriptaxis\bigcirc\mkern.4mu} \def\hho{{\circ}\mkern1.2mu}%
+\newarrowhead{o}\hho\hho\circ\circ%%
+\newarrowhead{O}\hhO\hhO{\scriptstyle\bigcirc}{\scriptstyle\bigcirc}%%
+
+%% crosses
+\def\rhtimes{\mkern-5mu{\times}\mkern-.8mu}\def\lhtimes{\mkern-.8mu{\times}%
+\mkern-5mu}\def\uhtimes{\setbox0=\hbox{$\times$}\ht0\axisheight\dp0-\ht0%
+\lower\ht0\box0 }\def\dhtimes{\setbox0=\hbox{$\times$}\ht0\axisheight\box0 }%
+\newarrowhead{X}\rhtimes\lhtimes\dhtimes\uhtimes\newarrowhead+++++
+
+%% empty head {} is also available
+
+%% Y from stmaryrd (vertical ones still need large adjustment)
+\newarrowhead{Y}{\mkern-3mu\Yright}{\Yleft\mkern-3mu}\Yup\Ydown
+
+%% ********** H E A D S with S H A F T S ***********
+
+%% little arrow with shaft
+\newarrowhead{->}\rightarrow\leftarrow\downarrow\uparrow
+
+%% arrow with double shaft
+%%\newarrowhead{=>}\Rightarrow\Leftarrow\Downarrow\Uparrow
+\newarrowhead{=>}\Rightarrow\Leftarrow{\@cmex7F}{\@cmex7E}
+
+%% harpoon with shaft (trailing up/left can be changed to down/right)
+\newarrowhead{harpoon}\rightharpoonup\leftharpoonup\downharpoonleft
+\upharpoonleft
+
+%% little double-headed arrow with shaft (uses AMS symbols fonts)
+\def\twoheaddownarrow{\rlap{$\downarrow$}\raise-.5ex\hbox{$\downarrow$}}%%
+\def\twoheaduparrow{\rlap{$\uparrow$}\raise.5ex\hbox{$\uparrow$}}%%
+\newarrowhead{->>}\twoheadrightarrow\twoheadleftarrow\twoheaddownarrow
+\twoheaduparrow
+
+%% ********** T A I L S ***********
+
+%% vee tail
+\def\rtvee{\greaterthan}%%
+\def\ltvee{\mkern-1mu{\lessthan}\mkern.4mu}%% \mkern added 15.1.93
+\def\dtvee{\vee}%%
+\def\utvee{\wedge}%%
+\newarrowtail{vee}\greaterthan\ltvee\vee\wedge
+
+%% little vee tail
+\newarrowtail{littlevee}{\scriptaxis\greaterthan}{\mkern-1mu\scriptaxis
+\lessthan}{\scriptstyle\vee}{\scriptstyle\wedge}\ifx\boldmath\undefined
+\newarrowtail{boldlittlevee}{\scriptaxis\greaterthan}{\mkern-1mu\scriptaxis
+\lessthan}{\scriptstyle\vee}{\scriptstyle\wedge}\else\newarrowtail{%
+boldlittlevee}{\boldscriptaxis\greaterthan}{\mkern-1mu\boldscriptaxis
+\lessthan}{\boldscript\vee}{\boldscript\wedge}\fi
+
+%% curly vee tail (uses AMS symbols fonts)
+\newarrowtail{curlyvee}\succ{\mkern-1mu{\prec}\mkern.4mu}\curlyvee\curlywedge
+
+%% open and closed triangle tails (uses AMS symbols fonts)
+\def\rttriangle{\mkern1.2mu\triangleright}%% 29.1.93
+\newarrowtail{triangle}\rttriangle\lhtriangle\dhtriangle\uhtriangle
+\newarrowtail{blacktriangle}\blacktriangleright{\mkern-1mu\blacktriangleleft
+\mkern.4mu}\dhblack\uhblack\newarrowtail{littleblack}{\scriptaxis
+\blacktriangleright\mkern-2mu}{\mkern-1mu\scriptaxis\blacktriangleleft}%
+\dhlblack\uhlblack
+
+%% LaTeX tails
+\def\rtla{\hbox{\setbox0=\lnchar55\dimen0=\wd0\kern-.5\dimen0\ht0\z@\raise
+\axisheight\box0\kern-.2\dimen0}}%%
+\def\ltla{\hbox{\setbox0=\lnchar33\dimen0=\wd0\kern-.15\dimen0\ht0\z@\raise
+\axisheight\box0\kern-.5\dimen0}}%%
+\def\dtla{\vbox{\setbox0=\rlap{\lnchar77}\dimen0=\ht0\kern-.7\dimen0\box0%
+\kern-.1\dimen0}}%% 15.1.93 from -.6
+\def\utla{\vbox{\setbox0=\rlap{\lnchar66}\dimen0=\ht0\kern-.1\dimen0\box0%
+\kern-.6\dimen0}}%%
+\newarrowtail{LaTeX}\rtla\ltla\dtla\utla
+
+%% double vee tail %% will probably be withdrawn later
+\def\rtvvee{\gg\mkern-3mu}%%
+\def\ltvvee{\mkern-3mu\ll}%%
+\def\dtvvee{\vbox{\hbox{$\vee$}\kern-.6ex \hbox{$\vee$}\vss}}%%
+\def\utvvee{\vbox{\vss\hbox{$\wedge$}\kern-.6ex \hbox{$\wedge$}\kern\z@}}%%
+\newarrowtail{doublevee}\rtvvee\ltvvee\dtvvee\utvvee
+
+%% double LaTeX tails %% will probably be withdrawn later
+\def\ltlala{\ltla\kern.3em\ltla}%%
+\def\rtlala{\rtla\kern.3em\rtla}%%
+\def\utlala{\hbox{\utla\raise-.6ex\utla}}%%
+\def\dtlala{\hbox{\dtla\lower-.6ex\dtla}}%%
+\newarrowtail{doubleLaTeX}\rtlala\ltlala\dtlala\utlala
+
+%% bar (as in \mapsto)
+\def\utbar{\vrule height 0.093ex depth0pt width 0.4em}%%
+\let\dtbar\utbar%%
+\def\rtbar{\mkern1.5mu\vrule height 1.1ex depth.06ex width .04em\mkern1.5mu}%
+%%
+\let\ltbar\rtbar%%
+\newarrowtail{mapsto}\rtbar\ltbar\dtbar\utbar%%
+\newarrowtail{|}\rtbar\ltbar\dtbar\utbar%%ascii vertical bar (|)
+
+%% hooks (as in \into): choice of after/above and before/below
+
+\def\rthooka{\raisehook{}+\subset\mkern-1mu}%%
+\def\lthooka{\mkern-1mu\raisehook{}+\supset}%%
+\def\rthookb{\raisehook{}-\subset\mkern-2mu}%%
+\def\lthookb{\mkern-1mu\raisehook{}-\supset}%%
+
+\def\dthooka{\shifthook{}+\cap}%%
+\def\dthookb{\shifthook{}-\cap}%%
+\def\uthooka{\shifthook{}+\cup}%%
+\def\uthookb{\shifthook{}-\cup}%%
+
+\newarrowtail{hooka}\rthooka\lthooka\dthooka\uthooka\newarrowtail{hookb}%
+\rthookb\lthookb\dthookb\uthookb
+
+\ifx\boldmath\undefined\newarrowtail{boldhooka}\rthooka\lthooka\dthooka
+\uthooka\newarrowtail{boldhookb}\rthookb\lthookb\dthookb\uthookb\newarrowtail
+{boldhook}\rthooka\lthooka\dthookb\uthooka\else\def\rtbhooka{\raisehook
+\boldmath+\subset\mkern-1mu}%%
+\def\ltbhooka{\mkern-1mu\raisehook\boldmath+\supset}%%
+\def\rtbhookb{\raisehook\boldmath-\subset\mkern-2mu}%%
+\def\ltbhookb{\mkern-1mu\raisehook\boldmath-\supset}%%
+\def\dtbhooka{\shifthook\boldmath+\cap}%%
+\def\dtbhookb{\shifthook\boldmath-\cap}%%
+\def\utbhooka{\shifthook\boldmath+\cup}%%
+\def\utbhookb{\shifthook\boldmath-\cup}%%
+\newarrowtail{boldhooka}\rtbhooka\ltbhooka\dtbhooka\utbhooka\newarrowtail{%
+boldhookb}\rtbhookb\ltbhookb\dtbhookb\utbhookb\newarrowtail{boldhook}%
+\rtbhooka\ltbhooka\dtbhooka\utbhooka\fi
+
+%% square-ended hooks (used for closed subsets in ``lifting and gluing'')
+\def\dtsqhooka{\shifthook{}+\sqcap}%%
+\def\dtsqhookb{\shifthook{}-\sqcap}%%
+\def\ltsqhooka{\mkern-1mu\raisehook{}+\sqsupset}%%
+\def\ltsqhookb{\mkern-1mu\raisehook{}-\sqsupset}%%
+\def\rtsqhooka{\raisehook{}+\sqsubset\mkern-1mu}%%
+\def\rtsqhookb{\raisehook{}-\sqsubset\mkern-2mu}%%
+\def\utsqhooka{\shifthook{}+\sqcup}%%
+\def\utsqhookb{\shifthook{}-\sqcup}%%
+\newarrowtail{sqhook}\rtsqhooka\ltsqhooka\dtsqhooka\utsqhooka
+
+%% the following seem the better choices at 10pt & 300dpi
+\newarrowtail{hook}\rthooka\lthookb\dthooka\uthooka\newarrowtail{C}\rthooka
+\lthookb\dthooka\uthooka
+
+%% circles
+\newarrowtail{o}\hho\hho\circ\circ%%
+\newarrowtail{O}\hhO\hhO{\scriptstyle\bigcirc}{\scriptstyle\bigcirc}%%
+
+%% crosses
+\newarrowtail{X}\lhtimes\rhtimes\uhtimes\dhtimes\newarrowtail+++++
+
+%% empty tail {} is also available
+
+%% Y from stmaryrd (vertical ones still need adjustment)
+\newarrowtail{Y}\Yright\Yleft\Yup\Ydown
+
+%% harpoon with shaft (trailing up/left can be changed to down/right)
+\newarrowtail{harpoon}\leftharpoondown\rightharpoondown\upharpoonright
+\downharpoonright
+
+%% ********** F I L L E R S ***********
+
+%% shortening is up to 0.15em=2.7mu horiz and 0.35ex vertically at each end.
+
+%% dot {.}, single rule {-} and empty {} fillers are also available
+
+%% double and triple lines
+%%\newarrowfiller{=}==\Vert\Vert%%
+\newarrowfiller{=}=={\@cmex77}{\@cmex77}%% 16.1.93
+\def\vfthree{\mid\!\!\!\mid\!\!\!\mid}%%ascii
+\newarrowfiller{3}\equiv\equiv\vfthree\vfthree
+
+%% dashed line
+\def\vfdashstrut{\vrule width0pt height1.3ex depth0.7ex}%%
+\def\vfthedash{\vrule width\CD@LF height0.6ex depth 0pt}%%
+\def\hfthedash{\CD@AJ\vrule\horizhtdp width 0.26em}%%
+\def\hfdash{\mkern5.5mu\hfthedash\mkern5.5mu}%%
+\def\vfdash{\vfdashstrut\vfthedash}%%
+\newarrowfiller{dash}\hfdash\hfdash\vfdash\vfdash
+
+%% ************* M I D D L E S ************
+
+%% plus
+\newarrowmiddle+++++
+
+%% ************* D I A G O N A L S ************
+
+%% simple arrow heads
+%%\def\nwhTO{\nwarrow\mkern-1mu}%%
+%%\def\nehTO{\mkern-.1mu\nearrow}%%
+%%\def\sehTO{\searrow\mkern-.02mu}%%
+%%\def\swhTO{\mkern-.8mu\swarrow}%%
+
+%%======================================================================%
+%% %
+%% (24) ARROW COMMANDS %
+%% %
+%%======================================================================%
+
+%% change to \iftrue to get mixed heads
+\iffalse%%
+\newarrow{To}----{vee}%%
+\newarrow{Arr}----{LaTeX}%%
+\newarrow{Dotsto}....{vee}%%
+\newarrow{Dotsarr}....{LaTeX}%%
+\newarrow{Dashto}{}{dash}{}{dash}{vee}%%
+\newarrow{Dasharr}{}{dash}{}{dash}{LaTeX}%%
+\newarrow{Mapsto}{mapsto}---{vee}%%
+\newarrow{Mapsarr}{mapsto}---{LaTeX}%%
+\newarrow{IntoA}{hooka}---{vee}%%
+\newarrow{IntoB}{hookb}---{vee}%%
+\newarrow{Embed}{vee}---{vee}%%
+\newarrow{Emarr}{LaTeX}---{LaTeX}%%
+\newarrow{Onto}----{doublevee}%%
+\newarrow{Dotsonarr}....{doubleLaTeX}%%
+\newarrow{Dotsonto}....{doublevee}%%
+\newarrow{Dotsonarr}....{doubleLaTeX}%%
+\else%%
+\newarrow{To}---->%%
+\newarrow{Arr}---->%%
+\newarrow{Dotsto}....>%%
+\newarrow{Dotsarr}....>%%
+\newarrow{Dashto}{}{dash}{}{dash}>%%
+\newarrow{Dasharr}{}{dash}{}{dash}>%%
+\newarrow{Mapsto}{mapsto}--->%%
+\newarrow{Mapsarr}{mapsto}--->%%
+\newarrow{IntoA}{hooka}--->%%
+\newarrow{IntoB}{hookb}--->%%
+\newarrow{Embed}>--->%%
+\newarrow{Emarr}>--->%%
+\newarrow{Onto}----{>>}%%
+\newarrow{Dotsonarr}....{>>}%%
+\newarrow{Dotsonto}....{>>}%%
+\newarrow{Dotsonarr}....{>>}%%
+\fi%%
+
+\newarrow{Implies}===={=>}%% minimum cell height 9.5pt
+\newarrow{Project}----{triangle}%%
+\newarrow{Pto}----{harpoon}%% partial function
+\newarrow{Relto}{harpoon}---{harpoon}%% binary relation
+
+\newarrow{Eq}=====%%
+\newarrow{Line}-----%%
+\newarrow{Dots}.....%%
+\newarrow{Dashes}{}{dash}{}{dash}{}%%
+
+%% square hooked arrow (used in my ``gluing and lifting'' paper)
+\newarrow{SquareInto}{sqhook}--->
+
+%% braces and parentheses
+%% \newarrow gives inappropriate directions, so we change the names
+%% the vertical filler is too far to the right; horizontal too high
+%% the vertical middles are too low with midvshaft
+%% maybe we'll add square brackets and the integral sign one day
+\newarrowhead{cmexbra}{\@cmex7B}{\@cmex7C}{\@cmex3B}{\@cmex38}%%
+\newarrowtail{cmexbra}{\@cmex7A}{\@cmex7D}{\@cmex39}{\@cmex3A}%%
+\newarrowmiddle{cmexbra}{\braceru\bracelu}{\bracerd\braceld}{\vcenter{%
+\hbox@maths{\@cmex3D\mkern-2mu}}}%% right
+{\vcenter{\hbox@maths{\mkern2mu\@cmex3C}}}%% left
+\newarrow{@brace}{cmexbra}-{cmexbra}-{cmexbra}%% braces
+\newarrow{@parenth}{cmexbra}---{cmexbra}%% straight parentheses
+\def\rightBrace{\d@brace[thick,cmex]}%%ASCII square brackets []
+\def\leftBrace{\u@brace[thick,cmex]}%%ASCII square brackets []
+\def\upperBrace{\r@brace[thick,cmex]}%%ASCII square brackets []
+\def\lowerBrace{\l@brace[thick,cmex]}%%ASCII square brackets []
+\def\rightParenth{\d@parenth[thick,cmex]}%%ASCII square brackets []
+\def\leftParenth{\u@parenth[thick,cmex]}%%ASCII square brackets []
+\def\upperParenth{\r@parenth[thick,cmex]}%%ASCII square brackets []
+\def\lowerParenth{\l@parenth[thick,cmex]}%%ASCII square brackets []
+
+%% synonyms for reverse compatibility
+
+\let\uFrom\uTo%%
+\let\lFrom\lTo%%
+\let\uDotsfrom\uDotsto%%
+\let\lDotsfrom\lDotsto%%
+\let\uDashfrom\uDashto%%
+\let\lDashfrom\lDashto%%
+\let\uImpliedby\uImplies%%
+\let\lImpliedby\lImplies%%
+\let\uMapsfrom\uMapsto%%
+\let\lMapsfrom\lMapsto%%
+\let\lOnfrom\lOnto%%
+\let\uOnfrom\uOnto%%
+\let\lPfrom\lPto%%
+\let\uPfrom\uPto%%
+
+\let\uInfromA\uIntoA%%
+\let\uInfromB\uIntoB%%
+\let\lInfromA\lIntoA%%
+\let\lInfromB\lIntoB%%
+\let\rInto\rIntoA%%
+\let\lInto\lIntoA%%
+\let\dInto\dIntoB%%
+\let\uInto\uIntoA%%
+\let\ruInto\ruIntoA%%
+\let\luInto\luIntoA%%
+\let\rdInto\rdIntoA%%
+\let\ldInto\ldIntoA%%
+%%
+\let\hEq\rEq%%
+\let\vEq\uEq%%
+\let\hLine\rLine%%
+\let\vLine\uLine%%
+\let\hDots\rDots%%
+\let\vDots\uDots%%
+\let\hDashes\rDashes%%
+\let\vDashes\uDashes%%
+
+%%=========================================================================%
+%% The following are included for reverse compatibility only.
+%%=========================================================================%
+\let\NW\luTo\let\NE\ruTo\let\SW\ldTo\let\SE\rdTo\def\nNW{\luTo(2,3)}\def\nNE{%
+\ruTo(2,3)}%%ascii
+\def\sSW{\ldTo(2,3)}\def\sSE{\rdTo(2,3)}%%ascii
+\def\wNW{\luTo(3,2)}\def\eNE{\ruTo(3,2)}%%ascii
+\def\wSW{\ldTo(3,2)}\def\eSE{\rdTo(3,2)}%%ascii
+\def\NNW{\luTo(2,4)}\def\NNE{\ruTo(2,4)}%%ascii
+\def\SSW{\ldTo(2,4)}\def\SSE{\rdTo(2,4)}%%ascii
+\def\WNW{\luTo(4,2)}\def\ENE{\ruTo(4,2)}%%ascii
+\def\WSW{\ldTo(4,2)}\def\ESE{\rdTo(4,2)}%%ascii
+\def\NNNW{\luTo(2,6)}\def\NNNE{\ruTo(2,6)}%%ascii
+\def\SSSW{\ldTo(2,6)}\def\SSSE{\rdTo(2,6)}%%ascii
+\def\WWNW{\luTo(6,2)}\def\EENE{\ruTo(6,2)}%%ascii
+\def\WWSW{\ldTo(6,2)}\def\EESE{\rdTo(6,2)}%%ascii
+
+\let\NWd\luDotsto\let\NEd\ruDotsto\let\SWd\ldDotsto\let\SEd\rdDotsto\def\nNWd
+{\luDotsto(2,3)}\def\nNEd{\ruDotsto(2,3)}%%ascii
+\def\sSWd{\ldDotsto(2,3)}\def\sSEd{\rdDotsto(2,3)}%%ascii
+\def\wNWd{\luDotsto(3,2)}\def\eNEd{\ruDotsto(3,2)}%%ascii
+\def\wSWd{\ldDotsto(3,2)}\def\eSEd{\rdDotsto(3,2)}%%ascii
+\def\NNWd{\luDotsto(2,4)}\def\NNEd{\ruDotsto(2,4)}%%ascii
+\def\SSWd{\ldDotsto(2,4)}\def\SSEd{\rdDotsto(2,4)}%%ascii
+\def\WNWd{\luDotsto(4,2)}\def\ENEd{\ruDotsto(4,2)}%%ascii
+\def\WSWd{\ldDotsto(4,2)}\def\ESEd{\rdDotsto(4,2)}%%ascii
+\def\NNNWd{\luDotsto(2,6)}\def\NNNEd{\ruDotsto(2,6)}%%ascii
+\def\SSSWd{\ldDotsto(2,6)}\def\SSSEd{\rdDotsto(2,6)}%%ascii
+\def\WWNWd{\luDotsto(6,2)}\def\EENEd{\ruDotsto(6,2)}%%ascii
+\def\WWSWd{\ldDotsto(6,2)}\def\EESEd{\rdDotsto(6,2)}%%ascii
+
+\let\NWl\luLine\let\NEl\ruLine\let\SWl\ldLine\let\SEl\rdLine\def\nNWl{\luLine
+(2,3)}\def\nNEl{\ruLine(2,3)}%%ascii
+\def\sSWl{\ldLine(2,3)}\def\sSEl{\rdLine(2,3)}%%ascii
+\def\wNWl{\luLine(3,2)}\def\eNEl{\ruLine(3,2)}%%ascii
+\def\wSWl{\ldLine(3,2)}\def\eSEl{\rdLine(3,2)}%%ascii
+\def\NNWl{\luLine(2,4)}\def\NNEl{\ruLine(2,4)}%%ascii
+\def\SSWl{\ldLine(2,4)}\def\SSEl{\rdLine(2,4)}%%ascii
+\def\WNWl{\luLine(4,2)}\def\ENEl{\ruLine(4,2)}%%ascii
+\def\WSWl{\ldLine(4,2)}\def\ESEl{\rdLine(4,2)}%%ascii
+\def\NNNWl{\luLine(2,6)}\def\NNNEl{\ruLine(2,6)}%%ascii
+\def\SSSWl{\ldLine(2,6)}\def\SSSEl{\rdLine(2,6)}%%ascii
+\def\WWNWl{\luLine(6,2)}\def\EENEl{\ruLine(6,2)}%%ascii
+\def\WWSWl{\ldLine(6,2)}\def\EESEl{\rdLine(6,2)}%%ascii
+
+\let\NWld\luDots\let\NEld\ruDots\let\SWld\ldDots\let\SEld\rdDots\def\nNWld{%
+\luDots(2,3)}\def\nNEld{\ruDots(2,3)}%%ascii
+\def\sSWld{\ldDots(2,3)}\def\sSEld{\rdDots(2,3)}%%ascii
+\def\wNWld{\luDots(3,2)}\def\eNEld{\ruDots(3,2)}%%ascii
+\def\wSWld{\ldDots(3,2)}\def\eSEld{\rdDots(3,2)}%%ascii
+\def\NNWld{\luDots(2,4)}\def\NNEld{\ruDots(2,4)}%%ascii
+\def\SSWld{\ldDots(2,4)}\def\SSEld{\rdDots(2,4)}%%ascii
+\def\WNWld{\luDots(4,2)}\def\ENEld{\ruDots(4,2)}%%ascii
+\def\WSWld{\ldDots(4,2)}\def\ESEld{\rdDots(4,2)}%%ascii
+\def\NNNWld{\luDots(2,6)}\def\NNNEld{\ruDots(2,6)}%%ascii
+\def\SSSWld{\ldDots(2,6)}\def\SSSEld{\rdDots(2,6)}%%ascii
+\def\WWNWld{\luDots(6,2)}\def\EENEld{\ruDots(6,2)}%%ascii
+\def\WWSWld{\ldDots(6,2)}\def\EESEld{\rdDots(6,2)}%%ascii
+
+\let\NWe\luEmbed\let\NEe\ruEmbed\let\SWe\ldEmbed\let\SEe\rdEmbed\def\nNWe{%
+\luEmbed(2,3)}\def\nNEe{\ruEmbed(2,3)}%%ascii
+\def\sSWe{\ldEmbed(2,3)}\def\sSEe{\rdEmbed(2,3)}%%ascii
+\def\wNWe{\luEmbed(3,2)}\def\eNEe{\ruEmbed(3,2)}%%ascii
+\def\wSWe{\ldEmbed(3,2)}\def\eSEe{\rdEmbed(3,2)}%%ascii
+\def\NNWe{\luEmbed(2,4)}\def\NNEe{\ruEmbed(2,4)}%%ascii
+\def\SSWe{\ldEmbed(2,4)}\def\SSEe{\rdEmbed(2,4)}%%ascii
+\def\WNWe{\luEmbed(4,2)}\def\ENEe{\ruEmbed(4,2)}%%ascii
+\def\WSWe{\ldEmbed(4,2)}\def\ESEe{\rdEmbed(4,2)}%%ascii
+\def\NNNWe{\luEmbed(2,6)}\def\NNNEe{\ruEmbed(2,6)}%%ascii
+\def\SSSWe{\ldEmbed(2,6)}\def\SSSEe{\rdEmbed(2,6)}%%ascii
+\def\WWNWe{\luEmbed(6,2)}\def\EENEe{\ruEmbed(6,2)}%%ascii
+\def\WWSWe{\ldEmbed(6,2)}\def\EESEe{\rdEmbed(6,2)}%%ascii
+
+\let\NWo\luOnto\let\NEo\ruOnto\let\SWo\ldOnto\let\SEo\rdOnto\def\nNWo{\luOnto
+(2,3)}\def\nNEo{\ruOnto(2,3)}%%ascii
+\def\sSWo{\ldOnto(2,3)}\def\sSEo{\rdOnto(2,3)}%%ascii
+\def\wNWo{\luOnto(3,2)}\def\eNEo{\ruOnto(3,2)}%%ascii
+\def\wSWo{\ldOnto(3,2)}\def\eSEo{\rdOnto(3,2)}%%ascii
+\def\NNWo{\luOnto(2,4)}\def\NNEo{\ruOnto(2,4)}%%ascii
+\def\SSWo{\ldOnto(2,4)}\def\SSEo{\rdOnto(2,4)}%%ascii
+\def\WNWo{\luOnto(4,2)}\def\ENEo{\ruOnto(4,2)}%%ascii
+\def\WSWo{\ldOnto(4,2)}\def\ESEo{\rdOnto(4,2)}%%ascii
+\def\NNNWo{\luOnto(2,6)}\def\NNNEo{\ruOnto(2,6)}%%ascii
+\def\SSSWo{\ldOnto(2,6)}\def\SSSEo{\rdOnto(2,6)}%%ascii
+\def\WWNWo{\luOnto(6,2)}\def\EENEo{\ruOnto(6,2)}%%ascii
+\def\WWSWo{\ldOnto(6,2)}\def\EESEo{\rdOnto(6,2)}%%ascii
+
+\let\NWod\luDotsonto\let\NEod\ruDotsonto\let\SWod\ldDotsonto\let\SEod
+\rdDotsonto\def\nNWod{\luDotsonto(2,3)}\def\nNEod{\ruDotsonto(2,3)}%%ascii
+\def\sSWod{\ldDotsonto(2,3)}\def\sSEod{\rdDotsonto(2,3)}%%ascii
+\def\wNWod{\luDotsonto(3,2)}\def\eNEod{\ruDotsonto(3,2)}%%ascii
+\def\wSWod{\ldDotsonto(3,2)}\def\eSEod{\rdDotsonto(3,2)}%%ascii
+\def\NNWod{\luDotsonto(2,4)}\def\NNEod{\ruDotsonto(2,4)}%%ascii
+\def\SSWod{\ldDotsonto(2,4)}\def\SSEod{\rdDotsonto(2,4)}%%ascii
+\def\WNWod{\luDotsonto(4,2)}\def\ENEod{\ruDotsonto(4,2)}%%ascii
+\def\WSWod{\ldDotsonto(4,2)}\def\ESEod{\rdDotsonto(4,2)}%%ascii
+\def\NNNWod{\luDotsonto(2,6)}\def\NNNEod{\ruDotsonto(2,6)}%%ascii
+\def\SSSWod{\ldDotsonto(2,6)}\def\SSSEod{\rdDotsonto(2,6)}%%ascii
+\def\WWNWod{\luDotsonto(6,2)}\def\EENEod{\ruDotsonto(6,2)}%%ascii
+\def\WWSWod{\ldDotsonto(6,2)}\def\EESEod{\rdDotsonto(6,2)}%%ascii
+
+%%======================================================================%
+%% %
+%% (25) MISCELLANEOUS %
+%% %
+%%======================================================================%
+
+\def\labelstyle{%%
+\ifincommdiag%%
+\textstyle%%
+\else%%
+\scriptstyle%%
+\fi}%%
+\let\objectstyle\displaystyle
+
+\newdiagramgrid{pentagon}{0.618034,0.618034,1,1,1,1,0.618034,0.618034}{1.%
+17557,1.17557,1.902113,1.902113}
+
+\newdiagramgrid{perspective}{0.75,0.75,1.1,1.1,0.9,0.9,0.95,0.95,0.75,0.75}{0%
+.75,0.75,1.1,1.1,0.9,0.9}
+
+\diagramstyle[%%ascii open square bracket
+dpi=300,%% office laserwriters are usually 300 dots per inch
+vmiddle,nobalance,%% vertical and horizontal positioning
+loose,%% allow rows and columns to stretch
+thin,%% line10 arrows; default rule thickness (TeXbook p447)
+pilespacing=10pt,%
+%% parallel vertical separation (horizontals: half this)
+shortfall=4pt,%% distance between arrowheads and their targets
+PostScript=Rokicki,%% default to PostScript not pure DVI
+%% The following are defaulted on entry to the diagram itself.
+%% l>=2em minimum length of horizontal arrow shafts in text
+%% l>=1em ditto in diagrams
+%% size=3em cell size
+%% heads=LaTeX arrowheads
+]%%ascii close square bracket
+
+%% process options to LaTeX2e's \usepackage[options]{diagrams}
+\ifx\ProcessOptions\undefined\else\CD@PK\ProcessOptions\relax\CD@FF\CD@e\fi
+\fi
+
+\cdrestoreat%% restore old category code for @ etc
+%%============================== THE END ==============================
+
+\dimen0 200pt \dimen1 210pt \dimen2 220pt \dimen3 230pt \dimen4 240pt \dimen5
+250pt \dimen6 260pt \dimen7 270pt \dimen8 280pt \dimen9 290pt
+
+%% This is the end of Paul Taylor's commutative diagrams package.
+
diff --git a/macros/generic/diagrams/taylor/V3,91.tex b/macros/generic/diagrams/taylor/V3,91.tex
new file mode 100644
index 0000000000..c5c6ce2f11
--- /dev/null
+++ b/macros/generic/diagrams/taylor/V3,91.tex
@@ -0,0 +1,1917 @@
+% mangletex (24 Nov 1995) run at 17:43 BST Friday 01 September 2006
+\message{===================================================================}%
+\message{< Paul Taylor's commutative diagrams - version 3.91, August 2006 > }%
+%%
+%%
+%% This code runs the LaTeX \ProvidesPackage command iff it is defined.
+%% included at the request of Michael Downes <mjd@ams.org> March 2002.
+%% Put \listfiles in your LaTeX preamble to see what this is for.
+\expandafter\ifx\csname ProvidesPackage\endcsname\relax\toks0=\expandafter{%
+\fi\ProvidesPackage{diagrams}[2006/08/31 v3.91 Paul Taylor's commutative
+diagrams]%%
+\toks0=\bgroup}%%
+%%======================================================================%
+%% TeX macros for drawing category-theoretic diagrams %
+%% %
+%% Paul Taylor %
+%% %
+%% www.ctan.org or www.cs.man.ac.uk/~pt/diagrams %
+%% %
+%% PLEASE READ THE MANUAL! %
+%% %
+%% Please ensure that you are registered with me as a user so that %
+%% you can be informed of future releases. Any electronic mail %
+%% message with "commutative" or "diagram" in the subject line %
+%% (such as your request for the package, a question about it, or %
+%% even an otherwise blank message) automatically registers you. %
+%% %
+%% %
+%% CONTENTS: %
+%% (O) corruption-sensitive hacks (to approx line 328) %
+%% Arrow components & commands - starts approx line 1240 %
+%% (22) auxillary macros for adjustment of components %
+%% (23) bits of arrows (\rhvee etc) %
+%% (24) arrow commands (\rTo etc) %
+%% (25) miscellaneous %
+%% Apart from these five sections, the rest is intended to be totally %
+%% meaningless in the undocumented version, which is approximately %
+%% 1910 lines long. Please do not waste trees by printing it out. %
+%% %
+%% COPYRIGHT NOTICE: %
+%% This package may be copied and used freely for any academic %
+%% (not commercial or military) purpose, on condition that it %
+%% is not altered in any way, and that an acknowledgement is %
+%% included in any published work making substantial use of it. %
+%% %
+%% IT IS SUPPLIED "AS IS", WITHOUT WARRANTY, EXPRESS OR IMPLIED. %
+%% %
+%% If you are doing something where mistakes cost money (or where %
+%% success brings financial profit) then you must use commercial %
+%% software, not this package. In any case, please remember to %
+%% keep several backup copies of all files, and check everything %
+%% visually before sending final copy to the publishers. %
+%% %
+%% You may use this package as a (substantial) aid to writing an %
+%% academic research or text book on condition that %
+%% (i) you contact me at a suitable time to ensure that you have %
+%% an up-to-date version (and any infelicities can be fixed), %
+%% (ii) you send me a copy of the book when it's published. %
+%% %
+%% HISTORY %
+%% 3.91 Released 31 August 2006 %
+%% Renamed "noPostScript" option as "UglyObsolete". %
+%% 3.90 Released 11 April 2004 %
+%% use PostScript=Rokicki not pure DVI by default %
+%% 3.89 Released 7 July 2002 %
+%% Added support for pdftex, which is recognised automatically. %
+%% 3.88 Released 1 September 2000 %
+%% Square hook tail: \newarrow{SquareInto}{sqhook}---> %
+%% 3.87 Released 1 September 1999 %
+%% This version was used for the final 1200dpi PS copy of my book %
+%% ``Practical Foundations of Mathematics'' (Cambridge Univ Press) %
+%% see http://www.cs.man.ac.uk/~pt/Practical_Foundations %
+%% 3.86 Released 1 September 1998 %
+%% New options hug and nohug in PostScript mode: [PS,nohug] uses %
+%% PS for the arrows without rotating the labels, but the way of %
+%% calculating the actual position of these horizontal labels on %
+%% will remain subject to alteration for some period of time --- %
+%% please send me examples if you feel that adjustment is needed. %
+%% %
+%% Suppress indentation of following text (due to LaTeX change) %
+%% Mangle \left@label and \right@label (conflict with Elsevier). %
+%% midvshaft and snake for vertical arrows %
+%% New option [gap=width] (default=shortfall) to use instead of %
+%% ~{\;} on horizontals and PS diagonals, as this caused ^ and _ %
+%% labels to be moved too far away from the shaft. %
+%% Added >-> and <-< heads and tails, same as >> and << but the %
+%% shaft goes *through* the extra arrowhead. %
+%% 3.85 Released 20 August 1997 %
+%% New option [crab=distance] shifts horizontals and PS diagonals %
+%% transversally by the specified distance (positive=upward). %
+%% New option [snake=distance] shifts midshaft horizontals and %
+%% PS diagonals longitudinally by the specified distance. %
+%% New option [leftflush], like [flushleft] but reckons alignment %
+%% from multiple verticals, or from text if there's no vertical. %
+%% Most of the history has been suppressed from the user version. %
+%% 3.83 Released 18 May 1995 %
+%% "dotted" option (set dot filler on maps) %
+%% Parallel maps (\pile) outside diagrams stretch correctly. %
+%% Option "LaTeXeqno" uses LaTeX's equation number and style %
+%% for "eqno"; LaTeX's \label command picks this up. %
+%% Suppress warnings & 2nd pass errors with "silent" option. %
+%% 3.81 Second alpha release 18 July 1994 %
+%% \overprint{text} sets text in maths and overprints it in the %
+%% current cell, centered in the column irrespective of other stuff%
+%% "repositionpullbacks" option uses this for \SEpbk etc %
+%% \newdiagramgrid declaration, grid option and pentagon grid. %
+%% 3.80 Alpha release for adjusted diagonals 15 July 1994. %
+%% Introduced landscape and portrait options. %
+%% Diagonals adjusted to meet their endpoints, at last!!!! %
+%% 3.28 Released 30 November 1993 %
+%% Peter Freyd's \puncture symbol provided. %
+%% 3.25 Released 30 January 1993 %
+%% LaTeX heads made default (unless \tenln undefined, when vee) %
+%% Circle, cross, little vee, little black triangle heads. %
+%% First-use warning when defaulted diagonal components are used. %
+%% AMSTEX emulation - works at least when amstex not present. %
+%% 3.24 Release 7 Sept 1992 advertised to users. %
+%% PostScript option introduced: %
+%% LaTeX, vee, curlyvee, triangle & blacktriangle heads & tails %
+%% TPIC option introduced as an alternative to \LaTeX@make@line. %
+%% Postscript arrows (basic code). %
+%% Implemented \newarrow \newarrowhead etc. %
+%% Horizontal arrows outside diagram can stretch by wordspacing. %
+%% Added < and > for labels on left and right of arrow; %
+%% 3.16 (20.7.90) as mass mailed; only have mangled version %
+%% -- all following version numbers are post-facto -- %
+%% 3 (Jan 90) stretching vertical arrows %
+%% 2 (Sept 89) horizontals stretch to objects; "superscript" labels %
+%% 1 (1987) horizontal arrows stretch to edge of cell %
+%% 0 (1986) implementation of Knuth's TeXercise 18.46 for my thesis %
+%%======================================================================%
+
+%%======================================================================%
+%% %
+%% (1) CORRUPTION-SENSITIVE HACKS %
+%% %
+%%======================================================================%
+
+%% CORRUPTION & \catcode WARNING
+
+%% BITNET (IBM) machines may corrupt certain important characters
+%% in transmission by electronic mail:
+%% 0123456789=digits, abcdefghijklmnopqrstuvwxyz=lowers,
+%% ABCDEFGHIJKLMNOPQRSTUVWXYZ=uppers, @=at (internal names),
+%% {}=curly braces (grouping), \=backslash (keywords),
+%% %=percent (comment), #=hash/sharp (argument), +=plus, -=minus,
+%% <>=angle brackets (relations \ifnum,\ifdim), ==equals,
+%% ,=comma, .=dot, :=colon, ;=semicolon, =space
+%% $=dollar (maths) is only used in the "bits of maps" section
+
+%% The following characters are marked by a comment including the word "ASCII",
+%% except in comments and messages:
+%% &=and (alignment), ~=tilde, |=vertical, []=square brackets,
+%% ^=caret (superscript), _=underline (subscript),
+%% `=grave/backquote (catcodes), '=acute/single quote (octal),
+%% "=double quote (hex), ()=round brackets,
+%% /=slash, ?=query, !=pling/bang,
+
+%% The \catcode's marked * are assumed for reading this file:
+%% \=0* {=1* }=2* $=3 &=4 return=5* #=6 ^=7 _=8 ignored=9*
+%% space=10* letter=11* other=12 active=13 %=14* invalid=15
+%% If you want to load this package inside Stallman's "texinfo", you must do
+%%% @catcode`@\=0 \catcode`\%=14 \input diagrams \catcode`\%=12 \catcode`\\=13
+%% and then use @diagram @rTo @\ @enddiagram etc. (braces {} stay the same).
+%% Also need @catcode`@&=4.
+
+%%*** You *MUST NOT* use the internal commands (with names beginning \CD@)****
+
+%% don't load me twice!
+\ifx\diagram\CD@qK\else\message{WARNING: the \string\diagram\space command is
+already defined and will not be loaded again}\expandafter\endinput\fi
+
+%% make @ letter, saving its old code to restore at the end of this file
+%%% look for this on the last line of the file if you think something's missing!
+%% the other \catcode assignments are to make it work with texinfo.
+\edef\cdrestoreat{%%
+\noexpand\catcode\lq\noexpand\@=\the\catcode\lq\@%%
+\noexpand\catcode\lq\noexpand\#=\the\catcode\lq\#%%
+\noexpand\catcode\lq\noexpand\$=\the\catcode\lq\$%%
+\noexpand\catcode\lq\noexpand\<=\the\catcode\lq\<%%
+\noexpand\catcode\lq\noexpand\>=\the\catcode\lq\>%%
+\noexpand\catcode\lq\noexpand\:=\the\catcode\lq\:%% Johannes L. Braams's
+\noexpand\catcode\lq\noexpand\;=\the\catcode\lq\;%% Babel languages package
+\noexpand\catcode\lq\noexpand\!=\the\catcode\lq\!%% makes these \active.
+\noexpand\catcode\lq\noexpand\?=\the\catcode\lq\?%%
+\noexpand\catcode\lq\noexpand\+=\the\catcode\rq53%
+%% texinfo @+ is @outer@active
+}\catcode\lq\@=11 \catcode\lq\#=6 \catcode\lq\<=12 \catcode\lq\>=12 \catcode
+\rq53=12 \catcode\lq\:=12 \catcode\lq\;=12 \catcode\lq\!=12 \catcode\lq\?=12
+
+%% Change y to n if pool_size in your implementation of TeX is small.
+%% This is reasonable if you have a small ("personal") computer, but if you
+%%% have a sun, dec, hp, ... workstation or a mainframe, complain to your local
+%% system manager and get him/her to install a version of TeX with bigger
+%% parameters. The "hash size" (number of command names) gets you next.
+\ifx\diagram@help@messages\CD@qK\let\diagram@help@messages y\fi
+
+%% The following macro is used to include literal PostScript commands in the
+%% DVI file for rotation, etc. Since this goes beyond standard TeX, it is
+%%% dependent on the convention used by your local DVI-to-PostScript translator.
+%% Choose whichever line applies to the program used at your site, or, if
+%% yours is not listed, consult the manual, experiment with this macro and
+%% (please) tell me what is needed to make it work.
+%%
+%%
+%%% dvips (Tomas Rokicki, Radical Eye) labrea.stanford.edu /pub/dvips9999.tar.Z
+%% CTAN: dviware/dvips
+\def\cdps@Rokicki#1{\special{ps:#1}}\let\cdps@dvips\cdps@Rokicki\let
+\cdps@RadicalEye\cdps@Rokicki\let\CD@HB\cdps@Rokicki\let\CD@IK\cdps@Rokicki
+\let\CD@HB\cdps@Rokicki%%
+%% I'm not sure that the rest work.
+%%
+%% dvitps (Stephan Bechtolsheim, Integrated Computer Systems)
+%% arthur.cs.purdue.edu /pub/TeXPS-9.99.tar.Z
+\def\cdps@Bechtolsheim#1{\special{dvitps: Literal "#1"}}%
+%% ASCII two dbl quotes
+\let\cdps@dvitps\cdps@Bechtolsheim\let\cdps@IntegratedComputerSystems
+\cdps@Bechtolsheim%%
+%% dvitops (James Clark)
+%% CTAN: dviware/dvitops
+\def\cdps@Clark#1{\special{dvitops: inline #1}}%%
+\let\cdps@dvitops\cdps@Clark%%
+%% OzTeX (Andrew Trevorrow) cannot be used
+\let\cdps@OzTeX\empty\let\cdps@oztex\empty\let\cdps@Trevorrow\empty%%
+%% dvi3ps (Kevin Coombes)
+%% CTAN: dviware/dvi2ps/dvi3ps
+\def\cdps@Coombes#1{\special{ps-string #1}}%%
+%% psprint (Trevorrow) CTAN: dviware/psprint
+%% dvi2ps (Senn) CTAN: dviware/dvi2ps
+%% psdvi (Elwell) CTAN: dviware/dvi2ps/psdvi
+
+\count@=\year\multiply\count@12 \advance\count@\month%%
+\ifnum\count@>24096 %% (December 2007)
+\message{***********************************************************}%%ascii
+\message{! YOU HAVE AN OUT OF DATE VERSION OF COMMUTATIVE DIAGRAMS! *}%%
+\message{! it expired in December 2007 and is time-bombed for April *}%%
+\message{! You may get an up to date version of this package from *}%%ascii
+\message{! either www.ctan.org or www.cs.man.ac.uk/~pt/diagrams/ *}%%
+\message{***********************************************************}%%ascii
+\ifnum\count@>24099 %% (March 2008)
+\errhelp{You may press RETURN and carry on for the time being.}\message{! It
+is embarrassing to see papers in conference proceedings}\message{! and
+journals containing bugs which I had fixed years before.}\message{! It is easy
+to obtain and install a new version, which will}\errmessage{! remain
+compatible with your files. Please get it NOW.}\fi\fi
+
+\def\CD@DE{\global\let}\def\CD@RH{\outer\def}
+
+%% safe names for braces, tab (&) and maths ($), as commands and for messages
+{\escapechar\m@ne\xdef\CD@o{\string\{}\xdef\CD@yC{\string\}}%%
+%%
+%% three ASCII ampersands (ands) (&&&) appear on the next line
+\catcode\lq\&=4 \CD@DE\CD@Q=&\xdef\CD@S{\string\&}%%ascii three ands
+%%
+%% ASCII ^ and _ each appear twice on next line
+%% six ASCII dollars ($$$$$$) appear on the next two lines.
+\catcode\lq\$=3 \CD@DE\CD@k=$\CD@DE\CD@ND=$%%ascii three dollars
+\xdef\CD@nC{\string\$}\gdef\CD@LG{$$}%%ascii three dollars
+%%
+%% two ASCII underlines (__) appear on the next line.
+\catcode\lq\_=8 \CD@DE\CD@lJ=_%%ascii two underlines
+%%
+%% eight ASCII carets (^^^^^^^^) appear on the next three lines.
+\obeylines\catcode\lq\^=7 \CD@DE\@super=^%%ascii two carets
+\ifnum\newlinechar=10 \gdef\CD@uG{^^J}%%ascii two carets
+\else\ifnum\newlinechar=13 \gdef\CD@uG{^^M}%%ascii two carets
+\else\ifnum\newlinechar=-1 \gdef\CD@uG{^^J}%%ascii two carets
+\else\CD@DE\CD@uG\space\expandafter\message{! input error: \noexpand
+\newlinechar\space is ASCII \the\newlinechar, not LF=10 or CR=13.}%%
+\fi\fi\fi}%%
+
+%% avoid using <> (because I personally re-define them to mean \langle\rangle)
+\mathchardef\lessthan=\rq30474 \mathchardef\greaterthan=\rq30476
+
+%% LaTeX line and arrowhead font
+%% the "hit return" comments show up if the font is missing.
+\ifx\tenln\CD@qK%%
+\font\tenln=line10\relax%% Hit return - who needs diagonals?
+\fi\ifx\tenlnw\CD@qK\ifx\tenln\nullfont\let\tenlnw\nullfont\else%%
+\font\tenlnw=linew10\relax%% Hit return - who needs diagonals?
+\fi\fi%%
+
+%% report line numbers in TeX3 only
+\ifx\inputlineno\CD@qK\csname newcount\endcsname\inputlineno\inputlineno\m@ne
+\message{***************************************************}\message{!
+Obsolete TeX (version 2). You should upgrade to *}\message{! version 3, which
+has been available since 1990. *}\message{***********************************%
+****************}\fi
+
+\def\cd@shouldnt#1{\CD@KB{* THIS (#1) SHOULD NEVER HAPPEN! *}}
+
+%% turn round- and square-bracketed arguments into curly-bracketed
+\def\get@round@pair#1(#2,#3){#1{#2}{#3}}%%ascii round brackets ()
+\def\get@square@arg#1[#2]{#1{#2}}%%ascii square brackets []
+\def\CD@AE#1{\CD@PK\let\CD@DH\CD@@E\CD@@E#1,],}%%ascii sq brackets
+\def\CD@m{[}\def\CD@RD{]}\def\commdiag#1{{\let\enddiagram\relax\diagram[]#1%
+\enddiagram}}
+
+%% ASCII open square bracket occurs on next line
+\def\CD@BF{{\ifx\CD@EH[\aftergroup\get@square@arg\aftergroup\CD@YH\else
+\aftergroup\CD@JH\fi}}%%
+\def\CD@CF#1#2{\def\CD@YH{#1}\def\CD@JH{#2}\futurelet\CD@EH\CD@BF}
+
+%% ASCII vertical bar (|) occurs on the next line
+\def\CD@KK{|}
+
+\def\CD@PB{%% arguments to maps inside diagrams
+\tokcase\CD@DD:\CD@y\break@args;\catcase\@super:\upper@label;\catcase\CD@lJ:%
+\lower@label;\tokcase{~}:\middle@label;%%ascii tilde
+\tokcase<:\CD@iF;%%ascii less-than
+\tokcase>:\CD@iI;%%ascii greater-than
+\tokcase(:\CD@BC;%%)%ascii open round bracket
+\tokcase[:\optional@;%%]%ascii open square bracket
+\tokcase.:\CD@JJ;%%ascii dot 12.7.94
+\catcase\space:\eat@space;\catcase\bgroup:\positional@;\default:\CD@@A
+\break@args;\endswitch}
+
+\def\switch@arg{%% arguments to horizontal maps outside diagrams
+\catcase\@super:\upper@label;\catcase\CD@lJ:\lower@label;\tokcase[:\optional@
+;%%]%ascii open square bracket
+\tokcase.:\CD@JJ;%%ascii dot 12.7.94 % ; was : before 15.6.97
+\catcase\space:\eat@space;\catcase\bgroup:\positional@;\tokcase{~}:%
+\middle@label;%%ascii tilde (questionable!)
+\default:\CD@y\break@args;\endswitch}
+
+%% That's as much as you get to read "in clear" - the rest is private!
+
+\let\CD@tJ\relax\ifx\protect\CD@qK\let\protect\relax\fi\ifx\AtEndDocument
+\CD@qK\def\CD@PG{\CD@gB}\def\CD@GF#1#2{}\else\def\CD@PG#1{\edef\CD@CH{#1}%
+\expandafter\CD@oC\CD@CH\CD@OD}\def\CD@oC#1\CD@OD{\AtEndDocument{\typeout{%
+\CD@tA: #1}}}\def\CD@GF#1#2{\gdef#1{#2}\AtEndDocument{#1}}\fi\def\CD@ZA#1#2{%
+\def#1{\CD@PG{#2\CD@mD\CD@W}\CD@DE#1\relax}}\def\CD@uF#1\repeat{\def\CD@p{#1}%
+\CD@OF}\def\CD@OF{\CD@p\relax\expandafter\CD@OF\fi}\def\CD@sF#1\repeat{\def
+\CD@q{#1}\CD@PF}\def\CD@PF{\CD@q\relax\expandafter\CD@PF\fi}\def\CD@tF#1%
+\repeat{\def\CD@r{#1}\CD@QF}\def\CD@QF{\CD@r\relax\expandafter\CD@QF\fi}\def
+\CD@tG#1#2#3{\def#2{\let#1\iftrue}\def#3{\let#1\iffalse}#3}\if y%
+\diagram@help@messages\def\CD@rG#1#2{\csname newtoks\endcsname#1#1=%
+\expandafter{\csname#2\endcsname}}\else\csname newtoks\endcsname\no@cd@help
+\no@cd@help{See the manual}\def\CD@rG#1#2{\let#1\no@cd@help}\fi\chardef\CD@lF
+=1 \chardef\CD@lI=2 \chardef\CD@MH=5 \chardef\CD@tH=6 \chardef\CD@sH=7
+\chardef\CD@PC=9 \dimendef\CD@hI=2 \dimendef\CD@hF=3 \dimendef\CD@mF=4
+\dimendef\CD@mI=5 \dimendef\CD@wJ=6 \dimendef\CD@tI=8 \dimendef\CD@sI=9
+\skipdef\CD@uB=1 \skipdef\CD@NF=2 \skipdef\CD@tB=3 \skipdef\CD@ZE=4 \skipdef
+\CD@JK=5 \skipdef\CD@kI=6 \skipdef\CD@kF=7 \skipdef\CD@qI=8 \skipdef\CD@pI=9
+\countdef\CD@JC=9 \countdef\CD@gD=8 \countdef\CD@A=7 \def\sdef#1#2{\def#1{#2}%
+}\def\CD@L#1{\expandafter\aftergroup\csname#1\endcsname}\def\CD@RC#1{%
+\expandafter\def\csname#1\endcsname}\def\CD@sD#1{\expandafter\gdef\csname#1%
+\endcsname}\def\CD@vC#1{\expandafter\edef\csname#1\endcsname}\def\CD@nF#1#2{%
+\expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname}\def\CD@EE
+#1#2{\expandafter\CD@DE\csname#1\expandafter\endcsname\csname#2\endcsname}%
+\def\CD@AK#1{\csname#1\endcsname}\def\CD@XJ#1{\expandafter\show\csname#1%
+\endcsname}\def\CD@ZJ#1{\expandafter\showthe\csname#1\endcsname}\def\CD@WJ#1{%
+\expandafter\showbox\csname#1\endcsname}\def\CD@tA{Commutative Diagram}\edef
+\CD@kH{\string\par}\edef\CD@dC{\string\diagram}\edef\CD@HD{\string\enddiagram
+}\edef\CD@EC{\string\\}\def\CD@eF{LaTeX}\ifx\@ignoretrue\CD@qK\expandafter
+\CD@tG\csname if@ignore\endcsname\ignore@true\ignore@false\def\@ignoretrue{%
+\global\ignore@true}\def\@ignorefalse{\global\ignore@false}\fi
+
+\def\CD@g{{\ifnum0=\lq}\fi}\def\CD@wC{\ifnum0=\lq{\fi}}\def\catcase#1:{\ifcat
+\noexpand\CD@EH#1\CD@tJ\expandafter\CD@kC\else\expandafter\CD@dJ\fi}\def
+\tokcase#1:{\ifx\CD@EH#1\CD@tJ\expandafter\CD@kC\else\expandafter\CD@dJ\fi}%
+\def\CD@kC#1;#2\endswitch{#1}\def\CD@dJ#1;{}\let\endswitch\relax\def\default:%
+#1;#2\endswitch{#1}\ifx\at@\CD@qK\def\at@{@}\fi\edef\CD@P{\CD@o pt\CD@yC}%
+\CD@RC{\CD@P>}#1>#2>{\CD@z\rTo\sp{#1}\sb{#2}\CD@z}\CD@RC{\CD@P<}#1<#2<{\CD@z
+\lTo\sp{#1}\sb{#2}\CD@z}\CD@RC{\CD@P)}#1)#2){\CD@z\rTo\sp{#1}\sb{#2}\CD@z}%
+%%ascii round
+\CD@RC{\CD@P(}#1(#2({\CD@z\lTo\sp{#1}\sb{#2}\CD@z}%%ascii brack
+\def\CD@O{\def\endCD{\enddiagram}\CD@RC{\CD@P A}##1A##2A{\uTo<{##1}>{##2}%
+\CD@z\CD@z}\CD@RC{\CD@P V}##1V##2V{\dTo<{##1}>{##2}\CD@z\CD@z}\CD@RC{\CD@P=}{%
+\CD@z\hEq\CD@z}\CD@RC{\CD@P\CD@KK}{\vEq\CD@z\CD@z}\CD@RC{\CD@P\string\vert}{%
+\vEq\CD@z\CD@z}\CD@RC{\CD@P.}{\CD@z\CD@z}\let\CD@z\CD@Q}\def\CD@IE{\let\tmp
+\CD@JE\ifcat A\noexpand\CD@CH\else\ifcat=\noexpand\CD@CH\else\ifcat\relax
+\noexpand\CD@CH\else\let\tmp\at@\fi\fi\fi\tmp}\def\CD@JE#1{\CD@nF{tmp}{\CD@P
+\string#1}\ifx\tmp\relax\def\tmp{\at@#1}\fi\tmp}\def\CD@z{}\begingroup
+\aftergroup\def\aftergroup\CD@T\aftergroup{\aftergroup\def\catcode\lq\@%
+\active\aftergroup @\endgroup{\futurelet\CD@CH\CD@IE}}\newcount\CD@uA
+\newcount\CD@vA\newcount\CD@wA\newcount\CD@xA\newdimen\CD@OA\newdimen\CD@PA
+\CD@tG\CD@gE\CD@@A\CD@y\CD@tG\CD@hE\CD@EA\CD@BA\newdimen\CD@RA\newdimen\CD@SA
+\newcount\CD@yA\newcount\CD@zA\newdimen\CD@QA\newbox\CD@DA\CD@tG\CD@lE\CD@dA
+\CD@bA\newcount\CD@LH\newcount\CD@TC\def\CD@V#1#2{\ifdim#1<#2\relax#1=#2%
+\relax\fi}\def\CD@X#1#2{\ifdim#1>#2\relax#1=#2\relax\fi}\newdimen\CD@XH\CD@XH
+=1sp \newdimen\CD@zC\CD@zC\z@\def\CD@cJ{\ifdim\CD@zC=1em\else\CD@nJ\fi}\def
+\CD@nJ{\CD@zC1em\def\CD@NC{\fontdimen8\textfont3 }\CD@@J\CD@NJ\setbox0=\vbox{%
+\CD@t\noindent\CD@k\null\penalty-9993\null\CD@ND\null\endgraf\setbox0=%
+\lastbox\unskip\unpenalty\setbox1=\lastbox\global\setbox\CD@IG=\hbox{\unhbox0%
+\unskip\unskip\unpenalty\setbox0=\lastbox}\global\setbox\CD@KG=\hbox{\unhbox1%
+\unskip\unpenalty\setbox1=\lastbox}}}\newdimen\CD@@I\CD@@I=1true in \divide
+\CD@@I300 \def\CD@zH#1{\multiply#1\tw@\advance#1\ifnum#1<\z@-\else+\fi\CD@@I
+\divide#1\tw@\divide#1\CD@@I\multiply#1\CD@@I}\def\MapBreadth{%
+\afterassignment\CD@gI\CD@LF}\newdimen\CD@LF\newdimen\CD@oI\def\CD@gI{\CD@oI
+\CD@LF\CD@V\CD@@I{4\CD@XH}\CD@X\CD@@I\p@\CD@zH\CD@oI\ifdim\CD@LF>\z@\CD@V
+\CD@oI\CD@@I\fi\CD@cJ}\def\CD@RJ#1{\CD@zD\count@\CD@@I#1\ifnum\count@>\z@
+\divide\CD@@I\count@\fi\CD@gI\CD@NJ}\def\CD@NJ{\dimen@\CD@QC\count@\dimen@
+\divide\count@5\divide\count@\CD@@I\edef\CD@OC{\the\count@}}\def\CD@AJ{\CD@QJ
+\z@}\def\CD@QJ#1{\CD@tI\axisheight\advance\CD@tI#1\relax\advance\CD@tI-.5%
+\CD@oI\CD@zH\CD@tI\CD@sI-\CD@tI\advance\CD@tI\CD@LF}\newdimen\CD@DC\CD@DC\z@
+\newdimen\CD@eJ\CD@eJ\z@\def\CD@CJ#1{\CD@sI#1\relax\CD@tI\CD@sI\advance\CD@tI
+\CD@LF\relax}\def\horizhtdp{height\CD@tI depth\CD@sI}\def\axisheight{%
+\fontdimen22\the\textfont\tw@}\def\script@axisheight{\fontdimen22\the
+\scriptfont\tw@}\def\ss@axisheight{\fontdimen22\the\scriptscriptfont\tw@}\def
+\CD@NC{0.4pt}\def\CD@VK{\fontdimen3\textfont\z@}\def\CD@UK{\fontdimen3%
+\textfont\z@}\newdimen\PileSpacing\newdimen\CD@nA\CD@nA\z@\def\CD@RG{%
+\ifincommdiag1.3em\else2em\fi}\newdimen\CD@YB\def\CellSize{\afterassignment
+\CD@kB\DiagramCellHeight}\newdimen\DiagramCellHeight\DiagramCellHeight-%
+\maxdimen\newdimen\DiagramCellWidth\DiagramCellWidth-\maxdimen\def\CD@kB{%
+\DiagramCellWidth\DiagramCellHeight}\def\CD@QC{3em}\newdimen\MapShortFall\def
+\MapsAbut{\MapShortFall\z@\objectheight\z@\objectwidth\z@}\newdimen\CD@iA
+\CD@iA\z@\CD@tG\CD@vE\CD@aB\CD@ZB\expandafter\ifx\expandafter\iftrue\csname
+ifUglyObsoleteDiagrams\endcsname\CD@ZB\else\CD@aB\fi\CD@nF{%
+ifUglyObsoleteDiagrams}{relax}\newif\ifUglyObsoleteDiagrams\def\CD@nK{\CD@aB
+\UglyObsoleteDiagramsfalse}\def\CD@oK{\CD@ZB\UglyObsoleteDiagramstrue}\CD@vE
+\CD@nK\else\CD@oK\fi\CD@tG\CD@hK\CD@dK\CD@cK\CD@cK\def\CD@pK{\global\CD@dK
+\global\CD@aB\global\UglyObsoleteDiagramsfalse\global\let\CD@n\empty\global
+\let\CD@oK\relax}\def\newarrowhead{\CD@mG h\CD@BG\CD@GG>}\def\newarrowtail{%
+\CD@mG t\CD@BG\CD@GG>}\def\newarrowmiddle{\CD@mG m\CD@BG\hbox@maths\empty}%
+\def\newarrowfiller{\CD@mG f\CD@bE\CD@MK-}\def\CD@mG#1#2#3#4#5#6#7#8#9{\CD@RC
+{r#1:#5}{#2{#6}}\CD@RC{l#1:#5}{#2{#7}}\CD@RC{d#1:#5}{#3{#8}}\CD@RC{u#1:#5}{#3%
+{#9}}\CD@vC{-#1:#5}{\expandafter\noexpand\csname-#1:#4\endcsname\noexpand
+\CD@MC}\CD@vC{+#1:#5}{\expandafter\noexpand\csname+#1:#4\endcsname\noexpand
+\CD@MC}}\CD@ZA\CD@MC{\CD@eF\space diagonals are used unless PostScript is set%
+}\def\defaultarrowhead#1{\edef\CD@sJ{#1}\CD@@J}\def\CD@@J{\CD@IJ\CD@sJ<>ht%
+\CD@IJ\CD@sJ<>th}\def\CD@IJ#1#2#3#4#5{\CD@HJ{r#4}{#3}{l#5}{#2}{r#4:#1}\CD@HJ{%
+r#5}{#2}{l#4}{#3}{l#4:#1}\CD@HJ{d#4}{#3}{u#5}{#2}{d#4:#1}\CD@HJ{d#5}{#2}{u#4}%
+{#3}{u#4:#1}}\def\CD@HJ#1#2#3#4#5{\begingroup\aftergroup\CD@GJ\CD@L{#1+:#2}%
+\CD@L{#1:#2}\CD@L{#3:#4}\CD@L{#5}\endgroup}\def\CD@GJ#1#2#3#4{\csname newbox%
+\endcsname#1\def#2{\copy#1}\def#3{\copy#1}\setbox#1=\box\voidb@x}\def\CD@sJ{}%
+\CD@@J\def\CD@GJ#1#2#3#4{\setbox#1=#4}\ifx\tenln\nullfont\def\CD@sJ{vee}\else
+\let\CD@sJ\CD@eF\fi\def\CD@xF#1#2#3{\begingroup\aftergroup\CD@wF\CD@L{#1#2:#3%
+#3}\CD@L{#1#2:#3}\aftergroup\CD@yF\CD@L{#1#2:#3-#3}\CD@L{#1#2:#3}\endgroup}%
+\def\CD@wF#1#2{\def#1{\hbox{\rlap{#2}\kern.4\CD@zC#2}}}\def\CD@yF#1#2{\def#1{%
+\hbox{\rlap{#2}\kern.4\CD@zC#2\kern-.4\CD@zC}}}\CD@xF lh>\CD@xF rt>\CD@xF rh<%
+\CD@xF rt<\def\CD@yF#1#2{\def#1{\hbox{\kern-.4\CD@zC\rlap{#2}\kern.4\CD@zC#2}%
+}}\CD@xF rh>\CD@xF lh<\CD@xF lt>\CD@xF lt<\def\CD@wF#1#2{\def#1{\vbox{\vbox to%
+\z@{#2\vss}\nointerlineskip\kern.4\CD@zC#2}}}\def\CD@yF#1#2{\def#1{\vbox{%
+\vbox to\z@{#2\vss}\nointerlineskip\kern.4\CD@zC#2\kern-.4\CD@zC}}}\CD@xF uh>%
+\CD@xF dt>\CD@xF dh<\CD@xF dt<\def\CD@yF#1#2{\def#1{\vbox{\kern-.4\CD@zC\vbox
+to\z@{#2\vss}\nointerlineskip\kern.4\CD@zC#2}}}\CD@xF dh>\CD@xF ut>\CD@xF uh<%
+\CD@xF ut<\def\CD@BG#1{\hbox{\mathsurround\z@\offinterlineskip\CD@k\mkern-1.5%
+mu{#1}\mkern-1.5mu\CD@ND}}\def\hbox@maths#1{\hbox{\CD@k#1\CD@ND}}\def\CD@GG#1%
+{\hbox to\CD@LF{\setbox0=\hbox{\offinterlineskip\mathsurround\z@\CD@k{#1}%
+\CD@ND}\dimen0.5\wd0\advance\dimen0-.5\CD@oI\CD@zH{\dimen0}\kern-\dimen0%
+\unhbox0\hss}}\def\CD@sB#1{\hbox to2\CD@LF{\hss\offinterlineskip\mathsurround
+\z@\CD@k{#1}\CD@ND\hss}}\def\CD@vF#1{\hbox{\mathsurround\z@\CD@k{#1}\CD@ND}}%
+\def\CD@bE#1{\hbox{\kern-.15\CD@zC\CD@k{#1}\CD@ND\kern-.15\CD@zC}}\def\CD@MK#%
+1{\vbox{\offinterlineskip\kern-.2ex\CD@GG{#1}\kern-.2ex}}\def\@fillh{%
+\xleaders\vrule\horizhtdp}\def\@fillv{\xleaders\hrule width\CD@LF}\CD@nF{rf:-%
+}{@fillh}\CD@nF{lf:-}{@fillh}\CD@nF{df:-}{@fillv}\CD@nF{uf:-}{@fillv}\CD@nF{%
+rh:}{null}\CD@nF{rm:}{null}\CD@nF{rt:}{null}\CD@nF{lh:}{null}\CD@nF{lm:}{null%
+}\CD@nF{lt:}{null}\CD@nF{dh:}{null}\CD@nF{dm:}{null}\CD@nF{dt:}{null}\CD@nF{%
+uh:}{null}\CD@nF{um:}{null}\CD@nF{ut:}{null}\CD@nF{+h:}{null}\CD@nF{+m:}{null%
+}\CD@nF{+t:}{null}\CD@nF{-h:}{null}\CD@nF{-m:}{null}\CD@nF{-t:}{null}\def
+\CD@@D{\hbox{\vrule height 1pt depth-1pt width 1pt}}\CD@RC{rf:}{\CD@@D}\CD@nF
+{lf:}{rf:}\CD@nF{+f:}{rf:}\CD@RC{df:}{\CD@@D}\CD@nF{uf:}{df:}\CD@nF{-f:}{df:}%
+\def\CD@BD{\CD@U\null\CD@@D\null\CD@@D\null}\edef\CD@lG{\string\newarrow}\def
+\newarrow#1#2#3#4#5#6{\begingroup\edef\@name{#1}\edef\CD@oJ{#2}\edef\CD@iD{#3%
+}\edef\CD@QG{#4}\edef\CD@jD{#5}\edef\CD@LE{#6}\let\CD@HE\CD@sG\let\CD@FK
+\CD@BH\let\@x\CD@AH\ifx\CD@oJ\CD@iD\let\CD@oJ\empty\fi\ifx\CD@LE\CD@jD\let
+\CD@LE\empty\fi\def\CD@LI{r}\def\CD@SF{l}\def\CD@IC{d}\def\CD@yJ{u}\def\CD@gH
+{+}\def\@m{-}\ifx\CD@iD\CD@jD\ifx\CD@QG\CD@iD\let\CD@QG\empty\fi\ifx\CD@LE
+\empty\ifx\CD@iD\CD@aE\let\@x\CD@yG\else\let\@x\CD@zG\fi\fi\else\edef\CD@a{%
+\CD@iD\CD@oJ}\ifx\CD@a\empty\ifx\CD@QG\CD@jD\let\CD@QG\empty\fi\fi\fi\ifmmode
+\aftergroup\CD@kG\else\CD@@A\CD@oB rh{head\space\space}\CD@LE\CD@oB rf{filler%
+}\CD@iD\CD@oB rm{middle}\CD@QG\ifx\CD@jD\CD@iD\else\CD@oB rf{filler}\CD@jD\fi
+\CD@oB rt{tail\space\space}\CD@oJ\CD@gE\CD@HE\CD@FK\@x\CD@nG l-2+2{lu}{nw}%
+\NorthWest\CD@nG r+2+2{ru}{ne}\NorthEast\CD@nG l-2-2{ld}{sw}\SouthWest\CD@nG r%
++2-2{rd}{se}\SouthEast\else\aftergroup\CD@b\CD@L{r\@name}\fi\fi\endgroup}\def
+\CD@sG{\CD@vG\CD@LI\CD@SF rl\Horizontal@Map}\def\CD@BH{\CD@vG\CD@IC\CD@yJ du%
+\Vertical@Map}\def\CD@AH{\CD@vG\CD@gH\@m+-\Vector@Map}\def\CD@yG{\CD@vG\CD@gH
+\@m+-\Slant@Map}\def\CD@zG{\CD@vG\CD@gH\@m+-\Slope@Map}\catcode\lq\/=\active
+\def\CD@vG#1#2#3#4#5{\CD@jG#1#3#5t:\CD@oJ/f:\CD@iD/m:\CD@QG/f:\CD@jD/h:\CD@LE
+//\CD@jG#2#4#5h:\CD@LE/f:\CD@jD/m:\CD@QG/f:\CD@iD/t:\CD@oJ//}\def\CD@jG#1#2#3%
+#4//{\edef\CD@fG{#2}\aftergroup\sdef\CD@L{#1\@name}\aftergroup{\aftergroup#3%
+\CD@M#4//\aftergroup}}\def\CD@M#1/{\edef\CD@EH{#1}\ifx\CD@EH\empty\else\CD@L{%
+\CD@fG#1}\expandafter\CD@M\fi}\catcode\lq\/=12 \def\CD@nG#1#2#3#4#5#6#7#8{%
+\aftergroup\sdef\CD@L{#6\@name}\aftergroup{\CD@L{#2\@name}\if#2#4\aftergroup
+\CD@CI\else\aftergroup\CD@BI\fi\CD@L{#1\@name}%
+%% ASCII round brackets and comma (,) appear on the next line
+\aftergroup(\aftergroup#3\aftergroup,\aftergroup#5\aftergroup)\aftergroup}}%
+\def\CD@oB#1#2#3#4{\expandafter\ifx\csname#1#2:#4\endcsname\relax\CD@y\CD@gB{%
+arrow#3 "#4" undefined}\fi}\CD@rG\CD@VE{All five components must be defined
+before an arrow.}\CD@rG\CD@SE{\CD@lG, unlike \string\HorizontalMap, is a
+declaration.}\def\CD@b#1{\CD@YA{Arrows \string#1 etc could not be defined}%
+\CD@VE}\def\CD@kG{\CD@YA{misplaced \CD@lG}\CD@SE}\def\newdiagramgrid#1#2#3{%
+\CD@RC{cdgh@#1}{#2,],}%% ASCII close square bracket
+\CD@RC{cdgv@#1}{#3,],}}%% ASCII close square bracket
+\CD@tG\ifincommdiag\incommdiagtrue\incommdiagfalse\CD@tG\CD@@F\CD@IF\CD@HF
+\newcount\CD@VA\CD@VA=0 \def\CD@yH{\CD@VA6 }\def\CD@OB{\CD@VA1 \global\CD@yA1
+\CD@DE\CD@YF\empty}\def\CD@YF{}\def\CD@nB#1{\relax\CD@MD\edef\CD@vJ{#1}%
+\begingroup\CD@rE\else\ifcase\CD@VA\ifmmode\else\CD@YG\CD@E0\fi\or\CD@cE5\or
+\CD@YG\CD@F5\or\CD@YG\CD@B5\or\CD@YG\CD@B5\or\CD@YG\CD@C5\or\CD@cE7\or\CD@YG
+\CD@D7\fi\fi\endgroup\xdef\CD@YF{#1}}\def\CD@pB#1#2#3#4#5{\relax\CD@MD\xdef
+\CD@vJ{#4}\begingroup\ifnum\CD@VA<#1 \expandafter\CD@cE\ifcase\CD@VA0\or#2\or
+#3\else#2\fi\else\ifnum\CD@VA<6 \CD@tJ\CD@YG\CD@B#2\else\CD@YG\CD@G#2\fi\fi
+\endgroup\CD@DE\CD@YF\CD@vJ\ifincommdiag\let\CD@ZD#5\else\let\CD@ZD\CD@LK\fi}%
+\def\CD@yI{\global\CD@yA=\ifnum\CD@VA<5 1\else2\fi\relax}\def\CD@OI{\CD@VA
+\CD@yA}\def\CD@cE#1{\aftergroup\CD@VA\aftergroup#1\aftergroup\relax}\def
+\CD@HH{\def\CD@nB##1{\relax}\let\CD@pB\CD@FH\let\CD@yH\relax\let\CD@OB\relax
+\let\CD@yI\relax\let\CD@OI\relax}\def\CD@FH#1#2#3#4#5{\ifincommdiag\let\CD@ZD
+#5\else\xdef\CD@vJ{#4}\let\CD@ZD\CD@LK\fi}\def\CD@YG#1{\aftergroup#1%
+\aftergroup\relax\CD@cE}\def\CD@B{\CD@YE\CD@S\CD@ME\CD@Q}\def\CD@G{\CD@YE{%
+\CD@yC\CD@S}\CD@XE\CD@QD\CD@Q}\def\CD@F{\CD@YE{*\CD@S}\CD@RE\clubsuit\CD@Q}%
+\def\CD@C{\CD@YE{\CD@S*\CD@S}\CD@RE\CD@Q\clubsuit\CD@Q}\def\CD@D{\CD@YE\CD@EC
+\CD@TE\\}\def\CD@E{\CD@YE\CD@nC\CD@QE\CD@k}\def\CD@LK{\CD@YA{\CD@vJ\space
+ignored \CD@dH}\CD@WE}\def\CD@FE{}\def\CD@d{\CD@YA{maps must never be enclosed
+in braces}\CD@OE}\def\CD@dH{outside diagram}\def\CD@FC{\string\HonV, \string
+\VonH\space and \string\HmeetV}\CD@rG\CD@ME{The way that horizontal and
+vertical arrows are terminated implicitly means\CD@uG that they cannot be
+mixed with each other or with \CD@FC.}\CD@rG\CD@XE{\string\pile\space is for
+parallel horizontal arrows; verticals can just be put together in\CD@uG a cell%
+. \CD@FC\space are not meaningful in a \string\pile.}\CD@rG\CD@RE{The
+horizontal maps must point to an object, not each other (I've put in\CD@uG one
+which you're unlikely to want). Use \string\pile\space if you want them
+parallel.}\CD@rG\CD@TE{Parallel horizontal arrows must be in separate layers
+of a \string\pile.}\CD@rG\CD@QE{Horizontal arrows may be used \CD@dH s, but
+must still be in maths.}\CD@rG\CD@WE{Vertical arrows, \CD@FC\space\CD@dH s don%
+'t know where\CD@uG where to terminate.}\CD@rG\CD@OE{This prevents them from
+stretching correctly.}\def\CD@YE#1{\CD@YA{"#1" inserted \ifx\CD@YF\empty
+before \CD@vJ\else between \CD@YF\ifx\CD@YF\CD@vJ s\else\space and \CD@vJ\fi
+\fi}}\count@=\year\multiply\count@12 \advance\count@\month\ifnum\count@>24103
+\message{because this one expired in July 2008!}\expandafter\endinput\fi\def
+\Horizontal@Map{\CD@nB{horizontal map}\CD@LC\CD@TJ\CD@qD}\def\CD@TJ{\CD@GB-%
+9999 \let\CD@ZD\CD@XD\ifincommdiag\else\CD@cJ\ifinpile\else\skip2\z@ plus 1.5%
+\CD@VK minus .5\CD@UK\skip4\skip2 \fi\fi\let\CD@kD\@fillh\CD@nF{fill@dot}{rf:%
+.}}\def\Vector@Map{\CD@HK4}\def\Slant@Map{\CD@HK{\CD@EF255\else6\fi}}\def
+\Slope@Map{\CD@HK\CD@OC}\def\CD@HK#1#2#3#4#5#6{\CD@LC\def\CD@WK{2}\def\CD@aK{%
+2}\def\CD@ZK{1}\def\CD@bK{1}\let\Horizontal@Map\CD@nI\def\CD@OG{#1}\def\CD@NI
+{\CD@U#2#3#4#5#6}}\def\CD@nI{\CD@TJ\CD@JB\let\CD@ZD\CD@TD\CD@qD}\CD@tG\CD@pE
+\CD@rA\CD@qA\CD@rA\def\cds@missives{\CD@rA}\def\CD@TD{\CD@vE\let\CD@OG\CD@OC
+\CD@x\CD@zE\CD@WF\fi\setbox0\hbox{\incommdiagfalse\CD@HI}\CD@pE\CD@aD\else
+\global\CD@YC\CD@bD\fi\ifvoid6 \ifvoid7 \CD@eE\fi\fi\CD@zE\else\CD@BD\global
+\CD@YC\let\CD@CG\CD@IH\CD@YD\fi\else\CD@NI\CD@MI\global\CD@YC\CD@YD\fi}\def
+\CD@LC{\begingroup\dimen1=\MapShortFall\dimen2=\CD@RG\dimen5=\MapShortFall
+\setbox3=\box\voidb@x\setbox6=\box\voidb@x\setbox7=\box\voidb@x\CD@pD
+\mathsurround\z@\skip2\z@ plus1fill minus 1000pt\skip4\skip2 \CD@TB}\CD@tG
+\CD@tE\CD@UB\CD@TB\def\CD@U#1#2#3#4#5{\let\CD@oJ#1\let\CD@iD#2\let\CD@QG#3%
+\let\CD@jD#4\let\CD@LE#5\CD@TB\ifx\CD@iD\CD@jD\CD@UB\fi}\def\CD@qD#1#2#3#4#5{%
+\CD@U#1#2#3#4#5\CD@tD}\def\Vertical@Map{\CD@pB433{vertical map}\CD@cD\CD@LC
+\CD@GB-9995 \let\CD@kD\@fillv\CD@nF{fill@dot}{df:.}\CD@qD}\def\break@args{%
+\def\CD@tD{\CD@ZD}\CD@ZD\endgroup\aftergroup\CD@FE}\def\CD@MJ{\setbox1=\CD@oJ
+\setbox5=\CD@LE\ifvoid3 \ifx\CD@QG\null\else\setbox3=\CD@QG\fi\fi\CD@@G2%
+\CD@iD\CD@@G4\CD@jD}\def\CD@pF#1{\ifvoid1\else\CD@oF1#1\fi\ifvoid2\else\CD@oF
+2#1\fi\ifvoid3\else\CD@oF3#1\fi\ifvoid4\else\CD@oF4#1\fi\ifvoid5\else\CD@oF5#%
+1\fi} \def\CD@oF#1#2{\setbox#1\vbox{\offinterlineskip\box#1\dimen@\prevdepth
+\advance\dimen@-#2\relax\setbox0\null\dp0\dimen@\ht0-\dimen@\box0}}\def\CD@@G
+#1#2{\ifx#2\CD@kD\setbox#1=\box\voidb@x\else\setbox#1=#2\def#2{\xleaders\box#%
+1}\fi}\CD@ZA\CD@BK{\string\HorizontalMap, \string\VerticalMap\space and
+\string\DiagonalMap\CD@uG are obsolete - use \CD@lG\space to pre-define maps}%
+\def\HorizontalMap#1#2#3#4#5{\CD@BK\CD@nB{old horizontal map}\CD@LC\CD@TJ\def
+\CD@oJ{\CD@UH{#1}}\CD@SH\CD@iD{#2}\def\CD@QG{\CD@UH{#3}}\CD@SH\CD@jD{#4}\def
+\CD@LE{\CD@UH{#5}}\CD@tD}\def\VerticalMap#1#2#3#4#5{\CD@BK\CD@pB433{vertical
+map}\CD@cD\CD@LC\CD@GB-9995 \let\CD@kD\@fillv\def\CD@oJ{\CD@GG{#1}}\CD@VH
+\CD@iD{#2}\def\CD@QG{\CD@GG{#3}}\CD@VH\CD@jD{#4}\def\CD@LE{\CD@GG{#5}}\CD@tD}%
+\def\DiagonalMap#1#2#3#4#5{\CD@BK\CD@LC\def\CD@OG{4}\let\CD@kD\CD@qK\let
+\CD@ZD\CD@YD\def\CD@WK{2}\def\CD@aK{2}\def\CD@ZK{1}\def\CD@bK{1}\def\CD@QG{%
+\CD@vF{#3}}\ifPositiveGradient\let\mv\raise\def\CD@oJ{\CD@vF{#5}}\def\CD@iD{%
+\CD@vF{#4}}\def\CD@jD{\CD@vF{#2}}\def\CD@LE{\CD@vF{#1}}\else\let\mv\lower\def
+\CD@oJ{\CD@vF{#1}}\def\CD@iD{\CD@vF{#2}}\def\CD@jD{\CD@vF{#4}}\def\CD@LE{%
+\CD@vF{#5}}\fi\CD@tD}\def\CD@aE{-}\def\CD@AD{\empty}\def\CD@SH{\CD@EG\CD@bE
+\CD@aE\@fillh}\def\CD@VH{\CD@EG\CD@MK\CD@KK\@fillv}\def\CD@EG#1#2#3#4#5{\def
+\CD@CH{#5}\ifx\CD@CH#2\let#4#3\else\let#4\null\ifx\CD@CH\empty\else\ifx\CD@CH
+\CD@AD\else\let#4\CD@CH\fi\fi\fi}\def\CD@UH#1{\hbox{\mathsurround\z@
+\offinterlineskip\def\CD@CH{#1}\ifx\CD@CH\empty\else\ifx\CD@CH\CD@AD\else
+\CD@k\mkern-1.5mu{\CD@CH}\mkern-1.5mu\CD@ND\fi\fi}}\def\CD@yD#1#2{\setbox#1=%
+\hbox\bgroup\setbox0=\hbox{\CD@k\labelstyle()\CD@ND}%% ASCII round brackets
+\setbox1=\null\ht1\ht0\dp1\dp0\box1 \kern.1\CD@zC\CD@k\bgroup\labelstyle
+\aftergroup\CD@LD\CD@xD}\def\CD@LD{\CD@ND\kern.1\CD@zC\egroup\CD@tD}\def
+\CD@xD{\futurelet\CD@EH\CD@mJ}\def\CD@mJ{%% qualifiers on label arguments
+\catcase\bgroup:\CD@v;\catcase\egroup:\missing@label;\catcase\space:\CD@TF;%
+\tokcase[:\CD@XF;%%]%ascii close square bracket
+\default:\CD@zJ;\endswitch}\def\CD@v{\let\CD@MD\CD@c\let\CD@CH}\def\CD@zJ#1{%
+\let\CD@UF\egroup{\let\actually@braces@missing@around@macro@in@label\CD@ZH
+\let\CD@MD\CD@xC\let\CD@UF\CD@VF#1%
+\actually@braces@missing@around@macro@in@label}\CD@UF}\def
+\actually@braces@missing@around@macro@in@label{\let\CD@CH=}\def\missing@label
+{\egroup\CD@YA{missing label}\CD@PE}\def\CD@xC{\egroup\missing@label}\outer
+\def\CD@ZH{}\def\CD@UF{}\def\CD@VF{\CD@wC\CD@UF}\def\CD@MD{}\def\CD@XF{\let
+\CD@N\CD@xD\get@square@arg\CD@AE}\CD@rG\CD@PE{The text which has just been
+read is not allowed within map labels.}\def\CD@c{\egroup\CD@YA{missing \CD@yC
+\space inserted after label}\CD@PE}\def\upper@label{\CD@oD\CD@yD6}\def
+\lower@label{\def\positional@{\CD@@A\break@args}\CD@yD7}\def\middle@label{%
+\CD@yD3}\CD@tG\CD@yE\CD@pD\CD@oD\def\CD@iF{\ifPositiveGradient\CD@tJ
+\expandafter\upper@label\else\expandafter\lower@label\fi}\def\CD@iI{%
+\ifPositiveGradient\CD@tJ\expandafter\lower@label\else\expandafter
+\upper@label\fi}\def\positional@{\CD@gB{labels as positional arguments are
+obsolete}\CD@yE\CD@tJ\expandafter\upper@label\else\expandafter\lower@label\fi
+-}\def\CD@tD{\futurelet\CD@EH\switch@arg}\def\eat@space{\afterassignment
+\CD@tD\let\CD@EH= }\def\CD@TF{\afterassignment\CD@xD\let\CD@EH= }\def\CD@BC{%
+\get@round@pair\CD@uD}\def\CD@uD#1#2{\def\CD@WK{#1}\def\CD@aK{#2}\CD@tD}\def
+\optional@{\let\CD@N\CD@tD\get@square@arg\CD@AE}\def\CD@JJ.{\CD@sC\CD@tD}\def
+\CD@sC{\let\CD@iD\fill@dot\let\CD@jD\fill@dot\def\CD@MI{\let\CD@iD\dfdot\let
+\CD@jD\dfdot}}\def\CD@MI{}\def\CD@@E#1,{\CD@nH#1,\begingroup\ifx\@name\CD@RD
+\CD@FF\aftergroup\CD@e\fi\aftergroup\CD@jC\else\expandafter\def\expandafter
+\CD@RF\expandafter{\csname\@name\endcsname}\expandafter\CD@vD\CD@RF\CD@KD\ifx
+\CD@RF\empty\aftergroup\CD@pC\expandafter\aftergroup\csname\CD@FB\@name
+\endcsname\expandafter\aftergroup\csname\CD@FB @\@name\endcsname\else\gdef
+\CD@GE{#1}\CD@gB{\string\relax\space inserted before `[\CD@GE'}\message{(I was
+trying to read this as a \CD@tA\ option.)}\aftergroup\CD@H\fi\fi\endgroup}%
+\def\CD@vD#1#2\CD@KD{\def\CD@RF{#2}}\def\CD@jC{\let\CD@CH\CD@N\let\CD@N\relax
+\CD@CH}\def\CD@H#1],{%% ASCII close square bracket
+\CD@jC\relax\def\CD@RF{#1}\ifx\CD@RF\empty\def\CD@RF{[\CD@GE]}%
+%% ASCII open and close square bracket
+\else\def\CD@RF{[\CD@GE,#1]}%% ASCII open and close square bracket
+\fi\CD@RF}\def\CD@pC#1#2{\ifx#2\CD@qK\ifx#1\CD@qK\CD@gB{option `\@name'
+undefined}\else#1\fi\else\CD@FF\expandafter#2\CD@GK\CD@PK\else\CD@QK\fi\fi
+\CD@DH}\CD@tG\CD@FF\CD@QK\CD@PK\def\CD@nH#1,{\CD@FF\ifx\CD@GK\CD@qK\CD@e\else
+\expandafter\CD@oH\CD@GK,#1,(,),(,)[]%
+%%ASCII 5commas two pairs round, pair square
+\fi\fi\CD@FF\else\CD@mH#1==,\fi}\def\CD@e{\CD@gB{option `\@name' needs (x,y)
+value}\CD@PK\let\@name\empty}\def\CD@mH#1=#2=#3,{\def\@name{#1}\def\CD@GK{#2}%
+\def\CD@RF{#3}\ifx\CD@RF\empty\let\CD@GK\CD@qK\fi}%
+%% ASCII 2commas 2pair round, pair square on next line
+\def\CD@oH#1(#2,#3)#4,(#5,#6)#7[]{\def\CD@GK{{#2}{#3}}\def\CD@RF{#1#4#5#6}%
+\ifx\CD@RF\empty\def\CD@RF{#7}\ifx\CD@RF\empty\CD@e\fi\else\CD@e\fi}\def
+\CD@FB{cds@}\let\CD@N\relax\def\CD@zD#1{\ifx\CD@GK\CD@qK\CD@gB{option `\@name
+' needs a value}\else#1\CD@GK\relax\fi}\def\CD@BE#1#2{\ifx\CD@GK\CD@qK#1#2%
+\relax\else#1\CD@GK\relax\fi}\def\cds@@showpair#1#2{\message{x=#1,y=#2}}\def
+\cds@@diagonalbase#1#2{\edef\CD@ZK{#1}\edef\CD@bK{#2}}\def\CD@DI#1{\def\CD@CH
+{#1}\CD@nF{@x}{cdps@#1}\ifx\CD@CH\empty\CD@f\CD@CH{cannot be used}\else\ifx
+\CD@CH\relax\CD@f\CD@CH{unknown}\else\let\CD@IK\@x\fi\fi}\def\CD@f#1#2{\CD@gB
+{PostScript translator `#1' #2}\CD@oK\let\cds@PS\empty\let\cds@noPS\empty}%
+\def\CD@PH{}\def\CD@PJ{\CD@fA\edef\CD@PH{\noexpand\CD@KB{\@name\space ignored
+within maths}}}\def\diagramstyle{\CD@cJ\let\CD@N\relax\CD@CF\CD@AE\CD@AE}\let
+\diagramsstyle\diagramstyle\CD@tG\CD@sE\CD@SB\CD@RB\CD@tG\CD@qE\CD@EB\CD@DB
+\CD@tG\CD@oE\CD@pA\CD@oA\CD@tG\CD@iE\CD@HA\CD@GA\CD@HA\CD@tG\CD@jE\CD@JA
+\CD@IA\CD@tG\CD@kE\CD@LA\CD@KA\CD@tG\CD@EF\CD@DK\CD@CK\CD@tG\CD@rE\CD@JB
+\CD@IB\CD@tG\CD@mE\CD@gA\CD@fA\CD@tG\CD@nE\CD@kA\CD@jA\CD@tG\CD@AF\CD@iG
+\CD@hG\CD@RC{cds@ }{}\CD@RC{cds@}{}\CD@RC{cds@1em}{\CellSize1\CD@zC}\CD@RC{%
+cds@1.5em}{\CellSize1.5\CD@zC}\CD@RC{cds@2em}{\CellSize2\CD@zC}\CD@RC{cds@2.5%
+em}{\CellSize2.5\CD@zC}\CD@RC{cds@3em}{\CellSize3\CD@zC}\CD@RC{cds@3.5em}{%
+\CellSize3.5\CD@zC}\CD@RC{cds@4em}{\CellSize4\CD@zC}\CD@RC{cds@4.5em}{%
+\CellSize4.5\CD@zC}\CD@RC{cds@5em}{\CellSize5\CD@zC}\CD@RC{cds@6em}{\CellSize
+6\CD@zC}\CD@RC{cds@7em}{\CellSize7\CD@zC}\CD@RC{cds@8em}{\CellSize8\CD@zC}%
+\def\cds@abut{\MapsAbut\dimen1\z@\dimen5\z@}\def\cds@alignlabels{\CD@IA\CD@KA
+}\def\cds@amstex{\ifincommdiag\CD@O\else\def\CD{\diagram[amstex]}%
+%%ascii square brackets []
+\fi\CD@T\catcode\lq\@\active}\def\cds@b{\let\CD@dB\CD@bB}\def\cds@balance{%
+\let\CD@hA\CD@AA}\let\cds@bottom\cds@b\def\cds@center{\cds@vcentre
+\cds@nobalance}\let\cds@centre\cds@center\def\cds@centerdisplay{\CD@HA\CD@PJ
+\cds@balance}\let\cds@centredisplay\cds@centerdisplay\def\cds@crab{\CD@BE
+\CD@DC{.5\PileSpacing}}\CD@RC{cds@crab-}{\CD@DC-.5\PileSpacing}\CD@RC{%
+cds@crab+}{\CD@DC.5\PileSpacing}\CD@RC{cds@crab++}{\CD@DC1.5\PileSpacing}%
+\CD@RC{cds@crab--}{\CD@DC-1.5\PileSpacing}\def\cds@defaultsize{\CD@BE{\let
+\CD@QC}{3em}\CD@NJ}\def\cds@displayoneliner{\CD@DB}\let\cds@dotted\CD@sC\def
+\cds@dpi{\CD@RJ{1truein}}\def\cds@dpm{\CD@RJ{100truecm}}\let\CD@XA\CD@qK\def
+\cds@eqno{\let\CD@XA\CD@GK\let\CD@EJ\empty}\def\cds@fixed{\CD@qA}\CD@tG\CD@fE
+\CD@J\CD@I\def\cds@flushleft{\CD@I\CD@GA\CD@PJ\cds@nobalance\CD@BE\CD@nA
+\CD@nA}\def\cds@gap{\CD@AJ\setbox3=\null\ht3=\CD@tI\dp3=\CD@sI\CD@BE{\wd3=}%
+\MapShortFall} \def\cds@grid{\ifx\CD@GK\CD@qK\let\h@grid\relax\let\v@grid
+\relax\else\CD@nF{h@grid}{cdgh@\CD@GK}\CD@nF{v@grid}{cdgv@\CD@GK}\ifx\h@grid
+\relax\CD@gB{unknown grid `\CD@GK'}\else\CD@WB\fi\fi}\let\h@grid\relax\let
+\v@grid\relax\def\cds@gridx{\ifx\CD@GK\CD@qK\else\cds@grid\fi\let\CD@CH
+\h@grid\let\h@grid\v@grid\let\v@grid\CD@CH}\def\cds@h{\CD@zD
+\DiagramCellHeight}\def\cds@hcenter{\let\CD@hA\CD@aA}\let\cds@hcentre
+\cds@hcenter\def\cds@heads{\CD@BE{\let\CD@sJ}\CD@sJ\CD@@J\CD@vE\else\ifx
+\CD@sJ\CD@eF\else\CD@MC\fi\fi}\let\cds@height\cds@h\let\cds@hmiddle
+\cds@balance\def\cds@htriangleheight{\CD@BE\DiagramCellHeight
+\DiagramCellHeight\DiagramCellWidth1.73205\DiagramCellHeight}\def
+\cds@htrianglewidth{\CD@BE\DiagramCellWidth\DiagramCellWidth
+\DiagramCellHeight.57735\DiagramCellWidth}\CD@tG\CD@zE\CD@eE\CD@dE\CD@eE\def
+\cds@hug{\CD@eE} \def\cds@inline{\CD@gA\let\CD@PH\empty}\def
+\cds@inlineoneliner{\CD@EB}\CD@RC{cds@l>}{\CD@zD{\let\CD@RG}\dimen2=\CD@RG}%
+\def\cds@labelstyle{\CD@zD{\let\labelstyle}}\def\cds@landscape{\CD@kA}\def
+\cds@large{\CellSize5\CD@zC}\let\CD@EJ\empty\def\CD@FJ{\refstepcounter{%
+equation}\def\CD@XA{\hbox{\@eqnnum}}}\def\cds@LaTeXeqno{\let\CD@EJ\CD@FJ}\def
+\cds@lefteqno{\CD@pA}\def\cds@leftflush{\cds@flushleft\CD@J}\def
+\cds@leftshortfall{\CD@zD{\dimen1 }}\def\cds@lowershortfall{%
+\ifPositiveGradient\cds@leftshortfall\else\cds@rightshortfall\fi}\def
+\cds@loose{\CD@VB}\def\cds@midhshaft{\CD@JA}\def\cds@midshaft{\CD@JA}\def
+\cds@midvshaft{\CD@LA}\def\cds@moreoptions{\CD@@A}\let\cds@nobalance
+\cds@hcenter\def\cds@nohcheck{\CD@HH}\def\cds@nohug{\CD@dE} \def
+\cds@nooptions{\def\CD@aC{\CD@WD}}\let\cds@noorigin\cds@nobalance\def
+\cds@nopixel{\CD@@I4\CD@XH\CD@cJ}\def\cds@UO{\CD@oK\global\let\CD@n\empty}%
+\def\cds@UglyObsolete{\cds@UO\let\cds@PS\empty\let\cds@noPS\empty}\ifnum\year
+<2008 \let\cds@noPostScript\UglyObsolete\let\cds@noPS\cds@UO\else\def
+\cds@noPS{\CD@gB{option `noPS' no longer recognised}}\def\cds@noPS{\CD@gB{%
+option `noPostScript' no longer recognised}}\fi\def\cds@notextflow{\CD@RB}%
+\def\cds@noPS{\CD@oK\global\let\CD@n\empty}\def\cds@noTPIC{\CD@CK}\def
+\cds@objectstyle{\CD@zD{\let\objectstyle}}\def\cds@origin{\let\CD@hA\CD@iB}%
+\def\cds@p{\CD@zD\PileSpacing}\let\cds@pilespacing\cds@p\def\cds@pixelsize{%
+\CD@zD\CD@@I\CD@gI}\def\cds@portrait{\CD@jA}\def\cds@PostScript{\CD@nK\global
+\let\CD@n\empty\CD@BE\CD@DI\empty}\def\cds@PS{\CD@nK\global\let\CD@n\empty}%
+\CD@GF\CD@n{\typeout{\CD@tA: try the PostScript option for better results}}%
+\def\cds@repositionpullbacks{\let\make@pbk\CD@fH\let\CD@qH\CD@pH}\def
+\cds@righteqno{\CD@oA}\def\cds@rightshortfall{\CD@zD{\dimen5 }}\def
+\cds@ruleaxis{\CD@zD{\let\axisheight}}\def\cds@cmex{\let\CD@GG\CD@sB\let
+\CD@QJ\CD@CJ}\def\cds@s{\cds@height\DiagramCellWidth\DiagramCellHeight}\def
+\cds@scriptlabels{\let\labelstyle\scriptstyle}\def\cds@shortfall{\CD@zD
+\MapShortFall\dimen1\MapShortFall\dimen5\MapShortFall}\def\cds@showfirstpass{%
+\CD@BE{\let\CD@nD}\z@}\def\cds@silent{\def\CD@KB##1{}\def\CD@gB##1{}}\let
+\cds@size\cds@s\def\cds@small{\CellSize2\CD@zC}\def\cds@snake{\CD@BE\CD@eJ\z@
+}\def\cds@t{\let\CD@dB\CD@fB}\def\cds@textflow{\CD@SB\CD@PJ}\def\cds@thick{%
+\let\CD@rF\tenlnw\CD@LF\CD@NC\CD@BE\MapBreadth{2\CD@LF}\CD@@J}\def\cds@thin{%
+\let\CD@rF\tenln\CD@BE\MapBreadth{\CD@NC}\CD@@J}\def\cds@tight{\CD@WB}\let
+\cds@top\cds@t\def\cds@TPIC{\CD@DK}\def\cds@uppershortfall{%
+\ifPositiveGradient\cds@rightshortfall\else\cds@leftshortfall\fi}\def
+\cds@vcenter{\let\CD@dB\CD@cB}\let\cds@vcentre\cds@vcenter\def
+\cds@vtriangleheight{\CD@BE\DiagramCellHeight\DiagramCellHeight
+\DiagramCellWidth.577035\DiagramCellHeight}\def\cds@vtrianglewidth{\CD@BE
+\DiagramCellWidth\DiagramCellWidth\DiagramCellHeight1.73205\DiagramCellWidth}%
+\def\cds@vmiddle{\let\CD@dB\CD@eB}\def\cds@w{\CD@zD\DiagramCellWidth}\let
+\cds@width\cds@w\def\diagram{\relax\protect\CD@bC}\def\enddiagram{\protect
+\CD@SG}\def\CD@bC{\CD@g\CD@uI\incommdiagtrue\edef\CD@wI{\the\CD@NB}\global
+\CD@NB\z@\boxmaxdepth\maxdimen\everycr{}\everymath{}\everyhbox{}\ifx
+\pdfoutput\CD@qK\else\ifx\pdfoutput\relax\else\ifnum\pdfoutput>\z@\CD@pK\fi
+\fi\fi\CD@aC}\def\CD@aC{\CD@y\let\CD@N\CD@ZC\CD@CF\CD@AE\CD@WD}\def\CD@ZC{%
+\CD@gE\expandafter\CD@aC\else\expandafter\CD@WD\fi}\def\CD@WD{\let\CD@EH
+\relax\CD@nE\CD@vE\else\CD@hK\else\CD@KB{landscape ignored without PostScript%
+}\CD@jA\fi\fi\fi\CD@EJ\setbox2=\vbox\bgroup\CD@JF\CD@VD}\def\CD@cH{\CD@nE
+\CD@fB\else\CD@dB\fi\CD@hA\nointerlineskip\setbox0=\null\ht0-\CD@pI\dp0\CD@pI
+\wd0\CD@kI\box0 \global\CD@QA\CD@kF\global\CD@yA\CD@XB\ifx\CD@NK\CD@qK\global
+\CD@RA\CD@kF\else\global\CD@RA\CD@NK\fi\egroup\CD@zF\CD@nE\setbox2=\hbox to%
+\dp2{\vrule height\wd2 depth\CD@QA width\z@\global\CD@QA\ht2\ht2\z@\dp2\z@\wd
+2\z@\CD@hK\pdfliteral{q 0 1 -1 0 0 0 cm}\else\global\CD@iG\CD@IK{0 1 bturn}%
+\fi\box2\CD@gK\hss}\CD@DB\fi\ifnum\CD@yA=1 \else\CD@DB\fi\global\@ignorefalse
+\CD@mE\leavevmode\fi\ifvmode\CD@TA\else\ifmmode\CD@PH\CD@GI\else\CD@qE\CD@gA
+\fi\ifinner\CD@gA\fi\CD@mE\CD@GI\else\CD@sE\CD@QB\else\CD@TA\fi\fi\fi\fi
+\CD@dD}\def\CD@dD{\global\CD@NB\CD@wI\relax\CD@xE\global\CD@ID\else
+\aftergroup\CD@mC\fi\if@ignore\aftergroup\ignorespaces\fi\CD@wC\ignorespaces}%
+\def\CD@fB{\advance\CD@pI\dimen1\relax}\def\CD@eB{\advance\CD@pI.5\dimen1%
+\relax}\def\CD@bB{}\def\CD@cB{\CD@fB\advance\CD@pI\CD@YB\divide\CD@pI2
+\advance\CD@pI-\axisheight\relax}\def\CD@aA{}\def\CD@iB{\CD@kF\z@}\def\CD@AA{%
+\ifdim\dimen2>\CD@kF\CD@kF\dimen2 \else\dimen2\CD@kF\CD@kI\dimen0 \advance
+\CD@kI\dimen2 \fi}\def\CD@QB{\skip0\z@\relax\loop\skip1\lastskip\ifdim\skip1>%
+\z@\unskip\advance\skip0\skip1 \repeat\vadjust{\prevdepth\dp\strutbox\penalty
+\predisplaypenalty\vskip\abovedisplayskip\CD@UA\penalty\postdisplaypenalty
+\vskip\belowdisplayskip}\ifdim\skip0=\z@\else\hskip\skip0 \global\@ignoretrue
+\fi}\def\CD@TA{\CD@LG\kern-\displayindent\CD@UA\CD@LG\global\@ignoretrue}\def
+\CD@UA{\hbox to\hsize{\CD@fE\ifdim\CD@RA=\z@\else\advance\CD@QA-\CD@RA\setbox
+2=\hbox{\kern\CD@RA\box2}\fi\fi\setbox1=\hbox{\ifx\CD@XA\CD@qK\else\CD@k
+\CD@XA\CD@ND\fi}\CD@oE\CD@iE\else\advance\CD@QA\wd1 \fi\wd1\z@\box1 \fi\dimen
+0\wd2 \advance\dimen0\wd1 \advance\dimen0-\hsize\ifdim\dimen0>-\CD@nA\CD@HA
+\fi\advance\dimen0\CD@QA\ifdim\dimen0>\z@\CD@KB{wider than the page by \the
+\dimen0 }\CD@HA\fi\CD@iE\hss\else\CD@V\CD@QA\CD@nA\fi\CD@GI\hss\kern-\wd1\box
+1 }}\def\CD@GI{\CD@AF\CD@@F\else\CD@SC\global\CD@hG\fi\fi\kern\CD@QA\box2 }%
+\CD@tG\CD@wE\CD@YC\CD@XC\def\CD@JF{\CD@cJ\ifdim\DiagramCellHeight=-\maxdimen
+\DiagramCellHeight\CD@QC\fi\ifdim\DiagramCellWidth=-\maxdimen
+\DiagramCellWidth\CD@QC\fi\global\CD@XC\CD@IF\let\CD@FE\empty\let\CD@z\CD@Q
+\let\overprint\CD@eH\let\CD@s\CD@rJ\let\enddiagram\CD@ED\let\\\CD@cC\let\par
+\CD@jH\let\CD@MD\empty\let\switch@arg\CD@PB\let\shift\CD@iA\baselineskip
+\DiagramCellHeight\lineskip\z@\lineskiplimit\z@\mathsurround\z@\tabskip\z@
+\CD@OB}\def\CD@VD{\penalty-123 \begingroup\CD@jA\aftergroup\CD@K\halign
+\bgroup\global\advance\CD@NB1 \vadjust{\penalty1}\global\CD@FA\z@\CD@OB\CD@j#%
+#\CD@DD\CD@Q\CD@Q\CD@OI\CD@j##\CD@DD\cr}\def\CD@ED{\CD@MD\CD@GD\crcr\egroup
+\global\CD@JD\endgroup}\def\CD@j{\global\advance\CD@FA1 \futurelet\CD@EH\CD@i
+}\def\CD@i{\ifx\CD@EH\CD@DD\CD@tJ\hskip1sp plus 1fil \relax\let\CD@DD\relax
+\CD@vI\else\hfil\CD@k\objectstyle\let\CD@FE\CD@d\fi}\def\CD@DD{\CD@MD\relax
+\CD@yI\CD@vI\global\CD@QA\CD@iA\penalty-9993 \CD@ND\hfil\null\kern-2\CD@QA
+\null}\def\CD@cC{\cr}\def\across#1{\span\omit\mscount=#1 \global\advance
+\CD@FA\mscount\global\advance\CD@FA\m@ne\CD@sF\ifnum\mscount>2 \CD@fJ\repeat
+\ignorespaces}\def\CD@fJ{\relax\span\omit\advance\mscount\m@ne}\def\CD@qJ{%
+\ifincommdiag\ifx\CD@iD\@fillh\ifx\CD@jD\@fillh\ifdim\dimen3>\z@\else\ifdim
+\dimen2>93\CD@@I\ifdim\dimen2>18\p@\ifdim\CD@LF>\z@\count@\CD@bJ\advance
+\count@\m@ne\ifnum\count@<\z@\count@20\let\CD@aJ\CD@uJ\fi\xdef\CD@bJ{\the
+\count@}\fi\fi\fi\fi\fi\fi\fi}\def\CD@cG#1{\vrule\horizhtdp width#1\dimen@
+\kern2\dimen@}\def\CD@uJ{\rlap{\dimen@\CD@@I\CD@V\dimen@{.182\p@}\CD@zH
+\dimen@\advance\CD@tI\dimen@\CD@cG0\CD@cG0\CD@cG2\CD@cG6\CD@cG6\CD@cG2\CD@cG0%
+\CD@cG0\CD@cG2\CD@cG6\CD@cG0\CD@cG0\CD@cG2\CD@cG2\CD@cG6\CD@cG0\CD@cG0\CD@cG2%
+\CD@cG6\CD@cG2\CD@cG2\CD@cG0\CD@cG0}}\def\CD@bJ{10}\def\CD@aJ{}\def\CD@XD{%
+\CD@gE\CD@TB\fi\CD@x\CD@WF\CD@HI}\def\CD@x{\CD@QJ\CD@DC\CD@MJ\ifdim\CD@DC=\z@
+\else\CD@pF\CD@DC\fi\ifvoid3 \setbox3=\null\ht3\CD@tI\dp3\CD@sI\else\CD@V{\ht
+3}\CD@tI\CD@V{\dp3}\CD@sI\fi\dimen3=.5\wd3 \ifdim\dimen3=\z@\CD@tE\else\dimen
+3-\CD@XH\fi\else\CD@TB\fi\CD@V{\dimen2}{\wd7}\CD@V{\dimen2}{\wd6}\CD@qJ
+\advance\dimen2-2\dimen3 \dimen4.5\dimen2 \dimen2\dimen4 \advance\dimen2%
+\CD@eJ\advance\dimen4-\CD@eJ\advance\dimen2-\wd1 \advance\dimen4-\wd5 \ifvoid
+2 \else\CD@V{\ht3}{\ht2}\CD@V{\dp3}{\dp2}\CD@V{\dimen2}{\wd2}\fi\ifvoid4 \else
+\CD@V{\ht3}{\ht4}\CD@V{\dp3}{\dp4}\CD@V{\dimen4}{\wd4}\fi\advance\skip2\dimen
+2 \advance\skip4\dimen4 \CD@tE\advance\skip2\skip4 \dimen0\dimen5 \advance
+\dimen0\wd5 \skip3-\skip4 \advance\skip3-\dimen0 \let\CD@jD\empty\else\skip3%
+\z@\relax\dimen0\z@\fi}\def\CD@WF{\offinterlineskip\lineskip.2\CD@zC\ifvoid6
+\else\setbox3=\vbox{\hbox to2\dimen3{\hss\box6\hss}\box3}\fi\ifvoid7 \else
+\setbox3=\vtop{\box3 \hbox to2\dimen3{\hss\box7\hss}}\fi}\def\CD@HI{\kern
+\dimen1 \box1 \CD@aJ\CD@iD\hskip\skip2 \kern\dimen0 \ifincommdiag\CD@jE
+\penalty1\fi\kern\dimen3 \penalty\CD@GB\hskip\skip3 \null\kern-\dimen3 \else
+\hskip\skip3 \fi\box3 \CD@jD\hskip\skip4 \box5 \kern\dimen5}\def\CD@MF{\ifnum
+\CD@LH>\CD@TC\CD@V{\dimen1}\objectheight\CD@V{\dimen5}\objectheight\else\CD@V
+{\dimen1}\objectwidth\CD@V{\dimen5}\objectwidth\fi}\def\CD@Y{\begingroup
+\ifdim\dimen7=\z@\kern\dimen8 \else\ifdim\dimen6=\z@\kern\dimen9 \else\dimen5%
+\dimen6 \dimen6\dimen9 \CD@KJ\dimen4\dimen2 \CD@dG{\dimen4}\dimen6\dimen5
+\dimen7\dimen8 \CD@KJ\CD@iC{\dimen2}\ifdim\dimen2<\dimen4 \kern\dimen2 \else
+\kern\dimen4 \fi\fi\fi\endgroup}\def\CD@jJ{\CD@JI\setbox\z@\hbox{\lower
+\axisheight\hbox to\dimen2{\CD@DF\ifPositiveGradient\dimen8\ht\CD@MH\dimen9%
+\CD@mI\else\dimen8\dp3 \dimen9\dimen1 \fi\else\dimen8 \ifPositiveGradient
+\objectheight\else\z@\fi\dimen9\objectwidth\fi\advance\dimen8
+\ifPositiveGradient-\fi\axisheight\CD@Y\unhbox\z@\CD@DF\ifPositiveGradient
+\dimen8\dp3 \dimen9\dimen0 \else\dimen8\ht\CD@MH\dimen9\CD@mF\fi\else\dimen8
+\ifPositiveGradient\z@\else\objectheight\fi\dimen9\objectwidth\fi\advance
+\dimen8 \ifPositiveGradient\else-\fi\axisheight\CD@Y}}}\def\CD@bD{\dimen6
+\CD@aK\DiagramCellHeight\dimen7 \CD@WK\DiagramCellWidth\CD@jJ
+\ifPositiveGradient\advance\dimen7-\CD@ZK\DiagramCellWidth\else\dimen7 \CD@ZK
+\DiagramCellWidth\dimen6\z@\fi\advance\dimen6-\CD@bK\DiagramCellHeight\CD@mK
+\setbox0=\rlap{\kern-\dimen7 \lower\dimen6\box\z@}\ht0\z@\dp0\z@\raise
+\axisheight\box0 }\def\CD@mK{\setbox0\hbox{\ht\z@\z@\dp\z@\z@\wd\z@\z@\CD@hK
+\expandafter\pdfliteral{q \CD@eK\space\CD@lK\space\CD@kK\space\CD@eK\space0 0
+cm}\else\global\CD@iG\CD@eD{\the\CD@TC\space\ifPositiveGradient\else-\fi\the
+\CD@LH\space bturn}\fi\box\z@\CD@gK}}\def\CD@vB{\advance\CD@hF-\CD@mI\CD@wJ
+\CD@hF\advance\CD@wJ\CD@hI\ifvoid\CD@sH\ifdim\CD@wJ<.1em\ifnum\CD@gD=\@m\else
+\CD@aG h\CD@wJ<.1em:objects overprint:\CD@FA\CD@gD\fi\fi\else\ifhbox\CD@sH
+\CD@SK\else\CD@TK\fi\advance\CD@wJ\CD@mI\CD@bH{-\CD@mI}{\box\CD@sH}{\CD@wJ}%
+\z@\fi\CD@hF-\CD@mF\CD@gD\CD@FA\CD@hI\z@}\def\CD@SK{\setbox\CD@sH=\hbox{%
+\unhbox\CD@sH\unskip\unpenalty}\setbox\CD@tH=\hbox{\unhbox\CD@tH\unskip
+\unpenalty}\setbox\CD@sH=\hbox to\CD@wJ{\CD@OA\wd\CD@sH\unhbox\CD@sH\CD@PA
+\lastkern\unkern\ifdim\CD@PA=\z@\CD@UB\advance\CD@OA-\wd\CD@tH\else\CD@TB\fi
+\ifnum\lastpenalty=\z@\else\CD@JA\unpenalty\fi\kern\CD@PA\ifdim\CD@hF<\CD@OA
+\CD@JA\fi\ifdim\CD@hI<\wd\CD@tH\CD@JA\fi\CD@jE\CD@hI\CD@wJ\advance\CD@hI-%
+\CD@OA\advance\CD@hI\wd\CD@tH\ifdim\CD@hI<2\wd\CD@tH\CD@aG h\CD@hI<2\wd\CD@tH
+:arrow too short:\CD@FA\CD@gD\fi\divide\CD@hI\tw@\CD@hF\CD@wJ\advance\CD@hF-%
+\CD@hI\fi\CD@tE\kern-\CD@hI\fi\hbox to\CD@hI{\unhbox\CD@tH}\CD@HG}}\CD@tG
+\ifinpile\inpiletrue\inpilefalse\inpilefalse\def\pile{\protect\CD@UJ\protect
+\CD@uH}\def\CD@uH#1{\CD@l#1\CD@QD}\def\CD@UJ{\CD@nB{pile}\setbox0=\vtop
+\bgroup\aftergroup\CD@lD\inpiletrue\let\CD@FE\empty\let\pile\CD@KF\let\CD@QD
+\CD@PD\let\CD@GD\CD@FD\CD@yH\baselineskip.5\PileSpacing\lineskip.1\CD@zC
+\relax\lineskiplimit\lineskip\mathsurround\z@\tabskip\z@\let\\\CD@wH}\def
+\CD@l{\CD@DE\CD@YF\empty\halign\bgroup\hfil\CD@k\let\CD@FE\CD@d\let\\\CD@vH##%
+\CD@MD\CD@ND\hfil\CD@Q\CD@R##\cr}\CD@rG\CD@NE{pile only allows one column.}%
+\CD@rG\CD@UE{you left it out!}\def\CD@R{\CD@QD\CD@Q\relax\CD@YA{missing \CD@yC
+\space inserted after \string\pile}\CD@NE}\def\CD@PD{\CD@MD\crcr\egroup
+\egroup}\def\CD@GD{\CD@MD}\def\CD@FD{\CD@MD\relax\CD@QD\CD@YA{missing \CD@yC
+\space inserted between \string\pile\space and \CD@HD}\CD@UE}\def\CD@QD{%
+\CD@MD}\def\CD@lD{\vbox{\dimen1\dp0 \unvbox0 \setbox0=\lastbox\advance\dimen1%
+\dp0 \nointerlineskip\box0 \nointerlineskip\setbox0=\null\dp0.5\dimen1\ht0-%
+\dp0 \box0}\ifincommdiag\CD@tJ\penalty-9998 \fi\xdef\CD@YF{pile}}\def\CD@vH{%
+\cr}\def\CD@wH{\noalign{\skip@\prevdepth\advance\skip@-\baselineskip
+\prevdepth\skip@}}\def\CD@KF#1{#1}\def\CD@TK{\setbox\CD@sH=\vbox{\unvbox
+\CD@sH\setbox1=\lastbox\setbox0=\box\voidb@x\CD@tF\setbox\CD@sH=\lastbox
+\ifhbox\CD@sH\CD@rC\repeat\unvbox0 \global\CD@QA\CD@ZE}\CD@ZE\CD@QA}\def
+\CD@rC{\CD@jE\setbox\CD@sH=\hbox{\unhbox\CD@sH\unskip\setbox\CD@sH=\lastbox
+\unskip\unhbox\CD@sH}\ifdim\CD@wJ<\wd\CD@sH\CD@aG h\CD@wJ<\wd\CD@sH:arrow in
+pile too short:\CD@FA\CD@gD\else\setbox\CD@sH=\hbox to\CD@wJ{\unhbox\CD@sH}%
+\fi\else\CD@gJ\fi\setbox0=\vbox{\box\CD@sH\nointerlineskip\ifvoid0 \CD@tJ\box
+1 \else\vskip\skip0 \unvbox0 \fi}\skip0=\lastskip\unskip}\def\CD@gJ{\penalty7
+\noindent\unhbox\CD@sH\unskip\setbox\CD@sH=\lastbox\unskip\unhbox\CD@sH
+\endgraf\setbox\CD@tH=\lastbox\unskip\setbox\CD@tH=\hbox{\CD@JG\unhbox\CD@tH
+\unskip\unskip\unpenalty}\ifcase\prevgraf\cd@shouldnt P\or\ifdim\CD@wJ<\wd
+\CD@tH\CD@aG h\CD@wJ<\wd\CD@sH:object in pile too wide:\CD@FA\CD@gD\setbox
+\CD@sH=\hbox to\CD@wJ{\hss\unhbox\CD@tH\hss}\else\setbox\CD@sH=\hbox to\CD@wJ
+{\hss\kern\CD@hF\unhbox\CD@tH\kern\CD@hI\hss}\fi\or\setbox\CD@sH=\lastbox
+\unskip\CD@SK\else\cd@shouldnt Q\fi\unskip\unpenalty}\def\CD@cD{\CD@MJ\ifvoid
+3 \setbox3=\null\ht3\axisheight\dp3-\ht3 \dimen3.5\CD@LF\else\dimen4\dp3
+\dimen3.5\wd3 \setbox3=\CD@GG{\box3}\dp3\dimen4 \ifdim\ht3=-\dp3 \else\CD@TB
+\fi\fi\dimen0\dimen3 \advance\dimen0-.5\CD@LF\setbox0\null\ht0\ht3\dp0\dp3\wd
+0\wd3 \ifvoid6\else\setbox6\hbox{\unhbox6\kern\dimen0\kern2pt}\dimen0\wd6 \fi
+\ifvoid7\else\setbox7\hbox{\kern2pt\kern\dimen3\unhbox7}\dimen3\wd7 \fi
+\setbox3\hbox{\ifvoid6\else\kern-\dimen0\unhbox6\fi\unhbox3 \ifvoid7\else
+\unhbox7\kern-\dimen3\fi}\ht3\ht0\dp3\dp0\wd3\wd0 \CD@tE\dimen4=\ht\CD@MH
+\advance\dimen4\dp5 \advance\dimen4\dimen1 \let\CD@jD\empty\else\dimen4\ht3
+\fi\setbox0\null\ht0\dimen4 \offinterlineskip\setbox8=\vbox spread2ex{\kern
+\dimen5 \box1 \CD@iD\vfill\CD@tE\else\kern\CD@eJ\fi\box0}\ht8=\z@\setbox9=%
+\vtop spread2ex{\kern-\ht3 \kern-\CD@eJ\box3 \CD@jD\vfill\box5 \kern\dimen1}%
+\dp9=\z@\hskip\dimen0plus.0001fil \box9 \kern-\CD@LF\box8 \CD@kE\penalty2 \fi
+\CD@tE\penalty1 \fi\kern\PileSpacing\kern-\PileSpacing\kern-.5\CD@LF\penalty
+\CD@GB\null\kern\dimen3}\def\CD@cI{\ifhbox\CD@VA\CD@KB{clashing verticals}\ht
+\CD@MH.5\dp\CD@VA\dp\CD@MH-\ht5 \CD@yB\ht\CD@MH\z@\dp\CD@MH\z@\fi\dimen1\dp
+\CD@VA\CD@xA\prevgraf\unvbox\CD@VA\CD@wA\lastpenalty\unpenalty\setbox\CD@VA=%
+\null\setbox\CD@lI=\hbox{\CD@JG\unhbox\CD@lI\unskip\unpenalty\dimen0\lastkern
+\unkern\unkern\unkern\kern\dimen0 \CD@HG}\setbox\CD@lF=\hbox{\unhbox\CD@lF
+\dimen0\lastkern\unkern\unkern\global\CD@QA\lastkern\unkern\kern\dimen0 }%
+\CD@tF\ifnum\CD@xA>4 \CD@zI\repeat\unskip\unskip\advance\CD@mF.5\wd\CD@VA
+\advance\CD@mF\wd\CD@lF\advance\CD@mI.5\wd\CD@VA\advance\CD@mI\wd\CD@lI\ifnum
+\CD@FA=\CD@lA\CD@OA.5\wd\CD@VA\edef\CD@NK{\the\CD@OA}\fi\setbox\CD@VA=\hbox{%
+\kern-\CD@mF\box\CD@lF\unhbox\CD@VA\box\CD@lI\kern-\CD@mI\penalty\CD@wA
+\penalty\CD@NB}\ht\CD@VA\dimen1 \dp\CD@VA\z@\wd\CD@VA\CD@tB\CD@vB}\def\CD@zI{%
+\ifdim\wd\CD@lF<\CD@QA\setbox\CD@lF=\hbox to\CD@QA{\CD@JG\unhbox\CD@lF}\fi
+\advance\CD@xA\m@ne\setbox\CD@VA=\hbox{\box\CD@lF\unhbox\CD@VA}\unskip\setbox
+\CD@lF=\lastbox\setbox\CD@lF=\hbox{\unhbox\CD@lF\unskip\unpenalty\dimen0%
+\lastkern\unkern\unkern\global\CD@QA\lastkern\unkern\kern\dimen0 }}\def\CD@yB
+{\dimen1\dp\CD@VA\ifhbox\CD@VA\CD@xB\else\CD@zB\fi\setbox\CD@VA=\vbox{%
+\penalty\CD@NB}\dp\CD@VA-\dp\CD@MH\wd\CD@VA\CD@tB}\def\CD@zB{\unvbox\CD@VA
+\CD@wA\lastpenalty\unpenalty\ifdim\dimen1<\ht\CD@MH\CD@aG v\dimen1<\ht\CD@MH:%
+rows overprint:\CD@NB\CD@wA\fi}\def\CD@xB{\dimen0=\ht\CD@VA\setbox\CD@VA=%
+\hbox\bgroup\advance\dimen1-\ht\CD@MH\unhbox\CD@VA\CD@xA\lastpenalty
+\unpenalty\CD@wA\lastpenalty\unpenalty\global\CD@RA-\lastkern\unkern\setbox0=%
+\lastbox\CD@tF\setbox\CD@VA=\hbox{\box0\unhbox\CD@VA}\setbox0=\lastbox\ifhbox
+0 \CD@kJ\repeat\global\CD@SA-\lastkern\unkern\global\CD@QA\CD@JK\unhbox\CD@VA
+\egroup\CD@JK\CD@QA\CD@bH{\CD@SA}{\box\CD@VA}{\CD@RA}{\dimen1}}\def\CD@kJ{%
+\setbox0=\hbox to\wd0\bgroup\unhbox0 \unskip\unpenalty\dimen7\lastkern\unkern
+\ifnum\lastpenalty=1 \unpenalty\CD@UB\else\CD@TB\fi\ifnum\lastpenalty=2
+\unpenalty\dimen2.5\dimen0\advance\dimen2-.5\dimen1\advance\dimen2-%
+\axisheight\else\dimen2\z@\fi\setbox0=\lastbox\dimen6\lastkern\unkern\setbox1%
+=\lastbox\setbox0=\vbox{\unvbox0 \CD@tE\kern-\dimen1 \else\ifdim\dimen2=\z@
+\else\kern\dimen2 \fi\fi}\ifdim\dimen0<\ht0 \CD@aG v\dimen0<\ht0:upper part of
+vertical too short:{\CD@tE\CD@NB\else\CD@wA\fi}\CD@xA\else\setbox0=\vbox to%
+\dimen0{\unvbox0}\fi\setbox1=\vtop{\unvbox1}\ifdim\dimen1<\dp1 \CD@aG v\dimen
+1<\dp1:lower part of vertical too short:\CD@NB\CD@wA\else\setbox1=\vtop to%
+\dimen1{\ifdim\dimen2=\z@\else\kern-\dimen2 \fi\unvbox1 }\fi\box1 \kern\dimen
+6 \box0 \kern\dimen7 \CD@HG\global\CD@QA\CD@JK\egroup\CD@JK\CD@QA\relax}%
+\countdef\CD@u=14 \newcount\CD@CA\newcount\CD@XB\newcount\CD@NB\let\CD@LB
+\insc@unt\newcount\CD@FA\newcount\CD@lA\let\CD@mA\CD@XB\newcount\CD@MB\CD@tG
+\CD@DF\CD@bI\CD@aI\CD@aI\def\CD@nD{-1}\def\CD@K{\ifnum\CD@nD<\z@\else
+\begingroup\scrollmode\showboxdepth\CD@nD\showboxbreadth\maxdimen\showlists
+\endgroup\fi\CD@bI\CD@zF\CD@CA=\CD@u\advance\CD@CA1 \CD@XB=\CD@CA\ifnum\CD@NB
+=1 \CD@JA\fi\advance\CD@XB\CD@NB\dimen1\z@\skip0\z@\count@=\insc@unt\advance
+\count@\CD@u\divide\count@2 \ifnum\CD@XB>\count@\CD@KB{The diagram has too
+many rows! It can't be reformatted.}\else\CD@NG\CD@WI\fi\CD@cH}\def\CD@NG{%
+\CD@NB\CD@CA\CD@uF\ifnum\CD@NB<\CD@XB\setbox\CD@NB\box\voidb@x\advance\CD@NB1%
+\relax\repeat\CD@NB\CD@CA\skip\z@\z@\CD@uF\CD@GB\lastpenalty\unpenalty\ifnum
+\CD@GB>\z@\CD@KE\repeat\ifnum\CD@GB=-123 \CD@tJ\unpenalty\else\cd@shouldnt D%
+\fi\ifx\v@grid\relax\else\CD@NB\CD@XB\advance\CD@NB\m@ne\expandafter\CD@VJ
+\v@grid\fi\CD@MB\CD@mA\CD@tB\z@\CD@XG\ifx\h@grid\relax\else\expandafter\CD@LJ
+\h@grid\fi\count@\CD@XB\advance\count@\m@ne\CD@YB\ht\count@}\def\CD@KE{%
+\ifcase\CD@GB\or\CD@MG\else\CD@uA-\lastpenalty\unpenalty\CD@vA\lastpenalty
+\unpenalty\setbox0=\lastbox\CD@WG\fi\CD@wD}\def\CD@wD{\skip1\lastskip\unskip
+\advance\skip0\skip1 \ifdim\skip1=\z@\else\expandafter\CD@wD\fi}\def\CD@MG{%
+\setbox0=\lastbox\CD@pI\dp0 \advance\CD@pI\skip\z@\skip\z@\z@\advance\CD@NF
+\CD@pI\CD@uE\ifnum\CD@NB>\CD@CA\CD@NF\DiagramCellHeight\CD@pI\CD@NF\advance
+\CD@pI-\CD@qI\fi\fi\CD@qI\ht0 \CD@NF\CD@qI\setbox\CD@NB\hbox{\unhbox\CD@NB
+\unhbox0}\dp\CD@NB\CD@pI\ht\CD@NB\CD@qI\advance\CD@NB1 }\def\CD@WG{\ifnum
+\CD@uA<\z@\advance\CD@uA\CD@XB\ifnum\CD@uA<\CD@CA\CD@UG\else\CD@OA\dp\CD@uA
+\CD@PA\ht\CD@uA\setbox\CD@uA\hbox{\box\z@\penalty\CD@vA\penalty\CD@GB\unhbox
+\CD@uA}\dp\CD@uA\CD@OA\ht\CD@uA\CD@PA\fi\else\CD@UG\fi}\def\CD@UG{\CD@KB{%
+diagonal goes outside diagram (lost)}}\def\CD@fI{\advance\CD@uA\CD@XB\ifnum
+\CD@uA<\CD@CA\CD@UG\else\ifnum\CD@uA=\CD@NB\CD@VG\else\ifnum\CD@uA>\CD@NB
+\cd@shouldnt M\else\CD@OA\dp\CD@uA\CD@PA\ht\CD@uA\setbox\CD@uA\hbox{\box\z@
+\penalty\CD@vA\penalty\CD@GB\unhbox\CD@uA}\dp\CD@uA\CD@OA\ht\CD@uA\CD@PA\fi
+\fi\fi}\def\CD@WI{\CD@t\CD@AJ\setbox\CD@PC=\hbox{\CD@k A\@super f\CD@lJ f%
+\CD@ND}\CD@ZE\z@\CD@JK\z@\CD@kI\z@\CD@kF\z@\CD@NB=\CD@XB\CD@NF\z@\CD@uB\z@
+\CD@uF\ifnum\CD@NB>\CD@CA\advance\CD@NB\m@ne\CD@qI\ht\CD@NB\CD@pI\dp\CD@NB
+\advance\CD@NF\CD@qI\CD@rI\advance\CD@uB\CD@NF\CD@KC\CD@ZI\CD@w\ht\CD@NB
+\CD@qI\dp\CD@NB\CD@pI\nointerlineskip\box\CD@NB\CD@NF\CD@pI\setbox\CD@NB\null
+\ht\CD@NB\CD@uB\repeat\CD@wB\nointerlineskip\box\CD@NB\CD@gG\CD@ZE
+\DiagramCellWidth{width}\CD@gG\CD@JK\DiagramCellHeight{height}\CD@VA\CD@LB
+\advance\CD@VA-\CD@lA\advance\CD@VA\m@ne\advance\CD@VA\CD@mA\dimen0\wd\CD@VA
+\CD@tI\axisheight\dimen1\CD@uB\advance\dimen1-\CD@YB\dimen2\CD@kI\advance
+\dimen2-\dimen0 \advance\CD@XB-\CD@CA\advance\CD@LB-\CD@lA}\count@\year
+\multiply\count@12 \advance\count@\month\ifnum\count@>24110 \loop\iftrue
+\message{gone February 2009!}\repeat\fi\def\CD@wB{\CD@qI-\CD@NF\CD@pI\CD@NF
+\setbox\CD@MH=\null\dp\CD@MH\CD@NF\ht\CD@MH-\CD@NF\CD@mF\z@\CD@mI\z@\CD@lA
+\CD@LB\advance\CD@lA-\CD@MB\advance\CD@lA\CD@mA\CD@FA\CD@LB\CD@VA\CD@MB\CD@sF
+\ifnum\CD@FA>\CD@lA\advance\CD@FA\m@ne\advance\CD@VA\m@ne\CD@tB\wd\CD@VA
+\setbox\CD@FA=\box\voidb@x\CD@yB\repeat\CD@w\ht\CD@NB\CD@qI\dp\CD@NB\CD@pI}%
+\def\CD@gG#1#2#3{\ifdim#1>.01\CD@zC\CD@PA#2\relax\advance\CD@PA#1\relax
+\advance\CD@PA.99\CD@zC\count@\CD@PA\divide\count@\CD@zC\CD@KB{increase cell #%
+3 to \the\count@ em}\fi}\def\CD@rI{\CD@FA=\CD@LB\penalty4 \noindent\unhbox
+\CD@NB\CD@sF\unskip\setbox0=\lastbox\ifhbox0 \advance\CD@FA\m@ne\setbox\CD@FA
+\hbox to\wd0{\null\penalty-9990\null\unhbox0}\repeat\CD@lA\CD@FA\advance
+\CD@FA\CD@MB\advance\CD@FA-\CD@mA\ifnum\CD@FA<\CD@LB\count@\CD@FA\advance
+\count@\m@ne\dimen0=\wd\count@\count@\CD@MB\advance\count@\m@ne\CD@tB\wd
+\count@\CD@sF\ifnum\CD@FA<\CD@LB\CD@DJ\CD@XG\dimen0\wd\CD@FA\advance\CD@FA1
+\repeat\fi\CD@sF\CD@GB\lastpenalty\unpenalty\ifnum\CD@GB>\z@\CD@vA
+\lastpenalty\unpenalty\CD@VG\repeat\endgraf\unskip\ifnum\lastpenalty=4
+\unpenalty\else\cd@shouldnt S\fi}\def\CD@VG{\advance\CD@vA\CD@lA\advance
+\CD@vA\m@ne\setbox0=\lastbox\ifnum\CD@vA<\CD@LB\setbox\CD@vA\hbox{\box0%
+\penalty\CD@GB\unhbox\CD@vA}\else\CD@UG\fi}\def\CD@bG{}\CD@tG\CD@uE\CD@WB
+\CD@VB\def\CD@DJ{\advance\dimen0\wd\CD@FA\divide\dimen0\tw@\CD@uE\dimen0%
+\DiagramCellWidth\else\CD@V{\dimen0}\DiagramCellWidth\CD@pJ\fi\advance\CD@tB
+\dimen0 }\def\CD@XG{\setbox\CD@MB=\vbox{}\dp\CD@MB=\CD@uB\wd\CD@MB\CD@tB
+\advance\CD@MB1 }\def\CD@LJ#1,{\def\CD@GK{#1}\ifx\CD@GK\CD@RD\else\advance
+\CD@tB\CD@GK\DiagramCellWidth\CD@XG\expandafter\CD@LJ\fi}\def\CD@VJ#1,{\def
+\CD@GK{#1}\ifx\CD@GK\CD@RD\else\ifnum\CD@NB>\CD@CA\CD@NF\CD@GK
+\DiagramCellHeight\advance\CD@NF-\dp\CD@NB\advance\CD@NB\m@ne\ht\CD@NB\CD@NF
+\fi\expandafter\CD@VJ\fi}\def\CD@pJ{\CD@wE\CD@OA\dimen0 \advance\CD@OA-%
+\DiagramCellWidth\ifdim\CD@OA>2\MapShortFall\CD@KB{badly drawn diagonals (see
+manual)}\let\CD@pJ\empty\fi\else\let\CD@pJ\empty\fi}\def\CD@KC{\CD@VA\CD@mA
+\CD@sF\ifnum\CD@VA<\CD@MB\dimen0\dp\CD@VA\advance\dimen0\CD@NF\dp\CD@VA\dimen
+0 \advance\CD@VA1 \repeat}\def\CD@bH#1#2#3#4{\ifnum\CD@FA<\CD@LB\CD@OA=#1%
+\relax\setbox\CD@FA=\hbox{\setbox0=#2\dimen7=#4\relax\dimen8=#3\relax\ifhbox
+\CD@FA\unhbox\CD@FA\advance\CD@OA-\lastkern\unkern\fi\ifdim\CD@OA=\z@\else
+\kern-\CD@OA\fi\raise\dimen7\box0 \kern-\dimen8 }\ifnum\CD@FA=\CD@lA\CD@V
+\CD@kF\CD@OA\fi\else\cd@shouldnt O\fi}\def\CD@w{\setbox\CD@NB=\hbox{\CD@FA
+\CD@lA\CD@VA\CD@mA\CD@PA\z@\relax\CD@sF\ifnum\CD@FA<\CD@LB\CD@tB\wd\CD@VA
+\relax\CD@eI\advance\CD@FA1 \advance\CD@VA1 \repeat}\CD@V\CD@kI{\wd\CD@NB}\wd
+\CD@NB\z@}\def\CD@eI{\ifhbox\CD@FA\CD@OA\CD@tB\relax\advance\CD@OA-\CD@PA
+\relax\ifdim\CD@OA=\z@\else\kern\CD@OA\fi\CD@PA\CD@tB\advance\CD@PA\wd\CD@FA
+\relax\unhbox\CD@FA\advance\CD@PA-\lastkern\unkern\fi}\def\CD@ZI{\setbox
+\CD@sH=\box\voidb@x\CD@VA=\CD@MB\CD@FA\CD@LB\CD@VA\CD@mA\advance\CD@VA\CD@FA
+\advance\CD@VA-\CD@lA\advance\CD@VA\m@ne\CD@tB\wd\CD@VA\count@\CD@LB\advance
+\count@\m@ne\CD@hF.5\wd\count@\advance\CD@hF\CD@tB\CD@A\m@ne\CD@gD\@m\CD@sF
+\ifnum\CD@FA>\CD@lA\advance\CD@FA\m@ne\advance\CD@hF-\CD@tB\CD@PI\wd\CD@VA
+\CD@tB\advance\CD@hF\CD@tB\advance\CD@VA\m@ne\CD@tB\wd\CD@VA\repeat\CD@mF
+\CD@kF\CD@mI-\CD@mF\CD@vB}\newcount\CD@GB\def\CD@s{}\def\CD@t{\mathsurround
+\z@\hsize\z@\rightskip\z@ plus1fil minus\maxdimen\parfillskip\z@\linepenalty
+9000 \looseness0 \hfuzz\maxdimen\hbadness10000 \clubpenalty0 \widowpenalty0
+\displaywidowpenalty0 \interlinepenalty0 \predisplaypenalty0
+\postdisplaypenalty0 \interdisplaylinepenalty0 \interfootnotelinepenalty0
+\floatingpenalty0 \brokenpenalty0 \everypar{}\leftskip\z@\parskip\z@
+\parindent\z@\pretolerance10000 \tolerance10000 \hyphenpenalty10000
+\exhyphenpenalty10000 \binoppenalty10000 \relpenalty10000 \adjdemerits0
+\doublehyphendemerits0 \finalhyphendemerits0 \CD@IA\prevdepth\z@}\newbox
+\CD@KG\newbox\CD@IG\def\CD@JG{\unhcopy\CD@KG}\def\CD@HG{\unhcopy\CD@IG}\def
+\CD@iJ{\hbox{}\penalty1\nointerlineskip}\def\CD@PI{\penalty5 \noindent\setbox
+\CD@MH=\null\CD@mF\z@\CD@mI\z@\ifnum\CD@FA<\CD@LB\ht\CD@MH\ht\CD@FA\dp\CD@MH
+\dp\CD@FA\unhbox\CD@FA\skip0=\lastskip\unskip\else\CD@OK\skip0=\z@\fi\endgraf
+\ifcase\prevgraf\cd@shouldnt Y \or\cd@shouldnt Z \or\CD@RI\or\CD@XI\else
+\CD@QI\fi\unskip\setbox0=\lastbox\unskip\unskip\unpenalty\noindent\unhbox0%
+\setbox0\lastbox\unpenalty\unskip\unskip\unpenalty\setbox0\lastbox\CD@tF
+\CD@GB\lastpenalty\unpenalty\ifnum\CD@GB>\z@\setbox\z@\lastbox\CD@lB\repeat
+\endgraf\unskip\unskip\unpenalty}\def\CD@YJ{\CD@uA\CD@XB\advance\CD@uA-\CD@NB
+\CD@vA\CD@FA\advance\CD@vA-\CD@lA\advance\CD@vA1 \expandafter\message{%
+prevgraf=\the\prevgraf at (\the\CD@uA,\the\CD@vA)}}\def\CD@XI{\CD@CE\setbox
+\CD@lI=\lastbox\setbox\CD@lI=\hbox{\unhbox\CD@lI\unskip\unpenalty}\unskip
+\ifdim\ht\CD@lI>\ht\CD@PC\setbox\CD@MH=\copy\CD@lI\else\ifdim\dp\CD@lI>\dp
+\CD@PC\setbox\CD@MH=\copy\CD@lI\else\CD@FG\CD@lI\fi\fi\advance\CD@mF.5\wd
+\CD@lI\advance\CD@mI.5\wd\CD@lI\setbox\CD@lI=\hbox{\unhbox\CD@lI\CD@HG}\CD@bH
+\CD@mF{\box\CD@lI}\CD@mI\z@\CD@yB\CD@vB}\def\CD@CE{\ifnum\CD@A>0 \advance
+\dimen0-\CD@tB\CD@iA-.5\dimen0 \CD@A-\CD@A\else\CD@A0 \CD@iA\z@\fi\setbox
+\CD@MH=\lastbox\setbox\CD@MH=\hbox{\unhbox\CD@MH\unskip\unskip\unpenalty
+\setbox0=\lastbox\global\CD@QA\lastkern\unkern}\advance\CD@iA-.5\CD@QA\unskip
+\setbox\CD@MH=\null\CD@mI\CD@iA\CD@mF-\CD@iA}\def\CD@Z{\ht\CD@MH\CD@tI\dp
+\CD@MH\CD@sI}\def\CD@FG#1{\setbox\CD@MH=\hbox{\CD@V{\ht\CD@MH}{\ht#1}\CD@V{%
+\dp\CD@MH}{\dp#1}\CD@V{\wd\CD@MH}{\wd#1}\vrule height\ht\CD@MH depth\dp\CD@MH
+width\wd\CD@MH}}\def\CD@QI{\CD@CE\CD@Z\setbox\CD@lI=\lastbox\unskip\setbox
+\CD@lF=\lastbox\unskip\setbox\CD@lF=\hbox{\unhbox\CD@lF\unskip\global\CD@yA
+\lastpenalty\unpenalty}\advance\CD@yA9999 \ifcase\CD@yA\CD@VI\or\CD@YI\or
+\CD@TI\or\CD@dI\or\CD@cI\or\CD@SI\else\cd@shouldnt9\fi}\def\CD@VI{\CD@FG
+\CD@lI\CD@UI\setbox\CD@sH=\box\CD@lF\setbox\CD@tH=\box\CD@lI}\def\CD@YI{%
+\CD@FG\CD@lF\setbox\CD@lI\hbox{\penalty8 \unhbox\CD@lI\unskip\unpenalty\ifnum
+\lastpenalty=8 \else\CD@xH\fi}\CD@UI\setbox\CD@lF=\hbox{\unhbox\CD@lF\unskip
+\unpenalty\global\setbox\CD@DA=\lastbox}\ifdim\wd\CD@lF=\z@\else\CD@xH\fi
+\setbox\CD@sH=\box\CD@DA}\def\CD@xH{\CD@KB{extra material in \string\pile
+\space cell (lost)}}\def\CD@UI{\CD@yB\ifvoid\CD@sH\else\CD@KB{Clashing
+horizontal arrows}\CD@mI.5\CD@hF\CD@mF-\CD@mI\CD@vB\CD@mI\z@\CD@mF\z@\fi
+\CD@hI\CD@hF\advance\CD@hI-\CD@mI\CD@hF-\CD@mF\CD@JC\CD@FA}\def\CD@RI{\setbox
+0\lastbox\unskip\CD@iA\z@\CD@Z\ifdim\skip0>\z@\CD@tJ\CD@A0 \else\ifnum\CD@A<1
+\CD@A0 \dimen0\CD@tB\fi\advance\CD@A1 \fi}\def\VonH{\CD@MA46\VonH{.5\CD@LF}}%
+\def\HonV{\CD@MA57\HonV{.5\CD@LF}}\def\HmeetV{\CD@MA44\HmeetV{-\MapShortFall}%
+}\def\CD@MA#1#2#3#4{\CD@pB34#1{\string#3}\CD@SD\CD@GB-999#2 \dimen0=#4\CD@tI
+\dimen0\advance\CD@tI\axisheight\CD@sI\dimen0\advance\CD@sI-\axisheight\CD@CF
+\CD@HC\CD@ZD}\def\CD@HC#1{\setbox0=\hbox{\CD@k#1\CD@ND}\dimen0.5\wd0 \CD@tI
+\ht0 \CD@sI\dp0 \CD@ZD}\def\CD@SD{\setbox0=\null\ht0=\CD@tI\dp0=\CD@sI\wd0=%
+\dimen0 \copy0\penalty\CD@GB\box0 }\def\CD@TI{\CD@GC\CD@yB}\def\CD@dI{\CD@GC
+\CD@vB}\def\CD@SI{\CD@GC\CD@yB\CD@vB}\def\CD@GC{\setbox\CD@lI=\hbox{\unhbox
+\CD@lI}\setbox\CD@lF=\hbox{\unhbox\CD@lF\global\setbox\CD@DA=\lastbox}\ht
+\CD@MH\ht\CD@DA\dp\CD@MH\dp\CD@DA\advance\CD@mF\wd\CD@DA\advance\CD@mI\wd
+\CD@lI}\CD@tG\ifPositiveGradient\CD@CI\CD@BI\CD@CI\CD@tG\ifClimbing\CD@rB
+\CD@qB\CD@rB\newcount\DiagonalChoice\DiagonalChoice\m@ne\ifx\tenln\nullfont
+\CD@tJ\def\CD@qF{\CD@KH\ifPositiveGradient/\else\CD@k\backslash\CD@ND\fi}%
+\else\def\CD@qF{\CD@rF\char\count@}\fi\let\CD@rF\tenln\def\Use@line@char#1{%
+\hbox{#1\CD@rF\ifPositiveGradient\else\advance\count@64 \fi\char\count@}}\def
+\CD@cF{\Use@line@char{\count@\CD@TC\multiply\count@8\advance\count@-9\advance
+\count@\CD@LH}}\def\CD@ZF{\Use@line@char{\ifcase\DiagonalChoice\CD@gF\or
+\CD@fF\or\CD@fF\else\CD@gF\fi}}\def\CD@gF{\ifnum\CD@TC=\z@\count@\rq33 \else
+\count@\CD@TC\multiply\count@\sixt@@n\advance\count@-9\advance\count@\CD@LH
+\advance\count@\CD@LH\fi}\def\CD@fF{\count@\rq\ifcase\CD@LH55\or\ifcase\CD@TC
+66\or22\or52\or61\or72\fi\or\ifcase\CD@TC66\or25\or22\or63\or52\fi\or\ifcase
+\CD@TC66\or16\or36\or22\or76\fi\or\ifcase\CD@TC66\or27\or25\or67\or22\fi\fi
+\relax}\def\CD@uC#1{\hbox{#1\setbox0=\Use@line@char{#1}\ifPositiveGradient
+\else\raise.3\ht0\fi\copy0 \kern-.7\wd0 \ifPositiveGradient\raise.3\ht0\fi
+\box0}}\def\CD@jF#1{\hbox{\setbox0=#1\kern-.75\wd0 \vbox to.25\ht0{%
+\ifPositiveGradient\else\vss\fi\box0 \ifPositiveGradient\vss\fi}}}\def\CD@jI#%
+1{\hbox{\setbox0=#1\dimen0=\wd0 \vbox to.25\ht0{\ifPositiveGradient\vss\fi
+\box0 \ifPositiveGradient\else\vss\fi}\kern-.75\dimen0 }}\CD@RC{+h:>}{%
+\Use@line@char\CD@fF}\CD@RC{-h:>}{\Use@line@char\CD@gF}\CD@nF{+t:<}{-h:>}%
+\CD@nF{-t:<}{+h:>}\CD@RC{+t:>}{\CD@jF{\Use@line@char\CD@fF}}\CD@RC{-t:>}{%
+\CD@jI{\Use@line@char\CD@gF}}\CD@nF{+h:<}{-t:>}\CD@nF{-h:<}{+t:>}\CD@RC{+h:>>%
+}{\CD@uC\CD@fF}\CD@RC{-h:>>}{\CD@uC\CD@gF}\CD@nF{+t:<<}{-h:>>}\CD@nF{-t:<<}{+%
+h:>>}\CD@nF{+h:>->}{+h:>>}\CD@nF{-h:>->}{-h:>>}\CD@nF{+t:<-<}{-h:>>}\CD@nF{-t%
+:<-<}{+h:>>}\CD@RC{+t:>>}{\CD@jF{\CD@uC\CD@fF}}\CD@RC{-t:>>}{\CD@jI{\CD@uC
+\CD@gF}}\CD@nF{+h:<<}{-t:>>}\CD@nF{-h:<<}{+t:>>}\CD@nF{+t:>->}{+t:>>}\CD@nF{-%
+t:>->}{-t:>>}\CD@nF{+h:<-<}{-t:>>}\CD@nF{-h:<-<}{+t:>>}\CD@RC{+f:-}{\CD@EF
+\null\else\CD@cF\fi}\CD@nF{-f:-}{+f:-}\def\CD@tC#1#2{\vbox to#1{\vss\hbox to#%
+2{\hss.\hss}\vss}}\def\hfdot{\CD@tC{2\axisheight}{.5em}}%
+%% % .7em until 29.7.98
+\def\vfdot{\CD@tC{1ex}\z@}%% % 1.46ex until 29.7.98
+\def\CD@bF{\hbox{\dimen0=.3\CD@zC\dimen1\dimen0 \ifnum\CD@LH>\CD@TC\CD@iC{%
+\dimen1}\else\CD@dG{\dimen0}\fi\CD@tC{\dimen0}{\dimen1}}}\newarrowfiller{.}%
+\hfdot\hfdot\vfdot\vfdot\def\dfdot{\CD@bF\CD@CK}\CD@RC{+f:.}{\dfdot}\CD@RC{-f%
+:.}{\dfdot}\def\CD@@K#1{\hbox\bgroup\def\CD@CH{#1\egroup}\afterassignment
+\CD@CH%%
+\count@=\rq}\def\lnchar{\CD@@K\CD@qF}\let\laf\lnchar\let\lah\lnchar\def\lad{%
+\CD@@K\xlad}\def\xlad{\setbox2=\hbox{\CD@qF}\setbox0=\hbox to.3\wd2{\hss.\hss
+}\dimen0=\ht0 \advance\dimen0-\dp0 \dimen1=.3\ht2 \advance\dimen1-\dimen0 \dp
+0=.5\dimen1 \dimen1=.3\ht2 \advance\dimen1\dimen0 \ht0=.5\dimen1 \raise\dp0%
+\box0}\def\lahh{\CD@@K\xlahh}\def\lat{\CD@@K\xlat}\def\xlat{\setbox0=\hbox{%
+\CD@qF}\dimen0=\ht0 \setbox1=\hbox to.25\wd0{\ifcase\DiagonalChoice\box0\hss
+\or\hss\box0 \or\hss\box0 \or\box0\hss\fi}\vbox to.25\dimen0{\ifClimbing\box1%
+\vss\else\vss\box1\fi\kern\z@}}\def\xlahh{\setbox0=\hbox{\CD@qF}%
+\ifPositiveGradient\CD@tJ\copy0 \kern-.7\wd0 \mv.3\ht0\box0 \else\ifClimbing
+\CD@tJ\copy0 \kern-.7\wd0 \mv.3\ht0\box0 \else\mv-.3\ht0\copy0 \kern-.7\wd0
+\box0 \fi\fi}\def\CD@dF#1{\setbox#1=\hbox{\dimen5\dimen#1 \setbox8=\box#1
+\dimen1\wd8 \count@\dimen5 \divide\count@\dimen1 \ifnum\count@=0 \box8 \ifdim
+\dimen5<.95\dimen1 \CD@gB{diagonal line too short}\fi\else\dimen3=\dimen5
+\advance\dimen3-\dimen1 \divide\dimen3\count@\dimen4\dimen3 \CD@dG{\dimen4}%
+\ifPositiveGradient\multiply\dimen4\m@ne\fi\dimen6\dimen1 \advance\dimen6-%
+\dimen3 \loop\raise\count@\dimen4\copy8 \ifnum\count@>0 \kern-\dimen6 \advance
+\count@\m@ne\repeat\fi}}\def\CD@CG#1{\CD@EF\CD@xJ{#1}\else\CD@dF{#1}\fi}\def
+\CD@IH#1{}\newdimen\objectheight\objectheight1.8ex \newdimen\objectwidth
+\objectwidth1em \def\CD@YD{\dimen6=\CD@aK\DiagramCellHeight\dimen7=\CD@WK
+\DiagramCellWidth\CD@KJ\ifnum\CD@LH>0 \ifnum\CD@TC>0 \CD@aF\else\aftergroup
+\CD@VC\fi\else\aftergroup\CD@UC\fi}\def\CD@VC{\CD@YA{diagonal map is nearly
+vertical}\CD@NA}\def\CD@UC{\CD@YA{diagonal map is nearly horizontal}\CD@NA}%
+\CD@rG\CD@NA{Use an orthogonal map instead}\def\CD@aF{\CD@MJ\dimen3\dimen7%
+\dimen7\dimen6\CD@iC{\dimen7}\advance\dimen3-\dimen7 \CD@MF\ifnum\CD@LH>%
+\CD@TC\advance\dimen6-\dimen1\advance\dimen6-\dimen5 \CD@iC{\dimen1}\CD@iC{%
+\dimen5}\else\dimen0\dimen1\advance\dimen0\dimen5\CD@dG{\dimen0}\advance
+\dimen6-\dimen0 \fi\dimen2.5\dimen7\advance\dimen2-\dimen1 \dimen4.5\dimen7%
+\advance\dimen4-\dimen5 \ifPositiveGradient\dimen0\dimen5 \advance\dimen1-%
+\CD@WK\DiagramCellWidth\advance\dimen1 \CD@ZK\DiagramCellWidth\setbox6=\llap{%
+\unhbox6\kern.1\ht2}\setbox7=\rlap{\kern.1\ht2\unhbox7}\else\dimen0\dimen1
+\advance\dimen1-\CD@ZK\DiagramCellWidth\setbox7=\llap{\unhbox7\kern.1\ht2}%
+\setbox6=\rlap{\kern.1\ht2\unhbox6}\fi\setbox6=\vbox{\box6\kern.1\wd2}\setbox
+7=\vtop{\kern.1\wd2\box7}\CD@dG{\dimen0}\advance\dimen0-\axisheight\advance
+\dimen0-\CD@bK\DiagramCellHeight\dimen5-\dimen0 \advance\dimen0\dimen6
+\advance\dimen1.5\dimen3 \ifdim\wd3>\z@\ifdim\ht3>-\dp3\CD@TB\fi\fi\dimen3%
+\dimen2 \dimen7\dimen2\advance\dimen7\dimen4 \ifvoid3 \else\CD@tE\else\dimen8%
+\ht3\advance\dimen8-\axisheight\CD@iC{\dimen8}\CD@X{\dimen8}{.5\wd3}\dimen9%
+\dp3\advance\dimen9\axisheight\CD@iC{\dimen9}\CD@X{\dimen9}{.5\wd3}%
+\ifPositiveGradient\advance\dimen2-\dimen9\advance\dimen4-\dimen8 \else
+\advance\dimen4-\dimen9\advance\dimen2-\dimen8 \fi\fi\advance\dimen3-.5\wd3
+\fi\dimen9=\CD@aK\DiagramCellHeight\advance\dimen9-2\DiagramCellHeight\CD@tE
+\advance\dimen2\dimen4 \CD@CG{2}\dimen2-\dimen0\advance\dimen2\dp2 \else
+\CD@CG{2}\CD@CG{4}\ifPositiveGradient\dimen2-\dimen0\advance\dimen2\dp2 \dimen
+4\dimen5\advance\dimen4-\ht4 \else\dimen4-\dimen0\advance\dimen4\dp4 \dimen2%
+\dimen5\advance\dimen2-\ht2 \fi\fi\setbox0=\hbox to\z@{\kern\dimen1 \ifvoid1
+\else\ifPositiveGradient\advance\dimen0-\dp1 \lower\dimen0 \else\advance
+\dimen5-\ht1 \raise\dimen5 \fi\rlap{\unhbox1}\fi\raise\dimen2\rlap{\unhbox2}%
+\ifvoid3 \else\lower.5\dimen9\rlap{\kern\dimen3\unhbox3}\fi\kern.5\dimen7
+\lower.5\dimen9\box6 \lower.5\dimen9\box7 \kern.5\dimen7 \CD@tE\else\raise
+\dimen4\llap{\unhbox4}\fi\ifvoid5 \else\ifPositiveGradient\advance\dimen5-\ht
+5 \raise\dimen5 \else\advance\dimen0-\dp5 \lower\dimen0 \fi\llap{\unhbox5}\fi
+\hss}\ht0=\axisheight\dp0=-\ht0\box0 }\def\NorthWest{\CD@BI\CD@rB
+\DiagonalChoice0 }\def\NorthEast{\CD@CI\CD@rB\DiagonalChoice1 }\def\SouthWest
+{\CD@CI\CD@qB\DiagonalChoice3 }\def\SouthEast{\CD@BI\CD@qB\DiagonalChoice2 }%
+\def\CD@aD{\vadjust{\CD@uA\CD@FA\advance\CD@uA\ifPositiveGradient\else-\fi
+\CD@ZK\relax\CD@vA\CD@NB\advance\CD@vA-\CD@bK\relax\hbox{\advance\CD@uA
+\ifPositiveGradient-\fi\CD@WK\advance\CD@vA\CD@aK\hbox{\box6 \kern\CD@DC\kern
+\CD@eJ\penalty1 \box7 \box\z@}\penalty\CD@uA\penalty\CD@vA}\penalty\CD@uA
+\penalty\CD@vA\penalty104}}\def\CD@eH#1{\relax\vadjust{\hbox@maths{#1}%
+\penalty\CD@FA\penalty\CD@NB\penalty\tw@}}\def\CD@lB{\ifcase\CD@GB\or\or
+\CD@bH{.5\wd0}{\box0}{.5\wd0}\z@\or\unhbox\z@\setbox\z@\lastbox\CD@bH{.5\wd0}%
+{\box0}{.5\wd0}\z@\unpenalty\unpenalty\setbox\z@\lastbox\or\CD@TG\else
+\advance\CD@GB-100 \ifnum\CD@GB<\z@\cd@shouldnt B\fi\setbox\z@\hbox{\kern
+\CD@mF\copy\CD@MH\kern\CD@mI\CD@uA\CD@XB\advance\CD@uA-\CD@NB\penalty\CD@uA
+\CD@uA\CD@FA\advance\CD@uA-\CD@lA\penalty\CD@uA\unhbox\z@\global\CD@yA
+\lastpenalty\unpenalty\global\CD@zA\lastpenalty\unpenalty}\CD@uA-\CD@yA\CD@vA
+\CD@zA\CD@fI\fi}\def\CD@TG{\unhbox\z@\setbox\z@\lastbox\CD@uA\lastpenalty
+\unpenalty\advance\CD@uA\CD@mA\CD@vA\CD@XB\advance\CD@vA-\lastpenalty
+\unpenalty\dimen1\lastkern\unkern\setbox3\lastbox\dimen0\lastkern\unkern
+\setbox0=\hbox to\z@{\unhbox0\setbox0\lastbox\setbox7\lastbox\unpenalty\CD@eJ
+\lastkern\unkern\CD@DC\lastkern\unkern\setbox6\lastbox\dimen7\CD@tB\advance
+\dimen7-\wd\CD@uA\ifdim\dimen7<\z@\CD@CI\multiply\dimen7\m@ne\let\mv\empty
+\else\CD@BI\def\mv{\raise\ht1}\kern-\dimen7 \fi\ifnum\CD@vA>\CD@NB\dimen6%
+\CD@uB\advance\dimen6-\ht\CD@vA\else\dimen6\z@\fi\CD@jJ\CD@mK\setbox1\null\ht
+1\dimen6\wd1\dimen7 \dimen7\dimen2 \dimen6\wd1 \CD@KJ\CD@uA\CD@LH\CD@vA\CD@TC
+\dimen6\ht1 \CD@KJ\setbox2\null\divide\dimen2\tw@\advance\dimen2\CD@eJ\CD@eG{%
+\dimen2}\wd2\dimen2 \dimen0.5\dimen7 \advance\dimen0\ifPositiveGradient\else-%
+\fi\CD@eJ\CD@dG{\dimen0}\advance\dimen0-\axisheight\ht2\dimen0 \dimen0\CD@DC
+\CD@eG{\dimen0}\advance\dimen0\ht2\ht2\dimen0 \dimen0\ifPositiveGradient-\fi
+\CD@DC\CD@dG{\dimen0}\advance\dimen0\wd2\wd2\dimen0 \setbox4\null\dimen0 .6%
+\CD@zC\CD@eG{\dimen0}\ht4\dimen0 \dimen0 .2\CD@zC\CD@dG{\dimen0}\wd4\dimen0
+\dimen0\wd2 \ifvoid6\else\dimen1\ht4 \advance\dimen1\ht2 \CD@CC6+-\raise
+\dimen1\rlap{\ifPositiveGradient\advance\dimen0-\wd6\advance\dimen0-\wd4 \else
+\advance\dimen0\wd4 \fi\kern\dimen0\box6}\fi\dimen0\wd2 \ifvoid7\else\dimen1%
+\ht4 \advance\dimen1-\ht2 \CD@CC7-+\lower\dimen1\rlap{\ifPositiveGradient
+\advance\dimen0\wd4 \else\advance\dimen0-\wd7\advance\dimen0-\wd4 \fi\kern
+\dimen0\box7}\fi\mv\box0\hss}\ht0\z@\dp0\z@\CD@bH{\z@}{\box\z@}{\z@}{%
+\axisheight}}\def\CD@CC#1#2#3{\dimen4.5\wd#1 \ifdim\dimen4>.25\dimen7\dimen4=%
+.25\dimen7\fi\ifdim\dimen4>\CD@zC\dimen4.4\dimen4 \advance\dimen4.6\CD@zC\fi
+\CD@eG{\dimen4}\dimen5\axisheight\CD@dG{\dimen5}\advance\dimen4-\dimen5 \dimen
+5\dimen4\CD@eG{\dimen5}\advance\dimen0\ifPositiveGradient#2\else#3\fi\dimen5
+\CD@dG{\dimen4}\advance\dimen1\dimen4 } \def\CD@eD#1{\expandafter\CD@IK{#1}}%
+\CD@ZA\CD@EK{output is PostScript dependent}\def\CD@SC{\CD@IK{/bturn {gsave
+currentpoint currentpoint translate 4 2 roll neg exch atan rotate neg exch neg
+exch translate } def /eturn {currentpoint grestore moveto} def}}\def\CD@gK{%
+\relax\CD@hK\pdfliteral{Q}\else\CD@IK{eturn}\fi} \def\CD@OJ#1{\count@#1\relax
+\multiply\count@7\advance\count@16577\divide\count@33154 }\def\CD@fD#1{%
+\expandafter\special{#1}} \def\CD@xJ#1{\setbox#1=\hbox{\dimen0\dimen#1\CD@dG{%
+\dimen0}\CD@OJ{\dimen0}\setbox0=\null\ifPositiveGradient\count@-\count@\ht0%
+\dimen0 \else\dp0\dimen0 \fi\box0 \CD@uA\count@\CD@OJ\CD@LF\CD@fD{pn \the
+\count@}\CD@fD{pa 0 0}\CD@OJ{\dimen#1}\CD@fD{pa \the\count@\space\the\CD@uA}%
+\CD@fD{fp}\kern\dimen#1}}\def\CD@JI{\CD@KJ\begingroup\ifdim\dimen7<\dimen6
+\dimen2=\dimen6 \dimen6=\dimen7 \dimen7=\dimen2 \count@\CD@LH\CD@LH\CD@TC
+\CD@TC\count@\else\dimen2=\dimen7 \fi\ifdim\dimen6>.01\p@\CD@KI\global\CD@QA
+\dimen0 \else\global\CD@QA\dimen7 \fi\endgroup\dimen2\CD@QA\CD@iK\CD@lK{%
+\ifPositiveGradient\else-\fi\dimen6}\CD@iK\CD@kK{\ifPositiveGradient-\fi
+\dimen6}\CD@iK\CD@eK{\dimen7}}\def\CD@KI{\CD@hJ\ifdim\dimen7>1.73\dimen6
+\divide\dimen2 4 \multiply\CD@TC2 \else\dimen2=0.353553\dimen2 \advance\CD@LH
+-\CD@TC\multiply\CD@TC4 \fi\dimen0=4\dimen2 \CD@ZG4\CD@ZG{-2}\CD@ZG2\CD@ZG{-2%
+.5}}\def\CD@AI{\begingroup\count@\dimen0 \dimen2 45pt \divide\count@\dimen2
+\ifdim\dimen0<\z@\advance\count@\m@ne\fi\ifodd\count@\advance\count@1\CD@@A
+\else\CD@y\fi\advance\dimen0-\count@\dimen2 \CD@gE\multiply\dimen0\m@ne\fi
+\ifnum\count@<0 \multiply\count@-7 \fi\dimen3\dimen1 \dimen6\dimen0 \dimen7
+3754936sp \ifdim\dimen0<6\p@\def\CD@OG{4000}\fi\CD@KJ\dimen2\dimen3\CD@dG{%
+\dimen2}\CD@hJ\multiply\CD@TC-6 \dimen0\dimen2 \CD@ZG1\CD@ZG{0.3}\dimen1%
+\dimen0 \dimen2\dimen3 \dimen0\dimen3 \CD@ZG3\CD@ZG{1.5}\CD@ZG{0.3}\divide
+\count@2 \CD@gE\multiply\dimen1\m@ne\fi\ifodd\count@\dimen2\dimen1\dimen1%
+\dimen0\dimen0-\dimen2 \fi\divide\count@2 \ifodd\count@\multiply\dimen0\m@ne
+\multiply\dimen1\m@ne\fi\global\CD@QA\dimen0\global\CD@RA\dimen1\endgroup
+\dimen6\CD@QA\dimen7\CD@RA}\def\CD@OC{255}\let\CD@OG\CD@OC\def\CD@KJ{%
+\begingroup\ifdim\dimen7<\dimen6 \dimen9\dimen7\dimen7\dimen6\dimen6\dimen9%
+\CD@@A\else\CD@y\fi\dimen2\z@\dimen3\CD@XH\dimen4\CD@XH\dimen0\z@\dimen8=%
+\CD@OG\CD@XH\CD@lC\global\CD@yA\dimen\CD@gE0\else3\fi\global\CD@zA\dimen
+\CD@gE3\else0\fi\endgroup\CD@LH\CD@yA\CD@TC\CD@zA}\def\CD@lC{\count@\dimen6
+\divide\count@\dimen7 \advance\dimen6-\count@\dimen7 \dimen9\dimen4 \advance
+\dimen9\count@\dimen0 \ifdim\dimen9>\dimen8 \CD@@C\else\CD@AC\ifdim\dimen6>%
+\z@\dimen9\dimen6 \dimen6\dimen7 \dimen7\dimen9 \expandafter\expandafter
+\expandafter\CD@lC\fi\fi}\def\CD@@C{\ifdim\dimen0=\z@\ifdim\dimen9<2\dimen8
+\dimen0\dimen8 \fi\else\advance\dimen8-\dimen4 \divide\dimen8\dimen0 \ifdim
+\count@\CD@XH<2\dimen8 \count@\dimen8 \dimen9\dimen4 \advance\dimen9\count@
+\dimen0 \CD@AC\fi\fi}\def\CD@AC{\dimen4\dimen0 \dimen0\dimen9 \advance\dimen2%
+\count@\dimen3 \dimen9\dimen2 \dimen2\dimen3 \dimen3\dimen9 }\def\CD@ZG#1{%
+\CD@dG{\dimen2}\advance\dimen0 #1\dimen2 }\def\CD@dG#1{\divide#1\CD@TC
+\multiply#1\CD@LH}\def\CD@eG#1{\divide#1\CD@vA\multiply#1\CD@uA}\def\CD@iC#1{%
+\divide#1\CD@LH\multiply#1\CD@TC}\def\CD@hJ{\dimen6\CD@LH\CD@XH\multiply
+\dimen6\CD@LH\dimen7\CD@TC\CD@XH\multiply\dimen7\CD@TC\CD@KJ}\def\CD@iK#1#2{%
+\begingroup\dimen@#2\relax\loop\ifdim\dimen2<.4\maxdimen\multiply\dimen2\tw@
+\multiply\dimen@\tw@\repeat\divide\dimen2\@cclvi\divide\dimen@\dimen2\relax
+\multiply\dimen@\@cclvi\expandafter\CD@jK\the\dimen@\endgroup\let#1\CD@fK}{%
+\catcode\lq p=12 \catcode\lq0=12 \catcode\lq.=12 \catcode\lq t=12 \gdef\CD@jK
+#1pt{\gdef\CD@fK{#1}}}\ifx\errorcontextlines\CD@qK\CD@tJ\let\CD@GH\relax\else
+\def\CD@GH{\errorcontextlines\m@ne}\fi\ifnum\inputlineno<0 \let\CD@CD\empty
+\let\CD@W\empty\let\CD@mD\relax\let\CD@uI\relax\let\CD@vI\relax\let\CD@zF
+\relax\message{! Why not upgrade to TeX version 3? (available since 1990)}%
+\else\def\CD@W{ at line \number\inputlineno}\def\CD@mD{ - first occurred}\def
+\CD@uI{\edef\CD@h{\the\inputlineno}\global\let\CD@jB\CD@h}\def\CD@h{9999}\def
+\CD@vI{\xdef\CD@jB{\the\inputlineno}}\def\CD@jB{\CD@h}\def\CD@zF{\ifnum\CD@h<%
+\inputlineno\edef\CD@CD{\space at lines \CD@h--\the\inputlineno}\else\edef
+\CD@CD{\CD@W}\fi}\fi\let\CD@CD\empty\def\CD@YA#1#2{\CD@GH\errhelp=#2%
+\expandafter\errmessage{\CD@tA: #1}}\def\CD@KB#1{\begingroup\expandafter
+\message{! \CD@tA: #1\CD@CD}\ifnum\CD@XB>\CD@NB\ifnum\CD@CA>\CD@NB\else\ifnum
+\CD@lA>\CD@FA\else\ifnum\CD@LB>\CD@FA\advance\CD@XB-\CD@NB\advance\CD@FA-%
+\CD@lA\advance\CD@FA1\relax\expandafter\message{! (error detected at row \the
+\CD@XB, column \the\CD@FA, but probably caused elsewhere)}\fi\fi\fi\fi
+\endgroup}\def\CD@gB#1{{\expandafter\message{\CD@tA\space Warning: #1\CD@W}}}%
+\def\CD@CB#1#2{\CD@gB{#1 \string#2 is obsolete\CD@mD}}\def\CD@AB#1{\CD@CB{%
+Dimension}{#1}\CD@DE#1\CD@BB\CD@BB}\def\CD@BB{\CD@OA=}\def\CD@@B#1{\CD@CB{%
+Count}{#1}\CD@DE#1\CD@OH\CD@OH}\def\CD@OH{\count@=}\def\HorizontalMapLength{%
+\CD@AB\HorizontalMapLength}\def\VerticalMapHeight{\CD@AB\VerticalMapHeight}%
+\def\VerticalMapDepth{\CD@AB\VerticalMapDepth}\def\VerticalMapExtraHeight{%
+\CD@AB\VerticalMapExtraHeight}\def\VerticalMapExtraDepth{\CD@AB
+\VerticalMapExtraDepth}\def\DiagonalLineSegments{\CD@@B\DiagonalLineSegments}%
+\ifx\tenln\nullfont\CD@ZA\CD@KH{\CD@eF\space diagonal line and arrow font not
+available}\else\let\CD@KH\relax\fi\def\CD@aG#1#2<#3:#4:#5#6{\begingroup\CD@PA
+#3\relax\advance\CD@PA-#2\relax\ifdim.1em<\CD@PA\CD@uA#5\relax\CD@vA#6\relax
+\ifnum\CD@uA<\CD@vA\count@\CD@vA\advance\count@-\CD@uA\CD@KB{#4 by \the\CD@PA
+}\if#1v\let\CD@CH\CD@JK\edef\tmp{\the\CD@uA--\the\CD@vA,\the\CD@FA}\else
+\advance\count@\count@\if#1l\advance\count@-\CD@A\else\if#1r\advance\count@
+\CD@A\fi\fi\advance\CD@PA\CD@PA\let\CD@CH\CD@ZE\edef\tmp{\the\CD@NB,\the
+\CD@uA--\the\CD@vA}\fi\divide\CD@PA\count@\ifdim\CD@CH<\CD@PA\global\CD@CH
+\CD@PA\fi\fi\fi\endgroup}\CD@tG\CD@xE\CD@JD\CD@ID\CD@rG\CD@xI{See the message
+above.}\CD@rG\CD@lH{Perhaps you've forgotten to end the diagram before
+resuming the text, in\CD@uG which case some garbage may be added to the
+diagram, but we should be ok now.\CD@uG Alternatively you've left a blank line
+in the middle - TeX will now complain\CD@uG that the remaining \CD@S s are
+misplaced - so please use comments for layout.}\CD@rG\CD@hD{You have already
+closed too many brace pairs or environments; an \CD@HD\CD@uG command was (%
+over)due.}\CD@rG\CD@hH{\CD@dC\space and \CD@HD\space commands must match.}%
+\def\CD@jH{\ifnum\inputlineno=0 \else\expandafter\CD@iH\fi}\def\CD@iH{\CD@MD
+\CD@GD\crcr\CD@YA{missing \CD@HD\space inserted before \CD@kH- type "h"}%
+\CD@lH\enddiagram\CD@AG\CD@kH\par}\def\CD@AG#1{\edef\enddiagram{\noexpand
+\CD@rD{#1\CD@W}}}\def\CD@rD#1{\CD@YA{\CD@HD\space(anticipated by #1) ignored}%
+\CD@xI\let\enddiagram\CD@SG}\def\CD@SG{\CD@YA{misplaced \CD@HD\space ignored}%
+\CD@hH}\def\CD@mC{\CD@YA{missing \CD@HD\space inserted.}\CD@hD\CD@AG{closing
+group}}\ifx\DeclareOption\CD@qK\else\ifx\DeclareOption\@notprerr\else
+\DeclareOption*{\let\CD@N\relax\let\CD@DH\relax\expandafter\CD@@E
+\CurrentOption,}\fi\fi
+%%======================================================================%
+%% %
+%% (22) AUXILLARY MACROS FOR ADJUSTMENT OF COMPONENTS %
+%% %
+%%======================================================================%
+
+%% NOTE: The recommended way of defining arrow commands is now
+%% \newarrow{Name}{tail}{filler}{middle}{filler}{head}
+%% which defines \rName, \lName, \dName and \uName using arrow parts which
+%% have themselves previously been defined using the commands
+%% \newarrowtail, \newarrowfiller, \newarrowmiddle and \newarrowhead.
+
+%% The components \rhvee etc have been retained for the time being, as an
+%% intermediate stage and to continue to support the old \HorizontalMap and
+%% \VerticalMap commands, but you should not rely on the continued existence
+%% of these macros.
+
+%% The various components usually need some correction
+%% - longitudinally, ie to prevent gaps and overprints with the shaft,
+%% - transversally, ie to prevent "steps" in the junction with the shaft.
+%% The former can be done safely ad hoc, eg with \mkern1mu.
+%% The latter are now done with the macros \scriptaxis, \boldscriptaxis,
+%% \shifthook and \raisehook, which include pixel corrections.
+
+%% Please note that these and the other auxillary macros which follow are
+%% interim. When it becomes clear exactly what kinds of adjustments are
+%% needed for characters, this job will be done by a suitable extension
+%% to the language of \newarrowhead, etc. If you have any other ideas for
+%% transformations of general use please tell me.
+
+%% By all means experiment with other characters for arrowheads, but
+%% please, in your own interests, do not rely on macros like \rhvee,
+%% send me a copy of your definitions for distribution to other users
+%% in this file, and keep track of where your efforts get copied so
+%% that they can be replaced with the "official" version when it is
+%% incorporated.
+
+%% ***** DONT use macros with mangled names like \Cd@gH. *****
+
+\catcode\lq\$=3 %% make sure that $ means maths-shift
+\def\vboxtoz{\vbox to\z@}%% \z@ is in plain TeX and means 0pt
+
+%% print #1 in \scriptstyle, adjusting for the maths axis height
+\def\scriptaxis#1{\@scriptaxis{$\scriptstyle#1$}}%%
+\def\ssaxis#1{\@ssaxis{$\scriptscriptstyle#1$}}%%
+\def\@scriptaxis#1{\dimen0\axisheight\advance\dimen0-\ss@axisheight\raise
+\dimen0\hbox{#1}}\def\@ssaxis#1{\dimen0\axisheight\advance\dimen0-%
+\ss@axisheight\raise\dimen0\hbox{#1}}
+
+%% Some of the characters would look better in bold since they're
+%% taken from sub/superscript fonts; we use LaTeX's \boldmath to
+%% do this, defining this to do nothing if it doesn't exist.
+%% With the old LaTeX font selection at other than 10pt you may still
+%% get nothing happenning. Also, PK fonts may be missing.
+%% If you have problems, DONT use boldhook or boldlittlevee.
+\ifx\boldmath\CD@qK%%
+\let\boldscriptaxis\scriptaxis%%
+\def\boldscript#1{\hbox{$\scriptstyle#1$}}%%
+\def\boldscriptscript#1{\hbox{$\scriptscriptstyle#1$}}%%
+\else\def\boldscriptaxis#1{\@scriptaxis{\boldmath$\scriptstyle#1$}}%%
+\def\boldscript#1{\hbox{\boldmath$\scriptstyle#1$}}%%
+\def\boldscriptscript#1{\hbox{\boldmath$\scriptscriptstyle#1$}}%%
+\fi
+
+%% #1= {} or \boldmath; #2= + or -; #3=\subset or \supset
+\def\raisehook#1#2#3{\hbox{\setbox3=\hbox{#1$\scriptscriptstyle#3$}%
+%% the character to use
+\dimen0\ss@axisheight%% \scriptscriptstyle axis height
+\dimen1\axisheight\advance\dimen1-\dimen0%% difference in axis heights
+\dimen2\ht3\advance\dimen2-\dimen0%
+%% height of char above axis (half spread)
+\advance\dimen2-0.021em\advance\dimen1 #2\dimen2%
+%% shift = axis_difference +/- half_spread
+\raise\dimen1\box3}}%% print the character
+%% Mark Dawson suggested using the width
+\def\shifthook#1#2#3{\setbox1=\hbox{#1$\scriptscriptstyle#3$}\dimen0\wd1%
+\divide\dimen0 12\CD@zH{\dimen0}%% "u"
+\dimen1\wd1\advance\dimen1-2\dimen0 \advance\dimen1-2\CD@oI\CD@zH{\dimen1}%
+\kern#2\dimen1\box1}%% print
+
+%% use the extension font (cmex) for double vertical arrows
+\def\@cmex{\mathchar"03}%%ascii double quote
+
+%% ************* P U L L B A C K S ************
+
+%% These will probably be replaced by something less ad hoc
+%% in a future version.
+
+\def\make@pbk#1{\setbox\tw@\hbox to\z@{#1}\ht\tw@\z@\dp\tw@\z@\box\tw@}\def
+\CD@fH#1{\overprint{\hbox to\z@{#1}}}\def\CD@qH{\kern0.11em}\def\CD@pH{\kern0%
+.35em}
+
+%% This is a hack for my book ``Practical Foundations of Mathematics''
+%% and WILL NOT BE SUPPORTED --- DO NOT USE IT!
+\def\dblvert{\def\CD@rH{\kern.5\PileSpacing}}\def\CD@rH{}
+
+\def\SEpbk{\make@pbk{\CD@qH\CD@rH\vrule depth 2.87ex height -2.75ex width 0.%
+95em \vrule height -0.66ex depth 2.87ex width 0.05em \hss}}
+
+\def\SWpbk{\make@pbk{\hss\vrule height -0.66ex depth 2.87ex width 0.05em
+\vrule depth 2.87ex height -2.75ex width 0.95em \CD@qH\CD@rH}}
+
+\def\NEpbk{\make@pbk{\CD@qH\CD@rH\vrule depth -3.81ex height 4.00ex width 0.%
+95em \vrule height 4.00ex depth -1.72ex width 0.05em \hss}}
+
+\def\NWpbk{\make@pbk{\hss\vrule height 4.00ex depth -1.72ex width 0.05em
+\vrule depth -3.81ex height 4.00ex width 0.95em \CD@qH\CD@rH}}
+
+%% Freyd & Scedrov puncture symbol for non-commuting polygon
+\def\puncture{{\setbox0\hbox{A}\vrule height.53\ht0 depth-.47\ht0 width.35\ht
+0 \kern.12\ht0 \vrule height\ht0 depth-.65\ht0 width.06\ht0 \kern-.06\ht0
+\vrule height.35\ht0 depth0pt width.06\ht0 \kern.12\ht0 \vrule height.53\ht0
+depth-.47\ht0 width.35\ht0 }}
+
+%% 2-cells: (24.11.95)
+%%% \NEclck puts a clockwise (ie southeast) arrow to the northwest of cell etc
+\def\NEclck{\overprint{\raise2.5ex\rlap{ \CD@rH$\scriptstyle\searrow$}}}%%
+\def\NEanti{\overprint{\raise2.5ex\rlap{ \CD@rH$\scriptstyle\nwarrow$}}}%%
+\def\NWclck{\overprint{\raise2.5ex\llap{$\scriptstyle\nearrow$ \CD@rH}}}%%
+\def\NWanti{\overprint{\raise2.5ex\llap{$\scriptstyle\swarrow$ \CD@rH}}}%%
+\def\SEclck{\overprint{\lower1ex\rlap{ \CD@rH$\scriptstyle\swarrow$}}}%%
+\def\SEanti{\overprint{\lower1ex\rlap{ \CD@rH$\scriptstyle\nearrow$}}}%%
+\def\SWclck{\overprint{\lower1ex\llap{$\scriptstyle\nwarrow$ \CD@rH}}}%%
+\def\SWanti{\overprint{\lower1ex\llap{$\scriptstyle\searrow$ \CD@rH}}}
+
+%%======================================================================%
+%% %
+%% (23) BITS OF ARROWS %
+%% %
+%%======================================================================%
+
+%% ********** H E A D S ***********
+
+%% \diagramstyle[heads=xxx] defines {>} as {xxx} where xxx
+%% has been defined by \newarrowhead{xxx} and \newarrowtail{xxx}
+
+%% vee head
+\def\rhvee{\mkern-10mu\greaterthan}%%
+\def\lhvee{\lessthan\mkern-10mu}%%
+\def\dhvee{\vboxtoz{\vss\hbox{$\vee$}\kern0pt}}%%
+\def\uhvee{\vboxtoz{\hbox{$\wedge$}\vss}}%%
+\newarrowhead{vee}\rhvee\lhvee\dhvee\uhvee
+
+%% little vee head
+\def\dhlvee{\vboxtoz{\vss\hbox{$\scriptstyle\vee$}\kern0pt}}%%
+\def\uhlvee{\vboxtoz{\hbox{$\scriptstyle\wedge$}\vss}}%%
+\newarrowhead{littlevee}{\mkern1mu\scriptaxis\rhvee}{\scriptaxis\lhvee}%
+\dhlvee\uhlvee\ifx\boldmath\CD@qK%%
+\newarrowhead{boldlittlevee}{\mkern1mu\scriptaxis\rhvee}{\scriptaxis\lhvee}%
+\dhlvee\uhlvee\else%%
+\def\dhblvee{\vboxtoz{\vss\boldscript\vee\kern0pt}}%%
+\def\uhblvee{\vboxtoz{\boldscript\wedge\vss}}%%
+\newarrowhead{boldlittlevee}{\mkern1mu\boldscriptaxis\rhvee}{\boldscriptaxis
+\lhvee}\dhblvee\uhblvee%%
+\fi
+
+%% curly vee head (uses AMS symbols fonts)
+\def\rhcvee{\mkern-10mu\succ}%%
+\def\lhcvee{\prec\mkern-10mu}%%
+\def\dhcvee{\vboxtoz{\vss\hbox{$\curlyvee$}\kern0pt}}%%
+\def\uhcvee{\vboxtoz{\hbox{$\curlywedge$}\vss}}%%
+\newarrowhead{curlyvee}\rhcvee\lhcvee\dhcvee\uhcvee
+
+%% double vee head %% will probably be withdrawn later
+\def\rhvvee{\mkern-13mu\gg}%% 24.8.92 changed 10mu to 13mu
+\def\lhvvee{\ll\mkern-13mu}%% to make rule go through
+\def\dhvvee{\vboxtoz{\vss\hbox{$\vee$}\kern-.6ex\hbox{$\vee$}\kern0pt}}%%
+\def\uhvvee{\vboxtoz{\hbox{$\wedge$}\kern-.6ex \hbox{$\wedge$}\vss}}%%
+\newarrowhead{doublevee}\rhvvee\lhvvee\dhvvee\uhvvee
+
+%% open and closed triangles (uses AMS symbols fonts)
+\def\triangleup{{\scriptscriptstyle\bigtriangleup}}%%
+\def\littletriangledown{{\scriptscriptstyle\triangledown}}%% AMS
+\def\rhtriangle{\triangleright\mkern1.2mu}%% 29.1.93
+\def\lhtriangle{\triangleleft\mkern.8mu}%%
+\def\uhtriangle{\vbox{\kern-.2ex \hbox{$\scriptscriptstyle\bigtriangleup$}%
+\kern-.25ex}}%%
+%% Changed \scriptstyle\triangledown to \scriptscriptstyle\bigtriangledown
+%% at the suggestion of Martin Hofmann (25.11.92) to avoid using AMS symbols
+%% and also for compatibility with upward arrow.
+\def\dhtriangle{\vbox{\kern-.28ex \hbox{$\scriptscriptstyle\bigtriangledown$}%
+\kern-.1ex}}%% 15.1.93 from -.25ex
+\def\dhblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\blacktriangledown$}}}%
+%% AMS
+\def\uhblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\blacktriangle$}}}%
+%% AMS
+\def\dhlblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\scriptstyle
+\blacktriangledown$}}}%% AMS
+\def\uhlblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\scriptstyle
+\blacktriangle$}}}%% AMS
+\newarrowhead{triangle}\rhtriangle\lhtriangle\dhtriangle\uhtriangle
+\newarrowhead{blacktriangle}{\mkern-1mu\blacktriangleright\mkern.4mu}{%
+\blacktriangleleft}\dhblack\uhblack\newarrowhead{littleblack}{\mkern-1mu%
+\scriptaxis\blacktriangleright}{\scriptaxis\blacktriangleleft\mkern-2mu}%
+\dhlblack\uhlblack
+
+%% LaTeX arrowheads
+\def\rhla{\hbox{\setbox0=\lnchar55\dimen0=\wd0\kern-.6\dimen0\ht0\z@\raise
+\axisheight\box0\kern.1\dimen0}}%%
+\def\lhla{\hbox{\setbox0=\lnchar33\dimen0=\wd0\kern.05\dimen0\ht0\z@\raise
+\axisheight\box0\kern-.5\dimen0}}%%
+\def\dhla{\vboxtoz{\vss\rlap{\lnchar77}}}%%
+\def\uhla{\vboxtoz{\setbox0=\lnchar66 \wd0\z@\kern-.15\ht0\box0\vss}}%% 1/93
+\newarrowhead{LaTeX}\rhla\lhla\dhla\uhla
+
+%% double LaTeX arrowheads %% will probably be withdrawn later
+\def\lhlala{\lhla\kern.3em\lhla}%%
+\def\rhlala{\rhla\kern.3em\rhla}%%
+\def\uhlala{\hbox{\uhla\raise-.6ex\uhla}}%%
+\def\dhlala{\hbox{\dhla\lower-.6ex\dhla}}%%
+\newarrowhead{doubleLaTeX}\rhlala\lhlala\dhlala\uhlala
+
+%% circles % \rho is a Greek letter!
+\def\hhO{\scriptaxis\bigcirc\mkern.4mu} \def\hho{{\circ}\mkern1.2mu}%
+\newarrowhead{o}\hho\hho\circ\circ%%
+\newarrowhead{O}\hhO\hhO{\scriptstyle\bigcirc}{\scriptstyle\bigcirc}%%
+
+%% crosses
+\def\rhtimes{\mkern-5mu{\times}\mkern-.8mu}\def\lhtimes{\mkern-.8mu{\times}%
+\mkern-5mu}\def\uhtimes{\setbox0=\hbox{$\times$}\ht0\axisheight\dp0-\ht0%
+\lower\ht0\box0 }\def\dhtimes{\setbox0=\hbox{$\times$}\ht0\axisheight\box0 }%
+\newarrowhead{X}\rhtimes\lhtimes\dhtimes\uhtimes\newarrowhead+++++
+
+%% empty head {} is also available
+
+%% Y from stmaryrd (vertical ones still need large adjustment)
+\newarrowhead{Y}{\mkern-3mu\Yright}{\Yleft\mkern-3mu}\Yup\Ydown
+
+%% ********** H E A D S with S H A F T S ***********
+
+%% little arrow with shaft
+\newarrowhead{->}\rightarrow\leftarrow\downarrow\uparrow
+
+%% arrow with double shaft
+%%\newarrowhead{=>}\Rightarrow\Leftarrow\Downarrow\Uparrow
+\newarrowhead{=>}\Rightarrow\Leftarrow{\@cmex7F}{\@cmex7E}
+
+%% harpoon with shaft (trailing up/left can be changed to down/right)
+\newarrowhead{harpoon}\rightharpoonup\leftharpoonup\downharpoonleft
+\upharpoonleft
+
+%% little double-headed arrow with shaft (uses AMS symbols fonts)
+\def\twoheaddownarrow{\rlap{$\downarrow$}\raise-.5ex\hbox{$\downarrow$}}%%
+\def\twoheaduparrow{\rlap{$\uparrow$}\raise.5ex\hbox{$\uparrow$}}%%
+\newarrowhead{->>}\twoheadrightarrow\twoheadleftarrow\twoheaddownarrow
+\twoheaduparrow
+
+%% ********** T A I L S ***********
+
+%% vee tail
+\def\rtvee{\greaterthan}%%
+\def\ltvee{\mkern-1mu{\lessthan}\mkern.4mu}%% \mkern added 15.1.93
+\def\dtvee{\vee}%%
+\def\utvee{\wedge}%%
+\newarrowtail{vee}\greaterthan\ltvee\vee\wedge
+
+%% little vee tail
+\newarrowtail{littlevee}{\scriptaxis\greaterthan}{\mkern-1mu\scriptaxis
+\lessthan}{\scriptstyle\vee}{\scriptstyle\wedge}\ifx\boldmath\CD@qK
+\newarrowtail{boldlittlevee}{\scriptaxis\greaterthan}{\mkern-1mu\scriptaxis
+\lessthan}{\scriptstyle\vee}{\scriptstyle\wedge}\else\newarrowtail{%
+boldlittlevee}{\boldscriptaxis\greaterthan}{\mkern-1mu\boldscriptaxis
+\lessthan}{\boldscript\vee}{\boldscript\wedge}\fi
+
+%% curly vee tail (uses AMS symbols fonts)
+\newarrowtail{curlyvee}\succ{\mkern-1mu{\prec}\mkern.4mu}\curlyvee\curlywedge
+
+%% open and closed triangle tails (uses AMS symbols fonts)
+\def\rttriangle{\mkern1.2mu\triangleright}%% 29.1.93
+\newarrowtail{triangle}\rttriangle\lhtriangle\dhtriangle\uhtriangle
+\newarrowtail{blacktriangle}\blacktriangleright{\mkern-1mu\blacktriangleleft
+\mkern.4mu}\dhblack\uhblack\newarrowtail{littleblack}{\scriptaxis
+\blacktriangleright\mkern-2mu}{\mkern-1mu\scriptaxis\blacktriangleleft}%
+\dhlblack\uhlblack
+
+%% LaTeX tails
+\def\rtla{\hbox{\setbox0=\lnchar55\dimen0=\wd0\kern-.5\dimen0\ht0\z@\raise
+\axisheight\box0\kern-.2\dimen0}}%%
+\def\ltla{\hbox{\setbox0=\lnchar33\dimen0=\wd0\kern-.15\dimen0\ht0\z@\raise
+\axisheight\box0\kern-.5\dimen0}}%%
+\def\dtla{\vbox{\setbox0=\rlap{\lnchar77}\dimen0=\ht0\kern-.7\dimen0\box0%
+\kern-.1\dimen0}}%% 15.1.93 from -.6
+\def\utla{\vbox{\setbox0=\rlap{\lnchar66}\dimen0=\ht0\kern-.1\dimen0\box0%
+\kern-.6\dimen0}}%%
+\newarrowtail{LaTeX}\rtla\ltla\dtla\utla
+
+%% double vee tail %% will probably be withdrawn later
+\def\rtvvee{\gg\mkern-3mu}%%
+\def\ltvvee{\mkern-3mu\ll}%%
+\def\dtvvee{\vbox{\hbox{$\vee$}\kern-.6ex \hbox{$\vee$}\vss}}%%
+\def\utvvee{\vbox{\vss\hbox{$\wedge$}\kern-.6ex \hbox{$\wedge$}\kern\z@}}%%
+\newarrowtail{doublevee}\rtvvee\ltvvee\dtvvee\utvvee
+
+%% double LaTeX tails %% will probably be withdrawn later
+\def\ltlala{\ltla\kern.3em\ltla}%%
+\def\rtlala{\rtla\kern.3em\rtla}%%
+\def\utlala{\hbox{\utla\raise-.6ex\utla}}%%
+\def\dtlala{\hbox{\dtla\lower-.6ex\dtla}}%%
+\newarrowtail{doubleLaTeX}\rtlala\ltlala\dtlala\utlala
+
+%% bar (as in \mapsto)
+\def\utbar{\vrule height 0.093ex depth0pt width 0.4em}%%
+\let\dtbar\utbar%%
+\def\rtbar{\mkern1.5mu\vrule height 1.1ex depth.06ex width .04em\mkern1.5mu}%
+%%
+\let\ltbar\rtbar%%
+\newarrowtail{mapsto}\rtbar\ltbar\dtbar\utbar%%
+\newarrowtail{|}\rtbar\ltbar\dtbar\utbar%%ascii vertical bar (|)
+
+%% hooks (as in \into): choice of after/above and before/below
+
+\def\rthooka{\raisehook{}+\subset\mkern-1mu}%%
+\def\lthooka{\mkern-1mu\raisehook{}+\supset}%%
+\def\rthookb{\raisehook{}-\subset\mkern-2mu}%%
+\def\lthookb{\mkern-1mu\raisehook{}-\supset}%%
+
+\def\dthooka{\shifthook{}+\cap}%%
+\def\dthookb{\shifthook{}-\cap}%%
+\def\uthooka{\shifthook{}+\cup}%%
+\def\uthookb{\shifthook{}-\cup}%%
+
+\newarrowtail{hooka}\rthooka\lthooka\dthooka\uthooka\newarrowtail{hookb}%
+\rthookb\lthookb\dthookb\uthookb
+
+\ifx\boldmath\CD@qK\newarrowtail{boldhooka}\rthooka\lthooka\dthooka\uthooka
+\newarrowtail{boldhookb}\rthookb\lthookb\dthookb\uthookb\newarrowtail{%
+boldhook}\rthooka\lthooka\dthookb\uthooka\else\def\rtbhooka{\raisehook
+\boldmath+\subset\mkern-1mu}%%
+\def\ltbhooka{\mkern-1mu\raisehook\boldmath+\supset}%%
+\def\rtbhookb{\raisehook\boldmath-\subset\mkern-2mu}%%
+\def\ltbhookb{\mkern-1mu\raisehook\boldmath-\supset}%%
+\def\dtbhooka{\shifthook\boldmath+\cap}%%
+\def\dtbhookb{\shifthook\boldmath-\cap}%%
+\def\utbhooka{\shifthook\boldmath+\cup}%%
+\def\utbhookb{\shifthook\boldmath-\cup}%%
+\newarrowtail{boldhooka}\rtbhooka\ltbhooka\dtbhooka\utbhooka\newarrowtail{%
+boldhookb}\rtbhookb\ltbhookb\dtbhookb\utbhookb\newarrowtail{boldhook}%
+\rtbhooka\ltbhooka\dtbhooka\utbhooka\fi
+
+%% square-ended hooks (used for closed subsets in ``lifting and gluing'')
+\def\dtsqhooka{\shifthook{}+\sqcap}%%
+\def\dtsqhookb{\shifthook{}-\sqcap}%%
+\def\ltsqhooka{\mkern-1mu\raisehook{}+\sqsupset}%%
+\def\ltsqhookb{\mkern-1mu\raisehook{}-\sqsupset}%%
+\def\rtsqhooka{\raisehook{}+\sqsubset\mkern-1mu}%%
+\def\rtsqhookb{\raisehook{}-\sqsubset\mkern-2mu}%%
+\def\utsqhooka{\shifthook{}+\sqcup}%%
+\def\utsqhookb{\shifthook{}-\sqcup}%%
+\newarrowtail{sqhook}\rtsqhooka\ltsqhooka\dtsqhooka\utsqhooka
+
+%% the following seem the better choices at 10pt & 300dpi
+\newarrowtail{hook}\rthooka\lthookb\dthooka\uthooka\newarrowtail{C}\rthooka
+\lthookb\dthooka\uthooka
+
+%% circles
+\newarrowtail{o}\hho\hho\circ\circ%%
+\newarrowtail{O}\hhO\hhO{\scriptstyle\bigcirc}{\scriptstyle\bigcirc}%%
+
+%% crosses
+\newarrowtail{X}\lhtimes\rhtimes\uhtimes\dhtimes\newarrowtail+++++
+
+%% empty tail {} is also available
+
+%% Y from stmaryrd (vertical ones still need adjustment)
+\newarrowtail{Y}\Yright\Yleft\Yup\Ydown
+
+%% harpoon with shaft (trailing up/left can be changed to down/right)
+\newarrowtail{harpoon}\leftharpoondown\rightharpoondown\upharpoonright
+\downharpoonright
+
+%% ********** F I L L E R S ***********
+
+%% shortening is up to 0.15em=2.7mu horiz and 0.35ex vertically at each end.
+
+%% dot {.}, single rule {-} and empty {} fillers are also available
+
+%% double and triple lines
+%%\newarrowfiller{=}==\Vert\Vert%%
+\newarrowfiller{=}=={\@cmex77}{\@cmex77}%% 16.1.93
+\def\vfthree{\mid\!\!\!\mid\!\!\!\mid}%%ascii
+\newarrowfiller{3}\equiv\equiv\vfthree\vfthree
+
+%% dashed line
+\def\vfdashstrut{\vrule width0pt height1.3ex depth0.7ex}%%
+\def\vfthedash{\vrule width\CD@LF height0.6ex depth 0pt}%%
+\def\hfthedash{\CD@AJ\vrule\horizhtdp width 0.26em}%%
+\def\hfdash{\mkern5.5mu\hfthedash\mkern5.5mu}%%
+\def\vfdash{\vfdashstrut\vfthedash}%%
+\newarrowfiller{dash}\hfdash\hfdash\vfdash\vfdash
+
+%% ************* M I D D L E S ************
+
+%% plus
+\newarrowmiddle+++++
+
+%% ************* D I A G O N A L S ************
+
+%% simple arrow heads
+%%\def\nwhTO{\nwarrow\mkern-1mu}%%
+%%\def\nehTO{\mkern-.1mu\nearrow}%%
+%%\def\sehTO{\searrow\mkern-.02mu}%%
+%%\def\swhTO{\mkern-.8mu\swarrow}%%
+
+%%======================================================================%
+%% %
+%% (24) ARROW COMMANDS %
+%% %
+%%======================================================================%
+
+%% change to \iftrue to get mixed heads
+\iffalse%%
+\newarrow{To}----{vee}%%
+\newarrow{Arr}----{LaTeX}%%
+\newarrow{Dotsto}....{vee}%%
+\newarrow{Dotsarr}....{LaTeX}%%
+\newarrow{Dashto}{}{dash}{}{dash}{vee}%%
+\newarrow{Dasharr}{}{dash}{}{dash}{LaTeX}%%
+\newarrow{Mapsto}{mapsto}---{vee}%%
+\newarrow{Mapsarr}{mapsto}---{LaTeX}%%
+\newarrow{IntoA}{hooka}---{vee}%%
+\newarrow{IntoB}{hookb}---{vee}%%
+\newarrow{Embed}{vee}---{vee}%%
+\newarrow{Emarr}{LaTeX}---{LaTeX}%%
+\newarrow{Onto}----{doublevee}%%
+\newarrow{Dotsonarr}....{doubleLaTeX}%%
+\newarrow{Dotsonto}....{doublevee}%%
+\newarrow{Dotsonarr}....{doubleLaTeX}%%
+\else%%
+\newarrow{To}---->%%
+\newarrow{Arr}---->%%
+\newarrow{Dotsto}....>%%
+\newarrow{Dotsarr}....>%%
+\newarrow{Dashto}{}{dash}{}{dash}>%%
+\newarrow{Dasharr}{}{dash}{}{dash}>%%
+\newarrow{Mapsto}{mapsto}--->%%
+\newarrow{Mapsarr}{mapsto}--->%%
+\newarrow{IntoA}{hooka}--->%%
+\newarrow{IntoB}{hookb}--->%%
+\newarrow{Embed}>--->%%
+\newarrow{Emarr}>--->%%
+\newarrow{Onto}----{>>}%%
+\newarrow{Dotsonarr}....{>>}%%
+\newarrow{Dotsonto}....{>>}%%
+\newarrow{Dotsonarr}....{>>}%%
+\fi%%
+
+\newarrow{Implies}===={=>}%% minimum cell height 9.5pt
+\newarrow{Project}----{triangle}%%
+\newarrow{Pto}----{harpoon}%% partial function
+\newarrow{Relto}{harpoon}---{harpoon}%% binary relation
+
+\newarrow{Eq}=====%%
+\newarrow{Line}-----%%
+\newarrow{Dots}.....%%
+\newarrow{Dashes}{}{dash}{}{dash}{}%%
+
+%% square hooked arrow (used in my ``gluing and lifting'' paper)
+\newarrow{SquareInto}{sqhook}--->
+
+%% braces and parentheses
+%% \newarrow gives inappropriate directions, so we change the names
+%% the vertical filler is too far to the right; horizontal too high
+%% the vertical middles are too low with midvshaft
+%% maybe we'll add square brackets and the integral sign one day
+\newarrowhead{cmexbra}{\@cmex7B}{\@cmex7C}{\@cmex3B}{\@cmex38}%%
+\newarrowtail{cmexbra}{\@cmex7A}{\@cmex7D}{\@cmex39}{\@cmex3A}%%
+\newarrowmiddle{cmexbra}{\braceru\bracelu}{\bracerd\braceld}{\vcenter{%
+\hbox@maths{\@cmex3D\mkern-2mu}}}%% right
+{\vcenter{\hbox@maths{\mkern2mu\@cmex3C}}}%% left
+\newarrow{@brace}{cmexbra}-{cmexbra}-{cmexbra}%% braces
+\newarrow{@parenth}{cmexbra}---{cmexbra}%% straight parentheses
+\def\rightBrace{\d@brace[thick,cmex]}%%ASCII square brackets []
+\def\leftBrace{\u@brace[thick,cmex]}%%ASCII square brackets []
+\def\upperBrace{\r@brace[thick,cmex]}%%ASCII square brackets []
+\def\lowerBrace{\l@brace[thick,cmex]}%%ASCII square brackets []
+\def\rightParenth{\d@parenth[thick,cmex]}%%ASCII square brackets []
+\def\leftParenth{\u@parenth[thick,cmex]}%%ASCII square brackets []
+\def\upperParenth{\r@parenth[thick,cmex]}%%ASCII square brackets []
+\def\lowerParenth{\l@parenth[thick,cmex]}%%ASCII square brackets []
+
+%% synonyms for reverse compatibility
+
+\let\uFrom\uTo%%
+\let\lFrom\lTo%%
+\let\uDotsfrom\uDotsto%%
+\let\lDotsfrom\lDotsto%%
+\let\uDashfrom\uDashto%%
+\let\lDashfrom\lDashto%%
+\let\uImpliedby\uImplies%%
+\let\lImpliedby\lImplies%%
+\let\uMapsfrom\uMapsto%%
+\let\lMapsfrom\lMapsto%%
+\let\lOnfrom\lOnto%%
+\let\uOnfrom\uOnto%%
+\let\lPfrom\lPto%%
+\let\uPfrom\uPto%%
+
+\let\uInfromA\uIntoA%%
+\let\uInfromB\uIntoB%%
+\let\lInfromA\lIntoA%%
+\let\lInfromB\lIntoB%%
+\let\rInto\rIntoA%%
+\let\lInto\lIntoA%%
+\let\dInto\dIntoB%%
+\let\uInto\uIntoA%%
+\let\ruInto\ruIntoA%%
+\let\luInto\luIntoA%%
+\let\rdInto\rdIntoA%%
+\let\ldInto\ldIntoA%%
+%%
+\let\hEq\rEq%%
+\let\vEq\uEq%%
+\let\hLine\rLine%%
+\let\vLine\uLine%%
+\let\hDots\rDots%%
+\let\vDots\uDots%%
+\let\hDashes\rDashes%%
+\let\vDashes\uDashes%%
+
+%%=========================================================================%
+%% The following are included for reverse compatibility only.
+%%=========================================================================%
+\let\NW\luTo\let\NE\ruTo\let\SW\ldTo\let\SE\rdTo\def\nNW{\luTo(2,3)}\def\nNE{%
+\ruTo(2,3)}%%ascii
+\def\sSW{\ldTo(2,3)}\def\sSE{\rdTo(2,3)}%%ascii
+\def\wNW{\luTo(3,2)}\def\eNE{\ruTo(3,2)}%%ascii
+\def\wSW{\ldTo(3,2)}\def\eSE{\rdTo(3,2)}%%ascii
+\def\NNW{\luTo(2,4)}\def\NNE{\ruTo(2,4)}%%ascii
+\def\SSW{\ldTo(2,4)}\def\SSE{\rdTo(2,4)}%%ascii
+\def\WNW{\luTo(4,2)}\def\ENE{\ruTo(4,2)}%%ascii
+\def\WSW{\ldTo(4,2)}\def\ESE{\rdTo(4,2)}%%ascii
+\def\NNNW{\luTo(2,6)}\def\NNNE{\ruTo(2,6)}%%ascii
+\def\SSSW{\ldTo(2,6)}\def\SSSE{\rdTo(2,6)}%%ascii
+\def\WWNW{\luTo(6,2)}\def\EENE{\ruTo(6,2)}%%ascii
+\def\WWSW{\ldTo(6,2)}\def\EESE{\rdTo(6,2)}%%ascii
+
+\let\NWd\luDotsto\let\NEd\ruDotsto\let\SWd\ldDotsto\let\SEd\rdDotsto\def\nNWd
+{\luDotsto(2,3)}\def\nNEd{\ruDotsto(2,3)}%%ascii
+\def\sSWd{\ldDotsto(2,3)}\def\sSEd{\rdDotsto(2,3)}%%ascii
+\def\wNWd{\luDotsto(3,2)}\def\eNEd{\ruDotsto(3,2)}%%ascii
+\def\wSWd{\ldDotsto(3,2)}\def\eSEd{\rdDotsto(3,2)}%%ascii
+\def\NNWd{\luDotsto(2,4)}\def\NNEd{\ruDotsto(2,4)}%%ascii
+\def\SSWd{\ldDotsto(2,4)}\def\SSEd{\rdDotsto(2,4)}%%ascii
+\def\WNWd{\luDotsto(4,2)}\def\ENEd{\ruDotsto(4,2)}%%ascii
+\def\WSWd{\ldDotsto(4,2)}\def\ESEd{\rdDotsto(4,2)}%%ascii
+\def\NNNWd{\luDotsto(2,6)}\def\NNNEd{\ruDotsto(2,6)}%%ascii
+\def\SSSWd{\ldDotsto(2,6)}\def\SSSEd{\rdDotsto(2,6)}%%ascii
+\def\WWNWd{\luDotsto(6,2)}\def\EENEd{\ruDotsto(6,2)}%%ascii
+\def\WWSWd{\ldDotsto(6,2)}\def\EESEd{\rdDotsto(6,2)}%%ascii
+
+\let\NWl\luLine\let\NEl\ruLine\let\SWl\ldLine\let\SEl\rdLine\def\nNWl{\luLine
+(2,3)}\def\nNEl{\ruLine(2,3)}%%ascii
+\def\sSWl{\ldLine(2,3)}\def\sSEl{\rdLine(2,3)}%%ascii
+\def\wNWl{\luLine(3,2)}\def\eNEl{\ruLine(3,2)}%%ascii
+\def\wSWl{\ldLine(3,2)}\def\eSEl{\rdLine(3,2)}%%ascii
+\def\NNWl{\luLine(2,4)}\def\NNEl{\ruLine(2,4)}%%ascii
+\def\SSWl{\ldLine(2,4)}\def\SSEl{\rdLine(2,4)}%%ascii
+\def\WNWl{\luLine(4,2)}\def\ENEl{\ruLine(4,2)}%%ascii
+\def\WSWl{\ldLine(4,2)}\def\ESEl{\rdLine(4,2)}%%ascii
+\def\NNNWl{\luLine(2,6)}\def\NNNEl{\ruLine(2,6)}%%ascii
+\def\SSSWl{\ldLine(2,6)}\def\SSSEl{\rdLine(2,6)}%%ascii
+\def\WWNWl{\luLine(6,2)}\def\EENEl{\ruLine(6,2)}%%ascii
+\def\WWSWl{\ldLine(6,2)}\def\EESEl{\rdLine(6,2)}%%ascii
+
+\let\NWld\luDots\let\NEld\ruDots\let\SWld\ldDots\let\SEld\rdDots\def\nNWld{%
+\luDots(2,3)}\def\nNEld{\ruDots(2,3)}%%ascii
+\def\sSWld{\ldDots(2,3)}\def\sSEld{\rdDots(2,3)}%%ascii
+\def\wNWld{\luDots(3,2)}\def\eNEld{\ruDots(3,2)}%%ascii
+\def\wSWld{\ldDots(3,2)}\def\eSEld{\rdDots(3,2)}%%ascii
+\def\NNWld{\luDots(2,4)}\def\NNEld{\ruDots(2,4)}%%ascii
+\def\SSWld{\ldDots(2,4)}\def\SSEld{\rdDots(2,4)}%%ascii
+\def\WNWld{\luDots(4,2)}\def\ENEld{\ruDots(4,2)}%%ascii
+\def\WSWld{\ldDots(4,2)}\def\ESEld{\rdDots(4,2)}%%ascii
+\def\NNNWld{\luDots(2,6)}\def\NNNEld{\ruDots(2,6)}%%ascii
+\def\SSSWld{\ldDots(2,6)}\def\SSSEld{\rdDots(2,6)}%%ascii
+\def\WWNWld{\luDots(6,2)}\def\EENEld{\ruDots(6,2)}%%ascii
+\def\WWSWld{\ldDots(6,2)}\def\EESEld{\rdDots(6,2)}%%ascii
+
+\let\NWe\luEmbed\let\NEe\ruEmbed\let\SWe\ldEmbed\let\SEe\rdEmbed\def\nNWe{%
+\luEmbed(2,3)}\def\nNEe{\ruEmbed(2,3)}%%ascii
+\def\sSWe{\ldEmbed(2,3)}\def\sSEe{\rdEmbed(2,3)}%%ascii
+\def\wNWe{\luEmbed(3,2)}\def\eNEe{\ruEmbed(3,2)}%%ascii
+\def\wSWe{\ldEmbed(3,2)}\def\eSEe{\rdEmbed(3,2)}%%ascii
+\def\NNWe{\luEmbed(2,4)}\def\NNEe{\ruEmbed(2,4)}%%ascii
+\def\SSWe{\ldEmbed(2,4)}\def\SSEe{\rdEmbed(2,4)}%%ascii
+\def\WNWe{\luEmbed(4,2)}\def\ENEe{\ruEmbed(4,2)}%%ascii
+\def\WSWe{\ldEmbed(4,2)}\def\ESEe{\rdEmbed(4,2)}%%ascii
+\def\NNNWe{\luEmbed(2,6)}\def\NNNEe{\ruEmbed(2,6)}%%ascii
+\def\SSSWe{\ldEmbed(2,6)}\def\SSSEe{\rdEmbed(2,6)}%%ascii
+\def\WWNWe{\luEmbed(6,2)}\def\EENEe{\ruEmbed(6,2)}%%ascii
+\def\WWSWe{\ldEmbed(6,2)}\def\EESEe{\rdEmbed(6,2)}%%ascii
+
+\let\NWo\luOnto\let\NEo\ruOnto\let\SWo\ldOnto\let\SEo\rdOnto\def\nNWo{\luOnto
+(2,3)}\def\nNEo{\ruOnto(2,3)}%%ascii
+\def\sSWo{\ldOnto(2,3)}\def\sSEo{\rdOnto(2,3)}%%ascii
+\def\wNWo{\luOnto(3,2)}\def\eNEo{\ruOnto(3,2)}%%ascii
+\def\wSWo{\ldOnto(3,2)}\def\eSEo{\rdOnto(3,2)}%%ascii
+\def\NNWo{\luOnto(2,4)}\def\NNEo{\ruOnto(2,4)}%%ascii
+\def\SSWo{\ldOnto(2,4)}\def\SSEo{\rdOnto(2,4)}%%ascii
+\def\WNWo{\luOnto(4,2)}\def\ENEo{\ruOnto(4,2)}%%ascii
+\def\WSWo{\ldOnto(4,2)}\def\ESEo{\rdOnto(4,2)}%%ascii
+\def\NNNWo{\luOnto(2,6)}\def\NNNEo{\ruOnto(2,6)}%%ascii
+\def\SSSWo{\ldOnto(2,6)}\def\SSSEo{\rdOnto(2,6)}%%ascii
+\def\WWNWo{\luOnto(6,2)}\def\EENEo{\ruOnto(6,2)}%%ascii
+\def\WWSWo{\ldOnto(6,2)}\def\EESEo{\rdOnto(6,2)}%%ascii
+
+\let\NWod\luDotsonto\let\NEod\ruDotsonto\let\SWod\ldDotsonto\let\SEod
+\rdDotsonto\def\nNWod{\luDotsonto(2,3)}\def\nNEod{\ruDotsonto(2,3)}%%ascii
+\def\sSWod{\ldDotsonto(2,3)}\def\sSEod{\rdDotsonto(2,3)}%%ascii
+\def\wNWod{\luDotsonto(3,2)}\def\eNEod{\ruDotsonto(3,2)}%%ascii
+\def\wSWod{\ldDotsonto(3,2)}\def\eSEod{\rdDotsonto(3,2)}%%ascii
+\def\NNWod{\luDotsonto(2,4)}\def\NNEod{\ruDotsonto(2,4)}%%ascii
+\def\SSWod{\ldDotsonto(2,4)}\def\SSEod{\rdDotsonto(2,4)}%%ascii
+\def\WNWod{\luDotsonto(4,2)}\def\ENEod{\ruDotsonto(4,2)}%%ascii
+\def\WSWod{\ldDotsonto(4,2)}\def\ESEod{\rdDotsonto(4,2)}%%ascii
+\def\NNNWod{\luDotsonto(2,6)}\def\NNNEod{\ruDotsonto(2,6)}%%ascii
+\def\SSSWod{\ldDotsonto(2,6)}\def\SSSEod{\rdDotsonto(2,6)}%%ascii
+\def\WWNWod{\luDotsonto(6,2)}\def\EENEod{\ruDotsonto(6,2)}%%ascii
+\def\WWSWod{\ldDotsonto(6,2)}\def\EESEod{\rdDotsonto(6,2)}%%ascii
+
+%%======================================================================%
+%% %
+%% (25) MISCELLANEOUS %
+%% %
+%%======================================================================%
+
+\def\labelstyle{%%
+\ifincommdiag%%
+\textstyle%%
+\else%%
+\scriptstyle%%
+\fi}%%
+\let\objectstyle\displaystyle
+
+\newdiagramgrid{pentagon}{0.618034,0.618034,1,1,1,1,0.618034,0.618034}{1.%
+17557,1.17557,1.902113,1.902113}
+
+\newdiagramgrid{perspective}{0.75,0.75,1.1,1.1,0.9,0.9,0.95,0.95,0.75,0.75}{0%
+.75,0.75,1.1,1.1,0.9,0.9}
+
+\diagramstyle[%%ascii open square bracket
+dpi=300,%% office laserwriters are usually 300 dots per inch
+vmiddle,nobalance,%% vertical and horizontal positioning
+loose,%% allow rows and columns to stretch
+thin,%% line10 arrows; default rule thickness (TeXbook p447)
+pilespacing=10pt,%
+%% parallel vertical separation (horizontals: half this)
+shortfall=4pt,%% distance between arrowheads and their targets
+%% The following are defaulted on entry to the diagram itself.
+%% l>=2em minimum length of horizontal arrow shafts in text
+%% l>=1em ditto in diagrams
+%% size=3em cell size
+%% heads=LaTeX arrowheads
+]%%ascii close square bracket
+
+%% process options to LaTeX2e's \usepackage[options]{diagrams}
+\ifx\ProcessOptions\CD@qK\else\CD@PK\ProcessOptions\relax\CD@FF\CD@e\fi\fi
+
+%%============================== THE END ====================================
+\CD@vE\message{| >>>>>>>> POSTSCRIPT MODE (DVIPS) IS NOW THE DEFAULT <<<<<<<<%
+<<<<|}\message{|(DVI mode has not been supported since 1992 and produces
+inferior|}\message{|results which are completely unsuitable for publication.
+However,|}\message{|if you really still need it, you can still get it by
+loading the |}\message{|package using ``\string\usepackage[UglyObsolete]{%
+diagrams}'' instead. ) |}\else\message{| >>>>>>>> USING UGLY OBSOLETE DVI CODE
+- PLEASE STOP <<<<<<<<<<<<|}\message{|(DVI mode has not been supported since
+1992 and produces inferior|}\message{|results which are completely unsuitable
+for publication - Please |}\message{|use the PostScript or PDF mode instead,
+for much better results.)|}\fi\cdrestoreat
+%% restore old category code for @ etc
+\message{===================================================================}%
+%% This is the end of Paul Taylor's commutative diagrams package.
+
diff --git a/macros/generic/diagrams/taylor/V3,93.tex b/macros/generic/diagrams/taylor/V3,93.tex
new file mode 100644
index 0000000000..1969460bb1
--- /dev/null
+++ b/macros/generic/diagrams/taylor/V3,93.tex
@@ -0,0 +1,1912 @@
+\message{==================================================================}%
+\message{<Paul Taylor's commutative diagrams - version 3.93, 9 June 2009>}%%
+%%
+%% This code runs the LaTeX \ProvidesPackage command iff it is defined.
+%% included at the request of Michael Downes <mjd@ams.org> March 2002.
+%% Put \listfiles in your LaTeX preamble to see what this is for.
+\expandafter\ifx\csname ProvidesPackage\endcsname\relax\toks0=\expandafter{%
+\fi\ProvidesPackage{diagrams}[2008/10/15 v3.93 Paul Taylor's commutative
+diagrams]%%
+\toks0=\bgroup}%%
+%%======================================================================%
+%% TeX macros for drawing category-theoretic diagrams %
+%% %
+%% Paul Taylor %
+%% %
+%% www.PaulTaylor.EU/diagrams %
+%% www.ctan.org/tex-archive/macros/generic/diagrams/taylor/ %
+%% %
+%% PLEASE READ THE MANUAL! %
+%% %
+%% Please ensure that you are registered with me as a user so that %
+%% you can be informed of future releases. Any electronic mail %
+%% message with "commutative" or "diagram" in the subject line %
+%% (such as your request for the package, a question about it, or %
+%% even an otherwise blank message) automatically registers you. %
+%% %
+%% %
+%% CONTENTS: %
+%% (O) corruption-sensitive hacks (to approx line 330) %
+%% Arrow components & commands - starts approx line 1240 %
+%% (22) auxillary macros for adjustment of components %
+%% (23) bits of arrows (\rhvee etc) %
+%% (24) arrow commands (\rTo etc) %
+%% (25) miscellaneous %
+%% Apart from these five sections, the rest is intended to be totally %
+%% meaningless in the undocumented version, which is approximately %
+%% 1913 lines long. Please do not waste trees by printing it out. %
+%% %
+%% COPYRIGHT NOTICE: %
+%% This package may be copied and used freely for any academic %
+%% (not commercial or military) purpose, on condition that it %
+%% is not altered in any way, and that an acknowledgement is %
+%% included in any published work making substantial use of it. %
+%% %
+%% IT IS SUPPLIED "AS IS", WITHOUT WARRANTY, EXPRESS OR IMPLIED. %
+%% %
+%% If you are doing something where mistakes cost money (or where %
+%% success brings financial profit) then you must use commercial %
+%% software, not this package. In any case, please remember to %
+%% keep several backup copies of all files, and check everything %
+%% visually before sending final copy to the publishers. %
+%% %
+%% You may use this package as a (substantial) aid to writing an %
+%% academic research or text book on condition that %
+%% (i) you contact me at a suitable time to ensure that you have %
+%% an up-to-date version (and any infelicities can be fixed), %
+%% (ii) you send me a copy of the book when it's published. %
+%% %
+%% HISTORY %
+%% 3.93 Released 9 June 2009 %
+%% Added support for XeTeX, with help from Apostolos Syropoulos. %
+%% 3.92 Released 31 December 2007 %
+%% 3.91 Released 31 August 2006 %
+%% Renamed "noPostScript" option as "UglyObsolete". %
+%% 3.90 Released 11 April 2004 %
+%% use PostScript=Rokicki not pure DVI by default %
+%% 3.89 Released 7 July 2002 %
+%% Added support for pdftex, which is recognised automatically. %
+%% 3.88 Released 1 September 2000 %
+%% Square hook tail: \newarrow{SquareInto}{sqhook}---> %
+%% 3.87 Released 1 September 1999 %
+%% This version was used for the final 1200dpi PS copy of my book %
+%% ``Practical Foundations of Mathematics'' (Cambridge Univ Press) %
+%% see http://www.PaulTaylor.EU/Practical_Foundations %
+%% 3.86 Released 1 September 1998 %
+%% New options hug and nohug in PostScript mode: [PS,nohug] uses %
+%% PS for the arrows without rotating the labels, but the way of %
+%% calculating the actual position of these horizontal labels on %
+%% will remain subject to alteration for some period of time --- %
+%% please send me examples if you feel that adjustment is needed. %
+%% %
+%% midvshaft and snake for vertical arrows %
+%% New option [gap=width] (default=shortfall) to use instead of %
+%% ~{\;} on horizontals and PS diagonals, as this caused ^ and _ %
+%% labels to be moved too far away from the shaft. %
+%% Added >-> and <-< heads and tails, same as >> and << but the %
+%% shaft goes *through* the extra arrowhead. %
+%% 3.85 Released 20 August 1997 %
+%% New option [crab=distance] shifts horizontals and PS diagonals %
+%% transversally by the specified distance (positive=upward). %
+%% New option [snake=distance] shifts midshaft horizontals and %
+%% PS diagonals longitudinally by the specified distance. %
+%% New option [leftflush], like [flushleft] but reckons alignment %
+%% from multiple verticals, or from text if there's no vertical. %
+%% Most of the history has been suppressed from the user version. %
+%% 3.83 Released 18 May 1995 %
+%% "dotted" option (set dot filler on maps) %
+%% Parallel maps (\pile) outside diagrams stretch correctly. %
+%% Option "LaTeXeqno" uses LaTeX's equation number and style %
+%% for "eqno"; LaTeX's \label command picks this up. %
+%% Suppress warnings & 2nd pass errors with "silent" option. %
+%% 3.81 Second alpha release 18 July 1994 %
+%% \overprint{text} sets text in maths and overprints it in the %
+%% current cell, centered in the column irrespective of other stuff%
+%% "repositionpullbacks" option uses this for \SEpbk etc %
+%% \newdiagramgrid declaration, grid option and pentagon grid. %
+%% 3.80 Alpha release for adjusted diagonals 15 July 1994. %
+%% Introduced landscape and portrait options. %
+%% Diagonals adjusted to meet their endpoints, at last!!!! %
+%% 3.28 Released 30 November 1993 %
+%% Peter Freyd's \puncture symbol provided. %
+%% 3.25 Released 30 January 1993 %
+%% LaTeX heads made default (unless \tenln undefined, when vee) %
+%% Circle, cross, little vee, little black triangle heads. %
+%% First-use warning when defaulted diagonal components are used. %
+%% AMSTEX emulation - works at least when amstex not present. %
+%% 3.24 Release 7 Sept 1992 advertised to users. %
+%% PostScript option introduced: %
+%% LaTeX, vee, curlyvee, triangle & blacktriangle heads & tails %
+%% TPIC option introduced as an alternative to \LaTeX@make@line. %
+%% Postscript arrows (basic code). %
+%% Implemented \newarrow \newarrowhead etc. %
+%% Horizontal arrows outside diagram can stretch by wordspacing. %
+%% Added < and > for labels on left and right of arrow; %
+%% 3.16 (20.7.90) as mass mailed; only have mangled version %
+%% -- all following version numbers are post-facto -- %
+%% 3 (Jan 90) stretching vertical arrows %
+%% 2 (Sept 89) horizontals stretch to objects; "superscript" labels %
+%% 1 (1987) horizontal arrows stretch to edge of cell %
+%% 0 (1986) implementation of Knuth's TeXercise 18.46 for my thesis %
+%%======================================================================%
+
+%%======================================================================%
+%% %
+%% (1) CORRUPTION-SENSITIVE HACKS %
+%% %
+%%======================================================================%
+
+%% CORRUPTION & \catcode WARNING
+
+%% BITNET (IBM) machines may corrupt certain important characters
+%% in transmission by electronic mail:
+%% 0123456789=digits, abcdefghijklmnopqrstuvwxyz=lowers,
+%% ABCDEFGHIJKLMNOPQRSTUVWXYZ=uppers, @=at (internal names),
+%% {}=curly braces (grouping), \=backslash (keywords),
+%% %=percent (comment), #=hash/sharp (argument), +=plus, -=minus,
+%% <>=angle brackets (relations \ifnum,\ifdim), ==equals,
+%% ,=comma, .=dot, :=colon, ;=semicolon, =space
+%% $=dollar (maths) is only used in the "bits of maps" section
+
+%% The following characters are marked by a comment including the word "ASCII",
+%% except in comments and messages:
+%% &=and (alignment), ~=tilde, |=vertical, []=square brackets,
+%% ^=caret (superscript), _=underline (subscript),
+%% "=double quote (hex), ()=round brackets,
+%% /=slash, ?=query, !=pling/bang,
+%% The following are no longer flagged:
+%% `=grave/backquote (catcodes), '=acute/single quote (octal),
+
+%% The \catcode's marked * are assumed for reading this file:
+%% \=0* {=1* }=2* $=3 &=4 return=5* #=6 ^=7 _=8 ignored=9*
+%% space=10* letter=11* other=12 active=13 %=14* invalid=15
+%% If you want to load this package inside Stallman's "texinfo", you must do
+%%% @catcode`@\=0 \catcode`\%=14 \input diagrams \catcode`\%=12 \catcode`\\=13
+%% and then use @diagram @rTo @\ @enddiagram etc. (braces {} stay the same).
+%% Also need @catcode`@&=4.
+
+%%*** You *MUST NOT* use the internal commands (with names beginning \CD@)****
+
+%% don't load me twice!
+\ifx\diagram\isundefined\else\message{WARNING: the \string\diagram\space
+command is already defined and will not be loaded again}\expandafter\endinput
+\fi
+
+%% make @ letter, saving its old code to restore at the end of this file
+%%% look for this on the last line of the file if you think something's missing!
+%% the other \catcode assignments are to make it work with texinfo.
+\edef\cdrestoreat{%%
+\noexpand\catcode`\noexpand\@=\the\catcode`\@%%
+\noexpand\catcode`\noexpand\#=\the\catcode`\#%%
+\noexpand\catcode`\noexpand\$=\the\catcode`\$%%
+\noexpand\catcode`\noexpand\<=\the\catcode`\<%%
+\noexpand\catcode`\noexpand\>=\the\catcode`\>%%
+\noexpand\catcode`\noexpand\:=\the\catcode`\:%% Johannes L. Braams's
+\noexpand\catcode`\noexpand\;=\the\catcode`\;%% Babel languages package
+\noexpand\catcode`\noexpand\!=\the\catcode`\!%% makes these \active.
+\noexpand\catcode`\noexpand\?=\the\catcode`\?%%
+\noexpand\catcode`\noexpand\+=\the\catcode'53%% texinfo @+ is @outer@active
+}\catcode`\@=11 \catcode`\#=6 \catcode`\<=12 \catcode`\>=12 \catcode'53=12
+\catcode`\:=12 \catcode`\;=12 \catcode`\!=12 \catcode`\?=12
+
+%% Change y to n if pool_size in your implementation of TeX is small.
+%% This is reasonable if you have a small ("personal") computer, but if you
+%%% have a sun, dec, hp, ... workstation or a mainframe, complain to your local
+%% system manager and get him/her to install a version of TeX with bigger
+%% parameters. The "hash size" (number of command names) gets you next.
+\ifx\diagram@help@messages\CD@qK\let\diagram@help@messages y\fi
+
+%% The following macro is used to include literal PostScript commands in the
+%% DVI file for rotation, etc. Since this goes beyond standard TeX, it is
+%%% dependent on the convention used by your local DVI-to-PostScript translator.
+%% Choose whichever line applies to the program used at your site, or, if
+%% yours is not listed, consult the manual, experiment with this macro and
+%% (please) tell me what is needed to make it work.
+%%
+%%
+%%% dvips (Tomas Rokicki, Radical Eye) labrea.stanford.edu /pub/dvips9999.tar.Z
+%% CTAN: dviware/dvips
+\def\cdps@Rokicki#1{\special{ps:#1}}\let\cdps@dvips\cdps@Rokicki\let
+\cdps@RadicalEye\cdps@Rokicki\let\CD@HB\cdps@Rokicki\let\CD@IK\cdps@Rokicki
+\let\CD@HB\cdps@Rokicki%%
+%% I'm not sure that the rest work.
+%%
+%% dvitps (Stephan Bechtolsheim, Integrated Computer Systems)
+%% arthur.cs.purdue.edu /pub/TeXPS-9.99.tar.Z
+\def\cdps@Bechtolsheim#1{\special{dvitps: Literal "#1"}}%
+%% ASCII two dbl quotes
+\let\cdps@dvitps\cdps@Bechtolsheim\let\cdps@IntegratedComputerSystems
+\cdps@Bechtolsheim%%
+%% dvitops (James Clark)
+%% CTAN: dviware/dvitops
+\def\cdps@Clark#1{\special{dvitops: inline #1}}%%
+\let\cdps@dvitops\cdps@Clark%%
+%% OzTeX (Andrew Trevorrow) cannot be used
+\let\cdps@OzTeX\empty\let\cdps@oztex\empty\let\cdps@Trevorrow\empty%%
+%% dvi3ps (Kevin Coombes)
+%% CTAN: dviware/dvi2ps/dvi3ps
+\def\cdps@Coombes#1{\special{ps-string #1}}%%
+%% psprint (Trevorrow) CTAN: dviware/psprint
+%% dvi2ps (Senn) CTAN: dviware/dvi2ps
+%% psdvi (Elwell) CTAN: dviware/dvi2ps/psdvi
+
+\count@=\year\multiply\count@12 \advance\count@\month%%
+\ifnum\count@>24144 %% (December 2011)
+\message{***********************************************************}%%ascii
+\message{! YOU HAVE AN OUT OF DATE VERSION OF COMMUTATIVE DIAGRAMS! *}%%
+\message{! it expired in December 2009 and is time-bombed for April *}%%
+\message{! You may get an up to date version of this package from *}%%ascii
+\message{! either www.ctan.org or www.PaulTaylor.EU/diagrams/ *}%%
+\message{***********************************************************}%%ascii
+\ifnum\count@>24147 %% (March 2012)
+\errhelp{You may press RETURN and carry on for the time being.}\message{! It
+is embarrassing to see papers in conference proceedings}\message{! and
+journals containing bugs which I had fixed years before.}\message{! It is easy
+to obtain and install a new version, which will}\errmessage{! remain
+compatible with your files. Please get it NOW.}\fi\fi
+
+\def\CD@DE{\global\let}\def\CD@RH{\outer\def}
+
+%% safe names for braces, tab (&) and maths ($), as commands and for messages
+{\escapechar\m@ne\xdef\CD@o{\string\{}\xdef\CD@yC{\string\}}%%
+%%
+%% three ASCII ampersands (ands) (&&&) appear on the next line
+\catcode`\&=4 \CD@DE\CD@Q=&\xdef\CD@S{\string\&}%%ascii three ands
+%%
+%% ASCII ^ and _ each appear twice on next line
+%% six ASCII dollars ($$$$$$) appear on the next two lines.
+\catcode`\$=3 \CD@DE\CD@k=$\CD@DE\CD@ND=$%%ascii three dollars
+\xdef\CD@nC{\string\$}\gdef\CD@LG{$$}%%ascii three dollars
+%%
+%% two ASCII underlines (__) appear on the next line.
+\catcode`\_=8 \CD@DE\CD@lJ=_%%ascii two underlines
+%%
+%% eight ASCII carets (^^^^^^^^) appear on the next three lines.
+\obeylines\catcode`\^=7 \CD@DE\@super=^%%ascii two carets
+\ifnum\newlinechar=10 \gdef\CD@uG{^^J}%%ascii two carets
+\else\ifnum\newlinechar=13 \gdef\CD@uG{^^M}%%ascii two carets
+\else\ifnum\newlinechar=-1 \gdef\CD@uG{^^J}%%ascii two carets
+\else\CD@DE\CD@uG\space\expandafter\message{! input error: \noexpand
+\newlinechar\space is ASCII \the\newlinechar, not LF=10 or CR=13.}%%
+\fi\fi\fi}%%
+
+%% avoid using <> (because I personally re-define them to mean \langle\rangle)
+\mathchardef\lessthan='30474 \mathchardef\greaterthan='30476
+
+%% LaTeX line and arrowhead font
+%% the "hit return" comments show up if the font is missing.
+\ifx\tenln\CD@qK%%
+\font\tenln=line10\relax%% Hit return - who needs diagonals?
+\fi\ifx\tenlnw\CD@qK\ifx\tenln\nullfont\let\tenlnw\nullfont\else%%
+\font\tenlnw=linew10\relax%% Hit return - who needs diagonals?
+\fi\fi%%
+
+%% report line numbers in TeX3 only
+\ifx\inputlineno\CD@qK\csname newcount\endcsname\inputlineno\inputlineno\m@ne
+\message{***************************************************}\message{!
+Obsolete TeX (version 2). You should upgrade to *}\message{! version 3, which
+has been available since 1990. *}\message{***********************************%
+****************}\fi
+
+\def\cd@shouldnt#1{\CD@KB{* THIS (#1) SHOULD NEVER HAPPEN! *}}
+
+%% turn round- and square-bracketed arguments into curly-bracketed
+\def\get@round@pair#1(#2,#3){#1{#2}{#3}}%%ascii round brackets ()
+\def\get@square@arg#1[#2]{#1{#2}}%%ascii square brackets []
+\def\CD@AE#1{\CD@PK\let\CD@DH\CD@@E\CD@@E#1,],}%%ascii sq brackets
+\def\CD@m{[}\def\CD@RD{]}\def\commdiag#1{{\let\enddiagram\relax\diagram[]#1%
+\enddiagram}}
+
+%% ASCII open square bracket occurs on next line
+\def\CD@BF{{\ifx\CD@EH[\aftergroup\get@square@arg\aftergroup\CD@YH\else
+\aftergroup\CD@JH\fi}}%%
+\def\CD@CF#1#2{\def\CD@YH{#1}\def\CD@JH{#2}\futurelet\CD@EH\CD@BF}
+
+%% ASCII vertical bar (|) occurs on the next line
+\def\CD@KK{|}
+
+\def\CD@PB{%% arguments to maps inside diagrams
+\tokcase\CD@DD:\CD@y\break@args;\catcase\@super:\upper@label;\catcase\CD@lJ:%
+\lower@label;\tokcase{~}:\middle@label;%%ascii tilde
+\tokcase<:\CD@iF;%%ascii less-than
+\tokcase>:\CD@iI;%%ascii greater-than
+\tokcase(:\CD@BC;%%)%ascii open round bracket
+\tokcase[:\optional@;%%]%ascii open square bracket
+\tokcase.:\CD@JJ;%%ascii dot 12.7.94
+\catcase\space:\eat@space;\catcase\bgroup:\positional@;\default:\CD@@A
+\break@args;\endswitch}
+
+\def\switch@arg{%% arguments to horizontal maps outside diagrams
+\catcase\@super:\upper@label;\catcase\CD@lJ:\lower@label;\tokcase[:\optional@
+;%%]%ascii open square bracket
+\tokcase.:\CD@JJ;%%ascii dot 12.7.94 % ; was : before 15.6.97
+\catcase\space:\eat@space;\catcase\bgroup:\positional@;\tokcase{~}:%
+\middle@label;%%ascii tilde (questionable!)
+\default:\CD@y\break@args;\endswitch}
+
+%% That's as much as you get to read "in clear" - the rest is private!
+
+\let\CD@tJ\relax\ifx\protect\CD@qK\let\protect\relax\fi\ifx\AtEndDocument
+\CD@qK\def\CD@PG{\CD@gB}\def\CD@GF#1#2{}\else\def\CD@PG#1{\edef\CD@CH{#1}%
+\expandafter\CD@oC\CD@CH\CD@OD}\def\CD@oC#1\CD@OD{\AtEndDocument{\typeout{%
+\CD@tA: #1}}}\def\CD@GF#1#2{\gdef#1{#2}\AtEndDocument{#1}}\fi\def\CD@ZA#1#2{%
+\def#1{\CD@PG{#2\CD@mD\CD@W}\CD@DE#1\relax}}\def\CD@uF#1\repeat{\def\CD@p{#1}%
+\CD@OF}\def\CD@OF{\CD@p\relax\expandafter\CD@OF\fi}\def\CD@sF#1\repeat{\def
+\CD@q{#1}\CD@PF}\def\CD@PF{\CD@q\relax\expandafter\CD@PF\fi}\def\CD@tF#1%
+\repeat{\def\CD@r{#1}\CD@QF}\def\CD@QF{\CD@r\relax\expandafter\CD@QF\fi}\def
+\CD@tG#1#2#3{\def#2{\let#1\iftrue}\def#3{\let#1\iffalse}#3}\if y%
+\diagram@help@messages\def\CD@rG#1#2{\csname newtoks\endcsname#1#1=%
+\expandafter{\csname#2\endcsname}}\else\csname newtoks\endcsname\no@cd@help
+\no@cd@help{See the manual}\def\CD@rG#1#2{\let#1\no@cd@help}\fi\chardef\CD@lF
+=1 \chardef\CD@lI=2 \chardef\CD@MH=5 \chardef\CD@tH=6 \chardef\CD@sH=7
+\chardef\CD@PC=9 \dimendef\CD@hI=2 \dimendef\CD@hF=3 \dimendef\CD@mF=4
+\dimendef\CD@mI=5 \dimendef\CD@wJ=6 \dimendef\CD@tI=8 \dimendef\CD@sI=9
+\skipdef\CD@uB=1 \skipdef\CD@NF=2 \skipdef\CD@tB=3 \skipdef\CD@ZE=4 \skipdef
+\CD@JK=5 \skipdef\CD@kI=6 \skipdef\CD@kF=7 \skipdef\CD@qI=8 \skipdef\CD@pI=9
+\countdef\CD@JC=9 \countdef\CD@gD=8 \countdef\CD@A=7 \def\sdef#1#2{\def#1{#2}%
+}\def\CD@L#1{\expandafter\aftergroup\csname#1\endcsname}\def\CD@RC#1{%
+\expandafter\def\csname#1\endcsname}\def\CD@sD#1{\expandafter\gdef\csname#1%
+\endcsname}\def\CD@vC#1{\expandafter\edef\csname#1\endcsname}\def\CD@nF#1#2{%
+\expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname}\def\CD@EE
+#1#2{\expandafter\CD@DE\csname#1\expandafter\endcsname\csname#2\endcsname}%
+\def\CD@AK#1{\csname#1\endcsname}\def\CD@XJ#1{\expandafter\show\csname#1%
+\endcsname}\def\CD@ZJ#1{\expandafter\showthe\csname#1\endcsname}\def\CD@WJ#1{%
+\expandafter\showbox\csname#1\endcsname}\def\CD@tA{Commutative Diagram}\edef
+\CD@kH{\string\par}\edef\CD@dC{\string\diagram}\edef\CD@HD{\string\enddiagram
+}\edef\CD@EC{\string\\}\def\CD@eF{LaTeX}\ifx\@ignoretrue\CD@qK\expandafter
+\CD@tG\csname if@ignore\endcsname\ignore@true\ignore@false\def\@ignoretrue{%
+\global\ignore@true}\def\@ignorefalse{\global\ignore@false}\fi
+
+\def\CD@g{{\ifnum0=`}\fi}\def\CD@wC{\ifnum0=`{\fi}}\def\catcase#1:{\ifcat
+\noexpand\CD@EH#1\CD@tJ\expandafter\CD@kC\else\expandafter\CD@dJ\fi}\def
+\tokcase#1:{\ifx\CD@EH#1\CD@tJ\expandafter\CD@kC\else\expandafter\CD@dJ\fi}%
+\def\CD@kC#1;#2\endswitch{#1}\def\CD@dJ#1;{}\let\endswitch\relax\def\default:%
+#1;#2\endswitch{#1}\ifx\at@\CD@qK\def\at@{@}\fi\edef\CD@P{\CD@o pt\CD@yC}%
+\CD@RC{\CD@P>}#1>#2>{\CD@z\rTo\sp{#1}\sb{#2}\CD@z}\CD@RC{\CD@P<}#1<#2<{\CD@z
+\lTo\sp{#1}\sb{#2}\CD@z}\CD@RC{\CD@P)}#1)#2){\CD@z\rTo\sp{#1}\sb{#2}\CD@z}%
+%%ascii round
+\CD@RC{\CD@P(}#1(#2({\CD@z\lTo\sp{#1}\sb{#2}\CD@z}%%ascii brack
+\def\CD@O{\def\endCD{\enddiagram}\CD@RC{\CD@P A}##1A##2A{\uTo<{##1}>{##2}%
+\CD@z\CD@z}\CD@RC{\CD@P V}##1V##2V{\dTo<{##1}>{##2}\CD@z\CD@z}\CD@RC{\CD@P=}{%
+\CD@z\hEq\CD@z}\CD@RC{\CD@P\CD@KK}{\vEq\CD@z\CD@z}\CD@RC{\CD@P\string\vert}{%
+\vEq\CD@z\CD@z}\CD@RC{\CD@P.}{\CD@z\CD@z}\let\CD@z\CD@Q}\def\CD@IE{\let\tmp
+\CD@JE\ifcat A\noexpand\CD@CH\else\ifcat=\noexpand\CD@CH\else\ifcat\relax
+\noexpand\CD@CH\else\let\tmp\at@\fi\fi\fi\tmp}\def\CD@JE#1{\CD@nF{tmp}{\CD@P
+\string#1}\ifx\tmp\relax\def\tmp{\at@#1}\fi\tmp}\def\CD@z{}\begingroup
+\aftergroup\def\aftergroup\CD@T\aftergroup{\aftergroup\def\catcode`\@\active
+\aftergroup @\endgroup{\futurelet\CD@CH\CD@IE}}\newcount\CD@uA\newcount\CD@vA
+\newcount\CD@wA\newcount\CD@xA\newdimen\CD@OA\newdimen\CD@PA\CD@tG\CD@gE
+\CD@@A\CD@y\CD@tG\CD@hE\CD@EA\CD@BA\newdimen\CD@RA\newdimen\CD@SA\newcount
+\CD@yA\newcount\CD@zA\newdimen\CD@QA\newbox\CD@DA\CD@tG\CD@lE\CD@dA\CD@bA
+\newcount\CD@LH\newcount\CD@TC\def\CD@V#1#2{\ifdim#1<#2\relax#1=#2\relax\fi}%
+\def\CD@X#1#2{\ifdim#1>#2\relax#1=#2\relax\fi}\newdimen\CD@XH\CD@XH=1sp
+\newdimen\CD@zC\CD@zC\z@\def\CD@cJ{\ifdim\CD@zC=1em\else\CD@nJ\fi}\def\CD@nJ{%
+\CD@zC1em\def\CD@NC{\fontdimen8\textfont3 }\CD@@J\CD@NJ\setbox0=\vbox{\CD@t
+\noindent\CD@k\null\penalty-9993\null\CD@ND\null\endgraf\setbox0=\lastbox
+\unskip\unpenalty\setbox1=\lastbox\global\setbox\CD@IG=\hbox{\unhbox0\unskip
+\unskip\unpenalty\setbox0=\lastbox}\global\setbox\CD@KG=\hbox{\unhbox1\unskip
+\unpenalty\setbox1=\lastbox}}}\newdimen\CD@@I\CD@@I=1true in \divide\CD@@I300
+\def\CD@zH#1{\multiply#1\tw@\advance#1\ifnum#1<\z@-\else+\fi\CD@@I\divide#1%
+\tw@\divide#1\CD@@I\multiply#1\CD@@I}\def\MapBreadth{\afterassignment\CD@gI
+\CD@LF}\newdimen\CD@LF\newdimen\CD@oI\def\CD@gI{\CD@oI\CD@LF\CD@V\CD@@I{4%
+\CD@XH}\CD@X\CD@@I\p@\CD@zH\CD@oI\ifdim\CD@LF>\z@\CD@V\CD@oI\CD@@I\fi\CD@cJ}%
+\def\CD@RJ#1{\CD@zD\count@\CD@@I#1\ifnum\count@>\z@\divide\CD@@I\count@\fi
+\CD@gI\CD@NJ}\def\CD@NJ{\dimen@\CD@QC\count@\dimen@\divide\count@5\divide
+\count@\CD@@I\edef\CD@OC{\the\count@}}\def\CD@AJ{\CD@QJ\z@}\def\CD@QJ#1{%
+\CD@tI\axisheight\advance\CD@tI#1\relax\advance\CD@tI-.5\CD@oI\CD@zH\CD@tI
+\CD@sI-\CD@tI\advance\CD@tI\CD@LF}\newdimen\CD@DC\CD@DC\z@\newdimen\CD@eJ
+\CD@eJ\z@\def\CD@CJ#1{\CD@sI#1\relax\CD@tI\CD@sI\advance\CD@tI\CD@LF\relax}%
+\def\horizhtdp{height\CD@tI depth\CD@sI}\def\axisheight{\fontdimen22\the
+\textfont\tw@}\def\script@axisheight{\fontdimen22\the\scriptfont\tw@}\def
+\ss@axisheight{\fontdimen22\the\scriptscriptfont\tw@}\def\CD@NC{0.4pt}\def
+\CD@VK{\fontdimen3\textfont\z@}\def\CD@UK{\fontdimen3\textfont\z@}\newdimen
+\PileSpacing\newdimen\CD@nA\CD@nA\z@\def\CD@RG{\ifincommdiag1.3em\else2em\fi}%
+\newdimen\CD@YB\def\CellSize{\afterassignment\CD@kB\DiagramCellHeight}%
+\newdimen\DiagramCellHeight\DiagramCellHeight-\maxdimen\newdimen
+\DiagramCellWidth\DiagramCellWidth-\maxdimen\def\CD@kB{\DiagramCellWidth
+\DiagramCellHeight}\def\CD@QC{3em}\newdimen\MapShortFall\def\MapsAbut{%
+\MapShortFall\z@\objectheight\z@\objectwidth\z@}\newdimen\CD@iA\CD@iA\z@
+\CD@tG\CD@vE\CD@aB\CD@ZB\expandafter\ifx\expandafter\iftrue\csname
+ifUglyObsoleteDiagrams\endcsname\CD@ZB\else\CD@aB\fi\CD@nF{%
+ifUglyObsoleteDiagrams}{relax}\newif\ifUglyObsoleteDiagrams\def\CD@nK{\CD@aB
+\UglyObsoleteDiagramsfalse}\def\CD@oK{\CD@ZB\UglyObsoleteDiagramstrue}\CD@vE
+\CD@nK\else\CD@oK\fi\CD@tG\CD@hK\CD@dK\CD@cK\CD@cK\def\CD@sK{\ifx\pdfoutput
+\CD@qK\else\ifx\pdfoutput\relax\else\ifnum\pdfoutput>\z@\CD@pK\fi\fi\fi} \def
+\CD@pK{\global\CD@dK\global\CD@aB\global\UglyObsoleteDiagramsfalse\global\let
+\CD@n\empty\global\let\CD@oK\relax\global\let\CD@pK\relax\global\let\CD@sK
+\relax}\def\CD@tK#1{\special{pdf: literal #1}}\ifx\pdfliteral\CD@qK\else\ifx
+\pdfliteral\relax\else\let\CD@tK\pdfliteral\fi\fi\ifx\XeTeXrevision\CD@qK
+\else\ifx\XeTeXrevision\relax\else\ifdim\XeTeXrevision pt<.996pt \expandafter
+\message{! XeTeX version \XeTeXrevision\space does not support PDF literals,
+so diagonals will not work!}\else\expandafter\message{RUNNING UNDER XETEX
+\XeTeXrevision}\CD@pK\fi\fi\fi\CD@sK\def\newarrowhead{\CD@mG h\CD@BG\CD@GG>}%
+\def\newarrowtail{\CD@mG t\CD@BG\CD@GG>}\def\newarrowmiddle{\CD@mG m\CD@BG
+\hbox@maths\empty}\def\newarrowfiller{\CD@mG f\CD@bE\CD@MK-}\def\CD@mG#1#2#3#%
+4#5#6#7#8#9{\CD@RC{r#1:#5}{#2{#6}}\CD@RC{l#1:#5}{#2{#7}}\CD@RC{d#1:#5}{#3{#8}%
+}\CD@RC{u#1:#5}{#3{#9}}\CD@vC{-#1:#5}{\expandafter\noexpand\csname-#1:#4%
+\endcsname\noexpand\CD@MC}\CD@vC{+#1:#5}{\expandafter\noexpand\csname+#1:#4%
+\endcsname\noexpand\CD@MC}}\CD@ZA\CD@MC{\CD@eF\space diagonals are used unless
+PostScript is set}\def\defaultarrowhead#1{\edef\CD@sJ{#1}\CD@@J}\def\CD@@J{%
+\CD@IJ\CD@sJ<>ht\CD@IJ\CD@sJ<>th}\def\CD@IJ#1#2#3#4#5{\CD@HJ{r#4}{#3}{l#5}{#2%
+}{r#4:#1}\CD@HJ{r#5}{#2}{l#4}{#3}{l#4:#1}\CD@HJ{d#4}{#3}{u#5}{#2}{d#4:#1}%
+\CD@HJ{d#5}{#2}{u#4}{#3}{u#4:#1}}\def\CD@HJ#1#2#3#4#5{\begingroup\aftergroup
+\CD@GJ\CD@L{#1+:#2}\CD@L{#1:#2}\CD@L{#3:#4}\CD@L{#5}\endgroup}\def\CD@GJ#1#2#%
+3#4{\csname newbox\endcsname#1\def#2{\copy#1}\def#3{\copy#1}\setbox#1=\box
+\voidb@x}\def\CD@sJ{}\CD@@J\def\CD@GJ#1#2#3#4{\setbox#1=#4}\ifx\tenln
+\nullfont\def\CD@sJ{vee}\else\let\CD@sJ\CD@eF\fi\def\CD@xF#1#2#3{\begingroup
+\aftergroup\CD@wF\CD@L{#1#2:#3#3}\CD@L{#1#2:#3}\aftergroup\CD@yF\CD@L{#1#2:#3%
+-#3}\CD@L{#1#2:#3}\endgroup}\def\CD@wF#1#2{\def#1{\hbox{\rlap{#2}\kern.4%
+\CD@zC#2}}}\def\CD@yF#1#2{\def#1{\hbox{\rlap{#2}\kern.4\CD@zC#2\kern-.4\CD@zC
+}}}\CD@xF lh>\CD@xF rt>\CD@xF rh<\CD@xF rt<\def\CD@yF#1#2{\def#1{\hbox{\kern-%
+.4\CD@zC\rlap{#2}\kern.4\CD@zC#2}}}\CD@xF rh>\CD@xF lh<\CD@xF lt>\CD@xF lt<%
+\def\CD@wF#1#2{\def#1{\vbox{\vbox to\z@{#2\vss}\nointerlineskip\kern.4\CD@zC#%
+2}}}\def\CD@yF#1#2{\def#1{\vbox{\vbox to\z@{#2\vss}\nointerlineskip\kern.4%
+\CD@zC#2\kern-.4\CD@zC}}}\CD@xF uh>\CD@xF dt>\CD@xF dh<\CD@xF dt<\def\CD@yF#1%
+#2{\def#1{\vbox{\kern-.4\CD@zC\vbox to\z@{#2\vss}\nointerlineskip\kern.4%
+\CD@zC#2}}}\CD@xF dh>\CD@xF ut>\CD@xF uh<\CD@xF ut<\def\CD@BG#1{\hbox{%
+\mathsurround\z@\offinterlineskip\CD@k\mkern-1.5mu{#1}\mkern-1.5mu\CD@ND}}%
+\def\hbox@maths#1{\hbox{\CD@k#1\CD@ND}}\def\CD@GG#1{\hbox to\CD@LF{\setbox0=%
+\hbox{\offinterlineskip\mathsurround\z@\CD@k{#1}\CD@ND}\dimen0.5\wd0\advance
+\dimen0-.5\CD@oI\CD@zH{\dimen0}\kern-\dimen0\unhbox0\hss}}\def\CD@sB#1{\hbox
+to2\CD@LF{\hss\offinterlineskip\mathsurround\z@\CD@k{#1}\CD@ND\hss}}\def
+\CD@vF#1{\hbox{\mathsurround\z@\CD@k{#1}\CD@ND}}\def\CD@bE#1{\hbox{\kern-.15%
+\CD@zC\CD@k{#1}\CD@ND\kern-.15\CD@zC}}\def\CD@MK#1{\vbox{\offinterlineskip
+\kern-.2ex\CD@GG{#1}\kern-.2ex}}\def\@fillh{\xleaders\vrule\horizhtdp}\def
+\@fillv{\xleaders\hrule width\CD@LF}\CD@nF{rf:-}{@fillh}\CD@nF{lf:-}{@fillh}%
+\CD@nF{df:-}{@fillv}\CD@nF{uf:-}{@fillv}\CD@nF{rh:}{null}\CD@nF{rm:}{null}%
+\CD@nF{rt:}{null}\CD@nF{lh:}{null}\CD@nF{lm:}{null}\CD@nF{lt:}{null}\CD@nF{dh%
+:}{null}\CD@nF{dm:}{null}\CD@nF{dt:}{null}\CD@nF{uh:}{null}\CD@nF{um:}{null}%
+\CD@nF{ut:}{null}\CD@nF{+h:}{null}\CD@nF{+m:}{null}\CD@nF{+t:}{null}\CD@nF{-h%
+:}{null}\CD@nF{-m:}{null}\CD@nF{-t:}{null}\def\CD@@D{\hbox{\vrule height 1pt
+depth-1pt width 1pt}}\CD@RC{rf:}{\CD@@D}\CD@nF{lf:}{rf:}\CD@nF{+f:}{rf:}%
+\CD@RC{df:}{\CD@@D}\CD@nF{uf:}{df:}\CD@nF{-f:}{df:}\def\CD@BD{\CD@U\null
+\CD@@D\null\CD@@D\null}\edef\CD@lG{\string\newarrow}\def\newarrow#1#2#3#4#5#6%
+{\begingroup\edef\@name{#1}\edef\CD@oJ{#2}\edef\CD@iD{#3}\edef\CD@QG{#4}\edef
+\CD@jD{#5}\edef\CD@LE{#6}\let\CD@HE\CD@sG\let\CD@FK\CD@BH\let\@x\CD@AH\ifx
+\CD@oJ\CD@iD\let\CD@oJ\empty\fi\ifx\CD@LE\CD@jD\let\CD@LE\empty\fi\def\CD@LI{%
+r}\def\CD@SF{l}\def\CD@IC{d}\def\CD@yJ{u}\def\CD@gH{+}\def\@m{-}\ifx\CD@iD
+\CD@jD\ifx\CD@QG\CD@iD\let\CD@QG\empty\fi\ifx\CD@LE\empty\ifx\CD@iD\CD@aE\let
+\@x\CD@yG\else\let\@x\CD@zG\fi\fi\else\edef\CD@a{\CD@iD\CD@oJ}\ifx\CD@a\empty
+\ifx\CD@QG\CD@jD\let\CD@QG\empty\fi\fi\fi\ifmmode\aftergroup\CD@kG\else\CD@@A
+\CD@oB rh{head\space\space}\CD@LE\CD@oB rf{filler}\CD@iD\CD@oB rm{middle}%
+\CD@QG\ifx\CD@jD\CD@iD\else\CD@oB rf{filler}\CD@jD\fi\CD@oB rt{tail\space
+\space}\CD@oJ\CD@gE\CD@HE\CD@FK\@x\CD@nG l-2+2{lu}{nw}\NorthWest\CD@nG r+2+2{%
+ru}{ne}\NorthEast\CD@nG l-2-2{ld}{sw}\SouthWest\CD@nG r+2-2{rd}{se}\SouthEast
+\else\aftergroup\CD@b\CD@L{r\@name}\fi\fi\endgroup}\def\CD@sG{\CD@vG\CD@LI
+\CD@SF rl\Horizontal@Map}\def\CD@BH{\CD@vG\CD@IC\CD@yJ du\Vertical@Map}\def
+\CD@AH{\CD@vG\CD@gH\@m+-\Vector@Map}\def\CD@yG{\CD@vG\CD@gH\@m+-\Slant@Map}%
+\def\CD@zG{\CD@vG\CD@gH\@m+-\Slope@Map}\catcode`\/=\active\def\CD@vG#1#2#3#4#%
+5{\CD@jG#1#3#5t:\CD@oJ/f:\CD@iD/m:\CD@QG/f:\CD@jD/h:\CD@LE//\CD@jG#2#4#5h:%
+\CD@LE/f:\CD@jD/m:\CD@QG/f:\CD@iD/t:\CD@oJ//}\def\CD@jG#1#2#3#4//{\edef\CD@fG
+{#2}\aftergroup\sdef\CD@L{#1\@name}\aftergroup{\aftergroup#3\CD@M#4//%
+\aftergroup}}\def\CD@M#1/{\edef\CD@EH{#1}\ifx\CD@EH\empty\else\CD@L{\CD@fG#1}%
+\expandafter\CD@M\fi}\catcode`\/=12 \def\CD@nG#1#2#3#4#5#6#7#8{\aftergroup
+\sdef\CD@L{#6\@name}\aftergroup{\CD@L{#2\@name}\if#2#4\aftergroup\CD@CI\else
+\aftergroup\CD@BI\fi\CD@L{#1\@name}%
+%% ASCII round brackets and comma (,) appear on the next line
+\aftergroup(\aftergroup#3\aftergroup,\aftergroup#5\aftergroup)\aftergroup}}%
+\def\CD@oB#1#2#3#4{\expandafter\ifx\csname#1#2:#4\endcsname\relax\CD@y\CD@gB{%
+arrow#3 "#4" undefined}\fi}\CD@rG\CD@VE{All five components must be defined
+before an arrow.}\CD@rG\CD@SE{\CD@lG, unlike \string\HorizontalMap, is a
+declaration.}\def\CD@b#1{\CD@YA{Arrows \string#1 etc could not be defined}%
+\CD@VE}\def\CD@kG{\CD@YA{misplaced \CD@lG}\CD@SE}\def\newdiagramgrid#1#2#3{%
+\CD@RC{cdgh@#1}{#2,],}%% ASCII close square bracket
+\CD@RC{cdgv@#1}{#3,],}}%% ASCII close square bracket
+\CD@tG\ifincommdiag\incommdiagtrue\incommdiagfalse\CD@tG\CD@@F\CD@IF\CD@HF
+\newcount\CD@VA\CD@VA=0 \def\CD@yH{\CD@VA6 }\def\CD@OB{\CD@VA1 \global\CD@yA1
+\CD@DE\CD@YF\empty}\def\CD@YF{}\def\CD@nB#1{\relax\CD@MD\edef\CD@vJ{#1}%
+\begingroup\CD@rE\else\ifcase\CD@VA\ifmmode\else\CD@YG\CD@E0\fi\or\CD@cE5\or
+\CD@YG\CD@F5\or\CD@YG\CD@B5\or\CD@YG\CD@B5\or\CD@YG\CD@C5\or\CD@cE7\or\CD@YG
+\CD@D7\fi\fi\endgroup\xdef\CD@YF{#1}}\def\CD@pB#1#2#3#4#5{\relax\CD@MD\xdef
+\CD@vJ{#4}\begingroup\ifnum\CD@VA<#1 \expandafter\CD@cE\ifcase\CD@VA0\or#2\or
+#3\else#2\fi\else\ifnum\CD@VA<6 \CD@tJ\CD@YG\CD@B#2\else\CD@YG\CD@G#2\fi\fi
+\endgroup\CD@DE\CD@YF\CD@vJ\ifincommdiag\let\CD@ZD#5\else\let\CD@ZD\CD@LK\fi}%
+\def\CD@yI{\global\CD@yA=\ifnum\CD@VA<5 1\else2\fi\relax}\def\CD@OI{\CD@VA
+\CD@yA}\def\CD@cE#1{\aftergroup\CD@VA\aftergroup#1\aftergroup\relax}\def
+\CD@HH{\def\CD@nB##1{\relax}\let\CD@pB\CD@FH\let\CD@yH\relax\let\CD@OB\relax
+\let\CD@yI\relax\let\CD@OI\relax}\def\CD@FH#1#2#3#4#5{\ifincommdiag\let\CD@ZD
+#5\else\xdef\CD@vJ{#4}\let\CD@ZD\CD@LK\fi}\def\CD@YG#1{\aftergroup#1%
+\aftergroup\relax\CD@cE}\def\CD@B{\CD@YE\CD@S\CD@ME\CD@Q}\def\CD@G{\CD@YE{%
+\CD@yC\CD@S}\CD@XE\CD@QD\CD@Q}\def\CD@F{\CD@YE{*\CD@S}\CD@RE\clubsuit\CD@Q}%
+\def\CD@C{\CD@YE{\CD@S*\CD@S}\CD@RE\CD@Q\clubsuit\CD@Q}\def\CD@D{\CD@YE\CD@EC
+\CD@TE\\}\def\CD@E{\CD@YE\CD@nC\CD@QE\CD@k}\def\CD@LK{\CD@YA{\CD@vJ\space
+ignored \CD@dH}\CD@WE}\def\CD@FE{}\def\CD@d{\CD@YA{maps must never be enclosed
+in braces}\CD@OE}\def\CD@dH{outside diagram}\def\CD@FC{\string\HonV, \string
+\VonH\space and \string\HmeetV}\CD@rG\CD@ME{The way that horizontal and
+vertical arrows are terminated implicitly means\CD@uG that they cannot be
+mixed with each other or with \CD@FC.}\CD@rG\CD@XE{\string\pile\space is for
+parallel horizontal arrows; verticals can just be put together in\CD@uG a cell%
+. \CD@FC\space are not meaningful in a \string\pile.}\CD@rG\CD@RE{The
+horizontal maps must point to an object, not each other (I've put in\CD@uG one
+which you're unlikely to want). Use \string\pile\space if you want them
+parallel.}\CD@rG\CD@TE{Parallel horizontal arrows must be in separate layers
+of a \string\pile.}\CD@rG\CD@QE{Horizontal arrows may be used \CD@dH s, but
+must still be in maths.}\CD@rG\CD@WE{Vertical arrows, \CD@FC\space\CD@dH s don%
+'t know where\CD@uG where to terminate.}\CD@rG\CD@OE{This prevents them from
+stretching correctly.}\def\CD@YE#1{\CD@YA{"#1" inserted \ifx\CD@YF\empty
+before \CD@vJ\else between \CD@YF\ifx\CD@YF\CD@vJ s\else\space and \CD@vJ\fi
+\fi}}\count@=\year\multiply\count@12 \advance\count@\month\ifnum\count@>24151
+\message{because this one expired in July 2012!}\expandafter\endinput\fi\def
+\Horizontal@Map{\CD@nB{horizontal map}\CD@LC\CD@TJ\CD@qD}\def\CD@TJ{\CD@GB-%
+9999 \let\CD@ZD\CD@XD\ifincommdiag\else\CD@cJ\ifinpile\else\skip2\z@ plus 1.5%
+\CD@VK minus .5\CD@UK\skip4\skip2 \fi\fi\let\CD@kD\@fillh\CD@nF{fill@dot}{rf:%
+.}}\def\Vector@Map{\CD@HK4}\def\Slant@Map{\CD@HK{\CD@EF255\else6\fi}}\def
+\Slope@Map{\CD@HK\CD@OC}\def\CD@HK#1#2#3#4#5#6{\CD@LC\def\CD@WK{2}\def\CD@aK{%
+2}\def\CD@ZK{1}\def\CD@bK{1}\let\Horizontal@Map\CD@nI\def\CD@OG{#1}\def\CD@NI
+{\CD@U#2#3#4#5#6}}\def\CD@nI{\CD@TJ\CD@JB\let\CD@ZD\CD@TD\CD@qD}\CD@tG\CD@pE
+\CD@rA\CD@qA\CD@rA\def\cds@missives{\CD@rA}\def\CD@TD{\CD@vE\let\CD@OG\CD@OC
+\CD@x\CD@zE\CD@WF\fi\setbox0\hbox{\incommdiagfalse\CD@HI}\CD@pE\CD@aD\else
+\global\CD@YC\CD@bD\fi\ifvoid6 \ifvoid7 \CD@eE\fi\fi\CD@zE\else\CD@BD\global
+\CD@YC\let\CD@CG\CD@IH\CD@YD\fi\else\CD@NI\CD@MI\global\CD@YC\CD@YD\fi}\def
+\CD@LC{\begingroup\dimen1=\MapShortFall\dimen2=\CD@RG\dimen5=\MapShortFall
+\setbox3=\box\voidb@x\setbox6=\box\voidb@x\setbox7=\box\voidb@x\CD@pD
+\mathsurround\z@\skip2\z@ plus1fill minus 1000pt\skip4\skip2 \CD@TB}\CD@tG
+\CD@tE\CD@UB\CD@TB\def\CD@U#1#2#3#4#5{\let\CD@oJ#1\let\CD@iD#2\let\CD@QG#3%
+\let\CD@jD#4\let\CD@LE#5\CD@TB\ifx\CD@iD\CD@jD\CD@UB\fi}\def\CD@qD#1#2#3#4#5{%
+\CD@U#1#2#3#4#5\CD@tD}\def\Vertical@Map{\CD@pB433{vertical map}\CD@cD\CD@LC
+\CD@GB-9995 \let\CD@kD\@fillv\CD@nF{fill@dot}{df:.}\CD@qD}\def\break@args{%
+\def\CD@tD{\CD@ZD}\CD@ZD\endgroup\aftergroup\CD@FE}\def\CD@MJ{\setbox1=\CD@oJ
+\setbox5=\CD@LE\ifvoid3 \ifx\CD@QG\null\else\setbox3=\CD@QG\fi\fi\CD@@G2%
+\CD@iD\CD@@G4\CD@jD}\def\CD@pF#1{\ifvoid1\else\CD@oF1#1\fi\ifvoid2\else\CD@oF
+2#1\fi\ifvoid3\else\CD@oF3#1\fi\ifvoid4\else\CD@oF4#1\fi\ifvoid5\else\CD@oF5#%
+1\fi} \def\CD@oF#1#2{\setbox#1\vbox{\offinterlineskip\box#1\dimen@\prevdepth
+\advance\dimen@-#2\relax\setbox0\null\dp0\dimen@\ht0-\dimen@\box0}}\def\CD@@G
+#1#2{\ifx#2\CD@kD\setbox#1=\box\voidb@x\else\setbox#1=#2\def#2{\xleaders\box#%
+1}\fi}\CD@ZA\CD@BK{\string\HorizontalMap, \string\VerticalMap\space and
+\string\DiagonalMap\CD@uG are obsolete - use \CD@lG\space to pre-define maps}%
+\def\HorizontalMap#1#2#3#4#5{\CD@BK\CD@nB{old horizontal map}\CD@LC\CD@TJ\def
+\CD@oJ{\CD@UH{#1}}\CD@SH\CD@iD{#2}\def\CD@QG{\CD@UH{#3}}\CD@SH\CD@jD{#4}\def
+\CD@LE{\CD@UH{#5}}\CD@tD}\def\VerticalMap#1#2#3#4#5{\CD@BK\CD@pB433{vertical
+map}\CD@cD\CD@LC\CD@GB-9995 \let\CD@kD\@fillv\def\CD@oJ{\CD@GG{#1}}\CD@VH
+\CD@iD{#2}\def\CD@QG{\CD@GG{#3}}\CD@VH\CD@jD{#4}\def\CD@LE{\CD@GG{#5}}\CD@tD}%
+\def\DiagonalMap#1#2#3#4#5{\CD@BK\CD@LC\def\CD@OG{4}\let\CD@kD\CD@qK\let
+\CD@ZD\CD@YD\def\CD@WK{2}\def\CD@aK{2}\def\CD@ZK{1}\def\CD@bK{1}\def\CD@QG{%
+\CD@vF{#3}}\ifPositiveGradient\let\mv\raise\def\CD@oJ{\CD@vF{#5}}\def\CD@iD{%
+\CD@vF{#4}}\def\CD@jD{\CD@vF{#2}}\def\CD@LE{\CD@vF{#1}}\else\let\mv\lower\def
+\CD@oJ{\CD@vF{#1}}\def\CD@iD{\CD@vF{#2}}\def\CD@jD{\CD@vF{#4}}\def\CD@LE{%
+\CD@vF{#5}}\fi\CD@tD}\def\CD@aE{-}\def\CD@AD{\empty}\def\CD@SH{\CD@EG\CD@bE
+\CD@aE\@fillh}\def\CD@VH{\CD@EG\CD@MK\CD@KK\@fillv}\def\CD@EG#1#2#3#4#5{\def
+\CD@CH{#5}\ifx\CD@CH#2\let#4#3\else\let#4\null\ifx\CD@CH\empty\else\ifx\CD@CH
+\CD@AD\else\let#4\CD@CH\fi\fi\fi}\def\CD@UH#1{\hbox{\mathsurround\z@
+\offinterlineskip\def\CD@CH{#1}\ifx\CD@CH\empty\else\ifx\CD@CH\CD@AD\else
+\CD@k\mkern-1.5mu{\CD@CH}\mkern-1.5mu\CD@ND\fi\fi}}\def\CD@yD#1#2{\setbox#1=%
+\hbox\bgroup\setbox0=\hbox{\CD@k\labelstyle()\CD@ND}%% ASCII round brackets
+\setbox1=\null\ht1\ht0\dp1\dp0\box1 \kern.1\CD@zC\CD@k\bgroup\labelstyle
+\aftergroup\CD@LD\CD@xD}\def\CD@LD{\CD@ND\kern.1\CD@zC\egroup\CD@tD}\def
+\CD@xD{\futurelet\CD@EH\CD@mJ}\def\CD@mJ{%% qualifiers on label arguments
+\catcase\bgroup:\CD@v;\catcase\egroup:\missing@label;\catcase\space:\CD@TF;%
+\tokcase[:\CD@XF;%%]%ascii close square bracket
+\default:\CD@zJ;\endswitch}\def\CD@v{\let\CD@MD\CD@c\let\CD@CH}\def\CD@zJ#1{%
+\let\CD@UF\egroup{\let\actually@braces@missing@around@macro@in@label\CD@ZH
+\let\CD@MD\CD@xC\let\CD@UF\CD@VF#1%
+\actually@braces@missing@around@macro@in@label}\CD@UF}\def
+\actually@braces@missing@around@macro@in@label{\let\CD@CH=}\def\missing@label
+{\egroup\CD@YA{missing label}\CD@PE}\def\CD@xC{\egroup\missing@label}\outer
+\def\CD@ZH{}\def\CD@UF{}\def\CD@VF{\CD@wC\CD@UF}\def\CD@MD{}\def\CD@XF{\let
+\CD@N\CD@xD\get@square@arg\CD@AE}\CD@rG\CD@PE{The text which has just been
+read is not allowed within map labels.}\def\CD@c{\egroup\CD@YA{missing \CD@yC
+\space inserted after label}\CD@PE}\def\upper@label{\CD@oD\CD@yD6}\def
+\lower@label{\def\positional@{\CD@@A\break@args}\CD@yD7}\def\middle@label{%
+\CD@yD3}\CD@tG\CD@yE\CD@pD\CD@oD\def\CD@iF{\ifPositiveGradient\CD@tJ
+\expandafter\upper@label\else\expandafter\lower@label\fi}\def\CD@iI{%
+\ifPositiveGradient\CD@tJ\expandafter\lower@label\else\expandafter
+\upper@label\fi}\def\positional@{\CD@gB{labels as positional arguments are
+obsolete}\CD@yE\CD@tJ\expandafter\upper@label\else\expandafter\lower@label\fi
+-}\def\CD@tD{\futurelet\CD@EH\switch@arg}\def\eat@space{\afterassignment
+\CD@tD\let\CD@EH= }\def\CD@TF{\afterassignment\CD@xD\let\CD@EH= }\def\CD@BC{%
+\get@round@pair\CD@uD}\def\CD@uD#1#2{\def\CD@WK{#1}\def\CD@aK{#2}\CD@tD}\def
+\optional@{\let\CD@N\CD@tD\get@square@arg\CD@AE}\def\CD@JJ.{\CD@sC\CD@tD}\def
+\CD@sC{\let\CD@iD\fill@dot\let\CD@jD\fill@dot\def\CD@MI{\let\CD@iD\dfdot\let
+\CD@jD\dfdot}}\def\CD@MI{}\def\CD@@E#1,{\CD@nH#1,\begingroup\ifx\@name\CD@RD
+\CD@FF\aftergroup\CD@e\fi\aftergroup\CD@jC\else\expandafter\def\expandafter
+\CD@RF\expandafter{\csname\@name\endcsname}\expandafter\CD@vD\CD@RF\CD@KD\ifx
+\CD@RF\empty\aftergroup\CD@pC\expandafter\aftergroup\csname\CD@FB\@name
+\endcsname\expandafter\aftergroup\csname\CD@FB @\@name\endcsname\else\gdef
+\CD@GE{#1}\CD@gB{\string\relax\space inserted before `[\CD@GE'}\message{(I was
+trying to read this as a \CD@tA\ option.)}\aftergroup\CD@H\fi\fi\endgroup}%
+\def\CD@vD#1#2\CD@KD{\def\CD@RF{#2}}\def\CD@jC{\let\CD@CH\CD@N\let\CD@N\relax
+\CD@CH}\def\CD@H#1],{%% ASCII close square bracket
+\CD@jC\relax\def\CD@RF{#1}\ifx\CD@RF\empty\def\CD@RF{[\CD@GE]}%
+%% ASCII open and close square bracket
+\else\def\CD@RF{[\CD@GE,#1]}%% ASCII open and close square bracket
+\fi\CD@RF}\def\CD@pC#1#2{\ifx#2\CD@qK\ifx#1\CD@qK\CD@gB{option `\@name'
+undefined}\else#1\fi\else\CD@FF\expandafter#2\CD@GK\CD@PK\else\CD@QK\fi\fi
+\CD@DH}\CD@tG\CD@FF\CD@QK\CD@PK\def\CD@nH#1,{\CD@FF\ifx\CD@GK\CD@qK\CD@e\else
+\expandafter\CD@oH\CD@GK,#1,(,),(,)[]%
+%%ASCII 5commas two pairs round, pair square
+\fi\fi\CD@FF\else\CD@mH#1==,\fi}\def\CD@e{\CD@gB{option `\@name' needs (x,y)
+value}\CD@PK\let\@name\empty}\def\CD@mH#1=#2=#3,{\def\@name{#1}\def\CD@GK{#2}%
+\def\CD@RF{#3}\ifx\CD@RF\empty\let\CD@GK\CD@qK\fi}%
+%% ASCII 2commas 2pair round, pair square on next line
+\def\CD@oH#1(#2,#3)#4,(#5,#6)#7[]{\def\CD@GK{{#2}{#3}}\def\CD@RF{#1#4#5#6}%
+\ifx\CD@RF\empty\def\CD@RF{#7}\ifx\CD@RF\empty\CD@e\fi\else\CD@e\fi}\def
+\CD@FB{cds@}\let\CD@N\relax\def\CD@zD#1{\ifx\CD@GK\CD@qK\CD@gB{option `\@name
+' needs a value}\else#1\CD@GK\relax\fi}\def\CD@BE#1#2{\ifx\CD@GK\CD@qK#1#2%
+\relax\else#1\CD@GK\relax\fi}\def\cds@@showpair#1#2{\message{x=#1,y=#2}}\def
+\cds@@diagonalbase#1#2{\edef\CD@ZK{#1}\edef\CD@bK{#2}}\def\CD@DI#1{\def\CD@CH
+{#1}\CD@nF{@x}{cdps@#1}\ifx\CD@CH\empty\CD@f\CD@CH{cannot be used}\else\ifx
+\CD@CH\relax\CD@f\CD@CH{unknown}\else\let\CD@IK\@x\fi\fi}\def\CD@f#1#2{\CD@gB
+{PostScript translator `#1' #2}}\def\CD@PH{}\def\CD@PJ{\CD@fA\edef\CD@PH{%
+\noexpand\CD@KB{\@name\space ignored within maths}}}\def\diagramstyle{\CD@cJ
+\let\CD@N\relax\CD@CF\CD@AE\CD@AE}\let\diagramsstyle\diagramstyle\CD@tG\CD@sE
+\CD@SB\CD@RB\CD@tG\CD@qE\CD@EB\CD@DB\CD@tG\CD@oE\CD@pA\CD@oA\CD@tG\CD@iE
+\CD@HA\CD@GA\CD@HA\CD@tG\CD@jE\CD@JA\CD@IA\CD@tG\CD@kE\CD@LA\CD@KA\CD@tG
+\CD@EF\CD@DK\CD@CK\CD@tG\CD@rE\CD@JB\CD@IB\CD@tG\CD@mE\CD@gA\CD@fA\CD@tG
+\CD@nE\CD@kA\CD@jA\CD@tG\CD@AF\CD@iG\CD@hG\CD@RC{cds@ }{}\CD@RC{cds@}{}\CD@RC
+{cds@1em}{\CellSize1\CD@zC}\CD@RC{cds@1.5em}{\CellSize1.5\CD@zC}\CD@RC{cds@2%
+em}{\CellSize2\CD@zC}\CD@RC{cds@2.5em}{\CellSize2.5\CD@zC}\CD@RC{cds@3em}{%
+\CellSize3\CD@zC}\CD@RC{cds@3.5em}{\CellSize3.5\CD@zC}\CD@RC{cds@4em}{%
+\CellSize4\CD@zC}\CD@RC{cds@4.5em}{\CellSize4.5\CD@zC}\CD@RC{cds@5em}{%
+\CellSize5\CD@zC}\CD@RC{cds@6em}{\CellSize6\CD@zC}\CD@RC{cds@7em}{\CellSize7%
+\CD@zC}\CD@RC{cds@8em}{\CellSize8\CD@zC}\def\cds@abut{\MapsAbut\dimen1\z@
+\dimen5\z@}\def\cds@alignlabels{\CD@IA\CD@KA}\def\cds@amstex{\ifincommdiag
+\CD@O\else\def\CD{\diagram[amstex]}%%ascii square brackets []
+\fi\CD@T\catcode`\@\active}\def\cds@b{\let\CD@dB\CD@bB}\def\cds@balance{\let
+\CD@hA\CD@AA}\let\cds@bottom\cds@b\def\cds@center{\cds@vcentre\cds@nobalance}%
+\let\cds@centre\cds@center\def\cds@centerdisplay{\CD@HA\CD@PJ\cds@balance}%
+\let\cds@centredisplay\cds@centerdisplay\def\cds@crab{\CD@BE\CD@DC{.5%
+\PileSpacing}}\CD@RC{cds@crab-}{\CD@DC-.5\PileSpacing}\CD@RC{cds@crab+}{%
+\CD@DC.5\PileSpacing}\CD@RC{cds@crab++}{\CD@DC1.5\PileSpacing}\CD@RC{cds@crab%
+--}{\CD@DC-1.5\PileSpacing}\def\cds@defaultsize{\CD@BE{\let\CD@QC}{3em}\CD@NJ
+}\def\cds@displayoneliner{\CD@DB}\let\cds@dotted\CD@sC\def\cds@dpi{\CD@RJ{1%
+truein}}\def\cds@dpm{\CD@RJ{100truecm}}\let\CD@XA\CD@qK\def\cds@eqno{\let
+\CD@XA\CD@GK\let\CD@EJ\empty}\def\cds@fixed{\CD@qA}\CD@tG\CD@fE\CD@J\CD@I\def
+\cds@flushleft{\CD@I\CD@GA\CD@PJ\cds@nobalance\CD@BE\CD@nA\CD@nA}\def\cds@gap
+{\CD@AJ\setbox3=\null\ht3=\CD@tI\dp3=\CD@sI\CD@BE{\wd3=}\MapShortFall} \def
+\cds@grid{\ifx\CD@GK\CD@qK\let\h@grid\relax\let\v@grid\relax\else\CD@nF{%
+h@grid}{cdgh@\CD@GK}\CD@nF{v@grid}{cdgv@\CD@GK}\ifx\h@grid\relax\CD@gB{%
+unknown grid `\CD@GK'}\else\CD@WB\fi\fi}\let\h@grid\relax\let\v@grid\relax
+\def\cds@gridx{\ifx\CD@GK\CD@qK\else\cds@grid\fi\let\CD@CH\h@grid\let\h@grid
+\v@grid\let\v@grid\CD@CH}\def\cds@h{\CD@zD\DiagramCellHeight}\def\cds@hcenter
+{\let\CD@hA\CD@aA}\let\cds@hcentre\cds@hcenter\def\cds@heads{\CD@BE{\let
+\CD@sJ}\CD@sJ\CD@@J\CD@vE\else\ifx\CD@sJ\CD@eF\else\CD@MC\fi\fi}\let
+\cds@height\cds@h\let\cds@hmiddle\cds@balance\def\cds@htriangleheight{\CD@BE
+\DiagramCellHeight\DiagramCellHeight\DiagramCellWidth1.73205%
+\DiagramCellHeight}\def\cds@htrianglewidth{\CD@BE\DiagramCellWidth
+\DiagramCellWidth\DiagramCellHeight.57735\DiagramCellWidth}\CD@tG\CD@zE\CD@eE
+\CD@dE\CD@eE\def\cds@hug{\CD@eE} \def\cds@inline{\CD@gA\let\CD@PH\empty}\def
+\cds@inlineoneliner{\CD@EB}\CD@RC{cds@l>}{\CD@zD{\let\CD@RG}\dimen2=\CD@RG}%
+\def\cds@labelstyle{\CD@zD{\let\labelstyle}}\def\cds@landscape{\CD@kA}\def
+\cds@large{\CellSize5\CD@zC}\let\CD@EJ\empty\def\CD@FJ{\refstepcounter{%
+equation}\def\CD@XA{\hbox{\@eqnnum}}}\def\cds@LaTeXeqno{\let\CD@EJ\CD@FJ}\def
+\cds@lefteqno{\CD@pA}\def\cds@leftflush{\cds@flushleft\CD@J}\def
+\cds@leftshortfall{\CD@zD{\dimen1 }}\def\cds@lowershortfall{%
+\ifPositiveGradient\cds@leftshortfall\else\cds@rightshortfall\fi}\def
+\cds@loose{\CD@VB}\def\cds@midhshaft{\CD@JA}\def\cds@midshaft{\CD@JA}\def
+\cds@midvshaft{\CD@LA}\def\cds@moreoptions{\CD@@A}\let\cds@nobalance
+\cds@hcenter\def\cds@nohcheck{\CD@HH}\def\cds@nohug{\CD@dE} \def
+\cds@nooptions{\def\CD@aC{\CD@WD}}\let\cds@noorigin\cds@nobalance\def
+\cds@nopixel{\CD@@I4\CD@XH\CD@cJ}\def\cds@UO{\CD@oK\global\let\CD@n\empty}%
+\def\cds@UglyObsolete{\cds@UO\let\cds@PS\empty}\def\CD@rK#1{\CD@gB{option `#1%
+' renamed as `UglyObsolete'}}\def\cds@noPostScript{\CD@rK{noPostScript}}\def
+\cds@noPS{\CD@rK{noPostScript}}\def\cds@notextflow{\CD@RB}\def\cds@noTPIC{%
+\CD@CK}\def\cds@objectstyle{\CD@zD{\let\objectstyle}}\def\cds@origin{\let
+\CD@hA\CD@iB}\def\cds@p{\CD@zD\PileSpacing}\let\cds@pilespacing\cds@p\def
+\cds@pixelsize{\CD@zD\CD@@I\CD@gI}\def\cds@portrait{\CD@jA}\def
+\cds@PostScript{\CD@nK\global\let\CD@n\empty\CD@BE\CD@DI\empty}\def\cds@PS{%
+\CD@nK\global\let\CD@n\empty}\CD@GF\CD@n{\typeout{\CD@tA: try the PostScript
+option for better results}}\def\cds@repositionpullbacks{\let\make@pbk\CD@fH
+\let\CD@qH\CD@pH}\def\cds@righteqno{\CD@oA}\def\cds@rightshortfall{\CD@zD{%
+\dimen5 }}\def\cds@ruleaxis{\CD@zD{\let\axisheight}}\def\cds@cmex{\let\CD@GG
+\CD@sB\let\CD@QJ\CD@CJ}\def\cds@s{\cds@height\DiagramCellWidth
+\DiagramCellHeight}\def\cds@scriptlabels{\let\labelstyle\scriptstyle}\def
+\cds@shortfall{\CD@zD\MapShortFall\dimen1\MapShortFall\dimen5\MapShortFall}%
+\def\cds@showfirstpass{\CD@BE{\let\CD@nD}\z@}\def\cds@silent{\def\CD@KB##1{}%
+\def\CD@gB##1{}}\let\cds@size\cds@s\def\cds@small{\CellSize2\CD@zC}\def
+\cds@snake{\CD@BE\CD@eJ\z@}\def\cds@t{\let\CD@dB\CD@fB}\def\cds@textflow{%
+\CD@SB\CD@PJ}\def\cds@thick{\let\CD@rF\tenlnw\CD@LF\CD@NC\CD@BE\MapBreadth{2%
+\CD@LF}\CD@@J}\def\cds@thin{\let\CD@rF\tenln\CD@BE\MapBreadth{\CD@NC}\CD@@J}%
+\def\cds@tight{\CD@WB}\let\cds@top\cds@t\def\cds@TPIC{\CD@DK}\def
+\cds@uppershortfall{\ifPositiveGradient\cds@rightshortfall\else
+\cds@leftshortfall\fi}\def\cds@vcenter{\let\CD@dB\CD@cB}\let\cds@vcentre
+\cds@vcenter\def\cds@vtriangleheight{\CD@BE\DiagramCellHeight
+\DiagramCellHeight\DiagramCellWidth.577035\DiagramCellHeight}\def
+\cds@vtrianglewidth{\CD@BE\DiagramCellWidth\DiagramCellWidth
+\DiagramCellHeight1.73205\DiagramCellWidth}\def\cds@vmiddle{\let\CD@dB\CD@eB}%
+\def\cds@w{\CD@zD\DiagramCellWidth}\let\cds@width\cds@w\def\diagram{\relax
+\protect\CD@bC}\def\enddiagram{\protect\CD@SG}\def\CD@bC{\CD@g\CD@uI
+\incommdiagtrue\edef\CD@wI{\the\CD@NB}\global\CD@NB\z@\boxmaxdepth\maxdimen
+\everycr{}\CD@sK\everymath{}\everyhbox{}\ifx\pdfsyncstop\CD@qK\else
+\pdfsyncstop\fi\CD@aC}\def\CD@aC{\CD@y\let\CD@N\CD@ZC\CD@CF\CD@AE\CD@WD}\def
+\CD@ZC{\CD@gE\expandafter\CD@aC\else\expandafter\CD@WD\fi}\def\CD@WD{\let
+\CD@EH\relax\CD@nE\CD@vE\else\CD@hK\else\CD@KB{landscape ignored without
+PostScript}\CD@jA\fi\fi\fi\CD@EJ\setbox2=\vbox\bgroup\CD@JF\CD@VD}\def\CD@cH{%
+\CD@nE\CD@fB\else\CD@dB\fi\CD@hA\nointerlineskip\setbox0=\null\ht0-\CD@pI\dp0%
+\CD@pI\wd0\CD@kI\box0 \global\CD@QA\CD@kF\global\CD@yA\CD@XB\ifx\CD@NK\CD@qK
+\global\CD@RA\CD@kF\else\global\CD@RA\CD@NK\fi\egroup\CD@zF\CD@nE\setbox2=%
+\hbox to\dp2{\vrule height\wd2 depth\CD@QA width\z@\global\CD@QA\ht2\ht2\z@
+\dp2\z@\wd2\z@\CD@hK\CD@tK{q 0 1 -1 0 0 0 cm}\else\global\CD@iG\CD@IK{0 1
+bturn}\fi\box2\CD@gK\hss}\CD@DB\fi\ifnum\CD@yA=1 \else\CD@DB\fi\global
+\@ignorefalse\CD@mE\leavevmode\fi\ifvmode\CD@TA\else\ifmmode\CD@PH\CD@GI\else
+\CD@qE\CD@gA\fi\ifinner\CD@gA\fi\CD@mE\CD@GI\else\CD@sE\CD@QB\else\CD@TA\fi
+\fi\fi\fi\CD@dD}\def\CD@dD{\global\CD@NB\CD@wI\relax\CD@xE\global\CD@ID\else
+\aftergroup\CD@mC\fi\if@ignore\aftergroup\ignorespaces\fi\CD@wC\ignorespaces}%
+\def\CD@fB{\advance\CD@pI\dimen1\relax}\def\CD@eB{\advance\CD@pI.5\dimen1%
+\relax}\def\CD@bB{}\def\CD@cB{\CD@fB\advance\CD@pI\CD@YB\divide\CD@pI2
+\advance\CD@pI-\axisheight\relax}\def\CD@aA{}\def\CD@iB{\CD@kF\z@}\def\CD@AA{%
+\ifdim\dimen2>\CD@kF\CD@kF\dimen2 \else\dimen2\CD@kF\CD@kI\dimen0 \advance
+\CD@kI\dimen2 \fi}\def\CD@QB{\skip0\z@\relax\loop\skip1\lastskip\ifdim\skip1>%
+\z@\unskip\advance\skip0\skip1 \repeat\vadjust{\prevdepth\dp\strutbox\penalty
+\predisplaypenalty\vskip\abovedisplayskip\CD@UA\penalty\postdisplaypenalty
+\vskip\belowdisplayskip}\ifdim\skip0=\z@\else\hskip\skip0 \global\@ignoretrue
+\fi}\def\CD@TA{\CD@LG\kern-\displayindent\CD@UA\CD@LG\global\@ignoretrue}\def
+\CD@UA{\hbox to\hsize{\CD@fE\ifdim\CD@RA=\z@\else\advance\CD@QA-\CD@RA\setbox
+2=\hbox{\kern\CD@RA\box2}\fi\fi\setbox1=\hbox{\ifx\CD@XA\CD@qK\else\CD@k
+\CD@XA\CD@ND\fi}\CD@oE\CD@iE\else\advance\CD@QA\wd1 \fi\wd1\z@\box1 \fi\dimen
+0\wd2 \advance\dimen0\wd1 \advance\dimen0-\hsize\ifdim\dimen0>-\CD@nA\CD@HA
+\fi\advance\dimen0\CD@QA\ifdim\dimen0>\z@\CD@KB{wider than the page by \the
+\dimen0 }\CD@HA\fi\CD@iE\hss\else\CD@V\CD@QA\CD@nA\fi\CD@GI\hss\kern-\wd1\box
+1 }}\def\CD@GI{\CD@AF\CD@@F\else\CD@SC\global\CD@hG\fi\fi\kern\CD@QA\box2 }%
+\CD@tG\CD@wE\CD@YC\CD@XC\def\CD@JF{\CD@cJ\ifdim\DiagramCellHeight=-\maxdimen
+\DiagramCellHeight\CD@QC\fi\ifdim\DiagramCellWidth=-\maxdimen
+\DiagramCellWidth\CD@QC\fi\global\CD@XC\CD@IF\let\CD@FE\empty\let\CD@z\CD@Q
+\let\overprint\CD@eH\let\CD@s\CD@rJ\let\enddiagram\CD@ED\let\\\CD@cC\let\par
+\CD@jH\let\CD@MD\empty\let\switch@arg\CD@PB\let\shift\CD@iA\baselineskip
+\DiagramCellHeight\lineskip\z@\lineskiplimit\z@\mathsurround\z@\tabskip\z@
+\CD@OB}\def\CD@VD{\penalty-123 \begingroup\CD@jA\aftergroup\CD@K\halign
+\bgroup\global\advance\CD@NB1 \vadjust{\penalty1}\global\CD@FA\z@\CD@OB\CD@j#%
+#\CD@DD\CD@Q\CD@Q\CD@OI\CD@j##\CD@DD\cr}\def\CD@ED{\CD@MD\CD@GD\crcr\egroup
+\global\CD@JD\endgroup}\def\CD@j{\global\advance\CD@FA1 \futurelet\CD@EH\CD@i
+}\def\CD@i{\ifx\CD@EH\CD@DD\CD@tJ\hskip1sp plus 1fil \relax\let\CD@DD\relax
+\CD@vI\else\hfil\CD@k\objectstyle\let\CD@FE\CD@d\fi}\def\CD@DD{\CD@MD\relax
+\CD@yI\CD@vI\global\CD@QA\CD@iA\penalty-9993 \CD@ND\hfil\null\kern-2\CD@QA
+\null}\def\CD@cC{\cr}\def\across#1{\span\omit\mscount=#1 \global\advance
+\CD@FA\mscount\global\advance\CD@FA\m@ne\CD@sF\ifnum\mscount>2 \CD@fJ\repeat
+\ignorespaces}\def\CD@fJ{\relax\span\omit\advance\mscount\m@ne}\def\CD@qJ{%
+\ifincommdiag\ifx\CD@iD\@fillh\ifx\CD@jD\@fillh\ifdim\dimen3>\z@\else\ifdim
+\dimen2>93\CD@@I\ifdim\dimen2>18\p@\ifdim\CD@LF>\z@\count@\CD@bJ\advance
+\count@\m@ne\ifnum\count@<\z@\count@20\let\CD@aJ\CD@uJ\fi\xdef\CD@bJ{\the
+\count@}\fi\fi\fi\fi\fi\fi\fi}\def\CD@cG#1{\vrule\horizhtdp width#1\dimen@
+\kern2\dimen@}\def\CD@uJ{\rlap{\dimen@\CD@@I\CD@V\dimen@{.182\p@}\CD@zH
+\dimen@\advance\CD@tI\dimen@\CD@cG0\CD@cG0\CD@cG2\CD@cG6\CD@cG6\CD@cG2\CD@cG0%
+\CD@cG0\CD@cG2\CD@cG6\CD@cG0\CD@cG0\CD@cG2\CD@cG2\CD@cG6\CD@cG0\CD@cG0\CD@cG2%
+\CD@cG6\CD@cG2\CD@cG2\CD@cG0\CD@cG0}}\def\CD@bJ{10}\def\CD@aJ{}\def\CD@XD{%
+\CD@gE\CD@TB\fi\CD@x\CD@WF\CD@HI}\def\CD@x{\CD@QJ\CD@DC\CD@MJ\ifdim\CD@DC=\z@
+\else\CD@pF\CD@DC\fi\ifvoid3 \setbox3=\null\ht3\CD@tI\dp3\CD@sI\else\CD@V{\ht
+3}\CD@tI\CD@V{\dp3}\CD@sI\fi\dimen3=.5\wd3 \ifdim\dimen3=\z@\CD@tE\else\dimen
+3-\CD@XH\fi\else\CD@TB\fi\CD@V{\dimen2}{\wd7}\CD@V{\dimen2}{\wd6}\CD@qJ
+\advance\dimen2-2\dimen3 \dimen4.5\dimen2 \dimen2\dimen4 \advance\dimen2%
+\CD@eJ\advance\dimen4-\CD@eJ\advance\dimen2-\wd1 \advance\dimen4-\wd5 \ifvoid
+2 \else\CD@V{\ht3}{\ht2}\CD@V{\dp3}{\dp2}\CD@V{\dimen2}{\wd2}\fi\ifvoid4 \else
+\CD@V{\ht3}{\ht4}\CD@V{\dp3}{\dp4}\CD@V{\dimen4}{\wd4}\fi\advance\skip2\dimen
+2 \advance\skip4\dimen4 \CD@tE\advance\skip2\skip4 \dimen0\dimen5 \advance
+\dimen0\wd5 \skip3-\skip4 \advance\skip3-\dimen0 \let\CD@jD\empty\else\skip3%
+\z@\relax\dimen0\z@\fi}\def\CD@WF{\offinterlineskip\lineskip.2\CD@zC\ifvoid6
+\else\setbox3=\vbox{\hbox to2\dimen3{\hss\box6\hss}\box3}\fi\ifvoid7 \else
+\setbox3=\vtop{\box3 \hbox to2\dimen3{\hss\box7\hss}}\fi}\def\CD@HI{\kern
+\dimen1 \box1 \CD@aJ\CD@iD\hskip\skip2 \kern\dimen0 \ifincommdiag\CD@jE
+\penalty1\fi\kern\dimen3 \penalty\CD@GB\hskip\skip3 \null\kern-\dimen3 \else
+\hskip\skip3 \fi\box3 \CD@jD\hskip\skip4 \box5 \kern\dimen5}\def\CD@MF{\ifnum
+\CD@LH>\CD@TC\CD@V{\dimen1}\objectheight\CD@V{\dimen5}\objectheight\else\CD@V
+{\dimen1}\objectwidth\CD@V{\dimen5}\objectwidth\fi}\def\CD@Y{\begingroup
+\ifdim\dimen7=\z@\kern\dimen8 \else\ifdim\dimen6=\z@\kern\dimen9 \else\dimen5%
+\dimen6 \dimen6\dimen9 \CD@KJ\dimen4\dimen2 \CD@dG{\dimen4}\dimen6\dimen5
+\dimen7\dimen8 \CD@KJ\CD@iC{\dimen2}\ifdim\dimen2<\dimen4 \kern\dimen2 \else
+\kern\dimen4 \fi\fi\fi\endgroup}\def\CD@jJ{\CD@JI\setbox\z@\hbox{\lower
+\axisheight\hbox to\dimen2{\CD@DF\ifPositiveGradient\dimen8\ht\CD@MH\dimen9%
+\CD@mI\else\dimen8\dp3 \dimen9\dimen1 \fi\else\dimen8 \ifPositiveGradient
+\objectheight\else\z@\fi\dimen9\objectwidth\fi\advance\dimen8
+\ifPositiveGradient-\fi\axisheight\CD@Y\unhbox\z@\CD@DF\ifPositiveGradient
+\dimen8\dp3 \dimen9\dimen0 \else\dimen8\ht\CD@MH\dimen9\CD@mF\fi\else\dimen8
+\ifPositiveGradient\z@\else\objectheight\fi\dimen9\objectwidth\fi\advance
+\dimen8 \ifPositiveGradient\else-\fi\axisheight\CD@Y}}}\def\CD@bD{\dimen6
+\CD@aK\DiagramCellHeight\dimen7 \CD@WK\DiagramCellWidth\CD@jJ
+\ifPositiveGradient\advance\dimen7-\CD@ZK\DiagramCellWidth\else\dimen7 \CD@ZK
+\DiagramCellWidth\dimen6\z@\fi\advance\dimen6-\CD@bK\DiagramCellHeight\CD@mK
+\setbox0=\rlap{\kern-\dimen7 \lower\dimen6\box\z@}\ht0\z@\dp0\z@\raise
+\axisheight\box0 }\def\CD@mK{\setbox0\hbox{\ht\z@\z@\dp\z@\z@\wd\z@\z@\CD@hK
+\expandafter\CD@tK{q \CD@eK\space\CD@lK\space\CD@kK\space\CD@eK\space0 0 cm}%
+\else\global\CD@iG\CD@eD{\the\CD@TC\space\ifPositiveGradient\else-\fi\the
+\CD@LH\space bturn}\fi\box\z@\CD@gK}}\def\CD@vB{\advance\CD@hF-\CD@mI\CD@wJ
+\CD@hF\advance\CD@wJ\CD@hI\ifvoid\CD@sH\ifdim\CD@wJ<.1em\ifnum\CD@gD=\@m\else
+\CD@aG h\CD@wJ<.1em:objects overprint:\CD@FA\CD@gD\fi\fi\else\ifhbox\CD@sH
+\CD@SK\else\CD@TK\fi\advance\CD@wJ\CD@mI\CD@bH{-\CD@mI}{\box\CD@sH}{\CD@wJ}%
+\z@\fi\CD@hF-\CD@mF\CD@gD\CD@FA\CD@hI\z@}\def\CD@SK{\setbox\CD@sH=\hbox{%
+\unhbox\CD@sH\unskip\unpenalty}\setbox\CD@tH=\hbox{\unhbox\CD@tH\unskip
+\unpenalty}\setbox\CD@sH=\hbox to\CD@wJ{\CD@OA\wd\CD@sH\unhbox\CD@sH\CD@PA
+\lastkern\unkern\ifdim\CD@PA=\z@\CD@UB\advance\CD@OA-\wd\CD@tH\else\CD@TB\fi
+\ifnum\lastpenalty=\z@\else\CD@JA\unpenalty\fi\kern\CD@PA\ifdim\CD@hF<\CD@OA
+\CD@JA\fi\ifdim\CD@hI<\wd\CD@tH\CD@JA\fi\CD@jE\CD@hI\CD@wJ\advance\CD@hI-%
+\CD@OA\advance\CD@hI\wd\CD@tH\ifdim\CD@hI<2\wd\CD@tH\CD@aG h\CD@hI<2\wd\CD@tH
+:arrow too short:\CD@FA\CD@gD\fi\divide\CD@hI\tw@\CD@hF\CD@wJ\advance\CD@hF-%
+\CD@hI\fi\CD@tE\kern-\CD@hI\fi\hbox to\CD@hI{\unhbox\CD@tH}\CD@HG}}\CD@tG
+\ifinpile\inpiletrue\inpilefalse\inpilefalse\def\pile{\protect\CD@UJ\protect
+\CD@uH}\def\CD@uH#1{\CD@l#1\CD@QD}\def\CD@UJ{\CD@nB{pile}\setbox0=\vtop
+\bgroup\aftergroup\CD@lD\inpiletrue\let\CD@FE\empty\let\pile\CD@KF\let\CD@QD
+\CD@PD\let\CD@GD\CD@FD\CD@yH\baselineskip.5\PileSpacing\lineskip.1\CD@zC
+\relax\lineskiplimit\lineskip\mathsurround\z@\tabskip\z@\let\\\CD@wH}\def
+\CD@l{\CD@DE\CD@YF\empty\halign\bgroup\hfil\CD@k\let\CD@FE\CD@d\let\\\CD@vH##%
+\CD@MD\CD@ND\hfil\CD@Q\CD@R##\cr}\CD@rG\CD@NE{pile only allows one column.}%
+\CD@rG\CD@UE{you left it out!}\def\CD@R{\CD@QD\CD@Q\relax\CD@YA{missing \CD@yC
+\space inserted after \string\pile}\CD@NE}\def\CD@PD{\CD@MD\crcr\egroup
+\egroup}\def\CD@GD{\CD@MD}\def\CD@FD{\CD@MD\relax\CD@QD\CD@YA{missing \CD@yC
+\space inserted between \string\pile\space and \CD@HD}\CD@UE}\def\CD@QD{%
+\CD@MD}\def\CD@lD{\vbox{\dimen1\dp0 \unvbox0 \setbox0=\lastbox\advance\dimen1%
+\dp0 \nointerlineskip\box0 \nointerlineskip\setbox0=\null\dp0.5\dimen1\ht0-%
+\dp0 \box0}\ifincommdiag\CD@tJ\penalty-9998 \fi\xdef\CD@YF{pile}}\def\CD@vH{%
+\cr}\def\CD@wH{\noalign{\skip@\prevdepth\advance\skip@-\baselineskip
+\prevdepth\skip@}}\def\CD@KF#1{#1}\def\CD@TK{\setbox\CD@sH=\vbox{\unvbox
+\CD@sH\setbox1=\lastbox\setbox0=\box\voidb@x\CD@tF\setbox\CD@sH=\lastbox
+\ifhbox\CD@sH\CD@rC\repeat\unvbox0 \global\CD@QA\CD@ZE}\CD@ZE\CD@QA}\def
+\CD@rC{\CD@jE\setbox\CD@sH=\hbox{\unhbox\CD@sH\unskip\setbox\CD@sH=\lastbox
+\unskip\unhbox\CD@sH}\ifdim\CD@wJ<\wd\CD@sH\CD@aG h\CD@wJ<\wd\CD@sH:arrow in
+pile too short:\CD@FA\CD@gD\else\setbox\CD@sH=\hbox to\CD@wJ{\unhbox\CD@sH}%
+\fi\else\CD@gJ\fi\setbox0=\vbox{\box\CD@sH\nointerlineskip\ifvoid0 \CD@tJ\box
+1 \else\vskip\skip0 \unvbox0 \fi}\skip0=\lastskip\unskip}\def\CD@gJ{\penalty7
+\noindent\unhbox\CD@sH\unskip\setbox\CD@sH=\lastbox\unskip\unhbox\CD@sH
+\endgraf\setbox\CD@tH=\lastbox\unskip\setbox\CD@tH=\hbox{\CD@JG\unhbox\CD@tH
+\unskip\unskip\unpenalty}\ifcase\prevgraf\cd@shouldnt P\or\ifdim\CD@wJ<\wd
+\CD@tH\CD@aG h\CD@wJ<\wd\CD@sH:object in pile too wide:\CD@FA\CD@gD\setbox
+\CD@sH=\hbox to\CD@wJ{\hss\unhbox\CD@tH\hss}\else\setbox\CD@sH=\hbox to\CD@wJ
+{\hss\kern\CD@hF\unhbox\CD@tH\kern\CD@hI\hss}\fi\or\setbox\CD@sH=\lastbox
+\unskip\CD@SK\else\cd@shouldnt Q\fi\unskip\unpenalty}\def\CD@cD{\CD@MJ\ifvoid
+3 \setbox3=\null\ht3\axisheight\dp3-\ht3 \dimen3.5\CD@LF\else\dimen4\dp3
+\dimen3.5\wd3 \setbox3=\CD@GG{\box3}\dp3\dimen4 \ifdim\ht3=-\dp3 \else\CD@TB
+\fi\fi\dimen0\dimen3 \advance\dimen0-.5\CD@LF\setbox0\null\ht0\ht3\dp0\dp3\wd
+0\wd3 \ifvoid6\else\setbox6\hbox{\unhbox6\kern\dimen0\kern2pt}\dimen0\wd6 \fi
+\ifvoid7\else\setbox7\hbox{\kern2pt\kern\dimen3\unhbox7}\dimen3\wd7 \fi
+\setbox3\hbox{\ifvoid6\else\kern-\dimen0\unhbox6\fi\unhbox3 \ifvoid7\else
+\unhbox7\kern-\dimen3\fi}\ht3\ht0\dp3\dp0\wd3\wd0 \CD@tE\dimen4=\ht\CD@MH
+\advance\dimen4\dp5 \advance\dimen4\dimen1 \let\CD@jD\empty\else\dimen4\ht3
+\fi\setbox0\null\ht0\dimen4 \offinterlineskip\setbox8=\vbox spread2ex{\kern
+\dimen5 \box1 \CD@iD\vfill\CD@tE\else\kern\CD@eJ\fi\box0}\ht8=\z@\setbox9=%
+\vtop spread2ex{\kern-\ht3 \kern-\CD@eJ\box3 \CD@jD\vfill\box5 \kern\dimen1}%
+\dp9=\z@\hskip\dimen0plus.0001fil \box9 \kern-\CD@LF\box8 \CD@kE\penalty2 \fi
+\CD@tE\penalty1 \fi\kern\PileSpacing\kern-\PileSpacing\kern-.5\CD@LF\penalty
+\CD@GB\null\kern\dimen3}\def\CD@cI{\ifhbox\CD@VA\CD@KB{clashing verticals}\ht
+\CD@MH.5\dp\CD@VA\dp\CD@MH-\ht5 \CD@yB\ht\CD@MH\z@\dp\CD@MH\z@\fi\dimen1\dp
+\CD@VA\CD@xA\prevgraf\unvbox\CD@VA\CD@wA\lastpenalty\unpenalty\setbox\CD@VA=%
+\null\setbox\CD@lI=\hbox{\CD@JG\unhbox\CD@lI\unskip\unpenalty\dimen0\lastkern
+\unkern\unkern\unkern\kern\dimen0 \CD@HG}\setbox\CD@lF=\hbox{\unhbox\CD@lF
+\dimen0\lastkern\unkern\unkern\global\CD@QA\lastkern\unkern\kern\dimen0 }%
+\CD@tF\ifnum\CD@xA>4 \CD@zI\repeat\unskip\unskip\advance\CD@mF.5\wd\CD@VA
+\advance\CD@mF\wd\CD@lF\advance\CD@mI.5\wd\CD@VA\advance\CD@mI\wd\CD@lI\ifnum
+\CD@FA=\CD@lA\CD@OA.5\wd\CD@VA\edef\CD@NK{\the\CD@OA}\fi\setbox\CD@VA=\hbox{%
+\kern-\CD@mF\box\CD@lF\unhbox\CD@VA\box\CD@lI\kern-\CD@mI\penalty\CD@wA
+\penalty\CD@NB}\ht\CD@VA\dimen1 \dp\CD@VA\z@\wd\CD@VA\CD@tB\CD@vB}\def\CD@zI{%
+\ifdim\wd\CD@lF<\CD@QA\setbox\CD@lF=\hbox to\CD@QA{\CD@JG\unhbox\CD@lF}\fi
+\advance\CD@xA\m@ne\setbox\CD@VA=\hbox{\box\CD@lF\unhbox\CD@VA}\unskip\setbox
+\CD@lF=\lastbox\setbox\CD@lF=\hbox{\unhbox\CD@lF\unskip\unpenalty\dimen0%
+\lastkern\unkern\unkern\global\CD@QA\lastkern\unkern\kern\dimen0 }}\def\CD@yB
+{\dimen1\dp\CD@VA\ifhbox\CD@VA\CD@xB\else\CD@zB\fi\setbox\CD@VA=\vbox{%
+\penalty\CD@NB}\dp\CD@VA-\dp\CD@MH\wd\CD@VA\CD@tB}\def\CD@zB{\unvbox\CD@VA
+\CD@wA\lastpenalty\unpenalty\ifdim\dimen1<\ht\CD@MH\CD@aG v\dimen1<\ht\CD@MH:%
+rows overprint:\CD@NB\CD@wA\fi}\def\CD@xB{\dimen0=\ht\CD@VA\setbox\CD@VA=%
+\hbox\bgroup\advance\dimen1-\ht\CD@MH\unhbox\CD@VA\CD@xA\lastpenalty
+\unpenalty\CD@wA\lastpenalty\unpenalty\global\CD@RA-\lastkern\unkern\setbox0=%
+\lastbox\CD@tF\setbox\CD@VA=\hbox{\box0\unhbox\CD@VA}\setbox0=\lastbox\ifhbox
+0 \CD@kJ\repeat\global\CD@SA-\lastkern\unkern\global\CD@QA\CD@JK\unhbox\CD@VA
+\egroup\CD@JK\CD@QA\CD@bH{\CD@SA}{\box\CD@VA}{\CD@RA}{\dimen1}}\def\CD@kJ{%
+\setbox0=\hbox to\wd0\bgroup\unhbox0 \unskip\unpenalty\dimen7\lastkern\unkern
+\ifnum\lastpenalty=1 \unpenalty\CD@UB\else\CD@TB\fi\ifnum\lastpenalty=2
+\unpenalty\dimen2.5\dimen0\advance\dimen2-.5\dimen1\advance\dimen2-%
+\axisheight\else\dimen2\z@\fi\setbox0=\lastbox\dimen6\lastkern\unkern\setbox1%
+=\lastbox\setbox0=\vbox{\unvbox0 \CD@tE\kern-\dimen1 \else\ifdim\dimen2=\z@
+\else\kern\dimen2 \fi\fi}\ifdim\dimen0<\ht0 \CD@aG v\dimen0<\ht0:upper part of
+vertical too short:{\CD@tE\CD@NB\else\CD@wA\fi}\CD@xA\else\setbox0=\vbox to%
+\dimen0{\unvbox0}\fi\setbox1=\vtop{\unvbox1}\ifdim\dimen1<\dp1 \CD@aG v\dimen
+1<\dp1:lower part of vertical too short:\CD@NB\CD@wA\else\setbox1=\vtop to%
+\dimen1{\ifdim\dimen2=\z@\else\kern-\dimen2 \fi\unvbox1 }\fi\box1 \kern\dimen
+6 \box0 \kern\dimen7 \CD@HG\global\CD@QA\CD@JK\egroup\CD@JK\CD@QA\relax}%
+\countdef\CD@u=14 \newcount\CD@CA\newcount\CD@XB\newcount\CD@NB\let\CD@LB
+\insc@unt\newcount\CD@FA\newcount\CD@lA\let\CD@mA\CD@XB\newcount\CD@MB\CD@tG
+\CD@DF\CD@bI\CD@aI\CD@aI\def\CD@nD{-1}\def\CD@K{\ifnum\CD@nD<\z@\else
+\begingroup\scrollmode\showboxdepth\CD@nD\showboxbreadth\maxdimen\showlists
+\endgroup\fi\CD@bI\CD@zF\CD@CA=\CD@u\advance\CD@CA1 \CD@XB=\CD@CA\ifnum\CD@NB
+=1 \CD@JA\fi\advance\CD@XB\CD@NB\dimen1\z@\skip0\z@\count@=\insc@unt\advance
+\count@\CD@u\divide\count@2 \ifnum\CD@XB>\count@\CD@KB{The diagram has too
+many rows! It can't be reformatted.}\else\CD@NG\CD@WI\fi\CD@cH}\def\CD@NG{%
+\CD@NB\CD@CA\CD@uF\ifnum\CD@NB<\CD@XB\setbox\CD@NB\box\voidb@x\advance\CD@NB1%
+\relax\repeat\CD@NB\CD@CA\skip\z@\z@\CD@uF\CD@GB\lastpenalty\unpenalty\ifnum
+\CD@GB>\z@\CD@KE\repeat\ifnum\CD@GB=-123 \CD@tJ\unpenalty\else\cd@shouldnt D%
+\fi\ifx\v@grid\relax\else\CD@NB\CD@XB\advance\CD@NB\m@ne\expandafter\CD@VJ
+\v@grid\fi\CD@MB\CD@mA\CD@tB\z@\CD@XG\ifx\h@grid\relax\else\expandafter\CD@LJ
+\h@grid\fi\count@\CD@XB\advance\count@\m@ne\CD@YB\ht\count@}\def\CD@KE{%
+\ifcase\CD@GB\or\CD@MG\else\CD@uA-\lastpenalty\unpenalty\CD@vA\lastpenalty
+\unpenalty\setbox0=\lastbox\CD@WG\fi\CD@wD}\def\CD@wD{\skip1\lastskip\unskip
+\advance\skip0\skip1 \ifdim\skip1=\z@\else\expandafter\CD@wD\fi}\def\CD@MG{%
+\setbox0=\lastbox\CD@pI\dp0 \advance\CD@pI\skip\z@\skip\z@\z@\advance\CD@NF
+\CD@pI\CD@uE\ifnum\CD@NB>\CD@CA\CD@NF\DiagramCellHeight\CD@pI\CD@NF\advance
+\CD@pI-\CD@qI\fi\fi\CD@qI\ht0 \CD@NF\CD@qI\setbox\CD@NB\hbox{\unhbox\CD@NB
+\unhbox0}\dp\CD@NB\CD@pI\ht\CD@NB\CD@qI\advance\CD@NB1 }\def\CD@WG{\ifnum
+\CD@uA<\z@\advance\CD@uA\CD@XB\ifnum\CD@uA<\CD@CA\CD@UG\else\CD@OA\dp\CD@uA
+\CD@PA\ht\CD@uA\setbox\CD@uA\hbox{\box\z@\penalty\CD@vA\penalty\CD@GB\unhbox
+\CD@uA}\dp\CD@uA\CD@OA\ht\CD@uA\CD@PA\fi\else\CD@UG\fi}\def\CD@UG{\CD@KB{%
+diagonal goes outside diagram (lost)}}\def\CD@fI{\advance\CD@uA\CD@XB\ifnum
+\CD@uA<\CD@CA\CD@UG\else\ifnum\CD@uA=\CD@NB\CD@VG\else\ifnum\CD@uA>\CD@NB
+\cd@shouldnt M\else\CD@OA\dp\CD@uA\CD@PA\ht\CD@uA\setbox\CD@uA\hbox{\box\z@
+\penalty\CD@vA\penalty\CD@GB\unhbox\CD@uA}\dp\CD@uA\CD@OA\ht\CD@uA\CD@PA\fi
+\fi\fi}\def\CD@WI{\CD@t\CD@AJ\setbox\CD@PC=\hbox{\CD@k A\@super f\CD@lJ f%
+\CD@ND}\CD@ZE\z@\CD@JK\z@\CD@kI\z@\CD@kF\z@\CD@NB=\CD@XB\CD@NF\z@\CD@uB\z@
+\CD@uF\ifnum\CD@NB>\CD@CA\advance\CD@NB\m@ne\CD@qI\ht\CD@NB\CD@pI\dp\CD@NB
+\advance\CD@NF\CD@qI\CD@rI\advance\CD@uB\CD@NF\CD@KC\CD@ZI\CD@w\ht\CD@NB
+\CD@qI\dp\CD@NB\CD@pI\nointerlineskip\box\CD@NB\CD@NF\CD@pI\setbox\CD@NB\null
+\ht\CD@NB\CD@uB\repeat\CD@wB\nointerlineskip\box\CD@NB\CD@gG\CD@ZE
+\DiagramCellWidth{width}\CD@gG\CD@JK\DiagramCellHeight{height}\CD@VA\CD@LB
+\advance\CD@VA-\CD@lA\advance\CD@VA\m@ne\advance\CD@VA\CD@mA\dimen0\wd\CD@VA
+\CD@tI\axisheight\dimen1\CD@uB\advance\dimen1-\CD@YB\dimen2\CD@kI\advance
+\dimen2-\dimen0 \advance\CD@XB-\CD@CA\advance\CD@LB-\CD@lA}\count@\year
+\multiply\count@12 \advance\count@\month\ifnum\count@>24158 \loop\iftrue
+\message{gone February 2013!}\repeat\fi\def\CD@wB{\CD@qI-\CD@NF\CD@pI\CD@NF
+\setbox\CD@MH=\null\dp\CD@MH\CD@NF\ht\CD@MH-\CD@NF\CD@mF\z@\CD@mI\z@\CD@lA
+\CD@LB\advance\CD@lA-\CD@MB\advance\CD@lA\CD@mA\CD@FA\CD@LB\CD@VA\CD@MB\CD@sF
+\ifnum\CD@FA>\CD@lA\advance\CD@FA\m@ne\advance\CD@VA\m@ne\CD@tB\wd\CD@VA
+\setbox\CD@FA=\box\voidb@x\CD@yB\repeat\CD@w\ht\CD@NB\CD@qI\dp\CD@NB\CD@pI}%
+\def\CD@gG#1#2#3{\ifdim#1>.01\CD@zC\CD@PA#2\relax\advance\CD@PA#1\relax
+\advance\CD@PA.99\CD@zC\count@\CD@PA\divide\count@\CD@zC\CD@KB{increase cell #%
+3 to \the\count@ em}\fi}\def\CD@rI{\CD@FA=\CD@LB\penalty4 \noindent\unhbox
+\CD@NB\CD@sF\unskip\setbox0=\lastbox\ifhbox0 \advance\CD@FA\m@ne\setbox\CD@FA
+\hbox to\wd0{\null\penalty-9990\null\unhbox0}\repeat\CD@lA\CD@FA\advance
+\CD@FA\CD@MB\advance\CD@FA-\CD@mA\ifnum\CD@FA<\CD@LB\count@\CD@FA\advance
+\count@\m@ne\dimen0=\wd\count@\count@\CD@MB\advance\count@\m@ne\CD@tB\wd
+\count@\CD@sF\ifnum\CD@FA<\CD@LB\CD@DJ\CD@XG\dimen0\wd\CD@FA\advance\CD@FA1
+\repeat\fi\CD@sF\CD@GB\lastpenalty\unpenalty\ifnum\CD@GB>\z@\CD@vA
+\lastpenalty\unpenalty\CD@VG\repeat\endgraf\unskip\ifnum\lastpenalty=4
+\unpenalty\else\cd@shouldnt S\fi}\def\CD@VG{\advance\CD@vA\CD@lA\advance
+\CD@vA\m@ne\setbox0=\lastbox\ifnum\CD@vA<\CD@LB\setbox\CD@vA\hbox{\box0%
+\penalty\CD@GB\unhbox\CD@vA}\else\CD@UG\fi}\def\CD@bG{}\CD@tG\CD@uE\CD@WB
+\CD@VB\def\CD@DJ{\advance\dimen0\wd\CD@FA\divide\dimen0\tw@\CD@uE\dimen0%
+\DiagramCellWidth\else\CD@V{\dimen0}\DiagramCellWidth\CD@pJ\fi\advance\CD@tB
+\dimen0 }\def\CD@XG{\setbox\CD@MB=\vbox{}\dp\CD@MB=\CD@uB\wd\CD@MB\CD@tB
+\advance\CD@MB1 }\def\CD@LJ#1,{\def\CD@GK{#1}\ifx\CD@GK\CD@RD\else\advance
+\CD@tB\CD@GK\DiagramCellWidth\CD@XG\expandafter\CD@LJ\fi}\def\CD@VJ#1,{\def
+\CD@GK{#1}\ifx\CD@GK\CD@RD\else\ifnum\CD@NB>\CD@CA\CD@NF\CD@GK
+\DiagramCellHeight\advance\CD@NF-\dp\CD@NB\advance\CD@NB\m@ne\ht\CD@NB\CD@NF
+\fi\expandafter\CD@VJ\fi}\def\CD@pJ{\CD@wE\CD@OA\dimen0 \advance\CD@OA-%
+\DiagramCellWidth\ifdim\CD@OA>2\MapShortFall\CD@KB{badly drawn diagonals (see
+manual)}\let\CD@pJ\empty\fi\else\let\CD@pJ\empty\fi}\def\CD@KC{\CD@VA\CD@mA
+\CD@sF\ifnum\CD@VA<\CD@MB\dimen0\dp\CD@VA\advance\dimen0\CD@NF\dp\CD@VA\dimen
+0 \advance\CD@VA1 \repeat}\def\CD@bH#1#2#3#4{\ifnum\CD@FA<\CD@LB\CD@OA=#1%
+\relax\setbox\CD@FA=\hbox{\setbox0=#2\dimen7=#4\relax\dimen8=#3\relax\ifhbox
+\CD@FA\unhbox\CD@FA\advance\CD@OA-\lastkern\unkern\fi\ifdim\CD@OA=\z@\else
+\kern-\CD@OA\fi\raise\dimen7\box0 \kern-\dimen8 }\ifnum\CD@FA=\CD@lA\CD@V
+\CD@kF\CD@OA\fi\else\cd@shouldnt O\fi}\def\CD@w{\setbox\CD@NB=\hbox{\CD@FA
+\CD@lA\CD@VA\CD@mA\CD@PA\z@\relax\CD@sF\ifnum\CD@FA<\CD@LB\CD@tB\wd\CD@VA
+\relax\CD@eI\advance\CD@FA1 \advance\CD@VA1 \repeat}\CD@V\CD@kI{\wd\CD@NB}\wd
+\CD@NB\z@}\def\CD@eI{\ifhbox\CD@FA\CD@OA\CD@tB\relax\advance\CD@OA-\CD@PA
+\relax\ifdim\CD@OA=\z@\else\kern\CD@OA\fi\CD@PA\CD@tB\advance\CD@PA\wd\CD@FA
+\relax\unhbox\CD@FA\advance\CD@PA-\lastkern\unkern\fi}\def\CD@ZI{\setbox
+\CD@sH=\box\voidb@x\CD@VA=\CD@MB\CD@FA\CD@LB\CD@VA\CD@mA\advance\CD@VA\CD@FA
+\advance\CD@VA-\CD@lA\advance\CD@VA\m@ne\CD@tB\wd\CD@VA\count@\CD@LB\advance
+\count@\m@ne\CD@hF.5\wd\count@\advance\CD@hF\CD@tB\CD@A\m@ne\CD@gD\@m\CD@sF
+\ifnum\CD@FA>\CD@lA\advance\CD@FA\m@ne\advance\CD@hF-\CD@tB\CD@PI\wd\CD@VA
+\CD@tB\advance\CD@hF\CD@tB\advance\CD@VA\m@ne\CD@tB\wd\CD@VA\repeat\CD@mF
+\CD@kF\CD@mI-\CD@mF\CD@vB}\newcount\CD@GB\def\CD@s{}\def\CD@t{\mathsurround
+\z@\hsize\z@\rightskip\z@ plus1fil minus\maxdimen\parfillskip\z@\linepenalty
+9000 \looseness0 \hfuzz\maxdimen\hbadness10000 \clubpenalty0 \widowpenalty0
+\displaywidowpenalty0 \interlinepenalty0 \predisplaypenalty0
+\postdisplaypenalty0 \interdisplaylinepenalty0 \interfootnotelinepenalty0
+\floatingpenalty0 \brokenpenalty0 \everypar{}\leftskip\z@\parskip\z@
+\parindent\z@\pretolerance10000 \tolerance10000 \hyphenpenalty10000
+\exhyphenpenalty10000 \binoppenalty10000 \relpenalty10000 \adjdemerits0
+\doublehyphendemerits0 \finalhyphendemerits0 \CD@IA\prevdepth\z@}\newbox
+\CD@KG\newbox\CD@IG\def\CD@JG{\unhcopy\CD@KG}\def\CD@HG{\unhcopy\CD@IG}\def
+\CD@iJ{\hbox{}\penalty1\nointerlineskip}\def\CD@PI{\penalty5 \noindent\setbox
+\CD@MH=\null\CD@mF\z@\CD@mI\z@\ifnum\CD@FA<\CD@LB\ht\CD@MH\ht\CD@FA\dp\CD@MH
+\dp\CD@FA\unhbox\CD@FA\skip0=\lastskip\unskip\else\CD@OK\skip0=\z@\fi\endgraf
+\ifcase\prevgraf\cd@shouldnt Y \or\cd@shouldnt Z \or\CD@RI\or\CD@XI\else
+\CD@QI\fi\unskip\setbox0=\lastbox\unskip\unskip\unpenalty\noindent\unhbox0%
+\setbox0\lastbox\unpenalty\unskip\unskip\unpenalty\setbox0\lastbox\CD@tF
+\CD@GB\lastpenalty\unpenalty\ifnum\CD@GB>\z@\setbox\z@\lastbox\CD@lB\repeat
+\endgraf\unskip\unskip\unpenalty}\def\CD@YJ{\CD@uA\CD@XB\advance\CD@uA-\CD@NB
+\CD@vA\CD@FA\advance\CD@vA-\CD@lA\advance\CD@vA1 \expandafter\message{%
+prevgraf=\the\prevgraf at (\the\CD@uA,\the\CD@vA)}}\def\CD@XI{\CD@CE\setbox
+\CD@lI=\lastbox\setbox\CD@lI=\hbox{\unhbox\CD@lI\unskip\unpenalty}\unskip
+\ifdim\ht\CD@lI>\ht\CD@PC\setbox\CD@MH=\copy\CD@lI\else\ifdim\dp\CD@lI>\dp
+\CD@PC\setbox\CD@MH=\copy\CD@lI\else\CD@FG\CD@lI\fi\fi\advance\CD@mF.5\wd
+\CD@lI\advance\CD@mI.5\wd\CD@lI\setbox\CD@lI=\hbox{\unhbox\CD@lI\CD@HG}\CD@bH
+\CD@mF{\box\CD@lI}\CD@mI\z@\CD@yB\CD@vB}\def\CD@CE{\ifnum\CD@A>0 \advance
+\dimen0-\CD@tB\CD@iA-.5\dimen0 \CD@A-\CD@A\else\CD@A0 \CD@iA\z@\fi\setbox
+\CD@MH=\lastbox\setbox\CD@MH=\hbox{\unhbox\CD@MH\unskip\unskip\unpenalty
+\setbox0=\lastbox\global\CD@QA\lastkern\unkern}\advance\CD@iA-.5\CD@QA\unskip
+\setbox\CD@MH=\null\CD@mI\CD@iA\CD@mF-\CD@iA}\def\CD@Z{\ht\CD@MH\CD@tI\dp
+\CD@MH\CD@sI}\def\CD@FG#1{\setbox\CD@MH=\hbox{\CD@V{\ht\CD@MH}{\ht#1}\CD@V{%
+\dp\CD@MH}{\dp#1}\CD@V{\wd\CD@MH}{\wd#1}\vrule height\ht\CD@MH depth\dp\CD@MH
+width\wd\CD@MH}}\def\CD@QI{\CD@CE\CD@Z\setbox\CD@lI=\lastbox\unskip\setbox
+\CD@lF=\lastbox\unskip\setbox\CD@lF=\hbox{\unhbox\CD@lF\unskip\global\CD@yA
+\lastpenalty\unpenalty}\advance\CD@yA9999 \ifcase\CD@yA\CD@VI\or\CD@YI\or
+\CD@TI\or\CD@dI\or\CD@cI\or\CD@SI\else\cd@shouldnt9\fi}\def\CD@VI{\CD@FG
+\CD@lI\CD@UI\setbox\CD@sH=\box\CD@lF\setbox\CD@tH=\box\CD@lI}\def\CD@YI{%
+\CD@FG\CD@lF\setbox\CD@lI\hbox{\penalty8 \unhbox\CD@lI\unskip\unpenalty\ifnum
+\lastpenalty=8 \else\CD@xH\fi}\CD@UI\setbox\CD@lF=\hbox{\unhbox\CD@lF\unskip
+\unpenalty\global\setbox\CD@DA=\lastbox}\ifdim\wd\CD@lF=\z@\else\CD@xH\fi
+\setbox\CD@sH=\box\CD@DA}\def\CD@xH{\CD@KB{extra material in \string\pile
+\space cell (lost)}}\def\CD@UI{\CD@yB\ifvoid\CD@sH\else\CD@KB{Clashing
+horizontal arrows}\CD@mI.5\CD@hF\CD@mF-\CD@mI\CD@vB\CD@mI\z@\CD@mF\z@\fi
+\CD@hI\CD@hF\advance\CD@hI-\CD@mI\CD@hF-\CD@mF\CD@JC\CD@FA}\def\CD@RI{\setbox
+0\lastbox\unskip\CD@iA\z@\CD@Z\ifdim\skip0>\z@\CD@tJ\CD@A0 \else\ifnum\CD@A<1
+\CD@A0 \dimen0\CD@tB\fi\advance\CD@A1 \fi}\def\VonH{\CD@MA46\VonH{.5\CD@LF}}%
+\def\HonV{\CD@MA57\HonV{.5\CD@LF}}\def\HmeetV{\CD@MA44\HmeetV{-\MapShortFall}%
+}\def\CD@MA#1#2#3#4{\CD@pB34#1{\string#3}\CD@SD\CD@GB-999#2 \dimen0=#4\CD@tI
+\dimen0\advance\CD@tI\axisheight\CD@sI\dimen0\advance\CD@sI-\axisheight\CD@CF
+\CD@HC\CD@ZD}\def\CD@HC#1{\setbox0=\hbox{\CD@k#1\CD@ND}\dimen0.5\wd0 \CD@tI
+\ht0 \CD@sI\dp0 \CD@ZD}\def\CD@SD{\setbox0=\null\ht0=\CD@tI\dp0=\CD@sI\wd0=%
+\dimen0 \copy0\penalty\CD@GB\box0 }\def\CD@TI{\CD@GC\CD@yB}\def\CD@dI{\CD@GC
+\CD@vB}\def\CD@SI{\CD@GC\CD@yB\CD@vB}\def\CD@GC{\setbox\CD@lI=\hbox{\unhbox
+\CD@lI}\setbox\CD@lF=\hbox{\unhbox\CD@lF\global\setbox\CD@DA=\lastbox}\ht
+\CD@MH\ht\CD@DA\dp\CD@MH\dp\CD@DA\advance\CD@mF\wd\CD@DA\advance\CD@mI\wd
+\CD@lI}\CD@tG\ifPositiveGradient\CD@CI\CD@BI\CD@CI\CD@tG\ifClimbing\CD@rB
+\CD@qB\CD@rB\newcount\DiagonalChoice\DiagonalChoice\m@ne\ifx\tenln\nullfont
+\CD@tJ\def\CD@qF{\CD@KH\ifPositiveGradient/\else\CD@k\backslash\CD@ND\fi}%
+\else\def\CD@qF{\CD@rF\char\count@}\fi\let\CD@rF\tenln\def\Use@line@char#1{%
+\hbox{#1\CD@rF\ifPositiveGradient\else\advance\count@64 \fi\char\count@}}\def
+\CD@cF{\Use@line@char{\count@\CD@TC\multiply\count@8\advance\count@-9\advance
+\count@\CD@LH}}\def\CD@ZF{\Use@line@char{\ifcase\DiagonalChoice\CD@gF\or
+\CD@fF\or\CD@fF\else\CD@gF\fi}}\def\CD@gF{\ifnum\CD@TC=\z@\count@'33 \else
+\count@\CD@TC\multiply\count@\sixt@@n\advance\count@-9\advance\count@\CD@LH
+\advance\count@\CD@LH\fi}\def\CD@fF{\count@'\ifcase\CD@LH55\or\ifcase\CD@TC66%
+\or22\or52\or61\or72\fi\or\ifcase\CD@TC66\or25\or22\or63\or52\fi\or\ifcase
+\CD@TC66\or16\or36\or22\or76\fi\or\ifcase\CD@TC66\or27\or25\or67\or22\fi\fi
+\relax}\def\CD@uC#1{\hbox{#1\setbox0=\Use@line@char{#1}\ifPositiveGradient
+\else\raise.3\ht0\fi\copy0 \kern-.7\wd0 \ifPositiveGradient\raise.3\ht0\fi
+\box0}}\def\CD@jF#1{\hbox{\setbox0=#1\kern-.75\wd0 \vbox to.25\ht0{%
+\ifPositiveGradient\else\vss\fi\box0 \ifPositiveGradient\vss\fi}}}\def\CD@jI#%
+1{\hbox{\setbox0=#1\dimen0=\wd0 \vbox to.25\ht0{\ifPositiveGradient\vss\fi
+\box0 \ifPositiveGradient\else\vss\fi}\kern-.75\dimen0 }}\CD@RC{+h:>}{%
+\Use@line@char\CD@fF}\CD@RC{-h:>}{\Use@line@char\CD@gF}\CD@nF{+t:<}{-h:>}%
+\CD@nF{-t:<}{+h:>}\CD@RC{+t:>}{\CD@jF{\Use@line@char\CD@fF}}\CD@RC{-t:>}{%
+\CD@jI{\Use@line@char\CD@gF}}\CD@nF{+h:<}{-t:>}\CD@nF{-h:<}{+t:>}\CD@RC{+h:>>%
+}{\CD@uC\CD@fF}\CD@RC{-h:>>}{\CD@uC\CD@gF}\CD@nF{+t:<<}{-h:>>}\CD@nF{-t:<<}{+%
+h:>>}\CD@nF{+h:>->}{+h:>>}\CD@nF{-h:>->}{-h:>>}\CD@nF{+t:<-<}{-h:>>}\CD@nF{-t%
+:<-<}{+h:>>}\CD@RC{+t:>>}{\CD@jF{\CD@uC\CD@fF}}\CD@RC{-t:>>}{\CD@jI{\CD@uC
+\CD@gF}}\CD@nF{+h:<<}{-t:>>}\CD@nF{-h:<<}{+t:>>}\CD@nF{+t:>->}{+t:>>}\CD@nF{-%
+t:>->}{-t:>>}\CD@nF{+h:<-<}{-t:>>}\CD@nF{-h:<-<}{+t:>>}\CD@RC{+f:-}{\CD@EF
+\null\else\CD@cF\fi}\CD@nF{-f:-}{+f:-}\def\CD@tC#1#2{\vbox to#1{\vss\hbox to#%
+2{\hss.\hss}\vss}}\def\hfdot{\CD@tC{2\axisheight}{.5em}}%
+%% % .7em until 29.7.98
+\def\vfdot{\CD@tC{1ex}\z@}%% % 1.46ex until 29.7.98
+\def\CD@bF{\hbox{\dimen0=.3\CD@zC\dimen1\dimen0 \ifnum\CD@LH>\CD@TC\CD@iC{%
+\dimen1}\else\CD@dG{\dimen0}\fi\CD@tC{\dimen0}{\dimen1}}}\newarrowfiller{.}%
+\hfdot\hfdot\vfdot\vfdot\def\dfdot{\CD@bF\CD@CK}\CD@RC{+f:.}{\dfdot}\CD@RC{-f%
+:.}{\dfdot}\def\CD@@K#1{\hbox\bgroup\def\CD@CH{#1\egroup}\afterassignment
+\CD@CH%%
+\count@='}\def\lnchar{\CD@@K\CD@qF}\def\CD@dF#1{\setbox#1=\hbox{\dimen5\dimen
+#1 \setbox8=\box#1 \dimen1\wd8 \count@\dimen5 \divide\count@\dimen1 \ifnum
+\count@=0 \box8 \ifdim\dimen5<.95\dimen1 \CD@gB{diagonal line too short}\fi
+\else\dimen3=\dimen5 \advance\dimen3-\dimen1 \divide\dimen3\count@\dimen4%
+\dimen3 \CD@dG{\dimen4}\ifPositiveGradient\multiply\dimen4\m@ne\fi\dimen6%
+\dimen1 \advance\dimen6-\dimen3 \loop\raise\count@\dimen4\copy8 \ifnum\count@
+>0 \kern-\dimen6 \advance\count@\m@ne\repeat\fi}}\def\CD@CG#1{\CD@EF\CD@xJ{#1%
+}\else\CD@dF{#1}\fi}\def\CD@IH#1{}\newdimen\objectheight\objectheight1.8ex
+\newdimen\objectwidth\objectwidth1em \def\CD@YD{\dimen6=\CD@aK
+\DiagramCellHeight\dimen7=\CD@WK\DiagramCellWidth\CD@KJ\ifnum\CD@LH>0 \ifnum
+\CD@TC>0 \CD@aF\else\aftergroup\CD@VC\fi\else\aftergroup\CD@UC\fi}\def\CD@VC{%
+\CD@YA{diagonal map is nearly vertical}\CD@NA}\def\CD@UC{\CD@YA{diagonal map
+is nearly horizontal}\CD@NA}\CD@rG\CD@NA{Use an orthogonal map instead}\def
+\CD@aF{\CD@MJ\dimen3\dimen7\dimen7\dimen6\CD@iC{\dimen7}\advance\dimen3-%
+\dimen7 \CD@MF\ifnum\CD@LH>\CD@TC\advance\dimen6-\dimen1\advance\dimen6-%
+\dimen5 \CD@iC{\dimen1}\CD@iC{\dimen5}\else\dimen0\dimen1\advance\dimen0%
+\dimen5\CD@dG{\dimen0}\advance\dimen6-\dimen0 \fi\dimen2.5\dimen7\advance
+\dimen2-\dimen1 \dimen4.5\dimen7\advance\dimen4-\dimen5 \ifPositiveGradient
+\dimen0\dimen5 \advance\dimen1-\CD@WK\DiagramCellWidth\advance\dimen1 \CD@ZK
+\DiagramCellWidth\setbox6=\llap{\unhbox6\kern.1\ht2}\setbox7=\rlap{\kern.1\ht
+2\unhbox7}\else\dimen0\dimen1 \advance\dimen1-\CD@ZK\DiagramCellWidth\setbox7%
+=\llap{\unhbox7\kern.1\ht2}\setbox6=\rlap{\kern.1\ht2\unhbox6}\fi\setbox6=%
+\vbox{\box6\kern.1\wd2}\setbox7=\vtop{\kern.1\wd2\box7}\CD@dG{\dimen0}%
+\advance\dimen0-\axisheight\advance\dimen0-\CD@bK\DiagramCellHeight\dimen5-%
+\dimen0 \advance\dimen0\dimen6 \advance\dimen1.5\dimen3 \ifdim\wd3>\z@\ifdim
+\ht3>-\dp3\CD@TB\fi\fi\dimen3\dimen2 \dimen7\dimen2\advance\dimen7\dimen4
+\ifvoid3 \else\CD@tE\else\dimen8\ht3\advance\dimen8-\axisheight\CD@iC{\dimen8%
+}\CD@X{\dimen8}{.5\wd3}\dimen9\dp3\advance\dimen9\axisheight\CD@iC{\dimen9}%
+\CD@X{\dimen9}{.5\wd3}\ifPositiveGradient\advance\dimen2-\dimen9\advance
+\dimen4-\dimen8 \else\advance\dimen4-\dimen9\advance\dimen2-\dimen8 \fi\fi
+\advance\dimen3-.5\wd3 \fi\dimen9=\CD@aK\DiagramCellHeight\advance\dimen9-2%
+\DiagramCellHeight\CD@tE\advance\dimen2\dimen4 \CD@CG{2}\dimen2-\dimen0%
+\advance\dimen2\dp2 \else\CD@CG{2}\CD@CG{4}\ifPositiveGradient\dimen2-\dimen0%
+\advance\dimen2\dp2 \dimen4\dimen5\advance\dimen4-\ht4 \else\dimen4-\dimen0%
+\advance\dimen4\dp4 \dimen2\dimen5\advance\dimen2-\ht2 \fi\fi\setbox0=\hbox to%
+\z@{\kern\dimen1 \ifvoid1 \else\ifPositiveGradient\advance\dimen0-\dp1 \lower
+\dimen0 \else\advance\dimen5-\ht1 \raise\dimen5 \fi\rlap{\unhbox1}\fi\raise
+\dimen2\rlap{\unhbox2}\ifvoid3 \else\lower.5\dimen9\rlap{\kern\dimen3\unhbox3%
+}\fi\kern.5\dimen7 \lower.5\dimen9\box6 \lower.5\dimen9\box7 \kern.5\dimen7
+\CD@tE\else\raise\dimen4\llap{\unhbox4}\fi\ifvoid5 \else\ifPositiveGradient
+\advance\dimen5-\ht5 \raise\dimen5 \else\advance\dimen0-\dp5 \lower\dimen0 \fi
+\llap{\unhbox5}\fi\hss}\ht0=\axisheight\dp0=-\ht0\box0 }\def\NorthWest{\CD@BI
+\CD@rB\DiagonalChoice0 }\def\NorthEast{\CD@CI\CD@rB\DiagonalChoice1 }\def
+\SouthWest{\CD@CI\CD@qB\DiagonalChoice3 }\def\SouthEast{\CD@BI\CD@qB
+\DiagonalChoice2 }\def\CD@aD{\vadjust{\CD@uA\CD@FA\advance\CD@uA
+\ifPositiveGradient\else-\fi\CD@ZK\relax\CD@vA\CD@NB\advance\CD@vA-\CD@bK
+\relax\hbox{\advance\CD@uA\ifPositiveGradient-\fi\CD@WK\advance\CD@vA\CD@aK
+\hbox{\box6 \kern\CD@DC\kern\CD@eJ\penalty1 \box7 \box\z@}\penalty\CD@uA
+\penalty\CD@vA}\penalty\CD@uA\penalty\CD@vA\penalty104}}\def\CD@eH#1{\relax
+\vadjust{\hbox@maths{#1}\penalty\CD@FA\penalty\CD@NB\penalty\tw@}}\def\CD@lB{%
+\ifcase\CD@GB\or\or\CD@bH{.5\wd0}{\box0}{.5\wd0}\z@\or\unhbox\z@\setbox\z@
+\lastbox\CD@bH{.5\wd0}{\box0}{.5\wd0}\z@\unpenalty\unpenalty\setbox\z@
+\lastbox\or\CD@TG\else\advance\CD@GB-100 \ifnum\CD@GB<\z@\cd@shouldnt B\fi
+\setbox\z@\hbox{\kern\CD@mF\copy\CD@MH\kern\CD@mI\CD@uA\CD@XB\advance\CD@uA-%
+\CD@NB\penalty\CD@uA\CD@uA\CD@FA\advance\CD@uA-\CD@lA\penalty\CD@uA\unhbox\z@
+\global\CD@yA\lastpenalty\unpenalty\global\CD@zA\lastpenalty\unpenalty}\CD@uA
+-\CD@yA\CD@vA\CD@zA\CD@fI\fi}\def\CD@TG{\unhbox\z@\setbox\z@\lastbox\CD@uA
+\lastpenalty\unpenalty\advance\CD@uA\CD@mA\CD@vA\CD@XB\advance\CD@vA-%
+\lastpenalty\unpenalty\dimen1\lastkern\unkern\setbox3\lastbox\dimen0\lastkern
+\unkern\setbox0=\hbox to\z@{\unhbox0\setbox0\lastbox\setbox7\lastbox
+\unpenalty\CD@eJ\lastkern\unkern\CD@DC\lastkern\unkern\setbox6\lastbox\dimen7%
+\CD@tB\advance\dimen7-\wd\CD@uA\ifdim\dimen7<\z@\CD@CI\multiply\dimen7\m@ne
+\let\mv\empty\else\CD@BI\def\mv{\raise\ht1}\kern-\dimen7 \fi\ifnum\CD@vA>%
+\CD@NB\dimen6\CD@uB\advance\dimen6-\ht\CD@vA\else\dimen6\z@\fi\CD@jJ\CD@mK
+\setbox1\null\ht1\dimen6\wd1\dimen7 \dimen7\dimen2 \dimen6\wd1 \CD@KJ\CD@uA
+\CD@LH\CD@vA\CD@TC\dimen6\ht1 \CD@KJ\setbox2\null\divide\dimen2\tw@\advance
+\dimen2\CD@eJ\CD@eG{\dimen2}\wd2\dimen2 \dimen0.5\dimen7 \advance\dimen0%
+\ifPositiveGradient\else-\fi\CD@eJ\CD@dG{\dimen0}\advance\dimen0-\axisheight
+\ht2\dimen0 \dimen0\CD@DC\CD@eG{\dimen0}\advance\dimen0\ht2\ht2\dimen0 \dimen
+0\ifPositiveGradient-\fi\CD@DC\CD@dG{\dimen0}\advance\dimen0\wd2\wd2\dimen0
+\setbox4\null\dimen0 .6\CD@zC\CD@eG{\dimen0}\ht4\dimen0 \dimen0 .2\CD@zC
+\CD@dG{\dimen0}\wd4\dimen0 \dimen0\wd2 \ifvoid6\else\dimen1\ht4 \advance
+\dimen1\ht2 \CD@CC6+-\raise\dimen1\rlap{\ifPositiveGradient\advance\dimen0-%
+\wd6\advance\dimen0-\wd4 \else\advance\dimen0\wd4 \fi\kern\dimen0\box6}\fi
+\dimen0\wd2 \ifvoid7\else\dimen1\ht4 \advance\dimen1-\ht2 \CD@CC7-+\lower
+\dimen1\rlap{\ifPositiveGradient\advance\dimen0\wd4 \else\advance\dimen0-\wd7%
+\advance\dimen0-\wd4 \fi\kern\dimen0\box7}\fi\mv\box0\hss}\ht0\z@\dp0\z@
+\CD@bH{\z@}{\box\z@}{\z@}{\axisheight}}\def\CD@CC#1#2#3{\dimen4.5\wd#1 \ifdim
+\dimen4>.25\dimen7\dimen4=.25\dimen7\fi\ifdim\dimen4>\CD@zC\dimen4.4\dimen4
+\advance\dimen4.6\CD@zC\fi\CD@eG{\dimen4}\dimen5\axisheight\CD@dG{\dimen5}%
+\advance\dimen4-\dimen5 \dimen5\dimen4\CD@eG{\dimen5}\advance\dimen0%
+\ifPositiveGradient#2\else#3\fi\dimen5 \CD@dG{\dimen4}\advance\dimen1\dimen4 }
+\def\CD@eD#1{\expandafter\CD@IK{#1}}\CD@ZA\CD@EK{output is PostScript
+dependent}\def\CD@SC{\CD@IK{/bturn {gsave currentpoint currentpoint translate
+4 2 roll neg exch atan rotate neg exch neg exch translate } def /eturn {%
+currentpoint grestore moveto} def}}\def\CD@gK{\relax\CD@hK\CD@tK{Q}\else
+\CD@IK{eturn}\fi} \def\CD@OJ#1{\count@#1\relax\multiply\count@7\advance
+\count@16577\divide\count@33154 }\def\CD@fD#1{\expandafter\special{#1}} \def
+\CD@xJ#1{\setbox#1=\hbox{\dimen0\dimen#1\CD@dG{\dimen0}\CD@OJ{\dimen0}\setbox
+0=\null\ifPositiveGradient\count@-\count@\ht0\dimen0 \else\dp0\dimen0 \fi\box
+0 \CD@uA\count@\CD@OJ\CD@LF\CD@fD{pn \the\count@}\CD@fD{pa 0 0}\CD@OJ{\dimen#%
+1}\CD@fD{pa \the\count@\space\the\CD@uA}\CD@fD{fp}\kern\dimen#1}}\def\CD@JI{%
+\CD@KJ\begingroup\ifdim\dimen7<\dimen6 \dimen2=\dimen6 \dimen6=\dimen7 \dimen
+7=\dimen2 \count@\CD@LH\CD@LH\CD@TC\CD@TC\count@\else\dimen2=\dimen7 \fi
+\ifdim\dimen6>.01\p@\CD@KI\global\CD@QA\dimen0 \else\global\CD@QA\dimen7 \fi
+\endgroup\dimen2\CD@QA\CD@iK\CD@lK{\ifPositiveGradient\else-\fi\dimen6}\CD@iK
+\CD@kK{\ifPositiveGradient-\fi\dimen6}\CD@iK\CD@eK{\dimen7}}\def\CD@KI{\CD@hJ
+\ifdim\dimen7>1.73\dimen6 \divide\dimen2 4 \multiply\CD@TC2 \else\dimen2=0.%
+353553\dimen2 \advance\CD@LH-\CD@TC\multiply\CD@TC4 \fi\dimen0=4\dimen2 \CD@ZG
+4\CD@ZG{-2}\CD@ZG2\CD@ZG{-2.5}}\def\CD@AI{\begingroup\count@\dimen0 \dimen2 45%
+pt \divide\count@\dimen2 \ifdim\dimen0<\z@\advance\count@\m@ne\fi\ifodd
+\count@\advance\count@1\CD@@A\else\CD@y\fi\advance\dimen0-\count@\dimen2
+\CD@gE\multiply\dimen0\m@ne\fi\ifnum\count@<0 \multiply\count@-7 \fi\dimen3%
+\dimen1 \dimen6\dimen0 \dimen7 3754936sp \ifdim\dimen0<6\p@\def\CD@OG{4000}%
+\fi\CD@KJ\dimen2\dimen3\CD@dG{\dimen2}\CD@hJ\multiply\CD@TC-6 \dimen0\dimen2
+\CD@ZG1\CD@ZG{0.3}\dimen1\dimen0 \dimen2\dimen3 \dimen0\dimen3 \CD@ZG3\CD@ZG{%
+1.5}\CD@ZG{0.3}\divide\count@2 \CD@gE\multiply\dimen1\m@ne\fi\ifodd\count@
+\dimen2\dimen1\dimen1\dimen0\dimen0-\dimen2 \fi\divide\count@2 \ifodd\count@
+\multiply\dimen0\m@ne\multiply\dimen1\m@ne\fi\global\CD@QA\dimen0\global
+\CD@RA\dimen1\endgroup\dimen6\CD@QA\dimen7\CD@RA}\def\CD@OC{255}\let\CD@OG
+\CD@OC\def\CD@KJ{\begingroup\ifdim\dimen7<\dimen6 \dimen9\dimen7\dimen7\dimen
+6\dimen6\dimen9\CD@@A\else\CD@y\fi\dimen2\z@\dimen3\CD@XH\dimen4\CD@XH\dimen0%
+\z@\dimen8=\CD@OG\CD@XH\CD@lC\global\CD@yA\dimen\CD@gE0\else3\fi\global\CD@zA
+\dimen\CD@gE3\else0\fi\endgroup\CD@LH\CD@yA\CD@TC\CD@zA}\def\CD@lC{\count@
+\dimen6 \divide\count@\dimen7 \advance\dimen6-\count@\dimen7 \dimen9\dimen4
+\advance\dimen9\count@\dimen0 \ifdim\dimen9>\dimen8 \CD@@C\else\CD@AC\ifdim
+\dimen6>\z@\dimen9\dimen6 \dimen6\dimen7 \dimen7\dimen9 \expandafter
+\expandafter\expandafter\CD@lC\fi\fi}\def\CD@@C{\ifdim\dimen0=\z@\ifdim\dimen
+9<2\dimen8 \dimen0\dimen8 \fi\else\advance\dimen8-\dimen4 \divide\dimen8%
+\dimen0 \ifdim\count@\CD@XH<2\dimen8 \count@\dimen8 \dimen9\dimen4 \advance
+\dimen9\count@\dimen0 \CD@AC\fi\fi}\def\CD@AC{\dimen4\dimen0 \dimen0\dimen9
+\advance\dimen2\count@\dimen3 \dimen9\dimen2 \dimen2\dimen3 \dimen3\dimen9 }%
+\def\CD@ZG#1{\CD@dG{\dimen2}\advance\dimen0 #1\dimen2 }\def\CD@dG#1{\divide#1%
+\CD@TC\multiply#1\CD@LH}\def\CD@eG#1{\divide#1\CD@vA\multiply#1\CD@uA}\def
+\CD@iC#1{\divide#1\CD@LH\multiply#1\CD@TC}\def\CD@hJ{\dimen6\CD@LH\CD@XH
+\multiply\dimen6\CD@LH\dimen7\CD@TC\CD@XH\multiply\dimen7\CD@TC\CD@KJ}\def
+\CD@iK#1#2{\begingroup\dimen@#2\relax\loop\ifdim\dimen2<.4\maxdimen\multiply
+\dimen2\tw@\multiply\dimen@\tw@\repeat\divide\dimen2\@cclvi\divide\dimen@
+\dimen2\relax\multiply\dimen@\@cclvi\expandafter\CD@jK\the\dimen@\endgroup
+\let#1\CD@fK}{\catcode`p=12 \catcode`0=12 \catcode`.=12 \catcode`t=12 \gdef
+\CD@jK#1pt{\gdef\CD@fK{#1}}}\ifx\errorcontextlines\CD@qK\CD@tJ\let\CD@GH
+\relax\else\def\CD@GH{\errorcontextlines\m@ne}\fi\ifnum\inputlineno<0 \let
+\CD@CD\empty\let\CD@W\empty\let\CD@mD\relax\let\CD@uI\relax\let\CD@vI\relax
+\let\CD@zF\relax\message{! Why not upgrade to TeX version 3? (available since
+1990)}\else\def\CD@W{ at line \number\inputlineno}\def\CD@mD{ - first occurred%
+}\def\CD@uI{\edef\CD@h{\the\inputlineno}\global\let\CD@jB\CD@h}\def\CD@h{9999%
+}\def\CD@vI{\xdef\CD@jB{\the\inputlineno}}\def\CD@jB{\CD@h}\def\CD@zF{\ifnum
+\CD@h<\inputlineno\edef\CD@CD{\space at lines \CD@h--\the\inputlineno}\else
+\edef\CD@CD{\CD@W}\fi}\fi\let\CD@CD\empty\def\CD@YA#1#2{\CD@GH\errhelp=#2%
+\expandafter\errmessage{\CD@tA: #1}}\def\CD@KB#1{\begingroup\expandafter
+\message{! \CD@tA: #1\CD@CD}\ifnum\CD@XB>\CD@NB\ifnum\CD@CA>\CD@NB\else\ifnum
+\CD@lA>\CD@FA\else\ifnum\CD@LB>\CD@FA\advance\CD@XB-\CD@NB\advance\CD@FA-%
+\CD@lA\advance\CD@FA1\relax\expandafter\message{! (error detected at row \the
+\CD@XB, column \the\CD@FA, but probably caused elsewhere)}\fi\fi\fi\fi
+\endgroup}\def\CD@gB#1{{\expandafter\message{\CD@tA\space Warning: #1\CD@W}}}%
+\def\CD@CB#1#2{\CD@gB{#1 \string#2 is obsolete\CD@mD}}\def\CD@AB#1{\CD@CB{%
+Dimension}{#1}\CD@DE#1\CD@BB\CD@BB}\def\CD@BB{\CD@OA=}\def\CD@@B#1{\CD@CB{%
+Count}{#1}\CD@DE#1\CD@OH\CD@OH}\def\CD@OH{\count@=}\def\HorizontalMapLength{%
+\CD@AB\HorizontalMapLength}\def\VerticalMapHeight{\CD@AB\VerticalMapHeight}%
+\def\VerticalMapDepth{\CD@AB\VerticalMapDepth}\def\VerticalMapExtraHeight{%
+\CD@AB\VerticalMapExtraHeight}\def\VerticalMapExtraDepth{\CD@AB
+\VerticalMapExtraDepth}\def\DiagonalLineSegments{\CD@@B\DiagonalLineSegments}%
+\ifx\tenln\nullfont\CD@ZA\CD@KH{\CD@eF\space diagonal line and arrow font not
+available}\else\let\CD@KH\relax\fi\def\CD@aG#1#2<#3:#4:#5#6{\begingroup\CD@PA
+#3\relax\advance\CD@PA-#2\relax\ifdim.1em<\CD@PA\CD@uA#5\relax\CD@vA#6\relax
+\ifnum\CD@uA<\CD@vA\count@\CD@vA\advance\count@-\CD@uA\CD@KB{#4 by \the\CD@PA
+}\if#1v\let\CD@CH\CD@JK\edef\tmp{\the\CD@uA--\the\CD@vA,\the\CD@FA}\else
+\advance\count@\count@\if#1l\advance\count@-\CD@A\else\if#1r\advance\count@
+\CD@A\fi\fi\advance\CD@PA\CD@PA\let\CD@CH\CD@ZE\edef\tmp{\the\CD@NB,\the
+\CD@uA--\the\CD@vA}\fi\divide\CD@PA\count@\ifdim\CD@CH<\CD@PA\global\CD@CH
+\CD@PA\fi\fi\fi\endgroup}\CD@tG\CD@xE\CD@JD\CD@ID\CD@rG\CD@xI{See the message
+above.}\CD@rG\CD@lH{Perhaps you've forgotten to end the diagram before
+resuming the text, in\CD@uG which case some garbage may be added to the
+diagram, but we should be ok now.\CD@uG Alternatively you've left a blank line
+in the middle - TeX will now complain\CD@uG that the remaining \CD@S s are
+misplaced - so please use comments for layout.}\CD@rG\CD@hD{You have already
+closed too many brace pairs or environments; an \CD@HD\CD@uG command was (%
+over)due.}\CD@rG\CD@hH{\CD@dC\space and \CD@HD\space commands must match.}%
+\def\CD@jH{\ifnum\inputlineno=0 \else\expandafter\CD@iH\fi}\def\CD@iH{\CD@MD
+\CD@GD\crcr\CD@YA{missing \CD@HD\space inserted before \CD@kH- type "h"}%
+\CD@lH\enddiagram\CD@AG\CD@kH\par}\def\CD@AG#1{\edef\enddiagram{\noexpand
+\CD@rD{#1\CD@W}}}\def\CD@rD#1{\CD@YA{\CD@HD\space(anticipated by #1) ignored}%
+\CD@xI\let\enddiagram\CD@SG}\def\CD@SG{\CD@YA{misplaced \CD@HD\space ignored}%
+\CD@hH}\def\CD@mC{\CD@YA{missing \CD@HD\space inserted.}\CD@hD\CD@AG{closing
+group}}\ifx\DeclareOption\CD@qK\else\ifx\DeclareOption\@notprerr\else
+\DeclareOption*{\let\CD@N\relax\let\CD@DH\relax\expandafter\CD@@E
+\CurrentOption,}\fi\fi
+%%======================================================================%
+%% %
+%% (22) AUXILLARY MACROS FOR ADJUSTMENT OF COMPONENTS %
+%% %
+%%======================================================================%
+
+%% NOTE: The recommended way of defining arrow commands is now
+%% \newarrow{Name}{tail}{filler}{middle}{filler}{head}
+%% which defines \rName, \lName, \dName and \uName using arrow parts which
+%% have themselves previously been defined using the commands
+%% \newarrowtail, \newarrowfiller, \newarrowmiddle and \newarrowhead.
+
+%% The components \rhvee etc have been retained for the time being, as an
+%% intermediate stage and to continue to support the old \HorizontalMap and
+%% \VerticalMap commands, but you should not rely on the continued existence
+%% of these macros.
+
+%% The various components usually need some correction
+%% - longitudinally, ie to prevent gaps and overprints with the shaft,
+%% - transversally, ie to prevent "steps" in the junction with the shaft.
+%% The former can be done safely ad hoc, eg with \mkern1mu.
+%% The latter are now done with the macros \scriptaxis, \boldscriptaxis,
+%% \shifthook and \raisehook, which include pixel corrections.
+
+%% Please note that these and the other auxillary macros which follow are
+%% interim. When it becomes clear exactly what kinds of adjustments are
+%% needed for characters, this job will be done by a suitable extension
+%% to the language of \newarrowhead, etc. If you have any other ideas for
+%% transformations of general use please tell me.
+
+%% By all means experiment with other characters for arrowheads, but
+%% please, in your own interests, do not rely on macros like \rhvee,
+%% send me a copy of your definitions for distribution to other users
+%% in this file, and keep track of where your efforts get copied so
+%% that they can be replaced with the "official" version when it is
+%% incorporated.
+
+%% ***** DONT use macros with mangled names like \Cd@gH. *****
+
+\catcode`\$=3 %% make sure that $ means maths-shift
+\def\vboxtoz{\vbox to\z@}%% \z@ is in plain TeX and means 0pt
+
+%% print #1 in \scriptstyle, adjusting for the maths axis height
+\def\scriptaxis#1{\@scriptaxis{$\scriptstyle#1$}}%%
+\def\ssaxis#1{\@ssaxis{$\scriptscriptstyle#1$}}%%
+\def\@scriptaxis#1{\dimen0\axisheight\advance\dimen0-\ss@axisheight\raise
+\dimen0\hbox{#1}}\def\@ssaxis#1{\dimen0\axisheight\advance\dimen0-%
+\ss@axisheight\raise\dimen0\hbox{#1}}
+
+%% Some of the characters would look better in bold since they're
+%% taken from sub/superscript fonts; we use LaTeX's \boldmath to
+%% do this, defining this to do nothing if it doesn't exist.
+%% With the old LaTeX font selection at other than 10pt you may still
+%% get nothing happenning. Also, PK fonts may be missing.
+%% If you have problems, DONT use boldhook or boldlittlevee.
+\ifx\boldmath\CD@qK%%
+\let\boldscriptaxis\scriptaxis%%
+\def\boldscript#1{\hbox{$\scriptstyle#1$}}%%
+\def\boldscriptscript#1{\hbox{$\scriptscriptstyle#1$}}%%
+\else\def\boldscriptaxis#1{\@scriptaxis{\boldmath$\scriptstyle#1$}}%%
+\def\boldscript#1{\hbox{\boldmath$\scriptstyle#1$}}%%
+\def\boldscriptscript#1{\hbox{\boldmath$\scriptscriptstyle#1$}}%%
+\fi
+
+%% #1= {} or \boldmath; #2= + or -; #3=\subset or \supset
+\def\raisehook#1#2#3{\hbox{\setbox3=\hbox{#1$\scriptscriptstyle#3$}%
+%% the character to use
+\dimen0\ss@axisheight%% \scriptscriptstyle axis height
+\dimen1\axisheight\advance\dimen1-\dimen0%% difference in axis heights
+\dimen2\ht3\advance\dimen2-\dimen0%
+%% height of char above axis (half spread)
+\advance\dimen2-0.021em\advance\dimen1 #2\dimen2%
+%% shift = axis_difference +/- half_spread
+\raise\dimen1\box3}}%% print the character
+%% Mark Dawson suggested using the width
+\def\shifthook#1#2#3{\setbox1=\hbox{#1$\scriptscriptstyle#3$}\dimen0\wd1%
+\divide\dimen0 12\CD@zH{\dimen0}%% "u"
+\dimen1\wd1\advance\dimen1-2\dimen0 \advance\dimen1-2\CD@oI\CD@zH{\dimen1}%
+\kern#2\dimen1\box1}%% print
+
+%% use the extension font (cmex) for double vertical arrows
+\def\@cmex{\mathchar"03}%%ascii double quote
+
+%% ************* P U L L B A C K S ************
+
+%% These will probably be replaced by something less ad hoc
+%% in a future version.
+
+\def\make@pbk#1{\setbox\tw@\hbox to\z@{#1}\ht\tw@\z@\dp\tw@\z@\box\tw@}\def
+\CD@fH#1{\overprint{\hbox to\z@{#1}}}\def\CD@qH{\kern0.11em}\def\CD@pH{\kern0%
+.35em}
+
+%% This is a hack for my book ``Practical Foundations of Mathematics''
+%% and WILL NOT BE SUPPORTED --- DO NOT USE IT!
+\def\dblvert{\def\CD@rH{\kern.5\PileSpacing}}\def\CD@rH{}
+
+\def\SEpbk{\make@pbk{\CD@qH\CD@rH\vrule depth 2.87ex height -2.75ex width 0.%
+95em \vrule height -0.66ex depth 2.87ex width 0.05em \hss}}
+
+\def\SWpbk{\make@pbk{\hss\vrule height -0.66ex depth 2.87ex width 0.05em
+\vrule depth 2.87ex height -2.75ex width 0.95em \CD@qH\CD@rH}}
+
+\def\NEpbk{\make@pbk{\CD@qH\CD@rH\vrule depth -3.81ex height 4.00ex width 0.%
+95em \vrule height 4.00ex depth -1.72ex width 0.05em \hss}}
+
+\def\NWpbk{\make@pbk{\hss\vrule height 4.00ex depth -1.72ex width 0.05em
+\vrule depth -3.81ex height 4.00ex width 0.95em \CD@qH\CD@rH}}
+
+%% Freyd & Scedrov puncture symbol for non-commuting polygon
+\def\puncture{{\setbox0\hbox{A}\vrule height.53\ht0 depth-.47\ht0 width.35\ht
+0 \kern.12\ht0 \vrule height\ht0 depth-.65\ht0 width.06\ht0 \kern-.06\ht0
+\vrule height.35\ht0 depth0pt width.06\ht0 \kern.12\ht0 \vrule height.53\ht0
+depth-.47\ht0 width.35\ht0 }}
+
+%% 2-cells: (24.11.95)
+%%% \NEclck puts a clockwise (ie southeast) arrow to the northwest of cell etc
+\def\NEclck{\overprint{\raise2.5ex\rlap{ \CD@rH$\scriptstyle\searrow$}}}%%
+\def\NEanti{\overprint{\raise2.5ex\rlap{ \CD@rH$\scriptstyle\nwarrow$}}}%%
+\def\NWclck{\overprint{\raise2.5ex\llap{$\scriptstyle\nearrow$ \CD@rH}}}%%
+\def\NWanti{\overprint{\raise2.5ex\llap{$\scriptstyle\swarrow$ \CD@rH}}}%%
+\def\SEclck{\overprint{\lower1ex\rlap{ \CD@rH$\scriptstyle\swarrow$}}}%%
+\def\SEanti{\overprint{\lower1ex\rlap{ \CD@rH$\scriptstyle\nearrow$}}}%%
+\def\SWclck{\overprint{\lower1ex\llap{$\scriptstyle\nwarrow$ \CD@rH}}}%%
+\def\SWanti{\overprint{\lower1ex\llap{$\scriptstyle\searrow$ \CD@rH}}}
+
+%%======================================================================%
+%% %
+%% (23) BITS OF ARROWS %
+%% %
+%%======================================================================%
+
+%% ********** H E A D S ***********
+
+%% \diagramstyle[heads=xxx] defines {>} as {xxx} where xxx
+%% has been defined by \newarrowhead{xxx} and \newarrowtail{xxx}
+
+%% vee head
+\def\rhvee{\mkern-10mu\greaterthan}%%
+\def\lhvee{\lessthan\mkern-10mu}%%
+\def\dhvee{\vboxtoz{\vss\hbox{$\vee$}\kern0pt}}%%
+\def\uhvee{\vboxtoz{\hbox{$\wedge$}\vss}}%%
+\newarrowhead{vee}\rhvee\lhvee\dhvee\uhvee
+
+%% little vee head
+\def\dhlvee{\vboxtoz{\vss\hbox{$\scriptstyle\vee$}\kern0pt}}%%
+\def\uhlvee{\vboxtoz{\hbox{$\scriptstyle\wedge$}\vss}}%%
+\newarrowhead{littlevee}{\mkern1mu\scriptaxis\rhvee}{\scriptaxis\lhvee}%
+\dhlvee\uhlvee\ifx\boldmath\CD@qK%%
+\newarrowhead{boldlittlevee}{\mkern1mu\scriptaxis\rhvee}{\scriptaxis\lhvee}%
+\dhlvee\uhlvee\else%%
+\def\dhblvee{\vboxtoz{\vss\boldscript\vee\kern0pt}}%%
+\def\uhblvee{\vboxtoz{\boldscript\wedge\vss}}%%
+\newarrowhead{boldlittlevee}{\mkern1mu\boldscriptaxis\rhvee}{\boldscriptaxis
+\lhvee}\dhblvee\uhblvee%%
+\fi
+
+%% curly vee head (uses AMS symbols fonts)
+\def\rhcvee{\mkern-10mu\succ}%%
+\def\lhcvee{\prec\mkern-10mu}%%
+\def\dhcvee{\vboxtoz{\vss\hbox{$\curlyvee$}\kern0pt}}%%
+\def\uhcvee{\vboxtoz{\hbox{$\curlywedge$}\vss}}%%
+\newarrowhead{curlyvee}\rhcvee\lhcvee\dhcvee\uhcvee
+
+%% double vee head %% will probably be withdrawn later
+\def\rhvvee{\mkern-13mu\gg}%% 24.8.92 changed 10mu to 13mu
+\def\lhvvee{\ll\mkern-13mu}%% to make rule go through
+\def\dhvvee{\vboxtoz{\vss\hbox{$\vee$}\kern-.6ex\hbox{$\vee$}\kern0pt}}%%
+\def\uhvvee{\vboxtoz{\hbox{$\wedge$}\kern-.6ex \hbox{$\wedge$}\vss}}%%
+\newarrowhead{doublevee}\rhvvee\lhvvee\dhvvee\uhvvee
+
+%% open and closed triangles (uses AMS symbols fonts)
+\def\triangleup{{\scriptscriptstyle\bigtriangleup}}%%
+\def\littletriangledown{{\scriptscriptstyle\triangledown}}%% AMS
+\def\rhtriangle{\triangleright\mkern1.2mu}%% 29.1.93
+\def\lhtriangle{\triangleleft\mkern.8mu}%%
+\def\uhtriangle{\vbox{\kern-.2ex \hbox{$\scriptscriptstyle\bigtriangleup$}%
+\kern-.25ex}}%%
+%% Changed \scriptstyle\triangledown to \scriptscriptstyle\bigtriangledown
+%% at the suggestion of Martin Hofmann (25.11.92) to avoid using AMS symbols
+%% and also for compatibility with upward arrow.
+\def\dhtriangle{\vbox{\kern-.28ex \hbox{$\scriptscriptstyle\bigtriangledown$}%
+\kern-.1ex}}%% 15.1.93 from -.25ex
+\def\dhblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\blacktriangledown$}}}%
+%% AMS
+\def\uhblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\blacktriangle$}}}%
+%% AMS
+\def\dhlblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\scriptstyle
+\blacktriangledown$}}}%% AMS
+\def\uhlblack{\vbox{\kern-.25ex\nointerlineskip\hbox{$\scriptstyle
+\blacktriangle$}}}%% AMS
+\newarrowhead{triangle}\rhtriangle\lhtriangle\dhtriangle\uhtriangle
+\newarrowhead{blacktriangle}{\mkern-1mu\blacktriangleright\mkern.4mu}{%
+\blacktriangleleft}\dhblack\uhblack\newarrowhead{littleblack}{\mkern-1mu%
+\scriptaxis\blacktriangleright}{\scriptaxis\blacktriangleleft\mkern-2mu}%
+\dhlblack\uhlblack
+
+%% LaTeX arrowheads
+\def\rhla{\hbox{\setbox0=\lnchar55\dimen0=\wd0\kern-.6\dimen0\ht0\z@\raise
+\axisheight\box0\kern.1\dimen0}}%%
+\def\lhla{\hbox{\setbox0=\lnchar33\dimen0=\wd0\kern.05\dimen0\ht0\z@\raise
+\axisheight\box0\kern-.5\dimen0}}%%
+\def\dhla{\vboxtoz{\vss\rlap{\lnchar77}}}%%
+\def\uhla{\vboxtoz{\setbox0=\lnchar66 \wd0\z@\kern-.15\ht0\box0\vss}}%% 1/93
+\newarrowhead{LaTeX}\rhla\lhla\dhla\uhla
+
+%% double LaTeX arrowheads %% will probably be withdrawn later
+\def\lhlala{\lhla\kern.3em\lhla}%%
+\def\rhlala{\rhla\kern.3em\rhla}%%
+\def\uhlala{\hbox{\uhla\raise-.6ex\uhla}}%%
+\def\dhlala{\hbox{\dhla\lower-.6ex\dhla}}%%
+\newarrowhead{doubleLaTeX}\rhlala\lhlala\dhlala\uhlala
+
+%% circles % \rho is a Greek letter!
+\def\hhO{\scriptaxis\bigcirc\mkern.4mu} \def\hho{{\circ}\mkern1.2mu}%
+\newarrowhead{o}\hho\hho\circ\circ%%
+\newarrowhead{O}\hhO\hhO{\scriptstyle\bigcirc}{\scriptstyle\bigcirc}%%
+
+%% crosses
+\def\rhtimes{\mkern-5mu{\times}\mkern-.8mu}\def\lhtimes{\mkern-.8mu{\times}%
+\mkern-5mu}\def\uhtimes{\setbox0=\hbox{$\times$}\ht0\axisheight\dp0-\ht0%
+\lower\ht0\box0 }\def\dhtimes{\setbox0=\hbox{$\times$}\ht0\axisheight\box0 }%
+\newarrowhead{X}\rhtimes\lhtimes\dhtimes\uhtimes\newarrowhead+++++
+
+%% empty head {} is also available
+
+%% Y from stmaryrd (vertical ones still need large adjustment)
+\newarrowhead{Y}{\mkern-3mu\Yright}{\Yleft\mkern-3mu}\Ydown\Yup
+
+%% ********** H E A D S with S H A F T S ***********
+
+%% little arrow with shaft
+\newarrowhead{->}\rightarrow\leftarrow\downarrow\uparrow
+
+%% arrow with double shaft
+%%\newarrowhead{=>}\Rightarrow\Leftarrow\Downarrow\Uparrow
+\newarrowhead{=>}\Rightarrow\Leftarrow{\@cmex7F}{\@cmex7E}
+
+%% harpoon with shaft (trailing up/left can be changed to down/right)
+\newarrowhead{harpoon}\rightharpoonup\leftharpoonup\downharpoonleft
+\upharpoonleft
+
+%% little double-headed arrow with shaft (uses AMS symbols fonts)
+\def\twoheaddownarrow{\rlap{$\downarrow$}\raise-.5ex\hbox{$\downarrow$}}%%
+\def\twoheaduparrow{\rlap{$\uparrow$}\raise.5ex\hbox{$\uparrow$}}%%
+\newarrowhead{->>}\twoheadrightarrow\twoheadleftarrow\twoheaddownarrow
+\twoheaduparrow
+
+%% ********** T A I L S ***********
+
+%% vee tail
+\def\rtvee{\greaterthan}%%
+\def\ltvee{\mkern-1mu{\lessthan}\mkern.4mu}%% \mkern added 15.1.93
+\def\dtvee{\vee}%%
+\def\utvee{\wedge}%%
+\newarrowtail{vee}\greaterthan\ltvee\vee\wedge
+
+%% little vee tail
+\newarrowtail{littlevee}{\scriptaxis\greaterthan}{\mkern-1mu\scriptaxis
+\lessthan}{\scriptstyle\vee}{\scriptstyle\wedge}\ifx\boldmath\CD@qK
+\newarrowtail{boldlittlevee}{\scriptaxis\greaterthan}{\mkern-1mu\scriptaxis
+\lessthan}{\scriptstyle\vee}{\scriptstyle\wedge}\else\newarrowtail{%
+boldlittlevee}{\boldscriptaxis\greaterthan}{\mkern-1mu\boldscriptaxis
+\lessthan}{\boldscript\vee}{\boldscript\wedge}\fi
+
+%% curly vee tail (uses AMS symbols fonts)
+\newarrowtail{curlyvee}\succ{\mkern-1mu{\prec}\mkern.4mu}\curlyvee\curlywedge
+
+%% open and closed triangle tails (uses AMS symbols fonts)
+\def\rttriangle{\mkern1.2mu\triangleright}%% 29.1.93
+\newarrowtail{triangle}\rttriangle\lhtriangle\dhtriangle\uhtriangle
+\newarrowtail{blacktriangle}\blacktriangleright{\mkern-1mu\blacktriangleleft
+\mkern.4mu}\dhblack\uhblack\newarrowtail{littleblack}{\scriptaxis
+\blacktriangleright\mkern-2mu}{\mkern-1mu\scriptaxis\blacktriangleleft}%
+\dhlblack\uhlblack
+
+%% LaTeX tails
+\def\rtla{\hbox{\setbox0=\lnchar55\dimen0=\wd0\kern-.5\dimen0\ht0\z@\raise
+\axisheight\box0\kern-.2\dimen0}}%%
+\def\ltla{\hbox{\setbox0=\lnchar33\dimen0=\wd0\kern-.15\dimen0\ht0\z@\raise
+\axisheight\box0\kern-.5\dimen0}}%%
+\def\dtla{\vbox{\setbox0=\rlap{\lnchar77}\dimen0=\ht0\kern-.7\dimen0\box0%
+\kern-.1\dimen0}}%% 15.1.93 from -.6
+\def\utla{\vbox{\setbox0=\rlap{\lnchar66}\dimen0=\ht0\kern-.1\dimen0\box0%
+\kern-.6\dimen0}}%%
+\newarrowtail{LaTeX}\rtla\ltla\dtla\utla
+
+%% double vee tail %% will probably be withdrawn later
+\def\rtvvee{\gg\mkern-3mu}%%
+\def\ltvvee{\mkern-3mu\ll}%%
+\def\dtvvee{\vbox{\hbox{$\vee$}\kern-.6ex \hbox{$\vee$}\vss}}%%
+\def\utvvee{\vbox{\vss\hbox{$\wedge$}\kern-.6ex \hbox{$\wedge$}\kern\z@}}%%
+\newarrowtail{doublevee}\rtvvee\ltvvee\dtvvee\utvvee
+
+%% double LaTeX tails %% will probably be withdrawn later
+\def\ltlala{\ltla\kern.3em\ltla}%%
+\def\rtlala{\rtla\kern.3em\rtla}%%
+\def\utlala{\hbox{\utla\raise-.6ex\utla}}%%
+\def\dtlala{\hbox{\dtla\lower-.6ex\dtla}}%%
+\newarrowtail{doubleLaTeX}\rtlala\ltlala\dtlala\utlala
+
+%% bar (as in \mapsto)
+\def\utbar{\vrule height 0.093ex depth0pt width 0.4em}%%
+\let\dtbar\utbar%%
+\def\rtbar{\mkern1.5mu\vrule height 1.1ex depth.06ex width .04em\mkern1.5mu}%
+%%
+\let\ltbar\rtbar%%
+\newarrowtail{mapsto}\rtbar\ltbar\dtbar\utbar%%
+\newarrowtail{|}\rtbar\ltbar\dtbar\utbar%%ascii vertical bar (|)
+
+%% hooks (as in \into): choice of after/above and before/below
+
+\def\rthooka{\raisehook{}+\subset\mkern-1mu}%%
+\def\lthooka{\mkern-1mu\raisehook{}+\supset}%%
+\def\rthookb{\raisehook{}-\subset\mkern-2mu}%%
+\def\lthookb{\mkern-1mu\raisehook{}-\supset}%%
+
+\def\dthooka{\shifthook{}+\cap}%%
+\def\dthookb{\shifthook{}-\cap}%%
+\def\uthooka{\shifthook{}+\cup}%%
+\def\uthookb{\shifthook{}-\cup}%%
+
+\newarrowtail{hooka}\rthooka\lthooka\dthooka\uthooka\newarrowtail{hookb}%
+\rthookb\lthookb\dthookb\uthookb
+
+\ifx\boldmath\CD@qK\newarrowtail{boldhooka}\rthooka\lthooka\dthooka\uthooka
+\newarrowtail{boldhookb}\rthookb\lthookb\dthookb\uthookb\newarrowtail{%
+boldhook}\rthooka\lthooka\dthookb\uthooka\else\def\rtbhooka{\raisehook
+\boldmath+\subset\mkern-1mu}%%
+\def\ltbhooka{\mkern-1mu\raisehook\boldmath+\supset}%%
+\def\rtbhookb{\raisehook\boldmath-\subset\mkern-2mu}%%
+\def\ltbhookb{\mkern-1mu\raisehook\boldmath-\supset}%%
+\def\dtbhooka{\shifthook\boldmath+\cap}%%
+\def\dtbhookb{\shifthook\boldmath-\cap}%%
+\def\utbhooka{\shifthook\boldmath+\cup}%%
+\def\utbhookb{\shifthook\boldmath-\cup}%%
+\newarrowtail{boldhooka}\rtbhooka\ltbhooka\dtbhooka\utbhooka\newarrowtail{%
+boldhookb}\rtbhookb\ltbhookb\dtbhookb\utbhookb\newarrowtail{boldhook}%
+\rtbhooka\ltbhooka\dtbhooka\utbhooka\fi
+
+%% square-ended hooks (used for closed subsets in ``lifting and gluing'')
+\def\dtsqhooka{\shifthook{}+\sqcap}%%
+\def\dtsqhookb{\shifthook{}-\sqcap}%%
+\def\ltsqhooka{\mkern-1mu\raisehook{}+\sqsupset}%%
+\def\ltsqhookb{\mkern-1mu\raisehook{}-\sqsupset}%%
+\def\rtsqhooka{\raisehook{}+\sqsubset\mkern-1mu}%%
+\def\rtsqhookb{\raisehook{}-\sqsubset\mkern-2mu}%%
+\def\utsqhooka{\shifthook{}+\sqcup}%%
+\def\utsqhookb{\shifthook{}-\sqcup}%%
+\newarrowtail{sqhook}\rtsqhooka\ltsqhooka\dtsqhooka\utsqhooka
+
+%% the following seem the better choices at 10pt & 300dpi
+\newarrowtail{hook}\rthooka\lthookb\dthooka\uthooka\newarrowtail{C}\rthooka
+\lthookb\dthooka\uthooka
+
+%% circles
+\newarrowtail{o}\hho\hho\circ\circ%%
+\newarrowtail{O}\hhO\hhO{\scriptstyle\bigcirc}{\scriptstyle\bigcirc}%%
+
+%% crosses
+\newarrowtail{X}\lhtimes\rhtimes\uhtimes\dhtimes\newarrowtail+++++
+
+%% empty tail {} is also available
+
+%% Y from stmaryrd (vertical ones still need adjustment)
+\newarrowtail{Y}\Yright\Yleft\Ydown\Yup
+
+%% harpoon with shaft (trailing up/left can be changed to down/right)
+\newarrowtail{harpoon}\leftharpoondown\rightharpoondown\upharpoonright
+\downharpoonright
+
+%% ********** F I L L E R S ***********
+
+%% shortening is up to 0.15em=2.7mu horiz and 0.35ex vertically at each end.
+
+%% dot {.}, single rule {-} and empty {} fillers are also available
+
+%% double and triple lines
+%%\newarrowfiller{=}==\Vert\Vert%%
+\newarrowfiller{=}=={\@cmex77}{\@cmex77}%% 16.1.93
+\def\vfthree{\mid\!\!\!\mid\!\!\!\mid}%%ascii
+\newarrowfiller{3}\equiv\equiv\vfthree\vfthree
+
+%% dashed line
+\def\vfdashstrut{\vrule width0pt height1.3ex depth0.7ex}%%
+\def\vfthedash{\vrule width\CD@LF height0.6ex depth 0pt}%%
+\def\hfthedash{\CD@AJ\vrule\horizhtdp width 0.26em}%%
+\def\hfdash{\mkern5.5mu\hfthedash\mkern5.5mu}%%
+\def\vfdash{\vfdashstrut\vfthedash}%%
+\newarrowfiller{dash}\hfdash\hfdash\vfdash\vfdash
+
+%% ************* M I D D L E S ************
+
+%% plus
+\newarrowmiddle+++++
+
+%% ************* D I A G O N A L S ************
+
+%% simple arrow heads
+%%\def\nwhTO{\nwarrow\mkern-1mu}%%
+%%\def\nehTO{\mkern-.1mu\nearrow}%%
+%%\def\sehTO{\searrow\mkern-.02mu}%%
+%%\def\swhTO{\mkern-.8mu\swarrow}%%
+
+%%======================================================================%
+%% %
+%% (24) ARROW COMMANDS %
+%% %
+%%======================================================================%
+
+%% change to \iftrue to get mixed heads
+\iffalse%%
+\newarrow{To}----{vee}%%
+\newarrow{Arr}----{LaTeX}%%
+\newarrow{Dotsto}....{vee}%%
+\newarrow{Dotsarr}....{LaTeX}%%
+\newarrow{Dashto}{}{dash}{}{dash}{vee}%%
+\newarrow{Dasharr}{}{dash}{}{dash}{LaTeX}%%
+\newarrow{Mapsto}{mapsto}---{vee}%%
+\newarrow{Mapsarr}{mapsto}---{LaTeX}%%
+\newarrow{IntoA}{hooka}---{vee}%%
+\newarrow{IntoB}{hookb}---{vee}%%
+\newarrow{Embed}{vee}---{vee}%%
+\newarrow{Emarr}{LaTeX}---{LaTeX}%%
+\newarrow{Onto}----{doublevee}%%
+\newarrow{Dotsonarr}....{doubleLaTeX}%%
+\newarrow{Dotsonto}....{doublevee}%%
+\newarrow{Dotsonarr}....{doubleLaTeX}%%
+\else%%
+\newarrow{To}---->%%
+\newarrow{Arr}---->%%
+\newarrow{Dotsto}....>%%
+\newarrow{Dotsarr}....>%%
+\newarrow{Dashto}{}{dash}{}{dash}>%%
+\newarrow{Dasharr}{}{dash}{}{dash}>%%
+\newarrow{Mapsto}{mapsto}--->%%
+\newarrow{Mapsarr}{mapsto}--->%%
+\newarrow{IntoA}{hooka}--->%%
+\newarrow{IntoB}{hookb}--->%%
+\newarrow{Embed}>--->%%
+\newarrow{Emarr}>--->%%
+\newarrow{Onto}----{>>}%%
+\newarrow{Dotsonarr}....{>>}%%
+\newarrow{Dotsonto}....{>>}%%
+\newarrow{Dotsonarr}....{>>}%%
+\fi%%
+
+\newarrow{Implies}===={=>}%% minimum cell height 9.5pt
+\newarrow{Project}----{triangle}%%
+\newarrow{Pto}----{harpoon}%% partial function
+\newarrow{Relto}{harpoon}---{harpoon}%% binary relation
+
+\newarrow{Eq}=====%%
+\newarrow{Line}-----%%
+\newarrow{Dots}.....%%
+\newarrow{Dashes}{}{dash}{}{dash}{}%%
+
+%% square hooked arrow (used in my ``gluing and lifting'' paper)
+\newarrow{SquareInto}{sqhook}--->
+
+%% braces and parentheses
+%% \newarrow gives inappropriate directions, so we change the names
+%% the vertical filler is too far to the right; horizontal too high
+%% the vertical middles are too low with midvshaft
+%% maybe we'll add square brackets and the integral sign one day
+\newarrowhead{cmexbra}{\@cmex7B}{\@cmex7C}{\@cmex3B}{\@cmex38}%%
+\newarrowtail{cmexbra}{\@cmex7A}{\@cmex7D}{\@cmex39}{\@cmex3A}%%
+\newarrowmiddle{cmexbra}{\braceru\bracelu}{\bracerd\braceld}{\vcenter{%
+\hbox@maths{\@cmex3D\mkern-2mu}}}%% right
+{\vcenter{\hbox@maths{\mkern2mu\@cmex3C}}}%% left
+\newarrow{@brace}{cmexbra}-{cmexbra}-{cmexbra}%% braces
+\newarrow{@parenth}{cmexbra}---{cmexbra}%% straight parentheses
+\def\rightBrace{\d@brace[thick,cmex]}%%ASCII square brackets []
+\def\leftBrace{\u@brace[thick,cmex]}%%ASCII square brackets []
+\def\upperBrace{\r@brace[thick,cmex]}%%ASCII square brackets []
+\def\lowerBrace{\l@brace[thick,cmex]}%%ASCII square brackets []
+\def\rightParenth{\d@parenth[thick,cmex]}%%ASCII square brackets []
+\def\leftParenth{\u@parenth[thick,cmex]}%%ASCII square brackets []
+\def\upperParenth{\r@parenth[thick,cmex]}%%ASCII square brackets []
+\def\lowerParenth{\l@parenth[thick,cmex]}%%ASCII square brackets []
+
+%% synonyms for reverse compatibility
+
+\let\uFrom\uTo%%
+\let\lFrom\lTo%%
+\let\uDotsfrom\uDotsto%%
+\let\lDotsfrom\lDotsto%%
+\let\uDashfrom\uDashto%%
+\let\lDashfrom\lDashto%%
+\let\uImpliedby\uImplies%%
+\let\lImpliedby\lImplies%%
+\let\uMapsfrom\uMapsto%%
+\let\lMapsfrom\lMapsto%%
+\let\lOnfrom\lOnto%%
+\let\uOnfrom\uOnto%%
+\let\lPfrom\lPto%%
+\let\uPfrom\uPto%%
+
+\let\uInfromA\uIntoA%%
+\let\uInfromB\uIntoB%%
+\let\lInfromA\lIntoA%%
+\let\lInfromB\lIntoB%%
+\let\rInto\rIntoA%%
+\let\lInto\lIntoA%%
+\let\dInto\dIntoB%%
+\let\uInto\uIntoA%%
+\let\ruInto\ruIntoA%%
+\let\luInto\luIntoA%%
+\let\rdInto\rdIntoA%%
+\let\ldInto\ldIntoA%%
+%%
+\let\hEq\rEq%%
+\let\vEq\uEq%%
+\let\hLine\rLine%%
+\let\vLine\uLine%%
+\let\hDots\rDots%%
+\let\vDots\uDots%%
+\let\hDashes\rDashes%%
+\let\vDashes\uDashes%%
+
+%%=========================================================================%
+%% The following are included for reverse compatibility only.
+%%=========================================================================%
+\let\NW\luTo\let\NE\ruTo\let\SW\ldTo\let\SE\rdTo\def\nNW{\luTo(2,3)}\def\nNE{%
+\ruTo(2,3)}%%ascii
+\def\sSW{\ldTo(2,3)}\def\sSE{\rdTo(2,3)}%%ascii
+\def\wNW{\luTo(3,2)}\def\eNE{\ruTo(3,2)}%%ascii
+\def\wSW{\ldTo(3,2)}\def\eSE{\rdTo(3,2)}%%ascii
+\def\NNW{\luTo(2,4)}\def\NNE{\ruTo(2,4)}%%ascii
+\def\SSW{\ldTo(2,4)}\def\SSE{\rdTo(2,4)}%%ascii
+\def\WNW{\luTo(4,2)}\def\ENE{\ruTo(4,2)}%%ascii
+\def\WSW{\ldTo(4,2)}\def\ESE{\rdTo(4,2)}%%ascii
+\def\NNNW{\luTo(2,6)}\def\NNNE{\ruTo(2,6)}%%ascii
+\def\SSSW{\ldTo(2,6)}\def\SSSE{\rdTo(2,6)}%%ascii
+\def\WWNW{\luTo(6,2)}\def\EENE{\ruTo(6,2)}%%ascii
+\def\WWSW{\ldTo(6,2)}\def\EESE{\rdTo(6,2)}%%ascii
+
+\let\NWd\luDotsto\let\NEd\ruDotsto\let\SWd\ldDotsto\let\SEd\rdDotsto\def\nNWd
+{\luDotsto(2,3)}\def\nNEd{\ruDotsto(2,3)}%%ascii
+\def\sSWd{\ldDotsto(2,3)}\def\sSEd{\rdDotsto(2,3)}%%ascii
+\def\wNWd{\luDotsto(3,2)}\def\eNEd{\ruDotsto(3,2)}%%ascii
+\def\wSWd{\ldDotsto(3,2)}\def\eSEd{\rdDotsto(3,2)}%%ascii
+\def\NNWd{\luDotsto(2,4)}\def\NNEd{\ruDotsto(2,4)}%%ascii
+\def\SSWd{\ldDotsto(2,4)}\def\SSEd{\rdDotsto(2,4)}%%ascii
+\def\WNWd{\luDotsto(4,2)}\def\ENEd{\ruDotsto(4,2)}%%ascii
+\def\WSWd{\ldDotsto(4,2)}\def\ESEd{\rdDotsto(4,2)}%%ascii
+\def\NNNWd{\luDotsto(2,6)}\def\NNNEd{\ruDotsto(2,6)}%%ascii
+\def\SSSWd{\ldDotsto(2,6)}\def\SSSEd{\rdDotsto(2,6)}%%ascii
+\def\WWNWd{\luDotsto(6,2)}\def\EENEd{\ruDotsto(6,2)}%%ascii
+\def\WWSWd{\ldDotsto(6,2)}\def\EESEd{\rdDotsto(6,2)}%%ascii
+
+\let\NWl\luLine\let\NEl\ruLine\let\SWl\ldLine\let\SEl\rdLine\def\nNWl{\luLine
+(2,3)}\def\nNEl{\ruLine(2,3)}%%ascii
+\def\sSWl{\ldLine(2,3)}\def\sSEl{\rdLine(2,3)}%%ascii
+\def\wNWl{\luLine(3,2)}\def\eNEl{\ruLine(3,2)}%%ascii
+\def\wSWl{\ldLine(3,2)}\def\eSEl{\rdLine(3,2)}%%ascii
+\def\NNWl{\luLine(2,4)}\def\NNEl{\ruLine(2,4)}%%ascii
+\def\SSWl{\ldLine(2,4)}\def\SSEl{\rdLine(2,4)}%%ascii
+\def\WNWl{\luLine(4,2)}\def\ENEl{\ruLine(4,2)}%%ascii
+\def\WSWl{\ldLine(4,2)}\def\ESEl{\rdLine(4,2)}%%ascii
+\def\NNNWl{\luLine(2,6)}\def\NNNEl{\ruLine(2,6)}%%ascii
+\def\SSSWl{\ldLine(2,6)}\def\SSSEl{\rdLine(2,6)}%%ascii
+\def\WWNWl{\luLine(6,2)}\def\EENEl{\ruLine(6,2)}%%ascii
+\def\WWSWl{\ldLine(6,2)}\def\EESEl{\rdLine(6,2)}%%ascii
+
+\let\NWld\luDots\let\NEld\ruDots\let\SWld\ldDots\let\SEld\rdDots\def\nNWld{%
+\luDots(2,3)}\def\nNEld{\ruDots(2,3)}%%ascii
+\def\sSWld{\ldDots(2,3)}\def\sSEld{\rdDots(2,3)}%%ascii
+\def\wNWld{\luDots(3,2)}\def\eNEld{\ruDots(3,2)}%%ascii
+\def\wSWld{\ldDots(3,2)}\def\eSEld{\rdDots(3,2)}%%ascii
+\def\NNWld{\luDots(2,4)}\def\NNEld{\ruDots(2,4)}%%ascii
+\def\SSWld{\ldDots(2,4)}\def\SSEld{\rdDots(2,4)}%%ascii
+\def\WNWld{\luDots(4,2)}\def\ENEld{\ruDots(4,2)}%%ascii
+\def\WSWld{\ldDots(4,2)}\def\ESEld{\rdDots(4,2)}%%ascii
+\def\NNNWld{\luDots(2,6)}\def\NNNEld{\ruDots(2,6)}%%ascii
+\def\SSSWld{\ldDots(2,6)}\def\SSSEld{\rdDots(2,6)}%%ascii
+\def\WWNWld{\luDots(6,2)}\def\EENEld{\ruDots(6,2)}%%ascii
+\def\WWSWld{\ldDots(6,2)}\def\EESEld{\rdDots(6,2)}%%ascii
+
+\let\NWe\luEmbed\let\NEe\ruEmbed\let\SWe\ldEmbed\let\SEe\rdEmbed\def\nNWe{%
+\luEmbed(2,3)}\def\nNEe{\ruEmbed(2,3)}%%ascii
+\def\sSWe{\ldEmbed(2,3)}\def\sSEe{\rdEmbed(2,3)}%%ascii
+\def\wNWe{\luEmbed(3,2)}\def\eNEe{\ruEmbed(3,2)}%%ascii
+\def\wSWe{\ldEmbed(3,2)}\def\eSEe{\rdEmbed(3,2)}%%ascii
+\def\NNWe{\luEmbed(2,4)}\def\NNEe{\ruEmbed(2,4)}%%ascii
+\def\SSWe{\ldEmbed(2,4)}\def\SSEe{\rdEmbed(2,4)}%%ascii
+\def\WNWe{\luEmbed(4,2)}\def\ENEe{\ruEmbed(4,2)}%%ascii
+\def\WSWe{\ldEmbed(4,2)}\def\ESEe{\rdEmbed(4,2)}%%ascii
+\def\NNNWe{\luEmbed(2,6)}\def\NNNEe{\ruEmbed(2,6)}%%ascii
+\def\SSSWe{\ldEmbed(2,6)}\def\SSSEe{\rdEmbed(2,6)}%%ascii
+\def\WWNWe{\luEmbed(6,2)}\def\EENEe{\ruEmbed(6,2)}%%ascii
+\def\WWSWe{\ldEmbed(6,2)}\def\EESEe{\rdEmbed(6,2)}%%ascii
+
+\let\NWo\luOnto\let\NEo\ruOnto\let\SWo\ldOnto\let\SEo\rdOnto\def\nNWo{\luOnto
+(2,3)}\def\nNEo{\ruOnto(2,3)}%%ascii
+\def\sSWo{\ldOnto(2,3)}\def\sSEo{\rdOnto(2,3)}%%ascii
+\def\wNWo{\luOnto(3,2)}\def\eNEo{\ruOnto(3,2)}%%ascii
+\def\wSWo{\ldOnto(3,2)}\def\eSEo{\rdOnto(3,2)}%%ascii
+\def\NNWo{\luOnto(2,4)}\def\NNEo{\ruOnto(2,4)}%%ascii
+\def\SSWo{\ldOnto(2,4)}\def\SSEo{\rdOnto(2,4)}%%ascii
+\def\WNWo{\luOnto(4,2)}\def\ENEo{\ruOnto(4,2)}%%ascii
+\def\WSWo{\ldOnto(4,2)}\def\ESEo{\rdOnto(4,2)}%%ascii
+\def\NNNWo{\luOnto(2,6)}\def\NNNEo{\ruOnto(2,6)}%%ascii
+\def\SSSWo{\ldOnto(2,6)}\def\SSSEo{\rdOnto(2,6)}%%ascii
+\def\WWNWo{\luOnto(6,2)}\def\EENEo{\ruOnto(6,2)}%%ascii
+\def\WWSWo{\ldOnto(6,2)}\def\EESEo{\rdOnto(6,2)}%%ascii
+
+\let\NWod\luDotsonto\let\NEod\ruDotsonto\let\SWod\ldDotsonto\let\SEod
+\rdDotsonto\def\nNWod{\luDotsonto(2,3)}\def\nNEod{\ruDotsonto(2,3)}%%ascii
+\def\sSWod{\ldDotsonto(2,3)}\def\sSEod{\rdDotsonto(2,3)}%%ascii
+\def\wNWod{\luDotsonto(3,2)}\def\eNEod{\ruDotsonto(3,2)}%%ascii
+\def\wSWod{\ldDotsonto(3,2)}\def\eSEod{\rdDotsonto(3,2)}%%ascii
+\def\NNWod{\luDotsonto(2,4)}\def\NNEod{\ruDotsonto(2,4)}%%ascii
+\def\SSWod{\ldDotsonto(2,4)}\def\SSEod{\rdDotsonto(2,4)}%%ascii
+\def\WNWod{\luDotsonto(4,2)}\def\ENEod{\ruDotsonto(4,2)}%%ascii
+\def\WSWod{\ldDotsonto(4,2)}\def\ESEod{\rdDotsonto(4,2)}%%ascii
+\def\NNNWod{\luDotsonto(2,6)}\def\NNNEod{\ruDotsonto(2,6)}%%ascii
+\def\SSSWod{\ldDotsonto(2,6)}\def\SSSEod{\rdDotsonto(2,6)}%%ascii
+\def\WWNWod{\luDotsonto(6,2)}\def\EENEod{\ruDotsonto(6,2)}%%ascii
+\def\WWSWod{\ldDotsonto(6,2)}\def\EESEod{\rdDotsonto(6,2)}%%ascii
+
+%%======================================================================%
+%% %
+%% (25) MISCELLANEOUS %
+%% %
+%%======================================================================%
+
+\def\labelstyle{%%
+\ifincommdiag%%
+\textstyle%%
+\else%%
+\scriptstyle%%
+\fi}%%
+\let\objectstyle\displaystyle
+
+\newdiagramgrid{pentagon}{0.618034,0.618034,1,1,1,1,0.618034,0.618034}{1.%
+17557,1.17557,1.902113,1.902113}
+
+\newdiagramgrid{perspective}{0.75,0.75,1.1,1.1,0.9,0.9,0.95,0.95,0.75,0.75}{0%
+.75,0.75,1.1,1.1,0.9,0.9}
+
+\diagramstyle[%%ascii open square bracket
+dpi=300,%% office laserwriters are usually 300 dots per inch
+vmiddle,nobalance,%% vertical and horizontal positioning
+loose,%% allow rows and columns to stretch
+thin,%% line10 arrows; default rule thickness (TeXbook p447)
+pilespacing=10pt,%
+%% parallel vertical separation (horizontals: half this)
+shortfall=4pt,%% distance between arrowheads and their targets
+%% The following are defaulted on entry to the diagram itself.
+%% l>=2em minimum length of horizontal arrow shafts in text
+%% l>=1em ditto in diagrams
+%% size=3em cell size
+%% heads=LaTeX arrowheads
+]%%ascii close square bracket
+
+%% process options to LaTeX2e's \usepackage[options]{diagrams}
+\ifx\ProcessOptions\CD@qK\else\CD@PK\ProcessOptions\relax\CD@FF\CD@e\fi\fi
+
+%%============================== THE END ====================================
+\CD@vE\CD@hK\message{| running in pdf mode -- diagonal arrows will work
+automatically |}\else\message{| >>>>>>>> POSTSCRIPT MODE (DVIPS) IS NOW THE
+DEFAULT <<<<<<<<<<<<|}\message{|(DVI mode has not been supported since 1992
+and produces inferior|}\message{|results which are completely unsuitable for
+publication. However,|}\message{|if you really still need it, you can still
+get it by loading the |}\message{|package using ``\string\usepackage[%
+UglyObsolete]{diagrams}'' instead. ) |}\fi\else\message{| >>>>>>>> USING UGLY
+OBSOLETE DVI CODE - PLEASE STOP <<<<<<<<<<<<|}\message{|(DVI mode has not been
+supported since 1992 and produces inferior|}\message{|results which are
+completely unsuitable for publication - Please |}\message{|use the PostScript
+or PDF mode instead, for much better results.)|}\fi\cdrestoreat
+%% restore old category code for @ etc
+\message{===================================================================}%
+%% This is the end of Paul Taylor's commutative diagrams package.
diff --git a/macros/generic/diagrams/taylor/diagrams.sty b/macros/generic/diagrams/taylor/diagrams.sty
new file mode 120000
index 0000000000..900cb89f4b
--- /dev/null
+++ b/macros/generic/diagrams/taylor/diagrams.sty
@@ -0,0 +1 @@
+diagrams.tex \ No newline at end of file
diff --git a/macros/generic/diagrams/taylor/diagrams.tex b/macros/generic/diagrams/taylor/diagrams.tex
new file mode 120000
index 0000000000..a18d216e51
--- /dev/null
+++ b/macros/generic/diagrams/taylor/diagrams.tex
@@ -0,0 +1 @@
+V3,93.tex \ No newline at end of file
diff --git a/macros/generic/diagrams/taylor/index.html b/macros/generic/diagrams/taylor/index.html
new file mode 100644
index 0000000000..ae66144ea2
--- /dev/null
+++ b/macros/generic/diagrams/taylor/index.html
@@ -0,0 +1,599 @@
+
+
+
+
+
+
+
+
+<title> Commutative Diagrams in TeX</title>
+
+<h1 align="center">Commutative Diagrams in TeX </h1>
+
+<h3 align="center">Paul Taylor </h3>
+
+<h3 align="center">since 1986 </h3>
+
+
+
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+
+<div class="p"><!----></div>
+
+
+
+
+
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+
+
+<div class="p"><!----></div>
+
+
+
+<div class="p"><!----></div>
+
+
+<div class="p"><!----></div>
+
+
+
+<div class="p"><!----></div>
+
+
+
+
+
+
+<div class="p"><!----></div>
+
+
+<div class="p"><!----></div>
+
+ This is a macro package for drawing so-called "commutative" diagrams
+in category theory and related subjects.
+
+<div class="p"><!----></div>
+
+<h2>The macros and the manual</h2>
+
+<div class="p"><!----></div>
+Unlike many other packages there is no "installation procedure" -
+you just copy <a href="diagrams.sty"><b>the macros themselves</b></a>
+to your <span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>&nbsp;macros directory.
+
+<div class="p"><!----></div>
+The <b>manual</b> is available in several formats:
+<a href="manual.tex">LaTeX source</a>,
+<a href="manual.pdf">PDF</a>,
+<a href="manual.dvi">DVI</a>,
+<a href="manual.ps.gz">600dpi A4 PostScript</a> and
+<a href="booklet.ps.gz">600dpi A5 PS booklet</a>.
+The "booklet" form requires a two-sided printer with A4 paper;
+if you don't have such a thing, don't bother taking the file.
+
+<div class="p"><!----></div>
+If you have not already done so, please register as a user by sending
+a message to <b>pt @ cs.man.ac.uk</b>
+with the words "commutative diagrams" in the subject line.
+
+<div class="p"><!----></div>
+I have also written some macros for <a href="../proofs/index.html">proofs</a>
+and <a href="../tex/index.html">other things</a>.
+
+<div class="p"><!----></div>
+
+<h2>Diagonal arrows, PostScript and PDF</h2>
+
+<div class="p"><!----></div>
+<a href="http://en.wikipedia.org/wiki/TeX"><span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span></a> itself
+and its basic output format
+(<a href="http://en.wikipedia.org/wiki/DVI_(file_format)">DVI</a>) were
+designed by Donald Knuth to place letters and symbols from a variety
+of typefaces on an orthogonal grid, an idea that goes back to
+Gutenberg's original "movable type" printing press. This means that
+there is no natural way of drawing diagonal lines or rotating text.
+
+<div class="p"><!----></div>
+Though DVI has the merit of simplicity, most complex documents
+nowadays in both the open-source and commercial worlds are distributed
+in Adobe's PostScript or PDF formats.
+In particular, the commonest way of printing (the DVI output from) <span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>&nbsp;documents is to use Tomas Rokicki's program
+<a href="http://www.radicaleye.com"><b>dvips</b></a>.
+
+<div class="p"><!----></div>
+PostScript and PDF have a much more general coordinate system than
+<span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>&nbsp;has, and it is very easy to rotate blocks of text.
+The diagrams package was designed in 1992 to take advantage of this
+feature of PostScript and (from 2002) PDF. It was always intended to
+be used in this way, although only in 2004 was the default changed to
+use this.
+
+<div class="p"><!----></div>
+Unfortunately, because of the inappropriately set optional behaviour,
+many users were not enjoying any of the benefits of the package.
+They were instead using the obsolete pre-1992 code (see below);
+this generated <span class="roman">L</span><sup><span class="roman">A</span></sup><span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>-style arrows, that had incompatible arrowheads
+and didn't meet the objects to which they were supposed to point.
+
+<div class="p"><!----></div>
+<br />There are other graphical packages, including several that are also
+used to draw categorical diagrams, that draw diagonal lines in other
+ways, some of which are understood by xdvi. Like <span class="roman">L</span><sup><span class="roman">A</span></sup><span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>'s
+<tt>picture</tt> environment, they do this by juxtaposing many
+characters (such as diagonal line-segments or dots) from special fonts.
+These fonts need to be distributed and installed along with the
+macro packages themselves.
+
+<div class="p"><!----></div>
+My diagrams package, on the other hand, needs no special fonts, and
+there is just the macro package itself to install. It achieves the
+same generality of diagonal arrows as it has horizontal ones by
+taking advantage of the method that most people use to print their
+documents.
+This design decision was taken following
+<a href="msg1992.html">consultation</a> with users,
+and I have always remained convinced that it was the correct one.
+
+<div class="p"><!----></div>
+The method was adapted to
+<a href="http://www.tug.org/applications/pdftex">pdftex</a>.
+If xdvi or other programs implemented extensions to DVI to rotate boxes,
+it could be used for them too.
+
+<div class="p"><!----></div>
+
+<h2>DVI previewers</h2>
+
+<div class="p"><!----></div>
+DVI previewers such as
+<a href="http://math.berkeley.edu/~vojta/xdvi.html">xdvi</a> and
+<a href="http://math.ndsu.nodak.edu/resources/tex/bibliography/yap/yap.html">YAP</a>
+do not understand the fragments of PostScript that are used to rotate
+the arrows, so what should be diagonal arrows appear horizontal
+instead. This behaviour is automatically corrected when you use
+dvips to print the document.
+
+<div class="p"><!----></div>
+If, for some reason, you need to use xdvi or yap to display documents
+containing diagonals, you can still make use of the obsolete code. Use
+the command
+
+<center>
+ <tt><tt>\usepackage&nbsp;</tt>[UglyObsolete,tight,heads=LaTeX] {diagrams}</tt>
+</center>
+to load the diagrams package.
+
+<div class="p"><!----></div>
+<br /><b>Please do not use the obsolete code for publication.</b>
+
+<div class="p"><!----></div>
+<br />Previous generations understood that you had to understand what
+tools did and how they worked. Indeed, there was a saying that
+"<b>bad workmen blame their tools</b>".
+In the computer age, maybe even more so than in the pre-scientific one,
+people expect things to "just work", <em>i.e</em>.&nbsp;by magic,
+without understanding anything.
+
+<div class="p"><!----></div>
+The pre-1992 pure DVI code in the diagrams package was a useful tool
+in its day, and I still try to make most of my diagrams work with it.
+However, if you wish to make extensive use of it, you too will have to
+understand how it works, and make the manual adjustments that are
+necessary to make up for the lack of magical programming behind it.
+
+<div class="p"><!----></div>
+Firstly, since pure DVI cannot rotate characters, only the standard <span class="roman">L</span><sup><span class="roman">A</span></sup><span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>&nbsp;arrowheads are available for diagonals, so you should only use the
+<b>heads=LaTeX</b> option, and not (for example) <b>heads=vee</b>.
+
+<div class="p"><!----></div>
+Second, since it uses <span class="roman">L</span><sup><span class="roman">A</span></sup><span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>'s diagonal line and arrow characters,
+the only slopes that are allowed are those with numerator and
+denominator at most&nbsp;4. However, since the package rounds slopes to
+simple rationals anyway (even in the "PostScript" code), this is
+not usually a problem in small diagrams.
+
+<div class="p"><!----></div>
+<br />But there is a <b>more serious problem</b> than this.
+
+<div class="p"><!----></div>
+The package makes two "passes" when constructing each diagram:
+one in which it constructs a "matrix" from the data that you type,
+and a second in which it takes this matrix apart and stretches
+each of the arrows to meet its endpoints.
+
+<div class="p"><!----></div>
+The obsolete "pure DVI" code constructs diagonal lines entirely in
+the first pass and <b>does not stretch them</b> in the second pass.
+It just makes a guess at the appropriate length, based on the
+<b>width</b> and <b>height</b> options for the diagram.
+
+<div class="p"><!----></div>
+<br /><b>You should always choose the appropriate width and height yourself.</b>
+
+<div class="p"><!----></div>
+<br />By default, the rows and columns of the diagram are <b>loose</b> -
+they stretch in the same way as any other matrix or table, and
+the "PostScript" code corrects for this.
+This default was chosen to make the package "just work",
+but <b>diagrams look better if they are of a uniform regular size</b>.
+
+<div class="p"><!----></div>
+Since the obsolete pure DVI code does not make the necessary correction
+in the second pass, you have to make sure that its first guess is correct,
+by setting the width and height yourself, and making the diagram
+<b>tight</b>. When you set the <b>tight</b> option, you will
+find at first that the object labels sometimes overprint. The package
+generates error messages to tell you where this happens,
+and makes a suggestion for the appropriate <b>size</b>
+(common height and width), although this is usually too big.
+
+<div class="p"><!----></div>
+Sometimes you will also need to adjust the <b>shortfall</b>
+of any arrows that point at large object labels,
+<em>i.e</em>.&nbsp;the distance between the end of the arrow and the object.
+
+<div class="p"><!----></div>
+<br />Finally, you may ask why I don't "fix" this code. Indeed I have looked
+into doing so several times. The answer is quite simply that the
+small benefit that would accrue from rewriting it does not justify the
+labour that would be needed.
+Not only is it much simpler to rotate horizontal arrows,
+but the the results are also far superior.
+
+<div class="p"><!----></div>
+
+<h2>Arrowheads used in my book</h2>
+
+<div class="p"><!----></div>
+You will see that the diagrams in my book
+<a href="../Practical-Foundations/index.html"><i>Practical Foundations of Mathematics</i></a>
+have arrowheads compatible with those of <span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>'s ordinary <tt>\rightarrow</tt>.
+This was done by modifying the MetaFont source of <tt>\rightarrow</tt>
+to reduce its shaft to nothing, ie to make it just an arrowhead.
+
+<div class="p"><!----></div>
+I regret that I will <em>not</em> be releasing this MetaFont code, or PK
+files derived from it, because I am not prepared to undertake the
+support work that would be necessary afterwards.
+(Not even if you "promise to keep it to yourself",
+as you will inevitably release DVI files into the world containing
+references to these characters, obliging me to provide PK files to
+your readers, and explain to them why they keep getting checksum errors
+from dvips.)
+
+<div class="p"><!----></div>
+However, if you are intending to create a new symbols font yourself
+(to follow the "St. Mary Road" fonts),
+<em>and undertake the necessary support work</em>,
+I will be very pleased to give you the MetaFont source for these arrowheads
+and the other new symbols that are introduced in the book.
+I now have these in a form that's compatible with teTeX.
+
+<div class="p"><!----></div>
+
+<h2>Features introduced since September 1992</h2>
+
+<div class="p"><!----></div>
+See also the top of the source file for bug fixes and adjustments
+to the positioning of things.
+
+<div class="p"><!----></div>
+
+<h3>3.91 Released 1 September 2006</h3>
+
+<div class="p"><!----></div>
+
+<h3>3.90 Released 11 April 2004</h3>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+PostScript mode made default.
+
+<div class="p"><!----></div>
+
+<h3>3.89 Released 7 July 2002</h3>
+
+<div class="p"><!----></div>
+Added support for pdftex, which is recognised automatically.
+
+<div class="p"><!----></div>
+
+<h3>3.88 Released 1 September 2000</h3>
+
+<div class="p"><!----></div>
+
+<ul>
+<li> Square hooks made available as arrowtails:
+
+<pre>
+&nbsp;&nbsp;&nbsp;\newarrow{SquareInto}{sqhook}---&#62;
+&nbsp;&nbsp;&nbsp;\begin{diagram}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;&amp;&nbsp;\rSquareInto&nbsp;B
+&nbsp;&nbsp;&nbsp;\end{diagram}
+
+</pre>
+
+<div class="p"><!----></div>
+</li>
+</ul>
+
+<div class="p"><!----></div>
+
+<h3>3.87 Released 1 September 1999</h3>
+
+<div class="p"><!----></div>
+This version was used for the absolutely final 1200dpi PostScript copy
+of the book, as it was handed over to CUP in December 1998.
+
+<div class="p"><!----></div>
+The only change was a 0.2pt fudge to the positioning of the components
+of arrows. Previously a lot of tweaking had been done in this department.
+
+<div class="p"><!----></div>
+
+<h3>3.86 Released 1 September 1998</h3>
+
+<div class="p"><!----></div>
+
+<ul>
+<li> New options <b>hug</b> and <b>nohug</b> in PostScript mode:
+
+<pre>
+&nbsp;&nbsp;&nbsp;\diagramstyle[PS,nohug]
+
+</pre>
+ uses PostScript for the arrows without rotating the labels, but the
+ way of calculating the actual position of these horizontal labels on
+ will remain subject to alteration for some period of time - please
+ send me examples if you feel that adjustment is needed.
+<div class="p"><!----></div>
+</li>
+
+<li> <b>midvshaft</b> and <b>snake</b> for vertical arrows
+<div class="p"><!----></div>
+</li>
+
+<li> New option
+
+<pre>
+&nbsp;&nbsp;\rTo[gap=5pt]
+
+</pre>
+ to create a gap in horizontals and PS diagonals, instead of the hack
+
+<pre>
+&nbsp;&nbsp;\rTo~{\;}
+
+</pre>
+ which caused <tt>^</tt> and <tt>_</tt> labels to be moved too far away
+ from the shaft. The width, here 5pt, defaults to the same
+ value as <b>shortfall</b>.
+<div class="p"><!----></div>
+</li>
+
+<li> Added <tt>&gt;-&gt;</tt> and /verb/&lt;-&lt;/ arrowheads; these are the same
+ as <tt>&gt;</tt> and <tt>&lt;</tt> but the shaft goes <em>through</em> the extra
+ arrowhead.
+<div class="p"><!----></div>
+</li>
+
+<li> Added 2pt space separating labels from vertical arrows.
+<div class="p"><!----></div>
+</li>
+
+<li> Identify the cell in which a second-pass error occurs.
+<div class="p"><!----></div>
+</li>
+
+<li> Corrected position of hook in <tt>\dInto</tt> (see <tt>\shifthook</tt>).
+<div class="p"><!----></div>
+</li>
+
+<li> Corrections to <tt>\lhtriangle</tt>, <tt>\dhtriangle</tt>,
+ and <tt>\newarrowtail{boldhook}</tt>.
+<div class="p"><!----></div>
+</li>
+
+<li> Suppress indentation of text following diagram (due to <span class="roman">L</span><sup><span class="roman">A</span></sup><span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>&nbsp;change).
+<div class="p"><!----></div>
+</li>
+
+<li> Mangle <tt>\left@label</tt> and <tt>\right@label</tt> because of a
+ conflict with Elsevier's macros.
+<div class="p"><!----></div>
+</li>
+
+<li> Corrected dot spacing with <tt>[dotted]</tt> option.
+<div class="p"><!----></div>
+</li>
+</ul>
+
+<div class="p"><!----></div>
+
+<h3>3.85 Released 20 August 1997</h3>
+
+<div class="p"><!----></div>
+
+<ul>
+<li> New option <tt>[leftflush=margin]</tt> for left alignment of
+ diagrams on a margin, instead of centering them.
+ <tt>[leftflush]</tt> is like <tt>[flushleft]</tt>,
+ except that it reckons the alignment from multiple
+ verticals, or from text if there's no vertical.
+<div class="p"><!----></div>
+</li>
+
+<li> New options <tt>[hug]</tt> and <tt>[nohug]</tt> in PostScript mode:
+ <tt>[PS,nohug]</tt> uses PS for the arrows <b>without rotating the
+ labels</b>. Beware that this has been done in a lazy way by
+ overprinting empty <span class="roman">L</span><sup><span class="roman">A</span></sup><span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>-style diagonals carrying the labels, which
+ may therefore be mis-placed.
+<div class="p"><!----></div>
+</li>
+
+<li> New option <tt>[crab=distance]</tt> shifts horizontals and PS
+ diagonals transversally by the specified distance.
+ The abbreviations <tt>[crab+]</tt> and <tt>[crab-]</tt> use
+ <tt>\PileSpacing</tt>, so to put four diagonal lines in parallel
+ do something like
+
+<pre>
+&nbsp;&nbsp;\ruTo[crab--]&nbsp;\ldTo[crab-]&nbsp;\ruTo[crab+]&nbsp;\ldTo[crab++]
+
+</pre>
+ This doesn't work with <tt>[nohug]</tt>.
+<div class="p"><!----></div>
+</li>
+
+<li> New option <tt>[snake=distance]</tt> shifts the middle of midshaft
+ horizontals and PS diagonals longitudinally by the specified
+ distance.
+<div class="p"><!----></div>
+</li>
+</ul>
+
+<div class="p"><!----></div>
+
+<h3>3.84 Released 2 September 1996</h3>
+
+<div class="p"><!----></div>
+Provided <tt>\NWclck</tt> etc 2-cell arrows.
+
+<div class="p"><!----></div>
+
+<h3>3.83 Released 18 May 1995</h3>
+
+<div class="p"><!----></div>
+
+<ul>
+<li> New <tt>[dotted]</tt> option to change the filler on an arrow to
+ dots (useful for mediators for universal properties).
+<div class="p"><!----></div>
+</li>
+
+<li> Option <tt>[LaTeXeqno]</tt> uses <span class="roman">L</span><sup><span class="roman">A</span></sup><span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>'s equation number and style
+ for "eqno"; <span class="roman">L</span><sup><span class="roman">A</span></sup><span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>'s <tt>\label</tt> command picks this up.
+<div class="p"><!----></div>
+</li>
+</ul>
+
+<div class="p"><!----></div>
+
+<h3>3.81 Released 18 July 1994</h3>
+
+<div class="p"><!----></div>
+
+<ul>
+<li> <b>Stretchable PostScript diagonals implemented</b>.
+<div class="p"><!----></div>
+</li>
+
+<li> <tt>\overprint{text}</tt> sets text in maths and overprints it in the
+ current cell, centered in the column irrespective of other stuff.
+<div class="p"><!----></div>
+</li>
+
+<li> Option <tt>[repositionpullbacks]</tt>
+ redefines <tt>\SEpbk</tt> etc to use <tt>\overprint</tt>.
+<div class="p"><!----></div>
+</li>
+
+<li> New option <tt>[grid]</tt> to set column and row widths individually:
+ see manual for examples such as a regular pentagon and cube with perspective.
+<div class="p"><!----></div>
+</li>
+
+<li> Option <tt>[PostScript=name]</tt> takes the name of a DVI<font face="symbol">®</font
+>PS
+ translator as argument.
+<div class="p"><!----></div>
+</li>
+
+<li> Equilateral triangle or regular hexagon size options.
+<div class="p"><!----></div>
+</li>
+
+<li> Introduced landscape and portrait options.
+<div class="p"><!----></div>
+</li>
+
+<li> Peter Freyd's <tt>\puncture</tt> symbol provided.
+<div class="p"><!----></div>
+</li>
+</ul>
+
+<div class="p"><!----></div>
+
+<h3>Earlier Version numbers</h3>
+
+<ul>
+<li> 2 was circulated to some people in September 1989
+<div class="p"><!----></div>
+</li>
+
+<li> 3.16 was advertised on <tt>types</tt> and <tt>categories</tt>
+ in July 1990 and emailed to those who asked for it.
+<div class="p"><!----></div>
+</li>
+
+<li> 3.18 was the final bug-fix before the re-write began in April
+ 1992.
+<div class="p"><!----></div>
+</li>
+
+<li> 3.20 introduced error-recovery, and <tt>\newarrow</tt> for
+ horizontals and verticals.
+<div class="p"><!----></div>
+</li>
+
+<li> 3.22 completely rewrote the reformatting program for h and
+ corrected numerous alignment errors; introduced options in square
+ brackets
+<div class="p"><!----></div>
+</li>
+
+<li> 3.23 fixed a catastrophic error in nested diagrams
+<div class="p"><!----></div>
+</li>
+
+<li> 3.24 extended <tt>\newarrow</tt> to diagonals, added
+ trigonometry code, rewrote code for drawing <span class="roman">L</span><sup><span class="roman">A</span></sup><span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>&nbsp;diagonals,
+ introduced PostScript and TPIC diagonals, consistent choice of
+ arrowheads.
+<div class="p"><!----></div>
+</li>
+</ul>
+
+<div class="p"><!----></div>
diff --git a/macros/generic/diagrams/taylor/manual.bklt.gz b/macros/generic/diagrams/taylor/manual.bklt.gz
new file mode 100644
index 0000000000..d0260bdf1e
--- /dev/null
+++ b/macros/generic/diagrams/taylor/manual.bklt.gz
Binary files differ
diff --git a/macros/generic/diagrams/taylor/manual.dvi b/macros/generic/diagrams/taylor/manual.dvi
new file mode 100644
index 0000000000..afaa65122c
--- /dev/null
+++ b/macros/generic/diagrams/taylor/manual.dvi
Binary files differ
diff --git a/macros/generic/diagrams/taylor/manual.pdf b/macros/generic/diagrams/taylor/manual.pdf
new file mode 100644
index 0000000000..13bd061411
--- /dev/null
+++ b/macros/generic/diagrams/taylor/manual.pdf
Binary files differ
diff --git a/macros/generic/diagrams/taylor/manual.ps.gz b/macros/generic/diagrams/taylor/manual.ps.gz
new file mode 100644
index 0000000000..1b831e2e1f
--- /dev/null
+++ b/macros/generic/diagrams/taylor/manual.ps.gz
Binary files differ
diff --git a/macros/generic/diagrams/taylor/manual.tex b/macros/generic/diagrams/taylor/manual.tex
new file mode 100644
index 0000000000..e9b6a044a0
--- /dev/null
+++ b/macros/generic/diagrams/taylor/manual.tex
@@ -0,0 +1,2695 @@
+\errorcontextlines 999
+%
+% =========================================
+\title { Commutative Diagrams in \TeX\ %
+ (version 4)}
+% | |
+% | by |
+% | |
+\author {{\bf Paul Taylor }\\
+% =========================================
+%
+ {\tt www.cs.man.ac.uk/$\sim$pt}}
+%
+\date {15 June 1997}
+%
+\def\abstracttext
+ {\TeX\ and \LaTeX\ have become standard as a way of writing papers
+ in Computer Science and Category Theory.
+ Even in source form they are easier to compose and read than
+ attempts to write mathematics in ASCII. In~Category Theory
+ ``commutative diagrams'' are essential for a clear visual
+ understanding of the paper, but the graphics capabilities of \TeX\
+ are so limited that it is very difficult to draw them nicely, if at
+ all. This manual describes a new but reverse-compatible version of
+ a package to draw such diagrams, expressed in a language in which many
+ users have already found it very easy to express themselves.}
+%
+% ===============================================================
+\documentclass[a4paper]{article}
+\usepackage{diagrams}
+\makeatletter
+\makeindex
+\def\pt@input#1#2#3{\openin1 #1 \ifeof1 \typeout{#2}#3%
+ \else\closein1 \relax\input #1 \fi}%
+%
+% Read the diagram macros file, saving the banner from the top.
+\let\messagex\message
+\def\banner{Paul Taylor's diagrams package}%
+%\def\getbanner<#1>{\def\banner{#1}}%
+%\def\message#1{\getbanner#1\let\message\messagex\message{#1}}%
+%\pt@input{diagrams}%
+%{I can't find the commutative diagrams package,
+%so I can't process the manual!}\endinput
+%\ifx\newarrow\undefined
+%\message{This manual cannot be processed by any version earlier than 3.24.}%
+%\message{Please get an up-to-date version from ftp.dcs.qmw.ac.uk.}%
+%\expandafter\endinput\fi
+%
+% **********************************************************
+% * You can experiment with changing the following options *
+% * as explained in the "Options" section of this manual. *
+% **********************************************************
+%
+\diagramstyle[tight,centredisplay%
+%,dpi=300% 300dpi is default;
+%,dpi=212% for two-up (A4 on A5) reduction of 300dpi
+,dpi=600% for more modern laser-printers
+%,dpi=424% for two-up (A4 on A5) reduction of 600dpi
+%,PostScript=Rokicki%
+,UglyObsolete% formerly called ``noPostScript''
+%,TPIC%
+,heads=LaTeX%
+%,heads=vee%
+%,heads=triangle%
+%,heads=curlyvee% uses AMS symbols
+%,heads=littlevee%
+%,heads=boldlittlevee% needs good-bold-math below
+%,heads=littleblack% uses AMS symbols
+%,heads=blacktriangle% uses AMS symbols
+]
+% The boldhook tails and boldlittlevee heads use sizes of cmsy and cmmi
+% fonts which you may not have available. In this case, please change
+% the following to \havegoodboldmathfalse.
+\newif\ifhavegoodboldmath\havegoodboldmathtrue
+%
+% ===============================================================
+% ===============================================================
+% Try to read various non-essential auxiliary input files.
+%
+\iftrue
+ \ifx\ds@amssymb\undefined
+ \ifx\ds@mssymb\undefined
+ \ifx\ds@amssymbols\undefined
+ \pt@input{amssymb.sty}{}{%
+ \pt@input{mssymb.tex}{}{%
+ \pt@input{amssymbols.sty}%
+ {Some of the arrowheads in the diagrams package use symbols from the extra
+ ^^Jfonts (msxm/msym or msam/msbm) provided by the American Mathematical
+ Society.^^JYou can get these by anonymous FTP from e-math.ams.com and
+ elsewhere.
+ ^^JIn this manual the relevant examples will just be left out.^^J}{}}}%
+ \else\ds@amssymbols\fi\else\ds@mssymb\fi\else\ds@amssymb\fi
+ \makeatletter % old versions of mssymb b*gg*r up \catcode`\@
+\fi
+%
+\pt@input{a4.sty}%
+{^^JThis manual was written for European A4 paper, but you do not have a4.sty.
+^^JYou'll get lots of Over-full \string\hbox'es, but don't worry.
+It doesn't matter.^^JWe can carry on without any real harm.}{}%
+\advance\textheight 5mm
+%
+\def\AMS{$\cal A$\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.125em$\cal S$}
+\def\AmSTeX{\AMS-\TeX}
+\def\LAMSTeX{L\raise.42ex\hbox{\kern-.3em\the\scriptfont2 A}%
+ \kern-.2em\lower.376ex\hbox{\the\textfont2 M}%
+ \kern-.125em {\the\textfont2 S}-\TeX}
+\def\AMSLaTeX{\AMS-\LaTeX}
+\def\LaTeXe{\mbox{\LaTeX\kern.15em$2_{\textstyle\varepsilon}$}}
+
+\def\PiC{P\kern-.12em\lower.5ex\hbox{I}\kern-.075emC}
+\def\PiCTeX{\PiC\kern-.11em\TeX}
+\def\XYpic{\leavevmode\hbox{X\kern-.3em\lower.4ex\hbox{Y\kern-.15em}-pic}}
+
+%
+% I prefer paragraphs spaced rather than indented
+\parskip=2pt plus 2pt minus 1pt
+% and I don't like hyphenation
+\spaceskip=.5em plus .6em minus .2em
+\pretolerance=2000
+\binoppenalty=2000
+\relpenalty=1500
+% Penalty for splitting paragraphs
+\interlinepenalty=150
+\predisplaypenalty=10000
+\postdisplaypenalty=400
+\@beginparpenalty=\predisplaypenalty
+%
+%
+%\let\@mkboth\markboth
+\def\@oddfoot{}%
+\def\@evenfoot{}%
+\def\@evenhead{{\bf\thepage}\hfil{\rm\topmark}}%
+\def\@oddhead{{\rm\banner}\hfil{\bf\thepage}}%
+\def\sectionmark#1{\mark{\thesection. #1}}% should have \S but doesn't work
+%\def\section@mark#1{\markboth{#1}{\banner}}%
+\@twosidetrue
+%
+%
+\let\volx\relax % for ltugbot.sty
+\newcommand{\bsl}{$\backslash$}
+%
+\def\ix#1{#1\index{#1}}\def\person#1#2{#1 #2\index{#2, #1}}%
+{\escapechar-1 \xdef\bslch{\string\\}}%
+\def\ixcmd#1{{\escapechar-1 \xdef\cmdname{\string#1}}%
+ \expandafter\index{\cmdname @\bslch verb/\string#1/}}%
+\def\ixprotect#1{{\escapechar-1 \xdef\cmdname{\string#1}}%
+ \expandafter\index{\cmdname @\protect#1}}%
+
+\newarrow{Congruent}33333
+\newarrow{Curlyto}----{curlyvee}
+\newarrow{TeXto}----{->}
+\newarrow{TeXonto}----{->>}
+\newarrow{Blackinto}{blacktriangle}--->
+\newarrow{Openinto}{triangle}--->
+\newarrow{EEmbedd}{>>}---{>>}
+\newarrow{Corresponds}<--->
+\newarrow{Backwards}<----
+\newarrow{Multi}----o
+\newarrow{Crossto}----X
+\newarrow{Partial}----{harpoon}
+\newarrow{Into}{\ifhavegoodboldmath bold\fi hook}--->
+
+%=================================================================
+%
+% verbatim array
+%
+%=================================================================
+
+
+% This defines two new LaTeX environments: verbarray and verbdiag.
+
+% The first is like the verbatim environment, except that it treats each
+% cell of an array individually, centring the text within aligned &s. The two
+% arguments specify the text to be used for & and \\. Because of the
+% eager parsing at the beginning of a cell, \relax is needed before
+% commands that expand to anything other than their own text.
+% For example,
+% \begin{verbarray}{\ \&\ }{\ \string\\ \ }
+% A&\relax\rTo^f&B\\
+% \relax\dTo^g&&\relax\dTo^h\\
+% C&\relax\rTo^k&D
+% \end{verbarray}
+% produces the contents of a simple diagram.
+
+% The second packages this to produce a verbatim diagram, ie it encloses
+% the text in ``\begin{diagram}'' and ``\end{diagram}''. Any text which
+% follows ``\begin{verbdiag}'' on the same line is copied verbatim after
+% \begin{diagram}.
+
+% Here is a list of the characters that have been specially catcoded
+% except & [adapted from plain.tex]
+\def\dospecialsexceptand{\do\\\do\{\do\}\do\$%
+ \do\^\do\^^K\do\_\do\^^A\do\%\do\~}
+% (not counting ascii null, tab, linefeed, formfeed, return, delete)
+% Each symbol in the list is preceded by \do, which can be defined
+% if you want to do something to every item in the list.
+
+\def\lverbcell{\begingroup \catcode``=13 \@noligs
+\tt \let\do\@makeother \dospecialsexceptand \dolverbcell}
+\def\dolverbcell#1\rverbcell{#1\endgroup}
+
+\def\verbarraycr{\omit{\verbarraycrstring}\cr}
+
+\newenvironment{verbarray}[2]%
+{\abovedisplayskip\z@ \abovedisplayshortskip\abovedisplayskip
+\belowdisplayskip\abovedisplayskip\belowdisplayshortskip\abovedisplayskip
+$$\hss\vbox\bgroup
+\tabskip\z@
+\let\\\verbarraycr\edef\verbarraycrstring{#2}%
+\halign\bgroup
+\hfil\lverbcell##\rverbcell\hfil&&{#1}\hfil\lverbcell##\rverbcell\hfil\cr
+%$$
+}%
+{%$$
+\verbarraycr\egroup\egroup\hss$$}
+
+\def\ke{\kern.25em}
+
+\newenvironment{verbdiag}%
+{\begin{pageblock}%
+ \vspace{2ex}%
+ \let\do\@makeother
+ \def\beginverbdiag{\begin{verbarray}{\ke\tt\&\ke}{\ke\string\\}}%
+ \noindent\tt\string\begin\{diagram\}
+ \bgroup\aftergroup\beginverbdiag\let\par\egroup
+ \obeylines\dospecials
+}%
+{\end{verbarray}%
+ \string\end\{diagram\}%\$\$
+ \vspace{2ex}%
+ \end{pageblock}%
+}
+
+\newenvironment{clean}{}{}
+\newenvironment{pageblock}{\vbox\bgroup}{\egroup}
+
+\makeatother
+%=============================================================================
+%=============================================================================
+%=============================================================================
+
+\begin{document}
+\maketitle
+\begin{abstract}\noindent\abstracttext\end{abstract}
+
+\section{Introduction}
+In papers in mathematics and computer science which employ Category Theory,
+there is much benefit in clarity if ``commutative diagrams'' are used as
+much as possible to illustrate definitions, equations and universal
+properties. Here is a typical such diagram: it is one of the
+Mac~Lane-Kelly equations.%
+\index{Mac Lane, Saunders}\index{Kelly, Gregory Max}
+\def\Id{{\rm id}}\def\Assl{{\rm assl}}%
+\begin{diagram}[width=6em]
+A*(B*(C*D))&\relax\rTo^\Assl&(A*B)*(C*D)&\relax\rTo^\Assl&((A*B)*C)*D\\
+\dTo^{\Id*\Assl} & & = & &\relax\uTo_{\Assl*\Id}\\
+ A*((B*C)*D) & &\relax\rTo^\Assl & & (A*(B*C))*D\\
+\end{diagram}
+This manual describes version~4 of the author's package for drawing
+diagrams line this in (plain) \TeX\ or \LaTeX.
+Version~3 is already very widely used in
+the Category Theory and Theoretical Computer Science communities.
+Most of the underlying code has been rewritten, with a great improvement to
+the appearance of the diagrams, but it remains compatible with the previously
+developed and very popular straightforward language.
+
+\section{Design Criteria}
+Drawing such a diagram using the \LaTeX\ \verb/picture/ environment%
+\ixprotect\LaTeX\index{picture environment}
+takes
+about sixty lines of code, though some saving is possible (with the positioning
+of labels on arrows) by means of some simple macro programming.
+To get the arrows to match up neatly with the objects takes quite a lot of
+experimentation, and the whole job has to be repeated with each new diagram
+or each modification.
+Again, the use of macros for commonly occurring diagrams such as squares and
+triangles can save effort, but this does not postpone the difficulty very
+far, because as soon as we want to draw a slightly more complicated diagram
+we're back to square one.
+
+The now widespread use of workstations with big screens and ``personal''
+computers has lead to a kind of religious fervour that a mouse with at most
+three buttons is always easier to use than a keyboard with maybe over a hundred.
+This might be so if the tracking software were accurate and could use telepathy
+to ascertain what the user wanted, but in reality the attempts I have seen to
+``draw it on the screen'' and include the result in a \TeX\ document have
+looked as professional as what children bring home from their first
+day at school. My view is, if you want {\em wysiwyg,} use pen and paper!%
+\index{wysiwyg}\index{mouse}
+
+Besides the awful results, mouse-driven methods take longer and are less
+portable. If you want to write a joint paper with a colleague on the other
+side of the world, it is a great deal simpler to send a single ascii file
+by electronic mail than to package twenty of them (including one file per
+diagram as well as the main text) encoded in some weird commercial binary
+format.
+
+On the basis of these remarks, the design criteria of this package are as
+follows:
+
+\begin{enumerate}
+
+\item The entire diagram must form part of the source of the document itself.
+In other words, there must be no preprocessing
+({\em cf.}~{\tt eqn} in {\sc Unix})
+or inclusion of files (such as {\sc \ix{PostScript}} pictures).
+
+\item Simple diagrams must be able to be drawn ``on the fly'' and not
+need to be drawn on paper first.
+Obviously, complex diagrams will already have been worked out on paper anyway.
+
+\item The layout of the source code must resemble the intended
+diagram as far as syntactically possible.
+
+\item There must be no \ix{measuring} of labels to calculate \ix{co-ordinates}
+or lengths of arrows.
+
+\item There must be a variety of arrow styles, with facilities for
+defining new ones.\index{arrowheads}\index{heads}\index{diagonal arrows}
+Diagonal arrows (which, through lack of appropriate primitives,
+\TeX\ makes very difficult to draw) should be provided at various
+slopes, albeit with limited choice and features.
+
+\item The package must be compatible both with {\tt plain}~\TeX\ and%
+\index{plain \protect\TeX}\ixprotect\LaTeX\
+with \LaTeX, and not rely on non-standard fonts\footnote{Diagonal lines
+can {\em only\/} be drawn using \LaTeX's {\tt line10} and {\tt linew10}
+fonts,\index{line10 and linew10 fonts}\index{AMS symbols fonts}
+and for exotic arrow styles the AMS maths symbols fonts may be
+useful: we regard these as standard.
+\person{Alan}{Jeffery}'s \ix{St.\protect~Mary Road symbols font}
+is also useful.}
+or language features.
+
+\item Future versions which improve the appearance of the diagrams
+must, as far as possible, be compatible with past papers written using the
+package --- but you hack at your own risk!
+
+\end{enumerate}
+
+\noindent In addition there are {\ae}sthetic criteria,
+some of which may be a matter of opinion:
+
+\begin{itemize}
+
+\item Arrows should \ix{stretch} to meet the objects which are intended to
+be their endpoints.
+
+\item Arrows should be aligned (both horizontally and vertically)
+with the centres of the objects.\index{aligned labels}
+
+\item Labels on arrows should not affect the spacing of the diagram
+except to avoid overlapping.\index{labels}
+
+\item Stretching of arrows should not affect the centering of their
+labels.
+
+\end{itemize}
+
+%=================================================================
+%
+% my version
+%
+%=================================================================
+
+\section{Typing the diagram}\label{typing}
+
+The diagram above is produced in \LaTeX\ixprotect\LaTeX\
+as follows:%
+\ixcmd\input\ixcmd\usepackage
+\ixcmd\diagram\ixcmd\enddiagram
+\ixcmd{\begin{diagram}}\ixcmd{\end{diagram}}%
+
+
+\vskip2ex
+
+\begin{pageblock}
+\noindent\verb/\input diagrams/\\
+\verb/\def\Assl{{\rm assl}}\def\Id{{\rm id}}/\\[-2ex]
+\begin{verbdiag}
+A*(B*(C*D))&\relax\rTo^\Assl&(A*B)*(C*D)&\relax\rTo^\Assl&((A*B)*C)*D&\\
+\relax\dTo^{\Id*\Assl}&&=&&\relax\uTo_{\Assl*\Id}&\\
+A*((B*C)*D)&&\relax\rTo^\Assl&&(A*(B*C))*D&
+\end{verbdiag}
+\end{pageblock}
+In {\tt plain} \TeX\index{plain \protect\TeX}
+you do the same thing, writing \verb/\diagram/ and
+\verb/\enddiagram/ wherever we have \verb/\begin{diagram}/ and
+\verb/\end{diagram}/.
+
+In \LaTeXe\ixprotect\LaTeXe\ you can put
+\begin{quote}
+\verb/\usepackage{diagrams}/
+\end{quote}
+in place of the \verb/\input/ command, but you have to rename or alias
+the file to \verb/diagrams.sty/.\index{diagrams.sty}\index{diagrams.tex}
+
+The basic rule is to divide the diagram into cells,
+\begin{diagram}[height=1em,width=0pt,loose,textflow]
+%&&\relax\ && \ && \ && \ \\%39
+&A*(B*(C*D))\;&&\rTo^{\qquad\Assl\qquad}&&\;(A*B)*(C*D)\;&&
+\rTo^{\qquad\Assl\qquad}&&\;((A*B)*C)*D\\%38
+\ &\HonV&&&& \rDots &&&&\HonV& \ \\%37
+\\
+&\dTo^{\Id*\Assl} &
+ \uDots && \uDots &=& \uDots && \uDots &
+ \uTo_{\Assl*\Id}\\%36
+\\
+\ &\HonV&&&& \rDots &&&&\HonV& \ \\%35
+&A*((B*C)*D) & & & & \rTo_\Assl & & & & (A*(B*C))*D \\%34
+%&& \ && \ && \ && \ \\%33
+\end{diagram}
+just like the cells of a \ix{matrix}, and then type the contents
+of the cells with columns delimited by ``{\tt\&}''\ixcmd{&} and rows by
+``\verb/\\/''.\expandafter\index{\string\\@\string\\}
+The bottom arrow extends through the \ix{empty cells} either
+side of~it. Notice that although the matrix imposes a kind of co-ordinate
+system, the widths of the columns and the heights of the rows are variable
+and chosen automatically --- by \TeX, in the same way as it does for matrices,
+tables,~{\it etc.}\index{co-ordinates}
+
+At first you will probably need to draw the diagram carefully on paper and
+divide it into cells in this way before typing it in.
+The main difficulty is working out how many \verb/&/s\ixcmd{&} to insert;
+for this it is useful to observe that {\em in the simplest cases\/}%
+ \footnote{The bottom arrow disobeys this rule, since it goes across
+ three columns.}
+\begin{itemize}\index{parity rule}
+\item objects and verticals go in odd-numbered columns, and
+\item horizontals and diagonals go in even-numbered columns.
+\end{itemize}
+Then, of course, you need an even number of \verb/&/s between columns
+of the same parity and an odd number between different ones.
+After a little practice you'll learn other rules of thumb,
+but even if you make a mistake, the DVI previewer will make it clear how
+to correct~it.
+Error messages about {\em clashing\/}\index{clashing arrows}
+or {\em unterminated\/} arrows\index{unterminated arrows} indicate
+that something is wrong without previewing.\index{error checking}
+
+Each cell should contain {\it either\/} an \ix{object} (an~ordinary
+mathematical expression, set in maths mode) {\it or\/}~a~\ix{morphism}
+(an~\ix{arrow} such as \verb/\rTo^f/). Horizontal and vertical arrows cannot
+be mixed in one cell; moreover only one horizontal arrow per cell is allowed,
+but see the section~\ref{parallels} on parallel maps below.
+
+The horizontal and vertical arrows extend through the \ix{empty cells} either
+side until they meet a non-empty cell, just like the
+rook\index{rook (chess rule)} (castle\index{castle (chess rule)})
+in chess.
+For this purpose anything other than \ix{white space} (space, tab and newline),
+comments (\verb/%/) and \verb/\empty/ in the source make a cell non-empty.
+For example \verb/\null/, \verb*/\ / or \verb/{}/\index{{}}
+may be used to terminate arrows: it's not necessary that anything be printed.
+If you don't terminate an arrow, it will extend to
+the \ix{edge of the diagram},
+but just exactly where the ``edge'' {\em is}, particularly the right one,
+will be determined somewhat arbitrarily.
+
+The \ix{chess rule} does not apply to diagonals, whose endpoints are specified
+differently: see section~\ref{diagonals}.
+
+Do not enclose the arrow commands in \ix{boxes} or \ix{braces}, because this
+prevents the automatic \ix{stretch}ing from working.
+
+The {\em horizontal\/} arrow commands
+\index{horizontal arrows} (including \verb/\pile/) \ixcmd\pile
+may also be used in \ix{text}, $A \rTo^f B$.
+Since there is no enclosing matrix, this is written
+as \verb/$A \rTo^f B$/ {\em without\/}~\verb/&/.\ixcmd{&}
+You still need the \ix{dollars}\ixcmd{$}
+because it's still a \ix{mathematical expression}.
+Arrows participate in the horizontal stretching and shrinking of spaces
+between words in a paragraph, but of course their labels also force
+the lines of the paragraph apart.
+
+The arrow commands are {\em \ix{fragile}\/} in the \LaTeX\ sense:
+if you want to use them in section headings you must \verb/\protect/%
+\ixcmd\protect\ them.
+
+
+%===========================================================================
+
+\section{Labels}
+
+Each arrow carries up to three \ix{labels}, whose position is specified
+analogously to \ix{superscripts}%
+ \footnote{However they are {\em not\/} recognised syntactically in the
+ same way, and so for instance {\tt\bsl nolimits}\ixcmd\nolimits\
+ will not work.
+ The sub- and superscript characters are recognised by their
+ {\tt\string\catcode}s, so {\tt\string\sp} and {\tt\string\sb}%
+ \ixcmd\catcode\ixcmd\sp\ixcmd\sb\ixcmd\ifx\ixcmd\ifcat\
+ will work, but the others are compared using {\tt\string\ifx},
+ so have to be the same characters, with the same {\tt\string\catcode}s
+ as when {\tt diagrams.tex} was read in.
+ \index{Sp environment}\index{Sb environment}%
+ \ixprotect\AmSTeX\ixprotect\AMSLaTeX\index{{}}\ixcmd\bgroup\ixcmd\egroup
+ The {\tt Sb} and {\tt Sp} environments
+ in \AmSTeX\space and \AMSLaTeX\space will not work, and the text of the
+ label itself must be either a single token or be explicitly enclosed in
+ {\tt\string{\string}} or {\tt\string\bgroup\string\egroup}.}
+by
+\begin{center}
+\vskip-2ex
+\verb/^/ above,\qquad \verb/_/ below,\qquad \verb/</ left,\qquad
+\verb/>/ right\qquad and\qquad \verb/~/ middle.
+\end{center}
+\ixcmd{^}\ixcmd{_}\ixcmd{~}\index{<@$<$}\index{>@$>$}%
+For reverse compatibility, above=left and below=right for vertical arrows.
+Very old versions of the package used positional arguments; these are also
+still supported, but {\em must be enclosed in braces, e.g.\/}~\verb/\rTo{f}{g}/
+but not \verb/\rTo f g/.
+
+Explicitly, the labels are placed as follows:
+\begin{itemize}
+\item for {\bf horizontal} arrows,\index{horizontal arrows}
+ \verb/\rTo^f_g/ and \verb/\rTo{f}{g}/
+ give \smash{$\mathop{\longrightarrow}\limits^f_g$};
+\item for {\bf vertical} arrows,\index{vertical arrows}
+ \verb/\dTo <f >g/, \verb/\dTo^f_g/ and
+ \verb/\dTo{f}{g}/ give $f{\big\downarrow}g$;
+\item for {\bf positive\/} gradient {\bf diagonal} arrows,%
+ \index{diagonal arrows}\index{positive gradient}\index{negative gradient}
+ \verb/\ldTo^f_g/, \verb/\ldTo <f >g/ and \verb/\ldTo{f}{g}/ all give
+ ${}^f\!\!\!\!\swarrow\!\!\!\!_g$ (similarly \verb/\ruTo/).
+\item but for {\bf negative\/} gradient arrows, above=right and below=left,
+ so \verb/\rdTo^f_g/, \verb/\rdTo <g >f/ and \verb/\rdTo{f}{g}/ give
+ ${}_g\!\!\!\searrow\!\!\!^f$ (similarly \verb/\luTo/);
+\item Using tilde, the label may instead {\bf break} the arrow: \verb/\rTo~f/
+ gives \hbox to5em{$A\rTo~{\textstyle f}B$}.\index{broken arrows}
+ If~the arrow had a middle
+ ({\em e.g.}~\verb/+/ in \verb/\rCrossedInto/, page~\pageref{crossedinto}),
+ \ixcmd\newarrowmiddle\ixcmd\rCrossedInto
+ the label would replace~it.
+ This is sometimes useful to preserve the symmetry of a diagram with three
+ verticals.
+\end{itemize}
+Although the arrows extend into adjacent cells, the labels on horizontal and
+vertical maps remain centred {\em in~the cell in which the arrow was declared.}
+
+Any ordinary (mathematical) text you put in the cell with an arrow will
+appear in the usual way:
+\begin{itemize}
+\item For horizontal arrows it will therefore be attached to the arrowhead
+ or tail.
+
+ This offers a simple way of \ix{annotating the head of an arrow},%
+ \index{arrowheads!annotating}
+ for example
+ \verb/$ A \rTo^f \relax ^* B {}_s \lTo_g C$/\quad gives
+ \begin{quote}
+ $ A \rTo^f \relax ^* B {}_s \lTo_g C$.
+ \end{quote}
+ where \verb/\relax/ is needed to stop \verb/\rTo/ from reading \verb/^*/
+ as another label and \verb/{}/ serves as an object to which $s$ is
+ subscripted.\ixcmd\relax\index{{}}
+ The spacing in this example is not entirely satisfactory, because
+ \verb/\rTo/ and \verb/\lTo/ generate the \verb/shortfall/ spacing as
+ part of themselves and regard everything else as their targets.
+ You can use \verb/\!/ and \verb/\;/ commands to compensate for this,
+ remembering that should you subsequently change the \verb/shortfall/
+ amount then you must also adjust the compensation.\index{shortfall}
+
+ An alternative way of doing this is to define a new arrow command:
+ section~\ref{newarrow} explains how.\ixcmd\newarrow
+
+ Don't make a habit of putting \verb/\relax/ after arrow commands:
+ it can lead to gaps in short double-shafted arrows, for reasons which
+ are too complicated to explain here.
+\item For vertical and diagonal arrows additional text will lie to the
+ side of (or between) the arrows.
+ In the case of verticals this is at the same height as the middle and labels
+ of the arrows; see section~\ref{parallels}.
+\end{itemize}
+
+\ixcmd\textstyle\ixcmd\displaystyle\ixcmd\scriptstyle\ixcmd\scriptscriptstyle
+\ixcmd\labelstyle\ixcmd\objectstyle
+By default the labels on the arrows are set in \verb/\textstyle/
+(the same size as in text) when they are part of a matrix, and in
+\verb/\scriptstyle/ (like subscripts) in text. However this may be changed
+using the \verb/labelstyle/ option (page~\pageref{labelstyle}).
+%This re-defines the command \verb/\labelstyle/, for instance
+\begin{quote}
+\begin{verbatim}
+\begin{displaymath}
+\begin{diagram}[labelstyle=\scriptscriptstyle]
+A &\rTo^{\sum^n_1 f_i}_{\rm scriptscript} & B
+\end{diagram}
+\qquad
+...
+\end{displaymath}
+\end{verbatim}
+\end{quote}
+\noindent gives \vadjust{\vskip-4ex}%
+\begin{displaymath}
+\hss\begin{diagram}[inline,labelstyle=\scriptscriptstyle]
+A & \rTo^{\sum^n_1 f_i}_{\rm scriptscript} & B
+\end{diagram}
+\qquad
+\begin{diagram}[inline,labelstyle=\scriptstyle]
+A & \rTo^{\sum^n_1 f_i}_{\rm script} & B
+\end{diagram}
+\qquad
+\begin{diagram}[inline,labelstyle=\textstyle]
+A & \rTo^{\sum^n_1 f_i}_{\rm text} & B
+\end{diagram}
+\qquad
+\begin{diagram}[inline,labelstyle=\displaystyle]
+A &\relax\rTo^{\sum^n_1 f_i}_{\rm display} & B
+\end{diagram}
+\hss\end{displaymath}
+Similarly, objects within a diagram are set in \verb/\displaystyle/ unless the
+\verb/objectstyle/ option is used.
+(In text, {\em e.g.}~\verb/$A \rTo B$/, the setting of the objects is
+out of the control of the diagrams package.
+Unless you have done some special programming of your own, they will
+be set in \verb/\textstyle/.)
+
+%===========================================================================
+
+\section{The Cube}\label{cube}
+The \ix{cube} offers a good example of how horizontal and \ix{vertical arrows}
+\ix{stretch}.\index{horizontal arrows}
+Notice how the cells have been sub-divided further to give the
+``3D'' effect,\index{3D effect}
+and that the positions of the labels on the maps betray
+the cells in which they were declared.
+Because of the sub-division, the \ix{parity rule} for the column in which the
+horizontal arrows go has broken down.
+You should now formulate for yourself a new rule of thumb
+for the cases when you need one, two, three or four \verb/&/s between
+two commands.\ixcmd{&}
+
+\begin{verbdiag}
+A'&&\relax\rTo^{f'}&&B'&&&\\
+&\relax\rdTo_a&&&\relax\vLine^{h'}&\relax\rdTo_b&&\\
+\relax\dTo^{g'}&&A&\relax\rTo^f&\relax\HonV&&B&\\
+&&\relax\dTo^g&&\relax\dTo&&&\\
+C'&\relax\hLine&\relax\VonH&\relax\rTo^{k'}&D'&&\relax\dTo_h&\\
+&\relax\rdTo_c&&&&\relax\rdTo_d&&\\
+&&C&&\relax\rTo^k&&D&
+\end{verbdiag}
+
+\ixcmd\HonV\ixcmd\VonH\index{broken arrows}\index{hidden lines}%
+\index{meeting lines}\index{joining lines}\index{corners}
+The broken lines ($h'$~and~$k'$) are simply two arrows. The commands
+\verb/\HonV/ (``horizontal on vertical'') and \verb/\VonH/ (``vertical
+on horizontal'') allow arrows in one direction to pass through, whilst
+obstructing arrows in the other direction as if an object were present.
+They each have an optional argument: \verb/\HonV[=]/ and \verb/\VonH[\|]/
+should be used to allow extra space for double lines.
+An~alternative is to declare the ``front'' line in the intersection cell,
+where it will have the effect of obstructing the other arrow,
+but then its label (if any) would clash with the other arrow.
+
+\ixcmd\HmeetV
+There is also a command \verb/\HmeetV/ which causes single horizontal and
+vertical lines to meet, forming a corner.
+\begin{diagram}[notextflow]
+ A' & &\rTo^{f'} & & B' \\
+ & \rdTo_a & & & \vLine^{h'}& \rdTo_b \\
+\dTo^{g'} & & A & \rTo^f & \HonV & & B \\
+ & & \dTo^g & & \dTo \\
+ C' & \hLine & \VonH & \rTo^{k'} & D' & & \dTo_h \\
+ & \rdTo_c & & & & \rdTo_d \\
+ & & C & & \rTo^k & & D \\
+\end{diagram}
+You should soon be able to read and compose the source of
+these diagrams as easily as the printed version, although one would not
+normally go to the trouble of aligning the \verb/&/s in the source code!%
+\footnote{To do so neatly in this manual required special programming: the
+{\tt verbatim} environment produced unsatisfactory results.}%
+\index{verbatim environment}
+
+%==========================================================================
+
+\section{Parallel arrows}\label{parallels}\index{parallel arrows}%
+\ixcmd\pile\ixcmd\Downarrow\ixcmd\dashv\ixcmd\puncture
+You can draw two arrows between the same two vertices,
+including extra things like \ix{2-cells} ($\Downarrow$, \verb/\Downarrow/),
+the adjoint symbol ($\dashv$, \verb/\dashv/) in between.
+\person{Peter}{Freyd}'s \verb/\puncture/ symbol is also defined in the diagrams
+package.\index{adjunction}
+
+\begin{verbdiag}
+A&\relax\pile{\rTo^f\\
+\puncture\quad\alpha \\
+\rTo_g}&B&\\
+\relax\dTo^h\dashv\uTo_k&&&\\
+C&&&
+\end{verbdiag}
+
+\vskip-4ex
+\diagram
+A & \pile{ \rTo^f \\ \puncture\quad\alpha \\ \rTo_g } & B \\
+\dTo^h \relax\dashv \uTo_k \\
+C \\
+\enddiagram
+
+{\bf Horizontal} arrows\index{horizontal arrows}\index{pilespacing}
+may be \verb/\pile/d on top of each other.
+Effectively, a one-column diagram is created, which may have {\em either\/}
+a horizontal arrow {\em or\/} an object in each row. This works both
+in diagrams and in text.
+The spacing (\verb/\baselineskip/\ixcmd\baselineskip) between the rows
+is {\em half\/} of that specified by the \verb/pilespacing/ option
+(page~\pageref{pilespacing}),
+on the assumption that you will put something
+between parallel arrows; a blank line (\verb/\\ \\/) will suffice, then
+the spacing is the same as that for vertical arrows.
+
+{\bf Vertical} arrows\index{vertical arrows}
+may simply be put together in the same cell,
+with any text between them. The spacing is always that given by
+\verb/\pilespacing/.
+(\verb/\pile/ must not be used.)
+
+{\bf Diagonal} lines.\index{diagonal arrows}
+At the moment parallel diagonal lines are not properly implemented;
+(there will be a \verb/crab/\index{crab} option for transverse movement).
+
+However the option \verb/fixed/\index{fixed} may be used to force the
+diagonals to be set on the firsr pass, as fixed (non-stretching) boxes.
+These can be juxtaposed, separated with explicit space and
+moved with \verb/\raise/ or \verb/\raisebox/ commands.
+\begin{quote}
+\verb/\raise 5pt \hbox{$\ldTo^R$}\rightthreetimes\raise-5pt\hbox{$\ruTo^L$}/
+\end{quote}
+\ixcmd\raise\ixcmd\raisebox\ixcmd\lower\index{error checking}%
+There is an error message (``you must not put arrows in \ix{braces}''),
+which warns you that this is not a satisfactory solution.
+
+%==========================================================================
+\section{Defining arrow styles}\label{newarrow}
+It is easy to define other arrows besides the basic line with arrowhead given
+by \verb/\rTo/ and friends.\index{arrowheads} For example,\ixcmd\newarrow
+
+%\vskip-3\baselineskip
+
+\ifx\twoheadrightarrow\undefined % a typical AMS symbol name
+ \let\amsarrows\empty
+\else
+ \def\amsarrows{%
+ TeXonto&----\{->>\}&\rTeXonto\cr
+ }%
+ \ixcmd\rTeXonto
+\fi
+
+\ifhavegoodboldmath
+ \def\boldarrows{CrossedInto&\{boldhook\}-+->&
+ %\showboxdepth999 \showboxbreadth 999 \tracingonline 1
+ %\tracingcommands1 \tracingmacros1
+ \rCrossedInto
+ %\showlists
+ \cr}%
+ \newarrow{CrossedInto}{boldhook}-+->
+\else
+ \def\boldarrows{CrossedInto&C-+->&\rCrossedInto\cr}%
+ \newarrow{CrossedInto}C-+->
+\fi
+
+\ixcmd\rTo\ixcmd\rLine\ixcmd\rEmbed\ixcmd\rOnto\ixcmd\rEEmbedd
+\ixcmd\rDotsto\ixcmd\rDashto\ixcmd\rCorresponds\ixcmd\rImplies
+\ixcmd\rMapsto\ixcmd\rInto\ixcmd\rOpeninto\ixcmd\rCongruent
+\ixcmd\rTeXto\ixcmd\rBackwards\ixcmd\rMulti\ixcmd\rCrossto
+\ixcmd\rPartial\ixcmd\rCrossedInto
+\index{>@$>$ arrowhead}\index{-- filler}\index{>>@$\gg$ arrowhead}
+\index{. filler}%
+\index{dash filler}\index{| tail}\index{O arrowheads}\index{x arrowheads}%
+\index{harpoon arrowhead}\index{triangle arrowheads}\index{3 filler}%
+\index{hook tail}\index{C tail}\index{boldhook tail}%
+
+\begin{quote}\leavevmode\label{crossedinto}
+\vbox{\halign{\tt\string\newarrow\kern2pt\{#\}\kern2pt\hfil&\tt#\quad\hfil&%
+ $#$\cr\omit&&\omit\kern80pt\cr
+ To&---->&\rTo\cr
+ Line&-----&\rLine\cr
+ Embed&>--->&\rEmbed\cr
+ Onto&----\{>>\}&\rOnto\cr
+ EEmbedd&\{>>\}---\{>>\}&\rEEmbedd\cr
+ Dotsto&....>&\rDotsto\cr
+ Dashto&\{\}\{dash\}\{\}\{dash\}>&\rDashto\cr
+ Corresponds&<--->&\rCorresponds\cr
+ \boldarrows
+ Implies&====\{=>\}&\rImplies\cr
+ Mapsto&|--->&\rMapsto\cr
+ Into&C--->&\rInto\cr
+ Openinto&\{triangle\}--->&\rOpeninto\cr
+ Congruent&33333&\rCongruent\cr
+ TeXto&----\{->\}&\rTeXto\cr
+ Backwards&<----&\rBackwards\cr
+ Multi&----o&\rMulti\cr
+ Crossto&----X&\rCrossto\cr
+ Partial&----\{harpoon\}&\rPartial\cr
+ \amsarrows
+}}\end{quote}
+\noindent Note that the
+\ixcmd\rightharpoonhown\ixcmd\twoheadrightarrow\ixcmd\rightarrow
+\ixcmd\Rightarrow\ixcmd\boldmath
+\index{->>@\protect\verb/->>/ arrowhead}%
+\index{->@\protect\verb/->/ arrowhead}%
+\index{littlevee arrowheads}\index{boldlittlevee arrowheads}%
+\ifx\twoheadrightarrow\undefined\else\verb/{->>}/, \fi
+\verb/{harpoon}/, \verb/{->}/ and \verb/{=>}/ heads
+use \TeX's \verb/\rightharpoondown/ ($\rightharpoondown$), \verb/\rightarrow/
+($\rightarrow$) and \verb/\Rightarrow/ ($\Rightarrow$) symbols, consisting
+of heads {\em with shafts.}
+\ifhavegoodboldmath
+ Also, the \verb/boldbook/ tail uses \LaTeX's \verb/\boldmath/:
+\else
+ There is also a \verb/boldhook/ tail, which is not shown because the
+ appropriate fonts were not available when this copy of the manual
+ was printed:
+\fi
+please see the note about \verb/heads=littlevee/
+on page~\pageref{heads option}.
+The \verb/hook/ and \verb/C/ tails are the same.
+
+Each declaration\ixcmd\newarrow
+\index{north (east, west)}\index{south (east, west)}\index{east}\index{west}%
+\index{compass}\index{left}\index{right}\index{up}\index{down}
+\begin{center}
+\verb/\newarrow{/{\em Name\/}\verb/}{/{\em tail\/}\verb/}{/{\em filler\/}%
+\verb/}{/{\em middle\/}\verb/}{/{\em filler\/}\verb/}{/{\em head\/}\verb/}/
+\end{center}
+defines eight arrow commands
+$$\vcenter{\advance\hsize-2.5\baselineskip\advance\hsize-6em
+ \halign{\tt\bsl#\it Name\quad\hfil&#\hfil\quad or\quad&#\hfil\cr
+ r&right&east\cr
+ l&left&west\cr
+ d&down&south\cr
+ u&up&north\cr
+ ru&right \& up&northeast\cr
+ rd&right \& down&southeast\cr
+ lu&left \& up&northwest\cr
+ ld&left \& down&southwest\cr
+}}\qquad\qquad
+ \begin{diagram}[vcentre,inline,size=1.75\baselineskip,abut,shortfall=4pt]
+ \hbox{\tt lu}&&\hbox{\tt u}&&\hbox{\tt ru}\\
+ &\luTo[lowershortfall=2pt]&\uTo[lowershortfall=2pt]&
+ \ruTo[lowershortfall=2pt]\\
+ \hbox{\tt l}&\lTo[rightshortfall=2pt]&\vcenter{}&\rTo[leftshortfall=2pt]&
+ \hbox{\tt r}\\
+ &\ldTo[uppershortfall=2pt]&\dTo[uppershortfall=2pt]&
+ \rdTo[uppershortfall=2pt]\\
+ \hbox{\tt ld}&&\hbox{\tt d}&&\hbox{\tt rd}
+ \end{diagram}$$
+from the five named components.
+
+\ixcmd\isomorphic\ixcmd\cong
+Some but not all of the names given in the examples above are defined in the
+source of the package as distributed.
+However this is only really intended for reverse compatibility, because
+just as it is better to define a macro \verb/\isomorphic/ for the
+symbol $\cong$ (if that is what you use it to mean) than to write
+\verb/\cong/ in your documents, so it is advisable to define the arrow
+command names in the file where you keep your private collection of symbols.
+
+\ixcmd\rEmbed\ixcmd\rInto\ixcmd\rOpeninto\ixcmd\rImmerse\ixcmd\rInclude
+\ixcmd\rInternalise
+For example, if in your subject there are special kinds of functions known
+standardly as immersions, inclusions and internalisations and written as
+$\rInto$, $\rEmbed$ and $\rOpeninto$, then you should define
+\verb/\rImmerse/, \verb/\rInclude/ and \verb/\rInternalise/ instead of
+using the names \verb/\rInto/, \verb/\rEmbed/ and \verb/\rOpeninto/.
+The motto is {\em what you see is what you mean\/}!
+This avoids remembering or getting confused about the so-called
+standard macro names, and also enables you to change your mind about the
+notation if it is not standard but subject to experimentation.
+
+\ixcmd\newarrowhead\ixcmd\newarrowtail\ixcmd\newarrowmiddle
+\ixcmd\newarrowfiller
+The components as given in the \verb/\newarrow/ command are mnemonics,
+which are themselves defined using the commands
+\begin{center}
+\verb/\newarrowhead/, \verb/\newarrowtail/, \verb/\newarrowfiller/
+and \verb/\newarrowmiddle/.
+\end{center}
+Most of the characters in the standard \TeX\ \ix{Computer Modern fonts} which
+are appropriate for these components have already been used in the package
+and are illustrated above.
+If you wish to define other components, the examples at the end of the
+source show how to do this.
+If you are doing this with publicly available fonts, please contribute
+them for the benefit of other users by sending the definitions to me by
+electronic mail.
+It is in your interests to do so --- and to confine use of these four
+component-declaration commands to a single macro file --- because a more
+elaborate syntax may be used in future to facilitate adjustment of
+positioning. The \verb/\newarrow/ command itself, however, will remain
+as it is.
+
+\index{>@$>$ arrowhead}\index{>>@$\gg$ arrowhead}%
+\index{heads}\index{arrowheads}\index{+ arrowhead}\index{x arrowheads}%
+\index{O arrowheads}%
+\ixcmd\rBackwards\ixprotect{\LaTeX\ arrowheads}%
+The components \verb/>/, \verb/{>>}/, \verb/</, \verb/{<<}/, \verb/x/,
+\verb/+/, \verb/O/ and \verb/o/ can be used both as heads (fifth position)
+and \ix{tails} (first).
+The declaration \verb/<----/ defines \verb/\rBackwards/ to be a left-ward
+pointing arrow and \verb/\lBackwards/ to point right;
+this is not recommended, as you're certain to get confused.
+We shall see in the next section how to change the style of the four
+arrowhead components in a systematic way, thereby avoiding the ugly mixture
+of vee and \LaTeX\ arrowheads obtained using earlier versions of this package.
+
+\ixcmd\newarrow
+In some of the examples above (with the dot and rule fillers) the filler was
+repeated as the middle and one or both of the tips, whereas with others
+(dash) we used empty middle and tips instead.
+This was just to make the definitions easier to type: \verb/\newarrow/
+treats middles and tips which agree with the fillers as empty ones.
+It is possible to use two different fillers, but this is not recommended.
+
+\ixcmd\HorizontalMap\ixcmd\VerticalMap\ixcmd\DiagonalMap
+The commands \verb/\HorizontalMap/ and \verb/\VerticalMap/ are still
+supported, but should be replaced by \verb/\newarrow/.
+These ought only to have been used in macro files --- not in the text of
+documents --- to define four arrow commands together (right, left, up and down).
+The twenty arguments defining the five components of each of these four
+arrows can (if they're not already provided) be re-arranged as the four
+arguments of each of five \verb/\newarrowhead/, {\em etc.,} declarations
+with the same effect.
+The mnemonics of the five components are then given to \verb/\newarrow/.
+If~you have any difficulty doing this conversion, please contact me.
+
+
+%==========================================================================
+
+\section{Options}\label{options}\index{options}
+\ixcmd\diagram\ixcmd{\begin{diagram}}\ixcmd\diagramstyle\ixcmd\usepackage
+\ixprotect\LaTeX\ixprotect\LaTeXe
+The \verb/\diagram/ or \verb/\begin{diagram}/ command and the arrow
+commands may be followed by a list of options in square brackets, for example
+\begin{center}
+\verb/\begin{diagram}[size=2em,textflow]/ \qquad \verb/\rTo[abut]/
+\end{center}
+which apply to the diagram or arrow to which they are attached.
+Options may be given for an entire document, or within \TeX's normal
+scoping rules, by a stand-alone command such as
+\begin{center}
+\verb/\diagramstyle[centredisplay,PostScript=dvips]/
+\end{center}
+You may use any number of \verb/\diagramstyle/ commands.
+In \LaTeXe\ these options can be given when loading:
+\begin{center}
+\verb/\usepackage[centredisplay,PostScript=dvips]{diagrams}/
+\end{center}
+though you should avoid using macros in the option values
+(see page~\pageref{miss endcs}).
+
+{\bf Note:} if the text of the first cell in a diagram begins with a
+square bracket, the program will attempt to read it as an option, just
+as square brackets within \LaTeX\ \verb/array/s can cause trouble.
+This usually leads to a catastrophic
+error, which can be avoided using \verb/\diagramstyle[nooptions]/.%
+\index{nooptions}\index{{}[]}\ixcmd{\begin{diagram}}
+This problem doesn't arise in \LaTeX\ if you use \verb/\begin{diagram}/
+followed by a (space or) new line before the text of the diagram.
+
+Some options take a value, using an equals sign; those enclosed in square
+brackets below are optional, the others mandatory.
+Most of the options are appropriate for diagrams rather than arrows.
+
+\def\coordpair{{\rm($x$,$y$)}}
+
+\begin{description}
+\def\makelabel#1{{\tt#1} --- }
+\item[abut] Leave no gap between maps and objects; useful for (``Hasse'')
+ diagrams displaying order structures (page~\pageref{Hasse}).%
+ \index{abut}\index{posets}\index{Hasse diagrams}\index{order structures}%
+ \index{lattices}\index{shortfall}
+\item[alignlabels] The \ix{labels} on horizontal arrows remain centred in the
+ cells where they are defined, despite different size endpoints;
+ {\em cf.} \verb/midshaft/.\index{midshaft}\index{aligned labels}
+ This is the default, and it is recommended for diagrams of a regular
+ character.
+ If there is insufficient space to position the labels in this way, they
+ are centred (automatically and silently) instead.
+ Whichever option is used, the middle of the arrow, if present, is always
+ positioned with the labels.
+\item[amstex] Enable recognition of \AmSTeX's commutative diagram commands;
+ see section~\ref{emulate}.\ixprotect\AmSTeX\index{amscd.sty}
+\item[balance] The whole diagram is centred horizontally without regard to
+ the left- and rightmost labels,
+ so that its weight lies in the middle of the page.
+ This is not the default, because if you were not aware of it the gaps
+ would come as a surprise, but it is recommended.%
+ \index{balance}\index{centre}
+\item[bottom] When the diagram is placed alongside some simple text,
+ the baseline of that text is aligned with that of the bottom row of the
+ diagram.\index{bottom}
+\item[centre {\em or\/} center] The diagram is centred%
+ \footnote{Notice that I have provided the ``-er'' alternative as a
+ courtesy to American users which \person{Donald}{Knuth}
+ and \person{Leslie}{Lamport} did not afford to British ones.}
+ na\"{\i}vely, using \verb/nobalance/ and \verb/vcentre/;
+ {\em cf.}~\verb/middle/.\index{nobalance}\ixcmd\vcenter\index{centre}
+\item[centredisplay {\em or\/} centerdisplay] Disables \verb/flushleft/,
+ enables \verb/balance/ and gives a warning when used within \verb/$$...$$/
+ (see below).\index{flush left}\ixcmd{$$}
+\item[cmex] Set the arrow parts appropriately for use of the \verb/cmex/
+ (Computer Modern \ix{extension font})\index{Computer Modern fonts};
+ used by the \ix{brace} and \ix{paretheses} arrows.\index{cmex}
+%\item[defaultsize]
+\item[diagonalbase=\coordpair] Start \ix{diagonal arrows} from
+ $x$~columns beyond (left or right depending on the direction)
+ and $y$~rows above the current cell. Default (1,1).
+ Intended for emulation of other diagrams packages:
+ see section~\ref{emulate}.
+%\item[displayoneliner] Disables \verb/inlineoneliner/.
+\item[dotted] Use \ix{dots} instead of a ruled line for arrow shafts.
+ Useful for mediators for \ix{universal properties} in category theory.
+\item[dpi={\em resolution\/}] Anticipate the output resolution in pixels per
+ inch (default 300). A~fudge factor is applied to horizontal and vertical
+ ruled lines, without which pixel rounding at 300dpi would cause the
+ {\em bottom\/} rather than the middle of the horizontal rule to align
+ with the cusp of the \ix{vee arrowheads}:\index{dpi}
+ compare $\rTo[heads=vee]$ and $\rTo[nopixel,heads=vee]$.
+ Other similar adjustments may also be made to character positioning,
+ and to the slopes of diagonals in PostScript mode to avoid ``stepping.''
+ Most office laser printers are 300dpi, but if you intend to use a printer
+ of a different resolution for your final output, set {\tt dpi=1270} or
+ whatever --- otherwise the shafts will be too low instead. The same applies
+ if you intend to magnify or reduce; for example {\tt dpi=212} should be
+ used for two-up or \ix{A4-on-A5} final printing.
+ In \verb/plain/ \TeX\ you may set \verb/\magnification/ at the beginning
+ of the file, but {\em do not\/} change \verb/dpi/ as this compensates
+ automatically.
+ The \verb/nopixel/ option disables the fudge factor.%
+ \ixcmd\magnification\index{pixel size}\index{300 dpi}\index{resolution}
+\item[dpm={\em resolution\/}] As {\tt dpi} but in dots per metre; {\em e.g.}
+ 1270dpi=50000dpm.
+\item[eqno={\em label\/}] Place {\em label\/} (in maths mode) beside the
+ diagram, as an \ix{equation number}.
+ See also \verb/LaTeXeqno/.
+\item[fixed] Force diagonal arrows to be set on the first pass and not
+ stretched.
+\item[flushleft{[={\em width\/}]}] The old version of \verb/leftflush/.
+ The alignment is on the edge of the grid, irrespective of
+ what vertical maps are present
+ (this makes the diagram stick out on the left with no good visual reason).
+ \index{indented style}\index{asymmetric design}
+\item[grid={\em name\/}] Use the \ix{grid} {\em name}.
+ See page~\pageref{grid}.\ixcmd\newdiagramgrid
+\item[gridx={\em name\/}] Use the grid with the horizontal and vertical
+ components interchanged.
+\item[h={\em distance\/}] Same as \verb/height/.\index{height}\index{size}
+\item[hcentre {\em or\/} hcenter] Same as \verb/nobalance/.%
+ \index{balance}\index{centre}
+\item[heads={\em name\/}]\label{heads option}
+ Set the \verb/>/ and \verb/{>>}/ arrow heads
+ and tails to those defined by \verb/\newarrowhead{/{\em name\/}\verb/}/ and
+ \verb/\newarrowtail{/{\em name\/}\verb/}/.
+ \index{arrowheads}\index{heads}\ixcmd\newarrowhead\ixcmd\newarrowtail
+ \index{line10 and linew10 fonts}\ixprotect{\LaTeX\ arrowheads}%
+ \index{vee arrowheads}\index{littlevee arrowheads}\index{O arrowheads}%
+ \index{boldlittlevee arrowheads}\index{triangle arrowheads}%
+ \index{x arrowheads}\index{curlyvee arrowheads}%
+ \index{blacktriangle arrowheads}\index{littleblack arrowheads}%
+ \index{AMS symbols fonts}\ixcmd\boldmath
+ The following styles are currently available:
+ \message{(There may follow a warning message about LaTeX diagonals
+ - please ignore it.)}%
+ \begin{quote}
+ \ifx\twoheadrightarrow\undefined\else\def\amsarrows{%
+ \dohead{curlyvee}(uses AMS symbols)\cr
+ \dohead{blacktriangle}(uses AMS symbols)\cr
+ \dohead{littleblack}(uses AMS symbols)\cr
+ }\fi
+ \ifhavegoodboldmath\def\boldarrows{%
+ \dohead{boldlittlevee}(uses {\tt\string\boldmath})\cr
+ }\else\let\boldarrows\empty\fi
+ \diagramstyle[l>=50pt]\leavevmode
+ \def\dohead#1{\tt#1\quad&\relax
+ \csname diagramstyle\endcsname[heads=#1]$\rEmbed\quad\rEEmbedd$&\quad}
+ \vbox{\halign{#&#&#\hfil\cr&\omit\kern100pt\cr
+ \dohead{LaTeX}(default; uses {\tt line10})\cr
+ \dohead{vee}\cr
+ \dohead{littlevee}\cr
+ \boldarrows
+ \dohead{triangle}\cr
+ \dohead{o}\cr
+ \dohead{O}\cr
+ \dohead{X}\cr
+ \dohead{+}\cr
+ \amsarrows
+ }}\end{quote}
+ \ifx\twoheadrightarrow\undefined
+ There are also heads called
+ \verb/curlyvee/, \verb/blacktriangle/ and \verb/littleblack/,
+ but these require the AMS symbols fonts, which were unfortunately
+ not available when this copy of the manual was printed.
+ If~you try to use them
+ \else
+ The vertical \verb/curlyvee/ heads come from the AMS symbols, and
+ the horizontals, from \verb/cmsy/ in the \ix{Computer Modern fonts},
+ seem appear to be slightly mis-aligned with the \verb/vee/ heads
+ from \verb/cmmi/.
+ If~you use them but forget to
+ \ifx\usepackage\undefined
+ \verb/\input mssymb/,
+ \else
+ \verb/\usepackage{amssymb}/,
+ \fi
+ \fi
+ \index{undefined control sequence}\index{cmsy}\index{amssymb.sty}%
+ you'll get an ``{\tt undefined control sequence}'' error in the middle of
+ a lot of garbage (deeply nested): hit return several times and carry on.
+
+ The \verb/boldlittlevee/ heads \ifhavegoodboldmath\else(not shown above) \fi
+ rely on \LaTeX's \verb/\boldmath/ command, and default to \verb/littlevee/
+ in \verb/plain/ \TeX.\index{plain \protect\TeX}\ixprotect{\LaTeX 2.09}
+ They~may not work correctly if you use \person{Leslie}{Lamport}'s old
+ \LaTeX2.09 \ix{font selection}.
+ Even if you use \person{Frank}{Mittelbach} and \person{Rainer}{Sch\"opf}'s
+ new one (which is part of \LaTeXe\ixprotect\LaTeXe) some \ix{PK files}
+ \ifhavegoodboldmath
+ which are not in the standard distribution may be needed.
+ \else
+ are needed which were not available when this copy of the manual
+ was printed.
+ \fi
+ It~is only intended for final copy in the event that the \verb/littlevee/
+ appears too feint. The same applies to the \verb/boldhook/ tails.
+\item[height={\em distance\/}] The distance between the baselines of
+ successive rows in the diagram is as specified. Note that as objects and
+ arrows commonly alternate, this is usually half the distance between
+ one horizontal arrow and the next.\index{height}\index{size}
+\item[hmiddle] Same as \verb/balance/.\index{balance}\index{centre}
+\item[hug] If \verb/PostScript/ is enabled, rotate labels on %vertical and
+ diagonal maps. %The text then runs {\em up\/} the verticals.
+ (Not yet implemented --- in fact the \verb/PostScript/ option currently
+ {\em always\/} does this to diagonals, but not to verticals.
+\item[htriangleheight={\em distance\/}] Set \verb/height/={\em distance\/}
+ and then \verb/width/ in such a way that the minimal $3\times5$-grid
+ will make an equilateral $\triangleright$ \ix{triangle},
+ and a $5\times7$-grid makes a regular \ix{hexagon} (page~\pageref{hexagon}).
+ If~the {\em distance\/} is not specified, the existing \verb/height/
+ is used and the \verb/width/ adjusted accordingly.
+\item[htrianglewidth={\em distance\/}] Set \verb/width/={\em distance\/}
+ and then \verb/height/ to make these figures.
+\item[inline] Use this option on individual diagrams which are being displayed
+ alongside one another, for example in \verb/$$/...\verb/$$/ or \LaTeX's
+ \verb/center/ or \verb/displaymath/ environments, when the global display
+ option is \verb/flushleft/ or \verb/centredisplay/.\index{in line}%
+ \index{flush left}\index{displaymath environment}\index{center environment}
+%\item[inlineoneliner] If the diagram has only one row, run it on in the text
+% instead of displaying~it. (This is highly questionable.)
+\item[l>={\em distance\/}] Forces arrows (particularly horizontals and
+ rotated diagonals) to have at least the specified length (default 2em),
+ to avoid getting \ix{birds' feet} instead of arrows:
+ \hbox to2.8em{$A\rTo[l>=0pt,heads=vee]B$}.
+ Sometimes this makes the arrow \ix{over-print} an object or appear displaced;
+ in this case you'll see an ``over-full \verb/\hbox/'' or ``increase
+ cell \ix{width}'' error message.\index{over-full hbox}
+\item[labelstyle={\em command\/}]\label{labelstyle}
+ Inserts this command in every label
+ text;\ixcmd\scriptstyle\index{labels}
+ \verb/\scriptstyle/ is the commonest choice apart from the default.
+\item[landscape] If \verb/PostScript/ is enabled, rotate the entire diagram
+ by $90^\circ$ anticlockwise.\index{landscape}\index{PostScript}
+ Options which refer to the extreme rows and columns are modified
+ accordingly. Useful for big diagrams with long objects or labels.%
+ \index{rotation}
+\item[large] Same as \verb/size=5em/.\index{size}\index{large}
+\item[LaTeXeqno] Use \LaTeX's running \verb/equation/ numbering
+ for an \verb/eqno/ (\emph{q.v.}).\index{equation number}
+ You can put a \LaTeX\ \verb/\label/ inside the diagram.\ixcmd{label}
+\item[lefteqno] Place the \ix{equation number}, as given by \verb/eqno/, on the
+ left of the diagram.
+\item[leftflush{[={\em width\/}]}]
+ Display the diagram on the left of the page instead of the centre,
+ {\em cf.} \verb/fleqn.sty/.\index{flush left}\index{fleqn.sty}
+ This is considered good \ix{book design} by certain publishers.
+ If {\em width\/} is given, the leftmost vertical of the diagram is,
+ if possible, aligned at that distance from the left edge of the page.
+ The idea is that the arrows, rather than the text, define the
+ visual extent of the diagram.
+ If the first column contains multiple verticals, the leftmost
+ of them is used for the alignment.
+ If there are no verticals in the leftmost column, the alignment
+ is on the left extremity of the text.
+ \index{indented style}\index{asymmetric design}
+\item[leftshortfall={\em distance\/}] The gap between the arrow (to which it
+ is applied individually) and the object on its left is as specified.%
+ \index{short fall}
+%\item[locate=$x$:$y$] Move the origin of the diagonals. Not yet implemented.
+\item[lowershortfall={\em distance\/}] Similarly below.
+\item[loose] The rows and columns of the diagram have {\em at least\/} the
+ \verb/height/ and \verb/width/ specified, but may stretch, in the same
+ way as those of an array or table.
+ This is the default, because the results are more of less right in most
+ circumstances, but this can result in gaps in the diagram, so it is
+ recommended that \verb/tight/ be used in the final version of a document,
+ with appropriate manual adjustment of the size of the grid.%
+ \index{tight}\index{loose}\index{width}
+\item[middle] The diagram is centred both horizontally
+ using \verb/balance/ and vertically using \verb/vmiddle/, {\em q.v.}%
+ \index{middle}\index{centre}\index{balance}
+\item[midhshaft {\em or\/} midshaft] Labels are centred in the shafts of
+ horizontal arrows; {\em cf.} \verb/alignlabels/.%
+ \index{aligned labels}\index{midshaft}
+ This happens automatically for in-text or one-line diagrams,
+ or if the arrow is too short to align the labels.
+%\item[midvshaft] The same for vertical arrows (doesn't work).
+%\item[missives] Enable missives.
+\item[moreoptions] Allow another list of \ix{options} in square brackets.
+ This is intended for macros like
+ %\begin{center}
+ \verb/\def\funnydiagram{\diagram[/{\em options\/}\verb/,moreoptions]}/
+ %\end{center}
+ to allow \verb/\funnydiagram[/{\em options\/}\verb/]/.
+ The arrow commands always allow any number of lists of options.
+\item[nobalance] Horizontal centring of diagrams is done with respect to the
+ extremities.\index{balance}
+\item[nohcheck] Disables certain \ix{error checking}.
+\item[nohug] Do not rotate the labels on vertical and diagonal maps, but
+ print them horizontally.
+ (Not yet implemented --- in fact the \verb/PostScript/ option currently
+ {\em always\/} rotates labels on diagonals, but not on verticals.
+\item[nooptions] Used in \verb/\diagramstyle/, this disables the parsing
+ of \ix{options}. \ixcmd\diagramstyle
+ This is for reverse compatibility in the case where several diagrams
+ begin with a square bracket.
+\item[noorigin] Disables \verb/origin/ and \verb/balance/.%
+ \index{balance}\index{origin}
+\item[nopixel] Disable the \verb/dpi/ fudge factor, {\em q.v.}, by setting
+ a very high resolution.\index{pixel size}
+\item[noPostScript] Disables the use of embedded {\sc \ix{PostScript}}
+ {\em and\/} the \verb/PS/ and \verb/noPS/ options.
+ The value, if any, is ignored, so you need only edit in/out the prefix
+ \verb/no/ whilst leaving the choice of {\sc PostScript} translator intact.
+\item[noPS] Disable {\sc PostScript} on individual maps and diagrams.
+\item[notextflow] Disables \verb/textflow/. This is needed on some individual
+ diagrams (where they appear as nouns in a sentence, for instance) when you
+ use \verb/\diagramstyle[textflow]/.\index{text flow}
+\item[noTPIC] Disable the use of TPIC \verb/\special/s.%
+ \index{TPIC}\ixcmd\special
+\item[objectstyle={\em command\/}] Inserts this command in every \ix{object}
+ text; \ixcmd\scriptstyle
+ \verb/\scriptstyle/ is the commonest choice apart from the default.
+\item[origin] Makes the width, height and depth of the whole diagram zero,
+ locating it at the baseline of the bottom row, in the centre of the leftmost
+ column.
+ This allows it to be positioned by the user; useful for mixing diagrams with
+ \LaTeX\ pictures and other graphics.
+ \index{origin}\index{picture environment}\ixprotect\LaTeX
+\item[p={\em distance or\/} pilespacing={\em distance\/}] Set the distance
+ between parallel verticals (in the same cell); that between the rows of a
+ \verb/\pile/ is half of this to allow things to be put between parallel
+ horizontals.\index{parallel arrows}\ixcmd\pile\label{pilespacing}
+\item[pixelsize={\em distance\/}] Anticipate this output resolution;
+ {\tt pixelsize=.02true mm} is the same as {\tt dpi=1270} or {\tt dpm=50000}.%
+ \index{pixel size}
+\item[portrait] Disable the \verb/landscape/ option,
+ {\em q.v.}\index{landscape}\index{portrait}
+\item[PostScript={\em author\/}]\label{PS}
+ Enable the use of embedded \ix{Adobe}
+ {\sc \ix{PostScript}} \verb/\special/ commands in a form supported by
+ {\em author\/}'s translator.
+ The following are currently recognised by the {\em author\/}s' surnames,
+ their programs or their companies.
+ The surname is the preferable form, since the programs have very similar
+ names.
+ The master \ix{FTP} source is also given.\index{anonymous FTP}
+ \begin{itemize}
+ \item (Tomas) \verb/Rokicki/, \verb/dvips/, \verb/RadicalEye/:
+ labrea.stanford.edu /pub/dvips9999.tar.Z%
+ \index{Rokicki, Tomas}\index{dvips}\index{Radical Eye}
+ \item (Stephan) \verb/Bechtolsheim/, \verb/dvitps/,
+ \verb/IntegratedComputerSystems/:\\
+ arthur.cs.purdue.edu /pub/TeXPS-9.99.tar.Z%
+ \index{Bechtolsheim, Stephen}\index{Integrated Computer Systems}%
+ \index{dvitps}
+ \item (James) \verb/Clark/, \verb/dvitops/\index{Clark, James}\index{dvitops}
+ \end{itemize}
+ These are currently used to implement diagonals by rotating horizontals.
+ It is not possible to use \person{Andrew}{Trevorrow}'s Oz\TeX.%
+ \index{oztex@Oz\protect\TeX}
+\item[PS] Suppose you want to use {\sc \ix{PostScript}} for some but not all
+ maps and diagrams in the final version. Then use \verb/PS/ for each of them
+ but put \verb/\diagramstyle{noPostScript}/ in the preamble during drafting.
+\item[repositionpullbacks] The \ix{pullback} symbols
+ have a fixed position relative to the cell, irrespectively of
+ where you put the \verb/\SEpbk/ {\em etc}.~command.
+\item[righteqno] Put the \ix{equation number} (\verb/eqno/), if any,
+ on the right.
+\item[rightshortfall={\em distance\/}] Analogous to \verb/leftshortfall/.%
+ \index{short fall}
+\item[ruleaxis] Set the height of the shaft of the horizontal arrows;
+ normally \verb/\mathaxis/.
+ \index{ruleaxis}\index{horizontal arrow}\ixcmd\mathaxis
+\item[s={\em distance\/}] Same as \verb/size/.\index{size}
+\item[scriptlabels] Labels on maps are set in \verb/\scriptstyle/; useful
+ if they're rather long.
+\item[shortfall={\em distance\/}] Set the gap between arrows and the objects
+ to which they point.\index{short fall}
+%\item[showpair=\coordpair] Debug
+\item[silent] Suppress \ix{warnings} and second-pass \ix{error messages}.
+ Only use this option if either you don't care what the diagram looks like
+ or you've typeset it and looked at the result already. Not recommended.
+ \index{silent}
+\item[size={\em distance\/}] Set both \verb/height=/{\em distance\/} and
+ \verb/width=/{\em distance}.\index{size}
+ \begin{center}
+ {\bf Most geometrical problems with diagrams can be solved by enlarging
+ the cells.} Please try this and the \verb/tight/ option before contacting me.
+ \end{center}
+\item[small] Same as \verb/size=2em/.\index{size}
+\item[textflow] The text which follows the diagram in the \TeX\ source is
+ brought up to fill out the line preceding it; useful to avoid the
+ ``such that the diagram $\clubsuit$ commutes'' clich\'e.
+ This has been used for several diagrams in this manual.\index{text flow}
+\item[thick{[={\em breadth\/}]}] As \LaTeX\ \verb/\thicklines/, optionally
+ setting the width of orthogonal ruled lines. The \LaTeX\ command itself has
+ no effect within diagrams. The default rule breadth is twice that for the
+ \verb/thin/ option.\ixcmd\thicklines
+\item[thin{[={\em breadth\/}]}] This is similarly analogous to
+ \verb/\thinlines/.\ixcmd\thinlines
+ The default rule breadth is the same as that used by \TeX, namely
+ \verb/\fontdimen8\textfont3/.
+\item[tight] Force all of the cells in the grid to have exactly the \ix{size}
+ you specify.\index{tight}\index{height}\index{width}\index{loose}
+ This is recommended for the final version of a document, but
+ is not the default because it may cause \ix{over-print}ing,
+ which requires the intervention of the user to cure
+ (by setting \verb/height/ and \verb/width/); {\em cf.} \verb/loose/.
+\item[top] Analogous to \verb/bottom/, except that the top row is used.
+\item[TPIC] Use \ix{TPIC} \verb/\special/ commands instead of \LaTeX\ line
+ segments to draw diagonal lines.
+ These are supported by {\sc Textures}, \person{Tomas}{Rokicki}'s
+ \verb/dvips/ and \person{Paul}{Vojta}'s \verb/xdvi/.%
+ \ixcmd\special\index{xdvi}\index{dvips}
+\item[uppershortfall={\em distance\/}] Analogous to \verb/leftshortfall/,
+ except above.\index{short fall}
+\item[vcentre {\em or\/} vcenter] Vertical positioning is the same as with
+ \TeX's \verb/\vcenter/\ixcmd\vcenter\ixcmd{[c]}\index{centre}
+ command or \LaTeX's \verb/[c]/ option.
+ However \verb/vmiddle/ is what is usually wanted.
+\item[vmiddle] If a diagram with an odd number of rows of constant height
+ (the usual case) is placed alongside some simple text,
+ the baseline of the text will be aligned
+ with that of the middle row, irrespectively of the height and depth of the
+ labels on the top and bottom rows.
+ In general, the baseline of the diagram is half-way between those of the
+ top and bottom rows.\index{centre}
+\item[vtriangleheight={\em distance\/}] Set \verb/height/={\em distance\/}
+ and then \verb/width/ in such a way that the minimal $5\times3$-grid
+ will make an equilateral $\bigtriangleup$ \ix{triangle}
+ and a $9\times 5$-grid makes a regular \ix{hexagon} (page~\pageref{hexagon}).
+ \index{width}\index{height}
+\item[vtrianglewidth={\em distance\/}] Set \verb/width/={\em distance\/}
+ and then \verb/height/ to make these figures.
+\item[w={\em distance or\/} width={\em distance\/}] Set the distance between
+ the centre of one column and the next to the right.\index{width}
+\end{description}
+
+
+%==========================================================================
+
+\section{Application to adjunctions}
+Here is a side application of commutative diagrams to displaying
+``adjoint correspondences.'' It also illustrates the way arrows
+stretch to meet their endpoints but keep their labels centred in
+the column of arrows. The options are chosen to avoid getting
+lots of extra space around the cells, which in this case we don't want.
+Notice also the invisible ``objects'' terminating the \verb/\hLine/
+``morphism'' command.\index{adjunction}
+
+\ixcmd\hLine\ixcmd\dashv\index{empty cells}\index{invisible objects}
+
+\begin{verbdiag}[loose,height=.8em,width=0pt]
+&Z\times X&\relax\rTo^f&Y&\\
+\relax\ &&\relax\hLine&&\relax\ &\\
+&Z&\relax\rTo^{{\bf curry}(f)}&Y^X&
+\end{verbdiag}
+
+\vskip-6ex
+\diagram[loose,height=.8em,width=0pt]
+&Z \times X &\relax\rTo^f & Y \\
+\ &&\relax\hLine && \ \\
+&Z & \rTo^{\ {\bf curry}(f)\ } & Y^X \\
+\enddiagram
+
+\ixcmd\hfill
+
+If you want the $Z$s lined up, it's no good \verb/\hfill/ing the second
+one on the right, because the arrow will not stretch to meet
+it\footnote{There is no way of detecting {\em where\/} \ix{glue} is placed
+inside a box, so the \ix{stretch}ing algorithm {\em assumes\/} the object
+is centred and extends the arrow by half the amount of glue in the
+object box.}. The best solution is probably to split the object into
+two cells:
+
+\begin{verbdiag}[loose,height=.8em,width=0pt,l>=3em,midshaft]
+&Z&\relax{}\times X&\relax\rTo^f&Y&\\
+\relax\ &&&\relax\hLine&&\relax\ &\\
+&Z&&\relax\rTo^{{\bf curry}(f)}&Y^X&
+\end{verbdiag}
+
+\vskip-6ex
+\diagram[loose,height=.8em,width=0pt,l>=3em,midshaft]
+&Z & {} \times X &\relax\rTo^f & Y \\
+\ &&& \hLine&& \ \\
+&Z & & \rTo^{{\bf curry}(f)} & Y^X \\
+\enddiagram
+
+\noindent The \verb/{}/ makes sure \verb/\times/ still gets the spacing
+appropriate to a binary operator.
+
+%==========================================================================
+\section{Diagonal lines}\label{diagonals}\index{diagonal arrows}
+Whereas horizontal and vertical arrows such as \verb/\rTo/ and \verb/\dTo/
+stretch to meet their endpoints without your telling them where those are,
+the diagonals (\verb/\ruTo/) need to be told explicitly if you want to use
+them for anything other than to go across a $3\times3$ square.
+
+\ixcmd\line\ixcmd\vector\ixcmd\ruTo\ixcmd\rdTo\ixcmd\luTo\ixcmd\ldTo
+\ixcmd{()}%
+The approximate direction of the arrow stays the same ---
+right/left and up/down --- as given by its name.
+The length (and exact direction) are given by {\em positive\/} coordinates.
+As with \LaTeX's \verb/\line/s and \verb/\vector/s,
+these are given pairs of (small) positive integers in round brackets, except
+that there is no restriction on the values.
+
+\ixcmd\laf\ixcmd\lah\index{line10 and linew10 fonts}\index{height}\index{width}
+However these numbers count the {\em cells,} horizontally and vertically,
+through which the arrow passes, rather than the absolute distance.
+This means%
+ \footnote{This represents a change from version~3, in which they were
+ required to be the same for the diagonals to work. The coordinates are
+ now converted internally into distances, and then back into a rational
+ number, and the appropriate \LaTeX\ arrow characters chosen.
+ The macros {\tt\string\laf}, {\tt\string\lah}, {\em etc.} and their octal
+ arguments are now obsolete.}
+that if the \verb/height/ of the rows and the \verb/width/ of the
+columns are different, \verb/\ruTo(2,2)/ is no longer a $45^\circ$ slope.
+
+The names of the arrow commands specify the horizontal direction first,
+as a reminder that this is also the convention for coordinates.
+
+Another difference from the orthogonal arrows is the rule for where to place
+the command. Somewhat arbitrarily,%
+ \footnote{The option \texttt{diagonalbase} changes this; it is
+ intended for emulation of other diagrams packages.}
+this is
+\begin{quote}
+ in the row {\em below the upper endpoint\/} (irrespectively of the direction
+ of the arrowheads, if any), and in the adjoining column
+\end{quote}
+In the commonest case (the diagonal of a small square) this means the middle
+of the square; more generally for positive gradients (\verb/\ruTo/ and
+\verb/\ldTo/) the arrow command goes below and to the left of the upper
+endpoint, and for negative gradients (\verb/\rdTo/ and \verb/\luTo/) below
+and to the right.
+
+\ixcmd\SEpbk\ixcmd\SWpbk\ixcmd\NEpbk\ixcmd\NWpbk
+For example, here is the diagram which defines a \ix{pullback}.
+The corner symbol is a macro (\verb/\SEpbk/) placed in the same cell as the
+object, but which prints way outside it.
+$$\begin{verbdiag}
+U&&&&&\\
+&\relax\rdTo~{(x,y)}\rdTo(4,2)^x\rdTo(2,4)_y&&&&\\
+&&X\times_Z\SEpbk Y&\relax\rTo_p&X&\\
+&&\relax\dTo^q&&\relax\dTo_f&\\
+&&Y&\relax\rTo^g&Z&
+\end{verbdiag}$$
+\vskip-6ex
+\begin{diagram}
+U \\
+ &\relax\rdTo~{(x,y)} \rdTo(4,2)^x
+ \rdTo(2,4)_y \\
+ & & X\times_Z \SEpbk Y & \rTo_p & X \\
+ & & \dTo^q & & \dTo_f \\
+ & & Y & \rTo^g & Z \\
+\end{diagram}
+
+For reverse compatibility, some commands with ``\ix{compass}''
+names are provided, such as \verb/\NW/, \verb/\WNW/, \verb/\NNNW/,
+together with dotted and other variants. However
+{\em the auxiliary file \verb/extra-diagonals.tex/ is obsolete and must
+not be used.}
+
+\label{Hasse}
+The main use of diagonals other than the simplest ones is for illustrating
+\ix{order structures} (``\ix{Hasse diagrams}'').\index{posets}\index{lattices}
+Posets are trivial categories, but in practice they're the most difficult
+diagrams to draw!
+\begin{quote}
+\begin{verbatim}
+\begin{diagram}[height=2.5em,width=1.5em,abut]
+o&&&&o&&&&o&&&&o\\
+&\luLine\luLine(10,2)&&\ruLine&&\relax\luLine(6,2)&&
+\ruLine(6,2)&&\luLine&&\ruLine\ruLine(10,2)&\\
+&&o&&&&&&&&o&
+\end{diagram}
+\end{verbatim}
+\end{quote}
+
+\begin{diagram}[height=2.5em,width=1.5em,abut]
+o&&&&o&&&&o&&&&o\\
+&\relax\luLine\luLine(10,2)&&\relax\ruLine&&\relax\luLine(6,2)&&
+\relax\ruLine(6,2)&&\relax\luLine&&\relax\ruLine\ruLine(10,2)\\
+&&o&&&&&&&&o
+\end{diagram}
+
+\ixcmd\DiagonalMap\index{lams1 to 5 fonts}\index{line10 and linew10 fonts}
+The obsolete command \verb/\DiagonalMap/ is also still supported, but should
+be replaced by the new commands. If you have used this with fonts other than
+\verb/line10/ (for example \person{Michael}{Spivak}'s fonts
+\verb/lams1/ to \verb/lams5/),
+please contact me to assist with conversion.
+
+\ixcmd\raise\ixcmd\lower\ixcmd\raisebox\index{abut}%
+By default, the diagonal arrows are set on the \ix{first pass} using
+\LaTeX\ line segments.
+By~contrast, the horizontals and verticals use ruled lines wherever possible
+and are adjusted on a \ix{second pass} of the diagram
+(within the \verb/\enddiagram/ command) to meet their endpoints.
+
+When the diagonals are set during the first pass, everything happens
+within the cell where they are declared, where the algorithm has
+no access to information about the size (and exact whereabouts)
+of the objects at which the arrows are meant to point.
+Therefore the lengths of the diagonals are chosen somewhat arbitrarily,
+though the \verb/abut/ option will make them touch a \verb/\cdot/.
+
+To get better results we have to use more sophisticated methods,
+and go outside what is strictly ``standard'' \TeX.
+
+%==========================================================================
+\section{Alternative \TeX nology}
+In order to get the best results, you should be aware of the way in which
+diagonals are constructed.
+\TeX\ is ultimately only capable of positioning characters from various fonts
+and drawing black rectangles with horizontal and vertical sides: there
+is no primitive for diagonal lines or for \ix{rotation}.\index{diagonal arrows}
+This means that we have
+\begin{itemize}\ixcmd\line\ixcmd\vector
+\item either to juxtapose characters with a limited choice of angles,
+ as \LaTeX's \verb/\line/ and \verb/\vector/ commands do,
+ with the result that (because of pixel rounding
+ errors) they may not line up correctly,
+\item or to use the loophole in the \ix{DVI} language provided by the
+ \verb/\special/ command to tell some post-processing software
+ (such as \verb/dvips/) to do the work for us, thereby surrendering
+ portability,\ixcmd\special\index{dvips}
+\item or to over-print a large number of dots, making the DVI file very
+ large since at least 12 bytes are needed for each dot.
+ This is what \PiCTeX\ does.\ixprotect\PiCTeX
+\end{itemize}
+In this package options are provided to employ the first two of these methods.
+\begin{itemize}
+\item By default, characters from \LaTeX's%
+ \footnote{The code is similar to that underlying the \LaTeX\ commands,
+ but is not the same. In particular, the line segment characters are
+ equally spaced, instead of a single overlap between the last two.}
+ \verb/line10/ font are used.\index{line10 and linew10 fonts}
+ Arrowheads from this font are used irrespectively of those chosen by the
+ \verb/heads/ option.
+ The nearest%
+ \footnote{The approximation uses \ix{continued fractions}, {\em alias\/}
+ \ix{Euclid's algorithm}, with a correction.
+ There is also code for computing \ix{Pythagorean sums} (for the lengths of
+ rotated diagonals) and \ix{trigonometric functions} (currently unused).}
+ available \LaTeX\ slope is chosen, with the effect that arrows
+ may sometimes fall short or overshoot: \verb/height/ and \verb/width/
+ should be set with this in mind.\index{height}\index{width}\index{size}
+\item If the \verb/PostScript/ option is enabled, horizontal arrows are
+ used, and \verb/\special/ commands%
+ \footnote{The code is adapted from \person{Tomas}{Rokicki}'s
+ {\tt \ix{rotate.sty}}.}
+ are embedded in the DVI file which have the effect of rotating them.
+ If the DVI file is post-processed
+ by a program which does not understand Adobe {\sc PostScript} an error
+ message will probably be generated and the arrows will appear horizontal.
+
+ Currently the labels are rotated with the arrows; later there will be an
+ option either to do this or to set them horizontally.
+
+ Literal {\sc PostScript} commands are included in the DVI file
+ using \TeX's \verb/\special/ command.
+ The various DVI to {\sc PostScript} translators (page~\pageref{PS})
+ make use of this in different ways,
+ so it is necessary to specify which one you are using.
+ I~use Tomas Rokicki's \verb/dvips/;
+ if the program you use is not listed,
+ please consult its manual for the appropriate way of including literal
+ {\sc PostScript} commands and tell me the result
+ so that I can add this as an option.
+ The rotation code should be independent of the design of the translator.
+
+ It does not and cannot work with the Oz\TeX\ {\sc PostScript} translator
+ because this sorts the characters on each page by font and cannot deal
+ with \verb/\special/ commands.\index{oztex@Oz\protect\TeX}
+\item If the \verb/TPIC/%
+ \footnote{\ix{TPIC} is a graphics preprocessor for \TeX\ by
+ \person{Tim}{Morgan} which uses this set of {\tt\string\special} commands.
+ The same ones were also adopted by \ixcmd\special
+ \person{Dirk}{Grunwald} for {\tt \ix{texpictex}} and
+ by \person{Conrad}{Kwok} for {\tt \ix{eepic}},
+ which are \LaTeX\ macro packages for \ix{graphics}.}
+ option is enabled, a simpler set of \verb/\special/
+ commands is used to draw diagonal lines, but rotation is not available.
+ \verb/dvips/ and \verb/xdvi/ understand these, but other post-processors
+ may give error messages and print nothing.\index{xdvi}\index{dvips}
+\end{itemize}
+No additional macro packages or special knowledge are needed to make use of
+these methods: all of the necessary code is built in to the diagrams package.
+
+Future versions may exploit these extensions to provide other features, such
+as curved lines; indeed this is likely to be the main direction of further
+development. Other methods may also be provided.
+However
+\begin{itemize}
+\item if no extension option is selected a standard DVI file
+ (using the \verb/line10/ font) will be always generated,
+ giving an approximation to the features requested.
+\item development of new features will use \verb/PostScript/ mode,
+ without which a ``\ix{second class service}'' will be provided.
+\end{itemize}
+
+
+
+%===========================================================================
+\section{Regular figures}
+
+The difference between these options can be seen by trying to draw a
+regular \ix{hexagon}.\label{hexagon}\index{abut}\index{tight}
+$$\begin{verbdiag}[vtrianglewidth=1em,abut,tight]
+ &&\relax{}&&\relax\rLine&&\relax{}&\\
+ &\relax\ruLine&&&&&&\relax\luLine&\\
+ \relax{}&&&&&&&&\relax{}&\\
+ &\relax\luLine&&&&&&\relax\ruLine&\\
+ &&\relax{}&&\relax\rLine&&\relax{}&
+\end{verbdiag}$$
+The \verb/PostScript/ and
+\verb/TPIC/ options will make it meet up exactly, whereas the default \LaTeX\
+method does not --- though it is surprisingly accurate!
+\begin{center}
+ \begin{diagram}[vtrianglewidth=1em,abut,tight,inline,PS]
+ &&{}&&\rLine&&{}\\
+ &\ruLine&&&&&&\luLine\\
+ {}&&&&&&&&{}\\
+ &\luLine&&&&&&\ruLine\\
+ &&{}&&\rLine&&{}
+ \end{diagram}
+ \qquad\qquad
+ \begin{diagram}[vtrianglewidth=1em,abut,tight,inline,noTPIC,noPS]
+ &&{}&&\rLine&&{}\\
+ &\ruLine&&&&&&\luLine\\
+ {}&&&&\hbox{\rm\LaTeX}&&&&{}\\
+ &\luLine&&&&&&\ruLine\\
+ &&{}&&\rLine&&{}
+ \end{diagram}
+\end{center}
+The \verb/vtrianglewidth/ option and its variants set the \verb/width/
+and \verb/height/\index{width}\index{height}\index{size} of the cells,
+but the array retains the symmetry of a rectangle.
+Tesselations of \ix{triangle}s and \ix{hexagon}s
+may be drawn in this way.
+
+Drawing a regular \ix{pentagon} requires rows and columns
+of different sizes.
+It~is envisaged that only a few special ways of doing this will
+be used, so this feature is provided by a \emph{declaration}%
+ \footnote{I cannot think of a natural way of specifying the distances
+ without coding general \ix{Gaussian elimination}.
+ I'm~quite happy to accept angles expressed in degrees.}
+of the form\ixcmd\newdiagramgrid\label{grid}
+\begin{quote}
+\begin{verbatim}
+\newdiagramgrid{pentagon}%
+ {0.618034,0.618034,1,1,1,1,0.618034,0.618034}%
+ {1.17557,1.17557,1.902113,1.902113}
+\end{verbatim}
+\end{quote}
+(In fact this is already made within the source of the package.)
+The numbers in the first list specify the distances between the centres
+of the first and second columns, the second and third, and so on,
+and similarly those in the second list the distances between the
+baselines of the rows.
+The units are the specified cell \verb/height/ and \verb/width/.
+
+Once declared, the \ix{grid} is chosen by name using the obvious option.
+Note that this forces the \verb/tight/ option.\index{tight}
+\begin{verbatim}
+\begin{verbdiag}[grid=pentagon,PostScript]
+ &&&&(A*B)*(C*D)& \\
+ &&&\ruTo(4,2)^\Assl&&\rdTo(4,2)^\Assl&\\
+ A*(B*(C*D))&&&&&&&&((A*B)*C)*D&\\
+ &\rdTo_{\Id*\Assl}&&&&&&\ruTo_{\Assl*\Id}&\\
+ &&A*((B*C)*D)&&\rTo^\Assl&&(A*(B*C))*D&
+\end{verbdiag}
+\end{verbatim}
+\begin{diagram}[grid=pentagon,small]
+ &&&&(A*B)*(C*D)& \\
+ &&&\relax\ruTo(4,2)^\Assl&&\relax\rdTo(4,2)^\Assl&\\
+ A*(B*(C*D))&&&&&&&&((A*B)*C)*D&\\
+ &\relax\rdTo_{\Id*\Assl}&&&&&&\relax\ruTo_{\Assl*\Id}&\\
+ &&A*((B*C)*D)&&\relax\rTo^\Assl&&(A*(B*C))*D&
+\end{diagram}
+A similar grid for a pentagon with a vertical side is obtained by
+the \verb/gridx/ option.
+
+The grid \verb/perspective/\index{perspective} has this effect
+on the \ix{cube} on page~\pageref{cube}:
+\begin{diagram}[grid=perspective]
+ A' & &\rTo^{f'} & & B' \\
+ & \rdTo_a & & & \vLine^{h'}& \rdTo_b \\
+\dTo^{g'} & & A & \rTo^f & \HonV & & B \\
+ & & \dTo^g & & \dTo \\
+ C' & \hLine & \VonH & \rTo^{k'} & D' & & \dTo_h \\
+ & \rdTo_c & & & & \rdTo_d \\
+ & & C & & \rTo^k & & D \\
+\end{diagram}
+Without the \verb/PostScript/\index{PostScript} option the
+\ix{diagonal arrows} will not be set correctly.
+
+
+%===========================================================================
+
+\iffalse
+\section{Bent lines --- not currently implemented}
+
+The diagonal lines in the previous section were difficult to draw and
+rather ugly. Here is a prettier way of doing it:
+\begin{verbdiag}
+U&&\relax\hLine^x&&\relax\dlBentto&\\
+&\relax\rdTo^{\langle x,y\rangle}&\\
+\vLine^y&&X\times_Z\SEpbk Y&\relax\rTo^p&X&\\
+&&\relax\dTo^q&&\relax\dTo_f\\
+\relax\ruBentto&&Y&\relax\rTo^g&Z&\\
+\end{verbdiag}
+which gives:
+\begin{diagram}
+U && \hLine^x & &
+\dlBentto \\
+& \rdTo^{\langle x,y\rangle} \\
+\vLine^y && X \times_Z \SEpbk Y & \rTo^p & X \\
+&&\dTo^q && \dTo_f \\
+\ruBentto&& Y & \rTo^g & Z \\
+\end{diagram}
+
+Notice that the bent lines consist of two separate arrow commands,
+one of them an ordinary \verb/\hLine/ or \verb/\vLine/ and the other
+a ``bent'' arrow. The latter are designed to meet orthogonal lines
+exactly. To be precise,
+\begin{itemize}
+
+\item \verb/\dlBentto/, {\em etc.}, has a corner which is vertically
+positioned on the maths axis and includes a short horizontal line to
+compensate for the space at the end of \verb/\hLine/.
+{\em It~must be placed in the cell corresponding to the corner.}
+There are similar commands \verb/\ulBentto/
+for upward maps, \verb/\drBentto/ to meet lines on the right and
+\verb/\dlBent/ without an arrowhead (and all the combinations).
+
+\item \verb/\ruBentto/, {\em etc.}, has a corner which is horizontally
+positioned in the centre of the {\em next\/} cell (assuming that's
+empty). So {\em it must be placed in the cell next to the corner,
+in fact that corresponding to the edge.} The arrow is extended
+automatically.
+Again there are commands with variant names.
+
+\end{itemize}
+
+These bent line commands are defined in exactly the same way as ordinary
+horizontal and vertical arrows, except that
+\begin{itemize}
+
+\item \verb/\dlBentto/ has only a bottom half, {\em i.e.}~the leading
+tip and first filler are \verb/\empty/. The second filler and trailing
+tip are quite ordinary but the middle is special (\verb/\ldmcorner/).
+
+\item \verb/\ruBentto/, on the other hand, is a complete arrow, the
+{\em tail\/} now being a special corner.
+
+\end{itemize}
+Other middles could be defined to give rounded corners, using \LaTeX's
+{\tt circle10} font.
+\fi
+
+
+%=========================================================================
+\section{Emulation of \TeX ercise 18.46}\label{18.46}
+\ixprotect{\TeX book}\index{Exercise 18.46}\ixprotect{\TeX ercise 18.46}%
+\index{emulation}%
+This and the next section describe how to convert diagrams in your existing
+documents which were drawn using other commutative diagram macro packages to
+use this one, wherever possible changing only the preamble or macro
+file and not the text itself.
+
+Exercise 18.46 of {\em The \TeX book\/} provided some ideas for commutative
+diagrams, from which the present package was originally developed.
+The following instructions are based on what is given there,
+but if you have added other arrow macros you will have to work out how to
+re-define them by following the examples given.
+
+\ixcmd\matrix
+If you have used the {\em\TeX book\/} macros as they stand --- with
+\verb/\matrix/ enclosing the diagram --- you will first have to distinguish
+between the diagrams and real matrices.
+(If~you give arrays of numbers to the commutative diagrams package, they
+will come out rather widely spaced.)
+This process is unnecessary if you already have a macro for diagrams
+rather than matrices: just re-define that in a similar way.
+
+In~your macro file you probably have something like what follows the
+\verb/\iffalse/ command below, but with additional macros written in
+a similar way (this is the reason for setting it all out in gory detail
+in the manual rather than providing an extra input file as in the case
+of some of the ``packages'' described in the next section).
+If~you make the following additions you will be able to revert to the
+original (in the unlikely event that you are not satisfied)
+by changing this to \verb/\iftrue/.
+
+This is not particularly difficult: when, as a \TeX\ novice, I~wrote my
+Ph.D.~thesis in August 1986, I~had sixty diagrams drawn using
+the {\it\TeX book\/}
+macros, together with several others that had to be drawn by hand.
+Recovering that from an archive tape, I~recently found that all but five
+of the sixty could be converted without any change at all to the text,
+whilst the hand-drawn ones can now be drawn with the up-to-date package.
+
+\ixcmd\mapright\ixcmd\mapleft\ixcmd\mapup\ixcmd\mapdown
+\ixcmd\inputlineno
+\begin{quote}\small
+\begin{verbatim}
+\iffalse
+ % your macros, copied or adapted from TeXercise 18.46 (page 325)
+ \def\mapright#1{\smash{\mathop{\longrightarrow}\limits^{#1}}}}
+ \def\mapdown#1{\Big\downarrow\rlap{$\vcenter{\hbox{$\scriptstyle#1$}}$}}
+ %
+ \let\cdmatrix\matrix % revert to using \matrix for diagrams
+\else
+ % Replacement for the above using ...
+ \input diagrams % Paul Taylor's diagrams.
+%
+ \def\mapright#1{\global\matrixwascdtrue\rTo^{#1}\relax}
+ \def\mapleft #1{\global\matrixwascdtrue\lTo^{#1}\relax}
+ \def\mapup #1{\global\matrixwascdtrue\uTo>{#1}\relax}
+ \def\mapdown #1{\global\matrixwascdtrue\dTo>{#1}\relax}
+%
+ % Maybe you have some variants like this:
+ \def\mapupbefore#1{\global\matrixwascdtrue\uTo<{#1}\relax}
+%
+ % The following examples may also be useful:
+ \let\into\rInto
+ \def\horizadjoint#1#2{\pile{\lTo^{#1}\\\bot\\\rTo_{#2}}}
+ \def\vertadjoint #1#2{\dTo<{#1}\dashv\uTo>{#2}}
+%
+ % Here is a replacement for \matrix which gives a commutative
+ % diagram, including some extra macros for use inside them.
+ \def\cdmatrix{\bgroup
+ \edef\matrixlineno{\the\inputlineno}\global\matrixwascdfalse
+ %
+ \let\matrix\pile % inner \matrix is probably parallel horizontals
+ %
+ % re-define the diagonal arrows
+ \let\nwarrow\luTo\let\nearrow\ruTo\let\swarrow\ldTo\let\searrow\rdTo
+ %
+ \diagram[]% begin the diagram (without options)
+ \getthematrix% delete this line if you use amstex rather than plain
+ }
+ \def\getthematrix#1{#1\endcdmatrix}
+ \newif\ifmatrixwascd
+ \def\endcdmatrix{\enddiagram\egroup}
+%
+ % The following tells you whether it was actually a diagram or
+ % a matrix. Remove this when you've changed those \matrix
+ % commands in your text which should be diagrams to \cdmatrix.
+ \def\endcdmatrix{\enddiagram\egroup
+ \expandafter\message{^^JThe \string\matrix\space at lines
+ \matrixlineno--\the\inputlineno\space was really a
+ \ifmatrixwascd diagram\else matrix\fi.^^J}}
+ \let\matrix\cdmatrix \let\endmatrix\endcdmatrix
+%
+\fi
+\end{verbatim}\end{quote}
+
+The code as shown above assumes you have \TeX\ version~3 (to provide
+\verb/\inputlineno/); it prints a \verb/\message/ to tell you whether
+each \verb/\matrix/ has used any arrow commands.
+With a clever choice of this message you can even get your editor
+to make the necessary changes to the text for you in batch mode!
+Delete the extra code after you have done this.
+
+\ixprotect\AmSTeX\index{array environment}\ixcmd\endmatrix
+Beware that \AmSTeX\space uses \verb/\matrix#1\endmatrix/ instead of
+\verb/\matrix#1/.
+In~this case, delete \verb/\getthematrix/ as indicated.
+Then (where appropriate) change \verb/\endmatrix/ as well as \verb/\matrix/.
+The same applies if you have used the \verb/array/ enviroment in \LaTeX.
+
+% \begin{itemize}
+% \item \verb/\matrix{..}/ must be changed to
+% \verb/\diagram..\enddiagram/ (or~\verb/\commdiag{..}/).
+% \item \verb/\mapright/, {\em etc.,} must be changed to (or~defined
+% as) \verb/\rTo/. Positional arguments are still recognised,
+% {\em so long as they are enclosed in braces.}
+% \item \verb/\cr/ should be changed to \verb/\\/.
+% \end{itemize}
+
+%=========================================================================
+\section{Emulation of other macro packages}\label{emulate}\index{emulation}
+There are several other \TeX\ macro packages in circulation for drawing
+commutative diagrams, of varying degrees of sophistication.
+This section describes how to adapt the preamble of an existing document
+which was written to use such macros so that it prints diagrams like those
+in this manual instead.
+When you publish documents prepared in this fashion, please remember to
+acknowledge the authors of both packages, making it clear which you used to
+type the original source and which produced the finished product.%
+\index{acknowledgement}
+
+\bigskip
+\noindent{\bf \ix{American Mathematical Society}}%
+\ixprotect\AmSTeX\ixprotect\AMSLaTeX\index{amscd.sty}
+(\AmSTeX, and \AMSLaTeX's \verb/amscd.sty/): see Michael Spivak below.
+
+\bigskip
+\noindent{\bf \person{Michael}{Barr}}'s \verb/catmac/\index{catmac.tex} macros
+were based on a principle of overlapping squares.
+Whilst this is perhaps closer conceptually to the
+ categorical ideas which are being expressed, it is not possible to emulate
+ the language using the matrix syntax. The simple shape macros can, however,
+ be replaced by
+\ixcmd\square
+\begin{quote}\begin{verbatim}
+\def\square[#1`#2`#3`#4;#5`#6`#7`#8]{%
+ \diagram[]
+ {#1} & \rTo^{#5} & {#2} \\
+ \dTo<{#6} & & \dTo>{#7} \\
+ {#3} & \rTo^{#8} & {#4}
+ \enddiagram}
+\end{verbatim}\end{quote}
+ and similarly \verb/\atriangle/, \verb/\btriangle/, \verb/\dtriangle/,
+ \verb/\ptriangle/, \verb/\qtriangle/, \verb/\Atriangle/, \verb/\Ctriangle/,
+ \verb/\Driangle/, \verb/\Vriangle/,
+ \verb/\Arianglepair/, \verb/\Vrianglepair/ and \verb/\recurse/,
+ which are easy exercises.%
+\ixcmd\atriangle\ixcmd\btriangle\ixcmd\dtriangle\ixcmd\ptriangle
+\ixcmd\qtriangle\ixcmd\Atriangle\ixcmd\Ctriangle\ixcmd\Driangle
+\ixcmd\Vriangle\ixcmd\Arianglepair\ixcmd\Vrianglepair\ixcmd\recurse
+
+\bigskip
+\noindent{\bf \person{Karl}{Berry}}'s \verb/eplain/:\index{eplain.tex}
+see Steven Smith below.
+
+\bigskip
+\noindent{\bf \person{Francis}{Borceux}}'s \verb/diagram/ package uses \LaTeX's
+ \verb/picture/ environment\index{picture environment}
+ instead of \TeX\ arrays, but since it is designed in an array fashion
+ it can be interpreted.
+ Instead of that file, use
+\begin{quote}\begin{verbatim}
+\input diagrams
+\input Borceux-to-Taylor
+\end{verbatim}\end{quote}
+ This is available from the same place as (my) \verb/diagrams.tex/ itself.
+ Currently the curved, free and multiple arrows
+ are not implemented, and all size parameters are ignored.
+
+\bigskip
+\noindent{\bf \person{Eitan}{Gurari}}'s \verb/dratex/:\index{dratex}
+I haven't looked in to this package yet.
+
+\bigskip
+\noindent{\bf Donald Knuth}'s Exercise 18.46:
+ see section~\ref{18.46} of this manual.
+
+%\bigskip
+%\noindent{\bf J\"urgen Koslowski}: I haven't looked in to this package yet.
+
+\bigskip
+\noindent{\bf \person{Frank}{Mittelbach}}'s \AMSLaTeX\space \verb/amscd.sty/:
+see Michael Spivak below.
+
+\bigskip
+\noindent{\bf \person{John}{Reynolds}}:
+I haven't looked in to this package yet.
+
+\bigskip
+\noindent{\bf \person{Kris}{Rose}}'s \XYpic\ixprotect\XYpic\
+ uses a different convention for
+ where to declare arrows, namely in the cells with their sources.
+ This convention will be supported in the next release.
+ The syntax of Rose's arrow commands is also more complicated.
+ I~do not intend to support his fonts or turning commands.
+
+\bigskip
+\noindent{\bf \person{Rainer}{Sch\"opf}}'s \AMSLaTeX\space \verb/amscd.sty/:
+see Michael Spivak below.
+
+\bigskip
+\noindent{\bf \person{Steven}{Smith}}: I haven't looked in to this package yet.
+
+\bigskip
+\noindent{\bf \person{Michael}{Spivak}}'s \LAMSTeX:\ixprotect\LAMSTeX
+similar comments apply here as to Kris Rose's package.
+
+\bigskip\noindent{\bf Michael Spivak}'s \AmSTeX\space\ixprotect\AmSTeX
+ (as described in {\em The Joy of \TeX\/})%
+ \index{joy@{\em The Joy of \protect\TeX}}
+ had some very primitive commutative diagrams,\ixcmd\CD\ixcmd\endCD
+ enclosed in \verb/\CD...\endCD/.
+ \iffalse
+ Horizontal arrows were drawn with the commands
+ \verb/@</$f$\verb/</$g$/\verb/</ or \verb/@(/$f$\verb/(/$g$/\verb/(/
+ and \verb/@>/$f$\verb/>/$g$/\verb/>/ or \verb/@)/$f$\verb/)/$g$/\verb/)/,
+ where $f$ and $g$ are the upper and lower labels.
+ Vertical arrows used
+ \verb/@A/$f$\verb/A/$g$/\verb/A/ and \verb/@V/$f$\verb/V/$g$/\verb/V/
+ where $f$ and $g$ are the left and right labels.
+ These arrows were only as long as their labels.
+ A~long equals without labels could be drawn with % ??? \verb/@-/,
+ \verb/@=/ and \verb/@|/ or \verb/@\vert/. % ?? \verb/@\|/ and \verb/@\Vert/
+ for single and double lines.
+ \fi
+
+ You can obtain a dramatic improvement in these diagrams without changing
+ the text of your document by using my package with the \verb/amstex/ option.
+ Given a (complete, correct) \AmSTeX\ document, change the header to read
+ \begin{quote}\begin{verbatim}
+ \input amstex
+ \input diagrams
+ \diagramstyle[amstex]
+ \end{verbatim}\end{quote}
+ \vskip-2ex
+ If~\AmSTeX\space or \AMSLaTeX\space (\verb/amscd.sty/) had been loaded,
+ this will replace the definitions.\ixprotect\AMSLaTeX\index{amscd.sty}
+
+ You can also include \AmSTeX\space diagrams extracted from old papers
+ in new \verb/plain/ \TeX\ or \LaTeX\ documents. In~this case,
+ do not load \AmSTeX\ (unless you want it for some other reason)
+ but instead use
+ \begin{quote}\begin{verbatim}
+ \input diagrams
+ \def\CD{\diagram[amstex]}
+ \end{verbatim}\end{quote}
+ \vskip-2ex
+ to confine the changes to the meaning of the \verb/@/ character to the
+ diagrams themselves.
+ The in-line horizontal arrows will then not be interpreted.
+
+\bigskip
+\noindent{\bf \person{Timothy}{van Zandt}}'s \verb/pstricks/:\index{pstricks}
+I haven't looked in to this package yet.
+
+%=========================================================================
+\section{Frequently asked questions}\label{faq}
+\noindent{\bf Wouldn't it be better to draw it with a mouse?} No.%
+\index{mouse}\index{wysiwyg}
+
+\bigskip\noindent{\bf How do I get it?}
+See section~\ref{get}.
+
+\bigbreak\noindent{\bf Is it compatible with ...?}\index{compatibility}
+From 1986 until after version~3 of this package was announced in July~1990
+I~used \verb/plain/ \TeX,\index{plain \protect\TeX}
+whilst giving assistance to colleagues who used \LaTeX. \ixprotect\LaTeX
+In~December 1991 the local \TeX\ system was converted to use
+\person{Frank}{Mittelbach} and \person{Rainer}{Sch\"opf}'s font selection
+(NFSS1)\index{NFSS} for \LaTeX.
+Now we use \LaTeXe\ixprotect\LaTeXe, which includes NFSS2.
+
+Consequently there is a great deal of collective experience in using the
+diagrams package in all of these environments. I~do not have experience
+of \AmSTeX, \AMSLaTeX, \verb/eplain/ or commercial \TeX\ packages, but
+do not know of any reason why it should not work with them:
+please tell me if you find any difficulties.
+
+It is, regrettably, not uncommon for publishers to copy parts of
+\LaTeX\ and {\tt\ix{article.sty}}
+into their own journal and conference styles,%
+\index{journals}\index{conference proceedings}
+and not keep these up to date with respect to bug-fixes and other changes.
+Many of the bug reports which I~receive in connection with the diagrams
+package are in fact traceable to errors of this kind in publishers' styles.
+My~policy is that I~will no longer fix bugs in software from commercial
+organisations for free, but suggest some consultancy arrangement.
+If, however, it is possible to make the package more robust and circumvent
+such bugs in other software then I~will do this.
+
+\person{Richard}{Stallman}'s \verb/texinfo/\index{texinfo.tex}
+is designed for documenting other software,
+in which \TeX's special characters often have important meanings.
+For this reason many of the \verb/\catcode/s \ixcmd\catcode
+have been changed, and in
+particular \verb/@/ is used where \TeX\ uses \verb/\/.
+The usual \TeX\ meanings are restored within \verb/@tex..\Etex/.
+It~is possible to load this package without this, but you must do
+\begin{quote}\begin{verbatim}
+@catcode`@\=0 \catcode`\%=14 \input diagrams \catcode`\%=12 \catcode`\\=13
+\end{verbatim}\end{quote}
+You must also do \verb/@catcode`@&=4/ before using \verb/@diagram/.
+Braces \verb/{}/ stay the same.
+
+Unfortunately the package does not seem to work with TeX-XeT,
+the extension to \TeX\ for typesetting Arabic and Hebrew.
+I~believe this problem is insuperable.
+
+\bigbreak\noindent{\bf Does it use any special \ix{fonts}?} No.
+One of the design
+criteria of the package is that all of the components come from the standard
+\ix{Computer Modern fonts} that come with \TeX,
+except that the diagonal arrowhead characters come from \LaTeX's
+\verb/line10/ font.\index{line10 and linew10 fonts}
+As~one user said,
+\begin{quote}
+``I agree with you in being against the use of additional fonts.
+It takes some time and experience to port, say,
+\LAMSTeX\ixprotect\LAMSTeX\space fonts to [my `personal' computer].
+I would much prefer embedded {\sc PostScript} commands.\index{PostScript}
+Custom \ix{DVI} drivers such as \verb/xdvi/,\index{xdvi} on the other hand,
+are not widely available, at least not for [my computer].''
+\end{quote}
+There are {\em optional\/} arrowheads from the \ix{AMS symbols fonts},
+which were
+\ifx\twoheadrightarrow\undefined not available\else used\fi\space
+when this copy of the manual was printed. They may be obtained by anonymous
+\ix{FTP} from \verb/e-math.ams.com/.\index{anonymous FTP}
+
+It is sometimes claimed that it is advantageous to have specially designed
+fonts in order to ensure that the components match up correctly.
+However the reason why they frequently do not is pixel-rounding,
+{\em even when the DVI-driver does this correctly according to the rules
+specified by \person{Donald}{Knuth}}.\index{pixel size}%
+ \footnote{If you don't believe me, calculate for yourself which pixels
+ are inked when a 0.4pt-wide rule is centered on the maths axis of
+ {\tt cmmi10} (2.5pt above the baseline) at 300dpi (1~point~=~4.15~pixels),
+ and compare this with characters such as $\greaterthan$ in the output of
+ {\tt gftype -i cmmi10.300gf}. The character $\succ$ in {\tt cmsy} is
+ one pixel lower than this.}
+The \verb/dpi/ option has been included to correct for this.\index{dpi}
+
+If you have other arrowhead fonts available, such as those provided by
+\person{Kris}{Rose} for \XYpic\ixprotect\XYpic\
+and \person{Michael}{Spivak} for \LAMSTeX,\ixprotect\LAMSTeX\
+you may use them if you write your own \verb/\newarrowhead/ commands.%
+\ixcmd\newarrowhead
+
+\bigbreak\noindent{\bf Corruption by \ix{electronic mail}.}\index{corruption}
+If you cannot use FTP and the route to you by electronic mail passes
+through non-\ix{ASCII} machines (such as through \ix{BITNET}),
+the file may suffer corruption.\index{EBCDIC}
+This doesn't matter very much with the manual, but the macro
+package itself has a list of characters at the top, and use of most of those
+which experience has shown to be vulnerable has been confined to the first
+section, wherever possible. Search for the word ASCII if in doubt.
+
+\bigbreak\noindent{\bf \TeX\ capacity exceeded.}
+\TeX\ was designed in the early 1980s, when RAM was measured in kilobytes,
+and does not have \ix{dynamic memory allocation}.
+Although \verb/tex.web/\index{tex.web}
+says loudly ``Don't Touch!'', the compile-time
+parameters listed on page 300 of {\it The \TeX book\/} {\em are\/} meant to be
+changeable, and \person{Donald}{Knuth} provided a mechanism
+(\verb/tex.ch/) for doing so.
+\person{Karl}{Berry}'s widely used \verb/web-to-C/\index{web-to-C}
+{\sc Unix}\index{Unix} port of \TeX\
+increases them substantially --- in accordance with the \ix{RAM} available in
+1990s hardware and that needed by 1990s software. There is nothing
+{\sc Unix}-specific about these changes: they can just as well be made in
+any other compilation environment.
+Currently it seems Oz\TeX\index{oztex@Oz\protect\TeX} has not made
+the changes --- please complain about this to its author,
+\person{Andrew}{Trevorrow}, not~me.
+
+The increase in size over version~3 is largely due to the diagnostics,
+{\em i.e.} helping you to use the package!\index{error recovery}
+
+If you get ``no room for another \verb/\dimen/'' \ixcmd\dimen
+it probably means you're using \PiCTeX\ixprotect\PiCTeX,
+which uses 110 out of the available~256; I~use~20.
+
+The process of stretching the arrows in a completed diagram is quite slow,
+but at least in this package \TeX\ spends the time doing something useful
+rather than parsing (\LaTeX\ \verb/picture/)\index{picture environment}
+\verb/\put/ commands inside macros.
+The emulation of \person{Francis}{Borceux}'s macros, for instance,
+is 50\% faster than the original.
+\person{Kris}{Rose}'s \XYpic\ixprotect\XYpic\ takes about six times
+as long to draw the same diagram.
+
+\bigbreak\noindent{\bf Default \ix{arrowheads}.} Even when you define your own
+arrows with special arrowheads, you still get get \LaTeX\ heads on diagonals.
+This is because \LaTeX\ heads are available in a variety of directions,
+but your special ones are only defined for up, down, left and right.
+To~get special heads on diagonals, it is necessary to rotate them, and to
+do that you need the \verb/PostScript/ option.%
+\index{diagonal arrows}\index{PostScript}
+
+\bigbreak\noindent{\bf Display options.} If, as was advised in earlier versions
+of this manual, you enclose the diagram in \verb/$$...$$/\ixcmd{$$}
+or a \index{displaymath environment},
+the new \ix{options} in section~\ref{options} for positioning it cannot work.
+Except in those cases where you want two or more diagrams side by side,
+or a small diagram in-line in the text, it is better to remove such
+enclosings; then you can experiment with the options using
+\verb/\diagramstyle/. \ixcmd\diagramstyle
+\LaTeX's \verb/center/ environment is,\index{center environment}
+for this purpose, {\em not\/} a display but a paragraph of text,
+with some strange results if you use the \verb/textflow/ option;%
+\index{text flow}
+in this case you should use the \verb/inline/ option\index{in line}
+on the individual diagrams to make them appear side by side.
+
+\bigskip\noindent{\bf Large \ix{gaps} between diagonals and their endpoints.}
+\index{PostScript}\index{diagonal arrows}
+This happens if you try to use the default \verb/LaTeX/ line segments
+to draw very steep or very shallow diagonals.
+Try using the \verb/PostScript/ option.
+
+By~default, the (rows and) columns of the matrix forming the diagram can
+\ix{stretch} to accommodate long pieces of text as objects and arrow labels.
+This is appropriate for rectangular diagrams and requires no user intervention.
+If,~however, you have diagonals, this stretching causes them to fall short of
+the objects to which they are meant to point, because currently they are
+(unlike the horizontals and verticals) rigid.
+\message{A message about "badly drawn diagonals" follows. It is deliberate.}%
+
+\vskip-5ex
+\begin{diagram}[loose,size=3em,notextflow,heads=LaTeX,noPS]
+ A & \rTo^{\lessthan 1_A,0_A\greaterthan} & A\times N\\
+ & \rdTo[fixed]_f&\dDotsto>h\\
+ &&B
+\end{diagram}
+An example provided by a user is shown. The solution is to use options like
+\begin{quote}
+ \verb/\begin{diagram}[tight,width=4em,height=3em]/
+\end{quote}
+See section~\ref{options} for details.\index{tight}
+Sometimes there isn't room on the page to increase the width sufficiently.
+Try using the \verb/scriptlabels/ option, or, failing that, put the whole
+diagram in the scope of a \LaTeX\ \verb/\small/ or even \verb/\tiny/
+declaration.\ixcmd\small\ixcmd\tiny
+
+This real-life example illustrates another common problem: the symbols
+$\lessthan$ and $\greaterthan$ are {\em \ix{relations}\/}
+$\langle$not~brackets$\rangle$ --- and it's not unusual to see line-breaks
+the wrong side of them, even in published, supposedly proof-read, books.
+If~you don't often use the strict arithmetical relations and find it a bore
+to type \verb/\langle..\rangle/, put the following in your macro file:%
+\ixcmd\langle\ixcmd\rangle\ixcmd{<}\ixcmd{>}\ixcmd\mathcode
+\ixcmd\mathchardef
+\begin{quote}\begin{verbatim}
+\mathcode`\<="4268 % < = \langle
+\mathcode`\>="5269 % > = \rangle
+\mathchardef\gt="313E % arithmetic
+\mathchardef\lt="313C % strict order
+\end{verbatim}\end{quote}
+\ixcmd\mbox
+As another piece of general advice, many people use \verb/\mbox/ when it is
+completely unnecessary. Amongst other things, it inhibits the reduction of
+the contents when used as a sub- or superscript.
+In~\LaTeXe, try using the \verb/\text/\ixcmd\text\ and
+\verb/\ensuremath/\ixcmd\ensuremath\ commands.
+
+%\bigskip\noindent{\bf Diagonals overprint or don't quite meet their
+%endpoints.} I'm~sorry about this: it's because I~haven't got round to writing
+%the code to stretch the diagonals in the same way as the horizontals and
+%verticals. This will be done in the next release, because I~need it for my
+%book.
+%
+%In~the case of poset diagrams, the \verb/[tight,abut]/ options should work
+%satisfactorily.
+
+\bigskip\noindent{\bf ``Badly drawn diagonals'' error message.}%
+\index{badly drawn diagonals}\index{diagonal arrows}
+This warning is given if (a)~you use diagonals which are set on the first
+pass ({\em i.e.}~\LaTeX, \ix{TPIC} or \verb/fixed/\index{fixed}) {\em and\/}
+(b)~some of the columns are significantly wider than was specified by
+the \verb/width/ or \verb/size/ option.\index{width}\index{size}
+It~indicates that the problem above, with big gaps at the ends of diagonals,
+may have occurred.
+Check this, and if necessary set the \verb/tight/ option and specify the
+necessary (increased) \verb/width/ yourself.
+Alternatively, use the \verb/PostScript/ option to get the diagonals
+set on the second pass; then they will meet their endpoints.%
+\index{PostScript}\index{width}\index{size}
+
+\bigskip\noindent{\bf Labels on arrows \ix{over-print} objects or
+\ix{arrowheads} become detached.}\index{labels}\index{decapitated arrows}
+You're trying to squeeze too much into the column: increase
+\verb/width/ (as it tells you to do). If~the object at one end is much
+longer than that at the other, the \verb/midshaft/ option may be appropriate.%
+\index{midshaft}\index{width}\index{size}
+
+\bigskip\noindent{\bf Mixed or missing \ix{arrowheads}.}
+The idea of providing the \verb/heads/\index{heads} option
+is that you should specify at the beginning of your
+document which style you want. The default is \verb/heads=LaTeX/ since this
+provides consistency between orthogonal and diagonal arrowheads when rotation
+is not available.
+
+\bigskip\noindent{\bf Undefined symbols.}%
+\index{undefined control sequence} To~use the curly and black
+arrowheads you need the \ix{AMS symbols fonts};
+if one of these (\verb/\curlyvee/, \verb/\blacktriangleleft/)%
+\ixcmd\curlyvee\ixcmd\blacktriangleleft\ is undefined,
+hit return several times to complete
+the run of \TeX\ on your document, then go back and insert
+ \ifx\usepackage\undefined
+ \verb/\input mssymb/
+ \else
+ \verb/\usepackage{amssymb}/
+ \fi
+or change the heads declaration.\index{amssymb.sty}
+
+If~you find a symbol with a \ix{meaningless name} like \verb/\CD@gF/
+\ixcmd{\CD@gF} or
+\verb/\cD@hA/ is undefined, it means that you have used internal macros
+from a previous version of the diagrams package. Please remove them:
+the names are deliberately meaningless to persuade you not to use them.
+
+\bigbreak\noindent{\bf Can you put \ix{diagrams within diagrams}?}%
+\index{nested diagrams}\ixcmd\pile\index{parallel arrows}
+Yes, but it's not often that such things are needed. Remember that
+\verb/\pile/ is used for parallel horizontals. Sometimes you may want an
+array of diagrams.
+
+During development I~found problems when the first cell of the inner
+diagram was empty, and version 3.22 resulted in \TeX's elusive
+``\ix{interwoven alignment preambles} are not allowed'' error
+({\it The \TeX book}, page 299).\ixprotect{\TeX book}
+Although I believe these bugs have now been fixed, this is a delicate area
+and it is possible that others may arise.
+
+\bigskip\noindent{\bf \verb/Missing \endcsname inserted./}\label{miss endcs}
+\index{missing \protect\verb/\endcsname/}\ixcmd\endcsname\ixcmd\the
+This can happen if a macro occurs within an option [in~square brackets].
+In~general you must ensure that such macros expand to text characters only.
+For example in \LaTeXe:\ixprotect\LaTeXe\ixcmd\usepackage
+\begin{quote}
+ \verb/\usepackage[flushleft=\mainindent]{diagrams}/
+\end{quote}
+where \verb/\mainindent/ is a \verb/\dimen/;
+in this case \verb/\the\mainindent/ will work,
+because \verb/\the/ expands the \verb/\dimen/ to its value
+({\it\TeX book}, page 214).
+Values for options to individual diagrams and arrows, or parsed by
+\verb/\diagramstyle/ instead of \verb/\usepackage/, may safely contain
+macros where appropriate.
+
+\bigskip\noindent{\bf Horizontal arrows \ix{overprint} objects.}
+\index{horizontal arrows}\ixcmd\hfill\ixcmd\hss\ixcmd\hspace\ixcmd\hidewidth
+You must not use \verb/\hfill/, \verb/\hss/, \verb/\hspace/,
+\verb/\hidewidth/ or other similar commands to try to
+alter the effective size of the object.
+
+\index{bug reports}
+\bigskip\noindent{\bf What if it still doesn't work?} If you have a problem
+which is not answered by this manual, please compile a {\em short\/} file
+containing your problem diagram and any macros (such as \verb/\Assl/ in
+section~\ref{typing}) it contains. Run it through \verb/tex/ or \verb/latex/
+to check that no definitions are missing, and include a note of the date
+and version number which you are using. Then send it by {\em electronic\/}
+mail: please do not use the telephone or postal mail.
+
+\ixcmd\scrollmode\index{error recovery}
+I am keen to know about any adverse interactions with other software,
+anything which is not well explained in this manual, or any cases of
+mis-typing in which \verb/\scrollmode/ does not get to the end of the
+document because of a diagrams error.
+
+% automatic floats
+% picture-mode inserts for braids, etc
+
+%=========================================================================
+\section{Conditions of use}\index{conditions of use}\index{copyright}
+You may freely copy and pass on this package and include it in collections
+of free software, but may not alter it or charge a fee for it.
+
+\index{registration as a user}
+Please ensure that you are registered with me as a user, so that you can be
+informed of new versions. Any \ix{electronic mail} message containing the words
+``commutative'' or ``diagram'' automatically registers you, as does quoting
+your electronic mail address when fetching it by~\ix{FTP} from
+\verb/ftp.dcs.qmw.ac.uk/.
+
+\index{acknowledgement}
+If you consider this package good enough to use, then it is good enough to
+acknowledge. After all, it is academic protocol to credit prior or
+simultaneous discovery of techniques related to your own, even if you were
+unaware of them or did not rely on them when you made your own discovery.
+Such acknowledgement is a condition of use of this package.
+However this condition is waived if use amounts to no more than five diagrams,
+each of which is either a square or a triangle.
+This acknowledgement must, of course, be removed if the document is re-typeset
+by methods which do not use this package.
+
+No permission was in the past given to use this package for
+commercial purposes.\index{commercial use}
+This includes a document whose copyright is seded by the author (for valuable
+consideration or not) to another person or body which subsequently intends to
+collect \ix{royalties} for its reproduction.
+This applies to certain journals and conference proceedings.
+Permission is now granted for its use for the production of academic
+research and \ix{textbooks}, \ix{journals} and \ix{conference proceedings},
+subject to the conditions that
+\begin{itemize}
+\item acknowledgement be given as above,
+\item an up-to-date version of the package be used for the final production,
+\item and one copy of the book be sent to me on publication in lieu of royalty,
+ at the above address.
+\end{itemize}
+Use by commercial organisations is considered (for this purpose) to be
+academic if the results are intended for publication in an academic forum,
+concern pure research and do not relate to any particular commercial product.
+
+The software may not be used for any military purpose under any circumstances.%
+\index{military use}
+
+No \ix{warranty} is given with this software.
+It is supplied ``\ix{as is}'', and neither the source nor this manual
+nor anything else shall be taken as a \ix{representation}
+that it will perform any particular function, is suitable for any particular
+purpose or is of \ix{merchantable quality}.
+In executing the software, the user implicitly accepts the above conditions
+and indemnifies\index{indemnification} the author,
+\ix{Queen Mary and Westfield College}
+and any person through whom the software was obtained, against
+\ix{liability} for direct or consequential \ix{damages}
+arising from the use of this software.
+
+{\em Whenever\/} you use computers you {\em must\/} keep at least two
+back-up copies of all of your files, with one of them well away from the
+machine, in case of fire or major failure.
+Before sending any documents for publication or to an expendive printer
+make a thorough visual check using a previewer such as \verb/xdvi/\index{xdvi}
+and a low resolution printer.
+
+%=========================================================================
+\section{Reverse compatibility}\index{compatibility}
+Compatibility with past and future versions (the numbers of some of which have
+been assigned {\em post facto\/}) is as follows. Note the difference between
+``should'' and ``must''.
+
+\begin{description}
+\item[Version 0:] See section~\ref{18.46}.
+\item[Version 1:] Horizontal arrows made to stretch to edge of cell; 1987--9.
+ \begin{itemize}
+ \item \verb/\rTo{f}{g}/ works, but \verb/\rTo f g/ doesn't: it must
+ be changed to \verb/\rTo^f_g/.
+ \item the \verb/\mkern-20mu\rTo{f}{g}\mkern-20mu/ idiom for manual
+ stretching of horizontal arrows to meet objects must be
+ removed.\ixcmd\mkern
+ \item \verb/\VerticalMapHeight/ and \verb/\VerticalMapDepth/ commands
+ are obsolete and are ignored: they should be removed.%
+ \ixcmd\VerticalMapHeight\ixcmd\VerticalMapDepth
+ \item Three- or four-argument uses of \verb/\HorizontalMap/,
+ \verb/\VerticalMap/ and \verb/\DiagonalMap/ must be
+ changed to five-argument uses or, preferably, to
+ \verb/\newarrow/.%
+ \ixcmd\HorizontalMap\ixcmd\VerticalMap\ixcmd\DiagonalMap
+ \item Nested \verb/\commdiag/ commands for parallel maps must be
+ changed to \verb/\pile/.\ixcmd\commdiag\ixcmd\pile
+ \index{nested diagrams}\index{parallel arrows}
+ \item Parallel maps constructed by putting them in the rows or columns
+ before and after must be moved to the correct cell and
+ (in the case of horizontals) put in a \verb/\pile/.
+ \end{itemize}
+\item[Version 2:] Horizontal arrows made to stretch to meet objects and
+``\ix{superscript}'' labels introduced; versions with banners
+dated September to December 1989.
+ \begin{itemize}
+ \item \verb/&\rTo\across3&/ now works more accurately than in
+ version~3, but should be changed to \verb/&&\rTo&&/.%
+ \ixcmd\across
+ \item {\raggedright The parameters \verb/\HorizontalMapLength/,
+ \verb/\VerticalMapHeight/, \verb/\VerticalMapDepth/,
+ \verb/\VerticalMapExtraHeight/, \verb/\VerticalMapExtraDepth/
+ and \verb/\DiagonalLineSegments/ are obsolete and are ignored:
+ they should be removed.\par}%
+ \ixcmd\HorizontalMapLength\ixcmd\VerticalMapHeight
+ \ixcmd\VerticalMapExtraDepth\ixcmd\DiagonalLineSegments
+ \ixcmd\VerticalMapDepth\ixcmd\VerticalMapExtraHeight
+ \item The \ix{labels} on southeast and northwest \ix{diagonal arrows}
+ have changed their position.
+ \verb/^/~and \verb/_/\ixcmd{^}\ixcmd{_} previously meant
+ left and right respectively for diagonals; they now mean ---
+ more logically --- above and below; \verb/</ and \verb/>/ are
+ used for left and right, respectively. Unqualified labels
+ are positioned as they originally were: the first above and
+ the second below.
+ \item Diagonal lines are constructed differently; user-defined
+ \ix{diagonal arrows} should be replaced with \verb/\ruTo(2,4)/
+ {\em etc.,} and explicit movement of them removed.
+ \item Bent lines, with \verb/\dlBent/ and \verb/\ruBentto/, currently
+ do not work. Instead \verb/\HmeetV/ must be
+ placed at the corner. Bent or half arrows will be reintroduced
+ later but with a different naming convention.%
+ \index{bent lines}\ixcmd\dlBent\ixcmd\ruBentto\ixcmd\HmeetV
+ \end{itemize}
+\item[Version 3:] Vertical maps also made to stretch to meet objects; widely
+circulated with banners dated July 1990 to April 1992.
+ \begin{itemize}
+ \item \verb/\HorizontalMap/, \verb/\VerticalMap/ and
+ \verb/\DiagonalMap/ should be replaced by \verb/\newarrow/
+ declarations.%
+ \ixcmd\HorizontalMap\ixcmd\VerticalMap\ixcmd\DiagonalMap
+ \item Negative spacing around \ix{wide objects} (used to avoid the
+ stretching of the diagram which they caused) should be
+ removed, and the \verb/tight/ option used instead.
+ This is because objects are now allowed to extend into the
+ neighbouring columns, with a check that there is enough space.
+ \item Enclosing \verb/$$...$$/ or display environments should be
+ removed, as they prevent the new display positioning options
+ from working.\ixcmd{$$}\index{display options}
+ \item Diagonal arrows with ``\ix{compass}'' names,
+ particularly the ones from \verb/extra-diagonals.tex/
+ \index{extra-diagonals.tex}\index{diagonal arrows}
+ (which must not be used any more),
+ should be changed to the new geometrical names.
+ \item The command names \verb/\lt/ and \verb/\gt/ (for $\lessthan$ and
+ $\greaterthan$) have been removed, at the request of a user
+ who considered these to be unreasonable names for internal
+ commands.\ixcmd\lt\ixcmd\gt\ixcmd{>}\ixcmd{<}%
+ \ixcmd\greaterthan\ixcmd\lessthan
+ \item The arrow commands with names like \verb/\rArr/ and \verb/\rTo/
+ now all use the default \ix{arrowheads}; the original behaviour
+ (\verb/\rArr/ used \verb/LaTeX/ and \verb/\rTo/ used \verb/vee/)
+ may be restored by changing a switch \verb/\iffalse/ in the
+ final section of the source.\ixcmd\rArr\index{vee arrowheads}%
+ \ixprotect{\LaTeX\ arrowheads}
+ \end{itemize}
+\item[Version 4:] Advertised in September 1992.
+ \begin{itemize}
+ \item The default arrowhead has been changed from \verb/vee/ to
+ \verb/LaTeX/ to ensure consistency if \verb/PostScript/
+ is not used.\index{arrowheads}
+ \item Explicit movement of \ix{diagonal arrows} vertically using
+ \verb/\raise/, \verb/\lower/ or \verb/\raisebox/
+ \ixcmd\raise\ixcmd\lower\ixcmd\raisebox
+ or horizontally by spacing commands or otherwise
+ will not work for the diagonals which are adjusted to meet
+ their endpoints.\index{stretch}
+ For the time being use either of the options
+ \verb/noPS/ or \verb/fixed/\index{PostScript}\index{fixed}
+ to suppress adjustment.
+ A~new option \verb/crab/\index{crab} will be introduced
+ shortly to allow \ix{sideways movement of arrows}.
+ \end{itemize}
+\item[Future:] The following are high on the agenda:
+ \begin{itemize}
+ \item Placing of labels at the head and tail of arrows.
+ \item Curved arrows (\verb/PostScript/ only).
+ \item Sideways movement of arrows.
+ \item An~alternative way of specifying the positions of arrows,
+ namely at the tail with signed relative co-ordinates for
+ the head, to allow emulation of
+ \person{Kris}{Rose}'s \XYpic\ixprotect\XYpic\ and
+ \person{Michael}{Spivak}'s \LAMSTeX\ixprotect\LAMSTeX.
+ \item Shifting objects, by specifying the left or right width.
+ \item Option to rotate labels on diagonals or leave them horizontal.
+ \item Application to electronic circuit diagrams.
+ \end{itemize}
+\end{description}
+
+Suggestions for improvements and further applications ({\em e.g.\/} proof nets,
+Petri nets and circuit diagrams) are welcome.
+
+%==========================================================================
+
+\section{Availability}\label{get}
+
+
+The diagram package is currently available as a single
+112kb\footnote{Without comments; the development version is about 300kb.}
+printable \TeX\ source file which is compatible with both \LaTeX\
+and {\tt plain} \TeX. It loads the \LaTeX\ {\tt line10} font as \verb/\tenln/
+(its \LaTeX\ name) and also defines some (exotic) arrow commands in terms
+the AMS symbols, but if these are to be used then the
+ \ifx\usepackage\undefined
+ file \verb/mssymb/
+ \else
+ package \verb/amssymb/
+ \fi
+must be loaded separately.
+
+\index{anonymous FTP}
+It~is easiest to get this package by anonymous \ix{FTP}.
+This stands for ``\ix{file transfer protocol}'';
+it is a way in which you can log on interactively to my computer and fetch
+(some of) my files. A~very large amount of software is now freely available
+by this method, so it is well worth putting pressure on your system
+administrator to get your machines connected.
+
+The authoritative version of the package may be found at the FTP address
+\begin{quote}
+{\tt ftp://ftp.dcs.qmw.ac.uk/pub/tex/contrib/pt/diagrams}
+\end{quote}
+It may also be obtained from the \ix{Comprehensive \TeX\ Archive Network}
+(\ix{CTAN)} at any of the sites
+\begin{quote}
+ \begin{tabular}{llll}
+ ftp.adfa.oz.au &Australia& /pub/tex/ctan\\
+ ftp.cs.rmit.edu.au &Australia& /tex-archive\\
+ ftp.muni.cz &Czech Republic& /pub/tex/CTAN\\
+ ftp.tex.ac.uk &England& /tex-archive\\% (/pub/tex /pub/archive)\\
+ ftp.loria.fr &France& /pub/unix/tex/ctan\\
+ ftp.uni-bielefeld.de &Germany& /pub/tex\\
+ ftp.uni-stuttgart.de &Germany& /tex-archive (/pub/tex)\\
+ ftp.dante.de &Germany& /tex-archive\\% (/pub/tex /pub/archive)\\
+ ftp.center.osaka-u.ac.jp &Japan& /CTAN\\
+ wuarchive.wustl.edu &Missouri, USA& /packages/TeX\\
+ ftp.cs.ruu.nl &Netherlands& /pub/tex-archive\\
+ ftp.duke.edu &North Carolina, USA& /tex-archive\\
+ sunsite.unc.edu &North Carolina, USA& /pub/packages/TeX\\
+ ftpserver.nus.sg &Singapore& /pub/zi/TeX\\
+ nic.switch.ch &Switzerland& /mirror/tex\\
+ dongpo.math.ncu.edu.tw &Taiwan& /tex-archive\\
+ ftp.uu.net &Virginia, USA& /pub/text-processing/TeX\\
+ ftp.shsu.edu &Texas, USA& /tex-archive\\% (/pub/tex /pub/archive)\\
+ \end{tabular}
+\end{quote}
+where the root of the archive is the given directory and my package is
+\begin{quote}
+ {\tt macros/generic/diagrams/Taylor/diagrams.tex}
+\end{quote}
+relative to this.
+
+The ``\verb/archie/''\index{archie} utility is extremely useful as a way
+of locating software and other information on the \ix{Internet}.
+You just give it (part of) the name of the file you want
+({\em e.g.}~``diagram'') and it will tell you where files of that name
+are located in numerous public \ix{FTP} archives around the world.
+Beware, however, that many of them are just ``\ix{magpies' nests}'' ---
+they collect things from other places without verifying their
+authenticity or keeping them up to date.\index{anonymous FTP}
+
+If you are unable to use FTP it is possible to get the package
+(and indeed anything you can get by ftp) by electronic mail.
+I~do not recommend this method, because it is susceptible to
+corruption, and you have to concatenate the files and remove the
+mail headers. Send the following message to
+\verb/<ftpmail@doc.ic.ac.uk>/:
+\begin{quote}
+\begin{verbatim}
+open ftp.dcs.qmw.ac.uk
+cd pub/tex/pt/diagrams
+get diagrams-V4-news
+get diagrams.tex
+get diagrams-manual.tex
+quit
+\end{verbatim}
+\end{quote}
+You will get an acknowledgement message first, followed by the files,
+and finally a job log file.
+The files may be split up into several messages.
+%in which case the \verb/Subject:/
+%lines will begin \verb/[part /$n$\verb/ of /$m$\verb/]/.
+%
+\iffalse Other availability information will be added later, after checking.
+Also available from
+archive.cs.ruu.nl [131.211.80.17] /pub/TEX/DIAGRAM/diagrams.tex
+%
+Other \TeX\ FTP sources:
+e-math.ams.com [130.44.1.100] for AMS symbols and AMS-\LaTeX.
+ftp.cs.umb.edu [192.12.26.23] for Karl Berry's web-to-C \TeX\ port.
+\fi
+
+\makeatletter\pt@input{manual.ind}{}{}
+%============================================================================
+\end{document}
+
+% Ideas for future editions of this manual:
+
+% Use bezier.sty and the origin option in a picture environment to draw
+% braids on top of a diagram - Robert Seely had an example.
+
+% I haven't composed the example yet.
+%\newif\ifHaveBezier\HaveBeziertrue
+%\pt@input{bezier.sty}%
+%{^^JYou don't have bezier.sty. That's a pity, because I wanted to show you an
+%^^Jexample of drawing curved lines on top of a diagram. We'll do without it.}%
+%\HaveBezierfalse
+
+% Use \matrix or array environment to put long objects on two lines within
+% a diagram. LFPP.tex has a suitable example.
+
+% Commutative diagram of posets. Example in my thesis (fig 2.2.13) (5.2.2)
+
+% new sections:
+% other TeX macros of mine
+% resource usage
+% list of errors
+% how to draw {\em nice\/} diagrams
+
+% FTP instructions \ No newline at end of file
diff --git a/macros/generic/diagrams/taylor/msg1992.html b/macros/generic/diagrams/taylor/msg1992.html
new file mode 100644
index 0000000000..14158b7260
--- /dev/null
+++ b/macros/generic/diagrams/taylor/msg1992.html
@@ -0,0 +1,236 @@
+
+
+
+
+
+
+
+
+<title> Commutative Diagrams in TeX</title>
+
+<h1 align="center">Commutative Diagrams in TeX </h1>
+
+<h3 align="center">Paul Taylor </h3>
+
+<h3 align="center">September 1992 </h3>
+
+
+
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+
+<div class="p"><!----></div>
+
+
+
+
+
+
+<div class="p"><!----></div>
+
+<div class="p"><!----></div>
+
+
+
+<div class="p"><!----></div>
+
+
+
+<div class="p"><!----></div>
+
+
+<div class="p"><!----></div>
+
+
+
+<div class="p"><!----></div>
+
+
+
+
+
+
+<div class="p"><!----></div>
+
+
+<div class="p"><!----></div>
+
+
+<h2>Message sent to registered users in September 1992</h2>
+
+<div class="p"><!----></div>
+This message brings news of the development of my <span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>&nbsp;package for
+drawing "commutative" diagrams, which is now widely used in the
+category theory and theoretical computer science communities. It is
+being sent directly to all of the users I know of (who have requested
+it by electronic mail or FTP from me, or asked questions about it),
+but as I know the package has been passed on, I would be grateful if
+you would <em>copy this message to anyone to whom you have given
+ the package itself.</em>
+
+<div class="p"><!----></div>
+The package was originally advertised on the "types" and
+"categories" electronic mailing lists in July 1990. In the following
+eighteen months some fixing of bugs took place, but there was little
+substantial change.
+
+<div class="p"><!----></div>
+Since April 1992, I have re-written most of the code, largely with a
+view to improving the geometrical layout of the diagrams. Before
+completing this work and calling it version 4, I would like some
+feedback from users.
+
+<div class="p"><!----></div>
+One of the areas which I have neglected in the past (largely because
+<span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>&nbsp;makes it so difficult) is diagonal arrows. The code for drawing
+these using <span class="roman">L</span><sup><span class="roman">A</span></sup><span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>&nbsp;line segments has been re-written: now the closest
+available slope is chosen automatically and the commands have names
+similar to the horizontals and verticals.
+
+<div class="p"><!----></div>
+However to do a better job of diagonals (and in future to support
+curved lines) some extension to <span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>&nbsp;is needed. Being extensions they
+are necessarily not standard. Three possibilities are:
+
+<ul>
+<li> additional fonts (as, for example, used by Spivak's Lamstex).
+ However my experience of design-size fonts and linear logic symbols
+ suggests that for users without expert knowledge or control of their
+ local <span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>&nbsp;systems this is more trouble than it's worth.
+<div class="p"><!----></div>
+</li>
+
+<li> PostScript is, I believe, now almost universally used as the
+ language in which <span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>&nbsp;documents are sent to a printer. PS commands
+ can be embedded in DVI files and incorporated in the PS translation
+ without extra system or user files or any user intervention. This is
+ to some extent dependent on which DVI<font face="symbol">®</font
+>PS translator is used. In
+ the new version this is exploited in an option to implement
+ diagonals by rotating horizontals, which works with Tomas Rokicki's
+ "dvips".
+<div class="p"><!----></div>
+</li>
+
+<li> TPIC is a graphics extension of <span class="roman">T</span><sub><span class="roman">E</span></sub><span class="roman">X</span>&nbsp;which uses a simpler set
+ of embedded commands. These can be used to draw diagonal lines and
+ curves but not to perform rotations; they are, however, understood
+ by Vojta's "xdvi" as well. Another option in the new version uses
+ these to draw diagonal lines.
+<div class="p"><!----></div>
+</li>
+</ul>
+Besides diagonals, the code for adjusting horizontal and vertical
+arrows has been completely rewritten and does a much better job of the
+geometry. Many of the problems with alignment, positioning and gaps
+have been fixed automatically, and greater control is given to the
+user to adjust those which cannot be. There are also several new
+options for the placement of the finished diagram on the page.
+
+<div class="p"><!----></div>
+Arrow commands are now declared in a much simpler way. The declaration
+
+<pre>
+&nbsp;\newarrow{CrossedInto}{hook}-+-&#62;
+
+</pre>
+is now all that is needed to define the example <tt>\rCrossedInto</tt>
+in the manual, along with the corresponding left, down, up and
+diagonal commands. Another option makes a consistent selection of
+arrowheads for all arrows, from a choice of vee, LaTeX, curlyvee,
+triangle and blacktriangle.
+
+<div class="p"><!----></div>
+So much for selling you the new version. The reason for mailing you
+and asking for comments before completing what I intend to do for
+version 4 is that I want to get feedback on the following questions:
+
+<div class="p"><!----></div>
+
+<ul>
+<li> Can you use FTP (file transfer protocol)? This is the easiest
+ method of distribution for me and for you, and there is now a huge
+ volume of public domain software available by this method. My
+ archive is called <tt>ftp.dcs.qmw.ac.uk</tt>
+ and the diagrams package is in the directory /pub/tex/contrib/pt/diagrams.
+ Please try to fetch the new version and manual by this method.
+<div class="p"><!----></div>
+</li>
+
+<li> If you can't use FTP, and your electronic mail passes via
+ non-ASCII machines (particularly BITNET), what characters tend to
+ get corrupted? The new version uses a restricted character set to
+ avoid this problem.
+<div class="p"><!----></div>
+</li>
+
+<li> Do you have available for printing final copy a printer which
+ understands Adobe PostScript, for example an Apple or Sun
+ laserwriter? Who is the author of the DVI-&#62; PS translation program
+ you use? Please fetch the new version, try the PostScript option and
+ tell me if you have any difficulty printing. (You may have to change
+ the <tt>\verbatim@ps@special</tt> macro if you don't use Rokicki's
+ dvips: if so, please send me details.) You can preview with a PS
+ previewer such as PageView under OpenWindows or
+ GhostView/GhostScript under Xwindows.
+<div class="p"><!----></div>
+</li>
+
+<li> Do your DVI translators and previewers understand TPIC
+ <tt>\special</tt>s (as used in eepic.sty)? Please try the TPIC
+ option. I would like to know whether it is worth putting effort into
+ PostScript, TPIC or some other method.
+<div class="p"><!----></div>
+</li>
+
+<li> Have you defined your own arrow commands using
+ <tt>\HorizontalMap</tt>, <tt>\VerticalMap</tt> or <tt>\DiagonalMap</tt>?
+ Please use "grep alMap *.tex *.sty" or some similar command to
+ find out, and tell me if you have used any components other than
+ those in the source of version&nbsp;3. It is in your interests to do
+ this, because <tt>\newarrow</tt> defines arrow commands in a
+ different way.
+<div class="p"><!----></div>
+</li>
+
+<li> Please tell me if you have any difficulty adapting to the new
+ version, or any general comments about doing so which might be of
+ benefit to other users.
+<div class="p"><!----></div>
+</li>
+
+<li> Other comments: have you used other packages for drawing
+ diagrams? Do you have applications for my package other than the
+ categorical diagrams for which it was designed? What do you see as
+ the major limitations of the package? What persuaded you to use it,
+ or not to use it?
+<div class="p"><!----></div>
+</li>
+</ul>
+
+<div class="p"><!----></div>
diff --git a/macros/generic/diagrams/xypic/CATALOG b/macros/generic/diagrams/xypic/CATALOG
new file mode 100644
index 0000000000..0d99647ab7
--- /dev/null
+++ b/macros/generic/diagrams/xypic/CATALOG
@@ -0,0 +1,21 @@
+Name: xypic
+Version: 3.8.9 <2013/10/06>
+
+Description: Xy-pic is a package for typesetting graphs and diagrams.
+ It is structured as several modules, each defining a custom notation for
+ a particular kind of graphical object or structure. Example objects are
+ arrows, curves, frames, and colouring/rotation on drivers that support
+ it; these can be organised in matrix, directed graph, path, polygon, knot,
+ and 2-cell structure. Xy-pic works with most formats, including LaTeX,
+ AMS-LaTeX, AMS-TeX, and plain TeX, and has been used to typeset
+ complicated diagrams from many application areas including category
+ theory, automata theory, algebra, neural networks, and database theory.
+
+Keywords: diagram, picture, graph, arrow, curve, commutative diagram,
+ knot, braid, two-cell, cartesian coordinates, tree.
+
+Author: Kristoffer H. Rose
+Problems-To: xy-pic@tug.org
+Address: IBM T.J.Watson Research Center, PO Box 704, Yorktown Heights, NY 10598, USA
+
+<URL: http://xy-pic.sourceforge.net>
diff --git a/macros/generic/diagrams/xypic/COPYING b/macros/generic/diagrams/xypic/COPYING
new file mode 100644
index 0000000000..d159169d10
--- /dev/null
+++ b/macros/generic/diagrams/xypic/COPYING
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/macros/generic/diagrams/xypic/FONTCOPYING b/macros/generic/diagrams/xypic/FONTCOPYING
new file mode 100644
index 0000000000..a868741bb6
--- /dev/null
+++ b/macros/generic/diagrams/xypic/FONTCOPYING
@@ -0,0 +1,94 @@
+ FONT GENERAL PUBLIC LICENSE EXCEPTIONS
+ Version 1, October 1998
+
+ Copyright (C) 1998 Kristoffer H. Rose <krisrose@tug.org>
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ Software for typesetting frequently includes fonts of characters.
+If this software is covered by the GNU General Public License, then a
+document, created as a result of running the software, which also
+contains the fonts (for example for presentation purposes), is a
+"derived" work. This license grants specific rights to separately
+distribute fonts in order to make it clear that documents containing
+the fonts (with the purpose of printing and viewing the characters and
+images depicted in the document) are permitted.
+
+ Exception Terms and Conditions
+
+ 0. This License applies to any font or other work which contains a
+notice placed by the copyright holder saying it may be distributed
+under the terms of the GNU General Public License, either version 2 or
+a later version, below the "License", with the explicit mention that
+the exceptions of this Font General Public License Exceptions, below
+the "Exceptions", apply.
+
+The "Font", below, refers to just the single file that has the
+explicit mention that these Exceptions apply.
+
+All other terms used are those of the License.
+
+ 1. You may distribute any unmodified version of the Font without the
+requirement that the full remaining source of the Program is enclosed.
+
+An intact copy of the Font file with the same name, insofar as the
+environment where the file is stored permits this, is considered as an
+unmodified version.
+
+ 2. You may distribute files with the Font translated to another
+format provided that the following two conditions are met:
+
+ a) The name of the Font, if it appears, must remain the same or be
+ as close to the original name as the format permits.
+
+ b) You accompany the file by a prominent notice about the lack of
+ warranty for the Font as detailed in the GPL.
+
+ 3. You may include fragments of the Font, or of the Font translated
+to another format, in documents or other work with the purpose of
+making it possible to view or print the document, provided that you
+accompany the document with a prominent notice about the lack of
+warranty of any kind for the Font, as detailed in the GPL.
+
+ End of Exception Terms and Conditions
+
+ Appendix: How to Apply These Terms to Your New Fonts
+
+ If you develop a new font or an icon as part of a program, and you
+want it to be of the greatest possible use to the public, the best way
+to achieve this is to make it free software which everyone can
+redistribute and change under these terms. However, in order to avoid
+encumbering the use of your font in printable and viewable formats,
+you may want to include this exception notice with it.
+
+ To do so, attach the following notices to the font source file. It
+is safest to attach them to the start of the source file to most
+effectively convey the exclusion of warranty; and each file should
+have at least the "copyright" line and a pointer to where the full
+notice is found.
+
+ <one line to give the font's name and a brief idea of what it does.>
+ Copyright (C) yyyy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, see http://www.gnu.org/licenses/.
+
+ Special permission is granted to distribute this font separately
+ under the terms of the Font General License Exceptions enclosed
+ with this program.
+
+Otherwise follow the instructions in the appendix of the GNU General Public
+License.
diff --git a/macros/generic/diagrams/xypic/INSTALL b/macros/generic/diagrams/xypic/INSTALL
new file mode 100644
index 0000000000..a2ce4eb223
--- /dev/null
+++ b/macros/generic/diagrams/xypic/INSTALL
@@ -0,0 +1,233 @@
+-*-text-*- $Id: INSTALL,v 3.23 2011/03/31 06:04:02 krisrose Exp $
+
+
+ ================================================
+ INSTALLING THE Xy-pic DIAGRAM TYPESETTING MACROS
+ ================================================
+
+
+This file explains how you install the runtime files in the
+distribution of Xy-pic. See `README' for general information.
+
+Contents:
+
+-1- Copyleft
+-2- Overview of files and where they should be installed
+-3- Bugs & comments & where to get help
+
+
+---------------------------------------------------------------------------
+-1- COPYLEFT
+---------------------------------------------------------------------------
+
+Note that the entire Xy-pic package is distributed with copyleft:
+
+ Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+ Copyright (c) 1994-2011 Ross Moore <ross.moore@mq.edu.au>
+
+ The Xy-pic package 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.
+
+ The Xy-pic 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 GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this package; if not, see http://www.gnu.org/licenses/.
+
+What this means is that if you install Xy-pic then you should (1) make
+sure that the file `COPYING' is accessible to the users, and (2) be
+prepared to provide Xy-pic (including sources including of your
+modifications) to any of your users that request it (you may charge a
+fee for this if you are so inclined).
+
+Note: Some option files may be copyrighted by other people and use a
+different (more relaxed) license but the conditions remain the same
+for the entirety of Xy-pic.
+
+
+---------------------------------------------------------------------------
+-2- OVERVIEW OF FILES AND WHERE THEY SHOULD BE INSTALLED
+---------------------------------------------------------------------------
+
+In this section we explain in 10 steps where the different groups of
+Xy-pic files in the `run' and `doc' distribution should be installed.
+For each file category we indicate the location recommended by TDS,
+the TeX Directory Standard (as formed by a TUG working group of that
+name).
+
+
+IMPORTANT
+---------
+If you have an older system (more than 10 years) then these
+instructions may not be suitable. Go to the source directory
+http://xy-pic.cvs.sourceforge.net/viewvc/xy-pic/src/Historic/
+where we keep some older instructions, or ask on the mailing list.
+
+
+Step 1. Availability & License
+------------------------------
+These eight files contain general information and should be installed
+in a publicly readable place:
+
+ README generic information on Xy-pic
+ CATALOG version information and summary
+ TRAILER announcement and availability
+ INSTALL how to install (this file)
+ MANIFEST list of all files
+ VERSIONS the RCS version ids of all source files
+ COPYING GNU General Public License
+ FONTCOPYING Special license for fonts
+ Xy-pic.html HTML source of Xy-pic home page
+ Xy-logo.png Xy-pic logo (gotta have one of those)
+
+TDS directory: texmf/doc/generic/xypic
+
+
+Step 2. Macros
+--------------
+Files `texinputs/*' are TeX and LaTeX macro files that must be
+installed in a place which TeX and LaTeX will search (e.g., with un*x
+TeX, a directory users include in the TEXINPUTS environment variable).
+
+TDS directory: texmf/tex/generic/xypic
+
+
+Step 3. TeX Font Metric
+-----------------------
+Files `texfonts/*.tfm' should be installed in a directory that TeX
+will search for fonts (e.g., with un*x TeX, a directory users include
+in the TEXFONTS environment variable).
+
+TDS directory: texmf/fonts/tfm/public/xypic
+
+
+Step 4. METAFONT Sources
+------------------------
+Files `mfinputs/*.mf' should be installed in some directory where the
+METAFONT program will search for them (e.g., with un*x TeX, a
+directory included in the MFINPUTS environment variable).
+
+NOTE: The METAFONT source files are only useful on installations where
+the printer driver and previewer can utilise them to generate the
+required bitmap fonts `on-line'. If this is possible on your
+installation then please use it: it saves substantial amounts of space
+and means that you will automatically use fonts optimised for each
+printer (provided evrything is correctly set up, of course).
+
+TDS directory: texmf/fonts/source/public/xypic
+
+
+Step 5. PostScript Type1 Fonts
+------------------------------
+Files `type1/*.pfb' contain versions of the Xy-pic fonts in special
+PostScript form that may be useful on some installations. They should
+be installed where the applications using them look for such fonts (if
+used with DVIPS then the `ps/xypic.map' file from the next group
+should also be installed).
+
+NOTE: Some installations, notably teTeX 0.4, will PREFER using these
+fonts over the METAFONT-generated equivalents (IMHO this is a bug in
+the MakeTeXPK script). On those systems we recommend that you ALSO
+install the PK fonts to circumvent the problem.
+
+IMPORTANT: Make sure that you do not have any old Xy-pic PostScript
+`xy*.pfa' fonts floating around in your system - search for and remove
+all files named `xy*.pfa' when you have installed the new fonts. One
+common way old (and wrong) fonts is manifest is when some arrowheads
+appear skewed or too thin.
+
+TDS directory: texmf/fonts/type1/public/xypic
+
+
+Step 6. PostScript Font Metric Files
+------------------------------------
+
+Files `pfm/*.pfm' are special files for some font handling software.
+Install them if you need them.
+
+TDS directory (usually): texmf/fonts/pfm/public/xypic
+
+
+Step 7. Adobe Font Metric Files
+-------------------------------
+Files `afm/*.afm' are special files for the Adobe Type Manager.
+Install them if you need them.
+
+TDS directory (usually): texmf/fonts/afm/public/xypic
+
+
+Step 8. PostScript Header Files
+-------------------------------
+Files `ps/*' contain PostScript header files. If you plan to use
+the PostScript extension option then you should copy these files to a
+place where your PostScript DVI driver will find them.
+
+TDS directory (usually): texmf/dvips/xypic
+
+
+Step 9. PostScript Font Map Files
+---------------------------------
+Files `map/*' contain PostScript and PDF font mappings that link each
+font to the used encoding.
+
+TDS directory (usually): texmf/fonts/map/dvips/xypic
+
+
+Step 10. PDF Font Encoding Files
+-------------------------------
+Files `enc/*' contain PDF encoding files (that name each character in
+the special Xy-pic fonts). If you plan to use the PDF backend then
+you should copy these files to a place where PDFTeX will find them.
+
+TDS directory: texmf/fonts/enc/dvips/xypic
+
+
+Step 11. Documentation
+----------------------
+The documentation is provided in Adobe PDF files.
+
+ doc/xyguide.pdf User's Guide for everyone.
+ doc/xyrefer.pdf Reference Manual for experienced users
+
+The source code documentation is also included.
+
+ doc/xysource.pdf TeXnical documentation for TeXperts
+ doc/xypdf.pdf TeXnical details about PDF generation
+ doc/xy*src.tar.gz the actual source files
+
+TDS directory: texmf/doc/generic/xypic
+
+
+That's all.
+
+
+---------------------------------------------------------------------------
+-3- BUGS & COMMENTS & WHERE TO GET HELP
+---------------------------------------------------------------------------
+
+We will appreciate reports on any problems you may encounter and
+opinions you have on how the usefulness of Xy-pic can be improved.
+Please report using either
+
+ Electronic mail (Internet): xy-pic@tug.org [preferred]
+
+ Paper mail: Kristoffer H. Rose
+ IBM T.J.Watson Research Center
+ P.O.Box 704
+ Yorktown Heights, NY 10598
+ USA
+
+ W3 <URL: http://sourceforge.net/projects/xy-pic/>
+
+---------------------------------------------------------------------------
+
+This is the end of INSTALL. We hope you'll enjoy Xy-pic!
+
+ -- Ross Moore and Kristoffer Rose
+
+---------------------------------------------------------------------------
+
diff --git a/macros/generic/diagrams/xypic/MANIFEST b/macros/generic/diagrams/xypic/MANIFEST
new file mode 100644
index 0000000000..fe61510f86
--- /dev/null
+++ b/macros/generic/diagrams/xypic/MANIFEST
@@ -0,0 +1,232 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA256
+
+b96441955c41494658ad110a58004f28 xy-3.8.9/texfonts/xylubt12.tfm
+9ed32077e353fd45d4be79b566b34102 xy-3.8.9/texfonts/xyline10.tfm
+c277d5c81d76bb6a6a508cddd7f2d554 xy-3.8.9/texfonts/xyeubt11.tfm
+b85db7c9d93062a9dc2a06f1ecd2a853 xy-3.8.9/texfonts/xyqc10.tfm
+ed83ddbc3136e3e7310f9f4354939703 xy-3.8.9/texfonts/xyeuat10.tfm
+ed83ddbc3136e3e7310f9f4354939703 xy-3.8.9/texfonts/xyeubt10.tfm
+9d465699a13fb7706bf38bc873e9526c xy-3.8.9/texfonts/xycmbt12.tfm
+f082096f0df4b6a9cf22d7d15e6e8cfa xy-3.8.9/texfonts/xyeubt12.tfm
+50246cc71b0635b0ba0a5c10a0bf4257 xy-3.8.9/texfonts/xybtip10.tfm
+52a29d45fdb6009d8eb8c1abfcf62dcb xy-3.8.9/texfonts/xylubt11.tfm
+f124f78ed50a1817738d2adb190cf2bd xy-3.8.9/texfonts/xycmbt10.tfm
+5c01c46b93e3ba8369f3f8edc6e62aef xy-3.8.9/texfonts/xydash10.tfm
+50246cc71b0635b0ba0a5c10a0bf4257 xy-3.8.9/texfonts/xyatip10.tfm
+52a29d45fdb6009d8eb8c1abfcf62dcb xy-3.8.9/texfonts/xyluat11.tfm
+b96441955c41494658ad110a58004f28 xy-3.8.9/texfonts/xyluat12.tfm
+c277d5c81d76bb6a6a508cddd7f2d554 xy-3.8.9/texfonts/xyeuat11.tfm
+9d465699a13fb7706bf38bc873e9526c xy-3.8.9/texfonts/xycmat12.tfm
+b1b2aed5f832d24df2d2ebd1dba18e07 xy-3.8.9/texfonts/xymisc10.tfm
+a3a3bc08980c5126ff2a7a68fb5a64ff xy-3.8.9/texfonts/xylubt10.tfm
+63bbec86ecb2350ba30adc95b53766e7 xy-3.8.9/texfonts/xycmbt11.tfm
+f124f78ed50a1817738d2adb190cf2bd xy-3.8.9/texfonts/xycmat10.tfm
+4db60f15ea23b4ec2d796c6d568a63fa xy-3.8.9/texfonts/xybsql10.tfm
+a3a3bc08980c5126ff2a7a68fb5a64ff xy-3.8.9/texfonts/xyluat10.tfm
+3393210079fb4ed9347e214b3bfd7c1a xy-3.8.9/texfonts/xycirc10.tfm
+63bbec86ecb2350ba30adc95b53766e7 xy-3.8.9/texfonts/xycmat11.tfm
+f082096f0df4b6a9cf22d7d15e6e8cfa xy-3.8.9/texfonts/xyeuat12.tfm
+7ec42cb4e4e3cd19cac45c089401846c xy-3.8.9/TRAILER
+c7f5c01e69077db8d158f582e156f764 xy-3.8.9/INSTALL
+792a7b006f4613644463030b58290e1a xy-3.8.9/Xy-logo.png
+b53bbf23a56f2c543207ff92c94ce94a xy-3.8.9/texinputs/xyps-t.tex
+8a83c6b5fad6b75e43169805d37efcef xy-3.8.9/texinputs/xysmart.tex
+7867b36e610322f4fc54881bd5d94343 xy-3.8.9/texinputs/xydvips.tex
+65bb1e3f69dba004cb0c2224359fef48 xy-3.8.9/texinputs/xyps-l.tex
+6a18d06abfab2b5d5e4e31b4f0e78639 xy-3.8.9/texinputs/xycmactex.tex
+24340b6befc66d28ee1ebb657efb5892 xy-3.8.9/texinputs/xyall.tex
+25a964ebb390bcfcd35c040f477eef1d xy-3.8.9/texinputs/xypdf-cu.tex
+edd672434f45626662368282c0322160 xy-3.8.9/texinputs/xycolor.tex
+d44dc9545b4f26bd4d9b564c7c2db7cd xy-3.8.9/texinputs/xyimport.tex
+904907c40950fade6b43f89606792d9b xy-3.8.9/texinputs/movie.cls
+c8603d98d3a55ecb74d439e6abba791c xy-3.8.9/texinputs/xy16textures.tex
+125a67de88ccbd0e0283f67b83f9855f xy-3.8.9/texinputs/xynecula.tex
+413d5f789929a45aab7d12ce0d0aee7d xy-3.8.9/texinputs/xy.tex
+990ce136a3cc15728ba417a2e78b25c8 xy-3.8.9/texinputs/xyarrow.tex
+1a12b316e2132654e44ba2cd21def637 xy-3.8.9/texinputs/xypdf-li.tex
+66beb10e89ca3b367faccdfebe2d3965 xy-3.8.9/texinputs/xy2cell.tex
+dd1eb8ddca95d11b8d051f1471fa767e xy-3.8.9/texinputs/xydvitops.tex
+09ebbd3ce07e365a24f3d2343248d192 xy-3.8.9/texinputs/xyps-f.tex
+d412ee1ff259daefee5e927172e2f9a8 xy-3.8.9/texinputs/xycurve.tex
+43fb8dc80dd748631d78096701166d76 xy-3.8.9/texinputs/xycmtip.tex
+925a882bdae45c3da43ade17301079c8 xy-3.8.9/texinputs/xydummy.tex
+2692b08b5ea11fbbd1937106f77fb996 xy-3.8.9/texinputs/xyps-s.tex
+c335c5dc674b95bb786b74396ffce83d xy-3.8.9/texinputs/xytile.tex
+1f8227a166a019780dc8eed55d412d56 xy-3.8.9/texinputs/xymovie.tex
+e16fc85c85f64d0a5c04708bf3312d00 xy-3.8.9/texinputs/xypdf-ro.tex
+1575250bfcedf61f8b4181e09ad0659e xy-3.8.9/texinputs/xypicture.tex
+c3a572983ccc9fc596b4e9ce454d5652 xy-3.8.9/texinputs/xyline.tex
+cd87cbae3acd962decd7311b3fe30c06 xy-3.8.9/texinputs/xy17oztex.tex
+1445855973f58d3d2f34be51b4c796f1 xy-3.8.9/texinputs/xypspatt.tex
+90cb8a3b00c2081384c1ce988d2ba0a3 xy-3.8.9/texinputs/xypdf-co.tex
+c4ec75d66727413dc329c2850acba72a xy-3.8.9/texinputs/xyps-r.tex
+cb768d8d63a12d35607cbb3c4e7ba163 xy-3.8.9/texinputs/xyrotate.tex
+28134012dafb2972d4c32eb8af3edb2e xy-3.8.9/texinputs/xyarc.tex
+420d24f213436fc501669a04517144ff xy-3.8.9/texinputs/xypic.sty
+2116ea6e35d010eb5873cf4a0d4321e3 xy-3.8.9/texinputs/xytextures.tex
+f48057783f0327dc9f0b2ed8ed948918 xy-3.8.9/texinputs/xypoly.tex
+e61049d36bdfccb226f22e582d70d368 xy-3.8.9/texinputs/xypdf.tex
+15673cabca043d4a807f82d1134e13b7 xy-3.8.9/texinputs/xyps-col.tex
+94e05e3b7b09e5f01f27ce0fba9652cf xy-3.8.9/texinputs/xyknot.tex
+5686b19cc46d046c885428794ed9c114 xy-3.8.9/texinputs/xypdf-fr.tex
+b051b6278342f915daceaf554e3ade5f xy-3.8.9/texinputs/xypsdict.tex
+1e1bcf75c622af1eefd9169948208302 xy-3.8.9/texinputs/xy.sty
+25b1e7edeee41f181ee9733429da4a9c xy-3.8.9/texinputs/xymatrix.tex
+4c147d7ae8f6e4af74a0bd7519424984 xy-3.8.9/texinputs/xyps.tex
+2f514d7533d1b7575176df5f035b8b16 xy-3.8.9/texinputs/xyemtex.tex
+a0ca4f0babb67cf5a136634e656e8eaa xy-3.8.9/texinputs/xytpic.tex
+a26f363497b268d896fe6f9b293e55a6 xy-3.8.9/texinputs/xytp-f.tex
+32ef3b517aa860b1d253bb3ecc1a1686 xy-3.8.9/texinputs/xydvidrv.tex
+ad325e351be74f7bcaa1bc1c81eebd06 xy-3.8.9/texinputs/xyoztex.tex
+186931a828664624939ab0b347e3952c xy-3.8.9/texinputs/xyframe.tex
+0fa6740bd2c7f70b0932c701baf17d71 xy-3.8.9/texinputs/xyv2.tex
+c8763fc8e281cb6ecf697988b6608e4a xy-3.8.9/texinputs/xyrecat.tex
+6511906ab396486a3d70e9be8e789397 xy-3.8.9/texinputs/xyxdvi.tex
+f8dc90c79e604ca1df868f124870db43 xy-3.8.9/texinputs/xymacpat.xyp
+b85c02e8c5ca6610b964bfc4b75b2bb5 xy-3.8.9/texinputs/xyps-c.tex
+f44bd717e744dd46e14a440829de701c xy-3.8.9/texinputs/xyps-pro.tex
+ed63dd19c6d3ab5dc21a7fea2432c167 xy-3.8.9/texinputs/xypic.tex
+1ee562fde0b53c9cd16f7a604f33fdf0 xy-3.8.9/texinputs/xyidioms.tex
+b7e4d9a6936ba2ad6119a280abde9641 xy-3.8.9/texinputs/xygraph.tex
+6a94c4af5f0f0b6d87ec6c0c8d43e800 xy-3.8.9/texinputs/xybarr.tex
+0d51788a4141bc66ab896f7ac63495fd xy-3.8.9/texinputs/xytips.tex
+668f546acdd1b45fd4ba1fb5e09f313d xy-3.8.9/texinputs/xycrayon.tex
+51ad0ec17c89323f6c2a1c9ac78acfb6 xy-3.8.9/texinputs/xyps-ps.tex
+af98c1c4cb762e0f70e44f8238042b9d xy-3.8.9/texinputs/xyweb.tex
+42c2cee117438240570127cb66ad9fe9 xy-3.8.9/map/xypic.map
+ba464963f0a718d0034c33e4705b2b03 xy-3.8.9/Xy-pic.html
+d2f4ce1df3c1bdf434fe4088b95b7ca8 xy-3.8.9/mfinputs/xyluat10.mf
+e1ca9c39718c95d435564b07506ec0c0 xy-3.8.9/mfinputs/xyeuat10.mf
+c72ee4a8c80bbd94a3f106f867898e70 xy-3.8.9/mfinputs/xyeubt12.mf
+1fd35dd064c8773d14a2f6c10904d1f3 xy-3.8.9/mfinputs/xyluat12.mf
+b542f59d13fb9fb5c0abe9e00dd2aa35 xy-3.8.9/mfinputs/xylubt12.mf
+8a38747b2cebaae3a51ade8259d2842e xy-3.8.9/mfinputs/xycm.mf
+e5b7039affcba01d09fd1ba8670c29e7 xy-3.8.9/mfinputs/xyeuat11.mf
+572f3ac95b7612e6117929dff3953290 xy-3.8.9/mfinputs/xyd2.mf
+1c48bb2080f4fc76a338d46f303caea4 xy-3.8.9/mfinputs/xytech.mf
+097a4b3c290b19bf5c09cab26fd81752 xy-3.8.9/mfinputs/xycmbt12.mf
+ed7e9166aef5bac3b8bd0f781a8a77c0 xy-3.8.9/mfinputs/xybsql10.mf
+2cd5f8127c7fd54faf3014bb39443549 xy-3.8.9/mfinputs/xylubt10.mf
+6f0a09e5168ce9933a13549a306db3c3 xy-3.8.9/mfinputs/xyd.mf
+6e23c28e708557bd25ba219b41b53331 xy-3.8.9/mfinputs/xycmbt10.mf
+b67a1a09c063cfa92a1d0a222a5e0ee1 xy-3.8.9/mfinputs/xycmbt11.mf
+47b1e0699a22fbc602fb5ed90109d68d xy-3.8.9/mfinputs/xybtip10.mf
+ec9c5c57cbe11ad2f8a65e0fee40f07d xy-3.8.9/mfinputs/xycmat11.mf
+f3b0803a58bc0bc2ff4871278c722cf2 xy-3.8.9/mfinputs/xyeubt11.mf
+df1f6d78735463cd024f124181bd2442 xy-3.8.9/mfinputs/xybtip.mf
+5a2ed4dd03a4dedc29bc344c58e0d3a4 xy-3.8.9/mfinputs/xydash10.mf
+750c660b6d0ee05a98a43ab75882118f xy-3.8.9/mfinputs/xycmat12.mf
+2c6dc4f84512f8af8254d533c5b74eb6 xy-3.8.9/mfinputs/xymisc10.mf
+81b94c8c7a5edfcfe2e8efa8390d1fad xy-3.8.9/mfinputs/xyeuat12.mf
+d500feb421bbb8828b1f65c27738eaed xy-3.8.9/mfinputs/xyline10.mf
+396029b313c1d5a51aa62689485c3946 xy-3.8.9/mfinputs/xyatri.mf
+9b38600264beb943d9a5f8e1038a0800 xy-3.8.9/mfinputs/xyeuler.mf
+a720ddab53c52aed1d9d184b789fcc50 xy-3.8.9/mfinputs/xyeubt10.mf
+e8fa720da1935ba850f3f5876a2ba780 xy-3.8.9/mfinputs/xybtri.mf
+c5094f25e9ef643693e3cb39169b70dd xy-3.8.9/mfinputs/xyatip10.mf
+168ff060ac2ff811c572684a442cba30 xy-3.8.9/mfinputs/xyatip.mf
+d0e1478e812ec8122370bf104eeecbed xy-3.8.9/mfinputs/xycirc10.mf
+13cb4b0558fd30e72372aae3e548492f xy-3.8.9/mfinputs/xyqc10.mf
+65db02dd96922bc88ece443db561b9b8 xy-3.8.9/mfinputs/xylu.mf
+85f828fa67af5f257bf4c2e250b3e646 xy-3.8.9/mfinputs/xylubt11.mf
+85f74cb0e6f4d7e06d7346f0dd0a4bbe xy-3.8.9/mfinputs/xycmat10.mf
+23e380dc02b5b1e367107265daca4d59 xy-3.8.9/mfinputs/xyluat11.mf
+d76abb4db084ce7809ec626b2636bd00 xy-3.8.9/README
+3ea0c09f75df8a0eddf67188f3125d97 xy-3.8.9/FONTCOPYING
+8d4bfbafedc7d6d34dc7855f75e1cc79 xy-3.8.9/type1/xydash10.pfb
+ec38b53842f4384705514c6703fa9108 xy-3.8.9/type1/xyatip10.pfb
+a78cc51eb4f348072c100f5aaeae0558 xy-3.8.9/type1/xyeubt11.pfb
+ad391dfddfd050862d933e5807ab1edc xy-3.8.9/type1/xybtip10.pfb
+795860c5431eaae7308ca253adbb1c0d xy-3.8.9/type1/xyluat11.pfb
+c969bb01276d994b7c8b4e880e102c85 xy-3.8.9/type1/xycmat12.pfb
+3a6edd6ccf24491c7033b04c115c0b6a xy-3.8.9/type1/xyeuat12.pfb
+8b0e892fce2d68c56334f7e7bb581398 xy-3.8.9/type1/xycmbt11.pfb
+a492245d942af2cc4c65197bb428d65e xy-3.8.9/type1/xycmat10.pfb
+7e46951913f6ce1c9cfa86ee5677f4d9 xy-3.8.9/type1/xyeubt10.pfb
+4ee6e8966db8ede56e6cb1e2398ac8d3 xy-3.8.9/type1/xylubt10.pfb
+0b914d9b6b76b3fa46e1056a631395cd xy-3.8.9/type1/xyluat12.pfb
+fb5e71d872cd8b5ac1b06647ef4783d0 xy-3.8.9/type1/xyluat10.pfb
+ad63ca0f58b4d04cf77f148b91306645 xy-3.8.9/type1/xycirc10.pfb
+f0e48b203f9f17ffe3a5a6130b5333f6 xy-3.8.9/type1/xylubt11.pfb
+9651e62afdd7ebf3ac3282d58963cfdd xy-3.8.9/type1/xyeubt12.pfb
+cb0265cb09bda014ce2dfa08a6c45ca9 xy-3.8.9/type1/xylubt12.pfb
+f05969bc40cebd556181cce3dd01d312 xy-3.8.9/type1/xybsql10.pfb
+acadf379adb78f4d555808f641098158 xy-3.8.9/type1/xycmbt12.pfb
+0abb99aa0820f446bfb8433cd41f1515 xy-3.8.9/type1/xyeuat11.pfb
+d0c5ff3cf7c69e3724b9e4131319667c xy-3.8.9/type1/xyeuat10.pfb
+bbd4525571da643ce623b9b3e31ae24c xy-3.8.9/type1/xycmat11.pfb
+89c3546ee426179761f124b92f40158d xy-3.8.9/type1/xycmbt10.pfb
+bd87b05d1301be9116740f603263c9fd xy-3.8.9/CATALOG
+5ad4d52a4bd04bae23ca548c793c5c3f xy-3.8.9/enc/xyd2.enc
+49cd4c2d54e7a7fccf078e946f586f8b xy-3.8.9/enc/xyd.enc
+81499e8f6fc4029878adc87117df6452 xy-3.8.9/enc/xycirc.enc
+8849a3a6359690e59663657b7d6a4c93 xy-3.8.9/VERSIONS
+56b0ecf3af1b9fdd808a23c34ab5bf04 xy-3.8.9/doc/xypdf.pdf
+17c0efce393a0bd29919e4d477a232b6 xy-3.8.9/doc/xysource.pdf
+8590792a6323e9abc1da1caeaa51b966 xy-3.8.9/doc/xy389src.tar.gz
+ad5043ac1412229c2af729fe5460855c xy-3.8.9/doc/xyrefer.pdf
+5d20d8e19b6daa6c6a3402cb95ba7bc4 xy-3.8.9/doc/barrdoc.pdf
+cef4e0acc39f1bcb4b223bcf2cd465fa xy-3.8.9/doc/xyguide.pdf
+bd6921308d20195a598b181da6fc7ac4 xy-3.8.9/pfm/xybsql10.pfm
+1c41a6de86897b93eb1e303834cb0bd5 xy-3.8.9/pfm/xybtip10.pfm
+b897c84c75b8f28d013e368eae043943 xy-3.8.9/pfm/xycmbt10.pfm
+9edcf4223b5874f83935f5b401c7099e xy-3.8.9/pfm/xyluat10.pfm
+74279bafa4bbd54ba2d75df40255e094 xy-3.8.9/pfm/xylubt11.pfm
+5d6cb3b11c219514c01f04f55c2bdace xy-3.8.9/pfm/xyluat12.pfm
+f8905a16778d31a4e114196eb9e215cd xy-3.8.9/pfm/xyluat11.pfm
+2ba60a1797087a1e69ebcf1177f1f010 xy-3.8.9/pfm/xydash10.pfm
+fd85dc8eaa8922f5fc7200ecb80a0295 xy-3.8.9/pfm/xycirc10.pfm
+97d32867339d784f624f664cd30dc4ec xy-3.8.9/pfm/xycmat11.pfm
+01e802a5d0e5933062d5a363f6589fca xy-3.8.9/pfm/xyeuat10.pfm
+c75e69c47ccd29c0b634fa0cedf0e9b6 xy-3.8.9/pfm/xylubt10.pfm
+e09cc223013283f0c73746c7d4dd5664 xy-3.8.9/pfm/xycmbt11.pfm
+ffe3164d1ae7cd08299915555cf8eebe xy-3.8.9/pfm/xylubt12.pfm
+dff3f2e66c5b4231a6ca60c35c0e277c xy-3.8.9/pfm/xyeuat11.pfm
+d2830702b8ea6a1e9283727514939947 xy-3.8.9/pfm/xycmat10.pfm
+6eedc88885c8b5cfaacbe4860b3420b1 xy-3.8.9/pfm/xyeubt12.pfm
+f44b82894334b4615b63c8fd84e48aba xy-3.8.9/pfm/xycmbt12.pfm
+35255610825b5e8f3d772caca3678329 xy-3.8.9/pfm/xyeuat12.pfm
+e5624a0f4072297282b837bb2efa7a0f xy-3.8.9/pfm/xyeubt11.pfm
+fbde2a4ec4136292945eb296db3089af xy-3.8.9/pfm/xyeubt10.pfm
+f90f3a42dcc2ac2da9bb8041ae7363d6 xy-3.8.9/pfm/xyatip10.pfm
+cb6612baec562e1995679cb24dbcac2b xy-3.8.9/pfm/xycmat12.pfm
+ff9c63ccd64ec715c04c742297ae1a19 xy-3.8.9/ps/xy389dict.pro
+3cadfeb0f91fa799b1ac6503768e5665 xy-3.8.9/afm/xyeubt11.afm
+9a47eb0a3ad542b416ebf7479eafe3ac xy-3.8.9/afm/xycmbt10.afm
+de99b9bbe52455f75f973bb292dd8a7d xy-3.8.9/afm/xyluat12.afm
+70a4cd8037b8a93f3130fa637c9ee18b xy-3.8.9/afm/xycmbt12.afm
+7e790d43c62759cbe79cf93361c569a7 xy-3.8.9/afm/xycmat10.afm
+c689bbee8e69a60d3ee81ca31d9dabec xy-3.8.9/afm/xyeuat11.afm
+722d0a464624372934ce71c89e58c7ee xy-3.8.9/afm/xyluat10.afm
+4e1948fe92379226af679ab7ed9e3ef4 xy-3.8.9/afm/xycmat11.afm
+bc4dc22e8d9263fb9c2e11becab82268 xy-3.8.9/afm/xyluat11.afm
+b28beb431be6cf8b2819618031b0b95f xy-3.8.9/afm/xyeuat12.afm
+13c5a6c1bde1f791af8e6101fdb6c860 xy-3.8.9/afm/xycmat12.afm
+d149a18e99739f0865333efbf46f6633 xy-3.8.9/afm/xyeubt10.afm
+b3e16ef6c2400c95d94736f39b27cbe7 xy-3.8.9/afm/xyeuat10.afm
+d6a4798d0ab76fa08e763f5f308061c6 xy-3.8.9/afm/xylubt10.afm
+f0dd6fbf4ad6df0776e0f8894025f88e xy-3.8.9/afm/xyatip10.afm
+2571856107d2a518e71f788941fe6e67 xy-3.8.9/afm/xyeubt12.afm
+6ce17d3d2ce233712aeaad4fa2ada039 xy-3.8.9/afm/xydash10.afm
+acddc1ec3f77268a1fa271156968b450 xy-3.8.9/afm/xylubt12.afm
+eee5ebe87058d1c636515d34af3ed476 xy-3.8.9/afm/xybsql10.afm
+5cc17d7dd2ee81647462b50ca0016c63 xy-3.8.9/afm/xycirc10.afm
+95d3817fc7e7c3fc1e12ffeceb33e621 xy-3.8.9/afm/xylubt11.afm
+cc992b395280f05b91b8401174603641 xy-3.8.9/afm/xycmbt11.afm
+3c07a4e5952b08ab9766419e76bbd20b xy-3.8.9/afm/xybtip10.afm
+b234ee4d69f5fce4486a80fdaf4a4263 xy-3.8.9/COPYING
+aa343431ff9e933fa16e5068959564f9 xy-3.8.9/support/install-tds
+276994651134121f9b5b9720a485ac67 xy-3.8.9/support/pnmrawtopcropwhite.c
+85bc76623f2217f06df7e0af4abdb2f4 xy-3.8.9/support/dvitogif89a
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.11 (GNU/Linux)
+
+iQEcBAEBCAAGBQJSULppAAoJEMTQEv/gFjeHUj0IAKOa+foDJ71hg7LnAQJpwfAI
+jZVqdg54K5jo86CjpXPIQQ9yFLLWsTQgPufBUofyft850eraWda08uUTyPOVOpVc
+Q3exE74GAii7fJBsidka5pbTKoft9A/lIJsBxvIsKRzwI6xf6F2RsNzC/IPK2rbE
+RKAGvHE+rebdneyYuxc2b7oPZ478sK87rOD2Dkm6BzjmTxQBIRwjGao8uDFeuFuK
+FR4CaMR8E64F/76dpFNXE6QYxTUXs6UDLv+XIsX3peU5hh0f5V7DRfSRxT39VQ7n
+tisnbWiGsTwHqzphQ6Ny93GqOVoat75pyl21H3KZoi4scWYbaR29UPG/m3Rh1+k=
+=vpIn
+-----END PGP SIGNATURE-----
diff --git a/macros/generic/diagrams/xypic/README b/macros/generic/diagrams/xypic/README
new file mode 100644
index 0000000000..6fcb3f26bd
--- /dev/null
+++ b/macros/generic/diagrams/xypic/README
@@ -0,0 +1,107 @@
+-*-text-*- $Id: README,v 3.11 2010/05/06 17:46:29 krisrose Exp $
+
+ ======================================================
+ THE Xy-pic PACKAGE FOR TYPESETTING GRAPHS AND DIAGRAMS
+ ======================================================
+
+Xy-pic is a package for typesetting graphs and diagrams with TeX.
+
+It works with most formats, including LaTeX (both 2.09 and 2e),
+AMS-LaTeX, AMS-TeX, and plain TeX.
+
+It has been used to typeset complicated diagrams from many application
+areas including category theory, automata theory, algebra, neural
+networks, and database theory.
+
+ - o -
+
+See below in this file for an overview of the structure and features!
+See CATALOG for up to date version information!
+See TRAILER for author and accessibility information!
+See COPYING for the conditions for redistribution and modification!
+See VERSIONS for the exact list of the versions of all source files!
+See INSTALL for how to install Xy-pic on your system!
+Go to <URL: http://xy-pic.sourceforge.net> for source and news!
+
+ - o -
+
+Xy-pic is structured as a `kernel' and several orthogonal modules called
+`options', each defining a custom notation for a particular kind of
+graphical object or structure.
+
+These (combinable) structures are available:
+
+* A graph combinator mode where diagrams are specified the way they are
+ composed as graphs.
+
+* A matrix-like mode where the dimensions of the drawing are computed by
+ aligning diagram entries in rows and columns (this is the `diagram'
+ mode Xy-pic version 2 users are used to).
+
+* A polygon mode where diagrams shaped as regular polygons are entered
+ in a simple way.
+
+* A mode for typesetting beautiful knots and links.
+
+* A general object-oriented `turtle graphic' drawing language for
+ specifying graphs with objects and connections between them in a
+ manner independent of orientation.
+
+* An experimental facility for generating movies where diagrams wiggle
+ and bend into place...
+
+The following objects may be used:
+
++ Positions can be given in variety of formats (extendable) including
+ user defined coordinates (x,y) and relative to previous positions,
+ objects, object edges, and points on connections.
+
++ Objects may be circular, elliptic, or rectangular (more shapes can be
+ added) and adjusted in several ways.
+
++ Large library of objects with mnemonic names.
+
++ Objects that orient themself along a connection when placed relative
+ to it, e.g., `\dir{|-}' is like \vdash but thus oriented; new such
+ objects can be defined in a convenient way.
+
++ TeX `boxes', i.e., text and mathematical formulae.
+
++ Includes circle segments and optionally arbitrary elliptical,
+ quadratic, and cubic arcs.
+
++ Connections are aligned between the reference points of objects but
+ start and end on the edges.
+
++ Any object can be used to build a connection (using `diagonal
+ filling'); library objects provide common line types.
+
++ Flexible notation for drawing arrows and general paths with tail,
+ stem, and head built from any object(s). Special support for arrows
+ that cross each other, arrows that `go by' other entries, paired
+ arrows (including support for 2-cells), curved arrows, and arrows with
+ bends.
+
++ Library of frames and braces.
+
++ Special notation for rotation, scaling, colour, and line thickness.
+ The correct typesetting of these features requires a backend that
+ supports it (i.e., PostScript) but even when this is not available
+ Xy-pic tries to approximate what is requested such that at least the
+ picture size is stable (and thus page breaks).
+
++ Output can use PDF or PostScript for drawing (several \special
+ formats are supported, including pdfTeX, dvips, and Textures).
+ Notation for inclusion of literal PostScript is available.
+
+* Other graphics can be imported and then `decorated' using Xy-pic.
+
+All object forms may be used with all structures.
+
+ - o -
+
+Finally, enjoy Xy-pic!
+
+Sincerely,
+ Kristoffer H. Rose <krisrose@tug.org>
+ Ross Moore <ross.moore@mq.edu.au>
diff --git a/macros/generic/diagrams/xypic/TRAILER b/macros/generic/diagrams/xypic/TRAILER
new file mode 100644
index 0000000000..5b6be11418
--- /dev/null
+++ b/macros/generic/diagrams/xypic/TRAILER
@@ -0,0 +1,117 @@
+-*-text-*- $Id: TRAILER,v 3.27 2013/10/02 02:04:28 krisrose Exp $
+
+=======================================================================
+ ANNOUNCING the Xy-pic version 3.8 DIAGRAM TYPESETTING PACKAGE
+=======================================================================
+
+This is to announce a release of the diagram typesetting package Xy-pic.
+It has been more than a decade, so we found that a release was in order.
+
+-----------------------------------------------------------------------
+ GENERAL
+-----------------------------------------------------------------------
+
+Xy-pic is a package for typesetting a variety of graphs and diagrams
+with TeX. Xy-pic works with most formats (including LaTeX, AMS-LaTeX,
+AMS-TeX, and plain TeX).
+
+Further specifics of the package are in the distribution README file
+and other documentation.
+
+-----------------------------------------------------------------------
+ LATEST NEWS
+-----------------------------------------------------------------------
+
+Release 3.8.9 includes Michael Barr's "diagxy" macros as the "barr"
+feature.
+
+Release 3.8.8 corrects a typo in xyframes (thanks to Norbert Preining).
+
+Release 3.8.7 includes a fix to the squiggly fonts (thanks, Daniel) to
+avoid PFB font generation errors.
+
+Release 3.8.6 includes a fix to xypdf of colour allocation (thank you
+to Leslie Saper for the report).
+
+Release 3.8.5 fixes some problems with xypdf, notably when used
+together with the beamer package.
+
+Release 3.8.4 fixes a scoping bug in xypdf that made color definitions
+"bleed" to surrounding text (thanks to John G. Bullock for the report).
+
+Release 3.8.3 fixes the xycirc10 font to work around a limitation of
+the mf2pt1 tool (thanks to Daniel Müllner's fix).
+
+Release 3.8.2 fixes the xypic.map file to load the bitmap fonts
+correctly (thanks to Alexander Perlis for the analysis).
+
+Release 3.8.1 includes the missing ".enc" files in the distribution.
+
+The primary purpose of release 3.8 is to incorporate support for
+proper PDF output by including Daniel Müllner's "xypdf" package using
+native PDF for drawing. The driver is integrated with most of
+Xy-pic's extensions, however, there may still be gray areas where
+support is sketchy, so please try your favorite diagrams with pdfTeX
+and tell us if it works for you. We're grateful to Daniel for having
+contributed such a key piece of infrastructure that Xy-pic has been
+lacking for many years.
+
+This version also marks the first version where xymatrix entries are
+aligned by their math axis by default as suggested by Alexander Perlis
+(in TUGboat 22 (2001), 330-334); thanks to Alexander for the thorough
+analysis. Please check whether your matrices still work as you
+expect!
+
+Also thanks to Jeremy Gibbons for contributing the new "lu" style of
+arrow tips suitable for use with Lucida, and to Scott Pakin and the
+FontForge team for the great programs now used to generate all Type1
+fonts directly from their METAFONT sources.
+
+Release 3.8 furthermore fixes a few bugs in release 3.7; do tell if
+you believe that any of the "fixes" are really new bugs.
+
+Finally, thanks to our loyal users; indeed if you enjoy Xy-pic then
+please rate us on http://sourceforge.net/projects/xy-pic where Xy-pic
+development is now completely in the open!
+
+-----------------------------------------------------------------------
+ AVAILABILITY
+-----------------------------------------------------------------------
+
+Xy-pic can be retrieved through the World Wide Web Xy-pic `home page':
+
+ http://xy-pic.sourceforge.net
+
+Make sure to check that you have reached a version 3.8 copy (some
+archives take a while to mirror the latest files)!
+
+-----------------------------------------------------------------------
+ HISTORY & CREDITS
+-----------------------------------------------------------------------
+
+The first public release (version 1.40) of Xy-pic was created by
+Kristoffer H. Rose, then at DIKU, U of Copenhagen, and distributed via
+Usenet on December 19, 1991. This quickly became version 2 of which
+version 2.6 was stable for a few years.
+
+The thorough rewrite that became version 3 is a continued
+collaboration with Ross Moore, Macquarie U, Sydney, initiated through
+a visit to Macquarie (Jan-May 1994 supported by the Australian
+Research Council, Macquarie University, and using donated DEC
+equipment). However, full backwards compatibility is maintained
+(except for the unavoidable but fully documented obscure cases).
+
+Xy-pic is principally Copyright (c) 1991-2011 by Kristoffer H. Rose
+and 1994-2011 by Ross Moore, with contributions by several others, all
+under GNU COPYLEFT (GPL) which means that you can use the package for
+any purpose but if you provide the macros or any code derived from
+them to a third party then you are obliged to include the entire
+Xy-pic package (full details in the file COPYING). The FONTCOPYING
+file details the special permissions to distribute fonts without the
+full requirements of the GPL.
+
+-----------------------------------------------------------------------
+
+ This is the end of the announcement. Enjoy Xy-pic!
+
+-----------------------------------------------------------------------
diff --git a/macros/generic/diagrams/xypic/VERSIONS b/macros/generic/diagrams/xypic/VERSIONS
new file mode 100644
index 0000000000..a422147951
--- /dev/null
+++ b/macros/generic/diagrams/xypic/VERSIONS
@@ -0,0 +1,115 @@
+$Id: CATALOG.doc,v 3.12 2011/03/14 20:13:59 krisrose Exp $
+$Id: dvitogif89a,v 3.8 2011/03/14 20:14:00 krisrose Exp $
+$Id: install-tds,v 3.16 2011/03/14 20:14:00 krisrose Exp $
+$Id: INSTALL,v 3.23 2011/03/31 06:04:02 krisrose Exp $
+$Id: latin1.sty,v 3.6 2010/06/10 18:45:49 krisrose Exp $
+$Id: Makefile,v 3.73 2013/10/06 00:12:29 krisrose Exp $
+$Id: MAKE,v 3.12 2011/03/14 20:14:00 krisrose Exp $
+$Id: movie.cls,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: pnmrawtopcropwhite.c,v 3.10 2011/03/14 20:14:00 krisrose Exp $
+$Id: README,v 3.11 2010/05/06 17:46:29 krisrose Exp $
+$Id: TRAILER,v 3.27 2013/10/02 02:04:28 krisrose Exp $
+$Id: xy16textures.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xy17oztex.doc,v 3.8 2011/03/14 20:14:00 krisrose Exp $
+$Id: xy2cell.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyall.doc,v 3.8 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyarc.doc,v 3.8 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyarrow.doc,v 3.9 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyatip10.mf,v 3.9 2010/06/10 18:45:50 krisrose Exp $
+$Id: xyatip.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+$Id: xyatri.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+$Id: xybarr.doc,v 1.3 2013/10/06 00:12:30 krisrose Exp $
+$Id: xybsql10.mf,v 3.10 2011/08/28 22:19:06 krisrose Exp $
+$Id: xybtip10.mf,v 3.9 2010/06/10 18:45:50 krisrose Exp $
+$Id: xybtip.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+$Id: xybtri.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+$Id: xycirc10.mf,v 3.13 2011/03/14 20:14:00 krisrose Exp $
+$Id: xycmactex.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xycmat10.mf,v 3.9 2010/06/10 18:45:50 krisrose Exp $
+$Id: xycmat11.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+$Id: xycmat12.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+$Id: xycmbt10.mf,v 3.9 2010/06/10 18:45:50 krisrose Exp $
+$Id: xycmbt11.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+$Id: xycmbt12.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+$Id: xycm.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+$Id: xycmtip.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xycolor.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+$Id: xycrayon.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xycurve.doc,v 3.12 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyd2.mf,v 3.10 2010/06/10 18:45:50 krisrose Exp $
+$Id: xydash10.mf,v 3.9 2010/06/10 18:45:50 krisrose Exp $
+$Id: xyd.mf,v 3.10 2010/06/10 18:45:50 krisrose Exp $
+$Id: xydoc.bib,v 3.19 2011/05/27 04:51:17 krisrose Exp $
+$Id: xydocps.doc,v 3.9 2011/03/14 20:14:00 krisrose Exp $
+$Id: xydoc.sty,v 3.36 2011/05/27 04:51:17 krisrose Exp $
+$Id: xy.doc,v 3.34 2013/08/26 03:56:11 krisrose Exp $
+$Id: xydummy.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xydvidrv.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xydvips.doc,v 3.9 2011/03/14 20:14:00 krisrose Exp $
+$Id: xydvitops.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyemtex.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyeuat10.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+$Id: xyeuat11.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+$Id: xyeuat12.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+$Id: xyeubt10.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+$Id: xyeubt11.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+$Id: xyeubt12.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+$Id: xyeuler.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+$Id: xyframe.doc,v 3.14 2012/05/24 00:30:38 krisrose Exp $
+$Id: xygraph.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyguide.man,v 3.23 2011/05/27 04:51:17 krisrose Exp $
+$Id: xyidioms.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyimport.doc,v 3.13 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyknot.doc,v 3.9 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyline10.mf,v 3.5 2010/06/10 18:45:50 krisrose Exp $
+$Id: xyline.doc,v 3.10 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyling.doc,v 3.3 2013/10/02 02:04:28 krisrose Exp $
+$Id: Xy-logo.doc,v 3.2 2010/06/10 18:45:49 krisrose Exp $
+$Id: Xy-logo.xy,v 3.2 2010/06/10 18:45:49 krisrose Exp $
+$Id: xyluat10.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyluat11.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyluat12.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+$Id: xylubt10.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+$Id: xylubt11.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+$Id: xylubt12.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+$Id: xylu.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+$Id: xymacpat.xyp,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xymatrix.doc,v 3.14 2011/03/31 06:10:57 krisrose Exp $
+$Id: xymisc10.mf,v 3.5 2010/06/10 18:45:50 krisrose Exp $
+$Id: xymovie.doc,v 3.9 2011/03/14 20:14:00 krisrose Exp $
+$Id: xynecula.doc,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyoztex.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xypic.doc,v 3.6 2011/03/14 20:14:00 krisrose Exp $
+$Id: Xy-pic.html,v 3.38 2013/10/02 02:04:28 krisrose Exp $
+$Id: xypic.sty,v 3.4 2010/04/16 06:06:52 krisrose Exp $
+$Id: xypicture.doc,v 3.6 2011/03/14 20:14:00 krisrose Exp $
+$Id: xypoly.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyps-c.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyps-col.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+$Id: xypsdict.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyps.doc,v 3.12 2011/05/27 04:51:17 krisrose Exp $
+$Id: xyps-f.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyps-l.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+$Id: xypspatt.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyps-pro.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyps-ps.doc,v 3.12 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyps-r.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyps-s.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyps-t.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyqc10.mf,v 3.1 2010/06/10 18:45:50 krisrose Exp $
+$Id: xyrecat.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyrefer.man,v 3.37 2013/10/02 02:04:28 krisrose Exp $
+$Id: xyrotate.doc,v 3.8 2011/03/14 20:14:00 krisrose Exp $
+$Id: xysmart.doc,v 3.6 2011/03/14 20:14:00 krisrose Exp $
+$Id: xysource.man,v 3.28 2011/03/31 06:04:02 krisrose Exp $
+$Id: xy.sty,v 3.10 2011/03/14 20:14:00 krisrose Exp $
+$Id: xytech.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+$Id: xytest.mf,v 3.5 2010/06/10 18:45:50 krisrose Exp $
+$Id: xytextures.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xytile.doc,v 3.8 2011/03/14 20:14:00 krisrose Exp $
+$Id: xytips.doc,v 3.10 2013/10/02 02:04:28 krisrose Exp $
+$Id: xytp-f.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xytpic.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyv2.doc,v 3.8 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyweb.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+$Id: xyxdvi.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
diff --git a/macros/generic/diagrams/xypic/Xy-logo.png b/macros/generic/diagrams/xypic/Xy-logo.png
new file mode 100644
index 0000000000..b0b48ef62f
--- /dev/null
+++ b/macros/generic/diagrams/xypic/Xy-logo.png
Binary files differ
diff --git a/macros/generic/diagrams/xypic/Xy-pic.html b/macros/generic/diagrams/xypic/Xy-pic.html
new file mode 100644
index 0000000000..2173f87de4
--- /dev/null
+++ b/macros/generic/diagrams/xypic/Xy-pic.html
@@ -0,0 +1,377 @@
+<html> <head>
+<!--$Id: Xy-pic.html,v 3.38 2013/10/02 02:04:28 krisrose Exp $-->
+<title>Xy-pic Home Page</title>
+<!--``Xy-pic home page.''
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2012 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+-->
+<meta name="description"
+ content="Xy-pic diagram drawing (La)TeX package home page.">
+<meta name="keywords"
+ content="xypic, TeX, LaTeX, commutative diagram, planar graph, flow chart">
+</head>
+
+<body lang="EN" bgcolor="#FFFFFF">
+<center>
+<h1>
+<img src="Xy-logo.png" alt="Xy" width=95 height=111 align=center alt="Xy">-pic
+&mdash;
+Typesetting Graphs and Diagrams in TeX
+</h1>
+</center>
+
+<p>
+ Xy-pic is a package for typesetting graphs and diagrams using the
+ principle of <q>logical composition of visual components.</q> It is
+ structured as several modules, each defining a mnemonic plain text
+ notation for a particular kind of graphical object or structure.
+ Example objects are arrows, curves, frames, and colouring/rotation
+ on drivers that support it; these can be organised in matrix,
+ directed graph, path, polygon, knot, and 2-cell structure (a more
+ complete list of the features is given below).
+<p>
+ Xy-pic works with most formats, including all variants of LaTeX,
+ AMS-TeX, and plain TeX, and has been used to typeset complicated
+ diagrams from many application areas including category theory,
+ automata theory, algebra, neural networks, topology (knots and
+ braids), database theory, chemistry, and genealogy.
+<p>
+ Xy-pic has been designed with great care to allow the style of
+ pictures to match well with the exquisite quality of the surrounding
+ TeX typeset material.
+</p>
+
+<h2><a name="avail">Availability</a></h2>
+
+<p>
+ You can get Xy-pic from
+ <a href="http://ctan.org/tex-archive/macros/generic/diagrams/xypic/">CTAN</a>
+ or directly from the
+ <a href="http://sourceforge.net/projects/xy-pic/">SourceForge development project home</a>,
+ however, chances are that Xy-pic is already included with your TeX installation
+ (for <a href="http://www.tug.org/texlive/">TeX Live</a>, for example,
+ Xy-pic is part of the <q>pictures</q> bundle).
+<p>
+ Xy-pic was conceived by
+ <a href="http://www.krisrose.net">Kristoffer H&oslash;gsbro Rose</a>,
+ the present version is the result of several years of collaboration with
+ <a href="http://www.maths.mq.edu.au/~ross/">Ross Moore</a> with
+ essential contributions from George Necula, Jeremy Gibbons,
+ <a href="http://www.math.uni-bonn.de/people/muellner">Daniel M&uuml;llner</a>,
+ and Alex Perlis<!--, <a href="http://www.tug.org/yandy/">Y&amp;Y Inc.</a>-->,
+ and with many suggestions from more than two decades of users.
+<p>
+ Xy-pic is &copy; by its authors as
+ <a href="http://www.fsf.org/">free software</a>.
+</p>
+
+<h2>Features</h2>
+
+<p>
+ Xy-pic is structured as a <q>kernel</q> and several orthogonal modules
+ called <q>options</q>, each defining a custom notation for a particular
+ kind of graphical object or structure.
+<p>
+
+These (combinable) <q>logical composition</q> structures are available:
+
+<ul>
+ <li>A graph combinator mode where diagrams are specified the way they are
+ composed as graphs.
+ <li>A matrix-like mode where the dimensions of the drawing are computed by
+ aligning diagram entries in rows and columns (this is the <q>diagram</q>
+ mode Xy-pic version 2 users are used to).
+ <li>A polygon mode where diagrams shaped as regular polygons are entered
+ in a simple way.
+ <li>A mode for typesetting beautiful knots and links.
+ <li>A general object-oriented <q>turtle graphic</q> drawing language for
+ specifying graphs with objects and connections between them in a
+ manner independent of orientation.
+</ul>
+
+The following <q>visual component</q> objects can be used:
+
+<ul>
+ <li>Positions can be given in variety of formats (extendable) including
+ user defined coordinates (x,y) and relative to previous positions,
+ objects, object edges, and points on connections.
+ <li>Objects may be circular, elliptic, or rectangular (more shapes can be
+ added) and adjusted in several ways.
+ <li>Large library of objects with mnemonic names.
+ <li>Objects that orient themself along a connection when placed relative
+ to it, e.g., <q><code>@{|-}</code></q> is like <q><code>\vdash</code></q>
+ but thus oriented; new such objects can be defined in a convenient way.
+ <li>TeX <q>boxes</q>, i.e., text and mathematical formulae.
+ <li>Includes circle segments and optionally arbitrary elliptical,
+ quadratic, and cubic arcs.
+ <li>Connections are aligned between the reference points of objects but
+ start and end on the edges.
+ <li>Any object can be used to build a connection (using <q>diagonal
+ filling</q>); library objects provide common line types.
+ <li>Flexible notation for drawing arrows and general paths with
+ tail, stem, and head built from any object(s). Special support
+ for arrows that cross each other, arrows that <q>go by</q> other
+ entries, paired arrows (including support for 2-cells), curved
+ arrows, and arrows with bends. The style of arrow tips can be
+ configured to match several styles of symbol arrows.
+ <li>Library of frames and braces.
+ <li>Special notation for rotation, scaling, colour, and line thickness.
+ The correct typesetting of these features requires a backend that
+ supports it but even when this is not available
+ Xy-pic tries to approximate what is requested such that at least the
+ picture size is stable (and thus page breaks).
+ <li>Output can use PostScript<a href="#PS">*</a> for drawing (several \special formats are
+ supported: dvips, Textures, and OzTeX - more are being added
+ continuously: contact Ross Moore <ross.moore@mq.edu.au> for the current
+ list). Notation for inclusion of literal PostScript<a href="#PS">*</a> is available.
+ <li>Support for Adobe PDF<a href="#PS">*</a> output is available
+ from version 3.8 (thanks to support by Daniel M&uuml;llner and
+ font conversion software by Scott Pakin).</a>).
+</ul>
+
+<h2>Documentation</h2>
+
+The official Xy-pic documentation, updated with each release, consists of the following four documents.
+
+<ul>
+
+ <li><em>Xy-pic User's Guide</em>
+ by <a href="http://www.krisrose.net/">Kristoffer H. Rose</a>.
+ Explains how to use the Xy-pic macro package to typeset
+ basic <q>matrix-like</q> diagrams with TeX
+ (<a href="http://ctan.org/tex-archive/macros/generic/diagrams/xypic/xy/doc/xyguide.pdf">pdf</a>).<p>
+
+ <li><em>Xy-pic Reference Manual</em>
+ by <a href="http://www.krisrose.net/">Kristoffer H. Rose</a> &amp; <a href="http://www.maths.mq.edu.au/~ross/">Ross Moore</a>.
+ Reference manual for Xy-pic summarising syntax and <q>drawing
+ semantics</q> of the capabilities in the kernel, all extensions and
+ features, and the PostScript<a href="#PS">*</a> backend
+ (<a href="http://ctan.org/tex-archive/macros/generic/diagrams/xypic/xy/doc/xyrefer.pdf">pdf</a>).<p>
+
+ <li><em>Xy-pic Complete Sources with TeXnical Commentary</em>
+ by <a href="http://www.krisrose.net/">Kristoffer H. Rose</a> &amp; <a href="http://www.maths.mq.edu.au/~ross/">Ross Moore</a>.
+ Just that (a large document, <a href="http://ctan.org/tex-archive/macros/generic/diagrams/xypic/xy/doc/xysource.pdf">pdf</a>).<p>
+
+ <li><em>The xypdf package</em>
+ by <a href="http://www.math.uni-bonn.de/people/muellner">Daniel M&uuml;llner</a>.
+ Detailed user and TeXnical documentation of the PDF<a href="#PS">*</a> support for Xy-pic
+ (<a href="http://ctan.org/tex-archive/macros/generic/diagrams/xypic/xy/doc/xypdf.pdf">pdf</a>).<p>
+
+</ul>
+
+In addition there are several tutorials on Xy-pic.
+
+<ul>
+
+ <li><em>An Introduction to Xy-pic</em>
+ by Cameron McLeman (<a href="http://math.arizona.edu/~swig/documentation/xypic/Xypic.pdf">pdf slides</a>).<p>
+
+ <li><em>Commutative Diagrams with XY-pic---I. Kernel Functions and Arrows</em>
+ by Paul A. Blaga (<a href="http://tug.org/pracjourn/2006-4/blaga/blaga.pdf">pdf</a>).<p>
+
+ <li><em>LaTeX/Creating Graphics/Xy-pic</em>
+ is a <a href="http://en.wikibooks.org/wiki/LaTeX/Creating_Graphics#XY-pic">WikiBook chapter</a>.<p>
+
+ <li><em>The LaTeX Graphics Companion</em>, Second Edition
+ by <a href="http://goossens.web.cern.ch/goossens/">Michel Goossens</a>, <a href="http://users.ox.ac.uk/~rahtz/">Sebastian Rahtz</a>, Frank Mittelbach, Denis Roegel, and Herbert Vo&szlig;,
+ <a href="http://aw.com">Addison-Wesley</a>, 2007.
+ Chapter 7 gives a concise introduction to some advanced uses of Xy-pic
+ (<a href="http://www.informit.com/store/product.aspx?isbn=0321508920">official page</a>;
+ in the <a href="http://books.google.com/books?id=hh6rdgZ9m3MC&printsec=frontcover&dq=The+LaTeX+Graphics+Companion&source=bl&ots=1rmNFdwt3O&sig=dQdy79YBDYQBq2r-CHfY3jL63ek&hl=en&ei=FrPXS_SkDpX49AS3tPiXBw&sa=X&oi=book_result&ct=result&resnum=1&ved=0CAsQ6AEwAA#v=onepage&q&f=false">first edition on Google books</a> chapter 5 is dedicated to Xy-pic).<p>
+
+ <li><em>Examples on Typesetting Commutative Diagrams Using Xy-pic</em>
+ by M. Alsani (<a href="http://north.ecc.edu/alsani/xypicbyexample.ps">ps</a>).<p>
+
+ <li><em>Using Xy-pic in LyX</em>
+ by H. Peter Gumm (<a href="http://wiki.lyx.org/uploads/Examples/XY-pic/xypic.pdf">pdf</a>).<p>
+
+ <li><em>Drawing knot pictures using LaTeX with Xy-pic &ndash; An introduction and tutorial</em>
+ by Lars Fischer (<a href="http://lf.starlogik.de/drawing_knot_pictures.html">html</a>).<p>
+
+ <li><em>Xy-pic tutorial with an archive of examples</em>
+ by Aaron Lauda (<a href="http://www.math.columbia.edu/~lauda/xy/">html</a>).
+ Uses low level Xy-pic directives for everything.
+ <p>
+
+ <li><em>Tutorial de Xy-pic</em>
+ by Carlos A. P. Campani (<a href="http://ufpel.edu.br/~campani/xypictutorial.pdf">pdf</a>, in Portuguese).<p>
+
+</ul>
+
+Finally, we maintain a collection of
+<a href="http://ctan.org/tex-archive/macros/generic/diagrams/xypic/xysamples/">examples</a> and
+<a href="http://ctan.org/tex-archive/macros/generic/diagrams/xypic/xypapers/">papers</a> on CTAN.
+
+<p>
+
+If you know of other tutorials, interesting papers, or instructive examples, that can be shared, then please drop a note to the <a href="http://www.tug.org/mailman/listinfo/xy-pic">mailing list</a>!
+
+<h2>Help and Support</h2>
+
+Help and support on Xy-pic matters, as well as announcement of new versions, etc., is provided by the <a href="http://www.tug.org/mailman/listinfo/xy-pic">Xy-pic mailing list</a>, graciously hosted by <a href="http://tug.org">TUG</a>.
+
+<hr>
+<p>
+<a name="PS">*</a> PostScript and PDF are trademarks of <a href="http://www.adobe.com/">Adobe, Inc.</a>
+<p>
+<hr>
+<address>
+<a href="http://www.krisrose.net/">Kristoffer H&oslash;gsbro Rose</a>
+&mdash;
+$Id: Xy-pic.html,v 3.38 2013/10/02 02:04:28 krisrose Exp $
+&mdash;
+Hits by
+<A HREF="http://www.digits.com/thumbnail/"><IMG
+ ALT=WebCounter SRC="http://www.digits.com/thumbnail/wc-01.gif"
+ WIDTH=79 HEIGHT=22 BORDER=1 ALIGN=absmiddle></A>:
+<IMG SRC="http://counter.digits.com/wc/-c/13/-d/5/-f/000000/-b/bebebe/Xy-pic"
+ ALIGN=absmiddle WIDTH=75 HEIGHT=20 BORDER=0 ALT=Count>.
+</address>
+</body></html>
+
+<!--
+-- $Log: Xy-pic.html,v $
+-- Revision 3.38 2013/10/02 02:04:28 krisrose
+-- Release 3.8.9 including Barr's diagxy feature.
+--
+-- Revision 3.37 2011/03/14 20:14:00 krisrose
+-- Preparing for release 3.8.6.
+--
+-- Revision 3.36 2010/06/23 21:20:33 krisrose
+-- Bad backslash.
+--
+-- Revision 3.35 2010/06/23 21:17:35 krisrose
+-- Chemistry rules!
+--
+-- Revision 3.34 2010/06/10 18:45:49 krisrose
+-- Reference to GPL by URL.
+--
+-- Revision 3.33 2010/06/04 03:44:06 krisrose
+-- More tutorials!
+--
+-- Revision 3.32 2010/06/03 22:58:26 krisrose
+-- Oops.
+--
+-- Revision 3.31 2010/06/03 22:53:58 krisrose
+-- Link documents on CTAN.
+--
+-- Revision 3.30 2010/06/03 05:51:20 krisrose
+-- Link to v3.8 documentation.
+--
+-- Revision 3.29 2010/06/02 19:44:21 krisrose
+-- Cleanup.
+--
+-- Revision 3.28 2010/05/22 23:20:35 dmuellner
+-- no message
+--
+-- Revision 3.27 2010/05/21 04:36:29 krisrose
+-- Experimental version with Alex's xymatrix adjustment modifiers as default.
+--
+-- Revision 3.26 2010/05/17 23:29:21 krisrose
+-- Experiment: generate all the Type1 fonts with METAPOST.
+--
+-- Revision 3.25 2010/05/14 00:50:09 krisrose
+-- Daniel's link included.
+--
+-- Revision 3.24 2010/05/14 00:37:09 krisrose
+-- Update documentation links to PDF and include Daniel's manual.
+--
+-- Revision 3.23 2010/05/06 17:46:29 krisrose
+-- Ross Moore's e-mail address updated.
+-- Many obsolete files degraded to Historic.
+--
+-- Revision 3.22 2010/04/28 20:17:28 krisrose
+-- Link to (defunct) Y&Y Inc.
+--
+-- Revision 3.21 2010/04/28 19:59:28 krisrose
+-- Acknowledge properly.
+--
+-- Revision 3.20 2010/04/28 19:31:55 krisrose
+-- Boast about the style integration.
+--
+-- Revision 3.19 2010/04/28 07:17:17 krisrose
+-- PDF only in 3.8.
+--
+-- Revision 3.18 2010/04/28 07:11:02 krisrose
+-- Sic, again...
+--
+-- Revision 3.17 2010/04/28 07:09:10 krisrose
+-- CTAN samples and papers links...
+--
+-- Revision 3.16 2010/04/28 07:05:39 krisrose
+-- &szlig;
+--
+-- Revision 3.15 2010/04/28 07:01:24 krisrose
+-- Users!
+--
+-- Revision 3.14 2010/04/28 06:54:55 krisrose
+-- Removed Latin1 specific characters.
+--
+-- Revision 3.13 2010/04/28 06:50:42 krisrose
+-- Removed dangling link.
+--
+-- Revision 3.12 2010/04/28 06:43:27 krisrose
+-- Sic.
+--
+-- Revision 3.11 2010/04/28 05:39:25 krisrose
+-- Checked and made version independent.
+--
+-- Revision 3.10 2010/04/26 05:56:57 krisrose
+-- Link fixes in progress...
+--
+-- Revision 3.9 2010/04/21 18:41:02 krisrose
+-- Adjustments preparing for xypdf.dtx and friends!
+--
+-- Revision 3.8 2010/04/16 06:06:51 krisrose
+-- Preparing for a new release...
+--
+-- Revision 3.7 1999/02/16 15:01:59 krisrose
+-- Updated for the interim 3.7.
+--
+-- Revision 3.6 1998/03/06 01:28:05 krisrose
+-- Releasing (with Y&Y fonts).
+--
+-- Revision 3.5 1997/05/28 13:05:01 krisrose
+-- Fixed missing breaks bug.
+--
+-- Revision 3.4 1997/05/18 01:14:25 krisrose
+-- Essential bugfixes.
+--
+-- Revision 3.3 1996/12/19 17:03:13 krisrose
+-- Maintenance release.
+--
+-- Revision 3.2 1995/09/19 18:22:27 kris
+-- Bug fix release.
+--
+-- Revision 3.1 1995/09/05 20:31:32 kris
+-- Releasing!
+--
+-- Revision 3.0 1995/07/07 20:55:47 kris
+-- Refers to v3!
+--
+-- Revision 2.13 1995/07/04 15:11:17 kris
+-- Ready to release v3?
+--
+-- Revision 1.2 1994/10/06 16:43:38 kris
+-- Cleaned up to be a proper Xy-pic home page.
+--
+-- Revision 1.1 1994/08/29 12:24:13 kris
+-- Initial revision
+--
+-- Xy-pic `home page'.
+-->
diff --git a/macros/generic/diagrams/xypic/afm/xyatip10.afm b/macros/generic/diagrams/xypic/afm/xyatip10.afm
new file mode 100644
index 0000000000..3f42ed9386
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xyatip10.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:15:25 2013
+FontName XYATIP-Medium
+FullName XYATIP
+FamilyName XYATIP
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -544 -545 544 545
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -20 -20 476 280 ;
+C 1 ; WX 0 ; N d1 ; B -20 -20 466 295 ;
+C 2 ; WX 0 ; N d2 ; B -20 -20 456 311 ;
+C 3 ; WX 0 ; N d3 ; B -21 -21 445 328 ;
+C 4 ; WX 0 ; N d4 ; B -20 -20 431 345 ;
+C 5 ; WX 0 ; N d5 ; B -20 -20 417 362 ;
+C 6 ; WX 0 ; N d6 ; B -20 -20 401 380 ;
+C 7 ; WX 0 ; N d7 ; B -21 -21 383 399 ;
+C 8 ; WX 0 ; N d8 ; B -20 -21 364 417 ;
+C 9 ; WX 0 ; N d9 ; B -20 -20 341 435 ;
+C 10 ; WX 0 ; N d10 ; B -21 -21 317 452 ;
+C 11 ; WX 0 ; N d11 ; B -21 -21 293 468 ;
+C 12 ; WX 0 ; N d12 ; B -20 -20 265 484 ;
+C 13 ; WX 0 ; N d13 ; B -20 -20 236 497 ;
+C 14 ; WX 0 ; N d14 ; B -20 -21 206 510 ;
+C 15 ; WX 0 ; N d15 ; B -20 -21 175 521 ;
+C 16 ; WX 0 ; N d16 ; B -20 -21 145 529 ;
+C 17 ; WX 0 ; N d17 ; B -21 -20 113 536 ;
+C 18 ; WX 0 ; N d18 ; B -25 -20 81 541 ;
+C 19 ; WX 0 ; N d19 ; B -35 -21 50 543 ;
+C 20 ; WX 0 ; N d20 ; B -47 -20 21 545 ;
+C 21 ; WX 0 ; N d21 ; B -64 -20 21 543 ;
+C 22 ; WX 0 ; N d22 ; B -85 -21 20 541 ;
+C 23 ; WX 0 ; N d23 ; B -107 -20 21 537 ;
+C 24 ; WX 0 ; N d24 ; B -131 -20 21 532 ;
+C 25 ; WX 0 ; N d25 ; B -154 -21 21 527 ;
+C 26 ; WX 0 ; N d26 ; B -177 -21 21 520 ;
+C 27 ; WX 0 ; N d27 ; B -197 -21 21 514 ;
+C 28 ; WX 0 ; N d28 ; B -216 -20 21 506 ;
+C 29 ; WX 0 ; N d29 ; B -233 -20 21 499 ;
+C 30 ; WX 0 ; N d30 ; B -249 -20 21 492 ;
+C 31 ; WX 0 ; N d31 ; B -264 -20 21 484 ;
+C 32 ; WX 0 ; N d32 ; B -279 -20 21 476 ;
+C 33 ; WX 0 ; N d33 ; B -295 -21 21 466 ;
+C 34 ; WX 0 ; N d34 ; B -312 -21 20 456 ;
+C 35 ; WX 0 ; N d35 ; B -328 -20 21 445 ;
+C 36 ; WX 0 ; N d36 ; B -344 -21 20 431 ;
+C 37 ; WX 0 ; N d37 ; B -362 -21 20 417 ;
+C 38 ; WX 0 ; N d38 ; B -380 -20 21 401 ;
+C 39 ; WX 0 ; N d39 ; B -398 -19 21 383 ;
+C 40 ; WX 0 ; N d40 ; B -417 -19 21 363 ;
+C 41 ; WX 0 ; N d41 ; B -435 -20 21 342 ;
+C 42 ; WX 0 ; N d42 ; B -452 -21 21 318 ;
+C 43 ; WX 0 ; N d43 ; B -468 -20 20 292 ;
+C 44 ; WX 0 ; N d44 ; B -483 -19 20 265 ;
+C 45 ; WX 0 ; N d45 ; B -497 -20 21 236 ;
+C 46 ; WX 0 ; N d46 ; B -511 -20 21 206 ;
+C 47 ; WX 0 ; N d47 ; B -521 -20 20 175 ;
+C 48 ; WX 0 ; N d48 ; B -530 -20 20 144 ;
+C 49 ; WX 0 ; N d49 ; B -536 -21 21 113 ;
+C 50 ; WX 0 ; N d50 ; B -541 -26 21 81 ;
+C 51 ; WX 0 ; N d51 ; B -543 -35 21 50 ;
+C 52 ; WX 0 ; N d52 ; B -544 -48 21 21 ;
+C 53 ; WX 0 ; N d53 ; B -543 -65 21 21 ;
+C 54 ; WX 0 ; N d54 ; B -541 -84 21 21 ;
+C 55 ; WX 0 ; N d55 ; B -537 -107 21 21 ;
+C 56 ; WX 0 ; N d56 ; B -532 -131 21 21 ;
+C 57 ; WX 0 ; N d57 ; B -527 -154 21 21 ;
+C 58 ; WX 0 ; N d58 ; B -521 -176 21 21 ;
+C 59 ; WX 0 ; N d59 ; B -514 -197 21 21 ;
+C 60 ; WX 0 ; N d60 ; B -507 -216 21 21 ;
+C 61 ; WX 0 ; N d61 ; B -499 -234 21 21 ;
+C 62 ; WX 0 ; N d62 ; B -491 -248 21 21 ;
+C 63 ; WX 0 ; N d63 ; B -484 -264 21 21 ;
+C 64 ; WX 0 ; N d64 ; B -476 -280 21 21 ;
+C 65 ; WX 0 ; N d65 ; B -466 -295 21 21 ;
+C 66 ; WX 0 ; N d66 ; B -456 -312 21 21 ;
+C 67 ; WX 0 ; N d67 ; B -445 -328 21 21 ;
+C 68 ; WX 0 ; N d68 ; B -431 -345 21 21 ;
+C 69 ; WX 0 ; N d69 ; B -417 -362 21 21 ;
+C 70 ; WX 0 ; N d70 ; B -401 -380 21 21 ;
+C 71 ; WX 0 ; N d71 ; B -383 -398 21 21 ;
+C 72 ; WX 0 ; N d72 ; B -364 -417 21 21 ;
+C 73 ; WX 0 ; N d73 ; B -341 -434 21 21 ;
+C 74 ; WX 0 ; N d74 ; B -317 -452 21 21 ;
+C 75 ; WX 0 ; N d75 ; B -292 -469 21 21 ;
+C 76 ; WX 0 ; N d76 ; B -265 -483 21 21 ;
+C 77 ; WX 0 ; N d77 ; B -236 -497 21 21 ;
+C 78 ; WX 0 ; N d78 ; B -206 -510 21 21 ;
+C 79 ; WX 0 ; N d79 ; B -175 -521 21 21 ;
+C 80 ; WX 0 ; N d80 ; B -145 -528 21 21 ;
+C 81 ; WX 0 ; N d81 ; B -112 -536 21 21 ;
+C 82 ; WX 0 ; N d82 ; B -81 -541 25 21 ;
+C 83 ; WX 0 ; N d83 ; B -50 -543 34 21 ;
+C 84 ; WX 0 ; N d84 ; B -20 -545 47 21 ;
+C 85 ; WX 0 ; N d85 ; B -20 -543 64 21 ;
+C 86 ; WX 0 ; N d86 ; B -20 -541 84 21 ;
+C 87 ; WX 0 ; N d87 ; B -20 -537 107 21 ;
+C 88 ; WX 0 ; N d88 ; B -20 -533 131 21 ;
+C 89 ; WX 0 ; N d89 ; B -20 -527 154 21 ;
+C 90 ; WX 0 ; N d90 ; B -20 -521 176 21 ;
+C 91 ; WX 0 ; N d91 ; B -20 -514 197 21 ;
+C 92 ; WX 0 ; N d92 ; B -20 -507 216 21 ;
+C 93 ; WX 0 ; N d93 ; B -20 -499 233 21 ;
+C 94 ; WX 0 ; N d94 ; B -21 -491 249 21 ;
+C 95 ; WX 0 ; N d95 ; B -20 -484 264 21 ;
+C 96 ; WX 0 ; N d96 ; B -20 -476 280 21 ;
+C 97 ; WX 0 ; N d97 ; B -20 -467 295 21 ;
+C 98 ; WX 0 ; N d98 ; B -20 -456 312 21 ;
+C 99 ; WX 0 ; N d99 ; B -20 -445 328 21 ;
+C 100 ; WX 0 ; N d100 ; B -21 -431 345 21 ;
+C 101 ; WX 0 ; N d101 ; B -20 -417 362 21 ;
+C 102 ; WX 0 ; N d102 ; B -21 -401 380 21 ;
+C 103 ; WX 0 ; N d103 ; B -20 -383 398 22 ;
+C 104 ; WX 0 ; N d104 ; B -20 -362 417 21 ;
+C 105 ; WX 0 ; N d105 ; B -20 -340 434 21 ;
+C 106 ; WX 0 ; N d106 ; B -20 -317 452 21 ;
+C 107 ; WX 0 ; N d107 ; B -20 -292 468 21 ;
+C 108 ; WX 0 ; N d108 ; B -20 -265 483 21 ;
+C 109 ; WX 0 ; N d109 ; B -20 -235 497 21 ;
+C 110 ; WX 0 ; N d110 ; B -20 -205 511 21 ;
+C 111 ; WX 0 ; N d111 ; B -20 -176 521 21 ;
+C 112 ; WX 0 ; N d112 ; B -20 -143 529 21 ;
+C 113 ; WX 0 ; N d113 ; B -20 -112 536 21 ;
+C 114 ; WX 0 ; N d114 ; B -20 -81 541 25 ;
+C 115 ; WX 0 ; N d115 ; B -20 -50 544 35 ;
+C 116 ; WX 0 ; N d116 ; B -20 -20 544 48 ;
+C 117 ; WX 0 ; N d117 ; B -20 -21 543 64 ;
+C 118 ; WX 0 ; N d118 ; B -20 -21 541 84 ;
+C 119 ; WX 0 ; N d119 ; B -20 -21 537 106 ;
+C 120 ; WX 0 ; N d120 ; B -20 -21 533 131 ;
+C 121 ; WX 0 ; N d121 ; B -20 -20 527 154 ;
+C 122 ; WX 0 ; N d122 ; B -20 -20 520 176 ;
+C 123 ; WX 0 ; N d123 ; B -20 -21 514 197 ;
+C 124 ; WX 0 ; N d124 ; B -20 -20 507 216 ;
+C 125 ; WX 0 ; N d125 ; B -20 -20 499 233 ;
+C 126 ; WX 0 ; N d126 ; B -20 -20 491 249 ;
+C 127 ; WX 0 ; N d127 ; B -20 -20 484 264 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xybsql10.afm b/macros/generic/diagrams/xypic/afm/xybsql10.afm
new file mode 100644
index 0000000000..f1193f6aee
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xybsql10.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:15:28 2013
+FontName XYBSQL-Medium
+FullName XYBSQL
+FamilyName XYBSQL
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -375 -375 375 375
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -262 -278 21 21 ;
+C 1 ; WX 0 ; N d1 ; B -253 -286 20 21 ;
+C 2 ; WX 0 ; N d2 ; B -244 -295 22 21 ;
+C 3 ; WX 0 ; N d3 ; B -236 -302 21 21 ;
+C 4 ; WX 0 ; N d4 ; B -225 -312 20 21 ;
+C 5 ; WX 0 ; N d5 ; B -215 -320 21 21 ;
+C 6 ; WX 0 ; N d6 ; B -204 -329 21 21 ;
+C 7 ; WX 0 ; N d7 ; B -191 -338 21 21 ;
+C 8 ; WX 0 ; N d8 ; B -179 -344 21 21 ;
+C 9 ; WX 0 ; N d9 ; B -167 -351 20 21 ;
+C 10 ; WX 0 ; N d10 ; B -155 -357 21 21 ;
+C 11 ; WX 0 ; N d11 ; B -142 -362 21 21 ;
+C 12 ; WX 0 ; N d12 ; B -129 -367 22 21 ;
+C 13 ; WX 0 ; N d13 ; B -118 -371 22 21 ;
+C 14 ; WX 0 ; N d14 ; B -106 -373 21 21 ;
+C 15 ; WX 0 ; N d15 ; B -93 -375 21 21 ;
+C 16 ; WX 0 ; N d16 ; B -83 -374 44 21 ;
+C 17 ; WX 0 ; N d17 ; B -73 -371 65 21 ;
+C 18 ; WX 0 ; N d18 ; B -65 -368 86 21 ;
+C 19 ; WX 0 ; N d19 ; B -56 -363 106 21 ;
+C 20 ; WX 0 ; N d20 ; B -49 -358 126 21 ;
+C 21 ; WX 0 ; N d21 ; B -43 -352 144 21 ;
+C 22 ; WX 0 ; N d22 ; B -37 -344 162 21 ;
+C 23 ; WX 0 ; N d23 ; B -33 -337 179 21 ;
+C 24 ; WX 0 ; N d24 ; B -31 -329 194 21 ;
+C 25 ; WX 0 ; N d25 ; B -27 -320 208 22 ;
+C 26 ; WX 0 ; N d26 ; B -25 -312 222 21 ;
+C 27 ; WX 0 ; N d27 ; B -23 -303 233 21 ;
+C 28 ; WX 0 ; N d28 ; B -22 -295 243 21 ;
+C 29 ; WX 0 ; N d29 ; B -20 -287 253 21 ;
+C 30 ; WX 0 ; N d30 ; B -22 -277 263 21 ;
+C 31 ; WX 0 ; N d31 ; B -20 -270 270 22 ;
+C 32 ; WX 0 ; N d32 ; B -21 -262 278 21 ;
+C 33 ; WX 0 ; N d33 ; B -22 -253 286 21 ;
+C 34 ; WX 0 ; N d34 ; B -21 -244 295 21 ;
+C 35 ; WX 0 ; N d35 ; B -21 -236 303 21 ;
+C 36 ; WX 0 ; N d36 ; B -20 -225 312 21 ;
+C 37 ; WX 0 ; N d37 ; B -21 -215 320 21 ;
+C 38 ; WX 0 ; N d38 ; B -21 -204 329 22 ;
+C 39 ; WX 0 ; N d39 ; B -22 -190 338 22 ;
+C 40 ; WX 0 ; N d40 ; B -22 -178 344 21 ;
+C 41 ; WX 0 ; N d41 ; B -21 -167 352 21 ;
+C 42 ; WX 0 ; N d42 ; B -21 -155 357 21 ;
+C 43 ; WX 0 ; N d43 ; B -21 -142 362 21 ;
+C 44 ; WX 0 ; N d44 ; B -21 -129 368 21 ;
+C 45 ; WX 0 ; N d45 ; B -21 -118 371 22 ;
+C 46 ; WX 0 ; N d46 ; B -21 -106 373 22 ;
+C 47 ; WX 0 ; N d47 ; B -21 -93 375 22 ;
+C 48 ; WX 0 ; N d48 ; B -20 -83 374 44 ;
+C 49 ; WX 0 ; N d49 ; B -21 -74 371 64 ;
+C 50 ; WX 0 ; N d50 ; B -20 -64 368 86 ;
+C 51 ; WX 0 ; N d51 ; B -20 -56 363 106 ;
+C 52 ; WX 0 ; N d52 ; B -20 -49 358 126 ;
+C 53 ; WX 0 ; N d53 ; B -20 -43 352 146 ;
+C 54 ; WX 0 ; N d54 ; B -20 -37 344 162 ;
+C 55 ; WX 0 ; N d55 ; B -21 -33 337 180 ;
+C 56 ; WX 0 ; N d56 ; B -20 -31 330 194 ;
+C 57 ; WX 0 ; N d57 ; B -22 -27 320 208 ;
+C 58 ; WX 0 ; N d58 ; B -20 -26 312 222 ;
+C 59 ; WX 0 ; N d59 ; B -20 -24 303 234 ;
+C 60 ; WX 0 ; N d60 ; B -21 -21 295 244 ;
+C 61 ; WX 0 ; N d61 ; B -20 -20 287 253 ;
+C 62 ; WX 0 ; N d62 ; B -20 -20 277 262 ;
+C 63 ; WX 0 ; N d63 ; B -19 -19 270 271 ;
+C 64 ; WX 0 ; N d64 ; B -20 -20 262 278 ;
+C 65 ; WX 0 ; N d65 ; B -20 -20 253 287 ;
+C 66 ; WX 0 ; N d66 ; B -21 -21 245 296 ;
+C 67 ; WX 0 ; N d67 ; B -21 -21 236 303 ;
+C 68 ; WX 0 ; N d68 ; B -20 -20 225 312 ;
+C 69 ; WX 0 ; N d69 ; B -21 -21 215 320 ;
+C 70 ; WX 0 ; N d70 ; B -21 -21 204 329 ;
+C 71 ; WX 0 ; N d71 ; B -21 -21 190 338 ;
+C 72 ; WX 0 ; N d72 ; B -20 -21 179 344 ;
+C 73 ; WX 0 ; N d73 ; B -20 -21 167 352 ;
+C 74 ; WX 0 ; N d74 ; B -20 -21 155 358 ;
+C 75 ; WX 0 ; N d75 ; B -20 -21 142 363 ;
+C 76 ; WX 0 ; N d76 ; B -22 -21 129 368 ;
+C 77 ; WX 0 ; N d77 ; B -22 -21 118 372 ;
+C 78 ; WX 0 ; N d78 ; B -22 -22 105 373 ;
+C 79 ; WX 0 ; N d79 ; B -21 -22 93 375 ;
+C 80 ; WX 0 ; N d80 ; B -43 -20 83 374 ;
+C 81 ; WX 0 ; N d81 ; B -65 -21 74 371 ;
+C 82 ; WX 0 ; N d82 ; B -86 -20 64 368 ;
+C 83 ; WX 0 ; N d83 ; B -106 -20 56 363 ;
+C 84 ; WX 0 ; N d84 ; B -126 -20 49 359 ;
+C 85 ; WX 0 ; N d85 ; B -146 -20 43 352 ;
+C 86 ; WX 0 ; N d86 ; B -162 -20 37 344 ;
+C 87 ; WX 0 ; N d87 ; B -180 -21 33 337 ;
+C 88 ; WX 0 ; N d88 ; B -194 -20 31 330 ;
+C 89 ; WX 0 ; N d89 ; B -208 -22 27 321 ;
+C 90 ; WX 0 ; N d90 ; B -221 -20 26 313 ;
+C 91 ; WX 0 ; N d91 ; B -233 -20 24 303 ;
+C 92 ; WX 0 ; N d92 ; B -244 -21 21 295 ;
+C 93 ; WX 0 ; N d93 ; B -254 -20 20 287 ;
+C 94 ; WX 0 ; N d94 ; B -262 -20 21 278 ;
+C 95 ; WX 0 ; N d95 ; B -271 -19 20 271 ;
+C 96 ; WX 0 ; N d96 ; B -278 -20 20 262 ;
+C 97 ; WX 0 ; N d97 ; B -286 -20 20 254 ;
+C 98 ; WX 0 ; N d98 ; B -296 -21 21 245 ;
+C 99 ; WX 0 ; N d99 ; B -302 -21 21 236 ;
+C 100 ; WX 0 ; N d100 ; B -312 -19 21 225 ;
+C 101 ; WX 0 ; N d101 ; B -320 -21 21 214 ;
+C 102 ; WX 0 ; N d102 ; B -329 -21 22 203 ;
+C 103 ; WX 0 ; N d103 ; B -338 -21 21 191 ;
+C 104 ; WX 0 ; N d104 ; B -344 -20 21 179 ;
+C 105 ; WX 0 ; N d105 ; B -351 -20 21 167 ;
+C 106 ; WX 0 ; N d106 ; B -357 -20 21 155 ;
+C 107 ; WX 0 ; N d107 ; B -362 -20 21 143 ;
+C 108 ; WX 0 ; N d108 ; B -367 -22 21 129 ;
+C 109 ; WX 0 ; N d109 ; B -371 -22 21 118 ;
+C 110 ; WX 0 ; N d110 ; B -373 -22 22 105 ;
+C 111 ; WX 0 ; N d111 ; B -375 -21 22 94 ;
+C 112 ; WX 0 ; N d112 ; B -374 -44 20 83 ;
+C 113 ; WX 0 ; N d113 ; B -371 -65 21 73 ;
+C 114 ; WX 0 ; N d114 ; B -368 -86 20 64 ;
+C 115 ; WX 0 ; N d115 ; B -363 -106 20 56 ;
+C 116 ; WX 0 ; N d116 ; B -358 -126 20 49 ;
+C 117 ; WX 0 ; N d117 ; B -352 -144 20 43 ;
+C 118 ; WX 0 ; N d118 ; B -344 -161 20 38 ;
+C 119 ; WX 0 ; N d119 ; B -337 -179 21 33 ;
+C 120 ; WX 0 ; N d120 ; B -329 -194 20 30 ;
+C 121 ; WX 0 ; N d121 ; B -320 -208 22 27 ;
+C 122 ; WX 0 ; N d122 ; B -312 -222 21 25 ;
+C 123 ; WX 0 ; N d123 ; B -303 -233 20 23 ;
+C 124 ; WX 0 ; N d124 ; B -295 -243 21 22 ;
+C 125 ; WX 0 ; N d125 ; B -287 -253 20 21 ;
+C 126 ; WX 0 ; N d126 ; B -277 -263 20 21 ;
+C 127 ; WX 0 ; N d127 ; B -270 -270 20 21 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xybtip10.afm b/macros/generic/diagrams/xypic/afm/xybtip10.afm
new file mode 100644
index 0000000000..f7ad652d41
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xybtip10.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:15:31 2013
+FontName XYBTIP-Medium
+FullName XYBTIP
+FamilyName XYBTIP
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -544 -544 544 544
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -21 -21 249 491 ;
+C 1 ; WX 0 ; N d1 ; B -20 -21 233 499 ;
+C 2 ; WX 0 ; N d2 ; B -20 -21 216 506 ;
+C 3 ; WX 0 ; N d3 ; B -20 -21 197 514 ;
+C 4 ; WX 0 ; N d4 ; B -20 -21 177 521 ;
+C 5 ; WX 0 ; N d5 ; B -20 -20 154 527 ;
+C 6 ; WX 0 ; N d6 ; B -21 -21 131 532 ;
+C 7 ; WX 0 ; N d7 ; B -21 -20 107 538 ;
+C 8 ; WX 0 ; N d8 ; B -21 -20 84 541 ;
+C 9 ; WX 0 ; N d9 ; B -20 -21 64 543 ;
+C 10 ; WX 0 ; N d10 ; B -20 -21 47 544 ;
+C 11 ; WX 0 ; N d11 ; B -50 -21 34 544 ;
+C 12 ; WX 0 ; N d12 ; B -81 -21 26 541 ;
+C 13 ; WX 0 ; N d13 ; B -113 -21 22 537 ;
+C 14 ; WX 0 ; N d14 ; B -144 -20 21 529 ;
+C 15 ; WX 0 ; N d15 ; B -175 -21 21 521 ;
+C 16 ; WX 0 ; N d16 ; B -206 -21 20 510 ;
+C 17 ; WX 0 ; N d17 ; B -236 -21 21 497 ;
+C 18 ; WX 0 ; N d18 ; B -265 -20 21 484 ;
+C 19 ; WX 0 ; N d19 ; B -292 -20 21 468 ;
+C 20 ; WX 0 ; N d20 ; B -318 -21 21 452 ;
+C 21 ; WX 0 ; N d21 ; B -341 -21 20 435 ;
+C 22 ; WX 0 ; N d22 ; B -364 -20 21 417 ;
+C 23 ; WX 0 ; N d23 ; B -383 -21 21 398 ;
+C 24 ; WX 0 ; N d24 ; B -401 -21 21 381 ;
+C 25 ; WX 0 ; N d25 ; B -417 -21 21 362 ;
+C 26 ; WX 0 ; N d26 ; B -431 -21 21 345 ;
+C 27 ; WX 0 ; N d27 ; B -445 -21 21 328 ;
+C 28 ; WX 0 ; N d28 ; B -456 -21 20 311 ;
+C 29 ; WX 0 ; N d29 ; B -466 -21 20 295 ;
+C 30 ; WX 0 ; N d30 ; B -476 -20 20 279 ;
+C 31 ; WX 0 ; N d31 ; B -484 -21 21 264 ;
+C 32 ; WX 0 ; N d32 ; B -491 -20 21 249 ;
+C 33 ; WX 0 ; N d33 ; B -499 -21 21 233 ;
+C 34 ; WX 0 ; N d34 ; B -507 -19 21 216 ;
+C 35 ; WX 0 ; N d35 ; B -514 -21 21 197 ;
+C 36 ; WX 0 ; N d36 ; B -520 -20 21 176 ;
+C 37 ; WX 0 ; N d37 ; B -527 -21 21 154 ;
+C 38 ; WX 0 ; N d38 ; B -533 -20 21 131 ;
+C 39 ; WX 0 ; N d39 ; B -537 -20 21 106 ;
+C 40 ; WX 0 ; N d40 ; B -541 -20 21 84 ;
+C 41 ; WX 0 ; N d41 ; B -543 -20 21 64 ;
+C 42 ; WX 0 ; N d42 ; B -544 -21 21 47 ;
+C 43 ; WX 0 ; N d43 ; B -543 -50 21 35 ;
+C 44 ; WX 0 ; N d44 ; B -541 -81 21 25 ;
+C 45 ; WX 0 ; N d45 ; B -536 -112 21 21 ;
+C 46 ; WX 0 ; N d46 ; B -529 -143 21 21 ;
+C 47 ; WX 0 ; N d47 ; B -521 -176 21 21 ;
+C 48 ; WX 0 ; N d48 ; B -510 -205 21 21 ;
+C 49 ; WX 0 ; N d49 ; B -497 -235 21 21 ;
+C 50 ; WX 0 ; N d50 ; B -483 -265 21 21 ;
+C 51 ; WX 0 ; N d51 ; B -468 -292 21 21 ;
+C 52 ; WX 0 ; N d52 ; B -452 -317 21 21 ;
+C 53 ; WX 0 ; N d53 ; B -434 -340 21 21 ;
+C 54 ; WX 0 ; N d54 ; B -417 -362 21 21 ;
+C 55 ; WX 0 ; N d55 ; B -398 -383 21 21 ;
+C 56 ; WX 0 ; N d56 ; B -380 -401 21 21 ;
+C 57 ; WX 0 ; N d57 ; B -362 -417 21 21 ;
+C 58 ; WX 0 ; N d58 ; B -345 -431 21 21 ;
+C 59 ; WX 0 ; N d59 ; B -328 -445 21 21 ;
+C 60 ; WX 0 ; N d60 ; B -312 -456 21 21 ;
+C 61 ; WX 0 ; N d61 ; B -295 -467 21 21 ;
+C 62 ; WX 0 ; N d62 ; B -280 -476 21 21 ;
+C 63 ; WX 0 ; N d63 ; B -264 -484 21 21 ;
+C 64 ; WX 0 ; N d64 ; B -249 -491 21 21 ;
+C 65 ; WX 0 ; N d65 ; B -233 -499 21 21 ;
+C 66 ; WX 0 ; N d66 ; B -216 -507 21 21 ;
+C 67 ; WX 0 ; N d67 ; B -197 -514 21 21 ;
+C 68 ; WX 0 ; N d68 ; B -176 -521 21 21 ;
+C 69 ; WX 0 ; N d69 ; B -154 -527 21 21 ;
+C 70 ; WX 0 ; N d70 ; B -131 -533 21 21 ;
+C 71 ; WX 0 ; N d71 ; B -107 -537 21 21 ;
+C 72 ; WX 0 ; N d72 ; B -84 -541 21 21 ;
+C 73 ; WX 0 ; N d73 ; B -65 -543 21 21 ;
+C 74 ; WX 0 ; N d74 ; B -47 -544 21 21 ;
+C 75 ; WX 0 ; N d75 ; B -35 -543 50 21 ;
+C 76 ; WX 0 ; N d76 ; B -25 -541 81 21 ;
+C 77 ; WX 0 ; N d77 ; B -21 -536 112 21 ;
+C 78 ; WX 0 ; N d78 ; B -20 -528 145 21 ;
+C 79 ; WX 0 ; N d79 ; B -21 -521 175 21 ;
+C 80 ; WX 0 ; N d80 ; B -20 -510 206 21 ;
+C 81 ; WX 0 ; N d81 ; B -20 -497 236 21 ;
+C 82 ; WX 0 ; N d82 ; B -20 -483 265 21 ;
+C 83 ; WX 0 ; N d83 ; B -20 -469 292 21 ;
+C 84 ; WX 0 ; N d84 ; B -21 -452 317 21 ;
+C 85 ; WX 0 ; N d85 ; B -20 -434 341 21 ;
+C 86 ; WX 0 ; N d86 ; B -20 -417 364 21 ;
+C 87 ; WX 0 ; N d87 ; B -20 -398 383 21 ;
+C 88 ; WX 0 ; N d88 ; B -20 -380 401 21 ;
+C 89 ; WX 0 ; N d89 ; B -20 -362 417 21 ;
+C 90 ; WX 0 ; N d90 ; B -20 -345 431 21 ;
+C 91 ; WX 0 ; N d91 ; B -20 -328 445 21 ;
+C 92 ; WX 0 ; N d92 ; B -20 -312 456 21 ;
+C 93 ; WX 0 ; N d93 ; B -20 -295 466 21 ;
+C 94 ; WX 0 ; N d94 ; B -20 -279 476 21 ;
+C 95 ; WX 0 ; N d95 ; B -20 -264 484 21 ;
+C 96 ; WX 0 ; N d96 ; B -20 -248 491 21 ;
+C 97 ; WX 0 ; N d97 ; B -20 -234 499 21 ;
+C 98 ; WX 0 ; N d98 ; B -20 -216 507 21 ;
+C 99 ; WX 0 ; N d99 ; B -20 -197 514 21 ;
+C 100 ; WX 0 ; N d100 ; B -20 -177 520 21 ;
+C 101 ; WX 0 ; N d101 ; B -20 -154 527 21 ;
+C 102 ; WX 0 ; N d102 ; B -20 -131 532 21 ;
+C 103 ; WX 0 ; N d103 ; B -20 -107 537 21 ;
+C 104 ; WX 0 ; N d104 ; B -20 -84 541 21 ;
+C 105 ; WX 0 ; N d105 ; B -20 -65 543 21 ;
+C 106 ; WX 0 ; N d106 ; B -20 -48 544 21 ;
+C 107 ; WX 0 ; N d107 ; B -20 -35 544 50 ;
+C 108 ; WX 0 ; N d108 ; B -20 -25 541 81 ;
+C 109 ; WX 0 ; N d109 ; B -20 -21 536 112 ;
+C 110 ; WX 0 ; N d110 ; B -20 -20 530 144 ;
+C 111 ; WX 0 ; N d111 ; B -20 -20 521 175 ;
+C 112 ; WX 0 ; N d112 ; B -20 -20 510 206 ;
+C 113 ; WX 0 ; N d113 ; B -20 -21 497 237 ;
+C 114 ; WX 0 ; N d114 ; B -20 -20 483 265 ;
+C 115 ; WX 0 ; N d115 ; B -20 -21 468 292 ;
+C 116 ; WX 0 ; N d116 ; B -20 -20 452 318 ;
+C 117 ; WX 0 ; N d117 ; B -20 -20 434 341 ;
+C 118 ; WX 0 ; N d118 ; B -20 -21 417 363 ;
+C 119 ; WX 0 ; N d119 ; B -20 -21 398 383 ;
+C 120 ; WX 0 ; N d120 ; B -21 -20 380 401 ;
+C 121 ; WX 0 ; N d121 ; B -20 -21 362 418 ;
+C 122 ; WX 0 ; N d122 ; B -21 -21 345 431 ;
+C 123 ; WX 0 ; N d123 ; B -20 -21 328 445 ;
+C 124 ; WX 0 ; N d124 ; B -20 -21 312 457 ;
+C 125 ; WX 0 ; N d125 ; B -20 -21 295 466 ;
+C 126 ; WX 0 ; N d126 ; B -20 -20 279 476 ;
+C 127 ; WX 0 ; N d127 ; B -20 -20 264 484 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xycirc10.afm b/macros/generic/diagrams/xypic/afm/xycirc10.afm
new file mode 100644
index 0000000000..5aaaca33b3
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xycirc10.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:15:36 2013
+FontName XYCIRC-Medium
+FullName XYCIRC
+FamilyName XYCIRC
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -22 -3220 2284 3221
+StartCharMetrics 128
+C 0 ; WX 29 ; N c0 ; B -21 -91 50 21 ;
+C 1 ; WX 71 ; N c1 ; B -22 -120 91 -50 ;
+C 2 ; WX 71 ; N c2 ; B -19 -121 92 -50 ;
+C 3 ; WX 29 ; N c3 ; B -21 -92 49 21 ;
+C 4 ; WX 29 ; N c4 ; B -21 -19 50 91 ;
+C 5 ; WX 71 ; N c5 ; B -21 50 92 121 ;
+C 6 ; WX 71 ; N c6 ; B -22 49 90 121 ;
+C 7 ; WX 29 ; N c7 ; B -20 -20 50 91 ;
+C 8 ; WX 59 ; N c8 ; B -20 -162 79 21 ;
+C 9 ; WX 141 ; N c9 ; B -21 -222 162 -121 ;
+C 10 ; WX 141 ; N c10 ; B -19 -220 163 -121 ;
+C 11 ; WX 59 ; N c11 ; B -22 -163 80 21 ;
+C 12 ; WX 59 ; N c12 ; B -21 -19 78 163 ;
+C 13 ; WX 141 ; N c13 ; B -21 120 163 221 ;
+C 14 ; WX 141 ; N c14 ; B -21 121 161 221 ;
+C 15 ; WX 59 ; N c15 ; B -22 -20 79 162 ;
+C 16 ; WX 88 ; N c16 ; B -20 -233 108 21 ;
+C 17 ; WX 212 ; N c17 ; B -21 -320 234 -192 ;
+C 18 ; WX 212 ; N c18 ; B -20 -322 234 -192 ;
+C 19 ; WX 88 ; N c19 ; B -22 -234 107 21 ;
+C 20 ; WX 88 ; N c20 ; B -21 -20 109 234 ;
+C 21 ; WX 212 ; N c21 ; B -21 191 234 321 ;
+C 22 ; WX 212 ; N c22 ; B -22 191 234 321 ;
+C 23 ; WX 88 ; N c23 ; B -20 -22 108 233 ;
+C 24 ; WX 117 ; N c24 ; B -20 -302 138 21 ;
+C 25 ; WX 283 ; N c25 ; B -21 -420 303 -261 ;
+C 26 ; WX 283 ; N c26 ; B -19 -422 304 -262 ;
+C 27 ; WX 117 ; N c27 ; B -22 -304 137 21 ;
+C 28 ; WX 117 ; N c28 ; B -21 -19 138 304 ;
+C 29 ; WX 283 ; N c29 ; B -21 261 304 421 ;
+C 30 ; WX 283 ; N c30 ; B -22 261 302 421 ;
+C 31 ; WX 117 ; N c31 ; B -20 -20 138 303 ;
+C 32 ; WX 146 ; N c32 ; B -21 -375 168 21 ;
+C 33 ; WX 354 ; N c33 ; B -21 -522 374 -332 ;
+C 34 ; WX 354 ; N c34 ; B -19 -520 375 -333 ;
+C 35 ; WX 146 ; N c35 ; B -22 -375 168 21 ;
+C 36 ; WX 146 ; N c36 ; B -21 -19 167 375 ;
+C 37 ; WX 354 ; N c37 ; B -21 332 375 522 ;
+C 38 ; WX 354 ; N c38 ; B -22 332 373 521 ;
+C 39 ; WX 146 ; N c39 ; B -22 -20 167 375 ;
+C 40 ; WX 176 ; N c40 ; B -20 -445 197 21 ;
+C 41 ; WX 424 ; N c41 ; B -21 -620 445 -403 ;
+C 42 ; WX 424 ; N c42 ; B -21 -621 446 -404 ;
+C 43 ; WX 176 ; N c43 ; B -21 -445 196 21 ;
+C 44 ; WX 176 ; N c44 ; B -20 -20 196 445 ;
+C 45 ; WX 424 ; N c45 ; B -21 403 446 621 ;
+C 46 ; WX 424 ; N c46 ; B -22 403 445 621 ;
+C 47 ; WX 176 ; N c47 ; B -20 -20 196 445 ;
+C 48 ; WX 205 ; N c48 ; B -20 -516 226 22 ;
+C 49 ; WX 495 ; N c49 ; B -21 -721 515 -473 ;
+C 50 ; WX 495 ; N c50 ; B -19 -720 515 -473 ;
+C 51 ; WX 205 ; N c51 ; B -20 -515 226 21 ;
+C 52 ; WX 205 ; N c52 ; B -20 -20 226 515 ;
+C 53 ; WX 495 ; N c53 ; B -21 473 516 722 ;
+C 54 ; WX 495 ; N c54 ; B -22 473 514 721 ;
+C 55 ; WX 205 ; N c55 ; B -21 -20 226 515 ;
+C 56 ; WX 234 ; N c56 ; B -20 -587 256 21 ;
+C 57 ; WX 566 ; N c57 ; B -21 -822 586 -545 ;
+C 58 ; WX 566 ; N c58 ; B -19 -820 587 -545 ;
+C 59 ; WX 234 ; N c59 ; B -21 -587 255 21 ;
+C 60 ; WX 234 ; N c60 ; B -20 -20 255 586 ;
+C 61 ; WX 566 ; N c61 ; B -21 544 587 822 ;
+C 62 ; WX 566 ; N c62 ; B -22 544 585 821 ;
+C 63 ; WX 234 ; N c63 ; B -22 -20 255 586 ;
+C 64 ; WX 293 ; N c64 ; B -21 -728 314 21 ;
+C 65 ; WX 707 ; N c65 ; B -21 -1020 728 -686 ;
+C 66 ; WX 707 ; N c66 ; B -20 -1022 728 -686 ;
+C 67 ; WX 293 ; N c67 ; B -21 -728 313 21 ;
+C 68 ; WX 293 ; N c68 ; B -20 -20 313 728 ;
+C 69 ; WX 707 ; N c69 ; B -21 687 729 1021 ;
+C 70 ; WX 707 ; N c70 ; B -22 686 728 1021 ;
+C 71 ; WX 293 ; N c71 ; B -20 -20 314 728 ;
+C 72 ; WX 351 ; N c72 ; B -20 -869 373 22 ;
+C 73 ; WX 849 ; N c73 ; B -21 -1220 869 -828 ;
+C 74 ; WX 849 ; N c74 ; B -19 -1220 870 -828 ;
+C 75 ; WX 351 ; N c75 ; B -21 -869 372 21 ;
+C 76 ; WX 351 ; N c76 ; B -20 -20 372 869 ;
+C 77 ; WX 849 ; N c77 ; B -21 827 870 1221 ;
+C 78 ; WX 849 ; N c78 ; B -22 827 869 1221 ;
+C 79 ; WX 351 ; N c79 ; B -20 -20 372 870 ;
+C 80 ; WX 410 ; N c80 ; B -21 -1010 432 21 ;
+C 81 ; WX 990 ; N c81 ; B -21 -1422 1010 -968 ;
+C 82 ; WX 990 ; N c82 ; B -19 -1420 1011 -969 ;
+C 83 ; WX 410 ; N c83 ; B -21 -1010 431 21 ;
+C 84 ; WX 410 ; N c84 ; B -20 -20 432 1011 ;
+C 85 ; WX 990 ; N c85 ; B -21 968 1011 1421 ;
+C 86 ; WX 990 ; N c86 ; B -21 969 1009 1421 ;
+C 87 ; WX 410 ; N c87 ; B -22 -20 431 1010 ;
+C 88 ; WX 469 ; N c88 ; B -20 -1153 489 22 ;
+C 89 ; WX 1131 ; N c89 ; B -21 -1620 1152 -1111 ;
+C 90 ; WX 1131 ; N c90 ; B -20 -1620 1152 -1110 ;
+C 91 ; WX 469 ; N c91 ; B -20 -1153 489 21 ;
+C 92 ; WX 469 ; N c92 ; B -20 -20 489 1152 ;
+C 93 ; WX 1131 ; N c93 ; B -22 1110 1152 1621 ;
+C 94 ; WX 1131 ; N c94 ; B -21 1110 1152 1621 ;
+C 95 ; WX 469 ; N c95 ; B -20 -21 489 1152 ;
+C 96 ; WX 586 ; N c96 ; B -20 -1435 607 21 ;
+C 97 ; WX 1414 ; N c97 ; B -21 -2021 1435 -1393 ;
+C 98 ; WX 1414 ; N c98 ; B -20 -2021 1435 -1393 ;
+C 99 ; WX 586 ; N c99 ; B -21 -1435 606 21 ;
+C 100 ; WX 586 ; N c100 ; B -20 -20 606 1436 ;
+C 101 ; WX 1414 ; N c101 ; B -21 1394 1436 2021 ;
+C 102 ; WX 1414 ; N c102 ; B -21 1394 1435 2021 ;
+C 103 ; WX 586 ; N c103 ; B -21 -20 607 1435 ;
+C 104 ; WX 703 ; N c104 ; B -20 -1719 723 21 ;
+C 105 ; WX 1697 ; N c105 ; B -20 -2420 1718 -1677 ;
+C 106 ; WX 1697 ; N c106 ; B -20 -2421 1718 -1677 ;
+C 107 ; WX 703 ; N c107 ; B -20 -1719 723 21 ;
+C 108 ; WX 703 ; N c108 ; B -20 -20 723 1719 ;
+C 109 ; WX 1697 ; N c109 ; B -20 1677 1718 2420 ;
+C 110 ; WX 1697 ; N c110 ; B -20 1677 1718 2421 ;
+C 111 ; WX 703 ; N c111 ; B -20 -20 724 1718 ;
+C 112 ; WX 820 ; N c112 ; B -20 -2000 842 22 ;
+C 113 ; WX 1980 ; N c113 ; B -20 -2820 2000 -1959 ;
+C 114 ; WX 1980 ; N c114 ; B -20 -2820 2000 -1959 ;
+C 115 ; WX 820 ; N c115 ; B -21 -2000 841 21 ;
+C 116 ; WX 820 ; N c116 ; B -20 -20 841 2001 ;
+C 117 ; WX 1980 ; N c117 ; B -20 1959 2000 2821 ;
+C 118 ; WX 1980 ; N c118 ; B -21 1960 2000 2821 ;
+C 119 ; WX 820 ; N c119 ; B -20 -20 841 2000 ;
+C 120 ; WX 937 ; N c120 ; B -21 -2284 958 20 ;
+C 121 ; WX 2263 ; N c121 ; B -20 -3220 2283 -2242 ;
+C 122 ; WX 2263 ; N c122 ; B -20 -3220 2284 -2242 ;
+C 123 ; WX 937 ; N c123 ; B -20 -2283 958 20 ;
+C 124 ; WX 937 ; N c124 ; B -20 -20 958 2284 ;
+C 125 ; WX 2263 ; N c125 ; B -21 2242 2283 3221 ;
+C 126 ; WX 2263 ; N c126 ; B -21 2242 2284 3221 ;
+C 127 ; WX 937 ; N c127 ; B -20 -20 958 2284 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xycmat10.afm b/macros/generic/diagrams/xypic/afm/xycmat10.afm
new file mode 100644
index 0000000000..bff59bb49a
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xycmat10.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:16:00 2013
+FontName XYCMAT-Medium
+FullName XYCMAT
+FamilyName XYCMAT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -341 -341 341 341
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -20 -46 340 50 ;
+C 1 ; WX 0 ; N d1 ; B -20 -35 341 55 ;
+C 2 ; WX 0 ; N d2 ; B -20 -24 341 60 ;
+C 3 ; WX 0 ; N d3 ; B -20 -21 341 67 ;
+C 4 ; WX 0 ; N d4 ; B -20 -21 340 74 ;
+C 5 ; WX 0 ; N d5 ; B -20 -20 338 82 ;
+C 6 ; WX 0 ; N d6 ; B -20 -21 336 91 ;
+C 7 ; WX 0 ; N d7 ; B -20 -21 334 102 ;
+C 8 ; WX 0 ; N d8 ; B -20 -20 330 113 ;
+C 9 ; WX 0 ; N d9 ; B -20 -20 326 126 ;
+C 10 ; WX 0 ; N d10 ; B -21 -20 319 140 ;
+C 11 ; WX 0 ; N d11 ; B -21 -21 312 155 ;
+C 12 ; WX 0 ; N d12 ; B -20 -20 303 171 ;
+C 13 ; WX 0 ; N d13 ; B -21 -21 294 188 ;
+C 14 ; WX 0 ; N d14 ; B -20 -20 283 205 ;
+C 15 ; WX 0 ; N d15 ; B -20 -21 271 221 ;
+C 16 ; WX 0 ; N d16 ; B -21 -20 258 236 ;
+C 17 ; WX 0 ; N d17 ; B -21 -20 244 250 ;
+C 18 ; WX 0 ; N d18 ; B -21 -21 230 263 ;
+C 19 ; WX 0 ; N d19 ; B -21 -21 215 276 ;
+C 20 ; WX 0 ; N d20 ; B -21 -21 200 286 ;
+C 21 ; WX 0 ; N d21 ; B -20 -21 184 296 ;
+C 22 ; WX 0 ; N d22 ; B -21 -21 169 304 ;
+C 23 ; WX 0 ; N d23 ; B -21 -20 156 311 ;
+C 24 ; WX 0 ; N d24 ; B -23 -21 141 317 ;
+C 25 ; WX 0 ; N d25 ; B -26 -21 127 323 ;
+C 26 ; WX 0 ; N d26 ; B -28 -20 113 328 ;
+C 27 ; WX 0 ; N d27 ; B -32 -21 100 331 ;
+C 28 ; WX 0 ; N d28 ; B -34 -21 88 334 ;
+C 29 ; WX 0 ; N d29 ; B -38 -20 77 336 ;
+C 30 ; WX 0 ; N d30 ; B -42 -20 66 338 ;
+C 31 ; WX 0 ; N d31 ; B -46 -20 56 339 ;
+C 32 ; WX 0 ; N d32 ; B -50 -21 46 340 ;
+C 33 ; WX 0 ; N d33 ; B -55 -21 35 340 ;
+C 34 ; WX 0 ; N d34 ; B -60 -21 24 341 ;
+C 35 ; WX 0 ; N d35 ; B -68 -20 21 341 ;
+C 36 ; WX 0 ; N d36 ; B -75 -20 21 340 ;
+C 37 ; WX 0 ; N d37 ; B -83 -20 21 339 ;
+C 38 ; WX 0 ; N d38 ; B -91 -21 21 336 ;
+C 39 ; WX 0 ; N d39 ; B -102 -21 21 334 ;
+C 40 ; WX 0 ; N d40 ; B -114 -20 21 330 ;
+C 41 ; WX 0 ; N d41 ; B -127 -20 21 325 ;
+C 42 ; WX 0 ; N d42 ; B -139 -20 21 319 ;
+C 43 ; WX 0 ; N d43 ; B -155 -20 21 312 ;
+C 44 ; WX 0 ; N d44 ; B -171 -20 20 303 ;
+C 45 ; WX 0 ; N d45 ; B -188 -19 21 294 ;
+C 46 ; WX 0 ; N d46 ; B -205 -20 21 282 ;
+C 47 ; WX 0 ; N d47 ; B -221 -21 21 271 ;
+C 48 ; WX 0 ; N d48 ; B -236 -19 21 258 ;
+C 49 ; WX 0 ; N d49 ; B -250 -20 21 244 ;
+C 50 ; WX 0 ; N d50 ; B -263 -20 21 229 ;
+C 51 ; WX 0 ; N d51 ; B -276 -21 21 215 ;
+C 52 ; WX 0 ; N d52 ; B -286 -19 21 200 ;
+C 53 ; WX 0 ; N d53 ; B -296 -20 21 184 ;
+C 54 ; WX 0 ; N d54 ; B -304 -21 21 170 ;
+C 55 ; WX 0 ; N d55 ; B -311 -21 21 155 ;
+C 56 ; WX 0 ; N d56 ; B -317 -23 21 140 ;
+C 57 ; WX 0 ; N d57 ; B -323 -25 21 127 ;
+C 58 ; WX 0 ; N d58 ; B -327 -29 21 114 ;
+C 59 ; WX 0 ; N d59 ; B -331 -31 21 101 ;
+C 60 ; WX 0 ; N d60 ; B -333 -34 21 88 ;
+C 61 ; WX 0 ; N d61 ; B -336 -38 21 78 ;
+C 62 ; WX 0 ; N d62 ; B -337 -42 21 66 ;
+C 63 ; WX 0 ; N d63 ; B -339 -46 21 56 ;
+C 64 ; WX 0 ; N d64 ; B -340 -50 21 46 ;
+C 65 ; WX 0 ; N d65 ; B -341 -55 21 35 ;
+C 66 ; WX 0 ; N d66 ; B -341 -60 21 23 ;
+C 67 ; WX 0 ; N d67 ; B -341 -67 21 21 ;
+C 68 ; WX 0 ; N d68 ; B -340 -74 21 21 ;
+C 69 ; WX 0 ; N d69 ; B -338 -82 21 21 ;
+C 70 ; WX 0 ; N d70 ; B -336 -92 21 21 ;
+C 71 ; WX 0 ; N d71 ; B -334 -102 21 21 ;
+C 72 ; WX 0 ; N d72 ; B -330 -114 21 21 ;
+C 73 ; WX 0 ; N d73 ; B -325 -126 21 21 ;
+C 74 ; WX 0 ; N d74 ; B -319 -140 21 21 ;
+C 75 ; WX 0 ; N d75 ; B -312 -155 21 21 ;
+C 76 ; WX 0 ; N d76 ; B -303 -172 21 21 ;
+C 77 ; WX 0 ; N d77 ; B -294 -187 21 21 ;
+C 78 ; WX 0 ; N d78 ; B -283 -205 21 21 ;
+C 79 ; WX 0 ; N d79 ; B -271 -221 21 21 ;
+C 80 ; WX 0 ; N d80 ; B -258 -236 21 21 ;
+C 81 ; WX 0 ; N d81 ; B -244 -250 21 21 ;
+C 82 ; WX 0 ; N d82 ; B -230 -264 21 21 ;
+C 83 ; WX 0 ; N d83 ; B -215 -276 21 21 ;
+C 84 ; WX 0 ; N d84 ; B -200 -285 21 21 ;
+C 85 ; WX 0 ; N d85 ; B -184 -296 21 21 ;
+C 86 ; WX 0 ; N d86 ; B -169 -304 21 21 ;
+C 87 ; WX 0 ; N d87 ; B -156 -311 21 21 ;
+C 88 ; WX 0 ; N d88 ; B -141 -317 23 21 ;
+C 89 ; WX 0 ; N d89 ; B -127 -323 26 21 ;
+C 90 ; WX 0 ; N d90 ; B -113 -327 28 21 ;
+C 91 ; WX 0 ; N d91 ; B -100 -331 31 21 ;
+C 92 ; WX 0 ; N d92 ; B -88 -334 34 21 ;
+C 93 ; WX 0 ; N d93 ; B -77 -336 38 21 ;
+C 94 ; WX 0 ; N d94 ; B -66 -337 43 21 ;
+C 95 ; WX 0 ; N d95 ; B -56 -339 46 21 ;
+C 96 ; WX 0 ; N d96 ; B -46 -340 50 21 ;
+C 97 ; WX 0 ; N d97 ; B -35 -341 55 21 ;
+C 98 ; WX 0 ; N d98 ; B -24 -341 60 21 ;
+C 99 ; WX 0 ; N d99 ; B -20 -341 68 21 ;
+C 100 ; WX 0 ; N d100 ; B -20 -340 75 21 ;
+C 101 ; WX 0 ; N d101 ; B -20 -338 82 21 ;
+C 102 ; WX 0 ; N d102 ; B -20 -336 91 21 ;
+C 103 ; WX 0 ; N d103 ; B -20 -334 102 21 ;
+C 104 ; WX 0 ; N d104 ; B -20 -330 113 21 ;
+C 105 ; WX 0 ; N d105 ; B -20 -325 126 21 ;
+C 106 ; WX 0 ; N d106 ; B -20 -319 140 21 ;
+C 107 ; WX 0 ; N d107 ; B -21 -312 156 21 ;
+C 108 ; WX 0 ; N d108 ; B -20 -302 171 21 ;
+C 109 ; WX 0 ; N d109 ; B -20 -293 188 21 ;
+C 110 ; WX 0 ; N d110 ; B -20 -282 205 21 ;
+C 111 ; WX 0 ; N d111 ; B -20 -271 221 21 ;
+C 112 ; WX 0 ; N d112 ; B -20 -258 236 21 ;
+C 113 ; WX 0 ; N d113 ; B -20 -245 250 21 ;
+C 114 ; WX 0 ; N d114 ; B -20 -230 263 21 ;
+C 115 ; WX 0 ; N d115 ; B -20 -215 276 21 ;
+C 116 ; WX 0 ; N d116 ; B -20 -200 286 21 ;
+C 117 ; WX 0 ; N d117 ; B -20 -184 296 21 ;
+C 118 ; WX 0 ; N d118 ; B -20 -169 304 21 ;
+C 119 ; WX 0 ; N d119 ; B -20 -154 312 22 ;
+C 120 ; WX 0 ; N d120 ; B -20 -141 318 23 ;
+C 121 ; WX 0 ; N d121 ; B -20 -127 323 25 ;
+C 122 ; WX 0 ; N d122 ; B -20 -113 328 28 ;
+C 123 ; WX 0 ; N d123 ; B -20 -100 331 31 ;
+C 124 ; WX 0 ; N d124 ; B -20 -88 334 34 ;
+C 125 ; WX 0 ; N d125 ; B -20 -77 336 38 ;
+C 126 ; WX 0 ; N d126 ; B -20 -66 337 42 ;
+C 127 ; WX 0 ; N d127 ; B -20 -56 338 46 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xycmat11.afm b/macros/generic/diagrams/xypic/afm/xycmat11.afm
new file mode 100644
index 0000000000..aa47818fa1
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xycmat11.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:16:06 2013
+FontName XYCMAT-Medium
+FullName XYCMAT
+FamilyName XYCMAT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -339 -339 339 339
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -18 -44 338 48 ;
+C 1 ; WX 0 ; N d1 ; B -18 -33 338 53 ;
+C 2 ; WX 0 ; N d2 ; B -18 -21 339 58 ;
+C 3 ; WX 0 ; N d3 ; B -18 -19 339 65 ;
+C 4 ; WX 0 ; N d4 ; B -18 -19 338 72 ;
+C 5 ; WX 0 ; N d5 ; B -18 -18 336 80 ;
+C 6 ; WX 0 ; N d6 ; B -18 -18 334 89 ;
+C 7 ; WX 0 ; N d7 ; B -18 -19 332 100 ;
+C 8 ; WX 0 ; N d8 ; B -18 -18 328 111 ;
+C 9 ; WX 0 ; N d9 ; B -18 -18 323 124 ;
+C 10 ; WX 0 ; N d10 ; B -18 -18 317 138 ;
+C 11 ; WX 0 ; N d11 ; B -18 -18 310 153 ;
+C 12 ; WX 0 ; N d12 ; B -18 -18 301 169 ;
+C 13 ; WX 0 ; N d13 ; B -19 -19 291 186 ;
+C 14 ; WX 0 ; N d14 ; B -19 -18 280 203 ;
+C 15 ; WX 0 ; N d15 ; B -19 -18 269 218 ;
+C 16 ; WX 0 ; N d16 ; B -19 -18 256 234 ;
+C 17 ; WX 0 ; N d17 ; B -19 -18 242 248 ;
+C 18 ; WX 0 ; N d18 ; B -19 -18 227 261 ;
+C 19 ; WX 0 ; N d19 ; B -19 -18 213 274 ;
+C 20 ; WX 0 ; N d20 ; B -18 -18 197 284 ;
+C 21 ; WX 0 ; N d21 ; B -18 -18 183 294 ;
+C 22 ; WX 0 ; N d22 ; B -19 -19 167 302 ;
+C 23 ; WX 0 ; N d23 ; B -20 -19 154 309 ;
+C 24 ; WX 0 ; N d24 ; B -21 -18 138 315 ;
+C 25 ; WX 0 ; N d25 ; B -23 -18 125 321 ;
+C 26 ; WX 0 ; N d26 ; B -27 -18 111 325 ;
+C 27 ; WX 0 ; N d27 ; B -30 -18 98 329 ;
+C 28 ; WX 0 ; N d28 ; B -33 -18 87 332 ;
+C 29 ; WX 0 ; N d29 ; B -37 -18 76 334 ;
+C 30 ; WX 0 ; N d30 ; B -41 -18 65 335 ;
+C 31 ; WX 0 ; N d31 ; B -44 -19 55 337 ;
+C 32 ; WX 0 ; N d32 ; B -49 -19 44 338 ;
+C 33 ; WX 0 ; N d33 ; B -53 -18 33 338 ;
+C 34 ; WX 0 ; N d34 ; B -59 -18 21 339 ;
+C 35 ; WX 0 ; N d35 ; B -65 -19 19 339 ;
+C 36 ; WX 0 ; N d36 ; B -73 -18 19 338 ;
+C 37 ; WX 0 ; N d37 ; B -80 -18 19 336 ;
+C 38 ; WX 0 ; N d38 ; B -90 -18 19 335 ;
+C 39 ; WX 0 ; N d39 ; B -100 -18 19 332 ;
+C 40 ; WX 0 ; N d40 ; B -112 -18 19 328 ;
+C 41 ; WX 0 ; N d41 ; B -125 -19 19 323 ;
+C 42 ; WX 0 ; N d42 ; B -138 -19 19 317 ;
+C 43 ; WX 0 ; N d43 ; B -152 -18 18 310 ;
+C 44 ; WX 0 ; N d44 ; B -168 -19 19 301 ;
+C 45 ; WX 0 ; N d45 ; B -186 -19 19 291 ;
+C 46 ; WX 0 ; N d46 ; B -203 -18 19 281 ;
+C 47 ; WX 0 ; N d47 ; B -219 -18 19 269 ;
+C 48 ; WX 0 ; N d48 ; B -234 -19 19 256 ;
+C 49 ; WX 0 ; N d49 ; B -248 -18 19 242 ;
+C 50 ; WX 0 ; N d50 ; B -261 -18 19 227 ;
+C 51 ; WX 0 ; N d51 ; B -273 -18 19 213 ;
+C 52 ; WX 0 ; N d52 ; B -284 -18 19 197 ;
+C 53 ; WX 0 ; N d53 ; B -294 -19 19 183 ;
+C 54 ; WX 0 ; N d54 ; B -302 -19 19 167 ;
+C 55 ; WX 0 ; N d55 ; B -309 -19 19 153 ;
+C 56 ; WX 0 ; N d56 ; B -315 -21 19 138 ;
+C 57 ; WX 0 ; N d57 ; B -321 -24 19 125 ;
+C 58 ; WX 0 ; N d58 ; B -325 -26 19 111 ;
+C 59 ; WX 0 ; N d59 ; B -329 -29 19 98 ;
+C 60 ; WX 0 ; N d60 ; B -331 -32 19 87 ;
+C 61 ; WX 0 ; N d61 ; B -335 -36 19 75 ;
+C 62 ; WX 0 ; N d62 ; B -334 -40 19 64 ;
+C 63 ; WX 0 ; N d63 ; B -337 -44 19 54 ;
+C 64 ; WX 0 ; N d64 ; B -338 -48 19 44 ;
+C 65 ; WX 0 ; N d65 ; B -338 -53 19 33 ;
+C 66 ; WX 0 ; N d66 ; B -339 -59 19 21 ;
+C 67 ; WX 0 ; N d67 ; B -339 -65 19 19 ;
+C 68 ; WX 0 ; N d68 ; B -338 -73 19 19 ;
+C 69 ; WX 0 ; N d69 ; B -336 -80 19 19 ;
+C 70 ; WX 0 ; N d70 ; B -334 -89 19 19 ;
+C 71 ; WX 0 ; N d71 ; B -332 -100 19 19 ;
+C 72 ; WX 0 ; N d72 ; B -328 -111 19 19 ;
+C 73 ; WX 0 ; N d73 ; B -323 -125 19 19 ;
+C 74 ; WX 0 ; N d74 ; B -317 -138 19 19 ;
+C 75 ; WX 0 ; N d75 ; B -310 -153 19 19 ;
+C 76 ; WX 0 ; N d76 ; B -301 -169 19 19 ;
+C 77 ; WX 0 ; N d77 ; B -290 -186 19 19 ;
+C 78 ; WX 0 ; N d78 ; B -281 -203 19 19 ;
+C 79 ; WX 0 ; N d79 ; B -269 -218 19 19 ;
+C 80 ; WX 0 ; N d80 ; B -256 -234 19 19 ;
+C 81 ; WX 0 ; N d81 ; B -242 -248 19 19 ;
+C 82 ; WX 0 ; N d82 ; B -227 -261 19 19 ;
+C 83 ; WX 0 ; N d83 ; B -213 -273 19 20 ;
+C 84 ; WX 0 ; N d84 ; B -196 -284 19 19 ;
+C 85 ; WX 0 ; N d85 ; B -182 -294 19 19 ;
+C 86 ; WX 0 ; N d86 ; B -166 -302 19 19 ;
+C 87 ; WX 0 ; N d87 ; B -153 -310 20 19 ;
+C 88 ; WX 0 ; N d88 ; B -138 -315 21 19 ;
+C 89 ; WX 0 ; N d89 ; B -125 -321 23 19 ;
+C 90 ; WX 0 ; N d90 ; B -111 -325 27 19 ;
+C 91 ; WX 0 ; N d91 ; B -98 -329 30 20 ;
+C 92 ; WX 0 ; N d92 ; B -87 -331 33 20 ;
+C 93 ; WX 0 ; N d93 ; B -75 -334 37 19 ;
+C 94 ; WX 0 ; N d94 ; B -64 -334 40 20 ;
+C 95 ; WX 0 ; N d95 ; B -54 -337 45 19 ;
+C 96 ; WX 0 ; N d96 ; B -45 -338 49 19 ;
+C 97 ; WX 0 ; N d97 ; B -33 -338 54 19 ;
+C 98 ; WX 0 ; N d98 ; B -21 -339 59 19 ;
+C 99 ; WX 0 ; N d99 ; B -18 -339 65 19 ;
+C 100 ; WX 0 ; N d100 ; B -18 -338 72 19 ;
+C 101 ; WX 0 ; N d101 ; B -18 -336 80 19 ;
+C 102 ; WX 0 ; N d102 ; B -18 -334 90 19 ;
+C 103 ; WX 0 ; N d103 ; B -19 -332 100 19 ;
+C 104 ; WX 0 ; N d104 ; B -18 -328 111 19 ;
+C 105 ; WX 0 ; N d105 ; B -18 -323 125 19 ;
+C 106 ; WX 0 ; N d106 ; B -18 -317 138 19 ;
+C 107 ; WX 0 ; N d107 ; B -19 -310 153 19 ;
+C 108 ; WX 0 ; N d108 ; B -19 -301 169 19 ;
+C 109 ; WX 0 ; N d109 ; B -19 -290 186 19 ;
+C 110 ; WX 0 ; N d110 ; B -18 -281 203 19 ;
+C 111 ; WX 0 ; N d111 ; B -18 -269 219 20 ;
+C 112 ; WX 0 ; N d112 ; B -18 -256 234 19 ;
+C 113 ; WX 0 ; N d113 ; B -18 -242 248 20 ;
+C 114 ; WX 0 ; N d114 ; B -18 -227 261 19 ;
+C 115 ; WX 0 ; N d115 ; B -18 -213 273 19 ;
+C 116 ; WX 0 ; N d116 ; B -18 -196 284 19 ;
+C 117 ; WX 0 ; N d117 ; B -18 -182 294 19 ;
+C 118 ; WX 0 ; N d118 ; B -18 -166 302 19 ;
+C 119 ; WX 0 ; N d119 ; B -18 -153 309 20 ;
+C 120 ; WX 0 ; N d120 ; B -18 -138 315 21 ;
+C 121 ; WX 0 ; N d121 ; B -18 -125 321 23 ;
+C 122 ; WX 0 ; N d122 ; B -18 -112 326 26 ;
+C 123 ; WX 0 ; N d123 ; B -18 -98 329 29 ;
+C 124 ; WX 0 ; N d124 ; B -18 -86 331 32 ;
+C 125 ; WX 0 ; N d125 ; B -18 -76 334 36 ;
+C 126 ; WX 0 ; N d126 ; B -18 -64 335 40 ;
+C 127 ; WX 0 ; N d127 ; B -18 -54 337 44 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xycmat12.afm b/macros/generic/diagrams/xypic/afm/xycmat12.afm
new file mode 100644
index 0000000000..096489eb16
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xycmat12.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:16:12 2013
+FontName XYCMAT-Medium
+FullName XYCMAT
+FamilyName XYCMAT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -337 -337 337 338
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -18 -43 337 46 ;
+C 1 ; WX 0 ; N d1 ; B -18 -32 337 51 ;
+C 2 ; WX 0 ; N d2 ; B -18 -19 337 57 ;
+C 3 ; WX 0 ; N d3 ; B -17 -17 337 63 ;
+C 4 ; WX 0 ; N d4 ; B -17 -17 337 70 ;
+C 5 ; WX 0 ; N d5 ; B -18 -18 335 79 ;
+C 6 ; WX 0 ; N d6 ; B -18 -18 333 88 ;
+C 7 ; WX 0 ; N d7 ; B -18 -18 331 98 ;
+C 8 ; WX 0 ; N d8 ; B -18 -18 326 110 ;
+C 9 ; WX 0 ; N d9 ; B -17 -17 322 122 ;
+C 10 ; WX 0 ; N d10 ; B -17 -17 315 137 ;
+C 11 ; WX 0 ; N d11 ; B -18 -17 309 151 ;
+C 12 ; WX 0 ; N d12 ; B -18 -17 300 168 ;
+C 13 ; WX 0 ; N d13 ; B -17 -17 291 184 ;
+C 14 ; WX 0 ; N d14 ; B -17 -17 280 201 ;
+C 15 ; WX 0 ; N d15 ; B -17 -17 267 217 ;
+C 16 ; WX 0 ; N d16 ; B -17 -18 255 232 ;
+C 17 ; WX 0 ; N d17 ; B -17 -17 241 247 ;
+C 18 ; WX 0 ; N d18 ; B -18 -17 227 260 ;
+C 19 ; WX 0 ; N d19 ; B -17 -18 211 272 ;
+C 20 ; WX 0 ; N d20 ; B -17 -17 196 282 ;
+C 21 ; WX 0 ; N d21 ; B -17 -18 182 293 ;
+C 22 ; WX 0 ; N d22 ; B -17 -18 166 300 ;
+C 23 ; WX 0 ; N d23 ; B -19 -18 152 308 ;
+C 24 ; WX 0 ; N d24 ; B -20 -18 137 314 ;
+C 25 ; WX 0 ; N d25 ; B -21 -18 124 319 ;
+C 26 ; WX 0 ; N d26 ; B -25 -18 111 323 ;
+C 27 ; WX 0 ; N d27 ; B -27 -17 98 327 ;
+C 28 ; WX 0 ; N d28 ; B -32 -17 85 330 ;
+C 29 ; WX 0 ; N d29 ; B -34 -18 73 333 ;
+C 30 ; WX 0 ; N d30 ; B -39 -17 64 334 ;
+C 31 ; WX 0 ; N d31 ; B -42 -17 52 336 ;
+C 32 ; WX 0 ; N d32 ; B -47 -17 43 336 ;
+C 33 ; WX 0 ; N d33 ; B -52 -17 31 337 ;
+C 34 ; WX 0 ; N d34 ; B -57 -17 19 338 ;
+C 35 ; WX 0 ; N d35 ; B -63 -18 17 337 ;
+C 36 ; WX 0 ; N d36 ; B -70 -18 17 337 ;
+C 37 ; WX 0 ; N d37 ; B -80 -17 18 336 ;
+C 38 ; WX 0 ; N d38 ; B -88 -18 18 333 ;
+C 39 ; WX 0 ; N d39 ; B -99 -18 17 331 ;
+C 40 ; WX 0 ; N d40 ; B -110 -18 18 326 ;
+C 41 ; WX 0 ; N d41 ; B -122 -17 18 322 ;
+C 42 ; WX 0 ; N d42 ; B -136 -17 18 315 ;
+C 43 ; WX 0 ; N d43 ; B -151 -18 17 308 ;
+C 44 ; WX 0 ; N d44 ; B -168 -18 17 300 ;
+C 45 ; WX 0 ; N d45 ; B -184 -17 17 290 ;
+C 46 ; WX 0 ; N d46 ; B -201 -17 18 279 ;
+C 47 ; WX 0 ; N d47 ; B -218 -17 17 268 ;
+C 48 ; WX 0 ; N d48 ; B -232 -18 17 254 ;
+C 49 ; WX 0 ; N d49 ; B -246 -17 17 240 ;
+C 50 ; WX 0 ; N d50 ; B -260 -17 17 226 ;
+C 51 ; WX 0 ; N d51 ; B -273 -17 18 211 ;
+C 52 ; WX 0 ; N d52 ; B -282 -17 18 196 ;
+C 53 ; WX 0 ; N d53 ; B -293 -17 18 181 ;
+C 54 ; WX 0 ; N d54 ; B -300 -17 17 166 ;
+C 55 ; WX 0 ; N d55 ; B -308 -17 17 151 ;
+C 56 ; WX 0 ; N d56 ; B -314 -19 17 137 ;
+C 57 ; WX 0 ; N d57 ; B -320 -21 17 123 ;
+C 58 ; WX 0 ; N d58 ; B -323 -24 18 110 ;
+C 59 ; WX 0 ; N d59 ; B -328 -27 17 98 ;
+C 60 ; WX 0 ; N d60 ; B -331 -31 17 85 ;
+C 61 ; WX 0 ; N d61 ; B -331 -34 17 73 ;
+C 62 ; WX 0 ; N d62 ; B -335 -38 17 63 ;
+C 63 ; WX 0 ; N d63 ; B -336 -42 18 52 ;
+C 64 ; WX 0 ; N d64 ; B -337 -47 17 43 ;
+C 65 ; WX 0 ; N d65 ; B -337 -51 17 31 ;
+C 66 ; WX 0 ; N d66 ; B -337 -57 17 19 ;
+C 67 ; WX 0 ; N d67 ; B -337 -63 17 17 ;
+C 68 ; WX 0 ; N d68 ; B -337 -70 17 17 ;
+C 69 ; WX 0 ; N d69 ; B -335 -80 17 18 ;
+C 70 ; WX 0 ; N d70 ; B -333 -89 18 18 ;
+C 71 ; WX 0 ; N d71 ; B -331 -98 18 17 ;
+C 72 ; WX 0 ; N d72 ; B -326 -109 18 18 ;
+C 73 ; WX 0 ; N d73 ; B -322 -122 17 17 ;
+C 74 ; WX 0 ; N d74 ; B -315 -136 17 18 ;
+C 75 ; WX 0 ; N d75 ; B -309 -151 17 17 ;
+C 76 ; WX 0 ; N d76 ; B -300 -167 18 18 ;
+C 77 ; WX 0 ; N d77 ; B -290 -184 17 18 ;
+C 78 ; WX 0 ; N d78 ; B -280 -201 17 18 ;
+C 79 ; WX 0 ; N d79 ; B -268 -217 17 18 ;
+C 80 ; WX 0 ; N d80 ; B -255 -232 17 18 ;
+C 81 ; WX 0 ; N d81 ; B -241 -246 17 18 ;
+C 82 ; WX 0 ; N d82 ; B -227 -260 18 18 ;
+C 83 ; WX 0 ; N d83 ; B -211 -272 18 18 ;
+C 84 ; WX 0 ; N d84 ; B -196 -282 18 18 ;
+C 85 ; WX 0 ; N d85 ; B -182 -293 18 18 ;
+C 86 ; WX 0 ; N d86 ; B -166 -300 17 18 ;
+C 87 ; WX 0 ; N d87 ; B -151 -307 19 18 ;
+C 88 ; WX 0 ; N d88 ; B -137 -314 19 18 ;
+C 89 ; WX 0 ; N d89 ; B -124 -319 22 18 ;
+C 90 ; WX 0 ; N d90 ; B -111 -323 25 18 ;
+C 91 ; WX 0 ; N d91 ; B -97 -327 28 18 ;
+C 92 ; WX 0 ; N d92 ; B -86 -330 32 18 ;
+C 93 ; WX 0 ; N d93 ; B -73 -333 35 18 ;
+C 94 ; WX 0 ; N d94 ; B -64 -334 38 18 ;
+C 95 ; WX 0 ; N d95 ; B -51 -336 43 18 ;
+C 96 ; WX 0 ; N d96 ; B -43 -336 47 18 ;
+C 97 ; WX 0 ; N d97 ; B -31 -337 52 18 ;
+C 98 ; WX 0 ; N d98 ; B -19 -337 58 18 ;
+C 99 ; WX 0 ; N d99 ; B -18 -337 63 17 ;
+C 100 ; WX 0 ; N d100 ; B -18 -336 70 17 ;
+C 101 ; WX 0 ; N d101 ; B -18 -336 79 17 ;
+C 102 ; WX 0 ; N d102 ; B -18 -333 88 17 ;
+C 103 ; WX 0 ; N d103 ; B -17 -331 99 17 ;
+C 104 ; WX 0 ; N d104 ; B -17 -326 110 17 ;
+C 105 ; WX 0 ; N d105 ; B -18 -321 122 17 ;
+C 106 ; WX 0 ; N d106 ; B -18 -315 136 17 ;
+C 107 ; WX 0 ; N d107 ; B -18 -308 151 17 ;
+C 108 ; WX 0 ; N d108 ; B -18 -299 168 18 ;
+C 109 ; WX 0 ; N d109 ; B -18 -290 184 18 ;
+C 110 ; WX 0 ; N d110 ; B -18 -279 201 17 ;
+C 111 ; WX 0 ; N d111 ; B -18 -267 217 17 ;
+C 112 ; WX 0 ; N d112 ; B -18 -254 232 17 ;
+C 113 ; WX 0 ; N d113 ; B -17 -240 247 17 ;
+C 114 ; WX 0 ; N d114 ; B -18 -227 260 18 ;
+C 115 ; WX 0 ; N d115 ; B -17 -211 272 17 ;
+C 116 ; WX 0 ; N d116 ; B -17 -196 282 17 ;
+C 117 ; WX 0 ; N d117 ; B -17 -181 292 17 ;
+C 118 ; WX 0 ; N d118 ; B -17 -166 300 17 ;
+C 119 ; WX 0 ; N d119 ; B -17 -151 308 18 ;
+C 120 ; WX 0 ; N d120 ; B -17 -137 315 19 ;
+C 121 ; WX 0 ; N d121 ; B -17 -124 319 21 ;
+C 122 ; WX 0 ; N d122 ; B -17 -110 323 25 ;
+C 123 ; WX 0 ; N d123 ; B -18 -98 327 27 ;
+C 124 ; WX 0 ; N d124 ; B -18 -86 331 32 ;
+C 125 ; WX 0 ; N d125 ; B -17 -73 332 34 ;
+C 126 ; WX 0 ; N d126 ; B -18 -63 335 38 ;
+C 127 ; WX 0 ; N d127 ; B -18 -52 336 42 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xycmbt10.afm b/macros/generic/diagrams/xypic/afm/xycmbt10.afm
new file mode 100644
index 0000000000..eb703312aa
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xycmbt10.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:16:03 2013
+FontName XYCMBT-Medium
+FullName XYCMBT
+FamilyName XYCMBT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -341 -341 341 341
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -67 -20 43 338 ;
+C 1 ; WX 0 ; N d1 ; B -77 -21 38 336 ;
+C 2 ; WX 0 ; N d2 ; B -88 -21 34 333 ;
+C 3 ; WX 0 ; N d3 ; B -100 -20 32 331 ;
+C 4 ; WX 0 ; N d4 ; B -113 -21 28 327 ;
+C 5 ; WX 0 ; N d5 ; B -127 -21 25 323 ;
+C 6 ; WX 0 ; N d6 ; B -141 -21 23 317 ;
+C 7 ; WX 0 ; N d7 ; B -156 -21 20 311 ;
+C 8 ; WX 0 ; N d8 ; B -169 -21 21 304 ;
+C 9 ; WX 0 ; N d9 ; B -184 -20 21 296 ;
+C 10 ; WX 0 ; N d10 ; B -200 -20 21 286 ;
+C 11 ; WX 0 ; N d11 ; B -215 -20 21 275 ;
+C 12 ; WX 0 ; N d12 ; B -230 -20 21 263 ;
+C 13 ; WX 0 ; N d13 ; B -244 -21 21 250 ;
+C 14 ; WX 0 ; N d14 ; B -258 -20 21 236 ;
+C 15 ; WX 0 ; N d15 ; B -271 -21 20 221 ;
+C 16 ; WX 0 ; N d16 ; B -282 -21 21 205 ;
+C 17 ; WX 0 ; N d17 ; B -293 -20 21 188 ;
+C 18 ; WX 0 ; N d18 ; B -303 -20 21 171 ;
+C 19 ; WX 0 ; N d19 ; B -312 -19 21 155 ;
+C 20 ; WX 0 ; N d20 ; B -319 -21 21 140 ;
+C 21 ; WX 0 ; N d21 ; B -326 -21 20 126 ;
+C 22 ; WX 0 ; N d22 ; B -330 -20 20 113 ;
+C 23 ; WX 0 ; N d23 ; B -334 -21 21 102 ;
+C 24 ; WX 0 ; N d24 ; B -336 -21 21 91 ;
+C 25 ; WX 0 ; N d25 ; B -338 -19 21 82 ;
+C 26 ; WX 0 ; N d26 ; B -340 -19 21 74 ;
+C 27 ; WX 0 ; N d27 ; B -341 -21 21 67 ;
+C 28 ; WX 0 ; N d28 ; B -341 -24 21 60 ;
+C 29 ; WX 0 ; N d29 ; B -341 -35 21 55 ;
+C 30 ; WX 0 ; N d30 ; B -340 -46 21 50 ;
+C 31 ; WX 0 ; N d31 ; B -338 -56 21 46 ;
+C 32 ; WX 0 ; N d32 ; B -337 -66 21 42 ;
+C 33 ; WX 0 ; N d33 ; B -336 -77 21 38 ;
+C 34 ; WX 0 ; N d34 ; B -334 -88 20 34 ;
+C 35 ; WX 0 ; N d35 ; B -331 -100 20 31 ;
+C 36 ; WX 0 ; N d36 ; B -328 -113 20 28 ;
+C 37 ; WX 0 ; N d37 ; B -323 -127 21 25 ;
+C 38 ; WX 0 ; N d38 ; B -318 -141 21 23 ;
+C 39 ; WX 0 ; N d39 ; B -312 -154 21 21 ;
+C 40 ; WX 0 ; N d40 ; B -304 -169 21 21 ;
+C 41 ; WX 0 ; N d41 ; B -296 -184 21 21 ;
+C 42 ; WX 0 ; N d42 ; B -286 -200 21 21 ;
+C 43 ; WX 0 ; N d43 ; B -276 -215 21 21 ;
+C 44 ; WX 0 ; N d44 ; B -263 -230 21 21 ;
+C 45 ; WX 0 ; N d45 ; B -250 -245 21 21 ;
+C 46 ; WX 0 ; N d46 ; B -236 -258 21 21 ;
+C 47 ; WX 0 ; N d47 ; B -221 -271 21 21 ;
+C 48 ; WX 0 ; N d48 ; B -205 -282 21 21 ;
+C 49 ; WX 0 ; N d49 ; B -188 -293 21 21 ;
+C 50 ; WX 0 ; N d50 ; B -171 -302 21 21 ;
+C 51 ; WX 0 ; N d51 ; B -156 -312 21 21 ;
+C 52 ; WX 0 ; N d52 ; B -140 -319 21 21 ;
+C 53 ; WX 0 ; N d53 ; B -126 -325 21 21 ;
+C 54 ; WX 0 ; N d54 ; B -114 -330 21 21 ;
+C 55 ; WX 0 ; N d55 ; B -102 -334 21 21 ;
+C 56 ; WX 0 ; N d56 ; B -92 -336 21 21 ;
+C 57 ; WX 0 ; N d57 ; B -82 -338 21 21 ;
+C 58 ; WX 0 ; N d58 ; B -75 -340 21 21 ;
+C 59 ; WX 0 ; N d59 ; B -68 -341 21 21 ;
+C 60 ; WX 0 ; N d60 ; B -60 -341 24 21 ;
+C 61 ; WX 0 ; N d61 ; B -55 -341 35 21 ;
+C 62 ; WX 0 ; N d62 ; B -50 -340 46 21 ;
+C 63 ; WX 0 ; N d63 ; B -46 -339 56 21 ;
+C 64 ; WX 0 ; N d64 ; B -43 -337 66 21 ;
+C 65 ; WX 0 ; N d65 ; B -38 -336 78 21 ;
+C 66 ; WX 0 ; N d66 ; B -34 -334 88 21 ;
+C 67 ; WX 0 ; N d67 ; B -32 -331 100 21 ;
+C 68 ; WX 0 ; N d68 ; B -28 -327 113 21 ;
+C 69 ; WX 0 ; N d69 ; B -26 -323 127 21 ;
+C 70 ; WX 0 ; N d70 ; B -23 -317 141 21 ;
+C 71 ; WX 0 ; N d71 ; B -21 -312 156 21 ;
+C 72 ; WX 0 ; N d72 ; B -21 -304 169 21 ;
+C 73 ; WX 0 ; N d73 ; B -21 -296 184 21 ;
+C 74 ; WX 0 ; N d74 ; B -21 -285 200 21 ;
+C 75 ; WX 0 ; N d75 ; B -21 -276 215 21 ;
+C 76 ; WX 0 ; N d76 ; B -21 -264 230 21 ;
+C 77 ; WX 0 ; N d77 ; B -21 -250 244 21 ;
+C 78 ; WX 0 ; N d78 ; B -21 -236 258 21 ;
+C 79 ; WX 0 ; N d79 ; B -20 -221 271 21 ;
+C 80 ; WX 0 ; N d80 ; B -20 -205 283 21 ;
+C 81 ; WX 0 ; N d81 ; B -20 -187 294 21 ;
+C 82 ; WX 0 ; N d82 ; B -21 -172 303 21 ;
+C 83 ; WX 0 ; N d83 ; B -21 -155 312 21 ;
+C 84 ; WX 0 ; N d84 ; B -20 -140 319 21 ;
+C 85 ; WX 0 ; N d85 ; B -20 -127 325 21 ;
+C 86 ; WX 0 ; N d86 ; B -20 -114 330 21 ;
+C 87 ; WX 0 ; N d87 ; B -20 -102 334 21 ;
+C 88 ; WX 0 ; N d88 ; B -20 -91 336 21 ;
+C 89 ; WX 0 ; N d89 ; B -20 -82 338 21 ;
+C 90 ; WX 0 ; N d90 ; B -20 -74 340 21 ;
+C 91 ; WX 0 ; N d91 ; B -20 -67 341 21 ;
+C 92 ; WX 0 ; N d92 ; B -20 -61 341 24 ;
+C 93 ; WX 0 ; N d93 ; B -20 -55 341 35 ;
+C 94 ; WX 0 ; N d94 ; B -20 -50 340 46 ;
+C 95 ; WX 0 ; N d95 ; B -20 -46 339 56 ;
+C 96 ; WX 0 ; N d96 ; B -20 -42 337 67 ;
+C 97 ; WX 0 ; N d97 ; B -20 -38 336 78 ;
+C 98 ; WX 0 ; N d98 ; B -20 -34 334 89 ;
+C 99 ; WX 0 ; N d99 ; B -20 -32 331 100 ;
+C 100 ; WX 0 ; N d100 ; B -20 -28 327 114 ;
+C 101 ; WX 0 ; N d101 ; B -20 -25 323 127 ;
+C 102 ; WX 0 ; N d102 ; B -20 -23 317 141 ;
+C 103 ; WX 0 ; N d103 ; B -20 -22 311 155 ;
+C 104 ; WX 0 ; N d104 ; B -20 -21 304 169 ;
+C 105 ; WX 0 ; N d105 ; B -20 -20 296 185 ;
+C 106 ; WX 0 ; N d106 ; B -20 -21 286 199 ;
+C 107 ; WX 0 ; N d107 ; B -20 -20 276 215 ;
+C 108 ; WX 0 ; N d108 ; B -20 -20 263 230 ;
+C 109 ; WX 0 ; N d109 ; B -20 -21 250 244 ;
+C 110 ; WX 0 ; N d110 ; B -20 -21 236 258 ;
+C 111 ; WX 0 ; N d111 ; B -20 -20 221 271 ;
+C 112 ; WX 0 ; N d112 ; B -20 -20 205 282 ;
+C 113 ; WX 0 ; N d113 ; B -20 -21 188 293 ;
+C 114 ; WX 0 ; N d114 ; B -20 -20 171 303 ;
+C 115 ; WX 0 ; N d115 ; B -21 -21 155 312 ;
+C 116 ; WX 0 ; N d116 ; B -20 -21 140 319 ;
+C 117 ; WX 0 ; N d117 ; B -20 -21 126 325 ;
+C 118 ; WX 0 ; N d118 ; B -20 -20 113 330 ;
+C 119 ; WX 0 ; N d119 ; B -20 -20 102 334 ;
+C 120 ; WX 0 ; N d120 ; B -21 -20 92 336 ;
+C 121 ; WX 0 ; N d121 ; B -20 -20 82 338 ;
+C 122 ; WX 0 ; N d122 ; B -20 -21 75 340 ;
+C 123 ; WX 0 ; N d123 ; B -21 -21 67 341 ;
+C 124 ; WX 0 ; N d124 ; B -23 -20 60 341 ;
+C 125 ; WX 0 ; N d125 ; B -35 -20 55 340 ;
+C 126 ; WX 0 ; N d126 ; B -46 -21 50 340 ;
+C 127 ; WX 0 ; N d127 ; B -56 -21 46 339 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xycmbt11.afm b/macros/generic/diagrams/xypic/afm/xycmbt11.afm
new file mode 100644
index 0000000000..c799bd9708
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xycmbt11.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:16:09 2013
+FontName XYCMBT-Medium
+FullName XYCMBT
+FamilyName XYCMBT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -339 -339 339 339
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -64 -18 40 335 ;
+C 1 ; WX 0 ; N d1 ; B -75 -18 36 334 ;
+C 2 ; WX 0 ; N d2 ; B -87 -18 32 331 ;
+C 3 ; WX 0 ; N d3 ; B -98 -18 30 329 ;
+C 4 ; WX 0 ; N d4 ; B -111 -18 26 326 ;
+C 5 ; WX 0 ; N d5 ; B -125 -18 24 321 ;
+C 6 ; WX 0 ; N d6 ; B -138 -19 20 315 ;
+C 7 ; WX 0 ; N d7 ; B -154 -19 19 309 ;
+C 8 ; WX 0 ; N d8 ; B -166 -18 19 302 ;
+C 9 ; WX 0 ; N d9 ; B -182 -18 19 294 ;
+C 10 ; WX 0 ; N d10 ; B -196 -18 19 284 ;
+C 11 ; WX 0 ; N d11 ; B -213 -18 19 273 ;
+C 12 ; WX 0 ; N d12 ; B -228 -18 19 261 ;
+C 13 ; WX 0 ; N d13 ; B -242 -18 19 248 ;
+C 14 ; WX 0 ; N d14 ; B -256 -18 19 234 ;
+C 15 ; WX 0 ; N d15 ; B -269 -18 19 218 ;
+C 16 ; WX 0 ; N d16 ; B -280 -18 19 203 ;
+C 17 ; WX 0 ; N d17 ; B -290 -18 19 186 ;
+C 18 ; WX 0 ; N d18 ; B -301 -18 19 169 ;
+C 19 ; WX 0 ; N d19 ; B -310 -18 19 153 ;
+C 20 ; WX 0 ; N d20 ; B -317 -19 19 138 ;
+C 21 ; WX 0 ; N d21 ; B -323 -19 19 124 ;
+C 22 ; WX 0 ; N d22 ; B -328 -18 19 111 ;
+C 23 ; WX 0 ; N d23 ; B -332 -18 19 100 ;
+C 24 ; WX 0 ; N d24 ; B -334 -18 19 89 ;
+C 25 ; WX 0 ; N d25 ; B -336 -18 19 80 ;
+C 26 ; WX 0 ; N d26 ; B -338 -18 19 72 ;
+C 27 ; WX 0 ; N d27 ; B -339 -18 19 65 ;
+C 28 ; WX 0 ; N d28 ; B -339 -21 19 58 ;
+C 29 ; WX 0 ; N d29 ; B -338 -33 19 53 ;
+C 30 ; WX 0 ; N d30 ; B -338 -44 19 48 ;
+C 31 ; WX 0 ; N d31 ; B -337 -55 19 44 ;
+C 32 ; WX 0 ; N d32 ; B -334 -64 19 40 ;
+C 33 ; WX 0 ; N d33 ; B -334 -75 19 36 ;
+C 34 ; WX 0 ; N d34 ; B -331 -87 19 32 ;
+C 35 ; WX 0 ; N d35 ; B -329 -98 19 29 ;
+C 36 ; WX 0 ; N d36 ; B -326 -112 19 26 ;
+C 37 ; WX 0 ; N d37 ; B -321 -125 19 23 ;
+C 38 ; WX 0 ; N d38 ; B -315 -138 19 21 ;
+C 39 ; WX 0 ; N d39 ; B -309 -153 19 19 ;
+C 40 ; WX 0 ; N d40 ; B -302 -166 19 19 ;
+C 41 ; WX 0 ; N d41 ; B -294 -182 19 19 ;
+C 42 ; WX 0 ; N d42 ; B -284 -196 19 19 ;
+C 43 ; WX 0 ; N d43 ; B -273 -213 19 19 ;
+C 44 ; WX 0 ; N d44 ; B -261 -227 19 19 ;
+C 45 ; WX 0 ; N d45 ; B -248 -242 19 19 ;
+C 46 ; WX 0 ; N d46 ; B -234 -256 19 19 ;
+C 47 ; WX 0 ; N d47 ; B -219 -269 19 19 ;
+C 48 ; WX 0 ; N d48 ; B -203 -281 19 19 ;
+C 49 ; WX 0 ; N d49 ; B -186 -290 19 19 ;
+C 50 ; WX 0 ; N d50 ; B -169 -301 19 19 ;
+C 51 ; WX 0 ; N d51 ; B -152 -310 19 19 ;
+C 52 ; WX 0 ; N d52 ; B -138 -317 19 19 ;
+C 53 ; WX 0 ; N d53 ; B -125 -323 19 19 ;
+C 54 ; WX 0 ; N d54 ; B -111 -328 19 19 ;
+C 55 ; WX 0 ; N d55 ; B -100 -332 19 19 ;
+C 56 ; WX 0 ; N d56 ; B -90 -334 19 19 ;
+C 57 ; WX 0 ; N d57 ; B -80 -336 19 19 ;
+C 58 ; WX 0 ; N d58 ; B -73 -338 19 20 ;
+C 59 ; WX 0 ; N d59 ; B -65 -339 19 19 ;
+C 60 ; WX 0 ; N d60 ; B -59 -339 21 19 ;
+C 61 ; WX 0 ; N d61 ; B -54 -338 33 19 ;
+C 62 ; WX 0 ; N d62 ; B -49 -338 45 19 ;
+C 63 ; WX 0 ; N d63 ; B -45 -337 54 19 ;
+C 64 ; WX 0 ; N d64 ; B -41 -334 64 19 ;
+C 65 ; WX 0 ; N d65 ; B -37 -334 75 19 ;
+C 66 ; WX 0 ; N d66 ; B -33 -331 87 19 ;
+C 67 ; WX 0 ; N d67 ; B -29 -329 98 20 ;
+C 68 ; WX 0 ; N d68 ; B -27 -325 111 19 ;
+C 69 ; WX 0 ; N d69 ; B -23 -321 125 19 ;
+C 70 ; WX 0 ; N d70 ; B -21 -315 138 19 ;
+C 71 ; WX 0 ; N d71 ; B -19 -310 153 19 ;
+C 72 ; WX 0 ; N d72 ; B -19 -302 167 19 ;
+C 73 ; WX 0 ; N d73 ; B -18 -294 182 19 ;
+C 74 ; WX 0 ; N d74 ; B -19 -284 197 20 ;
+C 75 ; WX 0 ; N d75 ; B -19 -273 213 20 ;
+C 76 ; WX 0 ; N d76 ; B -19 -261 228 19 ;
+C 77 ; WX 0 ; N d77 ; B -18 -248 242 19 ;
+C 78 ; WX 0 ; N d78 ; B -18 -234 256 19 ;
+C 79 ; WX 0 ; N d79 ; B -19 -218 269 19 ;
+C 80 ; WX 0 ; N d80 ; B -18 -203 281 20 ;
+C 81 ; WX 0 ; N d81 ; B -19 -186 291 19 ;
+C 82 ; WX 0 ; N d82 ; B -18 -169 301 19 ;
+C 83 ; WX 0 ; N d83 ; B -18 -153 310 19 ;
+C 84 ; WX 0 ; N d84 ; B -19 -138 317 19 ;
+C 85 ; WX 0 ; N d85 ; B -19 -125 323 19 ;
+C 86 ; WX 0 ; N d86 ; B -18 -111 328 19 ;
+C 87 ; WX 0 ; N d87 ; B -18 -100 332 19 ;
+C 88 ; WX 0 ; N d88 ; B -18 -89 334 19 ;
+C 89 ; WX 0 ; N d89 ; B -18 -80 336 19 ;
+C 90 ; WX 0 ; N d90 ; B -18 -72 338 19 ;
+C 91 ; WX 0 ; N d91 ; B -18 -65 339 19 ;
+C 92 ; WX 0 ; N d92 ; B -18 -58 339 21 ;
+C 93 ; WX 0 ; N d93 ; B -18 -53 338 33 ;
+C 94 ; WX 0 ; N d94 ; B -18 -49 338 44 ;
+C 95 ; WX 0 ; N d95 ; B -18 -45 337 54 ;
+C 96 ; WX 0 ; N d96 ; B -18 -40 335 65 ;
+C 97 ; WX 0 ; N d97 ; B -18 -36 334 76 ;
+C 98 ; WX 0 ; N d98 ; B -18 -32 331 87 ;
+C 99 ; WX 0 ; N d99 ; B -18 -29 329 99 ;
+C 100 ; WX 0 ; N d100 ; B -18 -27 326 112 ;
+C 101 ; WX 0 ; N d101 ; B -18 -24 321 124 ;
+C 102 ; WX 0 ; N d102 ; B -18 -21 315 139 ;
+C 103 ; WX 0 ; N d103 ; B -18 -19 310 153 ;
+C 104 ; WX 0 ; N d104 ; B -18 -19 302 167 ;
+C 105 ; WX 0 ; N d105 ; B -18 -19 294 183 ;
+C 106 ; WX 0 ; N d106 ; B -18 -18 284 197 ;
+C 107 ; WX 0 ; N d107 ; B -18 -19 273 213 ;
+C 108 ; WX 0 ; N d108 ; B -18 -18 261 227 ;
+C 109 ; WX 0 ; N d109 ; B -18 -18 248 242 ;
+C 110 ; WX 0 ; N d110 ; B -18 -19 234 256 ;
+C 111 ; WX 0 ; N d111 ; B -18 -19 218 269 ;
+C 112 ; WX 0 ; N d112 ; B -18 -19 203 281 ;
+C 113 ; WX 0 ; N d113 ; B -19 -19 186 291 ;
+C 114 ; WX 0 ; N d114 ; B -18 -18 169 302 ;
+C 115 ; WX 0 ; N d115 ; B -18 -18 153 310 ;
+C 116 ; WX 0 ; N d116 ; B -18 -19 138 317 ;
+C 117 ; WX 0 ; N d117 ; B -18 -18 125 323 ;
+C 118 ; WX 0 ; N d118 ; B -18 -18 112 328 ;
+C 119 ; WX 0 ; N d119 ; B -18 -18 100 332 ;
+C 120 ; WX 0 ; N d120 ; B -18 -18 90 335 ;
+C 121 ; WX 0 ; N d121 ; B -18 -18 80 336 ;
+C 122 ; WX 0 ; N d122 ; B -18 -19 73 338 ;
+C 123 ; WX 0 ; N d123 ; B -18 -18 65 339 ;
+C 124 ; WX 0 ; N d124 ; B -21 -18 59 339 ;
+C 125 ; WX 0 ; N d125 ; B -33 -18 54 339 ;
+C 126 ; WX 0 ; N d126 ; B -45 -18 48 338 ;
+C 127 ; WX 0 ; N d127 ; B -54 -18 45 337 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xycmbt12.afm b/macros/generic/diagrams/xypic/afm/xycmbt12.afm
new file mode 100644
index 0000000000..16e67e939d
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xycmbt12.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:16:15 2013
+FontName XYCMBT-Medium
+FullName XYCMBT
+FamilyName XYCMBT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -338 -338 338 338
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -64 -17 38 334 ;
+C 1 ; WX 0 ; N d1 ; B -73 -18 35 332 ;
+C 2 ; WX 0 ; N d2 ; B -85 -17 32 330 ;
+C 3 ; WX 0 ; N d3 ; B -97 -17 28 327 ;
+C 4 ; WX 0 ; N d4 ; B -111 -18 24 323 ;
+C 5 ; WX 0 ; N d5 ; B -124 -17 22 320 ;
+C 6 ; WX 0 ; N d6 ; B -138 -18 19 314 ;
+C 7 ; WX 0 ; N d7 ; B -151 -18 19 308 ;
+C 8 ; WX 0 ; N d8 ; B -166 -18 17 300 ;
+C 9 ; WX 0 ; N d9 ; B -182 -17 18 293 ;
+C 10 ; WX 0 ; N d10 ; B -196 -17 17 282 ;
+C 11 ; WX 0 ; N d11 ; B -211 -17 18 272 ;
+C 12 ; WX 0 ; N d12 ; B -227 -17 18 260 ;
+C 13 ; WX 0 ; N d13 ; B -241 -18 17 247 ;
+C 14 ; WX 0 ; N d14 ; B -255 -18 17 233 ;
+C 15 ; WX 0 ; N d15 ; B -267 -18 17 217 ;
+C 16 ; WX 0 ; N d16 ; B -280 -18 17 201 ;
+C 17 ; WX 0 ; N d17 ; B -291 -18 17 184 ;
+C 18 ; WX 0 ; N d18 ; B -301 -17 17 168 ;
+C 19 ; WX 0 ; N d19 ; B -309 -18 17 151 ;
+C 20 ; WX 0 ; N d20 ; B -315 -17 17 137 ;
+C 21 ; WX 0 ; N d21 ; B -321 -18 17 122 ;
+C 22 ; WX 0 ; N d22 ; B -326 -17 18 109 ;
+C 23 ; WX 0 ; N d23 ; B -330 -17 18 98 ;
+C 24 ; WX 0 ; N d24 ; B -333 -17 17 89 ;
+C 25 ; WX 0 ; N d25 ; B -335 -17 17 79 ;
+C 26 ; WX 0 ; N d26 ; B -337 -17 17 70 ;
+C 27 ; WX 0 ; N d27 ; B -337 -17 17 63 ;
+C 28 ; WX 0 ; N d28 ; B -338 -19 17 57 ;
+C 29 ; WX 0 ; N d29 ; B -338 -31 17 51 ;
+C 30 ; WX 0 ; N d30 ; B -337 -43 17 46 ;
+C 31 ; WX 0 ; N d31 ; B -336 -52 18 42 ;
+C 32 ; WX 0 ; N d32 ; B -335 -63 17 38 ;
+C 33 ; WX 0 ; N d33 ; B -332 -73 17 34 ;
+C 34 ; WX 0 ; N d34 ; B -331 -86 17 31 ;
+C 35 ; WX 0 ; N d35 ; B -328 -98 17 27 ;
+C 36 ; WX 0 ; N d36 ; B -323 -110 18 24 ;
+C 37 ; WX 0 ; N d37 ; B -319 -123 17 21 ;
+C 38 ; WX 0 ; N d38 ; B -315 -137 17 19 ;
+C 39 ; WX 0 ; N d39 ; B -308 -151 17 18 ;
+C 40 ; WX 0 ; N d40 ; B -300 -166 17 17 ;
+C 41 ; WX 0 ; N d41 ; B -292 -181 17 17 ;
+C 42 ; WX 0 ; N d42 ; B -282 -196 17 17 ;
+C 43 ; WX 0 ; N d43 ; B -272 -211 17 18 ;
+C 44 ; WX 0 ; N d44 ; B -260 -227 17 17 ;
+C 45 ; WX 0 ; N d45 ; B -247 -240 17 17 ;
+C 46 ; WX 0 ; N d46 ; B -232 -254 17 17 ;
+C 47 ; WX 0 ; N d47 ; B -217 -267 17 17 ;
+C 48 ; WX 0 ; N d48 ; B -201 -280 17 18 ;
+C 49 ; WX 0 ; N d49 ; B -184 -290 17 17 ;
+C 50 ; WX 0 ; N d50 ; B -168 -299 18 18 ;
+C 51 ; WX 0 ; N d51 ; B -151 -308 18 18 ;
+C 52 ; WX 0 ; N d52 ; B -136 -315 17 18 ;
+C 53 ; WX 0 ; N d53 ; B -123 -321 18 17 ;
+C 54 ; WX 0 ; N d54 ; B -110 -326 18 18 ;
+C 55 ; WX 0 ; N d55 ; B -99 -331 17 18 ;
+C 56 ; WX 0 ; N d56 ; B -88 -333 18 18 ;
+C 57 ; WX 0 ; N d57 ; B -79 -336 18 17 ;
+C 58 ; WX 0 ; N d58 ; B -71 -336 18 18 ;
+C 59 ; WX 0 ; N d59 ; B -63 -337 17 18 ;
+C 60 ; WX 0 ; N d60 ; B -57 -338 19 18 ;
+C 61 ; WX 0 ; N d61 ; B -52 -337 31 18 ;
+C 62 ; WX 0 ; N d62 ; B -47 -336 43 18 ;
+C 63 ; WX 0 ; N d63 ; B -43 -335 52 18 ;
+C 64 ; WX 0 ; N d64 ; B -38 -334 64 18 ;
+C 65 ; WX 0 ; N d65 ; B -34 -333 73 18 ;
+C 66 ; WX 0 ; N d66 ; B -32 -330 86 18 ;
+C 67 ; WX 0 ; N d67 ; B -28 -327 97 18 ;
+C 68 ; WX 0 ; N d68 ; B -25 -323 111 18 ;
+C 69 ; WX 0 ; N d69 ; B -21 -319 124 18 ;
+C 70 ; WX 0 ; N d70 ; B -20 -314 137 18 ;
+C 71 ; WX 0 ; N d71 ; B -18 -307 151 18 ;
+C 72 ; WX 0 ; N d72 ; B -17 -300 166 18 ;
+C 73 ; WX 0 ; N d73 ; B -18 -293 182 18 ;
+C 74 ; WX 0 ; N d74 ; B -17 -282 196 18 ;
+C 75 ; WX 0 ; N d75 ; B -18 -272 211 18 ;
+C 76 ; WX 0 ; N d76 ; B -17 -260 227 18 ;
+C 77 ; WX 0 ; N d77 ; B -17 -246 241 17 ;
+C 78 ; WX 0 ; N d78 ; B -17 -232 255 18 ;
+C 79 ; WX 0 ; N d79 ; B -17 -217 268 17 ;
+C 80 ; WX 0 ; N d80 ; B -17 -201 280 17 ;
+C 81 ; WX 0 ; N d81 ; B -18 -184 290 17 ;
+C 82 ; WX 0 ; N d82 ; B -18 -167 300 17 ;
+C 83 ; WX 0 ; N d83 ; B -18 -151 309 18 ;
+C 84 ; WX 0 ; N d84 ; B -17 -136 315 18 ;
+C 85 ; WX 0 ; N d85 ; B -18 -122 321 17 ;
+C 86 ; WX 0 ; N d86 ; B -18 -109 326 18 ;
+C 87 ; WX 0 ; N d87 ; B -18 -98 331 18 ;
+C 88 ; WX 0 ; N d88 ; B -18 -88 333 18 ;
+C 89 ; WX 0 ; N d89 ; B -18 -79 335 17 ;
+C 90 ; WX 0 ; N d90 ; B -18 -70 337 17 ;
+C 91 ; WX 0 ; N d91 ; B -18 -63 337 17 ;
+C 92 ; WX 0 ; N d92 ; B -18 -57 338 19 ;
+C 93 ; WX 0 ; N d93 ; B -18 -50 338 31 ;
+C 94 ; WX 0 ; N d94 ; B -18 -46 337 43 ;
+C 95 ; WX 0 ; N d95 ; B -18 -42 336 52 ;
+C 96 ; WX 0 ; N d96 ; B -18 -39 335 63 ;
+C 97 ; WX 0 ; N d97 ; B -17 -34 332 73 ;
+C 98 ; WX 0 ; N d98 ; B -18 -31 331 86 ;
+C 99 ; WX 0 ; N d99 ; B -18 -27 327 97 ;
+C 100 ; WX 0 ; N d100 ; B -17 -25 323 110 ;
+C 101 ; WX 0 ; N d101 ; B -17 -21 319 124 ;
+C 102 ; WX 0 ; N d102 ; B -17 -19 314 137 ;
+C 103 ; WX 0 ; N d103 ; B -17 -18 308 151 ;
+C 104 ; WX 0 ; N d104 ; B -17 -17 300 166 ;
+C 105 ; WX 0 ; N d105 ; B -17 -17 293 181 ;
+C 106 ; WX 0 ; N d106 ; B -17 -17 282 196 ;
+C 107 ; WX 0 ; N d107 ; B -17 -17 273 211 ;
+C 108 ; WX 0 ; N d108 ; B -18 -17 261 226 ;
+C 109 ; WX 0 ; N d109 ; B -17 -17 246 240 ;
+C 110 ; WX 0 ; N d110 ; B -18 -17 232 255 ;
+C 111 ; WX 0 ; N d111 ; B -18 -18 217 267 ;
+C 112 ; WX 0 ; N d112 ; B -18 -17 201 280 ;
+C 113 ; WX 0 ; N d113 ; B -18 -17 184 290 ;
+C 114 ; WX 0 ; N d114 ; B -18 -18 168 300 ;
+C 115 ; WX 0 ; N d115 ; B -17 -17 151 308 ;
+C 116 ; WX 0 ; N d116 ; B -18 -18 136 316 ;
+C 117 ; WX 0 ; N d117 ; B -18 -18 122 322 ;
+C 118 ; WX 0 ; N d118 ; B -18 -17 110 326 ;
+C 119 ; WX 0 ; N d119 ; B -17 -17 99 331 ;
+C 120 ; WX 0 ; N d120 ; B -18 -18 88 333 ;
+C 121 ; WX 0 ; N d121 ; B -18 -17 80 336 ;
+C 122 ; WX 0 ; N d122 ; B -18 -17 70 337 ;
+C 123 ; WX 0 ; N d123 ; B -18 -17 63 337 ;
+C 124 ; WX 0 ; N d124 ; B -19 -18 58 338 ;
+C 125 ; WX 0 ; N d125 ; B -32 -18 52 337 ;
+C 126 ; WX 0 ; N d126 ; B -42 -18 47 336 ;
+C 127 ; WX 0 ; N d127 ; B -53 -17 42 335 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xydash10.afm b/macros/generic/diagrams/xypic/afm/xydash10.afm
new file mode 100644
index 0000000000..4b15516be9
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xydash10.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:15:40 2013
+FontName XYDASH-Medium
+FullName XYDASH
+FamilyName XYDASH
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch false
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -21 -521 521 520
+StartCharMetrics 128
+C 0 ; WX 484 ; N a0 ; B -20 -21 369 380 ;
+C 1 ; WX 469 ; N a1 ; B -20 -21 363 385 ;
+C 2 ; WX 453 ; N a2 ; B -20 -21 356 391 ;
+C 3 ; WX 438 ; N a3 ; B -20 -21 350 397 ;
+C 4 ; WX 422 ; N a4 ; B -21 -21 343 403 ;
+C 5 ; WX 406 ; N a5 ; B -21 -21 336 409 ;
+C 6 ; WX 391 ; N a6 ; B -21 -21 329 415 ;
+C 7 ; WX 375 ; N a7 ; B -20 -21 321 421 ;
+C 8 ; WX 359 ; N a8 ; B -21 -21 312 426 ;
+C 9 ; WX 344 ; N a9 ; B -20 -21 304 433 ;
+C 10 ; WX 328 ; N a10 ; B -20 -21 295 439 ;
+C 11 ; WX 313 ; N a11 ; B -20 -21 285 444 ;
+C 12 ; WX 297 ; N a12 ; B -20 -21 276 450 ;
+C 13 ; WX 281 ; N a13 ; B -20 -21 266 456 ;
+C 14 ; WX 266 ; N a14 ; B -21 -21 256 462 ;
+C 15 ; WX 250 ; N a15 ; B -20 -21 244 468 ;
+C 16 ; WX 234 ; N a16 ; B -20 -21 233 473 ;
+C 17 ; WX 219 ; N a17 ; B -20 -21 221 479 ;
+C 18 ; WX 203 ; N a18 ; B -21 -21 209 484 ;
+C 19 ; WX 188 ; N a19 ; B -21 -21 196 489 ;
+C 20 ; WX 172 ; N a20 ; B -20 -21 183 494 ;
+C 21 ; WX 156 ; N a21 ; B -20 -20 169 498 ;
+C 22 ; WX 141 ; N a22 ; B -20 -21 157 502 ;
+C 23 ; WX 125 ; N a23 ; B -20 -21 142 506 ;
+C 24 ; WX 109 ; N a24 ; B -20 -21 127 509 ;
+C 25 ; WX 94 ; N a25 ; B -20 -21 113 512 ;
+C 26 ; WX 78 ; N a26 ; B -20 -21 98 515 ;
+C 27 ; WX 63 ; N a27 ; B -20 -21 83 517 ;
+C 28 ; WX 47 ; N a28 ; B -20 -21 67 519 ;
+C 29 ; WX 31 ; N a29 ; B -20 -21 52 520 ;
+C 30 ; WX 16 ; N a30 ; B -20 -21 36 520 ;
+C 31 ; WX 0 ; N a31 ; B -21 -521 21 21 ;
+C 32 ; WX 16 ; N a32 ; B -20 -519 36 21 ;
+C 33 ; WX 31 ; N a33 ; B -20 -520 52 21 ;
+C 34 ; WX 47 ; N a34 ; B -20 -518 67 21 ;
+C 35 ; WX 63 ; N a35 ; B -20 -517 82 21 ;
+C 36 ; WX 78 ; N a36 ; B -20 -515 98 21 ;
+C 37 ; WX 94 ; N a37 ; B -20 -512 113 21 ;
+C 38 ; WX 109 ; N a38 ; B -20 -510 127 21 ;
+C 39 ; WX 125 ; N a39 ; B -20 -506 142 21 ;
+C 40 ; WX 141 ; N a40 ; B -20 -502 157 21 ;
+C 41 ; WX 156 ; N a41 ; B -20 -499 169 21 ;
+C 42 ; WX 172 ; N a42 ; B -21 -494 183 21 ;
+C 43 ; WX 188 ; N a43 ; B -21 -489 196 21 ;
+C 44 ; WX 203 ; N a44 ; B -21 -484 209 21 ;
+C 45 ; WX 219 ; N a45 ; B -21 -479 222 21 ;
+C 46 ; WX 234 ; N a46 ; B -21 -474 233 21 ;
+C 47 ; WX 250 ; N a47 ; B -20 -468 244 21 ;
+C 48 ; WX 266 ; N a48 ; B -20 -463 256 21 ;
+C 49 ; WX 281 ; N a49 ; B -20 -457 266 21 ;
+C 50 ; WX 297 ; N a50 ; B -20 -451 276 21 ;
+C 51 ; WX 313 ; N a51 ; B -20 -444 285 21 ;
+C 52 ; WX 328 ; N a52 ; B -20 -439 295 21 ;
+C 53 ; WX 344 ; N a53 ; B -20 -433 303 21 ;
+C 54 ; WX 359 ; N a54 ; B -21 -427 312 21 ;
+C 55 ; WX 375 ; N a55 ; B -20 -421 321 21 ;
+C 56 ; WX 391 ; N a56 ; B -21 -415 329 21 ;
+C 57 ; WX 406 ; N a57 ; B -21 -409 336 21 ;
+C 58 ; WX 422 ; N a58 ; B -21 -403 344 21 ;
+C 59 ; WX 438 ; N a59 ; B -20 -397 350 21 ;
+C 60 ; WX 453 ; N a60 ; B -20 -391 356 21 ;
+C 61 ; WX 469 ; N a61 ; B -20 -384 363 21 ;
+C 62 ; WX 484 ; N a62 ; B -20 -380 369 21 ;
+C 63 ; WX 500 ; N a63 ; B -20 -375 374 21 ;
+C 64 ; WX 500 ; N a64 ; B -20 -369 380 21 ;
+C 65 ; WX 500 ; N a65 ; B -20 -362 385 21 ;
+C 66 ; WX 500 ; N a66 ; B -20 -357 391 21 ;
+C 67 ; WX 500 ; N a67 ; B -20 -350 397 21 ;
+C 68 ; WX 500 ; N a68 ; B -20 -343 403 21 ;
+C 69 ; WX 500 ; N a69 ; B -20 -336 409 21 ;
+C 70 ; WX 500 ; N a70 ; B -20 -329 415 21 ;
+C 71 ; WX 500 ; N a71 ; B -20 -322 421 21 ;
+C 72 ; WX 500 ; N a72 ; B -20 -313 427 21 ;
+C 73 ; WX 500 ; N a73 ; B -20 -303 433 21 ;
+C 74 ; WX 500 ; N a74 ; B -20 -295 439 21 ;
+C 75 ; WX 500 ; N a75 ; B -20 -285 444 21 ;
+C 76 ; WX 500 ; N a76 ; B -20 -276 451 21 ;
+C 77 ; WX 500 ; N a77 ; B -20 -266 456 21 ;
+C 78 ; WX 500 ; N a78 ; B -20 -255 462 21 ;
+C 79 ; WX 500 ; N a79 ; B -20 -244 468 21 ;
+C 80 ; WX 500 ; N a80 ; B -20 -233 474 21 ;
+C 81 ; WX 500 ; N a81 ; B -20 -222 479 21 ;
+C 82 ; WX 500 ; N a82 ; B -20 -209 484 21 ;
+C 83 ; WX 500 ; N a83 ; B -20 -196 489 21 ;
+C 84 ; WX 500 ; N a84 ; B -20 -183 493 21 ;
+C 85 ; WX 500 ; N a85 ; B -20 -169 499 21 ;
+C 86 ; WX 500 ; N a86 ; B -20 -156 503 21 ;
+C 87 ; WX 500 ; N a87 ; B -20 -142 506 21 ;
+C 88 ; WX 500 ; N a88 ; B -20 -127 509 21 ;
+C 89 ; WX 500 ; N a89 ; B -20 -113 512 21 ;
+C 90 ; WX 500 ; N a90 ; B -20 -98 515 21 ;
+C 91 ; WX 500 ; N a91 ; B -20 -82 517 21 ;
+C 92 ; WX 500 ; N a92 ; B -20 -67 519 21 ;
+C 93 ; WX 500 ; N a93 ; B -20 -52 520 21 ;
+C 94 ; WX 500 ; N a94 ; B -20 -36 520 20 ;
+C 95 ; WX 500 ; N a95 ; B -20 -21 521 21 ;
+C 96 ; WX 500 ; N a96 ; B -20 -20 520 36 ;
+C 97 ; WX 500 ; N a97 ; B -20 -20 520 52 ;
+C 98 ; WX 500 ; N a98 ; B -20 -20 518 67 ;
+C 99 ; WX 500 ; N a99 ; B -20 -20 517 83 ;
+C 100 ; WX 500 ; N a100 ; B -20 -20 515 98 ;
+C 101 ; WX 500 ; N a101 ; B -20 -20 512 113 ;
+C 102 ; WX 500 ; N a102 ; B -20 -20 509 127 ;
+C 103 ; WX 500 ; N a103 ; B -20 -20 506 142 ;
+C 104 ; WX 500 ; N a104 ; B -20 -20 503 156 ;
+C 105 ; WX 500 ; N a105 ; B -20 -20 499 170 ;
+C 106 ; WX 500 ; N a106 ; B -20 -21 494 183 ;
+C 107 ; WX 500 ; N a107 ; B -20 -21 489 196 ;
+C 108 ; WX 500 ; N a108 ; B -20 -20 484 209 ;
+C 109 ; WX 500 ; N a109 ; B -20 -20 479 222 ;
+C 110 ; WX 500 ; N a110 ; B -20 -20 474 233 ;
+C 111 ; WX 500 ; N a111 ; B -20 -20 468 244 ;
+C 112 ; WX 500 ; N a112 ; B -20 -21 462 255 ;
+C 113 ; WX 500 ; N a113 ; B -20 -21 457 266 ;
+C 114 ; WX 500 ; N a114 ; B -20 -21 450 276 ;
+C 115 ; WX 500 ; N a115 ; B -20 -20 444 285 ;
+C 116 ; WX 500 ; N a116 ; B -20 -20 439 295 ;
+C 117 ; WX 500 ; N a117 ; B -20 -20 433 304 ;
+C 118 ; WX 500 ; N a118 ; B -20 -21 427 312 ;
+C 119 ; WX 500 ; N a119 ; B -20 -20 421 321 ;
+C 120 ; WX 500 ; N a120 ; B -20 -21 415 328 ;
+C 121 ; WX 500 ; N a121 ; B -20 -21 409 336 ;
+C 122 ; WX 500 ; N a122 ; B -20 -21 403 343 ;
+C 123 ; WX 500 ; N a123 ; B -20 -21 397 350 ;
+C 124 ; WX 500 ; N a124 ; B -20 -20 391 357 ;
+C 125 ; WX 500 ; N a125 ; B -20 -21 385 362 ;
+C 126 ; WX 500 ; N a126 ; B -20 -20 380 368 ;
+C 127 ; WX 500 ; N a127 ; B -20 -20 374 374 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xyeuat10.afm b/macros/generic/diagrams/xypic/afm/xyeuat10.afm
new file mode 100644
index 0000000000..a9c34dd9a6
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xyeuat10.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:16:18 2013
+FontName XYEUAT-Medium
+FullName XYEUAT
+FamilyName XYEUAT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -273 -273 273 272
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -20 -79 266 21 ;
+C 1 ; WX 0 ; N d1 ; B -20 -71 267 21 ;
+C 2 ; WX 0 ; N d2 ; B -20 -61 270 21 ;
+C 3 ; WX 0 ; N d3 ; B -20 -52 271 22 ;
+C 4 ; WX 0 ; N d4 ; B -20 -42 272 24 ;
+C 5 ; WX 0 ; N d5 ; B -20 -29 273 28 ;
+C 6 ; WX 0 ; N d6 ; B -20 -20 272 33 ;
+C 7 ; WX 0 ; N d7 ; B -20 -20 272 40 ;
+C 8 ; WX 0 ; N d8 ; B -20 -21 272 50 ;
+C 9 ; WX 0 ; N d9 ; B -20 -21 269 61 ;
+C 10 ; WX 0 ; N d10 ; B -20 -20 267 75 ;
+C 11 ; WX 0 ; N d11 ; B -20 -20 264 89 ;
+C 12 ; WX 0 ; N d12 ; B -20 -21 259 103 ;
+C 13 ; WX 0 ; N d13 ; B -20 -20 254 118 ;
+C 14 ; WX 0 ; N d14 ; B -20 -20 247 132 ;
+C 15 ; WX 0 ; N d15 ; B -20 -20 239 146 ;
+C 16 ; WX 0 ; N d16 ; B -20 -20 231 159 ;
+C 17 ; WX 0 ; N d17 ; B -20 -20 222 172 ;
+C 18 ; WX 0 ; N d18 ; B -20 -20 212 184 ;
+C 19 ; WX 0 ; N d19 ; B -21 -20 203 195 ;
+C 20 ; WX 0 ; N d20 ; B -20 -21 192 205 ;
+C 21 ; WX 0 ; N d21 ; B -20 -20 181 214 ;
+C 22 ; WX 0 ; N d22 ; B -20 -20 172 223 ;
+C 23 ; WX 0 ; N d23 ; B -20 -21 160 230 ;
+C 24 ; WX 0 ; N d24 ; B -21 -21 150 237 ;
+C 25 ; WX 0 ; N d25 ; B -21 -20 139 242 ;
+C 26 ; WX 0 ; N d26 ; B -21 -20 131 248 ;
+C 27 ; WX 0 ; N d27 ; B -20 -20 121 253 ;
+C 28 ; WX 0 ; N d28 ; B -21 -21 112 255 ;
+C 29 ; WX 0 ; N d29 ; B -20 -21 104 259 ;
+C 30 ; WX 0 ; N d30 ; B -20 -20 95 261 ;
+C 31 ; WX 0 ; N d31 ; B -20 -21 88 264 ;
+C 32 ; WX 0 ; N d32 ; B -20 -21 79 266 ;
+C 33 ; WX 0 ; N d33 ; B -21 -21 70 267 ;
+C 34 ; WX 0 ; N d34 ; B -21 -20 61 269 ;
+C 35 ; WX 0 ; N d35 ; B -23 -20 52 271 ;
+C 36 ; WX 0 ; N d36 ; B -24 -20 41 272 ;
+C 37 ; WX 0 ; N d37 ; B -28 -21 30 272 ;
+C 38 ; WX 0 ; N d38 ; B -32 -20 21 272 ;
+C 39 ; WX 0 ; N d39 ; B -40 -21 20 272 ;
+C 40 ; WX 0 ; N d40 ; B -51 -20 21 271 ;
+C 41 ; WX 0 ; N d41 ; B -62 -20 21 269 ;
+C 42 ; WX 0 ; N d42 ; B -75 -21 21 267 ;
+C 43 ; WX 0 ; N d43 ; B -89 -21 21 263 ;
+C 44 ; WX 0 ; N d44 ; B -103 -21 20 259 ;
+C 45 ; WX 0 ; N d45 ; B -118 -20 21 254 ;
+C 46 ; WX 0 ; N d46 ; B -132 -20 21 247 ;
+C 47 ; WX 0 ; N d47 ; B -146 -21 21 239 ;
+C 48 ; WX 0 ; N d48 ; B -160 -21 21 231 ;
+C 49 ; WX 0 ; N d49 ; B -172 -21 21 222 ;
+C 50 ; WX 0 ; N d50 ; B -184 -21 21 212 ;
+C 51 ; WX 0 ; N d51 ; B -196 -19 21 203 ;
+C 52 ; WX 0 ; N d52 ; B -205 -20 21 192 ;
+C 53 ; WX 0 ; N d53 ; B -214 -20 21 181 ;
+C 54 ; WX 0 ; N d54 ; B -223 -20 21 171 ;
+C 55 ; WX 0 ; N d55 ; B -230 -21 21 160 ;
+C 56 ; WX 0 ; N d56 ; B -237 -20 21 150 ;
+C 57 ; WX 0 ; N d57 ; B -242 -20 21 140 ;
+C 58 ; WX 0 ; N d58 ; B -247 -20 21 130 ;
+C 59 ; WX 0 ; N d59 ; B -252 -20 20 121 ;
+C 60 ; WX 0 ; N d60 ; B -256 -20 21 111 ;
+C 61 ; WX 0 ; N d61 ; B -259 -20 21 103 ;
+C 62 ; WX 0 ; N d62 ; B -261 -20 21 95 ;
+C 63 ; WX 0 ; N d63 ; B -264 -20 21 87 ;
+C 64 ; WX 0 ; N d64 ; B -266 -21 21 79 ;
+C 65 ; WX 0 ; N d65 ; B -267 -20 21 70 ;
+C 66 ; WX 0 ; N d66 ; B -270 -21 21 61 ;
+C 67 ; WX 0 ; N d67 ; B -271 -23 21 52 ;
+C 68 ; WX 0 ; N d68 ; B -272 -25 21 42 ;
+C 69 ; WX 0 ; N d69 ; B -273 -28 21 30 ;
+C 70 ; WX 0 ; N d70 ; B -271 -34 21 21 ;
+C 71 ; WX 0 ; N d71 ; B -272 -40 21 21 ;
+C 72 ; WX 0 ; N d72 ; B -272 -51 21 21 ;
+C 73 ; WX 0 ; N d73 ; B -269 -62 21 21 ;
+C 74 ; WX 0 ; N d74 ; B -267 -75 21 21 ;
+C 75 ; WX 0 ; N d75 ; B -263 -89 21 21 ;
+C 76 ; WX 0 ; N d76 ; B -259 -103 21 21 ;
+C 77 ; WX 0 ; N d77 ; B -253 -117 21 21 ;
+C 78 ; WX 0 ; N d78 ; B -247 -132 21 21 ;
+C 79 ; WX 0 ; N d79 ; B -240 -146 21 21 ;
+C 80 ; WX 0 ; N d80 ; B -231 -159 21 21 ;
+C 81 ; WX 0 ; N d81 ; B -223 -172 21 21 ;
+C 82 ; WX 0 ; N d82 ; B -212 -184 21 21 ;
+C 83 ; WX 0 ; N d83 ; B -203 -195 21 21 ;
+C 84 ; WX 0 ; N d84 ; B -192 -205 21 21 ;
+C 85 ; WX 0 ; N d85 ; B -181 -214 21 21 ;
+C 86 ; WX 0 ; N d86 ; B -171 -223 21 21 ;
+C 87 ; WX 0 ; N d87 ; B -160 -231 21 21 ;
+C 88 ; WX 0 ; N d88 ; B -150 -237 21 21 ;
+C 89 ; WX 0 ; N d89 ; B -140 -242 21 21 ;
+C 90 ; WX 0 ; N d90 ; B -131 -247 21 21 ;
+C 91 ; WX 0 ; N d91 ; B -121 -252 21 21 ;
+C 92 ; WX 0 ; N d92 ; B -111 -256 21 21 ;
+C 93 ; WX 0 ; N d93 ; B -104 -259 21 21 ;
+C 94 ; WX 0 ; N d94 ; B -95 -261 21 21 ;
+C 95 ; WX 0 ; N d95 ; B -87 -264 21 21 ;
+C 96 ; WX 0 ; N d96 ; B -80 -266 21 21 ;
+C 97 ; WX 0 ; N d97 ; B -70 -267 21 21 ;
+C 98 ; WX 0 ; N d98 ; B -61 -269 21 21 ;
+C 99 ; WX 0 ; N d99 ; B -52 -271 23 21 ;
+C 100 ; WX 0 ; N d100 ; B -41 -272 24 21 ;
+C 101 ; WX 0 ; N d101 ; B -30 -273 28 21 ;
+C 102 ; WX 0 ; N d102 ; B -21 -271 34 21 ;
+C 103 ; WX 0 ; N d103 ; B -21 -272 40 21 ;
+C 104 ; WX 0 ; N d104 ; B -21 -272 51 21 ;
+C 105 ; WX 0 ; N d105 ; B -20 -269 62 21 ;
+C 106 ; WX 0 ; N d106 ; B -20 -267 75 21 ;
+C 107 ; WX 0 ; N d107 ; B -20 -263 89 21 ;
+C 108 ; WX 0 ; N d108 ; B -21 -259 103 21 ;
+C 109 ; WX 0 ; N d109 ; B -20 -253 118 21 ;
+C 110 ; WX 0 ; N d110 ; B -20 -247 132 21 ;
+C 111 ; WX 0 ; N d111 ; B -20 -240 146 21 ;
+C 112 ; WX 0 ; N d112 ; B -20 -232 160 21 ;
+C 113 ; WX 0 ; N d113 ; B -20 -223 172 21 ;
+C 114 ; WX 0 ; N d114 ; B -21 -212 184 21 ;
+C 115 ; WX 0 ; N d115 ; B -21 -203 195 21 ;
+C 116 ; WX 0 ; N d116 ; B -20 -192 205 21 ;
+C 117 ; WX 0 ; N d117 ; B -20 -181 214 21 ;
+C 118 ; WX 0 ; N d118 ; B -20 -171 223 21 ;
+C 119 ; WX 0 ; N d119 ; B -20 -160 230 21 ;
+C 120 ; WX 0 ; N d120 ; B -20 -150 237 21 ;
+C 121 ; WX 0 ; N d121 ; B -20 -140 242 21 ;
+C 122 ; WX 0 ; N d122 ; B -20 -129 247 21 ;
+C 123 ; WX 0 ; N d123 ; B -20 -121 252 21 ;
+C 124 ; WX 0 ; N d124 ; B -20 -112 255 21 ;
+C 125 ; WX 0 ; N d125 ; B -20 -103 259 21 ;
+C 126 ; WX 0 ; N d126 ; B -20 -95 262 21 ;
+C 127 ; WX 0 ; N d127 ; B -20 -87 264 21 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xyeuat11.afm b/macros/generic/diagrams/xypic/afm/xyeuat11.afm
new file mode 100644
index 0000000000..65f3bea8dd
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xyeuat11.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:16:24 2013
+FontName XYEUAT-Medium
+FullName XYEUAT
+FamilyName XYEUAT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -270 -271 270 271
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -18 -77 264 19 ;
+C 1 ; WX 0 ; N d1 ; B -18 -69 265 19 ;
+C 2 ; WX 0 ; N d2 ; B -18 -59 268 19 ;
+C 3 ; WX 0 ; N d3 ; B -18 -50 269 20 ;
+C 4 ; WX 0 ; N d4 ; B -18 -40 270 23 ;
+C 5 ; WX 0 ; N d5 ; B -18 -29 270 26 ;
+C 6 ; WX 0 ; N d6 ; B -18 -18 270 32 ;
+C 7 ; WX 0 ; N d7 ; B -18 -19 270 38 ;
+C 8 ; WX 0 ; N d8 ; B -18 -18 269 49 ;
+C 9 ; WX 0 ; N d9 ; B -18 -18 268 59 ;
+C 10 ; WX 0 ; N d10 ; B -18 -19 265 73 ;
+C 11 ; WX 0 ; N d11 ; B -18 -18 262 87 ;
+C 12 ; WX 0 ; N d12 ; B -18 -19 257 101 ;
+C 13 ; WX 0 ; N d13 ; B -18 -18 251 115 ;
+C 14 ; WX 0 ; N d14 ; B -18 -18 245 130 ;
+C 15 ; WX 0 ; N d15 ; B -18 -19 238 144 ;
+C 16 ; WX 0 ; N d16 ; B -18 -18 229 157 ;
+C 17 ; WX 0 ; N d17 ; B -18 -18 221 170 ;
+C 18 ; WX 0 ; N d18 ; B -18 -18 210 182 ;
+C 19 ; WX 0 ; N d19 ; B -18 -18 200 193 ;
+C 20 ; WX 0 ; N d20 ; B -18 -18 191 204 ;
+C 21 ; WX 0 ; N d21 ; B -19 -19 179 213 ;
+C 22 ; WX 0 ; N d22 ; B -18 -18 169 221 ;
+C 23 ; WX 0 ; N d23 ; B -19 -19 159 229 ;
+C 24 ; WX 0 ; N d24 ; B -18 -18 149 235 ;
+C 25 ; WX 0 ; N d25 ; B -19 -18 138 240 ;
+C 26 ; WX 0 ; N d26 ; B -18 -18 128 245 ;
+C 27 ; WX 0 ; N d27 ; B -18 -18 119 250 ;
+C 28 ; WX 0 ; N d28 ; B -19 -18 109 253 ;
+C 29 ; WX 0 ; N d29 ; B -19 -19 102 257 ;
+C 30 ; WX 0 ; N d30 ; B -19 -18 94 259 ;
+C 31 ; WX 0 ; N d31 ; B -18 -19 86 262 ;
+C 32 ; WX 0 ; N d32 ; B -18 -18 77 264 ;
+C 33 ; WX 0 ; N d33 ; B -18 -18 68 266 ;
+C 34 ; WX 0 ; N d34 ; B -19 -19 59 267 ;
+C 35 ; WX 0 ; N d35 ; B -20 -18 50 269 ;
+C 36 ; WX 0 ; N d36 ; B -22 -19 40 270 ;
+C 37 ; WX 0 ; N d37 ; B -25 -18 28 270 ;
+C 38 ; WX 0 ; N d38 ; B -31 -18 19 271 ;
+C 39 ; WX 0 ; N d39 ; B -38 -18 19 270 ;
+C 40 ; WX 0 ; N d40 ; B -48 -18 19 270 ;
+C 41 ; WX 0 ; N d41 ; B -60 -18 19 268 ;
+C 42 ; WX 0 ; N d42 ; B -73 -18 19 265 ;
+C 43 ; WX 0 ; N d43 ; B -87 -18 18 262 ;
+C 44 ; WX 0 ; N d44 ; B -101 -18 19 257 ;
+C 45 ; WX 0 ; N d45 ; B -116 -18 19 251 ;
+C 46 ; WX 0 ; N d46 ; B -130 -18 19 245 ;
+C 47 ; WX 0 ; N d47 ; B -144 -18 19 237 ;
+C 48 ; WX 0 ; N d48 ; B -157 -18 19 230 ;
+C 49 ; WX 0 ; N d49 ; B -170 -18 19 221 ;
+C 50 ; WX 0 ; N d50 ; B -182 -18 19 210 ;
+C 51 ; WX 0 ; N d51 ; B -194 -18 19 200 ;
+C 52 ; WX 0 ; N d52 ; B -202 -18 19 191 ;
+C 53 ; WX 0 ; N d53 ; B -212 -18 19 180 ;
+C 54 ; WX 0 ; N d54 ; B -221 -18 19 169 ;
+C 55 ; WX 0 ; N d55 ; B -229 -18 19 158 ;
+C 56 ; WX 0 ; N d56 ; B -235 -18 19 148 ;
+C 57 ; WX 0 ; N d57 ; B -240 -18 19 138 ;
+C 58 ; WX 0 ; N d58 ; B -246 -19 19 129 ;
+C 59 ; WX 0 ; N d59 ; B -250 -18 19 119 ;
+C 60 ; WX 0 ; N d60 ; B -254 -18 19 109 ;
+C 61 ; WX 0 ; N d61 ; B -257 -18 19 101 ;
+C 62 ; WX 0 ; N d62 ; B -259 -18 19 93 ;
+C 63 ; WX 0 ; N d63 ; B -262 -18 19 85 ;
+C 64 ; WX 0 ; N d64 ; B -264 -19 19 77 ;
+C 65 ; WX 0 ; N d65 ; B -265 -19 19 68 ;
+C 66 ; WX 0 ; N d66 ; B -268 -19 19 59 ;
+C 67 ; WX 0 ; N d67 ; B -269 -21 19 50 ;
+C 68 ; WX 0 ; N d68 ; B -270 -22 19 39 ;
+C 69 ; WX 0 ; N d69 ; B -270 -26 19 28 ;
+C 70 ; WX 0 ; N d70 ; B -270 -31 19 18 ;
+C 71 ; WX 0 ; N d71 ; B -270 -38 19 18 ;
+C 72 ; WX 0 ; N d72 ; B -269 -48 19 19 ;
+C 73 ; WX 0 ; N d73 ; B -268 -60 19 19 ;
+C 74 ; WX 0 ; N d74 ; B -265 -73 19 19 ;
+C 75 ; WX 0 ; N d75 ; B -262 -87 19 19 ;
+C 76 ; WX 0 ; N d76 ; B -257 -101 19 19 ;
+C 77 ; WX 0 ; N d77 ; B -251 -115 19 19 ;
+C 78 ; WX 0 ; N d78 ; B -245 -130 19 19 ;
+C 79 ; WX 0 ; N d79 ; B -237 -144 19 19 ;
+C 80 ; WX 0 ; N d80 ; B -229 -157 19 19 ;
+C 81 ; WX 0 ; N d81 ; B -221 -170 19 19 ;
+C 82 ; WX 0 ; N d82 ; B -210 -182 19 19 ;
+C 83 ; WX 0 ; N d83 ; B -200 -193 19 19 ;
+C 84 ; WX 0 ; N d84 ; B -191 -204 19 19 ;
+C 85 ; WX 0 ; N d85 ; B -179 -212 19 19 ;
+C 86 ; WX 0 ; N d86 ; B -169 -221 19 19 ;
+C 87 ; WX 0 ; N d87 ; B -158 -228 19 19 ;
+C 88 ; WX 0 ; N d88 ; B -149 -235 19 19 ;
+C 89 ; WX 0 ; N d89 ; B -138 -240 19 19 ;
+C 90 ; WX 0 ; N d90 ; B -129 -246 19 19 ;
+C 91 ; WX 0 ; N d91 ; B -118 -249 19 19 ;
+C 92 ; WX 0 ; N d92 ; B -109 -253 19 20 ;
+C 93 ; WX 0 ; N d93 ; B -101 -257 19 20 ;
+C 94 ; WX 0 ; N d94 ; B -94 -259 19 19 ;
+C 95 ; WX 0 ; N d95 ; B -86 -262 19 20 ;
+C 96 ; WX 0 ; N d96 ; B -77 -264 19 19 ;
+C 97 ; WX 0 ; N d97 ; B -69 -265 19 19 ;
+C 98 ; WX 0 ; N d98 ; B -59 -268 19 20 ;
+C 99 ; WX 0 ; N d99 ; B -50 -268 21 20 ;
+C 100 ; WX 0 ; N d100 ; B -40 -270 22 19 ;
+C 101 ; WX 0 ; N d101 ; B -28 -271 26 19 ;
+C 102 ; WX 0 ; N d102 ; B -18 -270 32 19 ;
+C 103 ; WX 0 ; N d103 ; B -18 -270 38 19 ;
+C 104 ; WX 0 ; N d104 ; B -19 -269 48 19 ;
+C 105 ; WX 0 ; N d105 ; B -19 -268 60 19 ;
+C 106 ; WX 0 ; N d106 ; B -18 -265 73 19 ;
+C 107 ; WX 0 ; N d107 ; B -18 -262 87 20 ;
+C 108 ; WX 0 ; N d108 ; B -18 -256 101 20 ;
+C 109 ; WX 0 ; N d109 ; B -18 -251 115 19 ;
+C 110 ; WX 0 ; N d110 ; B -19 -245 130 19 ;
+C 111 ; WX 0 ; N d111 ; B -18 -237 144 19 ;
+C 112 ; WX 0 ; N d112 ; B -18 -229 157 19 ;
+C 113 ; WX 0 ; N d113 ; B -18 -221 170 19 ;
+C 114 ; WX 0 ; N d114 ; B -19 -210 182 19 ;
+C 115 ; WX 0 ; N d115 ; B -18 -200 194 19 ;
+C 116 ; WX 0 ; N d116 ; B -18 -191 204 19 ;
+C 117 ; WX 0 ; N d117 ; B -18 -179 212 20 ;
+C 118 ; WX 0 ; N d118 ; B -18 -169 221 19 ;
+C 119 ; WX 0 ; N d119 ; B -18 -159 229 19 ;
+C 120 ; WX 0 ; N d120 ; B -18 -148 235 19 ;
+C 121 ; WX 0 ; N d121 ; B -18 -138 240 19 ;
+C 122 ; WX 0 ; N d122 ; B -18 -129 246 19 ;
+C 123 ; WX 0 ; N d123 ; B -18 -118 249 19 ;
+C 124 ; WX 0 ; N d124 ; B -18 -109 253 19 ;
+C 125 ; WX 0 ; N d125 ; B -18 -102 257 19 ;
+C 126 ; WX 0 ; N d126 ; B -18 -93 259 19 ;
+C 127 ; WX 0 ; N d127 ; B -18 -86 262 19 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xyeuat12.afm b/macros/generic/diagrams/xypic/afm/xyeuat12.afm
new file mode 100644
index 0000000000..04e55485e9
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xyeuat12.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:16:30 2013
+FontName XYEUAT-Medium
+FullName XYEUAT
+FamilyName XYEUAT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -269 -269 269 269
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -17 -75 263 17 ;
+C 1 ; WX 0 ; N d1 ; B -17 -67 265 17 ;
+C 2 ; WX 0 ; N d2 ; B -18 -58 266 18 ;
+C 3 ; WX 0 ; N d3 ; B -17 -48 268 18 ;
+C 4 ; WX 0 ; N d4 ; B -17 -38 269 22 ;
+C 5 ; WX 0 ; N d5 ; B -17 -27 269 25 ;
+C 6 ; WX 0 ; N d6 ; B -17 -17 269 30 ;
+C 7 ; WX 0 ; N d7 ; B -18 -17 269 37 ;
+C 8 ; WX 0 ; N d8 ; B -18 -17 268 46 ;
+C 9 ; WX 0 ; N d9 ; B -18 -17 266 58 ;
+C 10 ; WX 0 ; N d10 ; B -18 -17 264 71 ;
+C 11 ; WX 0 ; N d11 ; B -18 -18 260 85 ;
+C 12 ; WX 0 ; N d12 ; B -18 -17 256 100 ;
+C 13 ; WX 0 ; N d13 ; B -18 -18 250 114 ;
+C 14 ; WX 0 ; N d14 ; B -18 -17 243 129 ;
+C 15 ; WX 0 ; N d15 ; B -18 -18 236 142 ;
+C 16 ; WX 0 ; N d16 ; B -18 -18 228 156 ;
+C 17 ; WX 0 ; N d17 ; B -17 -17 219 169 ;
+C 18 ; WX 0 ; N d18 ; B -17 -17 209 180 ;
+C 19 ; WX 0 ; N d19 ; B -17 -17 199 191 ;
+C 20 ; WX 0 ; N d20 ; B -18 -17 189 202 ;
+C 21 ; WX 0 ; N d21 ; B -18 -18 179 211 ;
+C 22 ; WX 0 ; N d22 ; B -17 -18 167 219 ;
+C 23 ; WX 0 ; N d23 ; B -17 -17 158 227 ;
+C 24 ; WX 0 ; N d24 ; B -18 -17 146 234 ;
+C 25 ; WX 0 ; N d25 ; B -17 -17 136 239 ;
+C 26 ; WX 0 ; N d26 ; B -17 -17 126 244 ;
+C 27 ; WX 0 ; N d27 ; B -17 -17 117 248 ;
+C 28 ; WX 0 ; N d28 ; B -18 -17 109 253 ;
+C 29 ; WX 0 ; N d29 ; B -17 -17 99 256 ;
+C 30 ; WX 0 ; N d30 ; B -17 -17 91 258 ;
+C 31 ; WX 0 ; N d31 ; B -17 -17 83 261 ;
+C 32 ; WX 0 ; N d32 ; B -17 -17 75 263 ;
+C 33 ; WX 0 ; N d33 ; B -17 -17 67 264 ;
+C 34 ; WX 0 ; N d34 ; B -17 -18 58 266 ;
+C 35 ; WX 0 ; N d35 ; B -19 -17 48 267 ;
+C 36 ; WX 0 ; N d36 ; B -21 -18 38 269 ;
+C 37 ; WX 0 ; N d37 ; B -26 -17 28 269 ;
+C 38 ; WX 0 ; N d38 ; B -30 -18 18 269 ;
+C 39 ; WX 0 ; N d39 ; B -38 -17 18 269 ;
+C 40 ; WX 0 ; N d40 ; B -47 -17 18 268 ;
+C 41 ; WX 0 ; N d41 ; B -58 -18 17 266 ;
+C 42 ; WX 0 ; N d42 ; B -71 -17 17 263 ;
+C 43 ; WX 0 ; N d43 ; B -85 -17 18 260 ;
+C 44 ; WX 0 ; N d44 ; B -100 -18 17 255 ;
+C 45 ; WX 0 ; N d45 ; B -115 -18 17 250 ;
+C 46 ; WX 0 ; N d46 ; B -128 -18 17 244 ;
+C 47 ; WX 0 ; N d47 ; B -142 -18 17 236 ;
+C 48 ; WX 0 ; N d48 ; B -155 -18 18 228 ;
+C 49 ; WX 0 ; N d49 ; B -168 -18 17 219 ;
+C 50 ; WX 0 ; N d50 ; B -180 -18 17 210 ;
+C 51 ; WX 0 ; N d51 ; B -190 -18 17 199 ;
+C 52 ; WX 0 ; N d52 ; B -203 -18 17 189 ;
+C 53 ; WX 0 ; N d53 ; B -212 -17 18 179 ;
+C 54 ; WX 0 ; N d54 ; B -220 -18 17 167 ;
+C 55 ; WX 0 ; N d55 ; B -227 -17 17 158 ;
+C 56 ; WX 0 ; N d56 ; B -234 -18 17 147 ;
+C 57 ; WX 0 ; N d57 ; B -239 -17 18 136 ;
+C 58 ; WX 0 ; N d58 ; B -244 -17 17 126 ;
+C 59 ; WX 0 ; N d59 ; B -249 -17 17 118 ;
+C 60 ; WX 0 ; N d60 ; B -253 -17 17 108 ;
+C 61 ; WX 0 ; N d61 ; B -255 -17 18 100 ;
+C 62 ; WX 0 ; N d62 ; B -258 -18 17 91 ;
+C 63 ; WX 0 ; N d63 ; B -260 -17 18 83 ;
+C 64 ; WX 0 ; N d64 ; B -263 -17 17 76 ;
+C 65 ; WX 0 ; N d65 ; B -264 -18 17 67 ;
+C 66 ; WX 0 ; N d66 ; B -266 -17 17 58 ;
+C 67 ; WX 0 ; N d67 ; B -267 -17 17 49 ;
+C 68 ; WX 0 ; N d68 ; B -269 -21 17 38 ;
+C 69 ; WX 0 ; N d69 ; B -269 -25 18 27 ;
+C 70 ; WX 0 ; N d70 ; B -269 -30 17 17 ;
+C 71 ; WX 0 ; N d71 ; B -269 -37 17 17 ;
+C 72 ; WX 0 ; N d72 ; B -268 -46 17 17 ;
+C 73 ; WX 0 ; N d73 ; B -266 -57 17 17 ;
+C 74 ; WX 0 ; N d74 ; B -264 -71 17 17 ;
+C 75 ; WX 0 ; N d75 ; B -260 -85 17 17 ;
+C 76 ; WX 0 ; N d76 ; B -256 -100 17 18 ;
+C 77 ; WX 0 ; N d77 ; B -250 -114 17 17 ;
+C 78 ; WX 0 ; N d78 ; B -244 -128 17 17 ;
+C 79 ; WX 0 ; N d79 ; B -236 -143 18 17 ;
+C 80 ; WX 0 ; N d80 ; B -228 -156 18 18 ;
+C 81 ; WX 0 ; N d81 ; B -219 -169 17 18 ;
+C 82 ; WX 0 ; N d82 ; B -209 -180 17 17 ;
+C 83 ; WX 0 ; N d83 ; B -199 -190 17 18 ;
+C 84 ; WX 0 ; N d84 ; B -189 -201 17 18 ;
+C 85 ; WX 0 ; N d85 ; B -178 -211 18 18 ;
+C 86 ; WX 0 ; N d86 ; B -168 -220 17 18 ;
+C 87 ; WX 0 ; N d87 ; B -157 -227 17 18 ;
+C 88 ; WX 0 ; N d88 ; B -146 -234 18 18 ;
+C 89 ; WX 0 ; N d89 ; B -136 -239 17 18 ;
+C 90 ; WX 0 ; N d90 ; B -126 -244 17 18 ;
+C 91 ; WX 0 ; N d91 ; B -118 -248 18 18 ;
+C 92 ; WX 0 ; N d92 ; B -109 -252 18 18 ;
+C 93 ; WX 0 ; N d93 ; B -99 -255 17 18 ;
+C 94 ; WX 0 ; N d94 ; B -91 -258 17 18 ;
+C 95 ; WX 0 ; N d95 ; B -83 -260 17 18 ;
+C 96 ; WX 0 ; N d96 ; B -75 -262 18 18 ;
+C 97 ; WX 0 ; N d97 ; B -67 -265 17 18 ;
+C 98 ; WX 0 ; N d98 ; B -58 -266 17 18 ;
+C 99 ; WX 0 ; N d99 ; B -48 -267 19 18 ;
+C 100 ; WX 0 ; N d100 ; B -38 -269 22 18 ;
+C 101 ; WX 0 ; N d101 ; B -28 -269 25 18 ;
+C 102 ; WX 0 ; N d102 ; B -17 -269 30 18 ;
+C 103 ; WX 0 ; N d103 ; B -17 -269 37 18 ;
+C 104 ; WX 0 ; N d104 ; B -17 -268 47 18 ;
+C 105 ; WX 0 ; N d105 ; B -17 -266 58 18 ;
+C 106 ; WX 0 ; N d106 ; B -17 -263 71 18 ;
+C 107 ; WX 0 ; N d107 ; B -18 -260 85 17 ;
+C 108 ; WX 0 ; N d108 ; B -17 -254 100 18 ;
+C 109 ; WX 0 ; N d109 ; B -18 -250 115 17 ;
+C 110 ; WX 0 ; N d110 ; B -18 -243 128 17 ;
+C 111 ; WX 0 ; N d111 ; B -18 -236 142 17 ;
+C 112 ; WX 0 ; N d112 ; B -17 -228 156 17 ;
+C 113 ; WX 0 ; N d113 ; B -18 -219 168 17 ;
+C 114 ; WX 0 ; N d114 ; B -18 -209 180 17 ;
+C 115 ; WX 0 ; N d115 ; B -18 -199 191 17 ;
+C 116 ; WX 0 ; N d116 ; B -18 -189 203 17 ;
+C 117 ; WX 0 ; N d117 ; B -18 -179 212 18 ;
+C 118 ; WX 0 ; N d118 ; B -18 -168 219 18 ;
+C 119 ; WX 0 ; N d119 ; B -18 -157 228 17 ;
+C 120 ; WX 0 ; N d120 ; B -18 -146 233 17 ;
+C 121 ; WX 0 ; N d121 ; B -17 -137 240 17 ;
+C 122 ; WX 0 ; N d122 ; B -18 -126 245 17 ;
+C 123 ; WX 0 ; N d123 ; B -18 -117 249 17 ;
+C 124 ; WX 0 ; N d124 ; B -18 -109 252 17 ;
+C 125 ; WX 0 ; N d125 ; B -18 -99 255 17 ;
+C 126 ; WX 0 ; N d126 ; B -17 -91 258 18 ;
+C 127 ; WX 0 ; N d127 ; B -17 -83 260 17 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xyeubt10.afm b/macros/generic/diagrams/xypic/afm/xyeubt10.afm
new file mode 100644
index 0000000000..dabe58b246
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xyeubt10.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:16:21 2013
+FontName XYEUBT-Medium
+FullName XYEUBT
+FamilyName XYEUBT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -273 -273 273 272
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -95 -20 21 261 ;
+C 1 ; WX 0 ; N d1 ; B -103 -20 21 259 ;
+C 2 ; WX 0 ; N d2 ; B -112 -20 21 255 ;
+C 3 ; WX 0 ; N d3 ; B -121 -21 21 252 ;
+C 4 ; WX 0 ; N d4 ; B -131 -20 20 247 ;
+C 5 ; WX 0 ; N d5 ; B -139 -20 21 242 ;
+C 6 ; WX 0 ; N d6 ; B -151 -20 21 237 ;
+C 7 ; WX 0 ; N d7 ; B -160 -21 20 231 ;
+C 8 ; WX 0 ; N d8 ; B -172 -21 20 223 ;
+C 9 ; WX 0 ; N d9 ; B -181 -21 20 214 ;
+C 10 ; WX 0 ; N d10 ; B -192 -20 21 205 ;
+C 11 ; WX 0 ; N d11 ; B -203 -21 21 196 ;
+C 12 ; WX 0 ; N d12 ; B -212 -19 21 184 ;
+C 13 ; WX 0 ; N d13 ; B -223 -21 21 172 ;
+C 14 ; WX 0 ; N d14 ; B -231 -20 21 159 ;
+C 15 ; WX 0 ; N d15 ; B -239 -20 20 146 ;
+C 16 ; WX 0 ; N d16 ; B -247 -21 21 132 ;
+C 17 ; WX 0 ; N d17 ; B -254 -19 21 118 ;
+C 18 ; WX 0 ; N d18 ; B -259 -21 21 103 ;
+C 19 ; WX 0 ; N d19 ; B -264 -21 21 89 ;
+C 20 ; WX 0 ; N d20 ; B -266 -20 21 75 ;
+C 21 ; WX 0 ; N d21 ; B -269 -20 21 62 ;
+C 22 ; WX 0 ; N d22 ; B -271 -20 20 50 ;
+C 23 ; WX 0 ; N d23 ; B -272 -20 21 41 ;
+C 24 ; WX 0 ; N d24 ; B -271 -21 21 34 ;
+C 25 ; WX 0 ; N d25 ; B -273 -29 21 28 ;
+C 26 ; WX 0 ; N d26 ; B -272 -42 21 24 ;
+C 27 ; WX 0 ; N d27 ; B -271 -52 21 22 ;
+C 28 ; WX 0 ; N d28 ; B -270 -61 21 21 ;
+C 29 ; WX 0 ; N d29 ; B -267 -71 21 21 ;
+C 30 ; WX 0 ; N d30 ; B -266 -79 21 21 ;
+C 31 ; WX 0 ; N d31 ; B -264 -87 21 21 ;
+C 32 ; WX 0 ; N d32 ; B -262 -95 21 21 ;
+C 33 ; WX 0 ; N d33 ; B -259 -104 21 21 ;
+C 34 ; WX 0 ; N d34 ; B -255 -112 21 21 ;
+C 35 ; WX 0 ; N d35 ; B -252 -121 21 21 ;
+C 36 ; WX 0 ; N d36 ; B -247 -129 21 21 ;
+C 37 ; WX 0 ; N d37 ; B -242 -140 21 21 ;
+C 38 ; WX 0 ; N d38 ; B -237 -150 21 21 ;
+C 39 ; WX 0 ; N d39 ; B -230 -160 21 21 ;
+C 40 ; WX 0 ; N d40 ; B -223 -171 21 21 ;
+C 41 ; WX 0 ; N d41 ; B -214 -181 21 21 ;
+C 42 ; WX 0 ; N d42 ; B -205 -192 21 21 ;
+C 43 ; WX 0 ; N d43 ; B -195 -203 21 21 ;
+C 44 ; WX 0 ; N d44 ; B -184 -212 21 21 ;
+C 45 ; WX 0 ; N d45 ; B -172 -223 21 21 ;
+C 46 ; WX 0 ; N d46 ; B -160 -231 21 21 ;
+C 47 ; WX 0 ; N d47 ; B -146 -240 21 21 ;
+C 48 ; WX 0 ; N d48 ; B -131 -247 21 21 ;
+C 49 ; WX 0 ; N d49 ; B -118 -253 21 21 ;
+C 50 ; WX 0 ; N d50 ; B -103 -259 21 21 ;
+C 51 ; WX 0 ; N d51 ; B -89 -264 21 21 ;
+C 52 ; WX 0 ; N d52 ; B -75 -267 21 21 ;
+C 53 ; WX 0 ; N d53 ; B -62 -269 21 21 ;
+C 54 ; WX 0 ; N d54 ; B -51 -272 21 21 ;
+C 55 ; WX 0 ; N d55 ; B -41 -272 21 21 ;
+C 56 ; WX 0 ; N d56 ; B -32 -271 21 21 ;
+C 57 ; WX 0 ; N d57 ; B -28 -273 30 21 ;
+C 58 ; WX 0 ; N d58 ; B -23 -272 42 21 ;
+C 59 ; WX 0 ; N d59 ; B -22 -271 52 21 ;
+C 60 ; WX 0 ; N d60 ; B -21 -269 61 21 ;
+C 61 ; WX 0 ; N d61 ; B -21 -267 70 21 ;
+C 62 ; WX 0 ; N d62 ; B -20 -266 80 21 ;
+C 63 ; WX 0 ; N d63 ; B -20 -264 88 21 ;
+C 64 ; WX 0 ; N d64 ; B -21 -261 95 21 ;
+C 65 ; WX 0 ; N d65 ; B -20 -259 103 21 ;
+C 66 ; WX 0 ; N d66 ; B -21 -256 111 21 ;
+C 67 ; WX 0 ; N d67 ; B -20 -252 121 21 ;
+C 68 ; WX 0 ; N d68 ; B -21 -247 131 21 ;
+C 69 ; WX 0 ; N d69 ; B -21 -242 140 21 ;
+C 70 ; WX 0 ; N d70 ; B -20 -237 150 21 ;
+C 71 ; WX 0 ; N d71 ; B -20 -231 160 21 ;
+C 72 ; WX 0 ; N d72 ; B -20 -223 171 21 ;
+C 73 ; WX 0 ; N d73 ; B -20 -214 181 21 ;
+C 74 ; WX 0 ; N d74 ; B -20 -205 192 21 ;
+C 75 ; WX 0 ; N d75 ; B -20 -195 203 21 ;
+C 76 ; WX 0 ; N d76 ; B -21 -184 212 21 ;
+C 77 ; WX 0 ; N d77 ; B -20 -172 223 21 ;
+C 78 ; WX 0 ; N d78 ; B -20 -159 231 21 ;
+C 79 ; WX 0 ; N d79 ; B -20 -146 240 21 ;
+C 80 ; WX 0 ; N d80 ; B -20 -132 247 21 ;
+C 81 ; WX 0 ; N d81 ; B -20 -117 253 21 ;
+C 82 ; WX 0 ; N d82 ; B -20 -103 259 21 ;
+C 83 ; WX 0 ; N d83 ; B -20 -89 264 21 ;
+C 84 ; WX 0 ; N d84 ; B -20 -74 267 21 ;
+C 85 ; WX 0 ; N d85 ; B -20 -62 269 21 ;
+C 86 ; WX 0 ; N d86 ; B -20 -51 272 21 ;
+C 87 ; WX 0 ; N d87 ; B -20 -40 272 21 ;
+C 88 ; WX 0 ; N d88 ; B -20 -33 272 21 ;
+C 89 ; WX 0 ; N d89 ; B -20 -27 273 30 ;
+C 90 ; WX 0 ; N d90 ; B -20 -24 272 41 ;
+C 91 ; WX 0 ; N d91 ; B -20 -23 271 52 ;
+C 92 ; WX 0 ; N d92 ; B -20 -21 270 61 ;
+C 93 ; WX 0 ; N d93 ; B -20 -21 267 70 ;
+C 94 ; WX 0 ; N d94 ; B -20 -20 266 79 ;
+C 95 ; WX 0 ; N d95 ; B -20 -20 264 87 ;
+C 96 ; WX 0 ; N d96 ; B -20 -21 262 95 ;
+C 97 ; WX 0 ; N d97 ; B -20 -20 259 103 ;
+C 98 ; WX 0 ; N d98 ; B -20 -20 256 111 ;
+C 99 ; WX 0 ; N d99 ; B -20 -21 252 121 ;
+C 100 ; WX 0 ; N d100 ; B -20 -20 247 130 ;
+C 101 ; WX 0 ; N d101 ; B -20 -21 242 140 ;
+C 102 ; WX 0 ; N d102 ; B -20 -21 237 151 ;
+C 103 ; WX 0 ; N d103 ; B -20 -21 230 160 ;
+C 104 ; WX 0 ; N d104 ; B -20 -20 223 171 ;
+C 105 ; WX 0 ; N d105 ; B -20 -20 214 182 ;
+C 106 ; WX 0 ; N d106 ; B -20 -20 205 192 ;
+C 107 ; WX 0 ; N d107 ; B -21 -20 196 202 ;
+C 108 ; WX 0 ; N d108 ; B -21 -21 184 212 ;
+C 109 ; WX 0 ; N d109 ; B -20 -21 172 222 ;
+C 110 ; WX 0 ; N d110 ; B -20 -20 160 231 ;
+C 111 ; WX 0 ; N d111 ; B -20 -20 146 239 ;
+C 112 ; WX 0 ; N d112 ; B -20 -20 131 247 ;
+C 113 ; WX 0 ; N d113 ; B -20 -21 118 253 ;
+C 114 ; WX 0 ; N d114 ; B -21 -21 103 259 ;
+C 115 ; WX 0 ; N d115 ; B -20 -21 89 263 ;
+C 116 ; WX 0 ; N d116 ; B -20 -21 75 267 ;
+C 117 ; WX 0 ; N d117 ; B -21 -20 61 270 ;
+C 118 ; WX 0 ; N d118 ; B -21 -20 51 271 ;
+C 119 ; WX 0 ; N d119 ; B -21 -21 40 272 ;
+C 120 ; WX 0 ; N d120 ; B -21 -21 34 272 ;
+C 121 ; WX 0 ; N d121 ; B -30 -21 28 272 ;
+C 122 ; WX 0 ; N d122 ; B -41 -20 24 272 ;
+C 123 ; WX 0 ; N d123 ; B -52 -21 22 271 ;
+C 124 ; WX 0 ; N d124 ; B -61 -21 22 269 ;
+C 125 ; WX 0 ; N d125 ; B -70 -20 21 267 ;
+C 126 ; WX 0 ; N d126 ; B -79 -21 21 266 ;
+C 127 ; WX 0 ; N d127 ; B -87 -21 21 264 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xyeubt11.afm b/macros/generic/diagrams/xypic/afm/xyeubt11.afm
new file mode 100644
index 0000000000..071cd8f27a
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xyeubt11.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:16:27 2013
+FontName XYEUBT-Medium
+FullName XYEUBT
+FamilyName XYEUBT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -271 -271 270 271
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -94 -18 19 260 ;
+C 1 ; WX 0 ; N d1 ; B -101 -18 19 257 ;
+C 2 ; WX 0 ; N d2 ; B -109 -18 19 254 ;
+C 3 ; WX 0 ; N d3 ; B -118 -18 19 250 ;
+C 4 ; WX 0 ; N d4 ; B -129 -18 19 245 ;
+C 5 ; WX 0 ; N d5 ; B -138 -18 19 241 ;
+C 6 ; WX 0 ; N d6 ; B -148 -18 19 235 ;
+C 7 ; WX 0 ; N d7 ; B -158 -19 19 229 ;
+C 8 ; WX 0 ; N d8 ; B -169 -18 19 221 ;
+C 9 ; WX 0 ; N d9 ; B -180 -18 19 212 ;
+C 10 ; WX 0 ; N d10 ; B -190 -18 19 203 ;
+C 11 ; WX 0 ; N d11 ; B -200 -18 19 193 ;
+C 12 ; WX 0 ; N d12 ; B -210 -18 19 182 ;
+C 13 ; WX 0 ; N d13 ; B -220 -19 19 170 ;
+C 14 ; WX 0 ; N d14 ; B -230 -18 19 157 ;
+C 15 ; WX 0 ; N d15 ; B -237 -18 19 144 ;
+C 16 ; WX 0 ; N d16 ; B -245 -18 19 130 ;
+C 17 ; WX 0 ; N d17 ; B -252 -18 19 115 ;
+C 18 ; WX 0 ; N d18 ; B -257 -18 19 101 ;
+C 19 ; WX 0 ; N d19 ; B -262 -19 19 87 ;
+C 20 ; WX 0 ; N d20 ; B -265 -18 19 73 ;
+C 21 ; WX 0 ; N d21 ; B -268 -18 19 59 ;
+C 22 ; WX 0 ; N d22 ; B -270 -18 19 48 ;
+C 23 ; WX 0 ; N d23 ; B -270 -18 19 39 ;
+C 24 ; WX 0 ; N d24 ; B -271 -19 19 32 ;
+C 25 ; WX 0 ; N d25 ; B -271 -29 19 26 ;
+C 26 ; WX 0 ; N d26 ; B -270 -40 19 22 ;
+C 27 ; WX 0 ; N d27 ; B -269 -50 19 20 ;
+C 28 ; WX 0 ; N d28 ; B -268 -59 19 19 ;
+C 29 ; WX 0 ; N d29 ; B -265 -69 19 18 ;
+C 30 ; WX 0 ; N d30 ; B -264 -77 19 19 ;
+C 31 ; WX 0 ; N d31 ; B -262 -86 19 19 ;
+C 32 ; WX 0 ; N d32 ; B -260 -93 19 19 ;
+C 33 ; WX 0 ; N d33 ; B -257 -102 19 19 ;
+C 34 ; WX 0 ; N d34 ; B -253 -109 19 19 ;
+C 35 ; WX 0 ; N d35 ; B -249 -118 19 19 ;
+C 36 ; WX 0 ; N d36 ; B -246 -129 19 19 ;
+C 37 ; WX 0 ; N d37 ; B -240 -138 19 19 ;
+C 38 ; WX 0 ; N d38 ; B -235 -148 19 19 ;
+C 39 ; WX 0 ; N d39 ; B -229 -159 19 19 ;
+C 40 ; WX 0 ; N d40 ; B -221 -169 19 19 ;
+C 41 ; WX 0 ; N d41 ; B -212 -179 19 19 ;
+C 42 ; WX 0 ; N d42 ; B -204 -191 19 19 ;
+C 43 ; WX 0 ; N d43 ; B -194 -200 19 19 ;
+C 44 ; WX 0 ; N d44 ; B -182 -210 19 19 ;
+C 45 ; WX 0 ; N d45 ; B -170 -221 19 19 ;
+C 46 ; WX 0 ; N d46 ; B -157 -229 19 19 ;
+C 47 ; WX 0 ; N d47 ; B -144 -237 19 20 ;
+C 48 ; WX 0 ; N d48 ; B -130 -245 19 19 ;
+C 49 ; WX 0 ; N d49 ; B -116 -251 19 19 ;
+C 50 ; WX 0 ; N d50 ; B -101 -256 19 19 ;
+C 51 ; WX 0 ; N d51 ; B -87 -262 19 19 ;
+C 52 ; WX 0 ; N d52 ; B -73 -265 19 19 ;
+C 53 ; WX 0 ; N d53 ; B -60 -268 19 19 ;
+C 54 ; WX 0 ; N d54 ; B -48 -269 19 19 ;
+C 55 ; WX 0 ; N d55 ; B -38 -270 19 20 ;
+C 56 ; WX 0 ; N d56 ; B -31 -270 19 20 ;
+C 57 ; WX 0 ; N d57 ; B -26 -271 28 19 ;
+C 58 ; WX 0 ; N d58 ; B -22 -270 40 19 ;
+C 59 ; WX 0 ; N d59 ; B -20 -268 50 19 ;
+C 60 ; WX 0 ; N d60 ; B -20 -268 59 19 ;
+C 61 ; WX 0 ; N d61 ; B -18 -265 69 19 ;
+C 62 ; WX 0 ; N d62 ; B -19 -264 77 19 ;
+C 63 ; WX 0 ; N d63 ; B -18 -262 86 19 ;
+C 64 ; WX 0 ; N d64 ; B -19 -259 94 20 ;
+C 65 ; WX 0 ; N d65 ; B -19 -257 101 19 ;
+C 66 ; WX 0 ; N d66 ; B -19 -253 109 19 ;
+C 67 ; WX 0 ; N d67 ; B -18 -249 119 19 ;
+C 68 ; WX 0 ; N d68 ; B -18 -246 129 19 ;
+C 69 ; WX 0 ; N d69 ; B -18 -240 138 19 ;
+C 70 ; WX 0 ; N d70 ; B -18 -235 149 19 ;
+C 71 ; WX 0 ; N d71 ; B -19 -228 158 19 ;
+C 72 ; WX 0 ; N d72 ; B -19 -221 169 20 ;
+C 73 ; WX 0 ; N d73 ; B -19 -212 179 19 ;
+C 74 ; WX 0 ; N d74 ; B -18 -204 191 19 ;
+C 75 ; WX 0 ; N d75 ; B -18 -193 200 19 ;
+C 76 ; WX 0 ; N d76 ; B -18 -182 210 19 ;
+C 77 ; WX 0 ; N d77 ; B -18 -170 221 19 ;
+C 78 ; WX 0 ; N d78 ; B -18 -157 229 19 ;
+C 79 ; WX 0 ; N d79 ; B -18 -144 237 19 ;
+C 80 ; WX 0 ; N d80 ; B -18 -130 245 19 ;
+C 81 ; WX 0 ; N d81 ; B -18 -116 251 19 ;
+C 82 ; WX 0 ; N d82 ; B -18 -101 257 19 ;
+C 83 ; WX 0 ; N d83 ; B -18 -87 262 19 ;
+C 84 ; WX 0 ; N d84 ; B -18 -73 265 19 ;
+C 85 ; WX 0 ; N d85 ; B -18 -59 268 19 ;
+C 86 ; WX 0 ; N d86 ; B -18 -48 269 19 ;
+C 87 ; WX 0 ; N d87 ; B -18 -38 270 19 ;
+C 88 ; WX 0 ; N d88 ; B -18 -31 270 19 ;
+C 89 ; WX 0 ; N d89 ; B -18 -27 270 29 ;
+C 90 ; WX 0 ; N d90 ; B -18 -23 270 39 ;
+C 91 ; WX 0 ; N d91 ; B -18 -21 269 50 ;
+C 92 ; WX 0 ; N d92 ; B -18 -19 268 59 ;
+C 93 ; WX 0 ; N d93 ; B -18 -19 265 68 ;
+C 94 ; WX 0 ; N d94 ; B -18 -18 264 77 ;
+C 95 ; WX 0 ; N d95 ; B -18 -18 262 85 ;
+C 96 ; WX 0 ; N d96 ; B -18 -18 259 93 ;
+C 97 ; WX 0 ; N d97 ; B -18 -18 258 101 ;
+C 98 ; WX 0 ; N d98 ; B -18 -18 253 109 ;
+C 99 ; WX 0 ; N d99 ; B -18 -18 249 119 ;
+C 100 ; WX 0 ; N d100 ; B -18 -19 246 128 ;
+C 101 ; WX 0 ; N d101 ; B -18 -18 241 138 ;
+C 102 ; WX 0 ; N d102 ; B -18 -18 235 148 ;
+C 103 ; WX 0 ; N d103 ; B -18 -18 229 159 ;
+C 104 ; WX 0 ; N d104 ; B -18 -18 222 169 ;
+C 105 ; WX 0 ; N d105 ; B -18 -18 212 180 ;
+C 106 ; WX 0 ; N d106 ; B -18 -18 204 190 ;
+C 107 ; WX 0 ; N d107 ; B -18 -18 194 200 ;
+C 108 ; WX 0 ; N d108 ; B -19 -19 182 210 ;
+C 109 ; WX 0 ; N d109 ; B -18 -19 170 221 ;
+C 110 ; WX 0 ; N d110 ; B -18 -18 157 230 ;
+C 111 ; WX 0 ; N d111 ; B -18 -18 144 237 ;
+C 112 ; WX 0 ; N d112 ; B -18 -18 130 245 ;
+C 113 ; WX 0 ; N d113 ; B -18 -18 115 251 ;
+C 114 ; WX 0 ; N d114 ; B -18 -18 101 257 ;
+C 115 ; WX 0 ; N d115 ; B -18 -18 87 262 ;
+C 116 ; WX 0 ; N d116 ; B -19 -18 73 265 ;
+C 117 ; WX 0 ; N d117 ; B -19 -18 60 268 ;
+C 118 ; WX 0 ; N d118 ; B -19 -18 49 269 ;
+C 119 ; WX 0 ; N d119 ; B -18 -18 38 270 ;
+C 120 ; WX 0 ; N d120 ; B -18 -19 31 271 ;
+C 121 ; WX 0 ; N d121 ; B -28 -18 26 270 ;
+C 122 ; WX 0 ; N d122 ; B -40 -19 23 270 ;
+C 123 ; WX 0 ; N d123 ; B -50 -18 20 269 ;
+C 124 ; WX 0 ; N d124 ; B -59 -18 20 268 ;
+C 125 ; WX 0 ; N d125 ; B -68 -18 19 265 ;
+C 126 ; WX 0 ; N d126 ; B -77 -18 19 265 ;
+C 127 ; WX 0 ; N d127 ; B -86 -18 19 262 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xyeubt12.afm b/macros/generic/diagrams/xypic/afm/xyeubt12.afm
new file mode 100644
index 0000000000..f9a6515d65
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xyeubt12.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:16:32 2013
+FontName XYEUBT-Medium
+FullName XYEUBT
+FamilyName XYEUBT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -269 -269 269 269
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -91 -18 17 258 ;
+C 1 ; WX 0 ; N d1 ; B -100 -18 17 256 ;
+C 2 ; WX 0 ; N d2 ; B -109 -17 18 253 ;
+C 3 ; WX 0 ; N d3 ; B -117 -18 18 249 ;
+C 4 ; WX 0 ; N d4 ; B -126 -18 17 244 ;
+C 5 ; WX 0 ; N d5 ; B -136 -18 17 239 ;
+C 6 ; WX 0 ; N d6 ; B -147 -17 18 233 ;
+C 7 ; WX 0 ; N d7 ; B -157 -17 17 227 ;
+C 8 ; WX 0 ; N d8 ; B -167 -18 17 219 ;
+C 9 ; WX 0 ; N d9 ; B -178 -17 18 211 ;
+C 10 ; WX 0 ; N d10 ; B -189 -18 18 202 ;
+C 11 ; WX 0 ; N d11 ; B -199 -18 17 191 ;
+C 12 ; WX 0 ; N d12 ; B -210 -17 18 181 ;
+C 13 ; WX 0 ; N d13 ; B -219 -17 17 169 ;
+C 14 ; WX 0 ; N d14 ; B -228 -18 18 156 ;
+C 15 ; WX 0 ; N d15 ; B -236 -18 17 142 ;
+C 16 ; WX 0 ; N d16 ; B -243 -17 17 129 ;
+C 17 ; WX 0 ; N d17 ; B -250 -18 18 115 ;
+C 18 ; WX 0 ; N d18 ; B -256 -18 17 100 ;
+C 19 ; WX 0 ; N d19 ; B -260 -17 17 85 ;
+C 20 ; WX 0 ; N d20 ; B -263 -17 17 71 ;
+C 21 ; WX 0 ; N d21 ; B -266 -17 17 58 ;
+C 22 ; WX 0 ; N d22 ; B -268 -18 17 46 ;
+C 23 ; WX 0 ; N d23 ; B -269 -18 17 37 ;
+C 24 ; WX 0 ; N d24 ; B -269 -17 18 30 ;
+C 25 ; WX 0 ; N d25 ; B -269 -27 18 25 ;
+C 26 ; WX 0 ; N d26 ; B -269 -38 17 21 ;
+C 27 ; WX 0 ; N d27 ; B -268 -48 17 18 ;
+C 28 ; WX 0 ; N d28 ; B -266 -58 17 17 ;
+C 29 ; WX 0 ; N d29 ; B -265 -67 17 17 ;
+C 30 ; WX 0 ; N d30 ; B -263 -75 17 17 ;
+C 31 ; WX 0 ; N d31 ; B -260 -83 18 17 ;
+C 32 ; WX 0 ; N d32 ; B -258 -91 17 18 ;
+C 33 ; WX 0 ; N d33 ; B -255 -99 17 17 ;
+C 34 ; WX 0 ; N d34 ; B -253 -109 17 18 ;
+C 35 ; WX 0 ; N d35 ; B -249 -117 17 17 ;
+C 36 ; WX 0 ; N d36 ; B -245 -126 17 17 ;
+C 37 ; WX 0 ; N d37 ; B -240 -137 18 17 ;
+C 38 ; WX 0 ; N d38 ; B -233 -146 17 17 ;
+C 39 ; WX 0 ; N d39 ; B -228 -157 17 18 ;
+C 40 ; WX 0 ; N d40 ; B -219 -167 17 18 ;
+C 41 ; WX 0 ; N d41 ; B -212 -178 18 17 ;
+C 42 ; WX 0 ; N d42 ; B -203 -189 17 18 ;
+C 43 ; WX 0 ; N d43 ; B -190 -199 17 18 ;
+C 44 ; WX 0 ; N d44 ; B -180 -209 18 17 ;
+C 45 ; WX 0 ; N d45 ; B -168 -219 18 17 ;
+C 46 ; WX 0 ; N d46 ; B -155 -228 18 18 ;
+C 47 ; WX 0 ; N d47 ; B -142 -236 18 18 ;
+C 48 ; WX 0 ; N d48 ; B -128 -243 17 18 ;
+C 49 ; WX 0 ; N d49 ; B -115 -250 17 18 ;
+C 50 ; WX 0 ; N d50 ; B -100 -254 17 18 ;
+C 51 ; WX 0 ; N d51 ; B -85 -260 18 18 ;
+C 52 ; WX 0 ; N d52 ; B -71 -263 17 18 ;
+C 53 ; WX 0 ; N d53 ; B -58 -266 17 18 ;
+C 54 ; WX 0 ; N d54 ; B -47 -268 17 18 ;
+C 55 ; WX 0 ; N d55 ; B -37 -269 18 18 ;
+C 56 ; WX 0 ; N d56 ; B -30 -269 18 18 ;
+C 57 ; WX 0 ; N d57 ; B -25 -269 28 18 ;
+C 58 ; WX 0 ; N d58 ; B -21 -269 38 18 ;
+C 59 ; WX 0 ; N d59 ; B -19 -267 48 18 ;
+C 60 ; WX 0 ; N d60 ; B -17 -266 58 18 ;
+C 61 ; WX 0 ; N d61 ; B -18 -265 67 18 ;
+C 62 ; WX 0 ; N d62 ; B -17 -262 75 18 ;
+C 63 ; WX 0 ; N d63 ; B -18 -260 83 18 ;
+C 64 ; WX 0 ; N d64 ; B -17 -259 91 18 ;
+C 65 ; WX 0 ; N d65 ; B -17 -255 99 18 ;
+C 66 ; WX 0 ; N d66 ; B -17 -252 109 18 ;
+C 67 ; WX 0 ; N d67 ; B -17 -248 118 18 ;
+C 68 ; WX 0 ; N d68 ; B -17 -244 126 18 ;
+C 69 ; WX 0 ; N d69 ; B -17 -239 136 17 ;
+C 70 ; WX 0 ; N d70 ; B -18 -234 146 17 ;
+C 71 ; WX 0 ; N d71 ; B -17 -227 157 17 ;
+C 72 ; WX 0 ; N d72 ; B -17 -220 168 18 ;
+C 73 ; WX 0 ; N d73 ; B -18 -211 178 18 ;
+C 74 ; WX 0 ; N d74 ; B -18 -201 189 17 ;
+C 75 ; WX 0 ; N d75 ; B -18 -190 199 17 ;
+C 76 ; WX 0 ; N d76 ; B -18 -180 209 18 ;
+C 77 ; WX 0 ; N d77 ; B -17 -169 219 18 ;
+C 78 ; WX 0 ; N d78 ; B -18 -156 228 18 ;
+C 79 ; WX 0 ; N d79 ; B -18 -143 236 17 ;
+C 80 ; WX 0 ; N d80 ; B -17 -129 243 17 ;
+C 81 ; WX 0 ; N d81 ; B -18 -114 250 18 ;
+C 82 ; WX 0 ; N d82 ; B -18 -100 256 17 ;
+C 83 ; WX 0 ; N d83 ; B -18 -85 260 17 ;
+C 84 ; WX 0 ; N d84 ; B -17 -71 264 17 ;
+C 85 ; WX 0 ; N d85 ; B -18 -57 266 17 ;
+C 86 ; WX 0 ; N d86 ; B -17 -47 268 18 ;
+C 87 ; WX 0 ; N d87 ; B -18 -37 269 18 ;
+C 88 ; WX 0 ; N d88 ; B -18 -29 269 17 ;
+C 89 ; WX 0 ; N d89 ; B -17 -25 269 28 ;
+C 90 ; WX 0 ; N d90 ; B -17 -21 268 38 ;
+C 91 ; WX 0 ; N d91 ; B -17 -17 267 48 ;
+C 92 ; WX 0 ; N d92 ; B -17 -18 266 58 ;
+C 93 ; WX 0 ; N d93 ; B -17 -17 265 67 ;
+C 94 ; WX 0 ; N d94 ; B -17 -17 263 75 ;
+C 95 ; WX 0 ; N d95 ; B -18 -17 260 83 ;
+C 96 ; WX 0 ; N d96 ; B -18 -17 258 92 ;
+C 97 ; WX 0 ; N d97 ; B -17 -17 255 99 ;
+C 98 ; WX 0 ; N d98 ; B -18 -17 252 109 ;
+C 99 ; WX 0 ; N d99 ; B -18 -17 248 118 ;
+C 100 ; WX 0 ; N d100 ; B -18 -17 245 126 ;
+C 101 ; WX 0 ; N d101 ; B -17 -17 239 136 ;
+C 102 ; WX 0 ; N d102 ; B -18 -17 233 146 ;
+C 103 ; WX 0 ; N d103 ; B -18 -17 227 157 ;
+C 104 ; WX 0 ; N d104 ; B -18 -17 219 167 ;
+C 105 ; WX 0 ; N d105 ; B -17 -17 212 179 ;
+C 106 ; WX 0 ; N d106 ; B -18 -18 203 189 ;
+C 107 ; WX 0 ; N d107 ; B -18 -17 191 199 ;
+C 108 ; WX 0 ; N d108 ; B -18 -17 180 210 ;
+C 109 ; WX 0 ; N d109 ; B -18 -17 168 219 ;
+C 110 ; WX 0 ; N d110 ; B -18 -17 156 228 ;
+C 111 ; WX 0 ; N d111 ; B -18 -17 142 236 ;
+C 112 ; WX 0 ; N d112 ; B -18 -17 128 243 ;
+C 113 ; WX 0 ; N d113 ; B -18 -17 115 250 ;
+C 114 ; WX 0 ; N d114 ; B -18 -17 100 255 ;
+C 115 ; WX 0 ; N d115 ; B -18 -18 86 260 ;
+C 116 ; WX 0 ; N d116 ; B -17 -17 71 263 ;
+C 117 ; WX 0 ; N d117 ; B -17 -17 58 266 ;
+C 118 ; WX 0 ; N d118 ; B -17 -17 47 268 ;
+C 119 ; WX 0 ; N d119 ; B -17 -18 37 269 ;
+C 120 ; WX 0 ; N d120 ; B -17 -18 30 269 ;
+C 121 ; WX 0 ; N d121 ; B -28 -17 25 269 ;
+C 122 ; WX 0 ; N d122 ; B -38 -17 21 269 ;
+C 123 ; WX 0 ; N d123 ; B -48 -18 19 267 ;
+C 124 ; WX 0 ; N d124 ; B -58 -18 17 266 ;
+C 125 ; WX 0 ; N d125 ; B -67 -18 17 264 ;
+C 126 ; WX 0 ; N d126 ; B -75 -18 17 262 ;
+C 127 ; WX 0 ; N d127 ; B -83 -17 17 260 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xyluat10.afm b/macros/generic/diagrams/xypic/afm/xyluat10.afm
new file mode 100644
index 0000000000..da4c67078e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xyluat10.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:15:43 2013
+FontName XYLUAT-Medium
+FullName XYLUAT
+FamilyName XYLUAT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -202 -202 202 202
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -27 -29 200 80 ;
+C 1 ; WX 0 ; N d1 ; B -26 -30 198 83 ;
+C 2 ; WX 0 ; N d2 ; B -25 -30 197 85 ;
+C 3 ; WX 0 ; N d3 ; B -22 -32 195 88 ;
+C 4 ; WX 0 ; N d4 ; B -22 -32 192 91 ;
+C 5 ; WX 0 ; N d5 ; B -21 -34 190 93 ;
+C 6 ; WX 0 ; N d6 ; B -19 -34 186 96 ;
+C 7 ; WX 0 ; N d7 ; B -18 -36 181 98 ;
+C 8 ; WX 0 ; N d8 ; B -16 -36 178 101 ;
+C 9 ; WX 0 ; N d9 ; B -14 -37 173 106 ;
+C 10 ; WX 0 ; N d10 ; B -12 -38 166 115 ;
+C 11 ; WX 0 ; N d11 ; B -10 -39 160 125 ;
+C 12 ; WX 0 ; N d12 ; B -7 -38 152 134 ;
+C 13 ; WX 0 ; N d13 ; B -5 -39 143 143 ;
+C 14 ; WX 0 ; N d14 ; B -2 -37 134 151 ;
+C 15 ; WX 0 ; N d15 ; B 0 -39 125 160 ;
+C 16 ; WX 0 ; N d16 ; B -7 -40 114 167 ;
+C 17 ; WX 0 ; N d17 ; B -13 -37 104 174 ;
+C 18 ; WX 0 ; N d18 ; B -20 -39 93 180 ;
+C 19 ; WX 0 ; N d19 ; B -27 -37 82 185 ;
+C 20 ; WX 0 ; N d20 ; B -33 -37 71 189 ;
+C 21 ; WX 0 ; N d21 ; B -38 -36 61 193 ;
+C 22 ; WX 0 ; N d22 ; B -44 -34 50 196 ;
+C 23 ; WX 0 ; N d23 ; B -48 -35 40 198 ;
+C 24 ; WX 0 ; N d24 ; B -53 -33 30 200 ;
+C 25 ; WX 0 ; N d25 ; B -58 -33 21 201 ;
+C 26 ; WX 0 ; N d26 ; B -62 -33 23 201 ;
+C 27 ; WX 0 ; N d27 ; B -66 -31 24 202 ;
+C 28 ; WX 0 ; N d28 ; B -69 -30 25 201 ;
+C 29 ; WX 0 ; N d29 ; B -72 -29 26 202 ;
+C 30 ; WX 0 ; N d30 ; B -75 -28 27 202 ;
+C 31 ; WX 0 ; N d31 ; B -77 -27 28 200 ;
+C 32 ; WX 0 ; N d32 ; B -80 -27 29 200 ;
+C 33 ; WX 0 ; N d33 ; B -82 -26 30 198 ;
+C 34 ; WX 0 ; N d34 ; B -85 -25 30 197 ;
+C 35 ; WX 0 ; N d35 ; B -88 -22 32 195 ;
+C 36 ; WX 0 ; N d36 ; B -91 -22 32 192 ;
+C 37 ; WX 0 ; N d37 ; B -93 -21 34 190 ;
+C 38 ; WX 0 ; N d38 ; B -95 -19 34 186 ;
+C 39 ; WX 0 ; N d39 ; B -98 -18 36 182 ;
+C 40 ; WX 0 ; N d40 ; B -101 -16 36 178 ;
+C 41 ; WX 0 ; N d41 ; B -106 -14 37 172 ;
+C 42 ; WX 0 ; N d42 ; B -115 -12 38 166 ;
+C 43 ; WX 0 ; N d43 ; B -125 -10 39 160 ;
+C 44 ; WX 0 ; N d44 ; B -134 -7 38 152 ;
+C 45 ; WX 0 ; N d45 ; B -143 -5 39 143 ;
+C 46 ; WX 0 ; N d46 ; B -151 -2 36 134 ;
+C 47 ; WX 0 ; N d47 ; B -160 0 39 125 ;
+C 48 ; WX 0 ; N d48 ; B -167 -7 40 114 ;
+C 49 ; WX 0 ; N d49 ; B -174 -14 37 104 ;
+C 50 ; WX 0 ; N d50 ; B -180 -20 39 93 ;
+C 51 ; WX 0 ; N d51 ; B -185 -27 37 82 ;
+C 52 ; WX 0 ; N d52 ; B -189 -33 37 71 ;
+C 53 ; WX 0 ; N d53 ; B -193 -38 36 60 ;
+C 54 ; WX 0 ; N d54 ; B -196 -44 34 50 ;
+C 55 ; WX 0 ; N d55 ; B -198 -49 35 40 ;
+C 56 ; WX 0 ; N d56 ; B -199 -53 32 30 ;
+C 57 ; WX 0 ; N d57 ; B -201 -58 33 21 ;
+C 58 ; WX 0 ; N d58 ; B -201 -62 33 23 ;
+C 59 ; WX 0 ; N d59 ; B -202 -66 32 24 ;
+C 60 ; WX 0 ; N d60 ; B -202 -69 30 25 ;
+C 61 ; WX 0 ; N d61 ; B -202 -72 29 26 ;
+C 62 ; WX 0 ; N d62 ; B -201 -75 28 27 ;
+C 63 ; WX 0 ; N d63 ; B -200 -78 28 28 ;
+C 64 ; WX 0 ; N d64 ; B -200 -80 27 29 ;
+C 65 ; WX 0 ; N d65 ; B -198 -82 26 30 ;
+C 66 ; WX 0 ; N d66 ; B -197 -85 25 31 ;
+C 67 ; WX 0 ; N d67 ; B -195 -88 24 32 ;
+C 68 ; WX 0 ; N d68 ; B -192 -91 21 32 ;
+C 69 ; WX 0 ; N d69 ; B -190 -93 22 35 ;
+C 70 ; WX 0 ; N d70 ; B -186 -96 19 34 ;
+C 71 ; WX 0 ; N d71 ; B -181 -98 18 36 ;
+C 72 ; WX 0 ; N d72 ; B -178 -101 16 36 ;
+C 73 ; WX 0 ; N d73 ; B -173 -106 14 37 ;
+C 74 ; WX 0 ; N d74 ; B -165 -115 12 38 ;
+C 75 ; WX 0 ; N d75 ; B -160 -125 10 39 ;
+C 76 ; WX 0 ; N d76 ; B -152 -134 7 38 ;
+C 77 ; WX 0 ; N d77 ; B -143 -143 5 39 ;
+C 78 ; WX 0 ; N d78 ; B -133 -151 2 36 ;
+C 79 ; WX 0 ; N d79 ; B -125 -160 0 39 ;
+C 80 ; WX 0 ; N d80 ; B -114 -167 7 40 ;
+C 81 ; WX 0 ; N d81 ; B -104 -174 14 39 ;
+C 82 ; WX 0 ; N d82 ; B -93 -180 20 39 ;
+C 83 ; WX 0 ; N d83 ; B -82 -185 26 39 ;
+C 84 ; WX 0 ; N d84 ; B -71 -189 33 37 ;
+C 85 ; WX 0 ; N d85 ; B -61 -193 38 36 ;
+C 86 ; WX 0 ; N d86 ; B -50 -196 44 35 ;
+C 87 ; WX 0 ; N d87 ; B -40 -198 48 35 ;
+C 88 ; WX 0 ; N d88 ; B -30 -199 53 35 ;
+C 89 ; WX 0 ; N d89 ; B -21 -201 58 33 ;
+C 90 ; WX 0 ; N d90 ; B -23 -200 62 33 ;
+C 91 ; WX 0 ; N d91 ; B -24 -202 66 31 ;
+C 92 ; WX 0 ; N d92 ; B -25 -201 69 30 ;
+C 93 ; WX 0 ; N d93 ; B -26 -202 72 30 ;
+C 94 ; WX 0 ; N d94 ; B -27 -202 75 28 ;
+C 95 ; WX 0 ; N d95 ; B -28 -200 78 28 ;
+C 96 ; WX 0 ; N d96 ; B -29 -199 80 27 ;
+C 97 ; WX 0 ; N d97 ; B -30 -198 82 26 ;
+C 98 ; WX 0 ; N d98 ; B -30 -197 85 25 ;
+C 99 ; WX 0 ; N d99 ; B -32 -195 88 22 ;
+C 100 ; WX 0 ; N d100 ; B -32 -192 91 22 ;
+C 101 ; WX 0 ; N d101 ; B -34 -190 93 21 ;
+C 102 ; WX 0 ; N d102 ; B -34 -186 96 19 ;
+C 103 ; WX 0 ; N d103 ; B -36 -181 98 18 ;
+C 104 ; WX 0 ; N d104 ; B -36 -178 101 16 ;
+C 105 ; WX 0 ; N d105 ; B -37 -173 106 14 ;
+C 106 ; WX 0 ; N d106 ; B -38 -165 115 12 ;
+C 107 ; WX 0 ; N d107 ; B -39 -160 125 10 ;
+C 108 ; WX 0 ; N d108 ; B -38 -152 134 7 ;
+C 109 ; WX 0 ; N d109 ; B -39 -143 143 5 ;
+C 110 ; WX 0 ; N d110 ; B -37 -133 151 2 ;
+C 111 ; WX 0 ; N d111 ; B -39 -125 160 0 ;
+C 112 ; WX 0 ; N d112 ; B -40 -114 167 7 ;
+C 113 ; WX 0 ; N d113 ; B -39 -104 174 13 ;
+C 114 ; WX 0 ; N d114 ; B -38 -93 180 20 ;
+C 115 ; WX 0 ; N d115 ; B -38 -82 185 27 ;
+C 116 ; WX 0 ; N d116 ; B -37 -71 189 32 ;
+C 117 ; WX 0 ; N d117 ; B -36 -60 193 38 ;
+C 118 ; WX 0 ; N d118 ; B -34 -50 196 44 ;
+C 119 ; WX 0 ; N d119 ; B -35 -40 198 49 ;
+C 120 ; WX 0 ; N d120 ; B -33 -30 200 53 ;
+C 121 ; WX 0 ; N d121 ; B -33 -21 201 58 ;
+C 122 ; WX 0 ; N d122 ; B -33 -23 201 62 ;
+C 123 ; WX 0 ; N d123 ; B -31 -24 202 66 ;
+C 124 ; WX 0 ; N d124 ; B -30 -25 201 69 ;
+C 125 ; WX 0 ; N d125 ; B -29 -26 202 72 ;
+C 126 ; WX 0 ; N d126 ; B -28 -27 202 75 ;
+C 127 ; WX 0 ; N d127 ; B -27 -28 200 77 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xyluat11.afm b/macros/generic/diagrams/xypic/afm/xyluat11.afm
new file mode 100644
index 0000000000..a127204362
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xyluat11.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:15:49 2013
+FontName XYLUAT-Medium
+FullName XYLUAT
+FamilyName XYLUAT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -205 -205 205 205
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -24 -26 202 83 ;
+C 1 ; WX 0 ; N d1 ; B -23 -27 201 85 ;
+C 2 ; WX 0 ; N d2 ; B -22 -28 199 88 ;
+C 3 ; WX 0 ; N d3 ; B -21 -29 197 91 ;
+C 4 ; WX 0 ; N d4 ; B -20 -29 194 94 ;
+C 5 ; WX 0 ; N d5 ; B -18 -30 193 96 ;
+C 6 ; WX 0 ; N d6 ; B -18 -32 188 99 ;
+C 7 ; WX 0 ; N d7 ; B -15 -32 184 102 ;
+C 8 ; WX 0 ; N d8 ; B -14 -33 179 104 ;
+C 9 ; WX 0 ; N d9 ; B -13 -34 173 109 ;
+C 10 ; WX 0 ; N d10 ; B -10 -34 168 120 ;
+C 11 ; WX 0 ; N d11 ; B -9 -35 160 129 ;
+C 12 ; WX 0 ; N d12 ; B -6 -34 153 138 ;
+C 13 ; WX 0 ; N d13 ; B -4 -34 145 147 ;
+C 14 ; WX 0 ; N d14 ; B -2 -35 134 155 ;
+C 15 ; WX 0 ; N d15 ; B 0 -36 124 163 ;
+C 16 ; WX 0 ; N d16 ; B -7 -35 114 171 ;
+C 17 ; WX 0 ; N d17 ; B -14 -36 104 178 ;
+C 18 ; WX 0 ; N d18 ; B -21 -34 93 184 ;
+C 19 ; WX 0 ; N d19 ; B -27 -34 81 188 ;
+C 20 ; WX 0 ; N d20 ; B -34 -34 70 193 ;
+C 21 ; WX 0 ; N d21 ; B -39 -32 59 196 ;
+C 22 ; WX 0 ; N d22 ; B -44 -33 49 200 ;
+C 23 ; WX 0 ; N d23 ; B -51 -31 39 202 ;
+C 24 ; WX 0 ; N d24 ; B -55 -29 29 204 ;
+C 25 ; WX 0 ; N d25 ; B -59 -30 19 204 ;
+C 26 ; WX 0 ; N d26 ; B -64 -30 21 204 ;
+C 27 ; WX 0 ; N d27 ; B -68 -27 22 205 ;
+C 28 ; WX 0 ; N d28 ; B -71 -28 23 205 ;
+C 29 ; WX 0 ; N d29 ; B -74 -27 24 204 ;
+C 30 ; WX 0 ; N d30 ; B -77 -26 25 204 ;
+C 31 ; WX 0 ; N d31 ; B -80 -24 25 204 ;
+C 32 ; WX 0 ; N d32 ; B -82 -24 26 202 ;
+C 33 ; WX 0 ; N d33 ; B -85 -23 27 201 ;
+C 34 ; WX 0 ; N d34 ; B -88 -22 28 199 ;
+C 35 ; WX 0 ; N d35 ; B -91 -21 29 197 ;
+C 36 ; WX 0 ; N d36 ; B -94 -20 29 194 ;
+C 37 ; WX 0 ; N d37 ; B -96 -18 30 193 ;
+C 38 ; WX 0 ; N d38 ; B -99 -17 30 188 ;
+C 39 ; WX 0 ; N d39 ; B -102 -15 32 184 ;
+C 40 ; WX 0 ; N d40 ; B -104 -14 33 179 ;
+C 41 ; WX 0 ; N d41 ; B -109 -13 34 173 ;
+C 42 ; WX 0 ; N d42 ; B -119 -10 34 168 ;
+C 43 ; WX 0 ; N d43 ; B -129 -9 35 160 ;
+C 44 ; WX 0 ; N d44 ; B -138 -6 34 152 ;
+C 45 ; WX 0 ; N d45 ; B -148 -4 34 144 ;
+C 46 ; WX 0 ; N d46 ; B -155 -2 35 134 ;
+C 47 ; WX 0 ; N d47 ; B -163 0 36 124 ;
+C 48 ; WX 0 ; N d48 ; B -171 -7 36 114 ;
+C 49 ; WX 0 ; N d49 ; B -178 -14 36 104 ;
+C 50 ; WX 0 ; N d50 ; B -184 -21 34 93 ;
+C 51 ; WX 0 ; N d51 ; B -188 -27 34 81 ;
+C 52 ; WX 0 ; N d52 ; B -193 -34 34 70 ;
+C 53 ; WX 0 ; N d53 ; B -196 -39 32 59 ;
+C 54 ; WX 0 ; N d54 ; B -198 -45 33 49 ;
+C 55 ; WX 0 ; N d55 ; B -202 -51 31 39 ;
+C 56 ; WX 0 ; N d56 ; B -204 -55 31 29 ;
+C 57 ; WX 0 ; N d57 ; B -204 -60 29 19 ;
+C 58 ; WX 0 ; N d58 ; B -204 -64 30 21 ;
+C 59 ; WX 0 ; N d59 ; B -204 -68 28 22 ;
+C 60 ; WX 0 ; N d60 ; B -205 -71 27 23 ;
+C 61 ; WX 0 ; N d61 ; B -204 -74 27 24 ;
+C 62 ; WX 0 ; N d62 ; B -204 -77 27 25 ;
+C 63 ; WX 0 ; N d63 ; B -204 -80 26 26 ;
+C 64 ; WX 0 ; N d64 ; B -202 -82 24 26 ;
+C 65 ; WX 0 ; N d65 ; B -201 -85 23 27 ;
+C 66 ; WX 0 ; N d66 ; B -199 -88 22 28 ;
+C 67 ; WX 0 ; N d67 ; B -197 -91 22 29 ;
+C 68 ; WX 0 ; N d68 ; B -194 -94 19 29 ;
+C 69 ; WX 0 ; N d69 ; B -193 -96 18 30 ;
+C 70 ; WX 0 ; N d70 ; B -188 -99 18 32 ;
+C 71 ; WX 0 ; N d71 ; B -184 -102 16 32 ;
+C 72 ; WX 0 ; N d72 ; B -179 -104 14 33 ;
+C 73 ; WX 0 ; N d73 ; B -173 -109 13 34 ;
+C 74 ; WX 0 ; N d74 ; B -168 -119 10 33 ;
+C 75 ; WX 0 ; N d75 ; B -159 -128 9 35 ;
+C 76 ; WX 0 ; N d76 ; B -152 -138 6 34 ;
+C 77 ; WX 0 ; N d77 ; B -144 -148 4 34 ;
+C 78 ; WX 0 ; N d78 ; B -134 -155 2 35 ;
+C 79 ; WX 0 ; N d79 ; B -124 -163 0 36 ;
+C 80 ; WX 0 ; N d80 ; B -114 -171 7 35 ;
+C 81 ; WX 0 ; N d81 ; B -104 -178 14 36 ;
+C 82 ; WX 0 ; N d82 ; B -93 -184 21 34 ;
+C 83 ; WX 0 ; N d83 ; B -81 -189 27 34 ;
+C 84 ; WX 0 ; N d84 ; B -70 -193 34 34 ;
+C 85 ; WX 0 ; N d85 ; B -59 -196 40 33 ;
+C 86 ; WX 0 ; N d86 ; B -49 -200 45 33 ;
+C 87 ; WX 0 ; N d87 ; B -39 -202 51 31 ;
+C 88 ; WX 0 ; N d88 ; B -29 -204 55 32 ;
+C 89 ; WX 0 ; N d89 ; B -19 -204 60 29 ;
+C 90 ; WX 0 ; N d90 ; B -21 -202 64 30 ;
+C 91 ; WX 0 ; N d91 ; B -22 -205 68 27 ;
+C 92 ; WX 0 ; N d92 ; B -23 -205 71 28 ;
+C 93 ; WX 0 ; N d93 ; B -24 -204 74 27 ;
+C 94 ; WX 0 ; N d94 ; B -25 -204 77 26 ;
+C 95 ; WX 0 ; N d95 ; B -26 -205 80 26 ;
+C 96 ; WX 0 ; N d96 ; B -26 -202 83 24 ;
+C 97 ; WX 0 ; N d97 ; B -27 -201 85 23 ;
+C 98 ; WX 0 ; N d98 ; B -28 -199 88 22 ;
+C 99 ; WX 0 ; N d99 ; B -29 -197 91 21 ;
+C 100 ; WX 0 ; N d100 ; B -29 -194 94 20 ;
+C 101 ; WX 0 ; N d101 ; B -30 -193 96 18 ;
+C 102 ; WX 0 ; N d102 ; B -30 -188 99 17 ;
+C 103 ; WX 0 ; N d103 ; B -32 -184 102 15 ;
+C 104 ; WX 0 ; N d104 ; B -33 -179 104 14 ;
+C 105 ; WX 0 ; N d105 ; B -34 -173 109 12 ;
+C 106 ; WX 0 ; N d106 ; B -34 -168 119 10 ;
+C 107 ; WX 0 ; N d107 ; B -35 -160 128 9 ;
+C 108 ; WX 0 ; N d108 ; B -34 -152 138 6 ;
+C 109 ; WX 0 ; N d109 ; B -35 -144 147 4 ;
+C 110 ; WX 0 ; N d110 ; B -35 -134 155 2 ;
+C 111 ; WX 0 ; N d111 ; B -36 -124 163 0 ;
+C 112 ; WX 0 ; N d112 ; B -34 -114 171 7 ;
+C 113 ; WX 0 ; N d113 ; B -36 -104 178 14 ;
+C 114 ; WX 0 ; N d114 ; B -34 -93 184 21 ;
+C 115 ; WX 0 ; N d115 ; B -34 -81 188 27 ;
+C 116 ; WX 0 ; N d116 ; B -34 -70 193 34 ;
+C 117 ; WX 0 ; N d117 ; B -32 -59 196 40 ;
+C 118 ; WX 0 ; N d118 ; B -33 -49 200 45 ;
+C 119 ; WX 0 ; N d119 ; B -31 -39 202 50 ;
+C 120 ; WX 0 ; N d120 ; B -29 -29 204 55 ;
+C 121 ; WX 0 ; N d121 ; B -30 -19 204 60 ;
+C 122 ; WX 0 ; N d122 ; B -30 -21 204 64 ;
+C 123 ; WX 0 ; N d123 ; B -27 -22 205 68 ;
+C 124 ; WX 0 ; N d124 ; B -28 -23 205 71 ;
+C 125 ; WX 0 ; N d125 ; B -27 -24 204 75 ;
+C 126 ; WX 0 ; N d126 ; B -26 -25 204 77 ;
+C 127 ; WX 0 ; N d127 ; B -22 -25 204 80 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xyluat12.afm b/macros/generic/diagrams/xypic/afm/xyluat12.afm
new file mode 100644
index 0000000000..6d75acb44e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xyluat12.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:15:54 2013
+FontName XYLUAT-Medium
+FullName XYLUAT
+FamilyName XYLUAT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -208 -208 208 208
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -22 -24 204 85 ;
+C 1 ; WX 0 ; N d1 ; B -21 -25 203 88 ;
+C 2 ; WX 0 ; N d2 ; B -21 -26 202 90 ;
+C 3 ; WX 0 ; N d3 ; B -19 -26 199 93 ;
+C 4 ; WX 0 ; N d4 ; B -18 -27 197 96 ;
+C 5 ; WX 0 ; N d5 ; B -17 -28 193 99 ;
+C 6 ; WX 0 ; N d6 ; B -16 -29 188 102 ;
+C 7 ; WX 0 ; N d7 ; B -15 -30 183 104 ;
+C 8 ; WX 0 ; N d8 ; B -13 -30 178 107 ;
+C 9 ; WX 0 ; N d9 ; B -11 -30 176 112 ;
+C 10 ; WX 0 ; N d10 ; B -10 -31 169 122 ;
+C 11 ; WX 0 ; N d11 ; B -8 -32 160 131 ;
+C 12 ; WX 0 ; N d12 ; B -6 -32 153 141 ;
+C 13 ; WX 0 ; N d13 ; B -4 -32 144 150 ;
+C 14 ; WX 0 ; N d14 ; B -2 -32 134 158 ;
+C 15 ; WX 0 ; N d15 ; B 0 -33 124 166 ;
+C 16 ; WX 0 ; N d16 ; B -7 -32 115 175 ;
+C 17 ; WX 0 ; N d17 ; B -14 -32 103 180 ;
+C 18 ; WX 0 ; N d18 ; B -21 -31 92 186 ;
+C 19 ; WX 0 ; N d19 ; B -27 -31 81 192 ;
+C 20 ; WX 0 ; N d20 ; B -35 -30 69 195 ;
+C 21 ; WX 0 ; N d21 ; B -41 -31 58 199 ;
+C 22 ; WX 0 ; N d22 ; B -46 -30 48 203 ;
+C 23 ; WX 0 ; N d23 ; B -52 -29 37 204 ;
+C 24 ; WX 0 ; N d24 ; B -57 -27 27 206 ;
+C 25 ; WX 0 ; N d25 ; B -61 -27 18 207 ;
+C 26 ; WX 0 ; N d26 ; B -66 -27 19 208 ;
+C 27 ; WX 0 ; N d27 ; B -69 -26 20 208 ;
+C 28 ; WX 0 ; N d28 ; B -74 -25 21 207 ;
+C 29 ; WX 0 ; N d29 ; B -77 -23 22 206 ;
+C 30 ; WX 0 ; N d30 ; B -80 -23 22 206 ;
+C 31 ; WX 0 ; N d31 ; B -82 -22 23 206 ;
+C 32 ; WX 0 ; N d32 ; B -84 -22 24 204 ;
+C 33 ; WX 0 ; N d33 ; B -88 -21 25 203 ;
+C 34 ; WX 0 ; N d34 ; B -90 -21 26 202 ;
+C 35 ; WX 0 ; N d35 ; B -93 -19 26 199 ;
+C 36 ; WX 0 ; N d36 ; B -96 -18 27 197 ;
+C 37 ; WX 0 ; N d37 ; B -99 -17 28 193 ;
+C 38 ; WX 0 ; N d38 ; B -102 -16 29 190 ;
+C 39 ; WX 0 ; N d39 ; B -104 -15 30 185 ;
+C 40 ; WX 0 ; N d40 ; B -107 -13 30 181 ;
+C 41 ; WX 0 ; N d41 ; B -112 -11 30 175 ;
+C 42 ; WX 0 ; N d42 ; B -122 -10 31 169 ;
+C 43 ; WX 0 ; N d43 ; B -131 -8 32 161 ;
+C 44 ; WX 0 ; N d44 ; B -139 -6 32 152 ;
+C 45 ; WX 0 ; N d45 ; B -149 -4 32 144 ;
+C 46 ; WX 0 ; N d46 ; B -158 -2 32 134 ;
+C 47 ; WX 0 ; N d47 ; B -166 0 33 124 ;
+C 48 ; WX 0 ; N d48 ; B -174 -7 32 114 ;
+C 49 ; WX 0 ; N d49 ; B -180 -14 30 103 ;
+C 50 ; WX 0 ; N d50 ; B -186 -21 31 91 ;
+C 51 ; WX 0 ; N d51 ; B -192 -28 31 80 ;
+C 52 ; WX 0 ; N d52 ; B -195 -35 30 69 ;
+C 53 ; WX 0 ; N d53 ; B -199 -41 31 58 ;
+C 54 ; WX 0 ; N d54 ; B -202 -47 30 48 ;
+C 55 ; WX 0 ; N d55 ; B -204 -51 30 37 ;
+C 56 ; WX 0 ; N d56 ; B -206 -57 27 27 ;
+C 57 ; WX 0 ; N d57 ; B -207 -62 27 18 ;
+C 58 ; WX 0 ; N d58 ; B -208 -66 27 19 ;
+C 59 ; WX 0 ; N d59 ; B -208 -69 26 20 ;
+C 60 ; WX 0 ; N d60 ; B -207 -74 26 21 ;
+C 61 ; WX 0 ; N d61 ; B -206 -77 25 22 ;
+C 62 ; WX 0 ; N d62 ; B -206 -80 25 23 ;
+C 63 ; WX 0 ; N d63 ; B -206 -82 24 24 ;
+C 64 ; WX 0 ; N d64 ; B -204 -85 22 24 ;
+C 65 ; WX 0 ; N d65 ; B -203 -88 21 25 ;
+C 66 ; WX 0 ; N d66 ; B -202 -90 21 26 ;
+C 67 ; WX 0 ; N d67 ; B -199 -93 19 26 ;
+C 68 ; WX 0 ; N d68 ; B -197 -96 18 27 ;
+C 69 ; WX 0 ; N d69 ; B -193 -99 17 28 ;
+C 70 ; WX 0 ; N d70 ; B -188 -102 17 30 ;
+C 71 ; WX 0 ; N d71 ; B -183 -104 15 30 ;
+C 72 ; WX 0 ; N d72 ; B -181 -107 13 30 ;
+C 73 ; WX 0 ; N d73 ; B -173 -112 11 30 ;
+C 74 ; WX 0 ; N d74 ; B -169 -122 10 31 ;
+C 75 ; WX 0 ; N d75 ; B -160 -131 8 32 ;
+C 76 ; WX 0 ; N d76 ; B -152 -139 6 32 ;
+C 77 ; WX 0 ; N d77 ; B -144 -150 4 32 ;
+C 78 ; WX 0 ; N d78 ; B -134 -158 2 32 ;
+C 79 ; WX 0 ; N d79 ; B -124 -166 0 33 ;
+C 80 ; WX 0 ; N d80 ; B -114 -174 7 32 ;
+C 81 ; WX 0 ; N d81 ; B -103 -181 14 30 ;
+C 82 ; WX 0 ; N d82 ; B -92 -186 21 31 ;
+C 83 ; WX 0 ; N d83 ; B -80 -192 28 31 ;
+C 84 ; WX 0 ; N d84 ; B -69 -195 35 30 ;
+C 85 ; WX 0 ; N d85 ; B -58 -199 41 31 ;
+C 86 ; WX 0 ; N d86 ; B -48 -203 47 30 ;
+C 87 ; WX 0 ; N d87 ; B -37 -204 52 30 ;
+C 88 ; WX 0 ; N d88 ; B -27 -206 57 27 ;
+C 89 ; WX 0 ; N d89 ; B -18 -207 62 27 ;
+C 90 ; WX 0 ; N d90 ; B -19 -206 66 28 ;
+C 91 ; WX 0 ; N d91 ; B -20 -208 69 26 ;
+C 92 ; WX 0 ; N d92 ; B -21 -205 74 25 ;
+C 93 ; WX 0 ; N d93 ; B -22 -206 77 23 ;
+C 94 ; WX 0 ; N d94 ; B -22 -206 80 23 ;
+C 95 ; WX 0 ; N d95 ; B -24 -204 82 24 ;
+C 96 ; WX 0 ; N d96 ; B -24 -204 85 22 ;
+C 97 ; WX 0 ; N d97 ; B -25 -203 88 21 ;
+C 98 ; WX 0 ; N d98 ; B -26 -202 90 21 ;
+C 99 ; WX 0 ; N d99 ; B -26 -199 93 19 ;
+C 100 ; WX 0 ; N d100 ; B -27 -197 96 18 ;
+C 101 ; WX 0 ; N d101 ; B -28 -193 99 17 ;
+C 102 ; WX 0 ; N d102 ; B -29 -188 102 16 ;
+C 103 ; WX 0 ; N d103 ; B -30 -183 104 15 ;
+C 104 ; WX 0 ; N d104 ; B -30 -181 107 13 ;
+C 105 ; WX 0 ; N d105 ; B -30 -173 112 11 ;
+C 106 ; WX 0 ; N d106 ; B -31 -169 122 10 ;
+C 107 ; WX 0 ; N d107 ; B -31 -161 131 8 ;
+C 108 ; WX 0 ; N d108 ; B -32 -153 140 6 ;
+C 109 ; WX 0 ; N d109 ; B -32 -144 150 4 ;
+C 110 ; WX 0 ; N d110 ; B -32 -134 158 2 ;
+C 111 ; WX 0 ; N d111 ; B -33 -124 166 0 ;
+C 112 ; WX 0 ; N d112 ; B -32 -114 174 7 ;
+C 113 ; WX 0 ; N d113 ; B -32 -103 180 14 ;
+C 114 ; WX 0 ; N d114 ; B -32 -92 186 21 ;
+C 115 ; WX 0 ; N d115 ; B -31 -81 192 28 ;
+C 116 ; WX 0 ; N d116 ; B -30 -69 195 35 ;
+C 117 ; WX 0 ; N d117 ; B -31 -58 199 41 ;
+C 118 ; WX 0 ; N d118 ; B -30 -48 203 47 ;
+C 119 ; WX 0 ; N d119 ; B -29 -37 204 52 ;
+C 120 ; WX 0 ; N d120 ; B -27 -27 206 57 ;
+C 121 ; WX 0 ; N d121 ; B -27 -18 207 61 ;
+C 122 ; WX 0 ; N d122 ; B -27 -19 208 66 ;
+C 123 ; WX 0 ; N d123 ; B -26 -20 208 70 ;
+C 124 ; WX 0 ; N d124 ; B -25 -21 207 74 ;
+C 125 ; WX 0 ; N d125 ; B -23 -22 206 77 ;
+C 126 ; WX 0 ; N d126 ; B -23 -22 206 80 ;
+C 127 ; WX 0 ; N d127 ; B -22 -23 206 82 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xylubt10.afm b/macros/generic/diagrams/xypic/afm/xylubt10.afm
new file mode 100644
index 0000000000..51fd33c7e1
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xylubt10.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:15:46 2013
+FontName XYLUBT-Medium
+FullName XYLUBT
+FamilyName XYLUBT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -202 -202 202 202
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -27 -28 75 202 ;
+C 1 ; WX 0 ; N d1 ; B -26 -29 72 202 ;
+C 2 ; WX 0 ; N d2 ; B -25 -30 69 202 ;
+C 3 ; WX 0 ; N d3 ; B -24 -31 66 202 ;
+C 4 ; WX 0 ; N d4 ; B -23 -33 62 201 ;
+C 5 ; WX 0 ; N d5 ; B -21 -33 58 201 ;
+C 6 ; WX 0 ; N d6 ; B -30 -32 53 199 ;
+C 7 ; WX 0 ; N d7 ; B -40 -35 49 198 ;
+C 8 ; WX 0 ; N d8 ; B -50 -34 44 196 ;
+C 9 ; WX 0 ; N d9 ; B -60 -36 38 193 ;
+C 10 ; WX 0 ; N d10 ; B -72 -37 33 190 ;
+C 11 ; WX 0 ; N d11 ; B -82 -37 27 185 ;
+C 12 ; WX 0 ; N d12 ; B -93 -39 20 180 ;
+C 13 ; WX 0 ; N d13 ; B -104 -37 14 174 ;
+C 14 ; WX 0 ; N d14 ; B -114 -40 7 167 ;
+C 15 ; WX 0 ; N d15 ; B -125 -39 0 160 ;
+C 16 ; WX 0 ; N d16 ; B -134 -36 2 151 ;
+C 17 ; WX 0 ; N d17 ; B -143 -39 5 143 ;
+C 18 ; WX 0 ; N d18 ; B -152 -38 7 134 ;
+C 19 ; WX 0 ; N d19 ; B -160 -39 10 125 ;
+C 20 ; WX 0 ; N d20 ; B -166 -38 12 115 ;
+C 21 ; WX 0 ; N d21 ; B -172 -37 14 106 ;
+C 22 ; WX 0 ; N d22 ; B -178 -36 16 101 ;
+C 23 ; WX 0 ; N d23 ; B -182 -36 18 98 ;
+C 24 ; WX 0 ; N d24 ; B -186 -34 19 96 ;
+C 25 ; WX 0 ; N d25 ; B -190 -34 21 93 ;
+C 26 ; WX 0 ; N d26 ; B -192 -32 22 91 ;
+C 27 ; WX 0 ; N d27 ; B -195 -32 22 88 ;
+C 28 ; WX 0 ; N d28 ; B -197 -30 25 85 ;
+C 29 ; WX 0 ; N d29 ; B -198 -30 26 83 ;
+C 30 ; WX 0 ; N d30 ; B -200 -29 27 80 ;
+C 31 ; WX 0 ; N d31 ; B -200 -28 28 78 ;
+C 32 ; WX 0 ; N d32 ; B -202 -27 28 75 ;
+C 33 ; WX 0 ; N d33 ; B -202 -26 29 72 ;
+C 34 ; WX 0 ; N d34 ; B -201 -25 30 69 ;
+C 35 ; WX 0 ; N d35 ; B -202 -24 31 66 ;
+C 36 ; WX 0 ; N d36 ; B -201 -23 33 62 ;
+C 37 ; WX 0 ; N d37 ; B -201 -21 33 58 ;
+C 38 ; WX 0 ; N d38 ; B -199 -30 33 54 ;
+C 39 ; WX 0 ; N d39 ; B -198 -40 35 49 ;
+C 40 ; WX 0 ; N d40 ; B -196 -50 34 44 ;
+C 41 ; WX 0 ; N d41 ; B -193 -60 36 38 ;
+C 42 ; WX 0 ; N d42 ; B -189 -71 37 33 ;
+C 43 ; WX 0 ; N d43 ; B -185 -82 37 27 ;
+C 44 ; WX 0 ; N d44 ; B -180 -93 39 20 ;
+C 45 ; WX 0 ; N d45 ; B -174 -104 39 14 ;
+C 46 ; WX 0 ; N d46 ; B -167 -114 40 7 ;
+C 47 ; WX 0 ; N d47 ; B -160 -125 39 0 ;
+C 48 ; WX 0 ; N d48 ; B -151 -133 39 2 ;
+C 49 ; WX 0 ; N d49 ; B -143 -143 40 5 ;
+C 50 ; WX 0 ; N d50 ; B -134 -152 38 7 ;
+C 51 ; WX 0 ; N d51 ; B -125 -160 39 10 ;
+C 52 ; WX 0 ; N d52 ; B -115 -165 38 12 ;
+C 53 ; WX 0 ; N d53 ; B -106 -173 37 14 ;
+C 54 ; WX 0 ; N d54 ; B -101 -178 36 16 ;
+C 55 ; WX 0 ; N d55 ; B -98 -181 36 18 ;
+C 56 ; WX 0 ; N d56 ; B -96 -186 34 19 ;
+C 57 ; WX 0 ; N d57 ; B -93 -190 34 21 ;
+C 58 ; WX 0 ; N d58 ; B -91 -192 32 22 ;
+C 59 ; WX 0 ; N d59 ; B -88 -195 32 24 ;
+C 60 ; WX 0 ; N d60 ; B -85 -197 31 25 ;
+C 61 ; WX 0 ; N d61 ; B -82 -198 30 26 ;
+C 62 ; WX 0 ; N d62 ; B -80 -200 29 27 ;
+C 63 ; WX 0 ; N d63 ; B -77 -200 28 27 ;
+C 64 ; WX 0 ; N d64 ; B -75 -202 27 28 ;
+C 65 ; WX 0 ; N d65 ; B -72 -202 26 29 ;
+C 66 ; WX 0 ; N d66 ; B -69 -201 25 30 ;
+C 67 ; WX 0 ; N d67 ; B -66 -202 24 31 ;
+C 68 ; WX 0 ; N d68 ; B -62 -201 23 33 ;
+C 69 ; WX 0 ; N d69 ; B -58 -201 21 33 ;
+C 70 ; WX 0 ; N d70 ; B -53 -199 30 33 ;
+C 71 ; WX 0 ; N d71 ; B -48 -198 40 35 ;
+C 72 ; WX 0 ; N d72 ; B -44 -196 50 34 ;
+C 73 ; WX 0 ; N d73 ; B -38 -193 60 36 ;
+C 74 ; WX 0 ; N d74 ; B -33 -189 71 37 ;
+C 75 ; WX 0 ; N d75 ; B -27 -185 82 37 ;
+C 76 ; WX 0 ; N d76 ; B -20 -180 93 39 ;
+C 77 ; WX 0 ; N d77 ; B -14 -174 104 37 ;
+C 78 ; WX 0 ; N d78 ; B -7 -167 114 40 ;
+C 79 ; WX 0 ; N d79 ; B 0 -160 125 39 ;
+C 80 ; WX 0 ; N d80 ; B -2 -151 133 37 ;
+C 81 ; WX 0 ; N d81 ; B -5 -143 143 39 ;
+C 82 ; WX 0 ; N d82 ; B -7 -134 152 39 ;
+C 83 ; WX 0 ; N d83 ; B -10 -125 160 39 ;
+C 84 ; WX 0 ; N d84 ; B -12 -115 165 38 ;
+C 85 ; WX 0 ; N d85 ; B -14 -106 173 37 ;
+C 86 ; WX 0 ; N d86 ; B -16 -101 179 36 ;
+C 87 ; WX 0 ; N d87 ; B -18 -98 181 36 ;
+C 88 ; WX 0 ; N d88 ; B -19 -96 186 34 ;
+C 89 ; WX 0 ; N d89 ; B -21 -93 190 34 ;
+C 90 ; WX 0 ; N d90 ; B -22 -91 192 32 ;
+C 91 ; WX 0 ; N d91 ; B -22 -88 195 32 ;
+C 92 ; WX 0 ; N d92 ; B -25 -85 197 30 ;
+C 93 ; WX 0 ; N d93 ; B -26 -82 198 30 ;
+C 94 ; WX 0 ; N d94 ; B -26 -80 199 29 ;
+C 95 ; WX 0 ; N d95 ; B -27 -77 200 28 ;
+C 96 ; WX 0 ; N d96 ; B -27 -75 202 27 ;
+C 97 ; WX 0 ; N d97 ; B -29 -72 202 26 ;
+C 98 ; WX 0 ; N d98 ; B -30 -69 201 25 ;
+C 99 ; WX 0 ; N d99 ; B -31 -66 202 24 ;
+C 100 ; WX 0 ; N d100 ; B -33 -62 200 23 ;
+C 101 ; WX 0 ; N d101 ; B -33 -58 201 21 ;
+C 102 ; WX 0 ; N d102 ; B -35 -53 199 30 ;
+C 103 ; WX 0 ; N d103 ; B -35 -49 198 40 ;
+C 104 ; WX 0 ; N d104 ; B -35 -44 195 50 ;
+C 105 ; WX 0 ; N d105 ; B -36 -38 194 61 ;
+C 106 ; WX 0 ; N d106 ; B -37 -33 190 72 ;
+C 107 ; WX 0 ; N d107 ; B -38 -27 185 83 ;
+C 108 ; WX 0 ; N d108 ; B -39 -20 180 93 ;
+C 109 ; WX 0 ; N d109 ; B -37 -14 174 104 ;
+C 110 ; WX 0 ; N d110 ; B -40 -7 167 114 ;
+C 111 ; WX 0 ; N d111 ; B -39 0 160 125 ;
+C 112 ; WX 0 ; N d112 ; B -37 -2 151 133 ;
+C 113 ; WX 0 ; N d113 ; B -39 -5 143 143 ;
+C 114 ; WX 0 ; N d114 ; B -38 -7 134 152 ;
+C 115 ; WX 0 ; N d115 ; B -39 -10 125 160 ;
+C 116 ; WX 0 ; N d116 ; B -38 -12 115 165 ;
+C 117 ; WX 0 ; N d117 ; B -37 -14 106 173 ;
+C 118 ; WX 0 ; N d118 ; B -36 -16 101 179 ;
+C 119 ; WX 0 ; N d119 ; B -36 -18 98 181 ;
+C 120 ; WX 0 ; N d120 ; B -34 -19 96 186 ;
+C 121 ; WX 0 ; N d121 ; B -34 -21 93 190 ;
+C 122 ; WX 0 ; N d122 ; B -32 -22 91 192 ;
+C 123 ; WX 0 ; N d123 ; B -32 -22 88 195 ;
+C 124 ; WX 0 ; N d124 ; B -30 -25 85 197 ;
+C 125 ; WX 0 ; N d125 ; B -30 -26 82 198 ;
+C 126 ; WX 0 ; N d126 ; B -29 -27 80 200 ;
+C 127 ; WX 0 ; N d127 ; B -28 -28 78 200 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xylubt11.afm b/macros/generic/diagrams/xypic/afm/xylubt11.afm
new file mode 100644
index 0000000000..aa429d1a92
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xylubt11.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:15:51 2013
+FontName XYLUBT-Medium
+FullName XYLUBT
+FamilyName XYLUBT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -205 -205 205 205
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -25 -26 77 204 ;
+C 1 ; WX 0 ; N d1 ; B -24 -27 74 204 ;
+C 2 ; WX 0 ; N d2 ; B -23 -28 71 205 ;
+C 3 ; WX 0 ; N d3 ; B -22 -27 68 205 ;
+C 4 ; WX 0 ; N d4 ; B -21 -30 64 204 ;
+C 5 ; WX 0 ; N d5 ; B -19 -29 60 204 ;
+C 6 ; WX 0 ; N d6 ; B -29 -31 55 204 ;
+C 7 ; WX 0 ; N d7 ; B -39 -31 51 202 ;
+C 8 ; WX 0 ; N d8 ; B -49 -33 45 198 ;
+C 9 ; WX 0 ; N d9 ; B -60 -32 40 196 ;
+C 10 ; WX 0 ; N d10 ; B -70 -34 34 194 ;
+C 11 ; WX 0 ; N d11 ; B -81 -34 27 188 ;
+C 12 ; WX 0 ; N d12 ; B -93 -34 21 184 ;
+C 13 ; WX 0 ; N d13 ; B -104 -36 14 178 ;
+C 14 ; WX 0 ; N d14 ; B -114 -36 7 171 ;
+C 15 ; WX 0 ; N d15 ; B -124 -36 0 163 ;
+C 16 ; WX 0 ; N d16 ; B -134 -35 2 155 ;
+C 17 ; WX 0 ; N d17 ; B -144 -35 4 147 ;
+C 18 ; WX 0 ; N d18 ; B -152 -34 6 138 ;
+C 19 ; WX 0 ; N d19 ; B -159 -35 9 128 ;
+C 20 ; WX 0 ; N d20 ; B -168 -34 10 119 ;
+C 21 ; WX 0 ; N d21 ; B -173 -34 13 109 ;
+C 22 ; WX 0 ; N d22 ; B -180 -33 14 104 ;
+C 23 ; WX 0 ; N d23 ; B -184 -32 15 102 ;
+C 24 ; WX 0 ; N d24 ; B -188 -32 18 99 ;
+C 25 ; WX 0 ; N d25 ; B -193 -30 18 96 ;
+C 26 ; WX 0 ; N d26 ; B -194 -29 20 94 ;
+C 27 ; WX 0 ; N d27 ; B -197 -29 21 91 ;
+C 28 ; WX 0 ; N d28 ; B -199 -28 22 88 ;
+C 29 ; WX 0 ; N d29 ; B -201 -27 23 85 ;
+C 30 ; WX 0 ; N d30 ; B -202 -26 24 83 ;
+C 31 ; WX 0 ; N d31 ; B -204 -26 26 80 ;
+C 32 ; WX 0 ; N d32 ; B -204 -25 26 77 ;
+C 33 ; WX 0 ; N d33 ; B -204 -24 27 75 ;
+C 34 ; WX 0 ; N d34 ; B -205 -23 28 71 ;
+C 35 ; WX 0 ; N d35 ; B -205 -22 27 68 ;
+C 36 ; WX 0 ; N d36 ; B -204 -21 30 64 ;
+C 37 ; WX 0 ; N d37 ; B -204 -19 30 60 ;
+C 38 ; WX 0 ; N d38 ; B -204 -29 29 55 ;
+C 39 ; WX 0 ; N d39 ; B -202 -39 31 51 ;
+C 40 ; WX 0 ; N d40 ; B -200 -49 33 45 ;
+C 41 ; WX 0 ; N d41 ; B -196 -59 32 40 ;
+C 42 ; WX 0 ; N d42 ; B -193 -70 34 34 ;
+C 43 ; WX 0 ; N d43 ; B -188 -81 34 27 ;
+C 44 ; WX 0 ; N d44 ; B -184 -93 34 21 ;
+C 45 ; WX 0 ; N d45 ; B -178 -104 36 14 ;
+C 46 ; WX 0 ; N d46 ; B -171 -114 35 7 ;
+C 47 ; WX 0 ; N d47 ; B -163 -124 36 0 ;
+C 48 ; WX 0 ; N d48 ; B -155 -134 35 2 ;
+C 49 ; WX 0 ; N d49 ; B -147 -144 35 4 ;
+C 50 ; WX 0 ; N d50 ; B -138 -152 34 7 ;
+C 51 ; WX 0 ; N d51 ; B -128 -159 35 9 ;
+C 52 ; WX 0 ; N d52 ; B -119 -168 33 10 ;
+C 53 ; WX 0 ; N d53 ; B -109 -173 34 13 ;
+C 54 ; WX 0 ; N d54 ; B -104 -179 33 14 ;
+C 55 ; WX 0 ; N d55 ; B -102 -184 32 16 ;
+C 56 ; WX 0 ; N d56 ; B -99 -188 32 18 ;
+C 57 ; WX 0 ; N d57 ; B -96 -193 30 19 ;
+C 58 ; WX 0 ; N d58 ; B -94 -194 29 20 ;
+C 59 ; WX 0 ; N d59 ; B -90 -197 28 21 ;
+C 60 ; WX 0 ; N d60 ; B -88 -199 28 23 ;
+C 61 ; WX 0 ; N d61 ; B -85 -201 27 23 ;
+C 62 ; WX 0 ; N d62 ; B -82 -202 26 24 ;
+C 63 ; WX 0 ; N d63 ; B -80 -204 25 24 ;
+C 64 ; WX 0 ; N d64 ; B -77 -204 25 26 ;
+C 65 ; WX 0 ; N d65 ; B -74 -204 24 27 ;
+C 66 ; WX 0 ; N d66 ; B -71 -205 23 28 ;
+C 67 ; WX 0 ; N d67 ; B -68 -205 22 29 ;
+C 68 ; WX 0 ; N d68 ; B -64 -204 21 30 ;
+C 69 ; WX 0 ; N d69 ; B -59 -204 19 30 ;
+C 70 ; WX 0 ; N d70 ; B -55 -204 29 29 ;
+C 71 ; WX 0 ; N d71 ; B -51 -202 39 31 ;
+C 72 ; WX 0 ; N d72 ; B -44 -200 49 33 ;
+C 73 ; WX 0 ; N d73 ; B -39 -196 59 32 ;
+C 74 ; WX 0 ; N d74 ; B -33 -193 70 33 ;
+C 75 ; WX 0 ; N d75 ; B -27 -188 81 34 ;
+C 76 ; WX 0 ; N d76 ; B -21 -184 92 35 ;
+C 77 ; WX 0 ; N d77 ; B -14 -178 104 36 ;
+C 78 ; WX 0 ; N d78 ; B -7 -171 114 36 ;
+C 79 ; WX 0 ; N d79 ; B 0 -163 124 36 ;
+C 80 ; WX 0 ; N d80 ; B -2 -155 134 35 ;
+C 81 ; WX 0 ; N d81 ; B -4 -147 144 35 ;
+C 82 ; WX 0 ; N d82 ; B -6 -138 152 34 ;
+C 83 ; WX 0 ; N d83 ; B -9 -128 160 35 ;
+C 84 ; WX 0 ; N d84 ; B -10 -119 168 34 ;
+C 85 ; WX 0 ; N d85 ; B -12 -109 173 33 ;
+C 86 ; WX 0 ; N d86 ; B -14 -104 179 33 ;
+C 87 ; WX 0 ; N d87 ; B -15 -102 184 32 ;
+C 88 ; WX 0 ; N d88 ; B -17 -99 188 30 ;
+C 89 ; WX 0 ; N d89 ; B -18 -96 193 30 ;
+C 90 ; WX 0 ; N d90 ; B -20 -94 194 29 ;
+C 91 ; WX 0 ; N d91 ; B -21 -91 197 29 ;
+C 92 ; WX 0 ; N d92 ; B -22 -88 199 28 ;
+C 93 ; WX 0 ; N d93 ; B -23 -85 201 27 ;
+C 94 ; WX 0 ; N d94 ; B -24 -82 202 26 ;
+C 95 ; WX 0 ; N d95 ; B -22 -80 204 25 ;
+C 96 ; WX 0 ; N d96 ; B -26 -77 204 25 ;
+C 97 ; WX 0 ; N d97 ; B -27 -74 204 24 ;
+C 98 ; WX 0 ; N d98 ; B -28 -71 205 23 ;
+C 99 ; WX 0 ; N d99 ; B -27 -68 205 22 ;
+C 100 ; WX 0 ; N d100 ; B -30 -64 202 21 ;
+C 101 ; WX 0 ; N d101 ; B -29 -60 204 19 ;
+C 102 ; WX 0 ; N d102 ; B -29 -55 204 29 ;
+C 103 ; WX 0 ; N d103 ; B -31 -51 203 39 ;
+C 104 ; WX 0 ; N d104 ; B -32 -45 199 49 ;
+C 105 ; WX 0 ; N d105 ; B -33 -39 196 60 ;
+C 106 ; WX 0 ; N d106 ; B -34 -34 193 70 ;
+C 107 ; WX 0 ; N d107 ; B -34 -27 188 81 ;
+C 108 ; WX 0 ; N d108 ; B -33 -21 185 94 ;
+C 109 ; WX 0 ; N d109 ; B -36 -14 178 104 ;
+C 110 ; WX 0 ; N d110 ; B -35 -7 171 114 ;
+C 111 ; WX 0 ; N d111 ; B -36 0 163 124 ;
+C 112 ; WX 0 ; N d112 ; B -35 -2 155 134 ;
+C 113 ; WX 0 ; N d113 ; B -34 -4 147 144 ;
+C 114 ; WX 0 ; N d114 ; B -34 -6 138 153 ;
+C 115 ; WX 0 ; N d115 ; B -35 -9 128 159 ;
+C 116 ; WX 0 ; N d116 ; B -33 -10 119 168 ;
+C 117 ; WX 0 ; N d117 ; B -34 -12 109 173 ;
+C 118 ; WX 0 ; N d118 ; B -33 -14 104 179 ;
+C 119 ; WX 0 ; N d119 ; B -32 -15 102 184 ;
+C 120 ; WX 0 ; N d120 ; B -30 -17 99 188 ;
+C 121 ; WX 0 ; N d121 ; B -30 -18 96 192 ;
+C 122 ; WX 0 ; N d122 ; B -29 -20 94 194 ;
+C 123 ; WX 0 ; N d123 ; B -29 -22 91 197 ;
+C 124 ; WX 0 ; N d124 ; B -28 -22 88 199 ;
+C 125 ; WX 0 ; N d125 ; B -27 -23 85 201 ;
+C 126 ; WX 0 ; N d126 ; B -26 -24 83 202 ;
+C 127 ; WX 0 ; N d127 ; B -26 -26 80 205 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/afm/xylubt12.afm b/macros/generic/diagrams/xypic/afm/xylubt12.afm
new file mode 100644
index 0000000000..e585d8569e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/afm/xylubt12.afm
@@ -0,0 +1,146 @@
+StartFontMetrics 2.0
+Comment Generated by FontForge 20110222
+Comment Creation Date: Sat Oct 5 21:15:57 2013
+FontName XYLUBT-Medium
+FullName XYLUBT
+FamilyName XYLUBT
+Weight Medium
+Notice (Generated from MetaFont bitmap by mftrace 1.2.17, http://www.xs4all.nl/~hanwen/mftrace/ )
+ItalicAngle 0
+IsFixedPitch true
+UnderlinePosition -100
+UnderlineThickness 50
+Version 001.001
+EncodingScheme FontSpecific
+FontBBox -208 -209 208 209
+StartCharMetrics 128
+C 0 ; WX 0 ; N d0 ; B -22 -24 80 206 ;
+C 1 ; WX 0 ; N d1 ; B -22 -25 77 207 ;
+C 2 ; WX 0 ; N d2 ; B -21 -25 74 208 ;
+C 3 ; WX 0 ; N d3 ; B -20 -26 69 209 ;
+C 4 ; WX 0 ; N d4 ; B -19 -27 66 208 ;
+C 5 ; WX 0 ; N d5 ; B -18 -27 62 207 ;
+C 6 ; WX 0 ; N d6 ; B -27 -27 57 206 ;
+C 7 ; WX 0 ; N d7 ; B -38 -29 51 204 ;
+C 8 ; WX 0 ; N d8 ; B -48 -30 47 203 ;
+C 9 ; WX 0 ; N d9 ; B -58 -31 41 199 ;
+C 10 ; WX 0 ; N d10 ; B -69 -30 35 195 ;
+C 11 ; WX 0 ; N d11 ; B -80 -31 28 192 ;
+C 12 ; WX 0 ; N d12 ; B -91 -31 21 186 ;
+C 13 ; WX 0 ; N d13 ; B -103 -30 14 180 ;
+C 14 ; WX 0 ; N d14 ; B -114 -32 7 174 ;
+C 15 ; WX 0 ; N d15 ; B -124 -33 0 166 ;
+C 16 ; WX 0 ; N d16 ; B -134 -32 2 158 ;
+C 17 ; WX 0 ; N d17 ; B -144 -32 4 149 ;
+C 18 ; WX 0 ; N d18 ; B -152 -32 6 139 ;
+C 19 ; WX 0 ; N d19 ; B -161 -32 8 131 ;
+C 20 ; WX 0 ; N d20 ; B -169 -31 10 122 ;
+C 21 ; WX 0 ; N d21 ; B -176 -30 11 112 ;
+C 22 ; WX 0 ; N d22 ; B -181 -30 13 107 ;
+C 23 ; WX 0 ; N d23 ; B -185 -30 15 104 ;
+C 24 ; WX 0 ; N d24 ; B -190 -29 16 102 ;
+C 25 ; WX 0 ; N d25 ; B -193 -28 17 99 ;
+C 26 ; WX 0 ; N d26 ; B -197 -27 18 96 ;
+C 27 ; WX 0 ; N d27 ; B -199 -26 19 93 ;
+C 28 ; WX 0 ; N d28 ; B -201 -25 20 90 ;
+C 29 ; WX 0 ; N d29 ; B -203 -25 21 88 ;
+C 30 ; WX 0 ; N d30 ; B -204 -24 22 85 ;
+C 31 ; WX 0 ; N d31 ; B -204 -24 24 82 ;
+C 32 ; WX 0 ; N d32 ; B -206 -23 24 80 ;
+C 33 ; WX 0 ; N d33 ; B -207 -22 25 77 ;
+C 34 ; WX 0 ; N d34 ; B -207 -21 25 74 ;
+C 35 ; WX 0 ; N d35 ; B -208 -20 26 70 ;
+C 36 ; WX 0 ; N d36 ; B -208 -19 27 66 ;
+C 37 ; WX 0 ; N d37 ; B -207 -18 28 62 ;
+C 38 ; WX 0 ; N d38 ; B -206 -27 27 57 ;
+C 39 ; WX 0 ; N d39 ; B -204 -37 30 52 ;
+C 40 ; WX 0 ; N d40 ; B -203 -48 30 47 ;
+C 41 ; WX 0 ; N d41 ; B -199 -58 31 41 ;
+C 42 ; WX 0 ; N d42 ; B -195 -69 30 35 ;
+C 43 ; WX 0 ; N d43 ; B -192 -81 31 28 ;
+C 44 ; WX 0 ; N d44 ; B -186 -92 31 21 ;
+C 45 ; WX 0 ; N d45 ; B -180 -103 32 14 ;
+C 46 ; WX 0 ; N d46 ; B -174 -114 32 7 ;
+C 47 ; WX 0 ; N d47 ; B -166 -124 33 0 ;
+C 48 ; WX 0 ; N d48 ; B -158 -134 32 2 ;
+C 49 ; WX 0 ; N d49 ; B -150 -144 32 4 ;
+C 50 ; WX 0 ; N d50 ; B -140 -153 32 6 ;
+C 51 ; WX 0 ; N d51 ; B -131 -160 32 8 ;
+C 52 ; WX 0 ; N d52 ; B -122 -169 31 10 ;
+C 53 ; WX 0 ; N d53 ; B -112 -175 30 11 ;
+C 54 ; WX 0 ; N d54 ; B -107 -181 30 13 ;
+C 55 ; WX 0 ; N d55 ; B -104 -183 30 15 ;
+C 56 ; WX 0 ; N d56 ; B -102 -190 29 16 ;
+C 57 ; WX 0 ; N d57 ; B -98 -193 28 17 ;
+C 58 ; WX 0 ; N d58 ; B -96 -197 27 18 ;
+C 59 ; WX 0 ; N d59 ; B -93 -199 26 19 ;
+C 60 ; WX 0 ; N d60 ; B -90 -202 26 21 ;
+C 61 ; WX 0 ; N d61 ; B -88 -203 25 21 ;
+C 62 ; WX 0 ; N d62 ; B -84 -204 24 22 ;
+C 63 ; WX 0 ; N d63 ; B -82 -206 23 22 ;
+C 64 ; WX 0 ; N d64 ; B -79 -206 23 24 ;
+C 65 ; WX 0 ; N d65 ; B -77 -207 22 25 ;
+C 66 ; WX 0 ; N d66 ; B -74 -207 21 25 ;
+C 67 ; WX 0 ; N d67 ; B -69 -209 20 26 ;
+C 68 ; WX 0 ; N d68 ; B -66 -208 19 27 ;
+C 69 ; WX 0 ; N d69 ; B -61 -207 18 28 ;
+C 70 ; WX 0 ; N d70 ; B -56 -206 27 27 ;
+C 71 ; WX 0 ; N d71 ; B -52 -204 37 29 ;
+C 72 ; WX 0 ; N d72 ; B -47 -202 48 30 ;
+C 73 ; WX 0 ; N d73 ; B -40 -199 58 31 ;
+C 74 ; WX 0 ; N d74 ; B -35 -195 69 30 ;
+C 75 ; WX 0 ; N d75 ; B -28 -192 80 31 ;
+C 76 ; WX 0 ; N d76 ; B -21 -186 92 32 ;
+C 77 ; WX 0 ; N d77 ; B -14 -181 103 32 ;
+C 78 ; WX 0 ; N d78 ; B -7 -174 114 32 ;
+C 79 ; WX 0 ; N d79 ; B 0 -166 124 33 ;
+C 80 ; WX 0 ; N d80 ; B -2 -158 134 32 ;
+C 81 ; WX 0 ; N d81 ; B -4 -150 144 32 ;
+C 82 ; WX 0 ; N d82 ; B -6 -140 153 32 ;
+C 83 ; WX 0 ; N d83 ; B -9 -131 160 31 ;
+C 84 ; WX 0 ; N d84 ; B -9 -122 169 31 ;
+C 85 ; WX 0 ; N d85 ; B -11 -112 173 30 ;
+C 86 ; WX 0 ; N d86 ; B -13 -107 181 30 ;
+C 87 ; WX 0 ; N d87 ; B -15 -104 183 30 ;
+C 88 ; WX 0 ; N d88 ; B -16 -102 188 29 ;
+C 89 ; WX 0 ; N d89 ; B -17 -99 193 28 ;
+C 90 ; WX 0 ; N d90 ; B -18 -96 197 27 ;
+C 91 ; WX 0 ; N d91 ; B -19 -93 199 26 ;
+C 92 ; WX 0 ; N d92 ; B -21 -90 202 26 ;
+C 93 ; WX 0 ; N d93 ; B -21 -88 203 25 ;
+C 94 ; WX 0 ; N d94 ; B -22 -85 204 24 ;
+C 95 ; WX 0 ; N d95 ; B -22 -82 206 23 ;
+C 96 ; WX 0 ; N d96 ; B -23 -80 206 22 ;
+C 97 ; WX 0 ; N d97 ; B -23 -77 206 22 ;
+C 98 ; WX 0 ; N d98 ; B -25 -74 205 21 ;
+C 99 ; WX 0 ; N d99 ; B -26 -69 208 20 ;
+C 100 ; WX 0 ; N d100 ; B -27 -66 206 19 ;
+C 101 ; WX 0 ; N d101 ; B -27 -62 207 18 ;
+C 102 ; WX 0 ; N d102 ; B -28 -57 206 27 ;
+C 103 ; WX 0 ; N d103 ; B -29 -51 204 37 ;
+C 104 ; WX 0 ; N d104 ; B -30 -47 203 48 ;
+C 105 ; WX 0 ; N d105 ; B -31 -41 199 58 ;
+C 106 ; WX 0 ; N d106 ; B -30 -35 195 69 ;
+C 107 ; WX 0 ; N d107 ; B -31 -28 192 81 ;
+C 108 ; WX 0 ; N d108 ; B -31 -21 186 92 ;
+C 109 ; WX 0 ; N d109 ; B -30 -14 181 103 ;
+C 110 ; WX 0 ; N d110 ; B -32 -7 174 114 ;
+C 111 ; WX 0 ; N d111 ; B -33 0 166 124 ;
+C 112 ; WX 0 ; N d112 ; B -32 -2 158 134 ;
+C 113 ; WX 0 ; N d113 ; B -32 -4 149 144 ;
+C 114 ; WX 0 ; N d114 ; B -32 -6 141 153 ;
+C 115 ; WX 0 ; N d115 ; B -32 -8 131 160 ;
+C 116 ; WX 0 ; N d116 ; B -31 -10 122 169 ;
+C 117 ; WX 0 ; N d117 ; B -30 -11 112 173 ;
+C 118 ; WX 0 ; N d118 ; B -30 -13 107 181 ;
+C 119 ; WX 0 ; N d119 ; B -30 -15 104 183 ;
+C 120 ; WX 0 ; N d120 ; B -29 -16 102 188 ;
+C 121 ; WX 0 ; N d121 ; B -28 -17 99 193 ;
+C 122 ; WX 0 ; N d122 ; B -27 -18 96 197 ;
+C 123 ; WX 0 ; N d123 ; B -26 -19 93 199 ;
+C 124 ; WX 0 ; N d124 ; B -25 -20 90 202 ;
+C 125 ; WX 0 ; N d125 ; B -25 -21 88 204 ;
+C 126 ; WX 0 ; N d126 ; B -24 -22 85 204 ;
+C 127 ; WX 0 ; N d127 ; B -24 -24 82 206 ;
+EndCharMetrics
+EndFontMetrics
diff --git a/macros/generic/diagrams/xypic/doc/barrdoc.pdf b/macros/generic/diagrams/xypic/doc/barrdoc.pdf
new file mode 100644
index 0000000000..00510a310f
--- /dev/null
+++ b/macros/generic/diagrams/xypic/doc/barrdoc.pdf
Binary files differ
diff --git a/macros/generic/diagrams/xypic/doc/xyguide.pdf b/macros/generic/diagrams/xypic/doc/xyguide.pdf
new file mode 100644
index 0000000000..7159646559
--- /dev/null
+++ b/macros/generic/diagrams/xypic/doc/xyguide.pdf
Binary files differ
diff --git a/macros/generic/diagrams/xypic/doc/xypdf.pdf b/macros/generic/diagrams/xypic/doc/xypdf.pdf
new file mode 100644
index 0000000000..695036a11a
--- /dev/null
+++ b/macros/generic/diagrams/xypic/doc/xypdf.pdf
Binary files differ
diff --git a/macros/generic/diagrams/xypic/doc/xyrefer.pdf b/macros/generic/diagrams/xypic/doc/xyrefer.pdf
new file mode 100644
index 0000000000..e21cf0fb13
--- /dev/null
+++ b/macros/generic/diagrams/xypic/doc/xyrefer.pdf
Binary files differ
diff --git a/macros/generic/diagrams/xypic/doc/xysource.pdf b/macros/generic/diagrams/xypic/doc/xysource.pdf
new file mode 100644
index 0000000000..e95926b34b
--- /dev/null
+++ b/macros/generic/diagrams/xypic/doc/xysource.pdf
Binary files differ
diff --git a/macros/generic/diagrams/xypic/enc/xycirc.enc b/macros/generic/diagrams/xypic/enc/xycirc.enc
new file mode 100644
index 0000000000..0ed836bfe4
--- /dev/null
+++ b/macros/generic/diagrams/xypic/enc/xycirc.enc
@@ -0,0 +1,281 @@
+% $Id: xycirc.enc,v 3.4 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYCIRC: PDF character encoding of `Xy-pic Circle Segment' font.
+% Copyright (c) 1998 Kristoffer H. Rose <krisrose@tug.org>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this font file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+/_XYCIRC_Encoding [
+/c0
+/c1
+/c2
+/c3
+/c4
+/c5
+/c6
+/c7
+/c8
+/c9
+/c10
+/c11
+/c12
+/c13
+/c14
+/c15
+/c16
+/c17
+/c18
+/c19
+/c20
+/c21
+/c22
+/c23
+/c24
+/c25
+/c26
+/c27
+/c28
+/c29
+/c30
+/c31
+/c32
+/c33
+/c34
+/c35
+/c36
+/c37
+/c38
+/c39
+/c40
+/c41
+/c42
+/c43
+/c44
+/c45
+/c46
+/c47
+/c48
+/c49
+/c50
+/c51
+/c52
+/c53
+/c54
+/c55
+/c56
+/c57
+/c58
+/c59
+/c60
+/c61
+/c62
+/c63
+/c64
+/c65
+/c66
+/c67
+/c68
+/c69
+/c70
+/c71
+/c72
+/c73
+/c74
+/c75
+/c76
+/c77
+/c78
+/c79
+/c80
+/c81
+/c82
+/c83
+/c84
+/c85
+/c86
+/c87
+/c88
+/c89
+/c90
+/c91
+/c92
+/c93
+/c94
+/c95
+/c96
+/c97
+/c98
+/c99
+/c100
+/c101
+/c102
+/c103
+/c104
+/c105
+/c106
+/c107
+/c108
+/c109
+/c110
+/c111
+/c112
+/c113
+/c114
+/c115
+/c116
+/c117
+/c118
+/c119
+/c120
+/c121
+/c122
+/c123
+/c124
+/c125
+/c126
+/c127
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+] def
diff --git a/macros/generic/diagrams/xypic/enc/xyd.enc b/macros/generic/diagrams/xypic/enc/xyd.enc
new file mode 100644
index 0000000000..e98ea67ded
--- /dev/null
+++ b/macros/generic/diagrams/xypic/enc/xyd.enc
@@ -0,0 +1,281 @@
+% $Id: xyd.enc,v 3.4 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYD: PDF character encoding of `Xy-pic Directional' fonts.
+% Copyright (c) 1998-2010 Kristoffer H. Rose <krisrose@tug.org>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this font file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+/_XYD_Encoding [
+/d0
+/d1
+/d2
+/d3
+/d4
+/d5
+/d6
+/d7
+/d8
+/d9
+/d10
+/d11
+/d12
+/d13
+/d14
+/d15
+/d16
+/d17
+/d18
+/d19
+/d20
+/d21
+/d22
+/d23
+/d24
+/d25
+/d26
+/d27
+/d28
+/d29
+/d30
+/d31
+/d32
+/d33
+/d34
+/d35
+/d36
+/d37
+/d38
+/d39
+/d40
+/d41
+/d42
+/d43
+/d44
+/d45
+/d46
+/d47
+/d48
+/d49
+/d50
+/d51
+/d52
+/d53
+/d54
+/d55
+/d56
+/d57
+/d58
+/d59
+/d60
+/d61
+/d62
+/d63
+/d64
+/d65
+/d66
+/d67
+/d68
+/d69
+/d70
+/d71
+/d72
+/d73
+/d74
+/d75
+/d76
+/d77
+/d78
+/d79
+/d80
+/d81
+/d82
+/d83
+/d84
+/d85
+/d86
+/d87
+/d88
+/d89
+/d90
+/d91
+/d92
+/d93
+/d94
+/d95
+/d96
+/d97
+/d98
+/d99
+/d100
+/d101
+/d102
+/d103
+/d104
+/d105
+/d106
+/d107
+/d108
+/d109
+/d110
+/d111
+/d112
+/d113
+/d114
+/d115
+/d116
+/d117
+/d118
+/d119
+/d120
+/d121
+/d122
+/d123
+/d124
+/d125
+/d126
+/d127
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+] def
diff --git a/macros/generic/diagrams/xypic/enc/xyd2.enc b/macros/generic/diagrams/xypic/enc/xyd2.enc
new file mode 100644
index 0000000000..cf3e42c9d3
--- /dev/null
+++ b/macros/generic/diagrams/xypic/enc/xyd2.enc
@@ -0,0 +1,281 @@
+% $Id: xyd2.enc,v 3.4 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYD2: PDF character encoding of `Xy-pic Semi-Directional' fonts.
+% Copyright (c) 1998-2010 Kristoffer H. Rose <krisrose@tug.org>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this font file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+/_XYD2_Encoding [
+/a0
+/a1
+/a2
+/a3
+/a4
+/a5
+/a6
+/a7
+/a8
+/a9
+/a10
+/a11
+/a12
+/a13
+/a14
+/a15
+/a16
+/a17
+/a18
+/a19
+/a20
+/a21
+/a22
+/a23
+/a24
+/a25
+/a26
+/a27
+/a28
+/a29
+/a30
+/a31
+/a32
+/a33
+/a34
+/a35
+/a36
+/a37
+/a38
+/a39
+/a40
+/a41
+/a42
+/a43
+/a44
+/a45
+/a46
+/a47
+/a48
+/a49
+/a50
+/a51
+/a52
+/a53
+/a54
+/a55
+/a56
+/a57
+/a58
+/a59
+/a60
+/a61
+/a62
+/a63
+/a64
+/a65
+/a66
+/a67
+/a68
+/a69
+/a70
+/a71
+/a72
+/a73
+/a74
+/a75
+/a76
+/a77
+/a78
+/a79
+/a80
+/a81
+/a82
+/a83
+/a84
+/a85
+/a86
+/a87
+/a88
+/a89
+/a90
+/a91
+/a92
+/a93
+/a94
+/a95
+/a96
+/a97
+/a98
+/a99
+/a100
+/a101
+/a102
+/a103
+/a104
+/a105
+/a106
+/a107
+/a108
+/a109
+/a110
+/a111
+/a112
+/a113
+/a114
+/a115
+/a116
+/a117
+/a118
+/a119
+/a120
+/a121
+/a122
+/a123
+/a124
+/a125
+/a126
+/a127
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+] def
diff --git a/macros/generic/diagrams/xypic/map/xypic.map b/macros/generic/diagrams/xypic/map/xypic.map
new file mode 100644
index 0000000000..4fd68e5557
--- /dev/null
+++ b/macros/generic/diagrams/xypic/map/xypic.map
@@ -0,0 +1,64 @@
+%% $Id: xypic.map,v 3.13 2010/06/19 01:56:51 krisrose Exp $
+%%
+%% Xy-pic PostScript type 1 font map for DVIPS.
+%% Copyright (c) 1995-2010 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2010 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+%% As a special exception, you may use this file and all files derived
+%% from it without restrictions. This special exception was added with
+%% version 3.7 of Xy-pic.
+
+% USAGE:
+% Put this line in your DVIPS (and/or other PS driver) header
+% file directory (uncommented, starting in column 1):
+%
+% p+ xypic.map
+
+xydash10 XYDASH-Medium <xydash10.pfb
+xyatip10 XYATIP-Medium <xyatip10.pfb
+xybtip10 XYBTIP-Medium <xybtip10.pfb
+xybsql10 XYBSQL-Medium <xybsql10.pfb
+xycirc10 XYCIRC-Medium <xycirc10.pfb
+
+xycmat10 XYCMAT-Medium <xycmat10.pfb
+xycmbt10 XYCMBT-Medium <xycmbt10.pfb
+xycmat11 XYCMAT-Medium <xycmat11.pfb
+xycmbt11 XYCMBT-Medium <xycmbt11.pfb
+xycmat12 XYCMAT-Medium <xycmat12.pfb
+xycmbt12 XYCMBT-Medium <xycmbt12.pfb
+
+xyeuat10 XYEUAT-Medium <xyeuat10.pfb
+xyeubt10 XYEUBT-Medium <xyeubt10.pfb
+xyeuat11 XYEUAT-Medium <xyeuat11.pfb
+xyeubt11 XYEUBT-Medium <xyeubt11.pfb
+xyeuat12 XYEUAT-Medium <xyeuat12.pfb
+xyeubt12 XYEUBT-Medium <xyeubt12.pfb
+
+% Generated from Jeremy Gibbon's fonts.
+xyluat10 XYLUAT-Medium <xyluat10.pfb
+xylubt10 XYLUBT-Medium <xylubt10.pfb
+xyluat11 XYLUAT-Medium <xyluat11.pfb
+xylubt11 XYLUBT-Medium <xylubt11.pfb
+xyluat12 XYLUAT-Medium <xyluat12.pfb
+xylubt12 XYLUBT-Medium <xylubt12.pfb
+
+% Obsolete (v2.6) fonts not included by default (and not available for PDF).
+%xyline10 XYLINE-Medium <xyline10.pfb
+%xyqc10 XYQC-Medium <xyqc10.pfb
+%xymisc10 XYMISC-Medium <xymisc10.pfb
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyatip.mf b/macros/generic/diagrams/xypic/mfinputs/xyatip.mf
new file mode 100644
index 0000000000..d3c5d117bd
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyatip.mf
@@ -0,0 +1,71 @@
+% $Id: xyatip.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+%
+% Generate upper arrow tips for Xy-pic.
+% Copyright (c) 1994-1996 Kristoffer H. Rose <kris@diku.dk>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+% _________________________________________________________________________
+%
+% CONTENTS: Arrow tips *pointing* in all directions. With zero bounding box
+% placed at the tip; note most of the ink goes on the opposite side of where
+% the tip points.
+%
+% Generates the half of the tip that is upper when pointing right.
+% _________________________________________________________________________
+%
+pickup pencircle scaled segw; char_pen := savepen;
+%
+% chartowards makes char cc a tip pointing towards (dx,dy)...
+%
+def chartowards(expr cc,dx,dy) =
+ beginchar(cc,0,0,0);
+ a := angle(dx,dy);
+ z0 = (tipo,0) rotated a; % tip of tip
+ z1 = (-segl,0) rotated a; % center of tail
+ z2 = (-segl,1/2 segx) rotated a; % tail ends
+ z3 = curvature [z1,z2]; % tail directions
+ pickup char_pen; draw z2..{-z3}z0;
+ penlabels(0,1,2,3);
+ endchar
+enddef;
+
+% TESTING...we redefine openit because the characters extend far to the
+% left of the bounding box!
+%
+def openit = openwindow currentwindow
+ from origin to (screen_cols,screen_rows) at (-200,300) enddef;
+
+% GENERATE...
+%
+input xyd
+
+bye.
+%
+% $Log: xyatip.mf,v $
+% Revision 3.8 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 04:05:28 krisrose
+% New for this maintenance release.
+%
+% Based on xyatip10.mf,v 3.0 1995/07/07 20:14:21 kris Exp
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyatip10.mf b/macros/generic/diagrams/xypic/mfinputs/xyatip10.mf
new file mode 100644
index 0000000000..22b5ca9ca2
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyatip10.mf
@@ -0,0 +1,59 @@
+% $Id: xyatip10.mf,v 3.9 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYATIP10: upper arrow tips for Xy-pic at 10 point "technical style".
+% Copyright (c) 1991-1998 Kristoffer H. Rose <krisrose@tug.org>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restrictions. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+font_identifier "XYATIP"; font_size 10pt#;
+mode_setup;
+
+input xytech
+input xyatip
+
+% $Log: xyatip10.mf,v $
+% Revision 3.9 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.8 2010/04/16 06:06:52 krisrose
+% Preparing for a new release...
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 03:31:56 krisrose
+% Maintenance release
+%
+% Revision 3.0 1995/07/07 20:14:21 kris
+% Major release w/new User's Guide!
+%
+% Revision 2.13 1995/07/04 15:11:17 kris
+% Ready to release v3?
+%
+% Revision 2.7 1992/12/14 01:41:26 kris
+% Now uses xyd.mf.
+%
+% Revision 2.1 1992/01/02 14:54:07 kris
+% Release version.
+%
+% Revision 1.1 1991/11/27 06:40:24 kris
+% Initial: \beta-test on DIKU.
+%
+% Based on obsolete xytip10.mf v.1.4.
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyatri.mf b/macros/generic/diagrams/xypic/mfinputs/xyatri.mf
new file mode 100644
index 0000000000..2bc3a4031c
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyatri.mf
@@ -0,0 +1,58 @@
+% $Id: xyatri.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+%
+% xyatri, for use with Lucida
+% Copyright (c) 2007 Jeremy Gibbons <jeremy.gibbons@comlab.ox.ac.uk>
+%
+% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+
+def chartowards(expr cc,dx,dy) =
+ beginchar(cc,0,0,0);
+ a := angle(dx,dy);
+ z0 = (tipo,0) rotated a; % tip of tip
+ z1 = (-segl,0) rotated a; % center of tail
+ z2 = (-segl,1/2 segx) rotated a; % tail ends
+ z3 = indent [z1,z0]; % back of tip
+ fill z2--z0--z3--cycle;
+ penlabels(0,1,2,3);
+ endchar
+enddef;
+
+def openit = openwindow currentwindow
+ from origin to (screen_cols,screen_rows) at (-200,300) enddef;
+
+input xyd
+
+ bye.
+
+% $Log: xyatri.mf,v $
+% Revision 3.4 2011/03/14 20:14:00 krisrose
+% Preparing for release 3.8.6.
+%
+% Revision 3.3 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.2 2010/04/17 14:45:48 krisrose
+% Generate and extract Type1 fonts.
+%
+% Revision 3.1 2010/04/17 04:19:41 krisrose
+% Integrated xylu tips by Jeremy Gibbons.
+%
+% based on xyatip (triangular rather than curvilinear barbs)
diff --git a/macros/generic/diagrams/xypic/mfinputs/xybsql10.mf b/macros/generic/diagrams/xypic/mfinputs/xybsql10.mf
new file mode 100644
index 0000000000..dfa7c9cbf9
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xybsql10.mf
@@ -0,0 +1,95 @@
+% $Id: xybsql10.mf,v 3.10 2011/08/28 22:19:06 krisrose Exp $
+%
+% XYBSQL10: lower squiggles/quarter circles for Xy-pic at 10 point.
+% Copyright (c) 1992-2011 Kristoffer H. Rose <krisrose@tug.org>
+% 2011 Daniel Müllner <http://math.stanford.edu/~muellner>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+% _________________________________________________________________________
+%
+% CONTENTS: Squiggles are quarter circles with secant in all directions.
+% Each has zero bounding box around the start point, i.e., from which the
+% quarter circle `turns letf' ... this can be illustrated as follows:
+%
+% Code: [-1] 15 31 47 63 79 95 111 127
+% _
+% | ) | /\
+% _o o o o o- o o o _o
+% | ( |_ \/ |
+% _________________________________________________________________________
+%
+font_identifier "XYBSQL"; font_size 10pt#;
+mode_setup;
+
+% METANESS...
+%
+segl# = sqrt 2 * 1/4 designsize; define_pixels(segl); % segment length
+segx# = (sqrt 2 - 1)*segl#; define_pixels(segx); % segment height
+segw# = .4pt#; define_whole_blacker_pixels(segw); % segment thickness
+radius# = 1/4 designsize; define_pixels(radius);
+%
+% chartowards makes char cc with quarter circle that is secant to line
+% from (0,0) to (dx,dy), turning left.
+%
+path arc;
+arc = quartercircle scaled (2 radius + segw)
+ & halfcircle rotated 90 scaled segw shifted (radius * up)
+ & reverse quartercircle scaled (2 radius - segw)
+ & halfcircle rotated 180 scaled segw shifted (radius * right)
+ & cycle;
+
+def chartowards(expr cc,dx,dy) =
+ beginchar(cc,0,0,0);
+ fill arc shifted (radius * left) rotated (angle(dx, dy)-135);
+ endchar
+enddef;
+
+% GENERATE...
+%
+input xyd
+
+bye.
+%
+% $Log: xybsql10.mf,v $
+% Revision 3.10 2011/08/28 22:19:06 krisrose
+% Font fix (stroke to outline) by Daniel.
+%
+% Revision 3.9 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.8 2010/04/16 06:06:52 krisrose
+% Preparing for a new release...
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 03:31:56 krisrose
+% Maintenance release
+%
+% Revision 3.0 1995/07/07 20:14:21 kris
+% Major release w/new User's Guide!
+%
+% Revision 2.13 1995/07/04 15:11:17 kris
+% Ready to release v3?
+%
+% Revision 2.7 1992/12/14 01:41:26 kris
+% Now uses xyd.mf.
+%
+% Based on obsolete xyqc10.mf [Revision 2.6 1992/06/24 01:23:34 kris]
diff --git a/macros/generic/diagrams/xypic/mfinputs/xybtip.mf b/macros/generic/diagrams/xypic/mfinputs/xybtip.mf
new file mode 100644
index 0000000000..e6e95e7159
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xybtip.mf
@@ -0,0 +1,71 @@
+% $Id: xybtip.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+%
+% Generate lower arrow tips for Xy-pic.
+% Copyright (c) 1994-1996 Kristoffer H. Rose <kris@diku.dk>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+% _________________________________________________________________________
+%
+% CONTENTS: Arrow tips *pointing* in all directions. With zero bounding box
+% placed at the tip; note most of the ink goes on the opposite side of where
+% the tip points.
+%
+% Generates the half of the tip that is lower when pointing right.
+% _________________________________________________________________________
+%
+pickup pencircle scaled segw; char_pen := savepen;
+%
+% chartowards makes char cc a tip pointing towards (dx,dy)...
+%
+def chartowards(expr cc,dx,dy) =
+ beginchar(cc,0,0,0);
+ a := angle(dx,dy);
+ z0 = (tipo,0) rotated a; % tip of tip
+ z1 = (-segl,0) rotated a; % center of tail
+ z2 = (-segl,-1/2 segx) rotated a; % tail ends
+ z3 = curvature [z1,z2] ; % tail directions
+ pickup char_pen; draw z2..{-z3}z0;
+ penlabels(0,1,2,3);
+ endchar
+enddef;
+
+% TESTING...we redefine openit because the characters extend far to the
+% left of the bounding box!
+%
+def openit = openwindow currentwindow
+ from origin to (screen_cols,screen_rows) at (-200,300) enddef;
+
+% GENERATE...
+%
+input xyd
+
+bye.
+%
+% $Log: xybtip.mf,v $
+% Revision 3.8 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 04:05:28 krisrose
+% New for this maintenance release.
+%
+% Based on xybtip10.mf,v 3.0 1995/07/07 20:14:21 kris Exp
diff --git a/macros/generic/diagrams/xypic/mfinputs/xybtip10.mf b/macros/generic/diagrams/xypic/mfinputs/xybtip10.mf
new file mode 100644
index 0000000000..c944c2b8a8
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xybtip10.mf
@@ -0,0 +1,59 @@
+% $Id: xybtip10.mf,v 3.9 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYBTIP10: lower arrow tips for Xy-pic at 10 point "technical style".
+% Copyright (c) 1991,1992 Kristoffer H. Rose <krisrose@tug.org>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+font_identifier "XYBTIP"; font_size 10pt#;
+mode_setup;
+
+input xytech
+input xybtip
+
+% $Log: xybtip10.mf,v $
+% Revision 3.9 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.8 2010/04/16 06:06:52 krisrose
+% Preparing for a new release...
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 03:31:56 krisrose
+% Maintenance release
+%
+% Revision 3.0 1995/07/07 20:14:21 kris
+% Major release w/new User's Guide!
+%
+% Revision 2.13 1995/07/04 15:11:17 kris
+% Ready to release v3?
+%
+% Revision 2.7 1992/12/14 01:41:26 kris
+% Now uses xyd.mf.
+%
+% Revision 2.1 1992/01/02 14:54:07 kris
+% Release version.
+%
+% Revision 1.1 1991/11/27 06:41:03 kris
+% Initial: \beta-test on DIKU.
+%
+% Based on obsolete xytip10.mf v.1.4.
diff --git a/macros/generic/diagrams/xypic/mfinputs/xybtri.mf b/macros/generic/diagrams/xypic/mfinputs/xybtri.mf
new file mode 100644
index 0000000000..7b7549f895
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xybtri.mf
@@ -0,0 +1,58 @@
+% $Id: xybtri.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+%
+% xybtri, for use with Lucida
+% Copyright (c) 2007 Jeremy Gibbons <jeremy.gibbons@comlab.ox.ac.uk>
+%
+% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+
+def chartowards(expr cc,dx,dy) =
+ beginchar(cc,0,0,0);
+ a := angle(dx,dy);
+ z0 = (tipo,0) rotated a; % tip of tip
+ z1 = (-segl,0) rotated a; % center of tail
+ z2 = (-segl,-1/2 segx) rotated a; % tail ends
+ z3 = indent [z1,z0]; % back of tip
+ fill z2--z0--z3--cycle;
+ penlabels(0,1,2,3);
+ endchar
+enddef;
+
+def openit = openwindow currentwindow
+ from origin to (screen_cols,screen_rows) at (-200,300) enddef;
+
+input xyd
+
+bye.
+
+% $Log: xybtri.mf,v $
+% Revision 3.4 2011/03/14 20:14:00 krisrose
+% Preparing for release 3.8.6.
+%
+% Revision 3.3 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.2 2010/04/17 14:45:48 krisrose
+% Generate and extract Type1 fonts.
+%
+% Revision 3.1 2010/04/17 04:19:41 krisrose
+% Integrated xylu tips by Jeremy Gibbons.
+%
+% based on xybtip (triangular rather than curvilinear barbs)
diff --git a/macros/generic/diagrams/xypic/mfinputs/xycirc10.mf b/macros/generic/diagrams/xypic/mfinputs/xycirc10.mf
new file mode 100644
index 0000000000..8d23e2e9d3
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xycirc10.mf
@@ -0,0 +1,177 @@
+% $Id: xycirc10.mf,v 3.13 2011/03/14 20:14:00 krisrose Exp $
+%
+% XYCIRC10: 1/8 circles with varying radii for Xy-pic at 10 point.
+% Copyright (c) 1992,2011 Kristoffer H. Rose <krisrose@tug.org>
+% 2011 Daniel Müllner <http://www.math.uni-bonn.de/people/muellner>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+% _________________________________________________________________________
+%
+% CONTENTS: 1/8 circles with radii from 1 to 32pt dissected into the 1/8
+% circle segments shown below
+% 6 5
+% ....... _
+% 7 .. | .. 4 |
+% : | | | : | radius
+% : | | | : |
+% Reference point ---> ___:__|___|___|__:_____|
+% : | | | :
+% : | | | :
+% 0 .! | !. 3
+% ...|...
+% 1 2
+%
+% such that each group of 8 characters cc+0 to cc+7 constitute a full circle
+% with the given radius when typeset on the same baseline (as shown).
+%
+% The bounding box of each segment is the vertical slice of the unit square
+% around the circle.
+%
+% The radius is given for each character group g = cc mod 8 by the formula
+%
+% radius [pt] = g+1, if 0 <= g < 8
+% 2(g-8) + 10, if 8 <= g < 12 [= 2g-6]
+% 4(g-12) + 20, if 12 <= g < 16 [= 4g-28]
+% _________________________________________________________________________
+%
+font_identifier "XYCIRC"; font_size 10pt#;
+mode_setup;
+
+% METANESS...
+%
+rulew# = .4pt#; define_whole_blacker_pixels(rulew); % line thickness
+
+% TESTING...we redefine openit because the characters extend far to the
+% left of the bounding box!
+%
+def openit = %let echar = endchar; def endchar = echar; stop ". " enddef;
+ openwindow currentwindow from origin to (1000,800) at (-200,300)
+enddef;
+
+% FONT.
+%
+% Font dimension 8 is the rule thickness (cf. The TeXbook, app.G)
+%
+font_coding_scheme:="xycirc.enc";
+fontdimen 8: rulew#; % default_rule_thickness
+
+% (It's unnecessary to give the exact control points. MetaFont
+% automatically chooses a good approximation to a circular arc.)
+path eighthcircle;
+eighthcircle = right{up} .. {left+up}(right+up)/sqrt2;
+
+% Use the following macro that generates an entire group from character cc
+% to cc+7 with radius:
+%
+def makeg(expr g,radius) =
+
+ major# := radius/sqrt2;
+ minor# := radius - major#;
+ full# := radius;
+ define_pixels(minor,major,full);
+
+ path arc;
+ arc = eighthcircle scaled (full + rulew/2)
+ & halfcircle scaled rulew shifted (full*right) rotated 45
+ & reverse eighthcircle scaled (full - rulew/2)
+ & halfcircle scaled rulew rotated 180 shifted (full*right)
+ & cycle;
+
+ beginchar(8g ,minor#,full#,full#);
+ fill arc rotated 180 shifted (full*right);
+ endchar;
+
+ beginchar(8g+1,major#,full#,full#);
+ fill arc rotated 225 shifted (major*right);
+ endchar;
+
+ beginchar(8g+2,major#,full#,full#);
+ fill arc rotated 270;
+ endchar;
+
+ beginchar(8g+3,minor#,full#,full#);
+ fill arc rotated 315 shifted (major*left);
+ endchar;
+
+ beginchar(8g+4,minor#,full#,full#);
+ fill arc shifted (major*left);
+ endchar;
+
+ beginchar(8g+5,major#,full#,full#);
+ fill arc rotated 45;
+ endchar;
+
+ beginchar(8g+6,major#,full#,full#);
+ fill arc rotated 90 shifted (major*right);
+ endchar;
+
+ beginchar(8g+7,minor#,full#,full#);
+ fill arc rotated 135 shifted (full*right);
+ endchar;
+
+enddef;
+
+% Make groups:
+%
+for g = 0 step 1 until 7: makeg(g, (g+1)*pt#); endfor;
+for g = 8 step 1 until 11: makeg(g, (2g-6)*pt#); endfor;
+for g = 12 step 1 until 15: makeg(g,(4g-28)*pt#); endfor;
+
+bye.
+
+% $Log: xycirc10.mf,v $
+% Revision 3.13 2011/03/14 20:14:00 krisrose
+% Preparing for release 3.8.6.
+%
+% Revision 3.12 2010/07/07 16:26:39 krisrose
+% Rules should be whole pixels (thanks again to Daniel).
+%
+% Revision 3.11 2010/07/06 21:49:55 krisrose
+% Daniel's fix that works around bug in mf2pt1/fontforge script.
+%
+% Revision 3.10 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.9 2010/05/17 23:29:21 krisrose
+% Experiment: generate all the Type1 fonts with METAPOST.
+%
+% Revision 3.8 2010/04/16 06:06:52 krisrose
+% Preparing for a new release...
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 03:31:56 krisrose
+% Maintenance release
+%
+% Revision 3.0 1995/07/07 20:14:21 kris
+% Major release w/new User's Guide!
+%
+% Revision 2.13 1995/07/04 15:11:17 kris
+% Ready to release v3?
+%
+% Revision 2.7 1994/03/08 02:09:27 kris
+% Release 3alpha.
+%
+% Revision 2.6.9.1 1994/03/07 04:22:46 kris
+% Last internal 3alpha and pre-2.7 release.
+%
+% NEW file to go in version 2.7!
+% Based on xymisc10.mf [Revision 2.6 1992/06/24 01:23:34 kris]
diff --git a/macros/generic/diagrams/xypic/mfinputs/xycm.mf b/macros/generic/diagrams/xypic/mfinputs/xycm.mf
new file mode 100644
index 0000000000..fb0a424023
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xycm.mf
@@ -0,0 +1,42 @@
+% $Id: xycm.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+%
+% Parameter file for Xy-pic "Computer Modern style" arrow tips.
+% Copyright (c) 1994-1996 Kristoffer H. Rose <kris@diku.dk>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+segl# = 1/5 designsize; define_pixels(segl); % segment length
+segx# = 1/2 designsize; define_pixels(segx); % segment height
+segw# = .4pt#; define_whole_blacker_pixels(segw); % segment thickness
+%
+tipo# = 0#; define_pixels(tipo); % tip overshoot
+curvature = 1/3; % 1 = straight tails, 0= curved tails
+%
+% $Log: xycm.mf,v $
+% Revision 3.8 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 04:12:13 krisrose
+% New for this maintenance release.
+%
+% Extracted from xycmat10.mf,v 3.0 1995/07/07 20:14:21 kris Exp
diff --git a/macros/generic/diagrams/xypic/mfinputs/xycmat10.mf b/macros/generic/diagrams/xypic/mfinputs/xycmat10.mf
new file mode 100644
index 0000000000..ecd65e1cfc
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xycmat10.mf
@@ -0,0 +1,58 @@
+% $Id: xycmat10.mf,v 3.9 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYCMAT10: upper arrow tips for Xy-pic at 10 point "Computer Modern style".
+% Copyright (c) 1994-1996 Kristoffer H. Rose <krisrose@tug.org>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+font_identifier "XYCMAT"; font_size 10pt#;
+mode_setup;
+
+input xycm
+input xyatip
+
+% $Log: xycmat10.mf,v $
+% Revision 3.9 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.8 2010/04/16 06:06:52 krisrose
+% Preparing for a new release...
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 03:31:56 krisrose
+% Maintenance release
+%
+% Revision 3.0 1995/07/07 20:14:21 kris
+% Major release w/new User's Guide!
+%
+% Revision 2.13 1995/07/04 15:11:17 kris
+% Ready to release v3?
+%
+% Revision 2.12 1994/10/25 11:34:25 kris
+% Interim release just before v3 [works with AMS-LaTeX 1.2]...
+%
+% Recreated from xyatip10.mf (Revision 2.7 1992/12/14 01:41:26 kris).
+%
+% Revision 2.6 1993/10/21 21:21:24 kris
+% NEW for 2.7...
+%
+% Based on xyatip10.mf [2.6] and Knuth's SYMBOL.MF.
diff --git a/macros/generic/diagrams/xypic/mfinputs/xycmat11.mf b/macros/generic/diagrams/xypic/mfinputs/xycmat11.mf
new file mode 100644
index 0000000000..9e9f8f086d
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xycmat11.mf
@@ -0,0 +1,41 @@
+% $Id: xycmat11.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYCMAT11: upper arrow tips for Xy-pic at 11 point "Computer Modern style".
+% Copyright (c) 1995 Kristoffer H. Rose <kris@diku.dk>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+font_identifier "XYCMAT"; font_size 11pt#;
+mode_setup;
+
+input xycm
+input xyatip
+
+% $Log: xycmat11.mf,v $
+% Revision 3.8 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 04:12:13 krisrose
+% New for this maintenance release.
+%
+% Based on xycmat10.mf,v 3.0 1995/07/07 20:14:21 kris Exp krisrose
diff --git a/macros/generic/diagrams/xypic/mfinputs/xycmat12.mf b/macros/generic/diagrams/xypic/mfinputs/xycmat12.mf
new file mode 100644
index 0000000000..0c02125181
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xycmat12.mf
@@ -0,0 +1,41 @@
+% $Id: xycmat12.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYCMAT12: upper arrow tips for Xy-pic at 12 point "Computer Modern style".
+% Copyright (c) 1995 Kristoffer H. Rose <kris@diku.dk>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+font_identifier "XYCMAT"; font_size 12pt#;
+mode_setup;
+
+input xycm
+input xyatip
+
+% $Log: xycmat12.mf,v $
+% Revision 3.8 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 04:12:13 krisrose
+% New for this maintenance release.
+%
+% Based on xycmat10.mf,v 3.0 1995/07/07 20:14:21 kris Exp krisrose
diff --git a/macros/generic/diagrams/xypic/mfinputs/xycmbt10.mf b/macros/generic/diagrams/xypic/mfinputs/xycmbt10.mf
new file mode 100644
index 0000000000..fd3fd9c8d0
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xycmbt10.mf
@@ -0,0 +1,58 @@
+% $Id: xycmbt10.mf,v 3.9 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYCMBT10: lower arrow tips for Xy-pic at 10 point "Computer Modern style".
+% Copyright (c) 1994-1996 Kristoffer H. Rose <krisrose@tug.org>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+font_identifier "XYCMBT"; font_size 10pt#;
+mode_setup;
+
+input xycm
+input xybtip
+
+% $Log: xycmbt10.mf,v $
+% Revision 3.9 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.8 2010/04/16 06:06:52 krisrose
+% Preparing for a new release...
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 03:31:56 krisrose
+% Maintenance release
+%
+% Revision 3.0 1995/07/07 20:14:21 kris
+% Major release w/new User's Guide!
+%
+% Revision 2.13 1995/07/04 15:11:17 kris
+% Ready to release v3?
+%
+% Revision 2.12 1994/10/25 11:34:25 kris
+% Interim release just before v3 [works with AMS-LaTeX 1.2]...
+%
+% Recreated from xybtip10.mf (Revision 2.7 1992/12/14 01:41:26 kris).
+%
+% Revision 2.6 1993/10/21 21:21:24 kris
+% NEW for 2.7...
+%
+% Based on xyatip10.mf [2.6] and Knuth's SYMBOL.MF.
diff --git a/macros/generic/diagrams/xypic/mfinputs/xycmbt11.mf b/macros/generic/diagrams/xypic/mfinputs/xycmbt11.mf
new file mode 100644
index 0000000000..a286a4883c
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xycmbt11.mf
@@ -0,0 +1,41 @@
+% $Id: xycmbt11.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYCMBT11: lower arrow tips for Xy-pic at 11 point "Computer Modern style".
+% Copyright (c) 1994-1996 Kristoffer H. Rose <kris@diku.dk>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+font_identifier "XYCMBT"; font_size 11pt#;
+mode_setup;
+
+input xycm
+input xybtip
+
+% $Log: xycmbt11.mf,v $
+% Revision 3.8 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 04:12:13 krisrose
+% New for this maintenance release.
+%
+% Based on : xycmbt10.mf,v 3.0 1995/07/07 20:14:21 kris Exp kris
diff --git a/macros/generic/diagrams/xypic/mfinputs/xycmbt12.mf b/macros/generic/diagrams/xypic/mfinputs/xycmbt12.mf
new file mode 100644
index 0000000000..f9ebff3be8
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xycmbt12.mf
@@ -0,0 +1,41 @@
+% $Id: xycmbt12.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYCMBT12: lower arrow tips for Xy-pic at 12 point "Computer Modern style".
+% Copyright (c) 1994-1996 Kristoffer H. Rose <kris@diku.dk>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+font_identifier "XYCMBT"; font_size 12pt#;
+mode_setup;
+
+input xycm
+input xybtip
+
+% $Log: xycmbt12.mf,v $
+% Revision 3.8 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 04:12:13 krisrose
+% New for this maintenance release.
+%
+% Based on : xycmbt10.mf,v 3.0 1995/07/07 20:14:21 kris Exp kris
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyd.mf b/macros/generic/diagrams/xypic/mfinputs/xyd.mf
new file mode 100644
index 0000000000..fad1c242b0
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyd.mf
@@ -0,0 +1,79 @@
+% $Id: xyd.mf,v 3.10 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYD: generate characters of `Xy-pic Directional' font.
+% Copyright (c) 1992 Kristoffer H. Rose <krisrose@tug.org>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+% _________________________________________________________________________
+%
+% CONTENTS: Generate `directional' characters from 0..127 by calling
+% `chartowards(Code, Dx, Dy)' with
+%
+% Code: 0 15 31 47 63 79 95 111 127
+% Dx,Dy: -15/16,-1 0,-1 1,-1 1,0 1,1 0,1 -1,1 -1,0 -1,-1
+% / | \
+% Direction: o o o o- o o o -o o
+% / | \ /
+%
+% where the intervening codes are got by interpolating either Dx or Dy as
+% appropriate.
+% _________________________________________________________________________
+%
+% Parameters:
+%
+font_coding_scheme:="xyd.enc";
+%
+font_x_height segx#;
+font_quad segl#;
+fontdimen 8: segw#; % default_rule_thickness
+%
+% Characters:
+%
+for cc = 0 step 1 until 31: chartowards(cc,(cc-15)/16, -1); endfor;
+for cc = 32 step 1 until 63: chartowards(cc, 1, (cc-47)/16); endfor;
+for cc = 64 step 1 until 95: chartowards(cc,(79-cc)/16, 1); endfor;
+for cc = 96 step 1 until 127: chartowards(cc, -1,(111-cc)/16); endfor;
+%
+% $Log: xyd.mf,v $
+% Revision 3.10 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.9 2010/05/17 23:29:21 krisrose
+% Experiment: generate all the Type1 fonts with METAPOST.
+%
+% Revision 3.8 2010/04/16 06:06:52 krisrose
+% Preparing for a new release...
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 03:31:56 krisrose
+% Maintenance release
+%
+% Revision 3.0 1995/07/07 20:14:21 kris
+% Major release w/new User's Guide!
+%
+% Revision 2.13 1995/07/04 15:11:17 kris
+% Ready to release v3?
+%
+% Revision 2.7 1992/12/14 01:41:26 kris
+% Generate all Xy-pic `directional' characters.
+%
+% Extracted from xyatip10.mf [Revision 2.1 1992/01/02 14:54:07 kris]
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyd2.mf b/macros/generic/diagrams/xypic/mfinputs/xyd2.mf
new file mode 100644
index 0000000000..d4ab6f9c37
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyd2.mf
@@ -0,0 +1,81 @@
+% $Id: xyd2.mf,v 3.10 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYD2: generate characters of `Xy-pic SemiDirectional' font.
+% Copyright (c) 1992 Kristoffer H. Rose <krisrose@tug.org>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+% _________________________________________________________________________
+%
+% CONTENTS: Generate `semidirectional' characters from 0..127 by calling
+% `chartowards(Code, Dx, Dy)' with
+%
+% Code: 0 30 31 63 95 127
+% Dx,Dy: 31/32,1 1/32,1 0,-1 1,-1 1,0 1,1
+% / | /
+% Direction: o o o o o- o
+% | \
+%
+% where the intervening codes are got by interpolating either Dx or Dy as
+% appropriate.
+% _________________________________________________________________________
+%
+% Parameters:
+%
+font_coding_scheme:="xyd2.enc";
+%
+font_x_height segx#;
+font_quad segl#;
+fontdimen 8: segw#; % default_rule_thickness
+%
+% Characters:
+%
+for cc = 0 step 1 until 30: chartowards(cc,(31-cc)/32, 1); endfor;
+for cc = 31 step 1 until 63: chartowards(cc,(cc-31)/32, -1); endfor;
+for cc = 64 step 1 until 127: chartowards(cc, 1,(cc-95)/32); endfor;
+%
+% $Log: xyd2.mf,v $
+% Revision 3.10 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.9 2010/05/17 23:29:21 krisrose
+% Experiment: generate all the Type1 fonts with METAPOST.
+%
+% Revision 3.8 2010/04/16 06:06:52 krisrose
+% Preparing for a new release...
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 03:31:56 krisrose
+% Maintenance release
+%
+% Revision 3.0 1995/07/07 20:14:21 kris
+% Major release w/new User's Guide!
+%
+% Revision 2.13 1995/07/04 15:11:17 kris
+% Ready to release v3?
+%
+% Revision 2.12 1994/10/25 11:34:25 kris
+% Interim release just before v3 [works with AMS-LaTeX 1.2]...
+%
+% Revision 2.7 1992/12/14 01:41:26 kris
+% Generate all Xy-pic `semidirectionsl' characters.
+%
+% Extracted from xyline10.mf [Revision 2.1 1992/01/02 14:54:07 kris]
diff --git a/macros/generic/diagrams/xypic/mfinputs/xydash10.mf b/macros/generic/diagrams/xypic/mfinputs/xydash10.mf
new file mode 100644
index 0000000000..b97d2026f2
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xydash10.mf
@@ -0,0 +1,89 @@
+% $Id: xydash10.mf,v 3.9 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYDASH10: dashes for Xy-pic at 10 point.
+% Copyright (c) 1991,1992 Kristoffer H. Rose <krisrose@tug.org>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+% _________________________________________________________________________
+%
+% CONTENTS: Line segments going segl# in all rightward directions...each
+% character has (width + italic correction) = cos(direction) * segl#.
+% _________________________________________________________________________
+%
+% SETUP:
+%
+font_identifier "XYDASH"; font_size 10pt#;
+mode_setup;
+
+% METANESS...
+%
+segl# = 1/2 designsize; define_pixels(segl); % segment length
+segx# = 1/5 designsize; define_pixels(segx); % segment height
+segw# = .4pt#; define_whole_blacker_pixels(segw); % segment thickness
+%
+pickup pencircle scaled segw; char_pen := savepen;
+%
+% chartowards makes char cc with length segl line from (0,0) towards (dx,dy)...
+%
+def chartowards(expr cc,dx,dy) =
+ beginchar(cc, abs(dx)*segl#, 0, 0);
+ a := angle(dx,dy);
+ z0 = (0,0); z1 = z0 + dir a scaled segl;
+ pickup char_pen; draw z0--z1;
+ charic := abs ((cosd a)*segl#) - charwd;
+ penlabels(0,1);
+ endchar
+enddef;
+
+% TESTING...we redefine openit because the characters extend far to the
+% left of the bounding box!
+%
+def openit = openwindow currentwindow
+ from origin to (screen_cols,screen_rows) at (-200,300) enddef;
+
+% GENERATE...
+%
+input xyd2
+
+bye.
+%
+% $Log: xydash10.mf,v $
+% Revision 3.9 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.8 2010/04/16 06:06:52 krisrose
+% Preparing for a new release...
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 03:31:56 krisrose
+% Maintenance release
+%
+% Revision 3.0 1995/07/07 20:14:21 kris
+% Major release w/new User's Guide!
+%
+% Revision 2.13 1995/07/04 15:11:17 kris
+% Ready to release v3?
+%
+% Revision 2.7 1992/12/14 01:41:26 kris
+% Now uses xyd2.mf.
+%
+% Based on obsolete xyline10.mf 2.1 1992/01/02 14:54:07 kris
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyeuat10.mf b/macros/generic/diagrams/xypic/mfinputs/xyeuat10.mf
new file mode 100644
index 0000000000..170ea3b5a7
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyeuat10.mf
@@ -0,0 +1,41 @@
+% $Id: xyeuat10.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYEUAT10: upper arrow tips for Xy-pic at 10 point "Euler style".
+% Copyright (c) 1994-1996 Kristoffer H. Rose <kris@diku.dk>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+font_identifier "XYEUAT"; font_size 10pt#;
+mode_setup;
+
+input xyeuler
+input xyatip
+
+% $Log: xyeuat10.mf,v $
+% Revision 3.8 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 04:12:13 krisrose
+% New for this maintenance release.
+%
+% Based on xycmat10.mf,v 3.0 1995/07/07 20:14:21 kris Exp
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyeuat11.mf b/macros/generic/diagrams/xypic/mfinputs/xyeuat11.mf
new file mode 100644
index 0000000000..6dcc7da88a
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyeuat11.mf
@@ -0,0 +1,41 @@
+% $Id: xyeuat11.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYEUAT11: upper arrow tips for Xy-pic at 11 point "Euler style".
+% Copyright (c) 1994-1996 Kristoffer H. Rose <kris@diku.dk>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this font file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+font_identifier "XYEUAT"; font_size 11pt#;
+mode_setup;
+
+input xyeuler
+input xyatip
+
+% $Log: xyeuat11.mf,v $
+% Revision 3.8 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 04:12:13 krisrose
+% New for this maintenance release.
+%
+% Based on xycmat10.mf,v 3.0 1995/07/07 20:14:21 kris Exp
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyeuat12.mf b/macros/generic/diagrams/xypic/mfinputs/xyeuat12.mf
new file mode 100644
index 0000000000..20f6fd1dd0
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyeuat12.mf
@@ -0,0 +1,41 @@
+% $Id: xyeuat12.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYEUAT12: upper arrow tips for Xy-pic at 12 point "Euler style".
+% Copyright (c) 1994-1996 Kristoffer H. Rose <kris@diku.dk>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this font file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+font_identifier "XYEUAT"; font_size 12pt#;
+mode_setup;
+
+input xyeuler
+input xyatip
+
+% $Log: xyeuat12.mf,v $
+% Revision 3.8 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 04:12:13 krisrose
+% New for this maintenance release.
+%
+% Based on xycmat10.mf,v 3.0 1995/07/07 20:14:21 kris Exp
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyeubt10.mf b/macros/generic/diagrams/xypic/mfinputs/xyeubt10.mf
new file mode 100644
index 0000000000..507825ffbd
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyeubt10.mf
@@ -0,0 +1,41 @@
+% $Id: xyeubt10.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYEUBT10: lower arrow tips for Xy-pic at 10 point "Euler style".
+% Copyright (c) 1994-1996 Kristoffer H. Rose <kris@diku.dk>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this font file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+font_identifier "XYEUBT"; font_size 10pt#;
+mode_setup;
+
+input xyeuler
+input xybtip
+
+% $Log: xyeubt10.mf,v $
+% Revision 3.8 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 04:12:13 krisrose
+% New for this maintenance release.
+%
+% Based on xycmbt10.mf,v 3.0 1995/07/07 20:14:21 kris Exp
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyeubt11.mf b/macros/generic/diagrams/xypic/mfinputs/xyeubt11.mf
new file mode 100644
index 0000000000..24af94c70b
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyeubt11.mf
@@ -0,0 +1,41 @@
+% $Id: xyeubt11.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYEUBT11: lower arrow tips for Xy-pic at 11 point "Euler style".
+% Copyright (c) 1994-1996 Kristoffer H. Rose <kris@diku.dk>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this font file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+font_identifier "XYEUBT"; font_size 11pt#;
+mode_setup;
+
+input xyeuler
+input xybtip
+
+% $Log: xyeubt11.mf,v $
+% Revision 3.8 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 04:12:13 krisrose
+% New for this maintenance release.
+%
+% Based on xycmbt10.mf,v 3.0 1995/07/07 20:14:21 kris Exp
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyeubt12.mf b/macros/generic/diagrams/xypic/mfinputs/xyeubt12.mf
new file mode 100644
index 0000000000..dfe3935612
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyeubt12.mf
@@ -0,0 +1,41 @@
+% $Id: xyeubt12.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+%
+% XYEUBT12: lower arrow tips for Xy-pic at 12 point "Euler style".
+% Copyright (c) 1994-1996 Kristoffer H. Rose <kris@diku.dk>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this font file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+font_identifier "XYEUBT"; font_size 12pt#;
+mode_setup;
+
+input xyeuler
+input xybtip
+
+% $Log: xyeubt12.mf,v $
+% Revision 3.8 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 04:12:13 krisrose
+% New for this maintenance release.
+%
+% Based on xycmbt10.mf,v 3.0 1995/07/07 20:14:21 kris Exp
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyeuler.mf b/macros/generic/diagrams/xypic/mfinputs/xyeuler.mf
new file mode 100644
index 0000000000..efad5dfd6d
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyeuler.mf
@@ -0,0 +1,42 @@
+% $Id: xyeuler.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+%
+% Parameter file for Xy-pic "Euler style" arrow tips.
+% Copyright (c) 1995 Kristoffer H. Rose <kris@diku.dk>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this font file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+segl# = 1/8 designsize; define_pixels(segl); % segment length
+segx# = 7/16 designsize; define_pixels(segx); % segment height
+segw# = .4pt#; define_whole_blacker_pixels(segw); % segment thickness
+%
+tipo# = 0#; define_pixels(tipo); % tip overshoot
+curvature = 2/3; % 1 = straight tails, 0= curved tails
+%
+% $Log: xyeuler.mf,v $
+% Revision 3.8 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 04:12:13 krisrose
+% New for this maintenance release.
+%
+% Based on xycmat10.mf,v 3.0 1995/07/07 20:14:21 kris Exp
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyline10.mf b/macros/generic/diagrams/xypic/mfinputs/xyline10.mf
new file mode 100644
index 0000000000..41aad6e043
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyline10.mf
@@ -0,0 +1,119 @@
+% $Id: xyline10.mf,v 3.5 2010/06/10 18:45:50 krisrose Exp $ -*-tex-*-
+%
+% XYLINE10: line segments for XY mode at 10 point.
+% Copyright (c) 1991,1992 Kristoffer H. Rose <krisrose@tug.org>
+%
+% This file is part of the XY-pic macro package.
+%
+% The XY-pic macro package 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.
+%
+% The XY-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% CONTENTS: Line segments going either segl# down or to the right. Codes
+% range from 0 to 127, distributed evenly in each of the
+% intervals between the `purely' horizontal/
+% vertical/diagonal characters with code 31, ..../
+% 63, 95, and 127 (code -1 would be pure as : /:
+% well if it existed): : / :
+% :/ :
+% ..../ ..../ | o o.... o.... o---- o...:
+% : /: : /: | | :\ : :\ :
+% : / : : / : | | : \ : : \ :
+% :/ : :/ : | | : \: : \:
+% o...: o...: o | :...\ :...\
+%
+% Code: [-1] 0 30 31 63 64 95 127
+%
+font_identifier "XYLINE"; font_size 10pt#;
+font_coding_scheme:="XY line segments";
+mode_setup;
+
+% METANESS...
+%
+segl# = 1/2 designsize; define_pixels(segl); % line segment length
+rulew# = .4pt#; define_whole_blacker_pixels(rulew); % line thickness
+%
+% drawsegment draws a line from (0,0) to the argument point...
+def drawsegment expr endpoint =
+ z0 = (0,0); z1 = endpoint;
+ pickup pencircle scaled rulew rotated (angle (z1-z0) - 90);
+ draw z0--z1; penlabels(0,1) enddef;
+
+% TESTING...we redefine openit because the characters extend far to the
+% left of the bounding box!
+%
+def openit = openwindow currentwindow
+ from origin to (screen_cols,screen_rows) at (-200,300) enddef;
+
+% FONT.
+%
+% Font dimension 8 is the rule thickness (cf. The TeXbook, app.G)
+fontdimen 8: rulew#;
+%
+% The characters follow...
+%
+for cc = 0 step 1 until 30:
+ beginchar(cc,(31-cc)/32*segl#,segl#,0); drawsegment (w,h); endchar;
+endfor;
+%
+for cc = 31 step 1 until 63:
+ beginchar(cc,(cc-31)/32*segl#,0,segl#); drawsegment (w,-d); endchar;
+endfor;
+%
+for cc = 64 step 1 until 94:
+ beginchar(cc,segl#,0,(95-cc)/32*segl#); drawsegment (w,-d); endchar;
+endfor;
+%
+for cc = 95 step 1 until 126:
+ beginchar(cc,segl#,(cc-95)/32*segl#,0); drawsegment (w,h); endchar;
+endfor;
+%
+beginchar(127,segl#,segl#,0); drawsegment (w,h); endchar;
+
+bye.
+%
+% $Log: xyline10.mf,v $
+% Revision 3.5 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.4 2010/04/16 06:06:52 krisrose
+% Preparing for a new release...
+%
+% Revision 3.3 1996/12/19 03:31:56 krisrose
+% Maintenance release
+%
+% Revision 3.0 1995/07/07 20:14:21 kris
+% Major release w/new User's Guide!
+%
+% Revision 2.1 1992/01/02 14:54:07 kris
+% Release version.
+%
+% Revision 1.7 1991/12/17 04:51:16 kris
+% Version distributed with `final draft' on Usenet.
+%
+% Revision 1.6 1991/11/27 06:54:21 kris
+% \beta-test on DIKU.
+%
+% Revision 1.5 1991/10/21 23:19:08 kris
+% Version described in DIKU student report 91-7-10.
+%
+% Revision 1.4 1991/07/28 22:16:18 kris
+% Inverted char0..30 to avoid negative widths.
+%
+% Revision 1.3 1991/07/26 01:22:28 kris
+% Set bounding box completely!
+%
+% Revision 1.2 91/06/09 21:59:49 kris
+% separated METANESS and CHARACTERS
+%
+% Revision 1.1 91/06/06 22:52:31 kris
+% furst succesful attempt
diff --git a/macros/generic/diagrams/xypic/mfinputs/xylu.mf b/macros/generic/diagrams/xypic/mfinputs/xylu.mf
new file mode 100644
index 0000000000..216b0d7397
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xylu.mf
@@ -0,0 +1,47 @@
+% $Id: xylu.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+%
+% xylu, for use with Lucida.
+% Copyright (c) 2007 Jeremy Gibbons <jeremy.gibbons@comlab.ox.ac.uk>
+%
+% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+
+tipo# = 2segw#; define_pixels(tipo); % tip overshoot
+
+segw# = .2pt#; define_whole_blacker_pixels(segw); % segment thickness
+segl# = 1/5 designsize - tipo#; define_pixels(segl); % segment length
+segx# = 1/4 designsize; define_pixels(segx); % segment height
+
+indent = 1/4; % 1 = barbs, 0 = triangular tails
+
+% $Log: xylu.mf,v $
+% Revision 3.4 2011/03/14 20:14:00 krisrose
+% Preparing for release 3.8.6.
+%
+% Revision 3.3 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.2 2010/04/17 14:45:48 krisrose
+% Generate and extract Type1 fonts.
+%
+% Revision 3.1 2010/04/17 04:19:41 krisrose
+% Integrated xylu tips by Jeremy Gibbons.
+%
+% based on xycm.
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyluat10.mf b/macros/generic/diagrams/xypic/mfinputs/xyluat10.mf
new file mode 100644
index 0000000000..71a3fb0411
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyluat10.mf
@@ -0,0 +1,45 @@
+% $Id: xyluat10.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+%
+% xyluat10, for use with Lucida
+% Copyright (c) 2007 Jeremy Gibbons <jeremy.gibbons@comlab.ox.ac.uk>
+%
+% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+
+font_identifier "XYLUAT"; font_size 10pt#;
+mode_setup;
+
+input xylu
+input xyatri
+
+% $Log: xyluat10.mf,v $
+% Revision 3.4 2011/03/14 20:14:00 krisrose
+% Preparing for release 3.8.6.
+%
+% Revision 3.3 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.2 2010/04/17 14:45:48 krisrose
+% Generate and extract Type1 fonts.
+%
+% Revision 3.1 2010/04/17 04:19:41 krisrose
+% Integrated xylu tips by Jeremy Gibbons.
+%
+% based on xycmat10
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyluat11.mf b/macros/generic/diagrams/xypic/mfinputs/xyluat11.mf
new file mode 100644
index 0000000000..edfac5ba27
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyluat11.mf
@@ -0,0 +1,45 @@
+% $Id: xyluat11.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+%
+% xyluat11, for use with Lucida
+% Copyright (c) 2007 Jeremy Gibbons <jeremy.gibbons@comlab.ox.ac.uk>
+%
+% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+
+font_identifier "XYLUAT"; font_size 11pt#;
+mode_setup;
+
+input xylu
+input xyatri
+
+% $Log: xyluat11.mf,v $
+% Revision 3.4 2011/03/14 20:14:00 krisrose
+% Preparing for release 3.8.6.
+%
+% Revision 3.3 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.2 2010/04/17 14:45:48 krisrose
+% Generate and extract Type1 fonts.
+%
+% Revision 3.1 2010/04/17 04:19:41 krisrose
+% Integrated xylu tips by Jeremy Gibbons.
+%
+% based on xycmat11
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyluat12.mf b/macros/generic/diagrams/xypic/mfinputs/xyluat12.mf
new file mode 100644
index 0000000000..6ef996f66e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyluat12.mf
@@ -0,0 +1,45 @@
+% $Id: xyluat12.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+%
+% xyluat12, for use with Lucida
+% Copyright (c) 2007 Jeremy Gibbons <jeremy.gibbons@comlab.ox.ac.uk>
+%
+% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+
+font_identifier "XYLUAT"; font_size 12pt#;
+mode_setup;
+
+input xylu
+input xyatri
+
+% $Log: xyluat12.mf,v $
+% Revision 3.4 2011/03/14 20:14:00 krisrose
+% Preparing for release 3.8.6.
+%
+% Revision 3.3 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.2 2010/04/17 14:45:48 krisrose
+% Generate and extract Type1 fonts.
+%
+% Revision 3.1 2010/04/17 04:19:41 krisrose
+% Integrated xylu tips by Jeremy Gibbons.
+%
+% based on xycmat12
diff --git a/macros/generic/diagrams/xypic/mfinputs/xylubt10.mf b/macros/generic/diagrams/xypic/mfinputs/xylubt10.mf
new file mode 100644
index 0000000000..45ae7bf8bb
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xylubt10.mf
@@ -0,0 +1,45 @@
+% $Id: xylubt10.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+%
+% xylubt10, for use with Lucida.
+% Copyright (c) 2007 Jeremy Gibbons <jeremy.gibbons@comlab.ox.ac.uk>
+%
+% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+
+font_identifier "XYLUBT"; font_size 10pt#;
+mode_setup;
+
+input xylu
+input xybtri
+
+% $Log: xylubt10.mf,v $
+% Revision 3.4 2011/03/14 20:14:00 krisrose
+% Preparing for release 3.8.6.
+%
+% Revision 3.3 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.2 2010/04/17 14:45:48 krisrose
+% Generate and extract Type1 fonts.
+%
+% Revision 3.1 2010/04/17 04:19:41 krisrose
+% Integrated xylu tips by Jeremy Gibbons.
+%
+% based on xycmbt10
diff --git a/macros/generic/diagrams/xypic/mfinputs/xylubt11.mf b/macros/generic/diagrams/xypic/mfinputs/xylubt11.mf
new file mode 100644
index 0000000000..e246f9ed76
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xylubt11.mf
@@ -0,0 +1,45 @@
+% $Id: xylubt11.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+%
+% xylubt11, for use with Lucida.
+% Copyright (c) 2007 Jeremy Gibbons <jeremy.gibbons@comlab.ox.ac.uk>
+%
+% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+
+font_identifier "XYLUBT"; font_size 11pt#;
+mode_setup;
+
+input xylu
+input xybtri
+
+% $Log: xylubt11.mf,v $
+% Revision 3.4 2011/03/14 20:14:00 krisrose
+% Preparing for release 3.8.6.
+%
+% Revision 3.3 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.2 2010/04/17 14:45:48 krisrose
+% Generate and extract Type1 fonts.
+%
+% Revision 3.1 2010/04/17 04:19:41 krisrose
+% Integrated xylu tips by Jeremy Gibbons.
+%
+% based on xycmbt11.
diff --git a/macros/generic/diagrams/xypic/mfinputs/xylubt12.mf b/macros/generic/diagrams/xypic/mfinputs/xylubt12.mf
new file mode 100644
index 0000000000..8d852d85dd
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xylubt12.mf
@@ -0,0 +1,45 @@
+% $Id: xylubt12.mf,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+%
+% xylubt12, for use with Lucida.
+% Copyright (c) 2007 Jeremy Gibbons <jeremy.gibbons@comlab.ox.ac.uk>
+%
+% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+
+font_identifier "XYLUBT"; font_size 12pt#;
+mode_setup;
+
+input xylu
+input xybtri
+
+% $Log: xylubt12.mf,v $
+% Revision 3.4 2011/03/14 20:14:00 krisrose
+% Preparing for release 3.8.6.
+%
+% Revision 3.3 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.2 2010/04/17 14:45:48 krisrose
+% Generate and extract Type1 fonts.
+%
+% Revision 3.1 2010/04/17 04:19:41 krisrose
+% Integrated xylu tips by Jeremy Gibbons.
+%
+% Based on xycmbt12.
diff --git a/macros/generic/diagrams/xypic/mfinputs/xymisc10.mf b/macros/generic/diagrams/xypic/mfinputs/xymisc10.mf
new file mode 100644
index 0000000000..268e3c42a6
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xymisc10.mf
@@ -0,0 +1,143 @@
+% $Id: xymisc10.mf,v 3.5 2010/06/10 18:45:50 krisrose Exp $ -*-tex-*-
+%
+% XYMISC10: miscellaneous characters for XY mode at 10 point.
+% Copyright (c) 1991,1992 Kristoffer H. Rose <krisrose@tug.org>
+%
+% This file is part of the XY-pic macro package.
+%
+% The XY-pic macro package 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.
+%
+% The XY-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% CONTENTS:
+% Metaness.
+% Testing...
+% Font.
+% Dot fitting the rule width.
+% Quarter circles with radii from 1 to 10 and 12 to 30 pt; all have
+% height = depth = .5width = radius and are centered such that they
+% enter and leave the box in the middle of the sides.
+%
+font_identifier "XYMISC"; font_size 10pt#;
+font_coding_scheme:="XY miscellaneous";
+mode_setup;
+
+% METANESS...
+%
+rulew# = .4pt#; define_whole_blacker_pixels(rulew); % line thickness
+%
+def pickuppen = pickup pencircle scaled rulew enddef;
+
+% TESTING...we redefine openit because the characters extend far to the
+% left of the bounding box!
+%
+def openit = %%let echar = endchar; def endchar = echar; stop ". " enddef;
+ openwindow currentwindow
+ from origin to (1000,800) at (-200,300)
+ enddef;
+
+% FONT.
+%
+% Font dimension 8 is the rule thickness (cf. The TeXbook, app.G)
+fontdimen 8: rulew#;
+
+% DOT FOR DOTTED LINES AND DUMMY CIRCLE...
+%
+beginchar(0,0,0,0); pickuppen; drawdot (0,0); endchar;
+beginchar(1,0,0,0); pickuppen; drawdot (0,0); endchar;
+beginchar(2,0,0,0); pickuppen; drawdot (0,0); endchar;
+beginchar(3,0,0,0); pickuppen; drawdot (0,0); endchar;
+
+% QUARTER CIRCLES... The four circles with radius N pt, 0 < N <= 10, are
+% located at N*4 + QUADRANT, where 1 <= QUADRANT <= 4. All have width as
+% their radius with reference point at the level of the horizontal end of the
+% arc and height, depth as the extent of the arc.
+%
+for radius = 1 step 1 until 10:
+ beginchar(radius*4,2radius*pt#,radius*pt#,radius*pt#);
+ pickuppen;
+ draw quartercircle rotated 180 shifted (1,.5) scaled (radius*2pt);
+ endchar;
+ beginchar(radius*4+1,2radius*pt#,radius*pt#,radius*pt#);
+ pickuppen;
+ draw quartercircle rotated -90 shifted (0,.5) scaled (radius*2pt);
+ endchar;
+ beginchar(radius*4+2,2radius*pt#,radius*pt#,radius*pt#);
+ pickuppen;
+ draw quartercircle shifted (0,-.5) scaled (radius*2pt);
+ endchar;
+ beginchar(radius*4+3,2radius*pt#,radius*pt#,radius*pt#);
+ pickuppen;
+ draw quartercircle rotated 90 shifted (1,-.5) scaled (radius*2pt);
+ endchar;
+endfor;
+%
+% For 12 <= N <= 40 we step in 2pt increments... so for 10 <= N <= 40 the
+% quarter circle with radius N is located at (N div 2 + 20 + QUADRANT).
+%
+for radius = 12 step 2 until 40:
+ beginchar(radius*2+20,2radius*pt#,radius*pt#,radius*pt#);
+ pickuppen;
+ draw quartercircle rotated 180 shifted (1,.5) scaled (radius*2pt);
+ endchar;
+ beginchar(radius*2+21,2radius*pt#,radius*pt#,radius*pt#);
+ pickuppen;
+ draw quartercircle rotated -90 shifted (0,.5) scaled (radius*2pt);
+ endchar;
+ beginchar(radius*2+22,2radius*pt#,radius*pt#,radius*pt#);
+ pickuppen;
+ draw quartercircle shifted (0,-.5) scaled (radius*2pt);
+ endchar;
+ beginchar(radius*2+23,2radius*pt#,radius*pt#,radius*pt#);
+ pickuppen;
+ draw quartercircle rotated 90 shifted (1,-.5) scaled (radius*2pt);
+ endchar;
+endfor;
+
+bye.
+%
+% $Log: xymisc10.mf,v $
+% Revision 3.5 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.4 2010/04/16 06:06:52 krisrose
+% Preparing for a new release...
+%
+% Revision 3.3 1996/12/19 03:31:56 krisrose
+% Maintenance release
+%
+% Revision 3.0 1995/07/07 20:14:21 kris
+% Major release w/new User's Guide!
+%
+% Revision 2.6 1992/06/24 01:23:34 kris
+% Cleaned up.
+%
+% Revision 2.1 1992/01/02 14:54:07 kris
+% Release version.
+%
+% Revision 1.6 1991/11/27 06:54:21 kris
+% \beta-test on DIKU.
+%
+% Revision 1.5 1991/10/21 23:19:08 kris
+% Version described in DIKU student report 91-7-10.
+%
+% Revision 1.4 1991/08/22 01:07:46 kris
+% Now has quarter circles to radius 40pt as required for xy.doc[1.28].
+%
+% Revision 1.3 1991/07/21 21:04:35 kris
+% Tested with xy.doc[1.19].
+%
+% Revision 1.2 1991/07/19 14:52:26 kris
+% Changed quarter circles to fit xy.doc[1.19?].
+%
+% Revision 1.1 1991/06/24 20:57:37 kris
+% Works with xy.doc [1.6] :-)
diff --git a/macros/generic/diagrams/xypic/mfinputs/xyqc10.mf b/macros/generic/diagrams/xypic/mfinputs/xyqc10.mf
new file mode 100644
index 0000000000..ef30cdb8f9
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xyqc10.mf
@@ -0,0 +1,96 @@
+% $Id: xyqc10.mf,v 3.1 2010/06/10 18:45:50 krisrose Exp $ -*-tex-*-
+%
+% XYQC10: quarter circles for XY mode at 10 point.
+% Copyright (c) 1992 Kristoffer H. Rose <kris@diku.dk>
+%
+% This file is part of the XY-pic macro package.
+%
+% The XY-pic macro package 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.
+%
+% The XY-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% CONTENTS: Quarter circles in all directions:
+%
+% -.
+% | ) | /\
+% o o o o-' o o o .-o o
+% ( |_ \/ | (
+%
+% Code: [-1] 15 31 47 65 79 95 111 127
+%
+% Each character has a cosinoid bounding box :-) with wd = cos I = sin F,
+% where I,F are the angles from direction --> to the initial,final direction.
+%
+font_identifier "XYQC"; font_size 10pt#;
+font_coding_scheme:="XY quarter circles";
+mode_setup;
+
+% METANESS...
+%
+qcd# = 1/2 designsize; % quarter circle diameter
+rulew# = .4pt#; % quarter circle line width
+define_pixels(qcd,rulew);
+%
+% beginqc draws the quarter circle starting in the direction towards endpoint
+% and turning left...
+def beginqc(expr cc,ex,ey) =
+ alpha := angle (ex,ey);
+ cw := sqrt(1/2) * abs(sind(alpha + 135));
+ beginchar(cc,cw*qcd#,0,0);
+ pickup pencircle scaled rulew rotated (alpha - 90);
+ if (cc<64): draw quartercircle shifted (-.5,0) rotated (alpha - 90)
+ scaled qcd
+ else: draw quartercircle shifted (-.5,0) rotated (alpha - 90) shifted (cw,0)
+ scaled qcd
+ fi
+enddef;
+
+% TESTING...we redefine openit because the characters extend far to the
+% left of the bounding box!
+%
+def openit = openwindow currentwindow
+ from origin to (screen_cols,screen_rows) at (-200,200) enddef;
+
+% FONT.
+%
+% Font dimension 8 is the rule thickness (cf. The TeXbook, app.G).
+fontdimen 8: rulew#;
+%
+% Here are the characters...
+%
+for cc = 0 step 1 until 31:
+ beginqc(cc,cc-15,-16); endchar;
+endfor;
+%
+for cc = 32 step 1 until 63:
+ beginqc(cc,16,cc-47); endchar;
+endfor;
+%
+for cc = 64 step 1 until 95:
+ beginqc(cc,79-cc,16); endchar;
+endfor;
+%
+for cc = 96 step 1 until 127:
+ beginqc(cc,-16,111-cc); endchar;
+endfor;
+
+bye.
+%
+% $Log: xyqc10.mf,v $
+% Revision 3.1 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.0 1995/07/07 20:14:21 kris
+% Major release w/new User's Guide!
+%
+% Revision 2.6 1992/06/24 01:23:34 kris
+% Implemented and used for hooks.
diff --git a/macros/generic/diagrams/xypic/mfinputs/xytech.mf b/macros/generic/diagrams/xypic/mfinputs/xytech.mf
new file mode 100644
index 0000000000..60e36c86a3
--- /dev/null
+++ b/macros/generic/diagrams/xypic/mfinputs/xytech.mf
@@ -0,0 +1,42 @@
+% $Id: xytech.mf,v 3.8 2010/06/10 18:45:50 krisrose Exp $
+%
+% Parameter file for Xy-pic "technical style" arrow tips.
+% Copyright (c) 1991-1996 Kristoffer H. Rose <kris@diku.dk>
+%
+% This file is part of the Xy-pic macro package.
+%
+% The Xy-pic macro package 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.
+%
+% The Xy-pic macro 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 GNU General
+% Public License for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this macro package; if not, see http://www.gnu.org/licenses/.
+%
+% As a special exception, you may use this font file and all files derived
+% from it without restriction. This special exception was added with
+% version 3.7 of Xy-pic.
+%
+segl# = 1/2 designsize; define_pixels(segl); % segment length
+segx# = 0.62 segl#; define_pixels(segx); % segment height
+segw# = .4pt#; define_whole_blacker_pixels(segw); % segment thickness
+%
+tipo# = 0#; define_pixels(tipo); % tip overshoot
+curvature = 1/3; % 1 = straight tails, 0= curved tails
+%
+% $Log: xytech.mf,v $
+% Revision 3.8 2010/06/10 18:45:50 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.7 1999/02/16 15:12:50 krisrose
+% Interim release (Y&Y fonts now free).
+%
+% Revision 3.3 1996/12/19 03:53:24 krisrose
+% Maintenance release.
+%
+% Extracted from xyatip10.mf,v 3.0 1995/07/07 20:14:21 kris Exp
diff --git a/macros/generic/diagrams/xypic/pfm/xyatip10.pfm b/macros/generic/diagrams/xypic/pfm/xyatip10.pfm
new file mode 100644
index 0000000000..6cd2ecb8d3
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xyatip10.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xybsql10.pfm b/macros/generic/diagrams/xypic/pfm/xybsql10.pfm
new file mode 100644
index 0000000000..bec8b1507b
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xybsql10.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xybtip10.pfm b/macros/generic/diagrams/xypic/pfm/xybtip10.pfm
new file mode 100644
index 0000000000..b3ce943a81
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xybtip10.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xycirc10.pfm b/macros/generic/diagrams/xypic/pfm/xycirc10.pfm
new file mode 100644
index 0000000000..66d0d1e746
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xycirc10.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xycmat10.pfm b/macros/generic/diagrams/xypic/pfm/xycmat10.pfm
new file mode 100644
index 0000000000..46a81dd945
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xycmat10.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xycmat11.pfm b/macros/generic/diagrams/xypic/pfm/xycmat11.pfm
new file mode 100644
index 0000000000..6c079bcf33
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xycmat11.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xycmat12.pfm b/macros/generic/diagrams/xypic/pfm/xycmat12.pfm
new file mode 100644
index 0000000000..736a1b0e8f
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xycmat12.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xycmbt10.pfm b/macros/generic/diagrams/xypic/pfm/xycmbt10.pfm
new file mode 100644
index 0000000000..246e5dac46
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xycmbt10.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xycmbt11.pfm b/macros/generic/diagrams/xypic/pfm/xycmbt11.pfm
new file mode 100644
index 0000000000..6b53d6a5e9
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xycmbt11.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xycmbt12.pfm b/macros/generic/diagrams/xypic/pfm/xycmbt12.pfm
new file mode 100644
index 0000000000..db87a28591
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xycmbt12.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xydash10.pfm b/macros/generic/diagrams/xypic/pfm/xydash10.pfm
new file mode 100644
index 0000000000..b734309bc9
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xydash10.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xyeuat10.pfm b/macros/generic/diagrams/xypic/pfm/xyeuat10.pfm
new file mode 100644
index 0000000000..5861d27fc8
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xyeuat10.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xyeuat11.pfm b/macros/generic/diagrams/xypic/pfm/xyeuat11.pfm
new file mode 100644
index 0000000000..6f9091a088
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xyeuat11.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xyeuat12.pfm b/macros/generic/diagrams/xypic/pfm/xyeuat12.pfm
new file mode 100644
index 0000000000..c596d4411b
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xyeuat12.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xyeubt10.pfm b/macros/generic/diagrams/xypic/pfm/xyeubt10.pfm
new file mode 100644
index 0000000000..0542f9c281
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xyeubt10.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xyeubt11.pfm b/macros/generic/diagrams/xypic/pfm/xyeubt11.pfm
new file mode 100644
index 0000000000..30ffe62d0c
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xyeubt11.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xyeubt12.pfm b/macros/generic/diagrams/xypic/pfm/xyeubt12.pfm
new file mode 100644
index 0000000000..885f3c1bea
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xyeubt12.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xyluat10.pfm b/macros/generic/diagrams/xypic/pfm/xyluat10.pfm
new file mode 100644
index 0000000000..e17ccf673d
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xyluat10.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xyluat11.pfm b/macros/generic/diagrams/xypic/pfm/xyluat11.pfm
new file mode 100644
index 0000000000..9e74210256
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xyluat11.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xyluat12.pfm b/macros/generic/diagrams/xypic/pfm/xyluat12.pfm
new file mode 100644
index 0000000000..05fb9275d8
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xyluat12.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xylubt10.pfm b/macros/generic/diagrams/xypic/pfm/xylubt10.pfm
new file mode 100644
index 0000000000..26b02764f9
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xylubt10.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xylubt11.pfm b/macros/generic/diagrams/xypic/pfm/xylubt11.pfm
new file mode 100644
index 0000000000..67977b5016
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xylubt11.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/pfm/xylubt12.pfm b/macros/generic/diagrams/xypic/pfm/xylubt12.pfm
new file mode 100644
index 0000000000..3ccb060c68
--- /dev/null
+++ b/macros/generic/diagrams/xypic/pfm/xylubt12.pfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/ps/xy389dict.pro b/macros/generic/diagrams/xypic/ps/xy389dict.pro
new file mode 100644
index 0000000000..c1a2c890f0
--- /dev/null
+++ b/macros/generic/diagrams/xypic/ps/xy389dict.pro
@@ -0,0 +1,380 @@
+%!PS-Adobe-3.0 Resource-procset
+%%Title: xy389dict.pro
+%%Version: 3.8.9
+%%Creator: Xy-ps backend to Xy-pic
+%%DocumentSuppliedProcSets: XYdict
+%%For: nulluse of Xy-pic
+%%BeginResource: procset XYdict
+/XYdict where not{250 dict /XYdict exch def
+ /xy{mark exch XYdict begin countdictstack /xylevel exch def
+ xyopen xycolor mark xypatt xypattern stopped xyclose end
+ cleartomark}def /xyg{gsave xy}def
+ /xyf{currentfont exch xy grestore setfont}def
+ /xycc{{xychgcol}xy}def /xyc{XYdict begin xycolstore end}def
+ /xyx{/xyYpos exch def /xyXpos exch def}def
+ /xyp{currentpoint xyx}def
+ /xyd{setupDirection XYdirection 2 mul}def
+ /xyct{currentpoint xyt 2 copy 6 2 roll}def
+ /xyt{xyXpos xyYpos 2 copy translate}def /xyr{neg rotate xynt}def
+ /xyrs{neg rotate 3 -1 roll sub neg 3 1 roll sub exch moveto xynt}def
+ /xynt{neg exch neg exch translate}def /xys{scale xynt}def
+ /xyss{scale 3 -1 roll sub neg 3 1 roll sub exch moveto xynt}def
+ /xyi{0 0 transform grestore gsave itransform}def
+ }if
+
+/XYdict where pop begin XYdict begin
+ /xyopen{currentdict /XYddict known{XYddict null eq{}
+ {XYddict begin xyopen}ifelse}if}def
+ /xyclose{countdictstack -1 xylevel 1 add{pop end}for}def
+ /xychgcol{/xycolor exch def}def /xysetcol{xypush xychgcol}def
+
+ /xypush{16 dict /XYddict exch def XYddict begin}def
+ /undef where
+ {pop /xypop{countdictstack xylevel eq{}{end}ifelse
+ currentdict /XYddict undef}def}
+ {/xypop{countdictstack xylevel eq{}{end}ifelse
+ /XYddict null def}def}ifelse
+ /pu /xypush load def /pp /xypop load def
+ /xypspt{72 72.27 div dup scale}bind def /pscorrect{.85 mul}bind def
+ /gstartxy{gsave xypspt xywidth xycap xyjoin xymiter newpath 0 0 moveto}def
+ /xypath{gstartxy rmoveto counttomark 2 idiv -1 1{pop lineto}for}def
+ /xystroke{stroke grestore}bind def
+ /xyfill{closepath fill grestore}bind def
+ /xystfil{closepath gsave fill grestore 0 setgray
+ 0 setlinewidth xystroke}bind def
+ /xyeofill{closepath eofill grestore}bind def
+
+ /xypolyline{xypath xystroke}def /xypolyfill{xypath xyfill}def
+ /xydotsep{/@ currentlinewidth 2 mul def}def
+ /xypolydot{xypath xydotsep [xydt @] 0 setdash xystroke}def
+ /xypolydash{xypath xydotsep [@ @] 0 setdash xystroke}def
+ /xypolyeofill{xypath xyeofill}def /pe /xypolyeofill load def
+ /pl /xypolyline load def /pf /xypolyfill load def
+ /pt /xypolydot load def /pd /xypolydash load def
+ /arc4pop{arcto 4{pop}repeat}bind def
+ /xyoval{gstartxy oval closepath xystroke}def
+ /xycircle{gstartxy circle xystroke}def
+ /circle{dup 0 moveto 0 0 3 -1 roll 0 360 arc}def
+ /oval{newpath 2 copy exch 5 index add 2 div exch 3 copy 10 3 roll
+ moveto 1 index dup 5 1 roll 3 index 7 index arc4pop
+ dup dup 4 1 roll 4 index exch 6 index arc4pop
+ 1 index dup 8 1 roll 4 index 4 index arc4pop
+ arc4pop closepath}def
+ /xyellipse{gstartxy counttomark 1 gt{squarify pop pop 1}if
+ circle xystroke}def
+ /ov /xyoval load def /ox /xyellipse load def
+ /dotit{dup currentlinewidth 6 mul div round div
+ /@ exch def [xydt @] 0 setdash}def
+ /elldash{dup 4 -1 roll 10 exch div dashit}def
+ /ovdash{dup 10 dashit}def
+ /dashit{div round 2 mul div /@ exch def [@ @] 0 setdash}def
+ /dotcirc{gstartxy cirlen dotit circle xystroke}def
+ /dashcirc{gstartxy cirlen dashit circle xystroke}def
+ /dotoval{gstartxy 5 copy ovlen dotit oval xystroke}def
+ /dashoval{gstartxy 5 copy ovlen ovdash oval xystroke}def
+ /cirlen{dup 6.283185 mul}bind def
+ /ovlen{3 -1 roll sub 3 1 roll sub add exch 1.716815 mul sub}def
+ /dotellipse{gstartxy counttomark 1 gt{squarify pop pop 1}if
+ cirlen dotit circle closepath xystroke}def
+ /dashellipse{gstartxy counttomark 1 gt{squarify add 2 div 1}
+ {1 exch 1 exch}ifelse cirlen elldash circle xystroke}def
+ /ot /dotellipse load def /od /dashellipse load def
+ /vt /dotoval load def /vd /dashoval load def
+ /filloval{gstartxy oval xyfill}def
+ /stfiloval{gstartxy oval xystfil}def
+ /fillcircle{gstartxy circle xyfill}def
+ /stfilcircle{gstartxy circle xystfil}def
+ /fillellipse{gstartxy squarify pop pop 1 circle xyfill}def
+ /stfilellipse{gstartxy squarify pop pop 1 circle xystfil}def
+ /squarify{4 copy sub 2 div 3 1 roll sub 2 div translate
+ add 2 div 3 1 roll add 2 div 2 copy scale
+ 2 copy add 2 div currentlinewidth exch div setlinewidth
+ newpath}def
+ /fe /fillellipse load def /sfe /stfilellipse load def
+ /fo /filloval load def /sfo /stfiloval load def
+ /fc /fillcircle load def /sfc /stfilcircle load def
+ /xywidth{.4 pscorrect setlinewidth}bind def
+ /xydash{[] 0 setdash}bind def /xycap{1 setlinecap}bind def
+ /xyjoin{1 setlinejoin}bind def /xymiter{10 setmiterlimit}bind def
+
+ /cc{dup exec xychgcol}def
+ /lw{dup setlinewidth /@l exch def
+ /xywidth{@l setlinewidth}bind def}def
+ /lc{dup setlinecap /@c exch def
+ /xycap{@c setlinecap}bind def}def
+ /lj{dup setlinejoin /@j exch def
+ /xyjoin{@j setlinejoin}bind def}def
+ /ml{dup setmitrelimit /@m exch def
+ /xymiter{@m setmitrelimit}bind def}def
+
+ /setupDirection{dup -2048 lt{3072 add neg 1024 exch}
+ {dup 0 lt{1024 add neg -1024}{dup 2048 lt{1024 sub -1024 exch}
+ {3072 sub 1024}ifelse}ifelse}ifelse atan
+ dup 180 gt{360 sub}if dup /XYdirection exch def rotate}def
+
+ userdict begin
+ /gray{setgray}bind def /gray@{setgray}bind def
+ /rgb{setrgbcolor}bind def /rgb@{setrgbcolor}bind def
+ /hsb{sethsbcolor}bind def /hsb@{sethsbcolor}bind def
+ /setcmykcolor where{pop}{/setcmykcolor{dup 3 1 roll dup 5 1 roll
+ exch sub 1 add 5 1 roll exch sub 1 add 4 1 roll
+ exch sub 1 add 3 1 roll setrgbcolor}bind def}ifelse
+ /cmyk{setcmykcolor}bind def /cmyk@{setcmykcolor}bind def
+ /sethalftone where{/sethalftone load /tone exch def}if
+ /xycolarray 3 array def /xycolstore{currentrgbcolor 2 -1 0
+ {exch xycolarray 3 1 roll put}for}def xycolstore
+ /xycolor{0 1 2{xycolarray exch get}for setrgbcolor}def
+ /xypatt{}def /xypattern{cleartomark}bind def
+ end
+end end
+/XYdict where pop begin XYdict begin
+/:patt
+{XYddict begin
+14 dict begin
+/BGnd exch def
+/FGnd exch def
+/PaintData exch def
+/PatternType 1 def
+/PaintType 1 def
+/BBox[0 0 1 1]def
+/TilingType 1 def
+/XStep 1 def
+/YStep 1 def
+/PatternMtx[24 0 0 24 0 0]def
+/PaintProc BGnd null ne
+ {{begin BGnd aload pop setrgbcolor 0 0 1 1 rF
+ FGnd aload pop setrgbcolor
+ 24 24 true PatternMtx PaintData imagemask end}}
+ {{begin FGnd aload pop setrgbcolor
+ 24 24 true PatternMtx PaintData imagemask end}}
+ ifelse def
+ currentdict PatternMtx end
+ gsave patangle xyland{180 add}if
+ rotate macfreq patfreq div dup neg exch scale matrix currentmatrix
+ grestore gsave setmatrix /DeviceRGB setcolorspace makepattern grestore
+ end}def
+/rF{gsave
+ newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto
+ fill grestore}bind def
+ /setpatscreen{/pattstring exch store patfreq
+ patangle xyport not{90 add}if
+ {1 add 4 mul cvi pattstring exch get exch 1 add 4 mul cvi 7 sub
+ bitshift 1 and}setscreen}bind def
+ /setcolpattern{setpatscreen 64 div 1 exch sub currentrgbcolor
+ 1 1 3{pop 1 exch sub 3 index mul 1 exch sub 3 1 roll}for
+ setrgbcolor pop}def
+ /setgraypattern{setpatscreen 64 div setgray}def
+ /macfreq 9.375 def /patangle 0 def /patfreq 12.5 def
+/checkland{ /normland where{pop normland not}{false}ifelse
+ /xyland exch def
+ /por where{pop por}{/isls where{pop isls not /xyland true def}
+ {/land where{pop land not}{true}
+ ifelse}ifelse}ifelse /xyport exch def}def
+ /setpatfreq{/patfreq exch def}def
+ /setpatangle{/patangle exch def}def
+ /setbackcolor{/backcolor exch def}def
+ /setforecolor{/forecolor exch def}def
+ [1 1 1] setbackcolor xycolarray setforecolor
+ /bg /setbackcolor load def /fg /setforecolor load def
+ /pa /setpatangle load def /pq /setpatfreq load def
+ /xypattern{checkland counttomark dup 0 eq{pop}
+ {dup 1 eq{pop setpatscreen}
+ {dup 2 eq{pop setcolpattern}
+ {dup 3 eq{pop
+ /setcolorspace where {
+ /.setcolorspace where{pop pop pop setcolpattern}
+ {/.buildpattern where {pop
+ forecolor backcolor :patt setpattern
+ }{pop pop setcolpattern}ifelse}ifelse}
+ {pop setcolpattern}ifelse}
+ {5 eq{/setcolorspace where{
+ /.setcolorspace where{pop pop pop pop pop setcolpattern}
+ {/.buildpattern where {pop
+ :patt setpattern
+ }{pop pop pop pop setcolpattern}ifelse}ifelse}
+ {pop pop pop setcolpattern}ifelse
+ }{}ifelse}ifelse}ifelse}ifelse}ifelse cleartomark }def
+ /xysetpattern{/xypatt exch def}def
+ /sp /xysetpattern load def
+end end
+/XYdict where pop begin XYdict begin
+ /xysize 10 def /T true def /F false def
+ /dimendiv{65536 div}bind def
+ /xysegl 327680 dimendiv def
+ /xyopp{1 -1 scale}bind def
+ /xynormwidth{26213 dimendiv pscorrect}bind def
+ /xywidth{xynormwidth setlinewidth}bind def
+
+ /xyfont{4096 add 64 div round 64 mul 4096 sub}def /xydt 0.01 def
+ /xysdfont{4096 add 32 div round 32 mul 4096 sub}def
+ /xydots{xywidth 1 setlinecap [xydt 2] 0 setdash}bind def
+ /f /xyfont load def /fs /xysdfont load def
+ /xyCheckDir{dup 8 div 3 mul 3 -1 roll sub neg exch div 360 mul
+ dup dup XYdirection sub 180 div round 180 mul XYdirection add
+ dup 3 -1 roll sub abs 10 gt not{exch}if pop}def
+
+ /xyrulth{26213 dimendiv pscorrect setlinewidth
+ 0 setlinecap}bind def
+
+ /gsavexy{gsave xypspt XYdirection rotate xywidth newpath 0 0 moveto}def
+ /gchksavexy{gsave xypspt setupDirection xywidth newpath 0 0 moveto}def
+
+ /xyswap{XYdirection 180 add /XYdirection exch def}def
+ /xyline{gstartxy setupDirection rlineto xystroke}def
+
+ /dash{exch gchksavexy xysegl XYdirection dup
+ -90 lt{pop neg}{90 gt{neg}if}ifelse exch{neg}if
+ 0 rlineto xystroke}def
+ /stopper{gstartxy setupDirection 0 xysegl 2 div rmoveto
+ 0 xysegl neg rlineto xystroke }def
+ /d /dash load def /st /stopper load def
+ /solid{gstartxy xydash neg exch neg exch rlineto xystroke}def
+ /dashed{gstartxy 2 copy dup mul exch dup mul add sqrt dup
+ xysegl add xysegl 2 mul div round 2 mul 1 sub div [ exch dup ] 0 setdash
+ neg exch neg exch rlineto xystroke}def
+ /l /solid load def /dd /dashed load def
+ /dot{gstartxy 2 setlinecap [xydt 2] 0 setdash
+ 1 0 rlineto xystroke}def
+ /dotted{gstartxy 2 copy dup mul exch dup mul add sqrt dup
+ 2 div round 1 add div 2 setlinecap [xydt 3 -1 roll] 0 setdash
+ neg exch neg exch rlineto 0 0 rlineto xystroke}def
+ /p /dot load def /dt /dotted load def
+ /cubic{gstartxy docubic} def
+ /docubic{chkvalid
+ {chkcubedge 8 -2 roll moveto curveto xystroke pop}
+ {cleartomark grestore}ifelse}def
+ /chkcubedge{2 copy 1.0 eq{0.0 eq{pop pop}{cubicedge}ifelse}
+ {pop cubicedge}ifelse}def
+ /bz /cubic load def
+ /dotcubic{gstartxy 1 setlinecap [xydt 2] 0 setdash docubic}def
+ /dashcubic{gstartxy [5 5] 0 setdash docubic}def
+ /bt /dotcubic load def /bd /dashcubic load def
+ /squine{gstartxy dosquine}def
+ /dosquine{chkvalid
+ {chksquedge 2 copy moveto xysq2cub curveto xystroke pop}
+ {cleartomark grestore}ifelse}def
+ /q /squine load def
+ /chkvalid{2 copy lt{dup 1 gt{false}{true}ifelse}{false}ifelse}def
+
+ /chksquedge{2 copy 1.0 eq{0.0 eq{pop pop}{squineedge}ifelse}
+ {pop squineedge}ifelse}def
+ /xysq2cub{xysq2cubit 6 1 roll xysq2cubit 6 1 roll 3 index 3 index
+ xysq2cubit 6 1 roll xysq2cubit 6 1 roll pop pop}def
+ /xysq2cubit{2 index 2 mul add 3 div}def
+
+ /dotsquine{gstartxy 1 setlinecap [xydt 2] 0 setdash dosquine}def
+ /dashsquine{gstartxy [5 5] 0 setdash dosquine}def
+ /qt /dotsquine load def /qd /dashsquine load def
+/xy4mul{8 copy
+ 5 -1 roll mul 5 1 roll 6 -1 roll mul 6 1 roll
+ 3 -1 roll mul exch 4 -1 roll mul 3 1 roll
+ add 3 1 roll add exch 10 2 roll
+ 7 -1 roll mul 7 1 roll 4 -1 roll mul 5 1 roll
+ 4 -1 roll mul 4 1 roll mul add 3 1 roll add
+ exch 3 -1 roll }def
+
+ /xy44mul{4 copy 16 4 roll exch 3 1 roll 4 copy 12 4 roll
+ xy4mul 12 4 roll xy4mul 12 -4 roll 4 copy 16 4 roll
+ 8 4 roll xy4mul 12 4 roll xy4mul}def
+
+ /cubicedge{10 2 roll exch 8 1 roll 3 -1 roll dup dup 9 2 roll
+ 5 -1 roll dup dup 9 1 roll 8 3 roll
+ 4 1 roll dup dup 5 3 roll dup dup 5 1 roll 3 -1 roll
+ 18 -2 roll 2 copy 1 sub neg 4 1 roll 1 sub neg exch 4 1 roll
+ xy444mul
+ pop pop pop 13 1 roll pop pop pop 9 1 roll 10 1 roll
+ pop 8 1 roll 7 1 roll 8 1 roll pop 5 1 roll 3 1 roll}def
+
+ /xy444mul{4 copy 24 4 roll 12 -4 roll 16 4 roll 4 copy 16 4 roll
+ xy44mul 20 8 roll xy44mul
+ 12 -4 roll 4 -1 roll 7 1 roll exch 4 1 roll exch 6 -1 roll exch
+ 4 2 roll 16 8 roll 8 4 roll
+ 4 -1 roll 7 1 roll exch 4 1 roll exch 6 -1 roll exch 4 2 roll
+ 8 4 roll 16 4 roll 8 4 roll 20 -4 roll exch 3 1 roll
+ 4 copy 20 4 roll 4 copy 16 4 roll 4 copy 12 4 roll
+ xy4mul 28 4 roll xy4mul 20 4 roll xy4mul 12 4 roll xy4mul}def
+
+ /squineedge{8 2 roll
+ exch 5 1 roll 3 -1 roll dup 6 2 roll 1 index exch
+ 10 -2 roll 2 copy 1 sub neg 4 1 roll 1 sub neg exch 4 1 roll
+ xy44mul 4 1 roll pop 5 1 roll 6 1 roll 3 -1 roll pop}def
+
+ /xyshort{2 copy abs exch abs add xysegl .5 mul lt
+ {pop pop grestore}{rlineto xystroke}ifelse}def
+
+ /tipwidth{xywidth xynormwidth dup currentlinewidth exch div
+ sqrt dup dup scale mul setlinewidth 1 setlinecap}def
+
+ /halftip{tipwidth xysize 10 div 0 0 moveto
+ -.25 0 3 -1 roll -2.5 mul 0 xysize 2 div neg
+ dup .62 mul 2 div neg curveto}bind def
+
+/atip{gchksavexy halftip xystroke}def
+ /btip{gchksavexy xyopp halftip xystroke}def
+ /tip{gchksavexy gsave halftip stroke grestore
+ xyopp halftip xystroke}def
+ /t /tip load def /a /atip load def /b /btip load def
+/cmatip{gchksavexy halfcmtip xystroke}def
+ /cmbtip{gchksavexy xyopp halfcmtip xystroke}def
+ /cmtip{gchksavexy gsave halfcmtip stroke grestore
+ xyopp halfcmtip xystroke}def
+ /halfcmtip{tipwidth 0 0 moveto
+ -.1333 0 .25 neg dup .125 3 -1 roll .25 curveto}bind def
+ /ct /cmtip load def /ca /cmatip load def /cb /cmbtip load def
+ /xyfscale{/xyfsize exch def}def /xyfsize{10}def
+ /eu{-0.0551 0.0643 -0.0976 0.1386 -0.125 0.2188}def
+ /cm{-0.105 0.0437 -0.1804 0.1380 -0.2 0.25}def
+ /XY{-0.1753 0.0181 -0.3452 0.0708 -0.5 0.155}def
+ /tipstart{3 -1 roll gchksavexy exch xyfscale tipwidth dup XYdict exch
+ known{dup /xy eq{pop /XY}if}{pop /XY}ifelse XYdict exch get}def
+ /tipend{halfxytip xystroke}def
+ /halfxytip{1 1 6{pop xyfsize mul 6 1 roll}for 0 0 moveto curveto}def
+ /A{tipstart D}def /B{tipstart C}def /C{xyopp D}def /D{exec tipend}def
+ /AB{tipstart dup gsave exec halfxytip stroke grestore C}def
+
+ /Tip{exch gchksavexy /xyfsize{10}def tipwidth gsave
+ dup XYdict exch known{dup /xy eq{pop /XT}if}{pop /XT}ifelse
+ XYdict exch get dup
+ halfTip stroke grestore xyopp halfTip xystroke}def
+ /XT{360 32 div neg}def /Xt{-1 .31 mul 1 atan}def
+ /ET{360 64 div 5 mul neg}def /Et{-1 .31 mul 1 atan}def
+ /halfTip{exec rotate XY halfxytip}def /halfTtip{halfTip}def
+ /Ttip{exch gchksavexy /xyfsize{10}def tipwidth gsave
+ dup XYdict exch known{dup /xy eq{pop /Xt}if}{pop /Xt}ifelse
+ XYdict exch get dup
+ halfTtip stroke grestore xyopp halfTtip xystroke}def
+ /tt /Tip load def /tT /Ttip load def
+/halfturn{xysegl 2 div dup dup neg exch rmoveto
+ 0 exch dup exch -180 -90 arc}bind def
+ /aturn{gchksavexy halfturn xystroke}def
+ /bturn{gchksavexy xyopp halfturn xystroke}def
+ /ta /aturn load def /tb /bturn load def
+ /xysqll 231705 dimendiv def
+ /squigl{gchksavexy xysqll dup neg 0 rmoveto
+ 2 div dup dup neg dup 3 -1 roll
+ 2 sqrt mul dup 5 1 roll
+ 135 45 arcn dup 3 -1 roll -135 -45 arc
+ xystroke}def
+ /g /squigl load def
+/fullhook{0 xysegl 2 div dup -90 90 arcn}bind def
+ /halfhook{xysegl 2 div dup 0 exch 180 90 arcn}bind def
+
+/ahook{gchksavexy fullhook xystroke}def
+ /bhook{gchksavexy xyopp fullhook xystroke}def
+ /hook{gchksavexy gsave halfhook stroke grestore
+ xyopp halfhook xystroke}def
+ /h /hook load def /ha /ahook load def /hb /bhook load def
+ /xyqcirc{dup dup neg exch translate newpath
+ dup neg 0 exch moveto 0 0 3 -1 roll -90 0 arc}bind def
+
+ /circ{gstartxy
+ 3 copy pop 2 copy cos mul 3 1 roll sin mul
+ rmoveto 0 0 5 2 roll arc xystroke}bind def
+ /o /circ load def
+ /circhar{gsave dup 3 gt{7 sub neg}if dup
+ 3 eq{pop dup 2 sqrt -2 div mul}{dup 1 eq{pop dup 2 sqrt 2 div mul}
+ {0 eq{dup}{0}ifelse}ifelse}ifelse
+ 0 translate 3 1 roll circ grestore}bind def
+ /c /circhar load def
+end end
+%%EndResource
diff --git a/macros/generic/diagrams/xypic/support/dvitogif89a b/macros/generic/diagrams/xypic/support/dvitogif89a
new file mode 100644
index 0000000000..c2d4385b79
--- /dev/null
+++ b/macros/generic/diagrams/xypic/support/dvitogif89a
@@ -0,0 +1,215 @@
+#!/bin/sh
+# $Id: dvitogif89a,v 3.8 2011/03/14 20:14:00 krisrose Exp $
+#
+# Pack consecutive pages of TeX DVI file as GIF89a animation.
+# Copyright (c) 1996-1997 Kristoffer H. Rose <krisrose@tug.org>
+#
+# This file is part of the Xy-pic macro package.
+# Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+# See the README and INSTALL files for further information.
+#
+# The Xy-pic package 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.
+#
+# The Xy-pic 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 GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this package; if not, see http://www.gnu.org/licenses/.
+
+NAME=`basename $0`
+SYNOPSIS="Usage: $NAME file[.dvi]"
+DESCRIPTION="Pack consecutive pages of TeX DVI file as GIF89a animation."
+
+# Crop efficiently if possible.
+#
+if [ -n "`which pnmrawtopcropwhite`" ]
+then
+ cropwhite="pnmrawtopcropwhite |pnmcrop -white"
+elif [ -x ./pnmrawtopcropwhite ]
+then
+ cropwhite="./pnmrawtopcropwhite |pnmcrop -white"
+else
+ cropwhite="pnmcrop -white"
+fi
+
+# Check files.
+#
+ok=yes
+#
+if [ $# -ne 1 ]; then ok=no; fi
+#
+dvi="$1.dvi"
+if [ ! -f "$dvi" ]
+then
+ dvi="$1"
+ if [ ! -f "$dvi" ]; then ok=no; fi
+fi
+#
+base=`basename "$dvi" .dvi`
+size="$base.size"
+#
+if [ ! -f "$size" ]
+then
+ echo $NAME": could not find $size file!" >&2
+ ok=no
+else
+ eval `cat "$size"`
+ if [ -z "$dpi" -o -z "$delay" ]
+ then
+ echo $NAME": could not interpret $size file!" >&2
+ ok=no
+ fi
+fi
+#
+if [ $ok = no ]
+then
+ echo $SYNOPSIS >&2; exit 2
+fi
+
+# Initialise.
+#
+echo "${NAME}: Animating $base."
+rm -f $base.ps $base.[0-9][0-9][0-9].*
+#
+exec 2>"$base.log"
+set -x
+#
+date "+${NAME} Animating $dvi (log started %c)" >&2
+
+# Produce PostScript file!
+#
+echo -n "Producing PostScript..."
+echo "Producing PostScript:" >&2
+dvips -D $dpi "$base.dvi" -o "$base.ps"
+if [ $? -ne 0 ]; then echo "failed, aborting"; exit 1; else echo "done"; fi
+echo '' >&2
+
+# Produce PPM files!
+#
+echo -n "Producing PPMs"
+echo "Producing PPMs:" >&2
+echo '' \
+| gs -sOutputFile="|$cropwhite >$base.%03d.ppm" \
+ -sDEVICE=ppmraw -r$dpi - "$base.ps" 2>&1 \
+| while read ln; do
+ echo "$ln" >&2
+ case "$ln" in
+ *cols*off*the*left) echo -n . ;;
+ esac
+ done
+if [ $? -ne 0 ]; then echo "failed, aborting"; exit 1; else echo "done"; fi
+echo '' >&2
+
+# Measure first image and alert user.
+#
+top=0 bottom=0 left=0 right=0 height=0 width=0
+eval `pnmcrop -black "$base.001.ppm" |pnmfile |\
+ sed -n -e 's/.*[ \t]\([0-9]*\) by \([0-9]*\).*$/ width=\1 height=\2/p'`
+length=`echo $base.[0-9][0-9][0-9].ppm | wc -w | tr -d " \t"`
+#
+echo "Animation has $length frames of ${width}x${height}."
+echo "Length: $length" >&2
+echo "Image size: ${width}x${height}" >&2
+
+# Convert to incremental GIFs!
+#
+echo -n "Producing GIFs"
+lastppm=
+for ppm in $base.[0-9][0-9][0-9].ppm
+do
+
+ echo -n "."
+ echo -e "\nImage: $ppm" >&2
+
+ # filenames
+ gif="`basename $ppm .ppm`.gif"
+
+ # crop black border [sic]
+ mv $ppm $base.000.ppm
+ pnmcrop -black $base.000.ppm >$ppm
+
+ # produce smallest GIF image and add to gifpack command
+ if [ -z "$lastppm" ]
+ then
+
+ # first bitmap is used directly
+ ppmtogif $ppm > $gif
+ gifpack="gifpack -delay $delay $loop -output $base.gif $gif"
+
+ else
+
+ # measure unchanged border
+ top=0 bottom=0 left=0 right=0 height=0 width=0
+ measures="\
+ `( pnmarith -difference $lastppm $ppm | pnmcrop | pnmfile )2>&1 \
+ | sed -n \
+ -e 's/.*cropping \([0-9]*\) .* \([a-z]*\)$/\2=\1/p' \
+ -e 's/.* \([0-9]*\) by \([0-9]*\).*$/width=\1 height=\2/p'`"
+ eval "$measures"
+
+ # if no change just pass top left pixel
+ if [ $width -lt 1 -o $height -lt 1 ]
+ then
+ width=1; height=1; left=1; top=1
+ fi
+
+ # add GIF with changed rectangle to animation
+ pnmcut $left $top $width $height $ppm | ppmtogif >$gif
+ gifpack="$gifpack +$left,+$top $gif"
+
+ fi
+
+ # prepare next image
+ lastppm=$ppm
+
+done
+echo "done"
+echo '' >&2
+
+echo -n "Packing GIFs..."
+echo -e "\nPacking animation:" >&2
+eval $gifpack >&2
+if [ $? -ne 0 ]; then echo "failed, aborting"; exit 1; else echo "done"; fi
+echo '' >&2
+
+# Clean up.
+#
+rm -f $base.[0-9][0-9][0-9].*
+
+# Done.
+#
+echo Done. >&2
+exit
+
+# $Log: dvitogif89a,v $
+# Revision 3.8 2011/03/14 20:14:00 krisrose
+# Preparing for release 3.8.6.
+#
+# Revision 3.7 2010/06/10 18:45:49 krisrose
+# Reference to GPL by URL.
+#
+# Revision 3.6 2010/04/16 06:06:51 krisrose
+# Preparing for a new release...
+#
+# Revision 3.5 1997/05/28 13:05:01 krisrose
+# Fixed missing breaks bug.
+#
+# Revision 3.4 1997/05/18 01:14:25 krisrose
+# Essential bugfixes.
+#
+# Revision 1.3 1997/05/01 21:32:32 krisrose
+# Changed to exploit pnmrawtopcropwhite hack if available...
+# Output cleaned up; uses log file for the rest.
+#
+# Revision 1.2 1997/05/01 19:23:16 krisrose
+# Doesn't quite work...
+#
+# Revision 1.1 1997/02/11 04:19:23 krisrose
+# Initial revision
+#
+# Based on MakeTeXmovie...
diff --git a/macros/generic/diagrams/xypic/support/install-tds b/macros/generic/diagrams/xypic/support/install-tds
new file mode 100644
index 0000000000..9f7e9b3284
--- /dev/null
+++ b/macros/generic/diagrams/xypic/support/install-tds
@@ -0,0 +1,174 @@
+#!/bin/sh
+# $Id: install-tds,v 3.16 2011/03/14 20:14:00 krisrose Exp $
+#
+# sh(1) installation of Xy-pic into a TeX Directory Structure system.
+# Copyright (c) 1997 Kristoffer H. Rose <krisrose@tug.org>
+#
+# This file is part of the Xy-pic macro package.
+# Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+# See the README and INSTALL files for further information.
+#
+# The Xy-pic package 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.
+#
+# The Xy-pic 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 GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this package; if not, see http://www.gnu.org/licenses/.
+
+# check that we are in the right place (and get version :)
+
+# greet
+echo ''
+echo ' Welcome to the Xy-pic TDS-compliant installation script!'
+echo ' Copyright (c) 1997-1998 by krisrose@tug.org'
+echo ' Xy-pic is free software: see the User's Guide for details.'
+echo ''
+echo ' The author has seriously tried to ensure the portability of'
+echo ' this script among all un*x platforms, however, if you experience'
+echo ' problems then don't hesitate to contact me.'
+echo ''
+echo ' See the file INSTALL for details about what this script does.'
+
+# record the argument as TEXMF
+: ${TEXMF:=$1}
+
+# if no TEXMF specified try to figure it out
+: ${TEXMF:=`kpsewhich --expand-var='$TEXMFMAIN' 2>/dev/null`}
+: ${TEXMF:=`kpsexpand '$TEXMFMAIN' 2>/dev/null`}
+: ${TEXMF:=`kpsewhich --expand-var='$TEXMF' 2>/dev/null`}
+: ${TEXMF:=`kpsexpand '$TEXMF' 2>/dev/null`}
+
+if [ -d "$TEXMF" ]
+then
+ echo ''
+ echo "TEXMF directory $TEXMF found."
+else
+ echo ''
+ echo 'ERROR: I could not find the TEXMF directory (tried '"$TEXMF"')!' >&2
+ echo 'Usage: ./support/install-tds [TEXMF]' >&2
+ echo 'Xy-pic installation aborted.'
+ exit 2
+fi
+
+# get confirmation
+echo ''
+echo ' This script will install Xy-pic under the indicated TEXMF tree.'
+echo ' We assume that it is the root of a standard TeX Directory Structure.'
+echo ''
+echo ' Also we asume that the commands find, grep, mkdir, and cp, conform'
+echo ' to their POSIX specification and can be found in the standard path.'
+echo ''
+echo 'Type <enter> to continue (anything else to stop - this is your last chance):'
+read reply
+if [ -z "$reply" ];
+then
+ echo ''
+ echo 'Thanks: proceeding with the installation.'
+else
+ echo 'Xy-pic installation aborted.'
+ exit 1
+fi
+
+# warn user about obsolete files
+echo ''
+echo 'Checking for obsolete files.'
+if [ -d "$TEXMF/dvips/xypic" ]
+then
+
+ files=`find "$TEXMF/dvips" -name "xy*.map" -print 2>/dev/null`
+ if [ -n "$files" ]
+ then
+ echo 'WARNING: xy*.map files exist:'
+ echo $files
+ fi
+
+ files=`find "$TEXMF/dvips" -name psfonts.map -print 2>/dev/null`
+ files=`grep -svl '^xy' $files /dev/null`
+ if [ -n "$files" ]
+ then
+ echo 'WARNING: psfonts.map xy*-font mappings exist in:'
+ echo "$files"
+ fi
+
+ files=`find "$TEXMF/fonts/type1" -name "xy*.pf?" -print 2>/dev/null \
+ | grep -v "$TEXMF/fonts/type1/public/xypic/xy.*[.]pfb"`
+ if [ -n "$files" ]
+ then
+ echo 'WARNING: xy*.pfa or xy*.pfb files exist:'
+ echo "$files"
+ fi
+
+fi
+
+# function for installing simple files in a directory
+installd () {
+ text=$1; shift
+ dir=`eval 'echo ${'$#'}'` # extract last parameter
+ echo "Installing $text in $dir."
+ if mkdir -p "$dir"; then cp -f "$@"
+ else
+ echo ' WARNING: could not make directory - files not installed.'
+ fi
+}
+
+# do the actual installation
+echo ''
+echo 'Installing Xy-pic...'
+
+installd "1. administrivia" \
+ README CATALOG TRAILER INSTALL MANIFEST VERSIONS *COPYING \
+ Xy-pic.html Xy-logo.png \
+ "$TEXMF/doc/generic/xypic"
+installd "2. macros" texinputs/* "$TEXMF/tex/generic/xypic"
+installd "3. font metrics" texfonts/*.tfm "$TEXMF/fonts/tfm/public/xypic"
+installd "4. font sources" mfinputs/*.mf "$TEXMF/fonts/source/public/xypic"
+installd "5. ps type1 fonts" type1/*.pfb "$TEXMF/fonts/type1/public/xypic"
+installd "6. ps pfm fonts" pfm/*.pfm "$TEXMF/fonts/pfm/public/xypic"
+installd "7. afm metrics" afm/*.afm "$TEXMF/fonts/afm/public/xypic"
+installd "8. ps headers" ps/* "$TEXMF/dvips/xypic"
+installd "9. ps font maps" map/* "$TEXMF/fonts/map/dvips/xypic"
+installd "10. ps font encodings" enc/* "$TEXMF/fonts/enc/dvips/xypic"
+installd "11. documentation" doc/xyguide.pdf doc/xyrefer.pdf "$TEXMF/doc/generic/xypic"
+
+# done
+echo "Xy-pic installation done."
+exit
+
+# $Log: install-tds,v $
+# Revision 3.16 2011/03/14 20:14:00 krisrose
+# Preparing for release 3.8.6.
+#
+# Revision 3.15 2010/07/26 11:21:02 krisrose
+# 3.8.3 version oopses
+#
+# Revision 3.14 2010/07/06 22:43:56 krisrose
+# Release 3.8.3.
+#
+# Revision 3.13 2010/06/10 18:45:49 krisrose
+# Reference to GPL by URL.
+#
+# Revision 3.12 2010/06/08 07:28:43 krisrose
+# Identify .map file.
+#
+# Revision 3.11 2010/06/07 04:16:53 krisrose
+# Fix forgotten enc files.
+#
+# Revision 3.10 2010/05/09 22:11:05 krisrose
+# Loose /usr/bin prefixes.
+#
+# Revision 3.9 2010/04/22 14:52:09 krisrose
+# Documentation up to date. Install PDF encoding files and XYLU metric files.
+#
+# Revision 3.8 2010/04/16 06:06:51 krisrose
+# Preparing for a new release...
+#
+# Revision 3.7 1999/02/16 15:12:50 krisrose
+# Interim release (Y&Y fonts now free).
+#
+# New with release 3.5...changed significantly for 3.6.
diff --git a/macros/generic/diagrams/xypic/support/pnmrawtopcropwhite.c b/macros/generic/diagrams/xypic/support/pnmrawtopcropwhite.c
new file mode 100644
index 0000000000..ff6ab48a3c
--- /dev/null
+++ b/macros/generic/diagrams/xypic/support/pnmrawtopcropwhite.c
@@ -0,0 +1,183 @@
+/* $Id: pnmrawtopcropwhite.c,v 3.10 2011/03/14 20:14:00 krisrose Exp $
+**
+** Crop off top white lines from raw PBM file (efficiently :)
+** Copyright (c) 1991-1998 Kristoffer H. Rose <krisrose@tug.org>
+**
+** This file is part of the Xy-pic package for graphs and diagrams in TeX.
+** Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+**
+** The Xy-pic package 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.
+**
+** The Xy-pic 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 GNU General Public License
+** for more details.
+**
+** You should have received a copy of the GNU General Public License along
+** with this package; if not, see http://www.gnu.org/licenses/.
+*/
+static const char Id[] =
+"@(#)$Id: pnmrawtopcropwhite.c,v 3.10 2011/03/14 20:14:00 krisrose Exp $\n";
+
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+/* Globals */
+
+#define PBMRAWMAGIC "P4" /* Portable BitMap magic cookie */
+#define PGMRAWMAGIC "P5" /* Portable GrayMap magic cookie */
+#define PPMRAWMAGIC "P6" /* Portable PixMap magic cookie */
+#define MAGICSIZE 2
+
+static char *me; /* program name */
+
+/* Subroutines */
+
+void oops(void) {
+ fprintf(stderr, "Usage: %s\n", me);
+ exit(1);
+}
+
+void panic(const char *mess) {
+ fprintf(stderr, "Error: %s\nUsage: %s\n", mess, me);
+ exit(2);
+}
+
+void skipcomment(void) {
+ int c;
+ while(1) {
+ switch (c = getchar()) {
+ case EOF: panic("premature EOF on input"); break;
+ case '\n': return;
+ default: break;
+ }
+ }
+}
+
+void skipwhite(void) {
+ int c;
+ while(1) {
+ switch (c = getc(stdin)) {
+ case EOF: panic("premature EOF on input"); break;
+ case ' ': case '\t': case '\r': case '\n': break;
+ case '#': skipcomment(); break;
+ default: ungetc(c, stdin); return;
+ }
+ }
+}
+
+int nextint(const char *what) {
+ int i;
+ skipwhite();
+ if (!scanf("%d", &i)) panic(what);
+ return i;
+}
+
+/* Program */
+
+int main (int argc, char *argv[]) {
+
+ char magic[MAGICSIZE];
+ enum { PBM, PGM, PPM } which;
+ int width, height, newheight, pixelmax;
+
+ int linelength;
+ char *line, *whiteline;
+
+ /* establish identity and proper usage */
+ me = argv[0];
+ if (argc != 1) oops();
+
+ /* magic */
+ if (!fread(magic, 1, MAGICSIZE, stdin))
+ panic("no magic (nothing on standard input)");
+
+ if (!memcmp(magic, PBMRAWMAGIC, MAGICSIZE))
+ which = PBM;
+ else if (!memcmp(magic, PGMRAWMAGIC, MAGICSIZE))
+ which = PGM;
+ else if (!memcmp(magic, PPMRAWMAGIC, MAGICSIZE))
+ which = PPM;
+ else
+ panic("bad magic (standard input not a raw anymap)");
+
+ /* width and height */
+ width = nextint("pixelwidth integer");
+ height = nextint("pixelheight integer");
+ switch (which) {
+ case PBM: pixelmax = 0; break; /* hack (used by memset below) */
+ case PGM: case PPM:
+ pixelmax = nextint("pixelmax integer");
+ if (pixelmax > 255) panic("pixelmax larger than 255");
+ }
+ if (getchar() != '\n')
+ panic("something not a simple newline after width height [pixelmax]");
+
+ /* allocate pixel line */
+ switch (which) {
+ case PBM: linelength = (width + 7) / 8; break;
+ case PGM: linelength = width; break;
+ case PPM: linelength = width * 3; break;
+ }
+ line = (char*)malloc(linelength);
+ if (!line) panic("could not allocate pixel line");
+ whiteline = (char*)malloc(linelength);
+ if (!whiteline) panic("could not allocate white pixel line");
+ memset(whiteline, pixelmax, linelength);
+
+ /* skip white pixel lines */
+ newheight = height;
+ while (fread(line, linelength, 1, stdin)
+ && !memcmp(line, whiteline, linelength)) {
+ newheight--;
+ if (newheight <= 0) panic("entire image blank");
+ }
+
+ /* output revised header */
+ if (newheight < height)
+ fprintf(stderr,"%s: cropping %d rows off the top\n", me, height-newheight);
+ printf("%.*s\n%d %d\n", MAGICSIZE, magic, width, newheight);
+ switch (which) {
+ case PBM: break;
+ case PGM: case PPM:
+ printf("%d\n", pixelmax); break;
+ }
+
+ /* output remainder of image */
+ do {
+ if (!fwrite(line, linelength, 1, stdout)) panic("could not write");
+ } while (fread(line, linelength, 1, stdin));
+ if (!feof(stdin)) panic("input not exhausted");
+
+ return(0);
+}
+
+
+/*
+** $Log: pnmrawtopcropwhite.c,v $
+** Revision 3.10 2011/03/14 20:14:00 krisrose
+** Preparing for release 3.8.6.
+**
+** Revision 3.9 2010/06/10 18:45:49 krisrose
+** Reference to GPL by URL.
+**
+** Revision 3.8 2010/04/16 06:06:51 krisrose
+** Preparing for a new release...
+**
+** Revision 3.7 1999/02/16 15:12:50 krisrose
+** Interim release (Y&Y fonts now free).
+**
+** Revision 1.3 1997/05/01 20:59:51 krisrose
+** Works for all three raw formats now.
+**
+** Revision 1.2 1997/05/01 17:34:58 krisrose
+** Extended to raw PGM and PPM in addition to PBM.
+**
+** Revision 1.1 1997/04/30 21:30:31 krisrose
+** Initial revision
+*/
diff --git a/macros/generic/diagrams/xypic/texfonts/xyatip10.tfm b/macros/generic/diagrams/xypic/texfonts/xyatip10.tfm
new file mode 100644
index 0000000000..1c2a1d492e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xyatip10.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xybsql10.tfm b/macros/generic/diagrams/xypic/texfonts/xybsql10.tfm
new file mode 100644
index 0000000000..6fcb178833
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xybsql10.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xybtip10.tfm b/macros/generic/diagrams/xypic/texfonts/xybtip10.tfm
new file mode 100644
index 0000000000..1c2a1d492e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xybtip10.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xycirc10.tfm b/macros/generic/diagrams/xypic/texfonts/xycirc10.tfm
new file mode 100644
index 0000000000..545afce044
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xycirc10.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xycmat10.tfm b/macros/generic/diagrams/xypic/texfonts/xycmat10.tfm
new file mode 100644
index 0000000000..98f646e332
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xycmat10.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xycmat11.tfm b/macros/generic/diagrams/xypic/texfonts/xycmat11.tfm
new file mode 100644
index 0000000000..d51fb1769e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xycmat11.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xycmat12.tfm b/macros/generic/diagrams/xypic/texfonts/xycmat12.tfm
new file mode 100644
index 0000000000..dcb3026bca
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xycmat12.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xycmbt10.tfm b/macros/generic/diagrams/xypic/texfonts/xycmbt10.tfm
new file mode 100644
index 0000000000..98f646e332
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xycmbt10.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xycmbt11.tfm b/macros/generic/diagrams/xypic/texfonts/xycmbt11.tfm
new file mode 100644
index 0000000000..d51fb1769e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xycmbt11.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xycmbt12.tfm b/macros/generic/diagrams/xypic/texfonts/xycmbt12.tfm
new file mode 100644
index 0000000000..dcb3026bca
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xycmbt12.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xydash10.tfm b/macros/generic/diagrams/xypic/texfonts/xydash10.tfm
new file mode 100644
index 0000000000..6fc35039ae
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xydash10.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xyeuat10.tfm b/macros/generic/diagrams/xypic/texfonts/xyeuat10.tfm
new file mode 100644
index 0000000000..3fc8aa911a
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xyeuat10.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xyeuat11.tfm b/macros/generic/diagrams/xypic/texfonts/xyeuat11.tfm
new file mode 100644
index 0000000000..4076825a6e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xyeuat11.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xyeuat12.tfm b/macros/generic/diagrams/xypic/texfonts/xyeuat12.tfm
new file mode 100644
index 0000000000..5ab3d4612a
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xyeuat12.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xyeubt10.tfm b/macros/generic/diagrams/xypic/texfonts/xyeubt10.tfm
new file mode 100644
index 0000000000..3fc8aa911a
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xyeubt10.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xyeubt11.tfm b/macros/generic/diagrams/xypic/texfonts/xyeubt11.tfm
new file mode 100644
index 0000000000..4076825a6e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xyeubt11.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xyeubt12.tfm b/macros/generic/diagrams/xypic/texfonts/xyeubt12.tfm
new file mode 100644
index 0000000000..5ab3d4612a
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xyeubt12.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xyline10.tfm b/macros/generic/diagrams/xypic/texfonts/xyline10.tfm
new file mode 100644
index 0000000000..b6965721ee
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xyline10.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xyluat10.tfm b/macros/generic/diagrams/xypic/texfonts/xyluat10.tfm
new file mode 100644
index 0000000000..f1cea0101c
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xyluat10.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xyluat11.tfm b/macros/generic/diagrams/xypic/texfonts/xyluat11.tfm
new file mode 100644
index 0000000000..bf0b08c974
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xyluat11.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xyluat12.tfm b/macros/generic/diagrams/xypic/texfonts/xyluat12.tfm
new file mode 100644
index 0000000000..197e248e42
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xyluat12.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xylubt10.tfm b/macros/generic/diagrams/xypic/texfonts/xylubt10.tfm
new file mode 100644
index 0000000000..f1cea0101c
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xylubt10.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xylubt11.tfm b/macros/generic/diagrams/xypic/texfonts/xylubt11.tfm
new file mode 100644
index 0000000000..bf0b08c974
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xylubt11.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xylubt12.tfm b/macros/generic/diagrams/xypic/texfonts/xylubt12.tfm
new file mode 100644
index 0000000000..197e248e42
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xylubt12.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xymisc10.tfm b/macros/generic/diagrams/xypic/texfonts/xymisc10.tfm
new file mode 100644
index 0000000000..9de7ce48e3
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xymisc10.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texfonts/xyqc10.tfm b/macros/generic/diagrams/xypic/texfonts/xyqc10.tfm
new file mode 100644
index 0000000000..1ac87cf999
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texfonts/xyqc10.tfm
Binary files differ
diff --git a/macros/generic/diagrams/xypic/texinputs/movie.cls b/macros/generic/diagrams/xypic/texinputs/movie.cls
new file mode 100644
index 0000000000..6486901aa8
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/movie.cls
@@ -0,0 +1,333 @@
+%% $Id: movie.cls,v 3.7 2011/03/14 20:14:00 krisrose Exp $ -*-latex-*-
+%%
+%% ``LaTeX Movie'' document class for DVI animations.
+%% Copyright (c) 1994-1997 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+
+\NeedsTeXFormat{LaTeX2e}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Version.
+
+\def\next$#1: #2 #3${#2}
+\edef\next{\noexpand\ProvidesClass{movie}%
+ [\next$Date: 2011/03/14 20:14:00 $
+ Movies in LaTeX v.\next$Revision: 3.7 $.]}\next
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Options.
+
+% nocaption (omit caption at lower left; default)
+% caption (include caption)
+\newif\ifm@caption
+\DeclareOption{nocaption}{\m@captionfalse}
+\DeclareOption{caption}{\m@captiontrue}
+
+% nocount (omit count at lower left; default)
+% count (include count)
+\newif\ifm@count
+\DeclareOption{nocount}{\m@countfalse}
+\DeclareOption{count}{\m@counttrue}
+
+% notime (omit elapsed time in "seconds"; default)
+% time (include elapsed time)
+\newif\ifm@time
+\DeclareOption{notime}{\m@timefalse}
+\DeclareOption{time}{\m@timetrue}
+
+% loop (make the animation loop; default)
+% once (don't loop)
+\def\loop@@{-ns2}
+\DeclareOption{loop}{\def\loop@@{-ns2}}
+\DeclareOption{once}{\def\loop@@{-once}}
+
+% Paper size (ignored since result is never printed).
+\DeclareOption{a4paper}{}
+\DeclareOption{a5paper}{}
+\DeclareOption{b5paper}{}
+\DeclareOption{letterpaper}{}
+\DeclareOption{legalpaper}{}
+\DeclareOption{executivepaper}{}
+\DeclareOption{landscape}{}
+
+%\vsize=9in \voffset=0in
+%\hsize=7in \hoffset=0in % safe? :)
+
+\newdimen\textheight \textheight=\vsize
+\newdimen\textwidth \textwidth=\hsize
+
+% Font size.
+\renewcommand\normalsize{\fontsize{10}{12}\selectfont}
+\DeclareOption{10pt}{\renewcommand\normalsize{\fontsize{10}{12}\selectfont}}
+\DeclareOption{11pt}{\renewcommand\normalsize{\fontsize{11}{13}\selectfont}}
+\DeclareOption{12pt}{\renewcommand\normalsize{\fontsize{12}{14}\selectfont}}
+
+% Driver (passed on to packages).
+\DeclareOption{cmactex}{\OptionNotUsed}
+\DeclareOption{dvips}{\OptionNotUsed}
+\DeclareOption{dvitops}{\OptionNotUsed}
+\DeclareOption{emtex}{\OptionNotUsed}
+\DeclareOption{ln}{\OptionNotUsed}
+\DeclareOption{oztex}{\OptionNotUsed}
+\DeclareOption{textures}{\OptionNotUsed}
+\DeclareOption{xdvi}{\OptionNotUsed}
+
+% ...remaining options are numeric assignments...
+\def\m@keys{}
+\def\add@m@keys#1{\expandafter\def\expandafter\m@keys\expandafter{\m@keys,#1}}
+\DeclareOption*{\expandafter\add@m@keys\expandafter{\CurrentOption}}
+
+\ProcessOptions*
+
+\LoadClass{article}
+\pagestyle{empty}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Dependencies.
+
+\RequirePackage{keyval} % key=value pair support
+\input xy % Xy-pic kernel (not package to prevent clash)
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Parameters (set via options or the setup).
+
+% pixel=<dimen> (makes \pixels{<number>} a valid <dimen>; default: 1in/300)
+% dpi=<number> (dots per inch ~ pixel=1in/number)
+\newdimen\m@pixel \m@pixel=0.0033333333in
+\define@key{movie}{pixel}{\m@pixel=#1\relax}
+\define@key{movie}{dpi}{\m@pixel=1in \divide \m@pixel by #1\relax}
+
+% height=<dimen>
+% width=<dimen>
+\newdimen\m@height \m@height=2in
+\newdimen\m@width \m@width=2in
+\define@key{movie}{height}{\m@height=#1\relax}
+\define@key{movie}{width}{\m@width=#1\relax}
+
+% tick=<fraction> (set the duration of each frame to <fraction> seconds)
+% fps=<number> (frames per second ~ tick=1/number)
+\newdimen\m@tick \m@tick=0.083333333pt
+\define@key{movie}{tick}{\m@tick=#1pt\relax}
+\define@key{movie}{fps}{\m@tick=1pt \divide \m@tick by #1\relax}
+
+\def\next#1{\setkeys{movie}{#1}}
+\expandafter\next\expandafter{\m@keys}
+\let\m@keys=\undefined
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Setting parameters explicitly...
+
+\def\MovieSetup#1{\setkeys{movie}{#1}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Internals.
+
+\def\m@caption{}
+
+\countdef\m@scene=1 % count1 = scene#
+\countdef\m@frame=2 % count2 = frame# (in scene)
+
+\font\fiverm=cmr5 % safe small font
+
+\newdimen\m@total \m@total=0pt % total elapsed time
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% User accessible progress macros:
+
+\def\theFrame{0}
+\def\theScene{0}
+
+\def\theF{0}
+\def\theFr{1}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% User command: \scene [<fraction>] {...}
+%
+% Produce scene of <fraction> seconds (default: 1.0) with each frame produced
+% by ... centered in vertical mode.
+
+\newif\iflastframe@
+\newdimen\m@length % duration of scene
+\newdimen\m@init % start of zoom
+
+\newcommand\scene{%
+ \@ifnextchar*{\lastframe@true \DN@*{\scene@i}\next@}%
+ {\lastframe@false \scene@i}}
+
+\newcommand\scene@i[1][1]{\scene@ii{#1}}
+
+\def\setm@caption#1{\xdef\m@caption{#1}}
+
+\long\def\scene@ii#1#2{{%
+ \let\caption=\setm@caption
+ \global\advance\m@scene\@ne \edef\theScene{\the\m@scene}%
+ \global\m@frame=\z@ \m@length=#1pt \m@init=\z@
+ \loop
+ \dimen@=\m@frame\m@tick
+ \ifdim\dimen@<\m@length
+ \scene@frame{#2}%
+ \repeat
+ \iflastframe@ \scene@frame{#2}\fi
+ \dimen@=#1pt \advance\dimen@ by -\m@frame\m@tick
+ \ifdim.1\m@tick<\ifdim\dimen@<\z@-\fi\dimen@
+ \dimen@=\m@frame\m@tick
+ \@warning{scene \the\m@scene\space rounded from #1 to
+ \expandafter\unPT@\the\dimen@\space seconds}%
+ \fi}\ignorespaces}
+
+\def\scene@frame#1{\frame@compute
+ \null
+ \vfill
+ \hrule width\m@width
+ \hbox to\m@width{\hss
+ \vbox to\m@height{\hsize=\m@width \null\vfil{#1}\vfil\null}%
+ \hss}%
+ \setbox0=\hbox{%
+ \setbox0=\hbox to\m@width{\hss\fiverm\strut
+ \ifm@caption \m@caption \fi
+ \ifm@time \quad \m@nicetotal s \fi
+ \ifm@count \quad \the\m@scene.%
+ \ifnum\m@frame<100 0\ifnum\m@frame<10 0\fi\fi\the\m@frame\fi}%
+ \dimen0=\dp0 \ht0=0pt \dp0=0pt \raise\dimen0\box0}%
+ \ht0=0pt \dp0=0pt \box0\relax
+ \hrule width\m@width
+ \global\advance\m@frame\@ne
+ \global\advance\m@total\m@tick
+ \eject}
+
+\def\frame@compute{%
+ \edef\theFrame{\the\m@frame}%
+ \dimen@=\m@frame\m@tick \advance\dimen@-\m@init
+ \ifdim\dimen@<\z@ \dimen@=\z@ \fi
+ \ifdim\dimen@>\m@length \dimen@=\m@length \fi
+ \quotient@\theF\dimen@\m@length
+ \dimen@=-\dimen@ \advance\dimen@\m@length
+ \quotient@\theFr\dimen@\m@length}
+
+\def\m@nicetotal{%
+ \edef\tmp{\expandafter\removePT@\the\m@total}%
+ \expandafter\twodecimals@\tmp 00@}
+\def\twodecimals@#1.#2#3#4@{#1.#2#3}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Triggers.
+%
+% Triggers are used to make the individual frames in a scene different! :)
+
+% \F{C} expands to C(F) where F = (#frames / frame#) ; 0.0 < F <= 1.0 .
+% \Fr{C} expands to C(Fr) where Fr = 1 - F .
+
+\def\F{\expandafter\F@\expandafter{\theF}}
+\def\Fr{\expandafter\F@\expandafter{\theFr}}
+
+\def\F@#1#2{#2(#1)}
+
+% \Zoom[A;B]{C} expands C zooming onto the interval [A;B], i.e., within C the
+% interval [0;1] really denotes the (current) interval [A;B] ...
+
+% Specifically: F F inside [A;B]
+% 0;A 0
+% A;B F-A / B-A
+% B;1 1
+
+\newcommand\Zoom[1][0;1]{\Zoom@#1;}
+\def\Zoom@#1;#2;#3{{%
+ \dimen@=#1\m@length \advance\dimen@\m@init
+ \m@length=#2\m@length \advance\m@length\m@init
+ \advance\m@length-\dimen@ \m@init=\dimen@
+ \frame@compute #3}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Preliminary FADING support...
+%
+% by Ross Moore; depends on Xy-pic `ps' backend...
+%
+% use as a <shape> modifier: \drop[<colour>][!\F\lighten]<object>
+% use as a <shape> modifier: \drop[<colour>][!\F\darken}]<object>
+%
+% \lighten(1) = white \lighten(0) = natural colour
+% \darken (1) = black \darken (0) = natural colour
+%
+\def\lighten@(#1){/@col #1 def{1 sub 1 @col sub mul 1 add}settransfer}
+\def\darken@(#1){/@col #1 def{1 @col sub mul}settransfer}
+
+\xywithoption{ps}{\let\lighten=\lighten@ \let\darken=\darken@}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Dump size file.
+%
+\AtEndDocument{\dumpsizefile}
+
+\newwrite\m@write
+
+{\catcode`p=12 \catcode`t=12 \gdef\unPT@#1pt{#1}}
+
+\def\dumpsizefile{\immediate\openout\m@write=\jobname.size
+%
+ \dimen@=1in \divide\dimen@\m@pixel
+ \immediate\write\m@write{dpi=\number\dimen@}%
+%
+ \dimen@=\m@tick \multiply\dimen@ by 1000\advance\dimen@.5\m@tick
+ \divide\dimen@\p@ \immediate\write\m@write{delay=\number\dimen@}%
+%
+ \immediate\write\m@write{loop=\loop@@}%
+%
+ \immediate\closeout\m@write}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Misc. class-provided commands...
+
+\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}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% The End.
+
+\endinput
+
+% $Log: movie.cls,v $
+% Revision 3.7 2011/03/14 20:14:00 krisrose
+% Preparing for release 3.8.6.
+%
+% Revision 3.6 2010/06/10 18:45:49 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.5 2010/04/16 06:06:51 krisrose
+% Preparing for a new release...
+%
+% Revision 3.4 1997/05/18 01:14:25 krisrose
+% Essential bugfixes.
+%
+% Revision 1.5 1997/05/13 12:36:26 krisrose
+% Intermediate version; factors function nicely.
+%
+% Revision 1.4 1997/05/01 21:55:44 krisrose
+% Works again.
+%
+% Revision 1.3 1997/02/11 04:20:19 krisrose
+% Fits new dvitogif89a 1.1 :)
+%
+% Moved to Xy-pic hierarchy.
diff --git a/macros/generic/diagrams/xypic/texinputs/xy.sty b/macros/generic/diagrams/xypic/texinputs/xy.sty
new file mode 100644
index 0000000000..29218a0a26
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xy.sty
@@ -0,0 +1,137 @@
+%% $Id: xy.sty,v 3.10 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% ``Xy-pic as LaTeX 2.09 style option and LaTeX 2e package''.
+%% Copyright (c) 1993-1996 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+
+% Load Xy-pic with catcode of @ set as it will be in user text:
+\count255=\the\catcode`\@ {\catcode`\@=11 \xdef\xystycatcode{\the\count255}}
+\makeatletter
+
+% REPAIR bug of the 2e version of AMS-LaTeX where \makeatother is broken...
+\ifx\@ifpackageloaded\undefined \makeatother
+\else \@ifpackageloaded{amstex}{\catcode`\@=\active}{\makeatother}\fi
+
+\input xy
+
+% That is all unless this is called as a LaTeX2e `native mode' package. Is
+% there an official way to check this? Anyway, this seems to work:
+\makeatletter
+\ifx\if@compatibility\undefined \catcode`\@=\xystycatcode \endinput \fi
+
+% Ensure that we are *really* running LaTeX2e...!
+\NeedsTeXFormat{LaTeX2e}
+
+% So we can check for pdfTeX.
+\RequirePackage{ifpdf}
+
+% This file provides the current version of Xy-pic!
+\edef\next{%
+ \noexpand\ProvidesPackage{xy}[\xydate\space Xy-pic version \xyversion]}\next
+
+% Recognise some standard LaTeX2e class options (cf. old `LaTeX Companion' p.317):
+\DeclareOption{cmactex}{\xyoption{dvips}} % Thomas Kiffe's CMacTeX uses dvips
+\DeclareOption{dvips}{\xyoption{dvips}\xyoption{ps}}
+\DeclareOption{dvitops}{\xyoption{dvitops}\xyoption{ps}}
+\DeclareOption{emtex}{\xyoption{emtex}}
+\DeclareOption{ln}{\xywarning@{`ln' DVI driver not yet fully supported}}
+\DeclareOption{oztex}{\xyoption{oztex}}
+\DeclareOption{textures}{\xyoption{textures}}
+\DeclareOption{xdvi}{\xyoption{xdvi}}
+
+% Recognise standard aliases for the pdf option.
+\DeclareOption{pdftex}{\xyoption{pdf}}
+\DeclareOption{dvipdfm}{\xyoption{pdf}}
+\DeclareOption{dvipdfmx}{\xyoption{pdf}}
+
+% This is special.
+\DeclareOption{colour}{\xyoption{color}} % :-)
+
+% This (obsolete) cmtip style option should be activated after loading:
+\DeclareOption{cmtip}{\xyoption{cmtip}\UseComputerModernTips}
+
+% Pass the desired tip size if defined
+\DeclareOption{10pt}{\xywithoption{tips}{\def\tipsize@@{10}}}
+\DeclareOption{11pt}{\xywithoption{tips}{\def\tipsize@@{11}}}
+\DeclareOption{12pt}{\xywithoption{tips}{\def\tipsize@@{12}}}
+
+% Other options are just loaded.
+\DeclareOption*{\edef\next{\noexpand\xyoption{\CurrentOption}}\next}
+
+% Reinstall catcode of @...
+\catcode`\@=\xystycatcode
+
+% ...and process the options.
+\ProcessOptions\relax
+
+% Now, if no backend is loaded but we can generate PDF, do.
+\ifpdf\makeatletter
+ \ifx\xydriversloaded@@\xydriversloaded@none
+ \makeatother\xyoption{pdf}\fi\fi
+
+% That's all.
+\endinput
+
+% $Log: xy.sty,v $
+% Revision 3.10 2011/03/14 20:14:00 krisrose
+% Preparing for release 3.8.6.
+%
+% Revision 3.9 2010/06/10 18:45:49 krisrose
+% Reference to GPL by URL.
+%
+% Revision 3.8 2010/04/28 07:14:30 krisrose
+% New Xy-pic home page installed.
+%
+% Revision 3.7 2010/04/26 01:45:23 krisrose
+% First proper integration of xypdf into Xy-pic "make dist".
+%
+% Revision 3.6 2010/04/25 21:48:06 krisrose
+% First proper integration of xypdf into Xy-pic "make dist".
+%
+% Revision 3.5 2010/04/20 20:36:43 krisrose
+% Documentation updates.
+%
+% Revision 3.4 2010/04/16 06:06:52 krisrose
+% Preparing for a new release...
+%
+% Revision 3.3 1996/12/19 03:31:56 krisrose
+% Maintenance release
+%
+% Revision 3.1 1995/09/05 20:31:32 kris
+% Releasing!
+%
+% Revision 3.0 1995/07/07 20:14:21 kris
+% Major release w/new User's Guide!
+%
+% Revision 2.13 1995/07/04 15:11:17 kris
+% Ready to release v3?
+%
+% Revision 2.12 1994/10/25 11:34:25 kris
+% Interim release just before v3 [works with AMS-LaTeX 1.2]...
+%
+% Revision 2.9 1994/06/09 14:59:19 kris
+% Release 3beta.
+%
+% Revision 2.8 1994/04/08 04:30:00 kris
+% Second (bug fix) 3alpha release.
+%
+% Revision 2.7 1994/03/08 02:06:01 kris
+% Release 3alpha.
+%
+% New for version 2.7.
diff --git a/macros/generic/diagrams/xypic/texinputs/xy.tex b/macros/generic/diagrams/xypic/texinputs/xy.tex
new file mode 100644
index 0000000000..0ea737b2ab
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xy.tex
@@ -0,0 +1,2694 @@
+%% xy.tex from $Id: xy.doc,v 3.35 2013/10/06 01:14:17 krisrose Exp $
+%%
+%% Basic Xy-pictures: Xy-pic bootstrap and kernel macros.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined\else\message{not reloaded}\endinput\fi
+\let\xyloaded=\relax
+\message{Bootstrap\string'ing\string:}
+{\catcode96 12\catcode`\#6\catcode`\.12\catcode`\:12\catcode`\'12\catcode`\@11
+\ifx\xywarnifdefined\undefined\else \immediate\write16{}%
+ \immediate\write16{Xy-pic Warning: \string\xywarnifdefined\space redefined.}%
+ \immediate\write16{}\fi
+\gdef\xywarnifdefined#1{\ifx#1\undefined\else \immediate\write16{}%
+ \immediate\write16{Xy-pic Warning: `\string#1' redefined.}%
+ \immediate\write16{}\fi}
+\xywarnifdefined\xydef@ \gdef\xydef@#1{\xywarnifdefined#1\gdef#1}
+\xywarnifdefined\xylet@ \gdef\xylet@#1{\xywarnifdefined#1\global\let#1}
+\xywarnifdefined\xynew@
+ \gdef\xynew@#1#2{\xywarnifdefined#2\csname new#1\endcsname#2}}
+\message{catcodes\string,}
+\xywarnifdefined\xyuncatcodes
+\xywarnifdefined\xyreuncatcodes \def\xyreuncatcodes{\edef\xyuncatcodes{%
+ \catcode92 0 \catcode123 1 \catcode125 2 \catcode37 14
+ \catcode 9 \the\catcode 9 \catcode10 \the\catcode10 \catcode12 \the\catcode12
+ \catcode35 \the\catcode35 \catcode36 \the\catcode36 \catcode38 \the\catcode38
+ \catcode43 \the\catcode43 \catcode45 \the\catcode45 \catcode46 \the\catcode46
+ \catcode47 \the\catcode47
+ \catcode60 \the\catcode60 \catcode61 \the\catcode61 \catcode62 \the\catcode62
+ \catcode64 \the\catcode64 \catcode96 \the\catcode96
+ \newlinechar \the\newlinechar \endlinechar \the\endlinechar }}
+\xyreuncatcodes
+\xywarnifdefined\xycatcodes \def\xycatcodes{%
+ \catcode 9 10
+ \catcode 35 6 \catcode 36 3 \catcode 38 4
+ \catcode 43 12 \catcode 45 12 \catcode 46 12 \catcode 47 12
+ \catcode 60 12 \catcode 61 12 \catcode 62 12
+ \catcode 64 11 \catcode 96 12 }
+\xycatcodes
+\message{docmode,}
+{\catcode`\|0 \xywarnifdefined|DOCMODE
+\gdef|DOCMODE#1{\ifx(#1\relax \xycatcodes \expandafter\ignorespaces
+ \else \skipspecials@ \expandafter\docm@\fi}%
+\xywarnifdefined\skipspecials@
+\gdef\skipspecials@{%
+ \catcode`\\12 \catcode`\{12 \catcode`\}12 \catcode`\#12 \catcode`\%12
+ \catcode`\^^L12 \endlinechar`\^^J }%
+\catcode`\/=12 \lccode`\/`\\%
+\lccode`\D`\D \lccode`\O`\O \lccode`\C`\C \lccode`\M`\M \lccode`\E`\E
+\lowercase{%
+\xywarnifdefined\docm@ \gdef\docm@{\docm@i}%
+\xywarnifdefined\docm@i \gdef\docm@i#1^^J{\docm@ii#1/DOCMODE\docm@iii}%
+\xywarnifdefined\docm@ii
+ \gdef\docm@ii#1/DOCMODE{\def\next@{#1}\futurelet\next\docm@iii}%
+\xywarnifdefined\docm@iii \gdef\docm@iii#1\docm@iii{%
+ \ifx\next\docm@iii \let\next\next@ \docecho@ \let\next@\docm@
+ \else\ifx\next@\empty \let\next@\docfinish@
+ \else \edef\next@{\noexpand\docm@iv\next@/DOCMODE#1\noexpand\docm@iv}%
+ \fi\fi \next@}%
+\xywarnifdefined\docm@iv
+ \gdef\docm@iv#1/DOCMODE\docm@iv{\def\next{#1}\docecho@ \docm@}}%
+\xywarnifdefined\docecho@ \global\let\docecho@\relax
+\xywarnifdefined\docfinish@ \gdef\docfinish@{\xyuncatcodes|DOCMODE\next}}
+\xydef@\xydefcsname@#1{\DN@{#1}\DNii@##1{%
+ \ifx ##1\relax\else \xywarning@{\string`\string##1\string' redefined}\fi
+ \def##1}%
+ \expandafter\nextii@\csname\codeof\next@\endcsname}
+\xydef@\xyletcsnamecsname@#1#2{\def\1{#1}\def\2{#2}\DN@##1##2{%
+ \ifx ##1\relax\else \xywarning@{`\string##1\string' redefined}\fi
+ \let##1=##2}%
+ \expandafter\expandafter\expandafter\next@
+ \expandafter\csname\expandafter\codeof\expandafter\1\expandafter\endcsname
+ \csname\codeof\2\endcsname}
+\xywarnifdefined\codeof
+\xywarnifdefined\codeof@
+{\catcode`\:=12
+ \gdef\codeof#1{\expandafter\codeof@\meaning#1<-:}
+ \gdef\codeof@#1:->#2<-:{#2}}
+\xywarnifdefined\addAT@
+\xywarnifdefined\addHASH@
+\xywarnifdefined\addDOLL@
+\xywarnifdefined\addAND@
+\xywarnifdefined\addRQ@
+\xywarnifdefined\addPLUS@
+\xywarnifdefined\addDASH@
+\xywarnifdefined\addDOT@
+\xywarnifdefined\addLT@
+\xywarnifdefined\addEQ@
+\xywarnifdefined\addGT@
+\xywarnifdefined\addLQ@
+\xydef@\xymakeADD@#1#2 #3 {\ifnum\catcode#3=6 \def#1##1{##1#2#2}%
+ \else \def#1##1{##1#2}\fi}
+\xydef@\xyrecat@{\xymakeADD@\addAT@}
+\xydef@\xyrecat{\xyrecat@}
+\xydef@\xyresetcatcodes{\def\xyrecat{\xyrecat@}\xyreuncatcodes
+ \input xyrecat \relax \xyuncatcodes}
+\xyuncatcodes \xyresetcatcodes \xycatcodes
+\xydef@\testAND@{{\aftergroup\ifx
+ \addAND@\ifx\next\addFalse@\else\addTrue@\fi}}
+\xydef@\addFalse@{\aftergroup\iffalse}
+\xydef@\addTrue@{\aftergroup\iftrue}
+\input xyidioms
+\xydef@\stripRCS$#1${\stripRCS@#1: @@ @@@}
+\xydef@\stripRCS@#1: #2@ #3@@@{%
+ \ifx @#2\string?\else\ifx :#2\else\stripRCS@@#2\fi\fi}
+\xydef@\stripRCS@@#1 #2: @{#1}
+\xydef@\xyversion{3.8.9}
+\edef\next{\stripRCS$Date: 2013/10/06 01:14:17 $}
+\xylet@\xydate=\next
+\xydef@\Xygreet@{%
+ \W@{}%
+ \W@{ Xy-pic version \xyversion\space<\xydate>}%
+ \W@{ Copyright (c) 1991-2013 by Kristoffer H. Rose <krisrose@tug.org> and others}%
+ \W@{ Xy-pic is free software: see the User\string's Guide for details.}%
+ \W@{}}
+\Xygreet@
+\expandafter\everyjob\expandafter{\the\everyjob\Xygreet@}
+\message{Loading kernel:}
+\xydef@\Xy@{\leavevmode
+ \hbox{\kern-.1em X\kern-.3em\lower.4ex\hbox{Y\kern-.15em}}}
+\ifx\undefined\DeclareRobustCommand\let\Xy=\Xy@
+\else\DeclareRobustCommand{\Xy}{\Xy@}\fi
+\message{messages;}
+\xywarnifdefined\thelineno@
+\ifx\inputlineno\undefined \edef\thelineno@{\string?}
+\else \def\thelineno@{\the\inputlineno}\fi
+\xydef@\xytracelineno@{ \string[\jobname:\thelineno@\string]}
+\xydef@\xywarning@#1{{\newlinechar=10
+ \W@{}\W@{Xy-pic Warning: #1\xytracelineno@.}\W@{}}}
+\xydef@\xyerror@#1#2{\if\inxy@\xy@{ERROR #1}{}\fi
+ {\def\2{#2}\newlinechar=10
+ \ifx\2\empty \errhelp{See the Xy-pic manual for further information.}%
+ \else \errhelp{#2}\fi
+ \errmessage{Xy-pic error: #1}}}
+\xydef@\xybug@#1{{\newlinechar=10
+ \errhelp{This is a bug in Xy-pic and should not happen!^^J%
+If it did then please send a bug report with the offending Xy-pic code^^J%
+to the author of Xy-pic, krisrose@tug.org.}%
+ \errmessage{Xy-pic BUG: #1 -- notify krisrose@tug.org.}}}
+\message{fonts;}
+\xydef@\xyfont@#1{\ifx#1\undefined \DN@{\global\font#1}\expandafter\next@
+ \else \xywarning@{Using previously loaded \string#1\space font}\fi}
+\xyfont@\xydashfont=xydash10
+\xydef@\xydashl@{\fontdimen6\xydashfont}
+\xydef@\xydashh@{\fontdimen5\xydashfont}
+\xydef@\xydashw@{\fontdimen8\xydashfont}
+\xyfont@\xyatipfont=xyatip10
+\xyfont@\xybtipfont=xybtip10
+\xyfont@\xybsqlfont=xybsql10
+\xydef@\xybsqll@{\fontdimen6\xybsqlfont}
+\xydef@\xybsqlh@{\fontdimen5\xybsqlfont}
+\xydef@\xybsqlw@{\fontdimen8\xybsqlfont}
+\xyfont@\xycircfont=xycirc10
+\message{allocations:}
+\message{state,}
+\xynew@{dimen}\X@c
+\xynew@{dimen}\Y@c
+\xynew@{dimen}\U@c
+\xynew@{dimen}\D@c
+\xynew@{dimen}\L@c
+\xynew@{dimen}\R@c
+\xynew@{toks}\Edge@c
+\xynew@{dimen}\X@p
+\xynew@{dimen}\Y@p
+\xynew@{dimen}\U@p
+\xynew@{dimen}\D@p
+\xynew@{dimen}\L@p
+\xynew@{dimen}\R@p
+\xynew@{toks}\Edge@p
+\xynew@{dimen}\X@origin \X@origin=\z@
+\xynew@{dimen}\Y@origin \X@origin=\z@
+\xynew@{dimen}\X@xbase \X@xbase=1mm
+\xynew@{dimen}\Y@xbase \Y@xbase=\z@
+\xynew@{dimen}\X@ybase \X@ybase=\z@
+\xynew@{dimen}\Y@ybase \Y@ybase=1mm
+\xynew@{dimen}\X@min
+\xynew@{dimen}\Y@min
+\xynew@{dimen}\X@max
+\xynew@{dimen}\Y@max
+\xynew@{box}\lastobjectbox@
+\xynew@{box}\zerodotbox@
+\setbox\zerodotbox@=\hbox{\dimen@=.5\xydashw@
+ \kern-\dimen@ \vrule width\xydashw@ height\dimen@ depth\dimen@}
+\wd\zerodotbox@=\z@ \ht\zerodotbox@=\z@ \dp\zerodotbox@=\z@
+\xynew@{dimen}\almostz@ \almostz@=50sp
+\xydef@\zz@#1{\ifdim#1<\z@-\fi#1<\almostz@\relax}
+\xynew@{if}\iftmp@
+\message{direction,}
+\xynew@{dimen}\d@X
+\xynew@{dimen}\d@Y
+\xydef@\sd@X{}
+\xydef@\sd@Y{}
+\xynew@{count}\K@ \K@=1024
+\xynew@{count}\KK@ \KK@=32
+\xynew@{count}\Direction
+\xynew@{dimen}\K@dXdY
+\xynew@{dimen}\K@dYdX
+\xydef@\cosDirection{}
+\xydef@\sinDirection{}
+\xywarnifdefined\DirectionChar
+\xywarnifdefined\SemiDirectionChar
+\xynew@{read}\xyread@
+\xynew@{write}\xywrite@
+\xynew@{count}\csp@
+\xynew@{dimen}\quotPTK@
+\message{utility macros;}
+\xydef@\addtotoks@#1{\toks@=\expandafter{\the\toks@#1}}
+\xydef@\xyinputorelse@#1#2{%
+ \expandafter\let\expandafter\next@\csname#1loaded\endcsname
+ \ifx\next@\empty \else
+ \DN@{\xyinputorelse@@{#1}{\xyinputorelse@@{#1.doc}{#2}}}%
+ \fi \next@}
+\xydef@\xyinputorelse@@#1#2{\openin\xyread@=#1
+ \ifeof\xyread@ \DN@{#2}\else \DN@{\closein\xyread@\input#1 }\fi \next@}
+\global\csp@=\z@
+\xydef@\enter@#1{\global\advance\csp@\@ne
+ \expandafter\xdef\csname cs@\number\csp@\endcsname{#1}\ignorespaces}
+\xydef@\nter@#1{\global\advance\csp@\@ne
+ \expandafter\gdef\csname cs@\number\csp@\endcsname{#1}\ignorespaces}
+\xydef@\dontleave@{\csname cs@\number\csp@\endcsname}
+\xydef@\unenter@{\global\advance\csp@\m@ne}
+\xydef@\leave@{\expandafter\unenter@\csname cs@\number\csp@\endcsname}
+\quotPTK@=\p@ \divide\quotPTK@\K@
+\xylet@\quotsign@@=\empty
+\xywarnifdefined\removePT@
+{\catcode`p=12 \catcode`t=12 \gdef\removePT@#1pt{#1}}
+\xydef@\quotient@#1#2#3{\A@=#2\relax \B@=#3\relax
+ \ifdim\A@<\z@\def\quotsign@@{-}\else\def\quotsign@@{+}\fi
+ \ifdim\quotsign@@\A@<15pt \multiply\A@\K@
+ \else\ifdim\quotsign@@\A@<511pt \multiply\A@\KK@
+ \advance\B@\ifdim\B@<\z@-\fi 16sp \divide\B@\KK@
+ \else
+ \advance\B@\ifdim\B@<\z@-\fi 512sp \divide\B@\K@
+ \fi\fi
+ \ifdim\ifdim\B@<\z@-\fi\B@<\quotPTK@ \xywarning@{division overflow}%
+ \else \advance\A@.5\B@ \divide\A@\B@ \fi
+ \multiply\A@\quotPTK@ \edef#1{\expandafter\removePT@\the\A@}}
+\xydef@\quotient@@#1#2#3{\A@=#2\relax \B@=#3\relax \multiply\A@\KK@
+ \advance\B@\ifdim\B@<\z@-\fi 128sp \divide\B@\KK@ \divide\B@ 8
+ \ifdim\B@=\z@\else \advance\A@.5\B@ \divide\A@\B@ \fi
+ \B@=.125\quotPTK@ \multiply\A@\B@ \edef#1{\expandafter\removePT@\the\A@}}
+\xydef@\loop@#1\repeat@{\def\body@{#1}\iterate@}\xylet@\repeat@=\fi
+\xydef@\iterate@{\body@\expandafter\iterate@\else\fi}
+\xydef@\xyinitial@#1#2{\DN@{#1}%
+ \xyerror@{command used out of context: \codeof\next@}{}}
+\xylet@\xy@=\xyinitial@
+\xylet@\oxy@=\xy@
+\xydef@\change@oxy@#1{\let\oxy@=#1\relax
+}
+\xydef@\inxy@{T\ifx\xy@\xyinitial@ F\else T\fi}
+\xydef@\xyxy@@ix@{\begingroup
+ \xyuncatcodes\afterassignment\endgroup\global\toks9=}
+\xydef@\xy@@{\xy@{}}
+\xydef@\plainxy@{\let\xy@=\xyxy@ \change@oxy@\xy@ \let\xy@@ix@=\xyxy@@ix@}
+\message{pictures: \string\xy,}
+\xydef@\xy{\ifmmode\expandafter\xymath@\else\expandafter\xynomath@\fi}
+\xydef@\xymath@{\hbox\bgroup \dimen@=\the\fontdimen22\textfont\tw@ \xyinside@}
+\xydef@\xynomath@{\hbox\bgroup \dimen@=\z@ \xyinside@}
+\xydef@\xyinside@{%
+ \saveXyStyle@ \aftergroup\xycheck@end
+ \setboxz@h\bgroup
+ \plainxy@
+ \X@c=\z@ \Y@c=\z@ \czeroEdge@
+ \X@p=\z@ \Y@p=\z@ \U@p=\z@ \D@p=\z@ \L@p=\z@ \R@p=\z@ \Edge@p={\zeroEdge}%
+ \X@min=\hsize \X@max=-\hsize \Y@min=\hsize \Y@max=-\hsize
+ \mathsurround=\z@
+ \expandafter\POS\everyxy@@}
+\xydef@\czeroEdge@{\U@c=\z@ \D@c=\U@c \L@c=\U@c \R@c=\U@c \Edge@c={\zeroEdge}}
+\xydef@\xyxy@#1#2{#2}
+\xywarnifdefined\everyxy
+\expandafter\def\addEQ@\everyxy#1{\def\everyxy@@{#1}\ignorespaces}
+\xylet@\everyxy@@=\empty
+\xydef@\endxy{\if\inxy@\else\xyerror@{Unexpected \string\endxy}{}\fi
+ \relax
+ \dimen@=\Y@max \advance\dimen@-\Y@min
+ \ifdim\dimen@<\z@ \dimen@=\z@ \Y@min=\z@ \Y@max=\z@ \fi
+ \dimen@=\X@max \advance\dimen@-\X@min
+ \ifdim\dimen@<\z@ \dimen@=\z@ \X@min=\z@ \X@max=\z@ \fi
+ \edef\tmp@{\egroup
+ \setboxz@h{\kern-\the\X@min\boxz@}%
+ \ht\z@=\the\Y@max \dp\z@=-\the\Y@min \wdz@=\the\dimen@
+ \noexpand\maybeunraise@ \raise\dimen@\boxz@
+ \noexpand\recoverXyStyle@ \egroup \noexpand\xy@end
+ \U@c=\the\Y@max \D@c=-\the\Y@min \L@c=-\the\X@min \R@c=\the\X@max}\tmp@}
+\xydef@\maybeunraise@{\if\inxy@\else \dimen@ii=\dp\z@
+ \ifdim\dimen@ii<\z@ \advance\dimen@\dimen@ii \fi\fi}
+\xydef@\xycheck@end{\xyFN@\xycheck@end@}
+\xydef@\xycheck@end@{\ifx\next\xy@end\DN@\xy@end{}\else\DN@{\xy@end}\fi\next@}
+\xydef@\xy@end{%
+ \xyerror@{An \string\xy\space environment is not closed correctly.}%
+ {I expected \string\endxy. You probably have an umatched {} grouping.}}
+\message{positions,}
+\xydef@\POS{\afterPOS{}}
+\xydef@\afterPOS#1{%
+ \DN@##1{\def\afterPOS@{\def\afterPOS@{##1}#1}}%
+ \expandafter\next@\expandafter{\afterPOS@}%
+ \afterCOORD{\xyFN@\POS@}}
+\xylet@\afterPOS@=\empty
+\xydef@\afterCOORD#1{%
+ \DN@##1{\def\afterCOORD@{\def\afterCOORD@{##1}#1}}%
+ \expandafter\next@\expandafter{\afterCOORD@}%
+ \afterVECTORorEMPTY{\xy@@\czeroEdge@ \afterCOORD@}{\xyFN@\COORD@}}
+\xylet@\afterCOORD@=\empty
+\xydef@\afterVECTORorEMPTY#1#2{%
+ \DN@##1{\def\afterVECTOR@{\def\afterVECTOR@{##1}%
+ \ifVECTORempty@\DN@{#2}\else\DN@{#1}\fi \next@}}%
+ \expandafter\next@\expandafter{\afterVECTOR@}%
+ \xyFN@\VECTOR@}
+\xynew@{if}\ifVECTORempty@
+\xylet@\afterVECTOR@=\empty
+\xydef@\xyVECTOR@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\VECTOR@}%
+ \else \ifcat A\noexpand\next \let\next@=\VECTOR@letter
+ \else \let\next@=\VECTOR@other \fi\fi \next@}
+\xylet@\VECTOR@=\xyVECTOR@
+\def\notrelaxorelse@#1#2{\ifx#1\relax \expandafter#2\else\expandafter#1\fi}
+\xydef@\VECTOR@letter{%
+ \ifx a\next \expandafter\VECTOR@a \else \expandafter\CORNER@ \fi}
+\xydef@\VECTOR@a a(#1){\xy@{a(#1)}{\vfromcartesianangle@{#1}}%
+ \VECTORempty@false \afterVECTOR@}
+\xydef@\CORNER@{%
+ \xy@{}{\A@=-.5\L@c \advance\A@.5\R@c \B@=-.5\D@c \advance\B@.5\U@c
+ \let\nextii@=\zeroit@}%
+ \VECTORempty@true\CORNER@i}
+\xydef@\zeroit@#1{#1=\z@}
+\xydef@\CORNER@i{%
+ \ifx D\next \DN@ D{\xy@{D}{\Y@c=-\D@c \nextii@\X@c \B@=\Y@c}\CORNER@ii}%
+ \else\ifx U\next \DN@ U{\xy@{U}{\Y@c= \U@c \nextii@\X@c \B@=\Y@c}\CORNER@ii}%
+ \else\ifx L\next \DN@ L{\xy@{L}{\X@c=-\L@c \nextii@\Y@c \A@=\X@c}\CORNER@ii}%
+ \else\ifx R\next \DN@ R{\xy@{R}{\X@c= \R@c \nextii@\Y@c \A@=\X@c}\CORNER@ii}%
+ \else\ifx C\next \DN@ C{\xy@{C}{\X@c= \A@ \Y@c= \B@}\CORNER@ii}%
+ \else\ifx E\next \DN@ E{\xy@{E}{%
+ \A@=\X@c \B@=\Y@c \the\Edge@c\z@ \advance\X@c-\A@ \advance\Y@c-\B@}%
+ \CORNER@ii}%
+ \else\ifx P\next \DN@ P{\xy@{P}{%
+ \A@=\X@c \B@=\Y@c \the\Edge@c\thr@@ \advance\X@c-\A@ \advance\Y@c-\B@}%
+ \CORNER@ii}%
+ \else\ifx (\next
+ \DN@(##1){\xy@{(##1)}{\X@c=##1\X@c \Y@c=##1\Y@c}\afterVECTOR@}%
+ \else\ifx A\next \DN@ A{\xy@{A}{\Y@c=\fontdimen22\textfont\tw@ \nextii@\X@c \B@=\Y@c}\CORNER@ii}%
+ \else\ifx V\next \DN@ V{\xy@{V}{\nextii@\X@c \Y@c=\U@p}\CORNER@ii}%
+ \else\ifx H\next \DN@ H{\xy@{H}{\nextii@\Y@c \X@c=\R@p}\CORNER@ii}%
+ \else \let\next@=\afterVECTOR@
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@}
+\xydef@\CORNER@ii{\xy@@{\let\nextii@=\eat@}%
+ \VECTORempty@false \xyFN@\CORNER@i}
+\xydef@\VECTOR@other{%
+ \addLT@\ifx \next
+ \addGT@{\addLT@\DN@##1}{\xy@{<##1>}{\vfromabsolute@{##1}}%
+ \VECTORempty@false\afterVECTOR@}%
+ \else\ifx (\next
+ \DN@({\xyFN@\VECTOR@other@open}%
+ \else\ifx /\next
+ \DN@/##1/{\xy@@ix@{{##1}}%
+ \xy@{/##1/}{\expandafter\vfromslide@\the\toks9 }%
+ \VECTORempty@false\afterVECTOR@}%
+ \else\ifx 0\next
+ \DN@ 0{\xy@{0}{\X@c=\z@ \Y@c=\z@}\VECTORempty@false\afterVECTOR@}%
+ \else
+ \DN@{\VECTORempty@true\afterVECTOR@}%
+ \fi\fi\fi\fi \next@}
+\xydef@\VECTOR@other@open{%
+ \ifx *\next \DN@{\VECTORempty@true \xyFN@\afterVECTOR@(}%
+ \else
+ \DN@##1){\xy@{(##1)}{\vfromcartesian@{##1}}\VECTORempty@false\afterVECTOR@}%
+ \fi \next@}
+\xydef@\xyCOORD@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\COORD@}%
+ \else \ifcat A\noexpand\next \let\next@=\xyCOORD@letter
+ \else \let\next@=\xyCOORD@other \fi\fi \next@}
+\xylet@\COORD@=\xyCOORD@
+\xydef@\xyCOORD@letter{%
+ \ifx c\next
+ \DN@ c{\xy@{c}{}\afterCOORD@}%
+ \else\ifx p\next
+ \DN@ p{\xy@{p}\cfromp@ \afterCOORD@}%
+ \else\ifx x\next
+ \DN@ x{\xy@{x}{\R@c=\X@xbase \U@c=\Y@xbase \intersect@}\afterCOORD@}%
+ \else\ifx y\next
+ \DN@ y{\xy@{y}{\R@c=\X@ybase \U@c=\Y@ybase \intersect@}\afterCOORD@}%
+ \else\ifx s\next
+ \DN@ s##1{\xy@{s{##1}}{\cfroms@{##1}}\afterCOORD@}%
+ \else \let\next@=\afterCOORD@ \fi\fi\fi\fi\fi \next@}
+\xydef@\xyCOORD@other{%
+ \ifx "\next
+ \DN@"##1"{\xy@{"##1"}{\cfromid@{##1}}\afterCOORD@}%
+ \else\ifx \bgroup\next
+ \DN@##1{\xy@{{##1}}{\enter@{\pfromthep@\basefromthebase@}}%
+ \silencexy@ \POS##1\relax \unsilencexy@ \xy@@\leave@ \afterCOORD@}%
+ \else\ifx (\next
+ \DN@({\xyFN@\xyCOORD@other@open}%
+ \else \let\next@=\afterCOORD@ \fi\fi\fi \next@}
+\xynew@{if}\ifsilentxy@
+\xydef@\silencexy@{%
+ \ifsilentxy@ \nter@{}%
+ \else \nter@{\silentxy@false \let\xy@=\unsilent@@xy@}
+ \silentxy@true \let\unsilent@@xy@=\xy@ \def\xy@##1##2{\unsilent@@xy@{}{##2}}%
+ \fi}
+\xydef@\unsilencexy@{\leave@}
+\xydef@\xyCOORD@other@open{%
+ \ifx *\next
+ \DN@*##1*){\xy@{(*}{\enter@{\pfromthep@\basefromthebase@}}%
+ \POS##1\relax \xy@{*)}\leave@ \afterCOORD@}%
+ \else \DN@{\xyFN@\afterCOORD@(}%
+ \fi \next@}
+\xydef@\xyPOS@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\POS@}%
+ \else\addPLUS@\ifx \next
+ \addPLUS@\DN@{\xy@+{\enter@\cplusthec@}%
+ \afterCOORD{\xy@@\leave@ \xyFN@\POS@}}%
+ \else\addDASH@\ifx \next
+ \addDASH@\DN@{\xy@-{\enter@\cplusthec@}%
+ \afterCOORD{\xy@@{\X@c=-\X@c \Y@c=-\Y@c\leave@}\xyFN@\POS@}}%
+ \else\ifx !\next
+ \DN@ !{\xy@!{\enter@\cskewthec@}\afterCOORD{\xy@@\leave@ \xyFN@\POS@}}%
+ \else\addDOT@\ifx \next
+ \addDOT@\DN@{\xy@.{\enter@\cmergethec@}\afterCOORD{\xy@@\leave@ \xyFN@\POS@}}%
+ \else\ifx ,\next
+ \DN@ ,{\xy@,{\comma@@}\afterCOORD{\xyFN@\POS@}}%
+ \else\ifx ;\next
+ \DN@ ;{\xy@;{\swap@}\afterCOORD{\xyFN@\POS@}}%
+ \else\ifx :\next
+ \DN@ :{\xyFN@\POS@colon}%
+ \else\addEQ@\ifx \next
+ \addEQ@\DN@{\xyFN@\saveid@}%
+ \else\ifx *\next
+ \DN@ *{\xyFN@\POS@star}%
+ \else\ifx ?\next
+ \DN@ ?{\xy@?{}\afterPLACE{\xyFN@\POS@}}%
+ \else \addAT@\ifx \next
+ \addAT@\DN@{\xyFN@\STACK@}%
+ \else
+ \let\next@=\afterPOS@
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@}
+\xylet@\comma@@=\relax
+\xylet@\POS@=\xyPOS@
+\xydef@\POS@colon{\DNii@{\afterCOORD{\xyFN@\POS@}}%
+ \ifx :\next \xy@{::}{\setbase@@\X@c\Y@c}\DN@:{\nextii@}%
+ \else \xy@:{\setbase@\X@p\Y@p\X@c\Y@c}\let\next@=\nextii@ \fi
+ \next@}
+\xydef@\POS@star{%
+ \ifx *\next
+ \DN@*##1##{\nextii@{##1}}%
+ \DNii@##1##2{\xy@@ix@{{##1}{##2}}%
+ \xy@{**##1{##2}}{\expandafter\connect@\the\toks9 }\xyFN@\POS@}%
+ \else
+ \DN@##1##{\nextii@{##1}}%
+ \DNii@##1##2{\xy@@ix@{{##1}{##2}}%
+ \xy@{*##1{##2}}{\expandafter\drop@\the\toks9 }\xyFN@\POS@}%
+ \fi
+ \next@}
+\xydef@\cfromp@{\X@c=\X@p \Y@c=\Y@p \U@c=\U@p \D@c=\D@p \L@c=\L@p \R@c=\R@p
+ \Edge@c=\expandafter{\the\Edge@p}}
+\xydef@\pfromc@{\X@p=\X@c \Y@p=\Y@c \U@p=\U@c \D@p=\D@c \L@p=\L@c \R@p=\R@c
+ \Edge@p=\expandafter{\the\Edge@c}}
+\xydef@\swapdimen@#1#2{\dimen@=#1\relax #1=#2\relax #2=\dimen@}
+\xynew@{toks}\swaptoks@@
+\xydef@\swap@{\swapdimen@\X@c\X@p \swapdimen@\Y@c\Y@p
+ \swapdimen@\U@c\U@p\swapdimen@\D@c\D@p \swapdimen@\L@c\L@p\swapdimen@\R@c\R@p
+ \swaptoks@@=\Edge@c \Edge@c=\Edge@p \Edge@p=\swaptoks@@}
+\xydef@\vfromabsolute@#1{\vfromabsolute@@#1,@}
+\xydef@\vfromabsolute@@#1,#2@{\X@c=#1\relax
+ \DN@{#2}\ifx\next@\empty \Y@c=\X@c
+ \else \DN@##1,{\Y@c=##1}\next@#2\relax \fi
+}
+\xydef@\cfromthec@{\X@c=\the\X@c \Y@c=\the\Y@c
+ \U@c=\the\U@c \D@c=\the\D@c \L@c=\the\L@c \R@c=\the\R@c
+ \Edge@c={\expandafter\noexpand\the\Edge@c}}
+\xydef@\cfromthep@{\X@c=\the\X@p \Y@c=\the\Y@p
+ \U@c=\the\U@p \D@c=\the\D@p \L@c=\the\L@p \R@c=\the\R@p
+ \Edge@c={\expandafter\noexpand\the\Edge@p}}
+\xydef@\pfromthep@{\X@p=\the\X@p \Y@p=\the\Y@p
+ \U@p=\the\U@p \D@p=\the\D@p \L@p=\the\L@p \R@p=\the\R@p
+ \Edge@p={\expandafter\noexpand\the\Edge@p}}
+\xydef@\pfromthec@{\X@p=\the\X@c \Y@p=\the\Y@c
+ \U@p=\the\U@c \D@p=\the\D@c \L@p=\the\L@c \R@p=\the\R@c
+ \Edge@p={\expandafter\noexpand\the\Edge@c}}
+\xydef@\cplusthec@{\advance\X@c\the\X@c \advance\Y@c\the\Y@c}
+\xydef@\cskewthec@{%
+ \noexpand\cskew@{\the\Y@c}{\the\X@c}{\the\D@c}{\the\U@c}{\the\L@c}{\the\R@c}}
+\xydef@\cskew@#1#2#3#4#5#6{%
+ \D@c=#3\advance\D@c \Y@c \ifdim\D@c<\z@ \D@c=\z@ \fi
+ \U@c=#4\advance\U@c-\Y@c \ifdim\U@c<\z@ \U@c=\z@ \fi
+ \advance\Y@c#1%
+ \L@c=#5\advance\L@c \X@c \ifdim\L@c<\z@ \L@c=\z@ \fi
+ \R@c=#6\advance\R@c-\X@c \ifdim\R@c<\z@ \R@c=\z@ \fi
+ \advance\X@c#2%
+ \Edge@c={\rectangleEdge}}
+\xydef@\cmergethec@{%
+ \noexpand\cmerge@{\the\Y@c}{\the\X@c}{\the\D@c}{\the\U@c}{\the\L@c}{\the\R@c}}
+\xydef@\cmerge@#1#2#3#4#5#6{\the\Edge@c4%
+ \A@=#2\advance\A@-\X@c \B@=#1\advance\B@-\Y@c
+ \dimen@=#5\advance\L@c \A@ \ifdim\L@c<\dimen@ \L@c=\dimen@ \fi
+ \dimen@=#6\advance\R@c-\A@ \ifdim\R@c<\dimen@ \R@c=\dimen@ \fi
+ \dimen@=#3\advance\D@c \B@ \ifdim\D@c<\dimen@ \D@c=\dimen@ \fi
+ \dimen@=#4\advance\U@c-\B@ \ifdim\U@c<\dimen@ \U@c=\dimen@ \fi
+ \advance\X@c\A@ \advance\Y@c\B@}
+\xydef@\halfroottwo{.70710678}
+\xydef@\partroottwo{.29289322}
+\xydef@\halfrootthree{.8660254}
+\xydef@\vfromcartesian@#1{\vfromcartesian@@#1@}
+\xydef@\vfromcartesian@@#1,#2@{%
+ \X@c=\X@origin \advance\X@c#1\X@xbase \advance\X@c#2\X@ybase
+ \Y@c=\Y@origin \advance\Y@c#1\Y@xbase \advance\Y@c#2\Y@ybase}
+\xydef@\setbase@#1#2#3#4{%
+ \X@origin=#1\relax \Y@origin=#2\relax
+ \X@xbase=#3\relax \advance\X@xbase-\X@origin
+ \Y@xbase=#4\relax \advance\Y@xbase-\Y@origin
+ \X@ybase=-\Y@xbase \Y@ybase=\X@xbase}
+\xydef@\setbase@@#1#2{%
+ \X@ybase=#1\relax \advance\X@ybase-\X@origin
+ \Y@ybase=#2\relax \advance\Y@ybase-\Y@origin}
+\xydef@\basefromthebase@{\X@origin=\the\X@origin \Y@origin=\the\Y@origin
+ \X@xbase=\the\X@xbase \Y@xbase=\the\Y@xbase
+ \X@ybase=\the\X@ybase \Y@ybase=\the\Y@ybase}
+\xydef@\vfromcartesianangle@#1{\enter@\basefromthebase@ \R@=#1\p@
+ \B@=360\p@
+ \loop@ \ifdim\R@<\z@ \advance\R@\B@ \repeat@
+ \loop@ \ifdim\R@>\B@ \advance\R@-\B@ \repeat@
+ \ifdim\R@<.5\B@\else \R@=-\R@ \advance\R@\B@
+ \X@ybase=-\X@ybase \Y@ybase=-\Y@ybase \fi
+ \B@=180\p@
+ \ifdim\R@<.5\B@\else \R@=-\R@ \advance\R@\B@
+ \X@xbase=-\X@xbase \Y@xbase=-\Y@xbase \fi
+ \B@=90\p@
+ \ifdim\R@<.5\B@ \let\nextiii@=\literal@
+ \else \R@=-\R@ \advance\R@\B@ \def\nextiii@##1,##2@{##2,##1@}\fi
+ \dimen@=\z@ \DN@{1,0@}%
+ \dimen@ii=45\p@ \DNii@{.70710678,.70710678@}%
+ \chooseangleinterval@
+ {\chooseangleinterval@
+ {\chooseangleinterval@
+ {\chooseangleinterval@
+ {\chooseangleinterval@
+ {}%
+ {4.090909}{.99677570,.08023846@}%
+ {}}%
+ {6}{.99452190,.10452846@}%
+ {\chooseangleinterval@
+ {}%
+ {8.181818}{.98982144,.14231484@}%
+ {}}}%
+ {10}{.98480775,.17364818@}%
+ {\chooseangleinterval@
+ {}%
+ {12.857143}{.97492791,.22252093@}%
+ {}}}%
+ {15}{.96592583,.25881905@}%
+ {\chooseangleinterval@
+ {\chooseangleinterval@
+ {}%
+ {16.363636}{.95949297,.28173256@}%
+ {}}%
+ {18}{.95105652,.30901699@}%
+ {\chooseangleinterval@
+ {}%
+ {20}{.93969262,.34202014@}%
+ {}}}}%
+ {22.5}{.92387953,.38268343@}%
+ {\chooseangleinterval@
+ {\chooseangleinterval@
+ {\chooseangleinterval@
+ {}%
+ {24.545455}{.90963200,.41541501@}%
+ {}}%
+ {25.714286}{.90096887,.43388374@}%
+ {}}%
+ {30}{.86602540,.5@}%
+ {\chooseangleinterval@
+ {\chooseangleinterval@
+ {}%
+ {32.727273}{.84125353,.54064082@}%
+ {}}%
+ {36}{.80901699,.58778525@}%
+ {\chooseangleinterval@
+ {\chooseangleinterval@
+ {}%
+ {38.571429}{.78183148,.62348980@}%
+ {}}%
+ {40.909091}{.75574957,.65486073@}%
+ {\chooseangleinterval@
+ {}%
+ {40}{.76604444,.64278761@}%
+ {}}}}}%
+ \A@=\R@ \advance\A@-\dimen@
+ \ifdim\ifdim\A@<\z@-\fi\A@<.01\p@ \edef\next@{\expandafter\nextiii@\next@}%
+ \else \B@=\dimen@ii \advance\B@-\R@
+ \ifdim\A@<\B@ \dimen@=\toradians@\A@
+ \edef\next@{\next@ \expandafter\removePT@\the\dimen@ @}%
+ \else \dimen@=-\toradians@\B@
+ \edef\next@{\nextii@ \expandafter\removePT@\the\dimen@ @}%
+ \fi
+ \expandafter\interpolatepoint@\next@
+ \edef\next@{\expandafter\nextiii@\next@}%
+ \fi
+ \expandafter\vfromcartesian@@\next@
+ \leave@}
+\xydef@\chooseangleinterval@#1#2#3#4{%
+ \B@=#2\p@ \def\next{#3}%
+ \ifdim\R@<\B@ \dimen@ii=\B@ \let\nextii@=\next #1%
+ \else \dimen@=\B@ \let\next@=\next \ifdim\B@<\R@ #4\fi\fi}
+\xydef@\interpolateinterval@#1,#2@#3,#4@{%
+ \A@=#1\p@ \dimen@=#3\p@ \advance\dimen@-\A@ \advance\A@\next\dimen@
+ \B@=#2\p@ \dimen@=#4\p@ \advance\dimen@-\B@ \advance\B@\next\dimen@
+ \edef\next@{\expandafter\removePT@\the\A@,\expandafter\removePT@\the\B@ @}}
+\xydef@\toradians@{0.01745329}
+\xydef@\interpolatepoint@#1,#2@#3@{%
+ \A@=#1\p@ \dimen@ii=#3\A@ \dimen@ii=-.5\dimen@ii \advance\A@#3\dimen@ii
+ \dimen@=-#2\p@ \advance\A@#3\dimen@
+ \B@=#2\p@ \dimen@ii=#3\B@ \dimen@ii=-.5\dimen@ii \advance\B@#3\dimen@ii
+ \dimen@=#1\p@ \advance\B@#3\dimen@
+ \edef\next@{\expandafter\removePT@\the\A@,\expandafter\removePT@\the\B@ @}}
+\xydef@\drop@#1#2{%
+ \global\setbox\lastobjectbox@=\object#1{#2}%
+ \ifHidden@ \dimen@=\X@c \advance\dimen@-\L@c \else
+ \dimen@=\Y@c \advance\dimen@ \U@c \ifdim\Y@max<\dimen@ \Y@max=\dimen@ \fi
+ \dimen@=\Y@c \advance\dimen@-\D@c \ifdim\dimen@<\Y@min \Y@min=\dimen@ \fi
+ \dimen@=\X@c \advance\dimen@ \R@c \ifdim\X@max<\dimen@ \X@max=\dimen@ \fi
+ \dimen@=\X@c \advance\dimen@-\L@c \ifdim\dimen@<\X@min \X@min=\dimen@ \fi
+ \fi
+ \ifInvisible@\else
+ \setboxz@h{\kern\dimen@ \raise\Y@c\box\lastobjectbox@}%
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ {\Drop@@}\fi}
+\xydef@\connect@#1#2{\setupDirection@ \enter@{\cfromthec@}%
+ \global\setbox\lastobjectbox@=\object#1{#2}\leave@
+ \Connect@@}
+\xydef@\preconnect@#1#2{\setupDirection@ \enter@{\cfromthec@}%
+ \global\setbox\lastobjectbox@=\object#1{#2}\leave@ \connectStore@
+ \ifInvisible@ \Connect@@ \else \Invisible@true\Connect@@\Invisible@false \fi}
+\xynew@{box}\connectobjectbox@@
+\xylet@\connectDrop@@=\empty
+\xylet@\connectpreXY@style@=\empty
+\xylet@\connectpostXY@style@=\empty
+\xylet@\connectRest@@=\empty
+\xydef@\connectStore@{%
+ \global\setbox\connectobjectbox@@=\copy\lastobjectbox@
+ \let\connectDrop@@=\Drop@@
+ \let\connectpreXY@style@ =\preXY@style@
+ \let\connectpostXY@style@=\postXY@style@
+ \xdef\connectRest@@{%
+ \def\noexpand\Upness@{\Upness@}%
+ \def\noexpand\Leftness@{\Leftness@}%
+ \ifInvisible@ \noexpand\Invisible@true \else \noexpand\Invisible@false \fi
+ \ifHidden@ \noexpand\Hidden@true \else \noexpand\Hidden@false \fi}}
+\xydef@\connectRestore@{%
+ \ifvbox\connectobjectbox@@
+ \setbox\lastobjectbox@=\copy\voidb@x
+ \else
+ \global\setbox\lastobjectbox@=\copy\connectobjectbox@@
+ \fi
+ \let\Drop@@=\connectDrop@@
+ \global\let\preXY@style@ =\connectpreXY@style@
+ \global\let\postXY@style@=\connectpostXY@style@
+ \connectRest@@}
+\xydef@\afterPLACE#1{%
+ \DN@##1{\def\afterPLACE@{\xy@@\leave@ \def\afterPLACE@{##1}#1}}%
+ \expandafter\next@\expandafter{\afterPLACE@}%
+ \def\PLACEf@{{.5}}%
+ \xy@@{\enter@{\pfromthep@}%
+ \Creset@@ \def\PLACEf@{{.5}}%
+ \let\PLACEedgep@@=\PLACEedgep@ \let\PLACEedgec@@=\PLACEedgec@}%
+ \xyFN@\PLACE@}
+\xydef@\PLACEf@{}
+\xydef@\PLACEedgep@@{}
+\xydef@\PLACEedgec@@{}
+\xydef@\PLACEedgep@{\Cshavep@@ \def\PLACEedgep@@{\Cslidep@@\jot}}
+\xydef@\PLACEedgec@{\Cshavec@@ \def\PLACEedgec@@{\Cslidec@@{-\jot}}}
+\xylet@\afterPLACE@=\empty
+\xydef@\PLACE@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\PLACE@}%
+ \else\addLT@\ifx \next
+ \addLT@\DN@{\addLT@\xy@{\def\PLACEf@{{0}}\PLACEedgep@@}\xyFN@\PLACE@}%
+ \else\addGT@\ifx \next
+ \addGT@\DN@{\addGT@\xy@{\def\PLACEf@{{1}}\PLACEedgec@@}\xyFN@\PLACE@}%
+ \else\ifx (\next
+ \DN@(##1){\def\PLACEf@{{##1}}\xy@{(##1)}{\def\PLACEf@{{##1}}}\xyFN@\PLACE@}%
+ \else\ifx !\next
+ \DN@!{\xyFN@\PLACE@intercept}%
+ \else
+ \DN@{\xy@@{\expandafter\Calong@@\PLACEf@ \czeroEdge@}\PLACE@@}%
+ \fi\fi\fi\fi\fi \next@}
+\xydef@\PLACE@intercept{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\PLACE@intercept}%
+ \else\ifx \bgroup\next
+ \DN@##1{\xy@{!{##1}}{}\PLACE@intercept@{##1}}%
+ \else\ifx (\next
+ \DN@(*##1*){\xy@{!(*##1*)}{}\PLACE@intercept@{##1}}%
+ \else \DN@{\xyerror@{{<pos>} expected after ! in <place>}{}}%
+ \fi\fi\fi \next@}
+\xydef@\PLACE@intercept@#1{%
+ \xy@@{\enter@{\pfromthep@\basefromthebase@}\begingroup}%
+ \xy@@ix@{#1}\xy@@{\plainxy@ \expandafter\POS\the\toks9\relax
+ \edef\next@{\endgroup
+ \X@c =\the\X@c \Y@c=\the\Y@c \X@p=\the\X@p \Y@p=\the\Y@p}%
+ \next@ \Cintercept@@ \leave@}%
+ \PLACE@@}
+\xydef@\PLACE@@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\PLACE@@}%
+ \else\ifx /\next \DN@/##1/{\xy@{/##1/}{\Cslidec@@{##1}}\afterPLACE@}%
+ \else \let\next@=\afterPLACE@
+ \fi\fi \next@}
+\xydef@\intersect@{%
+ \d@X=\X@c \advance\d@X-\X@p \d@Y=\Y@c \advance\d@Y-\Y@p
+ \A@=\X@c \advance\A@-\X@origin \B@=\Y@c \advance\B@-\Y@origin
+ \edef\next@{\expandafter\removePT@\the\R@c}%
+ \edef\nextii@{\expandafter\removePT@\the\U@c}%
+ \D@c=\next@\d@Y \advance\D@c-\nextii@\d@X \divide\D@c\KK@
+ \L@c=\next@\B@ \advance\L@c-\nextii@\A@ \divide\L@c\KK@
+ \ifdim\D@c=\z@\zeroDivide@\else \quotient@\next@\L@c\D@c \fi
+ \advance\X@c-\next@\d@X \advance\Y@c-\next@\d@Y
+ \czeroEdge@}
+\xydef@\zeroDivide@@{\zeroDivide@message{\intersect@}{treated as 0}\DN@{0}}
+\xydef@\zeroDivide@message#1#2{\xywarning@{division by 0 in \string#1, #2}}
+\xylet@\zeroDivide@=\zeroDivide@@
+\xydef@\zeroDivideLimit@@{\ifdim\L@c=\z@ \DN@{0}%
+ \else\ifdim\L@c<\z@\DN@{-\zeroDivide@Limit}%
+ \else\DN@{\zeroDivide@Limit}\fi\fi
+ \zeroDivide@message{\intersect@}{replaced by \zeroDivide@Limit}}
+\xydef@\zeroDivideLimit@#1{\edef\zeroDivide@Limit{#1}%
+ \let\zeroDivide@=\zeroDivideLimit@@}
+\xylet@\zeroDivideLimit=\zeroDivideLimit@
+\xydef@\vfromslide@#1{\enter@\DirectionfromtheDirection@ \begingroup
+ \plainxy@\afterDIRECTIONorEMPTY\vfromslide@i\vfromslide@i#1@}
+\xydef@\vfromslide@i#1@{\DN@{#1}%
+ \edef\next{\endgroup
+ \ifx\next@\empty \dimen@=.5pc \else \dimen@=#1\relax \fi
+ \X@c=\cosDirection\dimen@ \Y@c=\sinDirection\dimen@}\next
+ \leave@}
+\xydef@\s@bot{-1}
+\xydef@\s@top{-1}
+\xydef@\cfroms@#1{\tests@{#1}\runs@\outofranges@}
+\xydef@\tests@#1#2#3{\DN@{#3}%
+ \count@=\s@top \advance\count@-#1\relax
+ \ifnum\count@>\s@bot\relax \ifnum\count@>\s@top\else\DN@{#2}\fi\fi
+ \next@}
+\xydef@\runs@{\csname S@\the\count@\endcsname}
+\xydef@\outofranges@{\count@=\s@top \advance\count@-\s@bot
+ \xyerror@{stack index out of range (should be 0..\the\count@)}{}}
+\xydef@\STACK@{%
+ \addPLUS@\ifx\next
+ \addPLUS@\DN@{\xy@{@+}{}\afterCOORD{\xy@@\spushc@ \xyFN@\POS@}}%
+ \else\addDASH@\ifx\next
+ \addDASH@\DN@{\xy@{@-}{}\afterCOORD{\xy@@\spop@ \xyFN@\POS@}}%
+ \else \ifx i\next \DN@ i{\xy@{@i}\sinit@ \xyFN@\POS@}%
+ \else \ifx (\next \DN@ ({\xy@{@(}\senter@ \xyFN@\POS@}%
+ \else \ifx )\next \DN@ ){\xy@{@)}\sleave@ \xyFN@\POS@}%
+ \else\addEQ@\ifx\next \addEQ@\DN@{\STACK@load}%
+ \else\addAT@\ifx\next \addAT@\DN@{\xy@{@@}{}\smap@}%
+ \else \DN@##1{\xyerror@{illegal stack command ##1}{}\afterCOORD{\xyFN@\POS@}}%
+ \fi\fi\fi\fi\fi\fi\fi \next@}
+\xydef@\STACK@load{\xy@{@=}{%
+ \if\sempty@\else \xywarning@{loading on top of non-empty stack}\sinit@ \fi
+ \let\comma@@=\spushc@}%
+ \afterCOORD{\xy@@{\spushc@ \let\comma@@=\relax}\xyFN@\POS@}}
+\xydef@\spushc@{%
+ \count@=\s@top \advance\count@\@ne \edef\s@top{\the\count@}%
+ \expandafter\edef\csname S@\s@top\endcsname{\cfromthec@}}
+\xydef@\spushid@#1{\DNii@{#1}\edef\nextii@{\codeof\nextii@}%
+ \expandafter\let\expandafter\next@\csname Q@\nextii@\endcsname
+ \ifx\next@\relax \xyerror@{<pos> \string"\nextii@\string" not defined}{}%
+ \else
+ \count@=\s@top \advance\count@\@ne \edef\s@top{\the\count@}%
+ \DNii@##1{\expandafter\def\csname S@\s@top\endcsname{##1}}%
+ \expandafter\nextii@\expandafter{\next@}%
+ \fi}
+\xydef@\idfroms@#1#2{%
+ \tests@{#2}{\DN@{\idfromxy@{#1}}%
+ \expandafter\expandafter\expandafter\next@
+ \expandafter\expandafter\expandafter{\csname S@\the\count@\endcsname}%
+ }\outofranges@}
+\xydef@\spop@{\count@=\s@top
+ \ifnum\count@>\s@bot \advance\count@\m@ne \edef\s@top{\the\count@}%
+ \else \xyerror@{nothing to pop from stack}{}\fi}
+\xydef@\sinit@{\edef\s@top{\s@bot}}
+\xydef@\senter@{%
+ \count@=\s@top \advance\count@\@ne
+ \expandafter\edef\csname S@\the\count@\endcsname{\s@bot}%
+ \edef\s@bot{\the\count@}\edef\s@top{\the\count@}}
+\xydef@\sleave@{%
+ \ifnum\s@bot=\s@top\else \xywarning@{leaving non-empty stack}\sinit@ \fi
+ \ifnum\s@bot>\m@ne \edef\s@bot{\csname S@\s@top\endcsname}%
+ \count@=\s@top \advance\count@\m@ne \edef\s@top{\the\count@}%
+ \edef\sbot{\the\count@}\fi}
+\xydef@\sempty@{\ifnum\s@top=\s@bot TT\else TF\fi}
+\xydef@\xytotoks@#1#2{\addtotoks@{#2}}
+\xydef@\xytotoks@@toksix@#1{\addtotoks@{\toks9={#1}}}
+\xydef@\smap@{%
+ \begingroup \toks@={}\let\xy@=\xytotoks@ \change@oxy@\xy@
+ \let\xy@@ix@=\xytotoks@@toksix@
+ \afterCOORD{\expandafter\endgroup
+ \expandafter\smapxy@@\expandafter{\the\toks@}\xyFN@\POS@}}
+\xydef@\smapxy@@#1{\xy@@{\edef\smapp@@{\s@bot}\smapxy@i{#1}}}
+\xylet@\smapp@@=\empty
+\xydef@\smapxy@i#1{%
+ \ifnum\smapp@@<\s@top
+ \count@=\smapp@@ \advance\count@\@ne \edef\smapp@@{\the\count@}%
+ \DN@{\csname S@\smapp@@\endcsname #1\relax \smapxy@i{#1}}%
+ \else \let\next@=\relax
+ \fi \next@}
+\xydef@\saveid@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\saveid@}%
+ \else \ifx "\next\DN@"##1"{\xy@{="##1"}{\idfromc@{##1}}\xyFN@\POS@}%
+ \else \ifx :\next\DN@:##1"##2"{\xy@{=:"##2"}{\idfrombase@{##2}}\xyFN@\POS@}%
+ \else\addAT@\ifx\next
+ \addAT@\DN@"##1"{\xy@{=@"##1"}{\idfromstack@{##1}}\xyFN@\POS@}%
+ \else \ifx s\next
+ \DN@ s##1"##2"{\xy@{=s##1"##2"}{\idfroms@{##2}{##1}}\xyFN@\POS@}%
+ \else\addEQ@\ifx\next \let\saveid@COORD@@=\saveid@COORDii
+ \addEQ@\DN@{\xyFN@\saveid@COORD}%
+ \else \let\saveid@COORD@@=\saveid@COORDi \let\next@=\saveid@COORD
+ \fi\fi\fi\fi\fi\fi \next@}
+\xylet@\saveid@COORD@@=\relax
+\xydef@\idfromc@#1{\DN@{#1}%
+ \expandafter\edef\csname Q@\codeof\next@\endcsname{\cfromthec@}}
+\xydef@\idfrombase@#1{\DN@{#1}%
+ \expandafter\edef\csname Q@\codeof\next@\endcsname{\basefromthebase@}}
+\xydef@\idfromstack@#1{%
+ \toks@={\if\sempty@\else
+ \xywarning@{loading on top of non-empty stack}\sinit@ \fi}%
+ \count@=\s@bot \advance\count@\@ne
+ \ifnum\count@>\s@top\else
+ \loop@
+ \expandafter\let\expandafter\next@\csname S@\the\count@\endcsname
+ \expandafter\addtotoks@\expandafter{\next@}%
+ \ifnum\count@<\s@top \advance\count@\@ne \addtotoks@{\spushc@}\repeat@
+ \fi
+ \DN@{#1}\edef\next@##1{%
+ \def\expandafter\noexpand\csname Q@\codeof\next@\endcsname{##1}}%
+ \expandafter\next@\expandafter{\the\toks@}}
+\xydef@\saveid@COORD{%
+ \begingroup \toks@={}\let\xy@=\xytotoks@ \change@oxy@\xy@
+ \let\xy@@ix@=\xytotoks@@toksix@
+ \afterCOORD{\expandafter\saveid@COORDi\expandafter{\the\toks@}}}
+\xydef@\saveid@COORDi#1#2"#3"{\endgroup \xy@@{\idfromxy@{#3}{#1}}\xyFN@\POS@}
+\xydef@\saveid@COORDii#1#2"#3"{\endgroup \xy@@{\idfromcxy@{#3}{#1}}\xyFN@\POS@}
+\xydef@\idfromxy@#1#2{\DN@{#1}%
+ \expandafter\def\csname Q@\codeof\next@\endcsname{#2}}
+\xydef@\idfromcxy@#1#2{\DN@{#1}%
+ \expandafter\edef\csname Q@\codeof\next@\endcsname{\cfromthec@#2}}
+\xydef@\cfromid@#1{\DNii@{#1}\edef\nextii@{\codeof\nextii@}%
+ \expandafter\let\expandafter\next@\csname Q@\nextii@\endcsname
+ \ifx\next@\relax \xyerror@{<pos> \string"\nextii@\string" not defined}{}%
+ \else \expandafter\next@\fi}
+\message{objects,}
+\xydef@\OBJECT@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\OBJECT@}%
+ \else\ifcat A\noexpand\next \let\next@=\OBJECT@letter
+ \else \let\next@=\OBJECT@other \fi\fi \next@}
+\xydef@\OBJECT@letter{%
+ \ifx i\next \DN@ i{\addtotoks@\Invisible@true \xyFN@\OBJECT@}%
+ \else\ifx h\next\DN@ h{\addtotoks@\Hidden@true \xyFN@\OBJECT@}%
+ \else\ifx o\next\DN@ o{\xywarning@{Obsolete o modifier used}\OBJECT@shape{o}}%
+ \else\ifx x\next\DN@ x{\xywarning@{Obsolete x modifier used}\OBJECT@shape{}}%
+ \else\ifx @\next\DN@ @##1##{%
+\xywarning@{Impossible @ (letter) should not be here!!}
+ \OBJECT@@{\dir##1}}%
+ \else \let\next@=\OBJECT@direction
+ \fi\fi\fi\fi\fi \next@}
+\xydef@\OBJECT@other{%
+ \ifx !\next \DN@!{\OBJECT@shift}%
+ \else\addPLUS@\ifx \next \DN@{\OBJECT@change}%
+ \else\addDASH@\ifx \next \DN@{\OBJECT@change}%
+ \else\addEQ@\ifx \next \DN@{\OBJECT@set}%
+ \else\ifx [\next
+ \DN@[##1]{\xy@{[##1]}{\OBJECT@shape{##1}}}%
+ \else\ifx ^\next \let\next@=\OBJECT@direction
+ \else\ifx _\next \let\next@=\OBJECT@direction
+ \else\ifx :\next \let\next@=\OBJECT@direction
+ \else\ifx ?\next
+ \DN@ ?{\xywarning@{\string? modifier used}\xyFN@\OBJECT@direction}%
+ \else\ifx (\next
+ \let\next@=\OBJECT@direction
+ \else\addAT@\ifx\next \addAT@\DN@##1##{\OBJECT@@{\dir##1}}%
+ \else \DN@##1##{\OBJECT@@{##1}}%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@}
+\xydef@\prevEdge@@{\zeroEdge}
+\xydef@\OBJECT@@#1#2{%
+ \expandafter\def\expandafter\prevEdge@@\expandafter{\the\Edge@c}%
+ \expandafter\Edge@c\expandafter{\objectEdge}%
+ \Invisible@false\Hidden@false
+ \def\Leftness@{.5}\def\Upness@{.5}%
+ \gdef\preXY@style@{}\gdef\postXY@style@{}%
+ \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@\relax}%
+ \DN@{#1}\ifx\next@\empty \DNii@{#2}%
+ \ifx\nextii@\empty \DN@{\hbox\bgroup\no@}\else \let\next@=\objectbox \fi\fi
+ \setbox\z@=\next@{#2}\L@c=\Leftness@\wdz@ \R@c=\wdz@ \advance\R@c-\L@c
+ \D@c=\dp\z@ \advance\D@c\ht\z@ \U@c=\Upness@\D@c \advance\D@c-\U@c
+ \R@p=\z@ \L@p=\L@c \U@p=\U@c \advance\U@p-\ht\z@ \D@p=-\U@p
+ \the\toks@\toks@={}\setboxz@h{\kern\R@p \raise\U@p\boxz@}%
+ \checkZeroEdge@
+ \dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@ \ht\z@=\U@c \dp\z@=\D@c \boxz@
+ \OBJECT@x}
+\xydef@\adjustLR@{%
+ \ifdim\zz@\wdz@ \L@c=\z@ \R@c=\z@ \dimen@=\Leftness@\p@
+ \ifdim\dimen@<\z@ \L@c=\dimen@ \R@c=-\L@c
+ \else\ifdim\dimen@>\p@ \L@c=\dimen@ \advance\L@c-\p@ \R@c=-\L@c \fi\fi
+ \else \L@c=\Leftness@\wdz@ \R@c=\wdz@ \advance\R@c-\L@c \fi}
+\xydef@\adjustUD@{\dimen@=\ht\z@ \advance\dimen@\dp\z@
+ \ifdim\zz@\dimen@ \U@c=\z@ \D@c=\z@ \dimen@=\Upness@\p@
+ \ifdim\dimen@<\z@ \U@c=\dimen@ \D@c=-\L@c
+ \else\ifdim\dimen@>\p@ \U@c=\dimen@ \advance\U@c-\p@ \D@c=-\L@c \fi\fi
+ \else \D@c=\dimen@ \U@c=\Upness@\dimen@ \advance\D@c-\U@c \fi}
+\def\checkZeroEdge@{%
+ \expandafter\DN@\expandafter{\the\Edge@c}\def\nextii@{\zeroEdge}%
+ \ifx\next@\nextii@\Edge@c={\rectangleEdge}\fi
+ \DN@{}\def\nextii@{}%
+ \ifdim\zz@\L@c \ifdim\zz@\R@c \ifdim\zz@\U@c \ifdim\zz@\D@c
+ \DN@{\Edge@c={\zeroEdge}}\fi\fi\fi\fi
+ \next@}
+\xydef@\OBJECT@x{\toks@={\egroup\def\Drop@@}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\Drop@@}\def\Connect@@}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\Connect@@}}%
+ \edef\tmp@{\D@c=\the\D@c \U@c=\the\U@c \L@c=\the\L@c \R@c=\the\R@c
+ \Edge@c={\expandafter\noexpand\the\Edge@c}%
+ \ifInvisible@\noexpand\Invisible@true\else\noexpand\Invisible@false\fi
+ \ifHidden@\noexpand\Hidden@true\else\noexpand\Hidden@false\fi
+ \def\noexpand\Leftness@{\Leftness@}\def\noexpand\Upness@{\Upness@}}%
+ \expandafter\addtotoks@\expandafter{\tmp@}\the\toks@}
+\xynew@{if}\ifInvisible@
+\xynew@{if}\ifHidden@
+\xydef@\Leftness@{}
+\xydef@\Upness@{}
+\xydef@\Drop@@{\styledboxz@}
+\xydef@\Connect@@{}
+\xydef@\objectbox#1{\hbox{$\m@th\objectstyle{#1}$}}
+\xylet@\objectstyle=\textstyle
+\xydef@\object{\hbox\bgroup\resetStyle@\object@}
+\xydef@\object@{%
+ \edef\next@{={\DirectionfromtheDirection@}}\expandafter\toks@\next@
+ \plainxy@ \xyFN@\OBJECT@}
+\xydef@\composite#1#{\hbox\bgroup\composite@{#1}}
+\xydef@\composite@#1#2{%
+ \DN@{#1}\ifx\next@\empty\else\xywarning@{no variants of
+ \string\composite\space allowed}\fi
+ \global\setbox9=\hbox\bgroup
+ \D@p=-\maxdimen \U@p=-\maxdimen \L@p=-\maxdimen \R@p=-\maxdimen
+ \xyFN@\composite@i#2@}
+\xydef@\composite@i{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\composite@i}%
+ \else\ifx *\next \DN@ *{\xyFN@\composite@i}%
+ \else\ifx @\next \DN@ @{\composite@x}%
+ \xyerror@{<composite> object expected}{}\czeroEdge@
+ \else \DN@{\composite@ii}\fi\fi\fi \next@}
+\xydef@\composite@ii#1#{\composite@iii{#1}}
+\xydef@\composite@iii#1#2{%
+ \setbox\z@=\object#1{#2}%
+ \ifInvisible@ \setboxz@h{}\else
+ \setboxz@h{\kern-\L@c \boxz@}\ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ {\Drop@@}\fi
+ \ifHidden@\else
+ \ifdim\U@p<\U@c \U@p=\U@c \fi \ifdim\D@p<\D@c \D@p=\D@c \fi
+ \ifdim\R@p<\R@c \R@p=\R@c \fi \ifdim\L@p<\L@c \L@p=\L@c \fi
+ \fi
+ \xyFN@\composite@iv}
+\xydef@\composite@iv{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\composite@iv}%
+ \else \ifx @\next \DN@ @{\composite@x}%
+ \else \let\next@=\composite@i \fi\fi \next@}
+\xydef@\composite@x{%
+ \edef\tmp@{\egroup
+ \D@c=\the\D@p \U@c=\the\U@p \L@c=\the\L@p \R@c=\the\R@p}\tmp@
+ \setboxz@h{\kern\L@c\box9}\ht\z@=\U@c \dp\z@=\D@c
+ \dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@
+ \Edge@c={\rectangleEdge}\computeLeftUpness@ \boxz@
+ \OBJECT@x}
+\xydef@\computeLeftUpness@{%
+ \dimen@=\L@c \advance\dimen@\R@c
+ \ifdim\zz@\dimen@ \def\Connect@@{\straight@{\dottedSpread@\jot}}%
+ \ifdim\zz@\L@c\else
+ \DN@{\zeroEdge}\expandafter\DNii@\expandafter{\the\Edge@c}%
+ \ifx\next@\nextii@\Edge@c={\rectangleEdge}\fi\fi
+ \else \quotient@\Leftness@\L@c\dimen@ \fi
+ \dimen@=\U@c \advance\dimen@\D@c
+ \ifdim\zz@\dimen@ \def\Connect@@{\straight@{\dottedSpread@\jot}}%
+ \ifdim\zz@\U@c\else
+ \DN@{\zeroEdge}\expandafter\DNii@\expandafter{\the\Edge@c}%
+ \ifx\next@\nextii@\Edge@c={\rectangleEdge}\fi\fi
+ \else \quotient@\Upness@\U@c\dimen@ \fi}
+\xydef@\xybox#1{\xy#1\endxy \Edge@c={\rectangleEdge}\computeLeftUpness@}
+\xydef@\OBJECT@shift{%
+ \let\xy@=\xytotoks@ \afterVECTORorEMPTY
+ {\OBJECT@shift@}%
+ {\addtotoks@{\X@c=-\L@c \advance\X@c\R@p \advance\X@c\L@p \Y@c=\U@p}%
+ \OBJECT@shift@}}
+\xydef@\OBJECT@shift@{%
+ \addtotoks@{\advance\U@p-\Y@c
+ \advance\L@c\X@c \advance\R@c-\X@c \advance\D@c\Y@c \advance\U@c-\Y@c
+ \computeLeftUpness@}%
+ \let\xy@=\oxy@ \xyFN@\OBJECT@}
+\xylet@\objectmargin@=\jot
+\xylet@\objectwidth@=\z@
+\xylet@\objectheight@=\z@
+\xydef@\objectmargin{\afterADDOP{\Addop@@\objectmargin@}}
+\xydef@\objectwidth{\afterADDOP{\Addop@@\objectwidth@}}
+\xydef@\objectheight{\afterADDOP{\Addop@@\objectheight@}}
+\xydef@\OBJECT@change{%
+ \afterADDOP{%
+ \addEQ@\ifx \next
+ \addtotoks@{\X@c=\D@c \advance\X@c\U@c \Y@c=\L@c \advance\Y@c\R@c}%
+ \else
+ \addtotoks@{\X@c=\objectmargin@ \advance\X@c\X@c \Y@c=\X@c}%
+ \fi
+ \let\xy@=\xytotoks@
+ \afterVECTORorEMPTY\OBJECT@change@\OBJECT@change@}}
+\xydef@\OBJECT@set{%
+ \afterADDOP{%
+ \let\xy@=\xytotoks@ \afterVECTORorEMPTY\OBJECT@change@
+ {\addtotoks@{\X@c=\objectwidth@ \Y@c=\objectheight@}\OBJECT@change@}}}
+\xydef@\OBJECT@change@{%
+ \addtotoks@{\advance\R@c\L@c \advance\R@p-\L@c \let\tmp@=\R@c}%
+ \expandafter\addtotoks@\expandafter{\Addop@@\tmp@\X@c\R@c=\tmp@
+ \L@c=\Leftness@\R@c \advance\R@p\L@c \advance\R@c-\L@c}%
+ \addtotoks@{\advance\D@c\U@c \let\tmp@=\D@c}%
+ \expandafter\addtotoks@\expandafter{\Addop@@\tmp@\Y@c\D@c=\tmp@
+ \U@c=\Upness@\D@c \advance\D@c-\U@c}%
+ \let\xy@=\oxy@ \xyFN@\OBJECT@}
+\xydef@\afterADDOP#1{\def\afterADDOP@{#1}\xyFN@\ADDOP@}
+\xylet@\afterADDOP@=\empty
+\xydef@\ADDOP@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\ADDOP@}%
+ \else\addPLUS@\ifx \next \addPLUS@\DN@{\xyFN@\ADDOP@plus}%
+ \else\addDASH@\ifx \next \addDASH@\DN@{\xyFN@\ADDOP@minus}%
+ \else\addEQ@\ifx \next
+ \addEQ@\DN@{\def\Addop@@{\Addop@0+=}\afterADDOP@}%
+ \else
+ \DN@{\def\Addop@@{\Addop@0+=}\afterADDOP@}%
+ \fi\fi\fi\fi \next@}
+\xydef@\ADDOP@plus{%
+ \addEQ@\ifx \next
+ \addEQ@\DN@{\def\Addop@@{\Addop@0+<}\afterADDOP@}%
+ \else
+ \DN@{\def\Addop@@{\Addop@1+=}\afterADDOP@}%
+ \fi \next@}
+\xydef@\ADDOP@minus{%
+ \addEQ@\ifx \next
+ \addEQ@\DN@{\def\Addop@@{\Addop@0+>}\afterADDOP@}%
+ \else
+ \DN@{\def\Addop@@{\Addop@1-=}\afterADDOP@}%
+ \fi \next@}
+\xydef@\Addop@#1#2#3#4#5{%
+ \dimen@=#4\relax \edef#4{\the\dimen@}%
+ \dimen@=#1\dimen@ \advance\dimen@#2#5\relax
+ \ifdim\dimen@#3#4\else \edef#4{\the\dimen@}\fi
+ \ifx\xy@\xyinitial@\else \DN@##1{\xy@@{\edef#4{##1}\checkZeroEdge@}}%
+ \expandafter\next@\expandafter{#4}\fi}
+\xydef@\objectEdge{\rectangleEdge}
+\xydefcsname@{shape [r]}{\advance\U@p\D@c \centerobject@
+ \ifdim\L@c>\D@c
+ \advance\R@c\L@c \L@c=.5\U@c \advance\L@c.5\D@c \advance\R@c-\L@c \fi
+ \advance\U@p-\D@c}
+\xydefcsname@{shape [l]}{\advance\U@p\D@c \centerobject@
+ \ifdim\L@c>\D@c
+ \advance\L@c\R@c \R@c=.5\U@c \advance\R@c.5\D@c \advance\L@c-\R@c \fi
+ \advance\U@p-\D@c}
+\xydefcsname@{shape [u]}{\advance\U@p\D@c \centerobject@
+ \ifdim\D@c>\L@c
+ \advance\U@c\D@c \D@c=.5\L@c \advance\D@c.5\R@c \advance\U@c-\D@c \fi
+ \advance\U@p-\D@c}
+\xydefcsname@{shape [d]}{\advance\U@p\D@c \centerobject@
+ \ifdim\D@c>\L@c
+ \advance\D@c\U@c \U@c=.5\L@c \advance\U@c.5\R@c \advance\D@c-\U@c \fi
+ \advance\U@p-\D@c}
+\xydefcsname@{shape [c]}{\advance\U@p\D@c \centerobject@ \advance\U@p-\D@c}
+\xydef@\centerobject@{%
+ \advance\D@c\U@c \D@c=.5\D@c \U@c=\D@c \advance\L@c\R@c \L@c=.5\L@c \R@c=\L@c}
+\xydef@\OBJECT@shape#1{\DN@{shape [#1]}%
+ \expandafter\let\expandafter\nextii@\csname\codeof\next@\endcsname
+ \ifx\nextii@\relax\DN@{style [#1]}%
+ \expandafter\let\expandafter\nextii@\csname\codeof\next@\endcsname
+ \ifx\nextii@\relax \DN@{\OBJECT@shapei[#1]}%
+ \else\DN@{\nextii@\xyFN@\OBJECT@}\fi
+ \else \expandafter\addtotoks@\expandafter{\nextii@}%
+ \DN@{\xyFN@\OBJECT@}%
+ \fi \next@}
+\xydefcsname@{shape []}{\the\Edge@c5\relax}%
+\xydefcsname@{shape [Outer]}{\the\Edge@c5\relax}%
+\xydefcsname@{shape [Inner]}{\the\Edge@c4\relax}%
+\xydefcsname@{shape [o]}{\Edge@c={\circleEdge}\the\Edge@c5\relax
+ \Edge@c={\circleEdge}\def\prevEdge@@{\circleEdge}}
+\xydefcsname@{shape [.]}{\czeroEdge@}
+\def\OBJECT@shapei[#1#2]{\DN@{shape [#1...]}%
+ \expandafter\let\expandafter\next\csname\codeof\next@\endcsname
+ \ifx\next\relax\DN@{*stylechar@#1@}%
+ \expandafter\let\expandafter\next\csname\codeof\next@\endcsname
+ \ifx\next\relax\DNii@{shape [#1#2]}%
+ \xywarning@{illegal [<shape>] ignored: \codeof\nextii@\space not defined}%
+ \DN@{\xyFN@\OBJECT@}%
+ \else% Delete this: \expandafter\addtotoks@\expandafter{\next{#2}}%
+ \DN@{\next{#2}\xyFN@\OBJECT@}%
+ \fi
+ \else
+\expandafter\addtotoks@\expandafter{\next{#2}}\DN@{\next{#2}\xyFN@\OBJECT@}%
+ \fi \next@}
+\xydef@\preXY@style@{}
+\xydef@\postXY@style@{}
+\xydef@\resetStyle@{\gdef\preXY@style@{}\gdef\postXY@style@{}}
+\xynew@{toks}{\styletoks@}
+\xydef@\addtostyletoks@#1{%
+ \expandafter\styletoks@\expandafter{\the\styletoks@#1}}
+\xydef@\styledboxz@{%
+ \xypre@Style@@
+ \boxz@
+ \xypost@Style@@}
+\xydef@\xypre@Style@{\styletoks@={}\saveXyStyle@\preXY@style@
+ \expandafter\DN@\expandafter{\the\styletoks@}%
+ \ifx\next@\empty \DN@{\let\xypre@Style@@=\relax
+ \let\xypost@Style@@=\relax \xypre@skipStyle@}%
+ \else
+ \let\xypre@Style@@=\relax \let\xypost@Style@@=\xypost@Style@
+ \DN@{\expandafter\xydoprestyles@\expandafter{\the\styletoks@}}%
+ \fi \next@ }
+\xydef@\xypost@Style@{\styletoks@={}\postXY@style@
+ \expandafter\xydopoststyles@\expandafter{\the\styletoks@}%
+ \let\xypost@Style@@=\relax \let\xypre@Style@@=\xypre@Style@ }
+\xydef@\xypre@skipStyle@#1\xypost@Style@@{#1\relax
+ \let\xypre@Style@@=\xypre@Style@ }
+\xydef@\xydoprestyles@@{\literal@}
+\xydef@\xydopoststyles@@{\literal@}
+\xylet@\xydoprestyles@=\xydoprestyles@@
+\xylet@\xydopoststyles@=\xydopoststyles@@
+\xydef@\modXYstyle@{%
+ \ifx\xy@style@\empty\resetStyle@\fi \checkXyStyle@
+ \expandafter\expandafter\expandafter\DN@
+ \expandafter\expandafter\expandafter{\preXYstyle@@}%
+ \ifx\next@\empty\else\DN@{\modXYstyle@@}\fi \next@ }
+\xydef@\modXYstyle@@{%
+ \DN@##1{\expandafter\def\expandafter\tmp@\expandafter{##1}}%
+ \expandafter\next@\expandafter{\preStyle@@}%
+ \DN@##1{\expandafter\gdef\expandafter\preXY@style@\expandafter{%
+ \preXY@style@ ##1}}\expandafter\next@\expandafter{\tmp@}%
+ \DN@##1{\expandafter\def\expandafter\tmp@\expandafter{##1}}%
+ \expandafter\next@\expandafter{\postStyle@@}%
+ \DN@##1{\expandafter\gdef\expandafter\postXY@style@\expandafter{%
+ \tmp@ ##1}}\expandafter\next@\expandafter{\postXY@style@}}
+\xydef@\xy@style@{}
+\xydef@\checkXyStyle@{\ifx\xy@style@\empty\resetStyle@\fi
+ \let\xy@style@=\relax}
+\xydef@\preStyle@@{}
+\xydef@\postStyle@@{}
+\xydef@\preXYstyle@@{\relax}
+\xydef@\loadxystyle@{%
+ \let\xypre@Style@@=\xypre@Style@ \def\preXYstyle@@{\preStyle@@}}
+\loadxystyle@
+\xydef@\Unloadstyle@{%
+ \let\xypre@Style@@=\relax \let\xypost@Style@@=\relax
+ \def\preXYstyle@@{\relax}}
+\xydefcsname@{shape [=...]}#1{\checkXyStyle@ \addtotoks@{\xynamestyle@{#1}}}
+\xydef@\xynamestyle@#1{\checkXyStyle@
+ \expandafter\DNii@\expandafter{\csname shape [#1]\endcsname}%
+ \expandafter\ifx\nextii@\relax
+ \else\xywarning@{Redefining style [#1]}\fi
+ \expandafter\xynamestyle@@\csname shape [#1]\endcsname }
+\xydef@\xynamestyle@@#1{%
+ \expandafter\def\expandafter\tmp@\expandafter{\preXY@style@}%
+ \DN@##1{\def\tmp@{\checkXyStyle@\gdef\preXY@style@{##1}}}%
+ \expandafter\next@\expandafter{\preXY@style@}%
+ \DN@##1{\expandafter\gdef\expandafter#1\expandafter{\tmp@
+ \gdef\postXY@style@{##1}}}%
+ \expandafter\next@\expandafter{\postXY@style@}\DN@{}}
+\xydef@\prevXypreStyle@@{}
+\xydef@\prevXypostStyle@@{}
+\xydef@\saveXyStyle@{\expandafter
+ \def\expandafter\prevXypreStyle@@\expandafter{\preXY@style@}%
+ \expandafter\def\expandafter\prevXypostStyle@@\expandafter{%
+ \postXY@style@}}
+\xydef@\recoverXyStyle@{\expandafter
+ \gdef\expandafter\preXY@style@\expandafter{\prevXypreStyle@@}%
+ \expandafter\gdef\expandafter\postXY@style@\expandafter{%
+ \prevXypostStyle@@}}
+\xydef@\newxystyle#1#2#3{%
+ \DN@{#3}\ifx\next@\empty
+ \xydefcsname@{shape [#1]}{\csname xyshape@#1@\endcsname}%
+ \else \expandafter\def\csname shape [#1]\endcsname{%
+ \csname xyshape@#1@\endcsname}\fi
+ \DN@{#2}\ifx\next@\empty
+ \expandafter\def\csname xyshape@#1@\endcsname{%
+ \xyundefinedStyle@{#1}{}@@}%
+ \else \expandafter\def\csname xyshape@#1@\endcsname{#2}\fi}
+\xydef@\xyundefinedStyle@#1#2@@{%
+ \xywarning@{style #1 not defined, nothing to apply}}
+\xydef@\applyFIFOstyle@#1#2#3#4{\bgroup
+ \styletoks@={\egroup\gdef\preXY@style@}%
+ \expandafter\toks@\expandafter{\preXY@style@}%
+ \expandafter\addtotoks@\expandafter{\expandafter#1\expandafter{#2}}%
+ \expandafter\addtostyletoks@\expandafter{\expandafter{\the\toks@}%
+ \gdef\postXY@style@}%
+ \expandafter\toks@\expandafter{\expandafter#3\expandafter{#4}}%
+ \expandafter\addtotoks@\expandafter{\postXY@style@}%
+ \expandafter\addtostyletoks@\expandafter{\expandafter{\the\toks@}}%
+ \the\styletoks@ }
+\xydef@\applyLIFOstyle@#1#2#3#4{\bgroup
+ \styletoks@={\egroup\gdef\preXY@style@}%
+ \expandafter\toks@\expandafter{\expandafter#1\expandafter{#2}}%
+ \expandafter\addtotoks@\expandafter{\preXY@style@}%
+ \expandafter\addtostyletoks@\expandafter{\expandafter{\the\toks@}%
+ \gdef\postXY@style@}%
+ \expandafter\toks@\expandafter{\postXY@style@}%
+ \expandafter\addtotoks@\expandafter{\expandafter#3\expandafter{#4}}%
+ \expandafter\addtostyletoks@\expandafter{\expandafter{\the\toks@}}%
+ \the\styletoks@ }
+\xydef@\OBJECT@direction{\afterDIRECTIONorEMPTY{%
+ \edef\next@{{\DirectionfromtheDirection@}}\expandafter\addtotoks@\next@
+ \xyFN@\OBJECT@}%
+ {\xyFN@\OBJECT@}}
+\xydef@\afterDIRECTIONorEMPTY#1#2{%
+ \DN@##1{\def\afterDIRECTION@{\def\afterDIRECTION@{##1}%
+ \ifDIRECTIONempty@\DN@{#2}\else\DN@{#1}\fi \next@}}%
+ \expandafter\next@\expandafter{\afterDIRECTION@}%
+ \xyFN@\DIRECTION@}
+\xylet@\afterDIRECTION@=\empty
+\xynew@{if}\ifDIRECTIONempty@
+\xydef@\DIRECTION@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\DIRECTION@}%
+ \else\ifx v\next \DN@ v{\DIRECTION@v}%
+ \else\ifx \bgroup\next \let\next@=\DIRECTION@group
+ \else\ifx (\next \DN@({\xyFN@\DIRECTION@open}%
+ \else
+ \DN@{\count@=8
+ \afterDIAG{\ifnum\count@=8 \DN@{\DIRECTIONempty@true \xyFN@\DIRECTION@i}%
+ \else \DN@{\xy@@{\dimen@=\xydashl@}\Directionfromdiag@}\fi \next@}}%
+ \fi\fi\fi\fi \next@}
+\xydef@\DIRECTION@open{%
+ \ifx *\next \DN@*##1*){\DIRECTION@group{##1}}%
+ \else \DN@{\xyerror@{(* <pos> *) expected}{} \xyFN@\DIRECTION@i}%
+ \fi \next@}
+\def\afterDIAG#1{\def\afterDIAG@{#1}\xyFN@\DIAG@}
+\xydef@\DIAG@{%
+ \ifx d\next \DN@ d{\count@=1 \xyFN@\DIAG@@}%
+ \else\ifx r\next \DN@ r{\count@=3 \xyFN@\DIAG@@}%
+ \else\ifx u\next \DN@ u{\count@=5 \xyFN@\DIAG@@}%
+ \else\ifx l\next \DN@ l{\count@=7 \xyFN@\DIAG@@}%
+ \else \let\next@=\afterDIAG@
+ \fi\fi\fi\fi \next@}
+\xydef@\DIAG@@{\ifcase\count@ \or
+ \DIAG@@@ l0r2\or\or \DIAG@@@ d2u4\or\or \DIAG@@@ r4l6\or\or \DIAG@@@ u6d0%
+ \else\xybug@{impossible <diag> number}\fi
+ \next@}
+\xydef@\DIAG@@@#1#2#3#4{%
+ \ifx #1\next \count@=#2\DN@#1{\afterDIAG@}%
+ \else \ifx #3\next \count@=#4\DN@#3{\afterDIAG@}%
+ \else \let\next@=\afterDIAG@ \fi\fi}
+\xydef@\Directionfromdiag@{\ifcase\count@
+ \xy@@{\dlDirection@\dimen@}%
+ \or \xy@@{\dDirection@\dimen@}%
+ \or \xy@@{\drDirection@\dimen@}%
+ \or \xy@@{\rDirection@\dimen@}%
+ \or \xy@@{\urDirection@\dimen@}%
+ \or \xy@@{\uDirection@\dimen@}%
+ \or \xy@@{\ulDirection@\dimen@}%
+ \or \xy@@{\lDirection@\dimen@}%
+ \or
+ \else\xybug@{impossible <diag>}\fi
+ \DIRECTIONempty@false \xyFN@\DIRECTION@i}
+\xydef@\DIRECTION@v{%
+ \xy@{v}{\enter@{\cfromthec@ \X@origin=\the\X@origin \Y@origin=\the\Y@origin
+ \X@p=\the\X@p \Y@p=\the\Y@p}%
+ \X@origin=\z@ \Y@origin=\z@}%
+ \afterVECTORorEMPTY
+ {\xy@@{\X@p=\z@ \Y@p=\z@ \setupDirection@ \leave@}%
+ \DIRECTIONempty@false \xyFN@\DIRECTION@i}%
+ {\xy@@\leave@ \xyerror@{<vector> expected after v}{}%
+ \DIRECTIONempty@false \xyFN@\DIRECTION@i}}
+\xydef@\DIRECTION@group#1{%
+ \xy@@{\begingroup}\xy@@ix@{#1}\xy@@{\plainxy@\expandafter\POS\the\toks9\relax
+ \setupDirection@\edef\next@{\endgroup \DirectionfromtheDirection@}\next@}%
+ \DIRECTIONempty@false \xyFN@\DIRECTION@i}
+\xydef@\DIRECTION@i{%
+ \ifx ^\next \DN@ ^{\xy@^{\aboveDirection@\xydashl@}%
+ \DIRECTIONempty@false \xyFN@\DIRECTION@i}%
+ \else\ifx _\next \DN@ _{\xy@_{\belowDirection@\xydashl@}%
+ \DIRECTIONempty@false \xyFN@\DIRECTION@i}%
+ \else\ifx :\next \DN@ :{%
+ \xy@{:}{\enter@{\cfromthec@ \basefromthebase@ \X@p=\the\X@p \Y@p=\the\Y@p}%
+ \X@origin=\z@ \Y@origin=\z@
+ \X@xbase=\cosDirection\xydashl@ \Y@xbase=\sinDirection\xydashl@
+ \X@ybase=-\Y@xbase \Y@ybase=\X@xbase}%
+ \afterVECTORorEMPTY
+ {\xy@@{\X@p=\z@ \Y@p=\z@ \setupDirection@ \leave@}%
+ \DIRECTIONempty@false \xyFN@\DIRECTION@i}%
+ {\xy@@\leave@ \xyerror@{<vector> expected after :}{}%
+ \DIRECTIONempty@false \xyFN@\DIRECTION@i}}%
+ \else
+ \let\next@=\afterDIRECTION@
+ \fi\fi\fi \next@}
+\message{decorations;}
+\xydef@\drop#1#{\DN@##1{\xy@@ix@{{#1}{##1}}%
+ \xy@{\drop#1{##1}}{\expandafter\drop@\the\toks9 }\ignorespaces}\next@}
+\xydef@\connect#1#{\DN@##1{\xy@@ix@{{#1}{##1}}%
+ \xy@{\connect#1{##1}}{\expandafter\connect@\the\toks9 }\ignorespaces}\next@}
+\xydef@\preconnect#1#{\DN@##1{\xy@@ix@{{#1}{##1}}%
+ \xy@{\connect#1{##1}}{\expandafter\preconnect@\the\toks9 }\ignorespaces}\next@}
+\xydef@\save{\relax\saveC}
+\xydef@\saveC{\xy@\save\save@ \POS}
+\xydef@\save@{\enter@{\cfromthec@ \pfromthep@ \basefromthebase@}}
+\xydef@\restore{\xy@\restore\leave@ \ignorespaces}
+\xydef@\xyecho{%
+ \xy@\xyecho{\let\xy@=\xyecho@ \message{\string\xyecho}}\POS}
+\xydef@\xyecho@#1#2{{\def\1{#1}\ifx\1\empty\else\message{\codeof\1}\fi}%
+ \oxy@{#1}{#2}}
+\xydef@\xyverbose{%
+ \xy@\xyverbose{\let\xy@=\xyverbose@
+ \W@{Xy: \string\xyverbose\xytracelineno@}}\POS}
+\xydef@\xyverbose@#1#2{%
+ {\def\1{#1}\ifx\1\empty\else\W@{Xy: \codeof\1\xytracelineno@}\fi}%
+ \oxy@{#1}{#2}}
+\xydef@\xytracing{%
+ \xy@\xytracing{\let\xy@=\xytracing@
+ \W@{Xy TRACE: \string\xytracing\xytracelineno@}\xystatus@:}\POS}
+\xydef@\xytracing@#1#2{{\def\1{#1}\def\2{#2}%
+ \W@{Xy TRACE: \codeof\1 {\codeof\2}\xytracelineno@}}\oxy@{#1}{#2}\xystatus@:}
+\xydef@\xystatus@#1{\xystatus@cp{#1}%
+ \W@{#1 d=<\the\d@X,\the\d@Y>
+ Direction=\the\Direction=\string(\cosDirection,\sinDirection\string)}%
+ \W@{#1 base=<\the\X@origin,\the\Y@origin>+%
+ <\the\X@xbase,\the\Y@xbase>x+<\the\X@ybase,\the\Y@ybase>y}%
+ \W@{#1 min/max=<\the\X@min,\the\Y@min>/<\the\X@max,\the\Y@max>
+ S=\the\csp@}}
+\xydef@\xystatus@cp#1{%
+ \W@{#1 c=<\the\X@c,\the\Y@c> \expandafter\string\the\Edge@c
+ \string[\the\L@c+\the\R@c,\the\D@c+\the\U@c\string]
+ \ifInvisible@ I\fi\ifHidden@ H\fi}%
+ \W@{#1 p=<\the\X@p,\the\Y@p> \expandafter\string\the\Edge@p
+ \string[\the\L@p+\the\R@p,\the\D@p+\the\U@p\string]}}
+\xydef@\xystatus@c#1{%
+ \W@{#1<\the\X@c,\the\Y@c> \expandafter\string\the\Edge@c
+ \string[\the\L@c+\the\R@c,\the\D@c+\the\U@c\string]}}
+\xydef@\xyquiet{\xy@\xyquiet{\let\xy@=\oxy@}}
+\xydef@\xyignore#1{\xy@\xyignore{\xyignore@{#1}}\ignorespaces}
+\xydef@\xyignore@#1{{\let\xy@=\xyeat@ \change@oxy@\xy@ \POS#1\relax}}
+\xydef@\xyeat@#1#2{}
+\xydef@\xycompile@@{\jobname-}
+\xydef@\xycompileno@@{0}
+\xydef@\CompilePrefix#1{%
+ \def\xycompile@@{#1}\xdef\xycompile@@{\codeof\xycompile@@}%
+ \xdef\xycompileno@@{0}}
+\xydef@\xycompile{%
+ \count@=\xycompileno@@ \advance\count@\@ne
+ \xdef\xycompileno@@{\ifnum10>\count@ 0\fi \the\count@}%
+ \edef\next{\noexpand\xycompileto{\xycompile@@\xycompileno@@}}\next}
+\xylet@\compilename@@=\empty
+\xylet@\xyrecompile@@=\relax
+\xydef@\xycompileto#1#2{%
+ \if\inxy@ \DN@{\xy@@{\nter@{}}}%
+ \else \DN@{\xy \xy@@{\nter@{\endxy}}}\fi \next@
+ \ifxysaving@ \xyerror@{Compilations can not be nested}{}\fi
+ \DN@{#1}\edef\compilename@@{\codeof\next@}\DNii@{#2}%
+ \def\xyrecompile@@{recompiling TRUNCATED}%
+ \expandafter\xyinputorelse@@\expandafter{\compilename@@.xyc}%
+ {\def\xyrecompile@@{compiling to}}%
+ \ifx\xyrecompile@@\relax \else \expandafter\xyrecompile@ \fi
+ \xy@@\leave@ \ignorespaces}
+\xydef@\xyrecompile@{%
+ \message{(\xyrecompile@@\space\string`\compilename@@.xyc\string'}%
+ \DN@{\immediate\openout\xywrite@=}\expandafter\next@\compilename@@.xyc
+ \immediate\write\xywrite@{%
+ \string\xycompiled{\compilename@@}%
+ {\the\year/\the\month/\the\day\string:\the\time\xytracelineno@}%
+ {Xy-pic \xyversion}\xycomment@}%
+ \immediate\write\xywrite@{{\codeof\nextii@}\relax}%
+ {\xysaving@ \expandafter\POS\nextii@ \relax}%
+ \immediate\write\xywrite@{\string\xyendcompiled}%
+ \immediate\closeout\xywrite@ \message{done)}%
+ \expandafter\input\compilename@@.xyc
+ \outlines@@\writeoutline@\writeoutline@}
+\xydef@\xysaving@{\let\xy@=\xysave@ \change@oxy@\xy@
+ \let\xy@@ix@=\xysave@@toksix@ \xysaving@true}
+\xynew@{if}\ifxysaving@ \xysaving@false
+\xydef@\xysave@#1#2{{\DN@{{#1}{#2}}%
+ \immediate\write\xywrite@{\string\xy@\codeof\next@\xycomment@}}}
+\xydef@\xysave@@toksix@#1{{\DN@{{#1}}%
+ \immediate\write\xywrite@{\string\xy@@ix@\codeof\next@\relax}}}
+\xywarnifdefined\xycomment@
+{\catcode`\%=12 \catcode`\(=1 \catcode`\)=2 \gdef\xycomment@(%)}
+\xydef@\xycompiled#1#2#3#4{\DN@{#1}\edef\next@{\codeof\next@}%
+ \ifx\next@\compilename@@\else
+ \xywarning@{This file does not contain the result of
+ \string\xycompileto{\compilename@@}{...}^^J%
+ but of \string\xycompileto{\next@}}\fi
+ \edef\next{Xy-pic \xyversion}\DN@{#3}\ifx\next\next@
+ \DN@{#4}\ifx\next@\nextii@ \xycatcodes \outlines@@\relax\readoutline@
+ \else \def\xyrecompile@@{recompiling to}\endinput \fi
+ \else \def\xyrecompile@@{Xy-pic version change - recompiling}\endinput \fi}
+\xydef@\xyendcompiled{\let\xyrecompile@@=\relax \xyuncatcodes\endinput}
+\xydef@\CompileFixPoint#1{%
+ \expandafter\ifx\csname#1FIX@@\endcsname\relax
+ \expandafter\xdef\csname#1FIX@@\endcsname{\xycompileno@@}%
+ \else
+ \xdef\xycompileno@@{\csname#1FIX@@\endcsname}\fi}
+\xydef@\outlines@no#1#2{}
+\xydef@\outlines@make#1#2{#1}
+\xydef@\outlines@only#1#2{#2}
+\xylet@\outlines@@=\outlines@no
+\xylet@\writeoutline@@=\relax
+\xylet@\readoutline@@=\relax
+\xydef@\MakeOutlines{\let\outlines@@=\outlines@make}
+\xydef@\OnlyOutlines{\xywarning@{Compiled pictures only shown as outlines}%
+ \let\outlines@@=\outlines@only}
+\xydef@\ShowOutlines{\let\readoutline@@=\typesetoutline@}
+\xydef@\NoOutlines{\let\outlines@@=\outlines@no}
+\xydef@\writeoutline@{%
+ \DN@{\immediate\openout\xywrite@=}\expandafter\next@\compilename@@.xyd
+ \immediate\write\xywrite@{\xycomment@\space\compilename@@.xyd}
+ \immediate\write\xywrite@{%
+ \string\X@min=\the\X@min \string\X@max=\the\X@max
+ \string\Y@min=\the\Y@min \string\Y@max=\the\Y@max \string\relax}%
+ \writeoutline@@
+ \immediate\closeout\xywrite@}
+\xynew@{if}\ifoutlineread@
+\xydef@\readoutline@{\outlineread@true
+ \expandafter\xyinputorelse@@\expandafter{\compilename@@.xyd}%
+ {\def\xyrecompile@@{outline missing - recompiling to}\outlineread@false}%
+ \ifoutlineread@ \readoutline@@
+ \writeoutline@\expandafter\xyendcompiled\fi}
+\xydef@\typesetoutline@{%
+ \xy@@{\czeroEdge@ \U@p=\z@ \D@p=\z@ \L@p=\z@ \R@p=\z@ \Edge@p={\zeroEdge}%
+ \X@p=\X@min \Y@p=\Y@min \X@c=\X@min \Y@c=\Y@max \connect@\dir{.}%
+ \X@p=\X@c \Y@p=\Y@c \X@c=\X@max \Y@c=\Y@max \connect@\dir{.}%
+ \X@p=\X@c \Y@p=\Y@c \X@c=\X@max \Y@c=\Y@min \connect@\dir{.}%
+ \X@p=\X@c \Y@p=\Y@c \X@c=\X@min \Y@c=\Y@min \connect@\dir{.}}}
+\message{kernel objects:}
+\message{directionals,}
+\xydef@\dir{\hbox\bgroup\xyFN@\dir@i}
+\xydef@\dir@i{\ifx *\next \DN@*{\resetStyle@\object@}%
+ \else \let\next@=\dir@ii \fi \next@}
+\xydef@\dir@ii#1#{\dir@{#1}}
+\xydef@\dir@#1#2{\DN@{dir#1{#2}}%
+ \expandafter\let\expandafter\next\csname\codeof\next@\endcsname
+ \ifx\next\relax \DN@{dir{#2}}%
+ \expandafter\let\expandafter\next\csname\codeof\next@\endcsname
+ \ifx\next\relax \DN@{\dir#1{#2}}%
+ \xyerror@{illegal <dir>: \codeof\next@\space not defined}{}%
+ \let\next=\no@ \fi\fi \next}
+\xydefcsname@{dir{}}{\no@}
+\xyletcsnamecsname@{dir0{}}{dir{}}
+\xyletcsnamecsname@{dir1{}}{dir{}}
+\xyletcsnamecsname@{dir^{}}{dir{}}
+\xyletcsnamecsname@{dir_{}}{dir{}}
+\xyletcsnamecsname@{dir2{}}{dir{}}
+\xyletcsnamecsname@{dir3{}}{dir{}}
+\xyletcsnamecsname@{dir{ }}{dir{}}
+\xydef@\no@{\egroup \czeroEdge@
+ \def\Leftness@{.5}\def\Upness@{.5}%
+ \def\Drop@@{\setbox\z@=\copy\voidb@x}\def\Connect@@{\no@@}}
+\xydefcsname@{dir1{-}}{\line@}
+\xydefcsname@{dir2{-}}{\line@ \double@\xydashh@}
+\xydefcsname@{dir3{-}}{\line@ \triple@\xydashh@}
+\xyletcsnamecsname@{dir0{-}}{dir{}}
+\xyletcsnamecsname@{dir{-}}{dir1{-}}
+\xyletcsnamecsname@{dir{=}}{dir2{-}}
+\xydef@\line@{\dimen@=\sd@Y\sinDirection\xydashl@
+ \ifnum\SemiDirectionChar<31 \D@c=\z@ \U@c=\dimen@ \DN@{\d@Y<\z@}%
+ \else\ifnum\SemiDirectionChar<64 \D@c=\dimen@ \U@c=\z@ \DN@{\z@<\d@Y}%
+ \else\ifnum\SemiDirectionChar<96 \D@c=\dimen@ \U@c=\z@ \DN@{\d@X<\z@}%
+ \else \D@c=\z@ \U@c=\dimen@ \DN@{\d@X<\z@}\fi\fi\fi
+ \setboxz@h{\line@@}\ht\z@=\U@c \dp\z@=\D@c
+ \L@c=\z@ \R@c=\wdz@
+ \ifdim\next@ \dimen@=\R@c \R@c=\L@c \L@c=\dimen@
+ \dimen@=\U@c \U@c=\D@c \D@c=\dimen@ \advance\dimen@-\U@c
+ \lower\dimen@\boxz@
+ \else \boxz@ \fi
+ \edef\tmp@{\egroup \U@c=\the\U@c \D@c=\the\D@c \L@c=\the\L@c \R@c=\the\R@c}%
+ \tmp@
+ \Edge@c={\rectangleEdge}%
+ \ifdim\z@<\U@c \def\Upness@{1}\else \def\Upness@{0}\fi
+ \ifdim\z@<\L@c \def\Leftness@{1}\else \def\Leftness@{0}\fi
+ \def\Drop@@{\styledboxz@}\def\Connect@@{\solid@}}
+\xydef@\line@@{{\xydashfont\SemiDirectionChar\/}}
+\xydef@\solid@{%
+ \checkXy@rules@\solidhrule@\solidvrule@{\straight@\solidSpread@}}
+\xydef@\checkXy@rules@#1#2#3{%
+ \dimen@=\Y@c \advance\dimen@-\Y@p
+ \ifjusthvtest@.05pt>\ifdim\dimen@<\z@-\fi\dimen@ \DN@{#1}%
+ \else \dimen@=\X@c \advance\dimen@-\X@p
+ \ifjusthvtest@.05pt>\ifdim\dimen@<\z@-\fi\dimen@ \DN@{#2}%
+ \else \DN@{#3}\fi\fi \next@}
+\xydef@\solidSpread@{\ifnum\z@<\count@@ \advance\count@@\@ne \fi}
+\xylet@\ifjusthvtest@=\ifdim
+\xydef@\NoRules{\let\ifjusthvtest@=\iffalse}
+\xydef@\UseRules{\let\ifjusthvtest@=\ifdim}
+\xydef@\solidvrule@{\no@@ \solidvrule@typeset \ifHidden@\else\noinsert@\fi
+ \solidvrule@pre}
+\xydef@\solidvrule@pre{%
+ \def\Cbreak@@{%
+ \connectRestore@ \swap@\lastbreak@@\swap@
+ \solidvrule@typeset \edef\lastbreak@@{\cfromthec@}\Creset@@}%
+ \def\Clast@@{%
+ \connectRestore@ \Creset@@\swap@\lastbreak@@\swap@
+ \solidvrule@typeset \Creset@@ \edef\lastbreak@@{\cfromthep@}}%
+}
+\xydef@\solidvrule@typeset{%
+ \ifInvisible@ \let\next@=\relax \else \let\next@=\solidvrule@typeset@ \fi
+ \checkoverlap@@ \next@}
+\xydef@\solidvrule@typeset@{{%
+ \advance\X@c\X@p \X@c=.5\X@c \X@p=\X@c
+ \advance\X@c-.5\xydashw@ \advance\X@p.5\xydashw@
+ \ifdim\Y@c<\Y@p \advance\Y@c\U@c \advance\Y@p-\D@p
+ \else \swapdimen@\Y@c\Y@p \advance\Y@c\U@p \advance\Y@p-\D@c \fi
+ \Droprule@}}
+\xydef@\solidhrule@{\no@@ \solidhrule@typeset \ifHidden@\else\noinsert@\fi
+ \solidhrule@pre}
+\xydef@\solidhrule@pre{%
+ \def\Cbreak@@{%
+ \connectRestore@ \swap@\lastbreak@@\swap@
+ \solidhrule@typeset \edef\lastbreak@@{\cfromthec@}\Creset@@}%
+ \def\Clast@@{%
+ \connectRestore@ \Creset@@\swap@\lastbreak@@\swap@
+ \solidhrule@typeset \Creset@@ \edef\lastbreak@@{\cfromthep@}}%
+}
+\xydef@\solidhrule@typeset{%
+ \ifInvisible@ \let\next@=\relax \else \let\next@=\solidhrule@typeset@ \fi
+ \checkoverlap@@ \next@}
+\xydef@\solidhrule@typeset@{{%
+ \ifdim\X@c<\X@p \advance\X@c\R@c \advance\X@p-\L@p
+ \else \swapdimen@\X@c\X@p \advance\X@c\R@p \advance\X@p-\L@c \fi
+ \advance\Y@c\Y@p \Y@c=.5\Y@c \Y@p=\Y@c
+ \advance\Y@c-.5\xydashw@ \advance\Y@p.5\xydashw@
+ \Droprule@}}
+\xydef@\Droprule@{\advance\X@p-\X@c
+ \setboxz@h{\kern\X@c \vrule width\X@p depth-\Y@c height\Y@p}%
+ \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@ \Drop@@}
+\xydef@\zerodot{\copy\zerodotbox@}
+\xydefcsname@{dir1{.}}{\point@}
+\xydefcsname@{dir2{.}}{\point@ \double@\xydashh@}
+\xydefcsname@{dir3{.}}{\point@ \triple@\xydashh@}
+\xyletcsnamecsname@{dir0{.}}{dir{}}
+\xyletcsnamecsname@{dir{.}}{dir1{.}}
+\xyletcsnamecsname@{dir{:}}{dir2{.}}
+\xydef@\point@{\pointlike@\zerodot\p@}
+\xydef@\pointlike@#1#2{%
+ \setboxz@h{#1}\wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@\egroup
+ \def\Leftness@{.5}\def\Upness@{.5}\ctipEdge@
+ \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@{\dottedSpread@{#2}}}}
+\xydef@\dottedSpread@#1{%
+ \dimen@=#1\relax \DN@{\A@=2\A@ \B@=2\B@ \dottedSpread@i}%
+ \A@=\sd@X\cosDirection\dimen@ \B@=\sd@Y\sinDirection\dimen@
+ \dimen@=\A@ \advance\dimen@\B@
+ \dimen@ii=\sd@X\d@X \advance\dimen@ii\sd@Y\d@Y
+ \ifdim\dimen@>\dimen@ii \DN@{\count@@=\z@}\fi
+ \next@}
+\xydef@\dottedSpread@i{%
+ \global\setbox8=\hbox to\A@{\hss
+ \kern.5\A@\box\lastobjectbox@\kern.5\A@\hss}\dp8=.5\B@ \ht8=.5\B@
+ \advance\d@X\sd@X\A@ \advance\d@Y\sd@Y\B@
+ \advance\X@c\sd@X.5\A@ \advance\Y@c\sd@Y.5\B@
+ \ifdim\sd@Y\d@Y<\sd@X\d@X \dimen@=\sd@X\d@X
+ \ifdim\zz@\A@\else \divide\dimen@\A@ \fi \count@@=\dimen@
+ \else \dimen@=\sd@Y\d@Y
+ \ifdim\zz@\B@\else \divide\dimen@\B@ \fi \count@@=\dimen@
+ \fi \advance\count@@\@ne}
+\xydefcsname@{dir1{~}}{\squiggle@}
+\xydefcsname@{dir2{~}}{\squiggle@ \double@\xybsqlh@}
+\xydefcsname@{dir3{~}}{\squiggle@ \triple@\xybsqlh@}
+\xyletcsnamecsname@{dir0{~}}{dir{}}
+\xyletcsnamecsname@{dir{~}}{dir1{~}}
+\xydef@\squiggle@{\xybsqlfont
+ \dimen@=\sd@X\cosDirection\xybsqll@ \advance\dimen@.1\p@
+ \dimen@ii=\sd@Y\sinDirection\xybsqll@
+ \kern\dimen@\squiggle@@
+ \edef\tmp@{\egroup \U@c=\the\dimen@ii \L@c=\the\dimen@}\tmp@
+ \wdz@=2\L@c \R@c=\L@c \ht\z@=\U@c \D@c=\U@c \dp\z@=\U@c
+ \Edge@c={\rectangleEdge}%
+ \def\Leftness@{.5}\def\Upness@{.5}%
+ \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@\squiggledSpread@}}
+\xydef@\squiggle@@{\DirectionChar \count@=\DirectionChar
+ \advance\count@-64 \ifnum\count@<\z@ \advance\count@128 \fi \char\count@}
+\xydef@\squiggledSpread@{%
+ \dimen@=\d@X \advance\dimen@-\sd@X\count@@\A@ \advance\dimen@\sd@X.3\p@
+ \advance\X@c-.5\dimen@ \advance\d@X-\dimen@
+ \dimen@=\d@Y \advance\dimen@-\sd@Y\count@@\B@ \advance\dimen@\sd@Y.3\p@
+ \advance\Y@c-.5\dimen@ \advance\d@Y-\dimen@}
+\xydef@\double@#1{\edef\Drop@@{\dimen@=#1\relax
+ \dimen@=.5\dimen@ \A@=-\sinDirection\dimen@ \B@=\cosDirection\dimen@
+ \setboxz@h{\setbox2=\hbox{\kern\A@\raise\B@\copy\z@}%
+ \dp2=\z@ \ht2=\z@ \wd2=\z@ \box2
+ \setbox2=\hbox{\kern-\A@\raise-\B@ \noexpand\boxz@}%
+ \dp2=\z@ \ht2=\z@ \wd2=\z@ \box2 }%
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \noexpand\styledboxz@}}
+\xydef@\triple@#1{\edef\Drop@@{\dimen@=#1\relax
+ \A@=-\sinDirection\dimen@ \B@=\cosDirection\dimen@
+ \setboxz@h{\setbox2=\hbox{\kern\A@\raise\B@\copy\z@}%
+ \dp2=\z@ \ht2=\z@ \wd2=\z@ \box2
+ \setbox2=\hbox{\kern-\A@\raise-\B@\copy\z@}%
+ \dp2=\z@ \ht2=\z@ \wd2=\z@ \box2
+ \dp\z@=\z@ \ht\z@=\z@ \wdz@=\z@ \noexpand\boxz@}%
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \noexpand\styledboxz@}}
+\xydefcsname@{dir1{--}}{\dash@}
+\xydefcsname@{dir2{--}}{\dash@ \double@\xydashh@}
+\xydefcsname@{dir3{--}}{\dash@ \triple@\xydashh@}
+\xyletcsnamecsname@{dir0{--}}{dir{}}
+\xyletcsnamecsname@{dir{--}}{dir1{--}}
+\xyletcsnamecsname@{dir{==}}{dir2{--}}
+\xydef@\dash@{\line@ \wdz@=2\wdz@ \ht\z@=2\ht\z@ \dp\z@=2\dp\z@
+ \multiply\D@c\tw@ \multiply\U@c\tw@ \multiply\L@c\tw@ \multiply\R@c\tw@
+ \def\Connect@@{\straight@\dashedSpread@}}
+\xydef@\dashedSpread@{\ifnum\z@<\count@@ \advance\count@@\@ne \fi
+ \advance\d@X\sd@X.5\A@ \advance\d@Y\sd@Y.5\B@
+ \ifdim\z@<\d@X \advance\X@c.5\A@ \fi \advance\Y@c\sd@Y.5\B@}
+\xydefcsname@{dir1{~~}}{\dashsquiggle@}
+\xydefcsname@{dir2{~~}}{\dashsquiggle@ \double@\xybsqlh@}
+\xydefcsname@{dir3{~~}}{\dashsquiggle@ \triple@\xybsqlh@}
+\xyletcsnamecsname@{dir0{~~}}{dir{}}
+\xyletcsnamecsname@{dir{~~}}{dir1{~~}}
+\xydef@\dashsquiggle@{\squiggle@
+ \multiply\D@c\tw@ \multiply\U@c\tw@ \multiply\L@c\tw@ \multiply\R@c\tw@
+ \dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@ \ht\z@=\U@c \dp\z@=\D@c
+ \def\Connect@@{\straight@\dashsquiggledSpread@}}
+\xydef@\dashsquiggledSpread@{\ifnum\z@<\count@@ \advance\count@@\@ne \fi
+ \advance\X@c.5\A@ \advance\d@X.5\A@ \advance\Y@c.25\B@ \advance\d@Y.5\B@}
+\xyletcsnamecsname@{dir1{..}}{dir{.}}
+\xyletcsnamecsname@{dir2{..}}{dir2{.}}
+\xyletcsnamecsname@{dir3{..}}{dir3{.}}
+\xyletcsnamecsname@{dir{..}}{dir1{.}}
+\xyletcsnamecsname@{dir{::}}{dir2{.}}
+\xylet@\ctipEdge@=\czeroEdge@
+\xydefcsname@{dir1{>}}{\tip@}
+\xydefcsname@{dir^{>}}{\atip@}
+\xydefcsname@{dir_{>}}{\btip@}
+\xyletcsnamecsname@{dir0{>}}{dir{}}
+\xyletcsnamecsname@{dir{>}}{dir1{>}}
+\xydefcsname@{dir1{<}}{\reverseDirection@\tip@}
+\xydefcsname@{dir^{<}}{\reverseDirection@\btip@}
+\xydefcsname@{dir_{<}}{\reverseDirection@\atip@}
+\xyletcsnamecsname@{dir0{<}}{dir{}}
+\xyletcsnamecsname@{dir{<}}{dir1{<}}
+\xydef@\tip@{\tip@x\tip@@}
+\xydef@\atip@{\tip@x\atip@@}
+\xydef@\btip@{\tip@x\btip@@}
+\xydef@\tip@x#1{#1\egroup
+ \ctipEdge@
+ \def\Leftness@{.5}\def\Upness@{.5}%
+ \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@{\dottedSpread@\jot}}}
+\xydef@\tip@@{\atip@@\btip@@}
+\xydef@\atip@@{\xyatipfont\DirectionChar}
+\xydef@\btip@@{\xybtipfont\DirectionChar}
+\xydefcsname@{dir2{>}}{\Tip@}
+\xydefcsname@{dir2{<}}{\reverseDirection@\Tip@}
+\xydef@\Tip@{\kern2.5pt \vrule height2.5pt depth2.5pt width\z@
+ \Tip@@ \kern2.5pt \egroup
+ \U@c=2.5pt \D@c=2.5pt \L@c=2.5pt \R@c=2.5pt \Edge@c={\circleEdge}%
+ \def\Leftness@{.5}\def\Upness@{.5}%
+ \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@{\dottedSpread@\jot}}}
+\xydef@\Tip@@{\count@=\DirectionChar
+ \advance\count@-4 \ifnum\count@<\z@ \advance\count@128 \fi
+ \xyatipfont\char\count@
+ \advance\count@ 8 \ifnum127<\count@ \advance\count@-128 \fi
+ \xybtipfont\char\count@}
+\xydefcsname@{dir3{>}}{\Ttip@}
+\xydefcsname@{dir3{<}}{\composite@{}{:(-1,0)\dir3{>}}}
+\xydef@\Ttip@{\kern3.2pt \vrule height3.2pt depth3.2pt width\z@
+ \Ttip@@ \kern3.2pt \egroup
+ \U@c=3.2pt \D@c=3.2pt \L@c=3.2pt \R@c=3.2pt \Edge@c={\circleEdge}%
+ \def\Leftness@{.5}\def\Upness@{.5}%
+ \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@{\dottedSpread@\jot}}}
+\xydef@\Ttip@@{%
+ \setboxz@h\bgroup\reverseDirection@\line@ \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@
+ \kern-\L@c \boxz@ \kern\L@c
+ {\vDirection@(1,-.31)\xydashl@ \xyatipfont\char\DirectionChar}%
+ {\vDirection@(1,+.31)\xydashl@ \xybtipfont\char\DirectionChar}}
+\xydefcsname@{dir1{|}}{\stopper@}
+\xydefcsname@{dir^{|}}{\aboveDirection@\xydashl@
+ \shiftdir@\line@\z@ \pointlike@{}\xydashh@}
+\xydefcsname@{dir_{|}}{\belowDirection@\xydashl@
+ \shiftdir@\line@\z@ \pointlike@{}\xydashh@}
+\xydefcsname@{dir2{|}}{\stopper@ \double@\xydashh@}
+\xydefcsname@{dir3{|}}{\stopper@ \double@{2\xydashh@}}
+\xyletcsnamecsname@{dir0{|}}{dir{}}
+\xyletcsnamecsname@{dir{|}}{dir1{|}}
+\xydef@\stopper@{\tip@x\stopper@@}
+\xydef@\stopper@@{\setboxz@h{\count@=\SemiDirectionChar \advance\count@64
+ \ifnum127<\count@ \advance\count@-128 \fi \xydashfont\char\count@\/}%
+ \setboxz@h{\kern-.5\wdz@ \dimen@=\sd@Y\cosDirection\xydashl@
+ \ifnum\SemiDirectionChar=95 \dimen@=\sd@X\sd@Y\dimen@ \fi
+ \raise.5\dimen@\boxz@}%
+ \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@}
+\xydefcsname@{dir1{(}}{\hook@}
+\xydefcsname@{dir^{(}}{\ahook@}
+\xydefcsname@{dir_{(}}{\bhook@}
+\xyletcsnamecsname@{dir0{(}}{dir{}}
+\xyletcsnamecsname@{dir{(}}{dir1{(}}
+\xydefcsname@{dir1{)}}{\reverseDirection@\hook@}
+\xydefcsname@{dir^{)}}{\reverseDirection@\bhook@}
+\xydefcsname@{dir_{)}}{\reverseDirection@\ahook@}
+\xyletcsnamecsname@{dir0{)}}{dir{}}
+\xyletcsnamecsname@{dir{)}}{dir1{)}}
+\xydef@\hook@{\tip@x\hook@@}
+\xydef@\hook@@{\setboxz@h{\xybsqlfont
+ \vDirection@(1,-1){.707107\xybsqll@}%
+ \hbox{\DirectionChar
+ \kern-\d@Y\raise\d@X\hbox{\count@=\DirectionChar \advance\count@-32
+ \ifnum\count@<\z@ \advance\count@128 \fi \char\count@}}}%
+ \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@}
+\xydef@\ahook@{\tip@x\ahook@@}
+\xydef@\ahook@@{\setboxz@h{\xybsqlfont
+ \vDirection@(1,-1){.707107\xybsqll@}\kern-\d@X
+ \lower\d@Y\hbox{\DirectionChar
+ \kern-\d@Y\raise\d@X\hbox{\count@=\DirectionChar \advance\count@-32
+ \ifnum\count@<\z@ \advance\count@128 \fi \char\count@}}}%
+ \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@}
+\xydef@\bhook@{\tip@x\bhook@@}
+\xydef@\bhook@@{\setboxz@h{\xybsqlfont
+ \vDirection@(-1,-1){.707107\xybsqll@}\DirectionChar
+ \kern\d@X\raise\d@Y\hbox{\count@=\DirectionChar \advance\count@-96
+ \ifnum\count@<\z@ \advance\count@128 \fi \char\count@}}%
+ \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@}
+\xydefcsname@{dir^{'}}{\reverseDirection@\bturn@}
+\xydefcsname@{dir_{'}}{\reverseDirection@\aturn@}
+\xydefcsname@{dir^{`}}{\aturn@}
+\xydefcsname@{dir_{`}}{\bturn@}
+\xydef@\aturn@{\tip@x\aturn@@}
+\xydef@\aturn@@{\setboxz@h{\xybsqlfont
+ \vDirection@(1,-1){.707107\xybsqll@}\kern-\d@X
+ \lower\d@Y\hbox{\DirectionChar}}%
+ \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@}
+\xydef@\bturn@{\tip@x\bturn@@}
+\xydef@\bturn@@{\setboxz@h{\xybsqlfont
+ \vDirection@(-1,-1){.707107\xybsqll@}\DirectionChar}%
+ \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@}
+\xydef@\newdir#1#{\newdir@{#1}}
+\xydef@\newdir@#1#2#3{\xydefcsname@{dir#1{#2}}{\composite@{}{#3}}}
+\xydef@\shiftdir@#1#2{%
+ \setbox\z@=\hbox\bgroup#1\relax
+ \setboxz@h{\dimen@ii=#2\relax
+ \dimen@=-\cosDirection\dimen@ii \advance\dimen@-\L@c
+ \kern\dimen@ \lower\sinDirection\dimen@ii\boxz@}%
+ \wdz@\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@}
+\xylet@\tipjot@=\jot
+\xydefcsname@{dir1{>>}}{\shiftdir@\tip@\tipjot@ \tip@}
+\xydefcsname@{dir^{>>}}{\shiftdir@\atip@\tipjot@ \atip@}
+\xydefcsname@{dir_{>>}}{\shiftdir@\btip@\tipjot@ \btip@}
+\xydefcsname@{dir2{>>}}{\composite@{}{h!/\tipjot@/\dir2{>}*\dir2{>}}}
+\xydefcsname@{dir3{>>}}{\composite@{}{h!/\tipjot@/\dir3{>}*\dir3{>}}}
+\xyletcsnamecsname@{dir0{>>}}{dir{}}
+\xyletcsnamecsname@{dir{>>}}{dir1{>>}}
+\xydefcsname@{dir1{<<}}{\reverseDirection@ \shiftdir@\tip@\tipjot@ \tip@}
+\xydefcsname@{dir^{<<}}{\reverseDirection@ \shiftdir@\btip@\tipjot@ \btip@}
+\xydefcsname@{dir_{<<}}{\reverseDirection@ \shiftdir@\atip@\tipjot@ \atip@}
+\xydefcsname@{dir2{<<}}{\composite@{}{h!/-\tipjot@/\dir2{<}*\dir2{<}}}
+\xydefcsname@{dir3{<<}}{\composite@{}{h!/-\tipjot@/\dir3{<}*\dir3{<}}}
+\xyletcsnamecsname@{dir0{<<}}{dir{}}
+\xyletcsnamecsname@{dir{<<}}{dir1{<<}}
+\xydefcsname@{dir1{||}}{\shiftdir@\stopper@\xydashh@ \shiftdir@\stopper@\z@
+ \pointlike@{}\jot}
+\xydefcsname@{dir^{||}}{\shiftdir@{\aboveDirection@\xydashl@\line@}\xydashh@
+ \shiftdir@{\aboveDirection@\xydashl@\line@}\z@ \pointlike@{}\jot}
+\xydefcsname@{dir_{||}}{\shiftdir@{\belowDirection@\xydashl@\line@}\xydashh@
+ \shiftdir@{\belowDirection@\xydashl@\line@}\z@ \pointlike@{}\jot}
+\xydefcsname@{dir2{||}}{\shiftdir@\stopper@\xydashh@ \shiftdir@\stopper@\z@
+ \pointlike@{}\jot \double@\xydashh@}
+\xydefcsname@{dir3{||}}{\shiftdir@\stopper@\xydashh@ \shiftdir@\stopper@\z@
+ \pointlike@{}\jot \double@{2\xydashh@}}
+\xyletcsnamecsname@{dir0{||}}{dir{}}
+\xyletcsnamecsname@{dir{||}}{dir1{||}}
+\xydefcsname@{dir1{>|}}{\shiftdir@\stopper@\z@ \tip@}
+\xydefcsname@{dir2{>|}}{\composite@{}{\dir2{>}*\dir2{|}}}
+\xydefcsname@{dir3{>|}}{\composite@{}{\dir3{>}*\dir3{|}}}
+\xyletcsnamecsname@{dir0{>|}}{dir{}}
+\xyletcsnamecsname@{dir{>|}}{dir1{>|}}
+\xydefcsname@{dir1{>>|}}{\shiftdir@\stopper@\z@ \shiftdir@\tip@\tipjot@ \tip@}
+\xydefcsname@{dir2{>>|}}{\composite@{}{h!/\tipjot@/\dir2{>}*\dir2{>}*\dir2{|}}}
+\xydefcsname@{dir3{>>|}}{\composite@{}{h!/\tipjot@/\dir3{>}*\dir3{>}*\dir3{|}}}
+\xyletcsnamecsname@{dir0{>>|}}{dir{}}
+\xyletcsnamecsname@{dir{>>|}}{dir1{>>|}}
+\xydefcsname@{dir1{|<}}{\reverseDirection@ \shiftdir@\stopper@\z@ \tip@}
+\xydefcsname@{dir2{|<}}{\reverseDirection@ \shiftdir@\stopper@\z@ \Tip@}
+\xydefcsname@{dir3{|<}}{\reverseDirection@ \shiftdir@\stopper@\z@ \Ttip@}
+\xyletcsnamecsname@{dir0{|<}}{dir{}}
+\xyletcsnamecsname@{dir{|<}}{dir1{|<}}
+\xydefcsname@{dir1{|<<}}{\reverseDirection@
+ \shiftdir@\stopper@\z@ \shiftdir@\tip@\tipjot@ \tip@}
+\xydefcsname@{dir2{|<<}}{%
+ \composite@{}{h!/-\tipjot@/\dir2{<}*\dir2{<}*\dir2{|}}}
+\xydefcsname@{dir3{|<<}}{%
+ \composite@{}{h!/-\tipjot@/\dir3{<}*\dir3{<}*\dir3{|}}}
+\xyletcsnamecsname@{dir0{|<<}}{dir{}}
+\xyletcsnamecsname@{dir{|<<}}{dir1{|<<}}
+\xydefcsname@{dir1{|-}}{\shiftdir@\stopper@\z@
+ \shiftdir@\line@\z@ \pointlike@{}\jot}
+\xydefcsname@{dir^{|-}}{\shiftdir@{\aboveDirection@\xydashl@ \line@}\z@
+ \shiftdir@\line@\z@ \pointlike@{}\jot}
+\xydefcsname@{dir_{|-}}{\shiftdir@{\belowDirection@\xydashl@ \line@}\z@
+ \shiftdir@\line@\z@ \pointlike@{}\jot}
+\xydefcsname@{dir2{|-}}{\shiftdir@\stopper@\z@
+ \shiftdir@\line@\z@ \pointlike@{}\jot \double@\xydashh@}
+\xydefcsname@{dir3{|-}}{\shiftdir@\stopper@\z@
+ \shiftdir@\line@\z@ \pointlike@{}\jot \triple@\xydashh@}
+\xyletcsnamecsname@{dir0{|-}}{dir{}}
+\xyletcsnamecsname@{dir{|-}}{dir1{|-}}
+\xyletcsnamecsname@{dir{|=}}{dir2{|-}}
+\xydefcsname@{dir{+}}{%
+ \DN@##1{\composite@{}{##10\dir{|}*!C##10\dir{-}}}\addEQ@\next@}
+\xyletcsnamecsname@{dir0{+}}{dir{}}
+\xydefcsname@{dir{x}}{\vDirection@(1,1)\jot
+ \DN@##1{\composite@{}{##10\dir{|}*!C##10\dir{-}}}\addEQ@\next@}
+\xyletcsnamecsname@{dir0{x}}{dir{}}
+\xydefcsname@{dir{/}}{\vDirection@(1,-.3)\jot \stopper@}
+\xyletcsnamecsname@{dir0{/}}{dir{}}
+\xydefcsname@{dir{//}}{\vDirection@(1,-.3)\jot
+ \shiftdir@\stopper@\xydashh@ \stopper@}
+\xyletcsnamecsname@{dir0{//}}{dir{}}
+\xydefcsname@{dir{*}}{\solidpoint@}
+\xydef@\solidpoint@{%
+ \pointlike@{\kern-1.8pt\lower1.8pt\hbox{$\scriptstyle\bullet$}}\jot}
+\xyletcsnamecsname@{dir0{*}}{dir{}}
+\xydefcsname@{dir{o}}{\hollowpoint@}
+\xydef@\hollowpoint@{%
+ \pointlike@{\kern-1.8pt\lower1.8pt\hbox{$\scriptstyle\circ$}}\jot}
+\xyletcsnamecsname@{dir0{o}}{dir{}}
+\message{circles,}
+\xydef@\cir#1#{\hbox\bgroup
+ \afterVECTORorEMPTY{\xy@@{\R@=\X@c}\cir@}{\xy@@{\R@=\R@c}\cir@}#1@}
+\xydef@\cir@#1@#2{%
+ \DN@{#1}\ifx\next@\empty\else \xyerror@{illegal circle <radius>: must be
+ <vector> or <empty>}{}\fi
+ \afterCIRorDIAG{\xyFN@\cir@cir}{\xyFN@\cir@diag}#2@}
+\xydef@\cir@cir{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\cir@cir}%
+ \else \ifx @\next \DN@ @{\cir@i}%
+ \else \xyerror@{illegal <cir>: must have form <diag><orient><diag> or
+ <empty>}{}%
+ \fi\fi \next@}
+\xydef@\cir@diag{%
+ \DN@{\xyerror@{illegal <cir>: must have form <diag><orient><diag> or
+ <empty>}{}}%
+ \ifx @\next \ifnum\count@=8
+ \DN@ @{\def\CIRin@@{0}\def\CIRorient@@{\CIRfull@}\def\CIRout@@{7}\cir@i}%
+ \fi\fi \next@}
+\xydef@\cir@i{%
+ \ifnum\CIRin@@=8 \xyerror@{incomplete <cir> specification}{%
+The <cir> you specified as <diag><orient><diag> is not sufficiently specific.}%
+ \def\CIRin@@{0}\fi
+ \ifdim\R@<.5\p@ \R@=\z@ \zerodot
+ \else \CIRorient@@ \cirbuild@ \fi
+ \L@c=\R@ \R@c=\R@ \D@c=\R@ \U@c=\R@ \def\Leftness@{.5}\def\Upness@{.5}%
+ \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@\relax}%
+ \Edge@c={\circleEdge}\OBJECT@x}
+\xydef@\CIRin@@{3}
+\xydef@\CIRout@@{3}
+\xylet@\CIRorient@@=\empty
+\xydef@\afterCIRorDIAG#1#2{\def\afterCIR@{#1}\def\afterCIRDIAG@{#2}\xyFN@\CIR@}
+\xylet@\afterCIR@=\empty
+\xylet@\afterCIRDIAG@=\empty
+\xydef@\CIR@{\count@=8 \afterDIAG{\edef\CIRin@@{\the\count@}\xyFN@\CIR@@}}
+\xydef@\CIR@@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\CIR@@}%
+ \else\ifx ^\next
+ \DN@ ^{\def\CIRorient@@{\CIRacw@}%
+ \afterDIAG{\edef\CIRout@@{\the\count@}\afterCIR@}}%
+ \else\ifx _\next
+ \DN@_{\def\CIRorient@@{\CIRcw@}%
+ \afterDIAG{\edef\CIRout@@{\the\count@}\afterCIR@}}%
+ \else
+ \DN@{\def\CIRorient@@{\relax}\afterCIRDIAG@}%
+ \fi\fi\fi \next@}
+\xylet@\CIRtest@@=\relax
+\xydef@\CIRlo@@{0}
+\xydef@\CIRhi@@{0}
+\xydef@\CIRfull@{\def\CIRtest@@##1##2{##2}}
+\xydef@\cirbuild@{\cirrestrict@@ \multiply\count@8
+ \circhar@0\circhar@7\kern\dimen@
+ \circhar@1\circhar@6\kern\dimen@
+ \circhar@2\circhar@5\kern\dimen@
+ \circhar@3\circhar@4\kern\dimen@}
+\xydef@\circhar@#1{%
+ \setboxz@h{\circhar@@{#1}}\dimen@=\wdz@ \wdz@=\z@ \ht\z@=\R@ \dp\z@=\R@
+ \CIRtest@@#1{\styledboxz@}\setbox\z@=\copy\voidb@x}
+\xydef@\circhar@@#1{{\xycircfont \advance\count@#1\relax \char\count@}}
+\xydef@\cirrestrict@@{\begingroup \dimen@=\R@
+ \setboxz@h{\xycircfont\char\z@\char\@ne}\A@=\wdz@
+ \ifdim\R@<8\A@ \count@=\dimen@ \divide\count@\A@ \advance\count@\m@ne
+ \else\ifdim\R@<16\A@ \count@=\dimen@
+ \dimen@=2\A@ \divide\count@\dimen@ \advance\count@3
+ \else\ifdim\R@<32\A@ \count@=\dimen@
+ \dimen@=4\A@ \divide\count@\dimen@ \advance\count@7
+ \else \count@=15 \fi\fi\fi
+ \R@=\A@
+ \ifnum\count@<8 \multiply\R@\count@ \advance\R@\A@
+ \else\ifnum\count@<12 \multiply\R@\count@ \multiply\R@\tw@ \advance\R@-6\A@
+ \else\ifnum\count@<16 \multiply\R@\count@ \multiply\R@ 4 \advance\R@-28\A@
+ \else \multiply\R@ 32 \fi\fi\fi
+ \edef\@tmp{\endgroup \R@=\the\R@ \count@=\the\count@}\@tmp}
+\xydef@\CIRacw@{\count@@=\CIRin@@ \count@=\CIRout@@
+ \ifnum\count@=8 \count@=\count@@
+ \ifnum\count@<6 \advance\count@\tw@ \else \advance\count@-6 \fi \fi
+ \ifnum\count@@<\@ne \advance\count@@7 \else \advance\count@@\m@ne \fi
+ \ifnum\count@<\@ne \advance\count@7 \else \advance\count@\m@ne \fi
+ \ifnum\count@@>\count@ \let\CIRtest@@=\CIRtest@outside
+ \edef\CIRlo@@{\the\count@}\edef\CIRhi@@{\the\count@@}%
+ \else \let\CIRtest@@=\CIRtest@inside
+ \edef\CIRlo@@{\the\count@@}\edef\CIRhi@@{\the\count@}%
+ \fi}
+\xydef@\CIRcw@{\count@@=\CIRin@@ \count@=\CIRout@@
+ \ifnum\count@=8 \count@=\count@@
+ \ifnum\count@>\@ne \advance\count@-\tw@ \else \advance\count@6 \fi \fi
+ \ifnum\count@@<5 \advance\count@@\thr@@ \else \advance\count@@-5 \fi
+ \ifnum\count@<5 \advance\count@\thr@@ \else \advance\count@-5 \fi
+ \ifnum\count@@<\count@ \let\CIRtest@@=\CIRtest@outside
+ \edef\CIRlo@@{\the\count@@}\edef\CIRhi@@{\the\count@}%
+ \else \let\CIRtest@@=\CIRtest@inside
+ \edef\CIRlo@@{\the\count@}\edef\CIRhi@@{\the\count@@}%
+ \fi}
+\xydef@\CIRtest@inside#1#2{\let\next@=\relax
+ \ifnum\CIRlo@@>#1\else \ifnum#1<\CIRhi@@\DN@{#2}\fi\fi \next@}
+\xydef@\CIRtest@outside#1#2{\let\next@=\relax
+ \ifnum\CIRlo@@>#1\DN@{#2}\else \ifnum#1<\CIRhi@@\else\DN@{#2}\fi\fi \next@}
+\message{text;}
+\xydef@\txt{\hbox\bgroup \xyFN@\txt@}
+\xydef@\txt@{%
+ \addLT@\ifx\next \addGT@{\addLT@\DN@##1}{\A@=##1\txt@i}%
+ \else \DN@{\A@=\maxdimen \txt@i}\fi \next@}
+\xydef@\txt@i#1#{%
+ \setboxz@h{#1\mathstrut}\dimen@=\ht\z@ \advance\dimen@\dp\z@
+ \baselineskip=1.1\dimen@ \lineskip=.2\dimen@ \lineskiplimit=\lineskip
+ \def\txtline@@##1{\txtline@{#1}{##1}}\object@\txt@ii}
+\xylet@\txtline@@=\eat@
+\xydef@\txtline@#1#2{\relax\setboxz@h{#1{\ignorespaces #2\unskip}}%
+ \ifdim\A@<\wdz@ \setboxz@h{\hsize=\A@
+ \leftskip=0pt plus4em \rightskip=\leftskip
+ \parfillskip=0pt \parindent=0pt
+ \spaceskip=.3333em \xspaceskip=.5em
+ \pretolerance=9999 \tolerance=9999
+ \hyphenpenalty=9999 \exhyphenpenalty=9999
+ \vbox{#1\noindent\ignorespaces #2\unskip}}%
+ \else\ifdim\A@<\maxdimen\setboxz@h to\A@{\hfil\boxz@\hfil}\fi\fi
+ \boxz@}
+\xydef@\txt@ii#1{\vbox{%
+ \let\\=\cr
+ \tabskip=\z@skip \halign{\relax\hfil\txtline@@{##}\hfil\cr\leavevmode#1\crcr}}}
+\message{options;}
+\xylet@\xyoption@@=\relax
+\xydef@\xyoption#1{\DN@{#1}\edef\next@{\codeof\next@}%
+ \csname xyeveryrequest@\next@ @\endcsname
+ \xyinputorelse@{xy#1}{\xyoption@truncated#1@@@@@@@@@,#1@}%
+ \def\xyoption@@{#1}\edef\xyoption@@{\codeof\xyoption@@}
+ \expandafter\let\expandafter\next@\csname xy\xyoption@@ version\endcsname
+ \expandafter\let\csname xy\xyoption@@ loaded\endcsname=\next@
+ \runxywith@ \ignorespaces}
+\xydef@\xyoption@truncated#1#2#3#4#5#6#7@#8,#9@{%
+ \DN@{#7}\ifx\next@\empty \DN@##1##2{##2}\else\let\next@=\xyinputorelse@ \fi
+ \next@{xy#1#2#3#4#5#6}%
+ {\DN@{#1#2#3#4#5#6}\edef\next@{\codeof\next@}%
+ \xyerror@{No `\next@' option}{%
+Your \xyoption{#9} request could not be granted: the required^^J%
+file `xy#9.tex' could not be located. Please make sure that it is^^J%
+properly installed before continuing.}}}
+\xydef@\xyrequire#1{\DN@{#1}\edef\next@{\codeof\next@}%
+ \csname xyeveryrequest@\next@ @\endcsname
+ \expandafter\let\expandafter\next@\csname xy\codeof\next@ loaded\endcsname
+ \ifx \next@\relax \DN@{\xyoption{#1}}\else \DN@{\ignorespaces}\fi \next@}
+\xylet@\xywith@@=\empty
+\xydef@\runxywith@{\let\xywithdo@@=\xywithtest@ \xywith@@}
+\xydef@\xywithoption#1#2{\DN@{#1}\edef\next@{\codeof\next@}%
+ \expandafter\let\expandafter\nextii@\csname xy\next@ loaded\endcsname
+ \ifx \nextii@\relax
+ \expandafter\def\expandafter\xywith@@\expandafter{\xywith@@
+ \xywithdo@@{#1}{#2}}%
+ \else \expandafter\xywithrun@\expandafter{\next@}{#2}\fi}
+\xydef@\xywithtest@#1#2{\DN@{#1}\edef\next@{\codeof\next@}%
+ \ifx\next@\xyoption@@ \expandafter\xywithrun@\expandafter{\next@}{#2}\fi}
+\xydef@\xywithrun@#1#2{\csname xyeverywithoption@#1@\endcsname #2}
+\xydef@\xyevery@#1#2#3{\DN@{#2}\edef\next@{\codeof\next@}%
+ \expandafter\ifx\csname xyevery#1@\next@ @\endcsname\relax
+ \expandafter\let\csname xyevery#1@\next@ @\endcsname=\empty \fi
+ \DNii@##1{\expandafter\def\expandafter##1\expandafter{##1#3}}%
+ \expandafter\nextii@\csname xyevery#1@\next@ @\endcsname}
+\xydef@\xyeveryrequest{\xyevery@{request}}
+\xydef@\xyeverywithoption{\xyevery@{withoption}}
+\xydef@\xyprovide#1#2#3#4#5#6{%
+ \def\xyoption@@{#1}\edef\xyoption@@{\codeof\xyoption@@}\edef\next@{#3}%
+ \message{ Xy-pic option: #2 v.\next@}%
+ \expandafter\let\expandafter\nextii@\csname xy\xyoption@@ loaded\endcsname
+ \ifx \next@\nextii@ \message{not reloaded}\endinput
+ \else
+ \ifx \nextii@\relax\else \xyerror@{Option `\xyoption@@' version mismatch}{%
+You previously loaded, or the format has preloaded, a different version^^J%
+of this option. Just continue to try to load this version instead (and^^J%
+be prepared for a lot of warnings about redefinitions).}%
+ \fi
+ \expandafter\let\csname xy\xyoption@@ version\endcsname=\next@
+ \expandafter\let\expandafter\xyenddocmode@\csname DOCMODE\endcsname
+ \expandafter\let\csname DOCMODE\endcsname\xyprovidedocmode@
+ \xycatcodes
+ \fi \ignorespaces}
+\xydef@\xyendinput{\expandafter\let\csname DOCMODE\endcsname=\xyenddocmode@
+ \message{loaded}\xyuncatcodes\endinput}
+\expandafter\xylet@\expandafter\xyprovidedocmode@\csname DOCMODE\endcsname
+\xylet@\xyenddocmode@=\relax
+\xydef@\xydriversloaded@none{\do{unload}}
+\xylet@\xydriversloaded@@=\xydriversloaded@none
+\xylet@\xydriversselected@@=\empty
+\xylet@\xydriver@unload@support@@=\empty
+\xydef@\selectdriver@#1{\DN@{#1}\edef\next@{\codeof\next@}%
+ \expandafter\selectdriver@@\expandafter{\next@}}
+\xydef@\selectdriver@single#1{\xysetup@@{\def\xydriversselected@@{\do{#1}}%
+ \xyLoadDrivers@}\let\selectdriver@@=\changedriver@single}
+\xydef@\changedriver@single#1{\xysetup@@{\def\xydriversselected@@{\do{#1}}%
+ \xyReloadDrivers@}}
+\xydef@\selectdriver@multiple#1{\expandafter\xysetup@@\expandafter{%
+ \expandafter\def\expandafter\xydriversselected@@\expandafter{%
+ \xydriversselected@@ \do{#1}}%
+ \let\do=\activatedriver@ \xydriversselected@@}}
+\xydef@\UseSingleDriver{\let\selectdriver@@=\selectdriver@single}
+\xydef@\MultipleDrivers{\let\selectdriver@@=\selectdriver@multiple}
+\xydef@\xyLoadDrivers@{\let\do=\activatedriver@ \xydriversselected@@}
+\xydef@\xyReloadDrivers@{\activatedriver@{unload}\xyLoadDrivers@}
+\xylet@\xyReloadDrivers=\xyReloadDrivers@
+\xydef@\activatedriver@#1{%
+ \let\doii=\activatedriversupport@ \csname xydriver@#1@support@@\endcsname}
+\xydef@\activatedriversupport@#1#2{%
+ \expandafter\ifx\csname xy#1loaded\endcsname\relax\DN@{}%
+ \else\DN@{#2}\fi \next@}
+\UseSingleDriver
+\xydef@\xyselectoptionsupport@{\let\do=\activatedriver@ \xydriversselected@@}
+\xydef@\xyShowDrivers{{\W@{Loaded:}\let\do=\doShow \xydriversloaded@@
+ \let\next@=\empty
+ \def\do##1{\ifx\next@\empty \DN@{##1}%
+ \else \expandafter\DN@\expandafter{\next@, ##1}\fi}%
+ \xydriversselected@@\W@{Selected: \next@.}}}
+\def\doShow#1{\let\next@=\empty
+ \def\doii##1##2{\ifx\next@\empty \DN@{##1}%
+ \else \expandafter\DN@\expandafter{\next@, ##1}\fi}%
+ \csname xydriver@#1@support@@\endcsname
+ \W@{ <driver> #1 supports \next@.}}
+\xydef@\newdriver#1{%
+ \def\nextiii@##1{%
+ \expandafter\def\expandafter\xydriversloaded@@
+ \expandafter{\xydriversloaded@@\do{##1}}%
+ \expandafter\let\csname xydriver@\xyoption@@ @support@@\endcsname=\empty}%
+ \def\do##1{\DNii@{##1}\ifx\xyoption@@\nextii@ \let\nextiii@=\eat@ \fi}%
+ \xydriversloaded@@ \expandafter\nextiii@\expandafter{\xyoption@@}%
+ #1\relax
+ \DN@##1{\xywithoption{##1}{%
+ \selectdriver@{##1}\xyeveryrequest{##1}{\selectdriver@{##1}}}}%
+ \expandafter\next@\expandafter{\xyoption@@}\ignorespaces}
+\xydef@\xyaddsupport{\expandafter\xyadddriversupport@\expandafter{\xyoption@@}}
+\xydef@\xyaddunsupport{\xyadddriversupport@{unload}}
+\xydef@\xyadddriversupport@#1#2#3{%
+ \DNii@{#1}\edef\nextii@{\codeof\nextii@}%
+ \def\nextiii@{#2}\edef\nextiii@{\codeof\nextiii@}%
+\def\next{\xybug@{<driver> \nextii@\space not loaded}}%
+\def\do##1{\DN@{##1}\edef\next@{\codeof\next@}%
+ \ifx\next@\nextii@ \let\next=\relax \fi}\xydriversloaded@@ \next
+\def\next{\xybug@{<driver> \nextii@\space already supports \nextiii@}}%
+\def\doii##1##2{\DN@{##1}\edef\next@{\codeof\next@}%
+ \ifx\next@\nextiii@ \let\next=\relax \fi}\xydriversloaded@@ \next
+ \DN@##1##2{\ifx##1\relax \let##1=\empty \fi
+ \expandafter\def\expandafter##1\expandafter{##1\doii{##2}{#3}}}%
+ \expandafter\expandafter\expandafter\next@
+ \expandafter\expandafter\csname xydriver@\nextii@ @support@@\endcsname
+ \expandafter{\nextiii@}%
+ \DN@##1{\expandafter\xyeverywithoption\expandafter{\nextiii@}{%
+ \xytestforsupport@{##1}}}%
+ \expandafter\next@\expandafter{\nextii@}\xydriversloaded@@
+ \ignorespaces}
+\xydef@\xytestforsupport@#1{\def\do##1{\DN@{##1}\DNii@{#1}%
+ \ifx\next@\nextii@ \expandafter\xyselectoptionsupport@ \fi}}
+\xynew@{if}\ifunsupportwarnings@
+\xydef@\xyunsupportwarning@#1#2{{%
+ \DN@{#1}\edef\next@{\codeof\next@}
+ \expandafter\ifx\csname xywarn@unload@\next@ @\endcsname\relax
+ \expandafter\gdef\csname xywarn@unload@\next@ @\endcsname{}%
+ \ifunsupportwarnings@ \xyclosedown@@\xyunsupportwarnings@@ \fi
+ \global\unsupportwarnings@true
+ \expandafter\gdef\expandafter\xyunsupportwarnings@@\expandafter{%
+ \xyunsupportwarnings@@ \W@{ #2.}}%
+ \W@{}%
+ \W@{Xy-pic Warning: `\next@' reproduction is NOT EXACT\xytracelineno@:}%
+ \W@{ #2.}%
+ \W@{}%
+ \fi}}
+\xydef@\xyunsupportwarnings@@{\W@{}%
+ \W@{Xy-pic Warning: The produced DVI file is NOT EXACT:}}
+\xynew@{if}\ifsupportwarnings@
+\xydef@\xysupportwarning@#1#2{{%
+ \DN@{#1}\edef\next@{\codeof\next@}\DNii@{#2}\edef\nextii@{\codeof\nextii@}%
+ \expandafter\ifx\csname xywarn@\next@ @\nextii@ @\endcsname\relax
+ \expandafter\gdef\csname xywarn@\next@ @\nextii@ @\endcsname{}%
+ \ifsupportwarnings@ \xyclosedown@@\xysupportwarnings@@ \fi
+ \global\supportwarnings@true
+ \expandafter\gdef\expandafter\xysupportwarnings@@\expandafter{%
+ \xysupportwarnings@@ \driverextensioncomplain@{#1}{#2}}%
+ \W@{}%
+ \W@{Xy-pic Warning: The produced DVI file is NOT PORTABLE\xytracelineno@:}%
+ \driverextensioncomplain@{#1}{#2}%
+ \W@{}%
+ \fi}}
+\xydef@\xysupportwarnings@@{%
+ \W@{Xy-pic Warning: The produced DVI file is NOT PORTABLE:}}
+\xydef@\driverextensioncomplain@#1#2{%
+ \DN@{#1}\edef\next@{\codeof\next@}\DNii@{#2}\edef\nextii@{\codeof\nextii@}%
+ \W@{ It contains <driver> `\next@' \string\special s for the `\nextii@'
+ extension.}}
+\xydef@\dvimessage@#1#2{\xysupportwarning@{#1}{#2}}
+\xynew@{if}\ifxydrivernoloads@
+\xydef@\xydrivernoload@#1{\xyerror@{Could not load xy#1.tex}{}%
+ \xydrivernoloads@true}
+\xydef@\xydriverfail@#1{\xyerror@{Sorry, #1 not supported.}{}}
+\xydef@\xyunload@#1{\xywarning@{Unloading #1.}}
+\message{algorithms: directions,}
+\xydef@\DirectionfromtheDirection@{\noexpand\Direction=\the\Direction
+ \noexpand\d@X=\the\d@X \noexpand\d@Y=\the\d@Y
+ \def\noexpand\sd@X{\sd@X}\def\noexpand\sd@Y{\sd@Y}%
+ \noexpand\K@dXdY=\the\K@dXdY \noexpand\K@dYdX=\the\K@dYdX
+ \chardef\noexpand\DirectionChar=\the\DirectionChar
+ \chardef\noexpand\SemiDirectionChar=\the\SemiDirectionChar
+ \def\noexpand\cosDirection{\cosDirection}%
+ \def\noexpand\sinDirection{\sinDirection}%
+ \noexpand\resetupDirection@}
+\xydef@\Directiontest@@#1#2{#2}
+\xydef@\setupDirection@{%
+ \d@X=\X@c\advance\d@X-\X@p \d@Y=\Y@c\advance\d@Y-\Y@p
+ \Directiontest@@\relax\setupDirection@i}
+\xydef@\setupDirection@i{\DN@{\setupDirection@ii}%
+ \ifdim\d@X=\d@Y
+ \ifdim\zz@\d@Y \DN@{}%
+ \else\ifdim\d@X<\z@ \DN@{\dlDirection@{-1.4142\d@X}}%
+ \else \DN@{\urDirection@{1.4142\d@X}}\fi\fi
+ \else\ifdim\d@X<\d@Y
+ \ifdim\zz@\d@X \DN@{\uDirection@\d@Y}%
+ \else\ifdim\zz@\d@Y \DN@{\lDirection@{-\d@X}}%
+ \else\ifdim-\d@X=\d@Y \DN@{\ulDirection@{-1.4142\d@X}}\fi\fi\fi
+ \else
+ \ifdim\zz@\d@X \DN@{\dDirection@{-\d@Y}}%
+ \else\ifdim\zz@\d@Y \DN@{\rDirection@\d@X}%
+ \else\ifdim\d@X=-\d@Y \DN@{\drDirection@{1.4142\d@X}}\fi\fi\fi
+ \fi\fi \next@}
+\xydef@\dlDirection@{\Direction=\z@
+ \def\cosDirection{-.7071}\def\sinDirection{-.7071}\def\sd@X{-}\def\sd@Y{-}%
+ \chardef\DirectionChar=127\relax\chardef\SemiDirectionChar=127\relax
+ \K@dXdY=1\K@ \K@dYdX=1\K@ \fixedDirection@}
+\xydef@\dDirection@{\Direction=\K@
+ \def\cosDirection{0}\def\sinDirection{-1}\def\sd@Y{-}%
+ \edef\sd@X{\ifdim\X@c<\X@p-\else+\fi}%
+ \chardef\DirectionChar=15\relax\chardef\SemiDirectionChar=31\relax
+ \K@dXdY=\z@ \K@dYdX=\KK@\K@ \fixedDirection@}
+\xydef@\drDirection@{\dimen@ii=2\K@ \Direction=\dimen@ii
+ \def\cosDirection{+.7071}\def\sinDirection{-.7071}\def\sd@X{+}\def\sd@Y{-}%
+ \chardef\DirectionChar=31\relax\chardef\SemiDirectionChar=63\relax
+ \K@dXdY=-1\K@ \K@dYdX=-1\K@ \fixedDirection@}
+\xydef@\rDirection@{\dimen@ii=3\K@ \Direction=\dimen@ii
+ \def\cosDirection{+1}\def\sinDirection{0}\def\sd@X{+}%
+ \edef\sd@Y{\ifdim\Y@c<\Y@p-\else+\fi}%
+ \chardef\DirectionChar=47\relax\chardef\SemiDirectionChar=95\relax
+ \K@dXdY=\KK@\K@ \K@dYdX=\z@ \fixedDirection@}
+\xydef@\urDirection@{\dimen@ii=4\K@ \Direction=\dimen@ii
+ \def\cosDirection{+.7071}\def\sinDirection{+.7071}\def\sd@X{+}\def\sd@Y{+}%
+ \chardef\DirectionChar=63\relax\chardef\SemiDirectionChar=127\relax
+ \K@dXdY=1\K@ \K@dYdX=1\K@ \fixedDirection@}
+\xydef@\uDirection@{\dimen@ii=-3\K@ \Direction=\dimen@ii
+ \def\cosDirection{0}\def\sinDirection{+1}\def\sd@Y{+}%
+ \edef\sd@X{\ifdim\X@c<\X@p-\else+\fi}%
+ \chardef\DirectionChar=79\relax\chardef\SemiDirectionChar=31\relax
+ \K@dXdY=\z@ \K@dYdX=\KK@\K@ \fixedDirection@}
+\xydef@\ulDirection@{\dimen@ii=-2\K@ \Direction=\dimen@ii
+ \def\cosDirection{-.7071}\def\sinDirection{+.7071}\def\sd@X{-}\def\sd@Y{+}%
+ \chardef\DirectionChar=95\relax\chardef\SemiDirectionChar=63\relax
+ \K@dXdY=-1\K@ \K@dYdX=-1\K@ \fixedDirection@}
+\xydef@\lDirection@{\Direction=-\K@
+ \def\cosDirection{-1}\def\sinDirection{0}\def\sd@X{-}%
+ \edef\sd@Y{\ifdim\Y@c<\Y@p-\else+\fi}%
+ \chardef\DirectionChar=111\relax\chardef\SemiDirectionChar=95\relax
+ \K@dXdY=\KK@\K@ \K@dYdX=\z@ \fixedDirection@}
+\xydef@\fixedDirection@#1{\dimen@ii=#1\relax
+ \d@X=\cosDirection\dimen@ii \d@Y=\sinDirection\dimen@ii
+ \resetupDirection@}
+\xydef@\setupDirection@ii{%
+ \ifdim\d@X<\z@ \def\sd@X{-}\else \def\sd@X{+}\fi
+ \ifdim\d@Y<\z@ \def\sd@Y{-}\else \def\sd@Y{+}\fi
+ \K@dXdY=\sd@X\d@X \ifdim\K@dXdY<500pt \multiply\K@dXdY\KK@ \fi
+ \dimen@=\sd@Y\d@Y
+ \advance\dimen@\ifdim\dimen@<\z@-\fi.5\KK@ \divide\dimen@\KK@
+ \ifdim\dimen@=\z@\else
+ \advance\K@dXdY by.5\dimen@\relax \divide\K@dXdY\dimen@
+ \fi \K@dXdY=\sd@X\sd@Y\K@dXdY
+ \K@dYdX=\sd@Y\d@Y \ifdim\K@dYdX<500pt \multiply\K@dYdX\KK@ \fi
+ \dimen@=\sd@X\d@X
+ \advance\dimen@\ifdim\dimen@<\z@-\fi.5\KK@ \divide\dimen@\KK@
+ \ifdim\dimen@=\z@\else
+ \advance\K@dYdX by.5\dimen@\relax \divide\K@dYdX\dimen@
+ \fi \K@dYdX=\sd@X\sd@Y\K@dYdX
+ \Direction=\maxdimen
+ \ifnum\K@dXdY<-\K@ \else \ifnum\K@<\K@dXdY \else
+ \ifdim \d@Y<\z@
+ \Direction=\K@ \advance\Direction-\K@dXdY
+ \else
+ \Direction=\K@ \multiply\Direction-\thr@@ \advance\Direction-\K@dXdY
+ \fi\fi\fi
+ \ifnum-\K@<\K@dYdX \ifnum\K@dYdX<\K@
+ \ifdim \d@X<\z@
+ \Direction=-\K@ \advance\Direction\K@dYdX
+ \else
+ \Direction=\K@ \multiply\Direction\thr@@ \advance\Direction\K@dYdX
+ \fi\fi\fi
+ \ifnum\Direction=\maxdimen
+ \Direction=\K@dYdX \advance\Direction-\K@dXdY
+ \advance\Direction\ifnum\Direction<\z@-\fi\@ne \divide\Direction\tw@
+ \ifnum\K@dXdY<\z@ \advance\Direction\K@ \advance\Direction\K@
+ \else \advance\Direction-\K@ \advance\Direction-\K@ \fi
+ \fi
+ \imposeDirection@i
+ \resetupDirection@
+ }
+\xydef@\imposeDirection@{\count@@=\Direction
+ \loop@\ifnum\count@@>4096 \advance\count@@-8192 \repeat@
+ \loop@\ifnum\count@@<-4096 \advance\count@@8192 \repeat@
+ \def\sd@X{+}\ifnum\count@@<\K@ \relax
+ \ifnum\count@@>-3072 \def\sd@X{-}\fi\fi
+ \def\sd@Y{+}\ifnum\count@@<3072 \relax
+ \ifnum\count@@>-\K@ \relax\def\sd@Y{-}\fi\fi
+ \imposeDirection@i
+ \d@X=\cosDirection\xydashl@ \d@Y=\sinDirection\xydashl@
+ \resetupDirection@}
+\xydef@\imposeDirection@i{%
+ \count@@=\K@ \multiply\count@@ by8 \advance\count@@\Direction
+ \count@=\count@@ \advance\count@\KK@ \divide\count@64 \advance\count@\m@ne
+ \loop@\ifnum127<\count@ \advance\count@-128 \repeat@
+ \chardef\DirectionChar\count@
+ \advance\count@@16 \divide\count@@\KK@ \advance\count@@\m@ne
+ \loop@\ifnum127<\count@@ \advance\count@@-128 \repeat@
+ \chardef\SemiDirectionChar\count@@
+ \setbox8=\hbox{\xydashfont\SemiDirectionChar\/}%
+ \quotient@@\cosDirection{\sd@X\wd8}\xydashl@
+ \setbox8=\hbox{\xydashfont\count@=\SemiDirectionChar\advance\count@-64
+ \ifnum\count@<\z@ \advance\count@128 \fi \char\count@\/}%
+ \quotient@@\sinDirection{\sd@Y\wd8}\xydashl@}
+\xydef@\getxyDirection@#1{\xy@@\bgroup\xy@@ix@{#1}%
+ \xy@@{\expandafter\POS\the\toks9\relax\setupDirection@
+ \edef\next@{\egroup \Direction=\the\Direction}\next@ \imposeDirection@ }}
+\xydef@\reverseDirection@{%
+ \d@X=-\d@X \d@Y=-\d@Y
+ \ifdim\d@X<\z@ \def\sd@X{-}\else \def\sd@X{+}\fi
+ \ifdim\d@Y<\z@ \def\sd@Y{-}\else \def\sd@Y{+}\fi
+ \dimen@=4\K@ \ifnum\Direction<\z@ \advance\Direction\dimen@
+ \else \advance\Direction-\dimen@ \fi
+ \count@=\DirectionChar \ifnum\count@<64 \advance\count@64
+ \else \advance\count@-64 \fi \chardef\DirectionChar=\count@
+ \edef\cosDirection{\if-\cosDirection\else-\cosDirection\fi}%
+ \edef\sinDirection{\if-\sinDirection\else-\sinDirection\fi}%
+ \resetupDirection@}
+\xydef@\aboveDirection@#1{%
+ \dimen@=\d@X \d@X=-\d@Y \d@Y=\dimen@
+ \dimen@=\K@dXdY \K@dXdY=-\K@dYdX \K@dYdX=-\dimen@
+ \ifdim\d@X<\z@ \def\sd@X{-}\else \def\sd@X{+}\fi
+ \ifdim\d@Y<\z@ \def\sd@Y{-}\else \def\sd@Y{+}\fi
+ \dimen@=2\K@ \ifdim 1\Direction<\dimen@\else \dimen@=-6\K@ \fi
+ \advance\Direction\dimen@
+ \count@=\DirectionChar \ifnum\count@<96 \advance\count@32
+ \else \advance\count@-96 \fi \chardef\DirectionChar=\count@
+ \count@=\SemiDirectionChar \ifnum\count@<64 \advance\count@64
+ \else \advance\count@-64 \fi \chardef\SemiDirectionChar=\count@
+ \let\tmp@=\cosDirection
+ \edef\cosDirection{\if-\sinDirection\else-\sinDirection\fi}%
+ \let\sinDirection=\tmp@
+ \dimen@=#1\relax \d@X=\cosDirection\dimen@ \d@Y=\sinDirection\dimen@
+ \resetupDirection@}
+\xydef@\belowDirection@#1{%
+ \dimen@=\d@X \d@X=\d@Y \d@Y=-\dimen@
+ \dimen@=\K@dXdY \K@dXdY=-\K@dYdX \K@dYdX=-\dimen@
+ \ifdim\d@X<\z@ \def\sd@X{-}\else \def\sd@X{+}\fi
+ \ifdim\d@Y<\z@ \def\sd@Y{-}\else \def\sd@Y{+}\fi
+ \dimen@=-2\K@\ifdim 1\Direction<\dimen@\dimen@=6\K@\fi
+ \advance\Direction\dimen@
+ \count@=\DirectionChar \ifnum\count@<32 \advance\count@96
+ \else \advance\count@-32 \fi \chardef\DirectionChar=\count@
+ \count@=\SemiDirectionChar \ifnum\count@<64 \advance\count@64
+ \else \advance\count@-64 \fi \chardef\SemiDirectionChar=\count@
+ \let\tmp@=\sinDirection
+ \edef\sinDirection{\if-\cosDirection\else-\cosDirection\fi}%
+ \let\cosDirection=\tmp@
+ \dimen@=#1\relax \d@X=\cosDirection\dimen@ \d@Y=\sinDirection\dimen@
+ \resetupDirection@}
+\xydef@\vDirection@(#1,#2)#3{\dimen@ii=#3\relax
+ \dimen@=#1\dimen@ii \dimen@ii=#2\dimen@ii
+ \d@X=\cosDirection\dimen@ \advance\d@X-\sinDirection\dimen@ii
+ \d@Y=\sinDirection\dimen@ \advance\d@Y \cosDirection\dimen@ii
+ \X@p=\X@c \advance\X@p-\d@X \Y@p=\Y@c \advance\Y@p-\d@Y
+ \setupDirection@\ignorespaces}
+\xydef@\resetDirection@{%
+ \d@X=\X@c\advance\d@X-\X@p \d@Y=\Y@c\advance\d@Y-\Y@p
+ \let\next@=\resetupDirection@
+ \ifdim\sd@X\d@X<\z@ \let\next@=\setupDirection@i \fi
+ \ifdim\sd@Y\d@Y<\z@ \let\next@=\setupDirection@i \fi
+ \next@}
+\xydef@\resetupDirection@{%
+ \edef\Directiontest@@##1##2{\noexpand\DN@{##2}%
+ \noexpand\ifdim\noexpand\d@X=\the\d@X\relax
+ \noexpand\ifdim\noexpand\d@Y=\the\d@Y\relax \noexpand\DN@{##1}%
+ \noexpand\fi\noexpand\fi \noexpand\next@}}
+\xydef@\unsetupDirection@{\def\Directiontest@@##1##2{##2}}
+\uDirection@\xydashl@
+\message{edges,}
+\xynew@{if}\ifInside@
+\xydef@\zeroEdge#1{%
+ \ifcase#1\relax \or \Inside@false \or \dimen@=\z@
+ \or \else \Edge@c={\rectangleEdge}\fi}
+\xydef@\circleEdge#1{\ifcase#1\expandafter\circleEdge@
+ \or \expandafter\circleUnder@ \or \dimen@=\R@c
+ \or \expandafter\circleProp@ \or \expandafter\circleInner@
+ \else \expandafter\circleOuter@ \fi}
+\xydef@\circleEdge@{\DN@{\ellipseEdge@}%
+ \ifdim\R@c=\L@c\relax \ifdim\U@c=\D@c\relax
+ \ifdim\R@c=\U@c\DN@{\circlecentredEdge@}%
+ \else\DN@{\ellipsecentredEdge@}\fi
+ \fi\fi \next@}
+\xydef@\circleProp@{\DN@{\reverseDirection@\ellipseEdge@}%
+ \ifdim\R@c=\L@c\relax \ifdim\U@c=\D@c\relax
+ \ifdim\R@c=\U@c\DN@{\reverseDirection@\circlecentredEdge@}%
+ \else\DN@{\reverseDirection@\ellipsecentredEdge@}\fi
+ \fi\fi \next@}
+\xydef@\circleUnder@{\Inside@false
+ \ifdim\X@p=\X@c \relax \ifdim\Y@p=\Y@c \Inside@true \fi \fi
+ \ifInside@ \else \expandafter \circleCentre@ \fi}
+\xydef@\circleCentre@{{%
+ \ifdim\L@c=\R@c \relax\else
+ \dimen@=\R@c\advance\dimen@-\L@c \divide\dimen@\tw@
+ \advance\X@c\dimen@ \advance\R@c-\dimen@ \fi
+ \d@X=\X@c \advance\d@X-\X@p \d@X=\ifdim\d@X<\z@-\fi\d@X
+ \ifdim\U@c=\D@c\relax \else
+ \dimen@=\U@c\advance\dimen@-\D@c \divide\dimen@\tw@
+ \advance\Y@c\dimen@ \advance\U@c-\dimen@ \fi
+ \d@Y=\Y@c \advance\d@Y-\Y@p \d@Y=\ifdim\d@Y<\z@-\fi\d@Y
+ \DN@{}\ifdim\d@X>\R@c \relax \else \ifdim\d@Y>\U@c \relax
+ \else \ifdim\U@c=\R@c \DN@{\circlecentredUnder@}%
+ \else \DN@{\ellipsecentredUnder@}\fi
+ \fi\fi \next@}}
+\xydef@\circleInner@{\DN@{\ellipseInner@}%
+ \ifdim\R@c=\L@c\relax \ifdim\U@c=\D@c\relax
+ \ifdim\R@c=\U@c\DN@{\circlecentredInner@}%
+ \else\DN@{\ellipsecentredInner@}\fi
+ \fi\fi \next@}
+\xydef@\circleOuter@{\DN@{\ellipseOuter@}%
+ \ifdim\R@c=\L@c\relax \ifdim\U@c=\D@c\relax
+ \ifdim\R@c=\U@c\DN@{\circlecentredOuter@}%
+ \else\DN@{\ellipsecentredOuter@}\fi
+ \fi\fi \next@}
+\xydef@\circlecentredEdge@{%
+ \dimen@=-\cosDirection\R@c \advance\X@c\dimen@
+ \dimen@=-\sinDirection\R@c \advance\Y@c\dimen@}
+\xydef@\circlecentredUnder@{%
+ \loop\ifdim\R@c>100\p@ \circlescale@ \repeat
+ \edef\tmp@{\expandafter\removePT@\the\R@c}\dimen@=\tmp@\R@c
+ \edef\tmp@{\expandafter\removePT@\the\d@X}\advance\dimen@-\tmp@\d@X
+ \edef\tmp@{\expandafter\removePT@\the\d@Y}\advance\dimen@-\tmp@\d@Y
+ \ifdim\dimen@>\z@ \aftergroup\Inside@true \fi}
+%%\xydef@\circlescale@{\divide\R@c\KK@ \divide\d@X\KK@ \divide\d@Y\KK@ }
+\xydef@\circlescale@{\divide\R@c\KK@ \divide\d@X\KK@ \divide\d@Y\KK@ }
+\xydef@\circlecentredInner@{%
+ \L@c=\sd@X\cosDirection\R@c \D@c=\sd@Y\sinDirection\R@c
+ \R@c=\L@c \U@c=\D@c \Edge@c={\rectangleEdge}}
+\xydef@\circlecentredOuter@{%
+ \L@c=\R@c \D@c=\R@c \U@c=\D@c \Edge@c={\rectangleEdge}}
+\xydef@\ellipsecentredEdge@{\bgroup \X@p=\X@c \Y@p=\Y@c
+ \ifdim\U@c>\R@c
+ \X@c=\cosDirection\U@c \Y@c=\sinDirection\U@c
+ \quotient@\tmp@\U@c\R@c \X@c=\tmp@\X@c \R@c=\U@c
+ \else
+ \X@c=\cosDirection\R@c \Y@c=\sinDirection\R@c
+ \quotient@\tmp@\R@c\U@c \Y@c=\tmp@\Y@c
+ \fi
+ \advance\X@c\X@p \advance\Y@c\Y@p
+ \setupDirection@ \X@c=\X@p \Y@c=\Y@p \circlecentredEdge@
+ \d@X=\X@c \advance\d@X-\X@p \d@Y=\Y@c \advance\d@Y-\Y@p
+ \ifdim\U@c>\L@c \quotient@\tmp@\L@c\U@c \d@X=\tmp@\d@X
+ \else \quotient@\tmp@\U@c\R@c \d@Y =\tmp@\d@Y \fi
+ \X@c=\X@p \advance\X@c\d@X \Y@c=\Y@p \advance\Y@c\d@Y
+ \edef\next@{\egroup \X@c=\the\X@c \Y@c=\the\Y@c}\next@ }%
+\xydef@\ellipsecentredUnder@{%
+ \ifdim\R@c>64\p@ \circlescale@ \divide\U@c\KK@
+ \else \ifdim\U@c>64\p@ \circlescale@ \divide\U@c\KK@ \fi\fi
+ \edef\tmp@{\expandafter\removePT@\the\R@c}\d@Y=\tmp@\d@Y
+ \edef\tmp@{\expandafter\removePT@\the\U@c}\d@X=\tmp@\d@X
+ \R@c=\tmp@\R@c \circlecentredUnder@ }
+\xydef@\ellipsecentredOuter@{\Edge@c={\rectangleEdge}}
+\xydef@\ellipsecentredInner@{%
+ \bgroup \X@p=\X@c \Y@p=\Y@c \ellipsecentredEdge@
+ \advance\X@c-\X@p \L@c=\ifdim\X@c<\z@-\fi\X@c
+ \advance\Y@c-\Y@p \D@c=\ifdim\Y@c<\z@-\fi\Y@c
+ \edef\next@{\egroup \L@c=\the\L@c \D@c=\the\D@c}\next@
+ \R@c=\L@c \U@c=\D@c \Edge@c={\rectangleEdge}}
+\xydef@\ellipseEdge@{\bgroup
+ \A@=\R@c \B@=\U@c
+ \ifdim\R@c=\L@c \d@X=\z@
+ \else \d@X=.5\R@c \advance\d@X-.5\L@c
+ \advance\A@\L@c \divide\A@\tw@ \fi
+ \ifdim\U@c=\D@c \d@Y=\z@
+ \else \d@Y=.5\U@c \advance\d@Y-.5\D@c
+ \advance\B@\D@c \divide\B@\tw@ \fi
+ \bgroup
+ \L@c=\A@ \U@c=\B@
+ \R@p=\U@c \advance\R@p\L@c \multiply\R@p\tw@
+ \ifdim\B@<\A@ \quotient@\tmp@\U@c\L@c \R@c=\tmp@\p@ \D@c=\p@
+ \quotient@\tmp@\R@p\L@c \R@p=\tmp@\p@
+ \else
+ \ifdim\A@<\B@ \quotient@\tmp@\L@c\U@c \D@c=\tmp@\p@ \R@c=\p@
+ \quotient@\tmp@\R@p\U@c \R@p=\tmp@\p@
+ \else
+ \R@c=\p@ \D@c=\p@ \quotient@\tmp@\R@p\U@c \R@p=\tmp@\p@
+ \fi\fi
+ \quotient@\sd@X\d@X\L@c \d@X=\sd@X\p@
+ \quotient@\sd@Y\d@Y\U@c \d@Y=\sd@Y\p@
+ \loop
+ \bgroup \U@p=-\p@ \D@p=\z@
+ \ifdim\R@c<\p@
+ \edef\tmp@{\expandafter\removePT@\the\R@c}\dimen@=\tmp@\R@p
+ \advance\d@X\cosDirection\dimen@
+ \else \advance\d@X\cosDirection\R@p \fi
+ \edef\sd@X{\expandafter\removePT@\the\d@X}%
+ \advance\U@p\sd@X\d@X
+ \ifdim\R@c<\p@
+ \edef\tmp@{\expandafter\removePT@\the\R@c}\dimen@=\tmp@\d@X
+ \advance\D@p\cosDirection\dimen@
+ \else \advance\D@p\cosDirection\d@X \fi
+ \ifdim\D@c<\p@
+ \edef\tmp@{\expandafter\removePT@\the\D@c}\dimen@=\tmp@\R@p
+ \advance\d@Y\sinDirection\dimen@
+ \else \advance\d@Y\sinDirection\R@p \fi
+ \edef\sd@Y{\expandafter\removePT@\the\d@Y}%
+ \advance\U@p\sd@Y\d@Y
+ \ifdim\D@c<\p@
+ \edef\tmp@{\expandafter\removePT@\the\D@c}\dimen@=\tmp@\d@Y
+ \advance\D@p\sinDirection\dimen@
+ \else \advance\D@p\sinDirection\d@Y \fi
+ \multiply\D@p\tw@
+ \dimen@=\ifdim\U@p<\z@-\fi\U@p
+ \ifdim\dimen@<.01\p@ \U@p=\z@
+ \else
+ \quotient@\tmp@\U@p\D@p \U@p=\tmp@\p@
+ \ifdim\U@p<\z@\xywarning@{poor convergence}\U@p=\z@
+ \else \advance\R@p-\U@p \U@p=\ifdim\U@p<\z@-\fi\U@p
+ \fi \fi
+ \edef\next@{\egroup \R@p=\the\R@p \U@p=\the\U@p \D@p=\the\D@p}\next@
+ \ifdim\U@p>\z@ \repeat
+ \edef\next@{\egroup \dimen@=\the\R@p}\next@
+ \edef\tmp@{\expandafter\removePT@\the\dimen@}%
+ \ifdim\B@<\A@ \dimen@=\tmp@\B@ \else \dimen@=\tmp@\A@ \fi
+ \dimen@=-\dimen@
+ \advance\X@c\cosDirection\dimen@
+ \advance\Y@c\sinDirection\dimen@
+ \edef\next@{\egroup \X@c=\the\X@c \Y@c=\the\Y@c}\next@ }%
+\xydef@\ellipseOuter@{\Edge@c={\rectangleEdge}}
+\xydef@\ellipseInner@{%
+ \bgroup \X@p=\X@c \Y@p=\Y@c \ellipseEdge@
+ \d@X=\X@c\advance\d@X-\X@p
+ \ifdim\d@X>\z@ \R@p=\d@X \L@p=\R@p
+ \ifdim\L@c=\R@c\else\advance\L@p\L@c \advance\L@p-\R@c \fi
+ \else \L@p=-\d@X \R@p=\L@p
+ \ifdim\L@c=\R@c \else\advance\R@p\R@c \advance\R@p-\L@c \fi
+ \fi
+ \d@Y=\Y@c\advance\d@Y-\Y@p
+ \ifdim\d@Y>\z@ \U@p=\d@Y \D@p=\U@p
+ \ifdim\D@c=\U@c\else\advance\D@p\D@c \advance\D@p-\U@c \fi
+ \else \D@p=-\d@Y \U@p=\D@p
+ \ifdim\D@c=\U@c\else\advance\U@p\U@c \advance\U@p-\D@c \fi
+ \fi
+ \edef\next@{\egroup
+ \L@c=\the\L@p \D@c=\the\D@p \R@c=\the\R@p \U@c=\the\U@p}%
+ \next@ \Edge@c={\rectangleEdge}}
+\xydef@\rectangleEdge#1{\ifcase#1\expandafter\rectangleEdge@
+ \or \expandafter\rectangleUnder@ \or \expandafter\rectangleDist@
+ \or \expandafter\rectangleProp@
+ \else \relax \fi}
+\xydef@\rectangleEdge@{%
+ \ifdim\d@Y<-.05\p@ \rectangleEdge@i
+ \else\ifdim\d@Y<.05\p@ \rectangleEdge@ii
+ \else \rectangleEdge@iii\fi\fi
+ \resetupDirection@}
+\xydef@\rectangleEdge@i{%
+ \ifdim\d@X<-.05\p@
+ \settomin@\X@c+\R@c\U@c\d@X\d@Y \settomin@\Y@c+\U@c\R@c\d@Y\d@X%1a
+ \else\ifdim\d@X<.05\p@ \advance\Y@c\U@c
+ \else \settomin@\X@c-\L@c\U@c\d@X\d@Y \settomin@\Y@c+\U@c\L@c\d@Y\d@X
+ \fi\fi}
+\xydef@\rectangleEdge@ii{%
+ \ifdim\d@X<-.05\p@ \advance\X@c\R@c
+ \else\ifdim\d@X<.05\p@
+ \else \advance\X@c-\L@c
+ \fi\fi}
+\xydef@\rectangleEdge@iii{%
+ \ifdim\d@X<-.05\p@
+ \settomin@\X@c+\R@c\D@c\d@X\d@Y \settomin@\Y@c-\D@c\R@c\d@Y\d@X%3a
+ \else\ifdim\d@X<.05\p@ \advance\Y@c-\D@c
+ \else \settomin@\X@c-\L@c\D@c\d@X\d@Y \settomin@\Y@c-\D@c\L@c\d@Y\d@X
+ \fi\fi}
+\xydef@\settomin@#1#2#3#4#5#6{%
+ \edef\nextii@{\A@=\the\A@ \B@=\the\B@}\quotient@\next@{#5}{#6}\nextii@
+ \dimen@=\sd@X\sd@Y\next@#4\relax
+ \ifdim#3<\dimen@ \dimen@=#3\fi \advance#1#2\dimen@}
+\xydef@\rectangleUnder@{\Inside@false
+ \ifdim\X@p=\X@c \ifdim\Y@p=\Y@c \Inside@true \fi\fi
+ \ifInside@ \else
+ \dimen@=\X@p \advance\dimen@-\X@c
+ \ifdim \dimen@>-\L@c \relax \ifdim\dimen@<\R@c
+ \dimen@=\Y@p \advance\dimen@-\Y@c
+ \ifdim \dimen@>-\D@c \relax \ifdim\dimen@<\U@c
+ \Inside@true
+ \fi\fi\fi\fi\fi }
+\xydef@\rectangleDist@{\let\next@=\rectangleDist@i
+ \ifdim\d@X<-.05\p@ \dimen@=\R@c
+ \else\ifdim\d@X<.05\p@ \dimen@=\z@ \DN@{\dimen@=\dimen@ii}%
+ \else \dimen@=\L@c \fi\fi
+ \ifdim\d@Y<-.05\p@ \dimen@ii=\U@c
+ \else\ifdim\d@Y<.05\p@ \DN@{}%
+ \else \dimen@ii=\D@c \fi\fi
+ \next@}
+\xydef@\rectangleDist@i{%
+ \begingroup \quotient@\next\p@{\sd@X\cosDirection\p@}%
+ \edef\next{\endgroup \dimen@=\next\dimen@}\next
+ \begingroup \quotient@\next\p@{\sd@Y\sinDirection\p@}%
+ \edef\next{\endgroup \dimen@ii=\the\dimen@ii}\next
+ \ifdim\dimen@ii<\dimen@ \dimen@=\dimen@ii \fi}
+\xydef@\rectangleProp@{%
+ \enter@{\A@=\the\A@ \B@=\the\B@ \DirectionfromtheDirection@}%
+ \reverseDirection@
+ \dimen@=1\Direction \count@=\K@ \multiply\count@\tw@
+ \ifnum \Direction>\count@
+ \DN@{0}%
+ \advance\dimen@-2\K@ \quotient@\nextii@{\dimen@}{2\K@}%
+ \else\ifnum \Direction>\z@
+ \dimen@=-\dimen@ \advance\dimen@2\K@ \quotient@\next@{\dimen@}{2\K@}%
+ \DNii@{0}%
+ \else\ifnum \Direction>-\count@
+ \DN@{1}%
+ \quotient@\nextii@{-\dimen@}{2\K@}%
+ \else
+ \advance\dimen@4\K@ \quotient@\next@{\dimen@}{2\K@}%
+ \DNii@{1}%
+ \fi\fi\fi
+ \advance\X@c-\L@c \dimen@=\L@c \advance\dimen@\R@c
+ \ifdim\dimen@=\z@ \advance\X@c 2\L@c \else \advance\X@c\next@\dimen@ \fi
+ \advance\Y@c+\U@c \dimen@=\D@c \advance\dimen@\U@c
+ \ifdim\dimen@=\z@ \advance\Y@c-2\U@c \advance\Y@c\Upness@\U@c
+ \else \advance\Y@c-\nextii@\dimen@ \fi
+ \leave@}
+\message{connections;}
+\xydef@\Creset@@{}
+\xydef@\Cshavep@@{\noCshavep@@}
+\xydef@\Cshavec@@{\noCshavec@@}
+\xydef@\Cslidep@@{\noCslidep@@}
+\xydef@\Cslidec@@{\noCslidec@@}
+\xydef@\Calong@@{\noCalong@@}
+\xydef@\Cintercept@@{\noCintercept@@}
+\xydef@\Cbreak@@{\noCbreak@@}
+\xydef@\Clast@@{\noClast@@}
+\xylet@\lastbreak@@=\empty
+\xydef@\noCshavep@@{\setupDirection@
+ \enter@{\cfromthec@ \DirectionfromtheDirection@}%
+ \reverseDirection@ \cfromp@ \the\Edge@c\z@
+ \pfromc@ \leave@ \resetDirection@}
+\xydef@\noCshavec@@{\setupDirection@ \the\Edge@c\z@ \resetDirection@}
+\xydef@\noCslidep@@#1{\dimen@=#1\relax
+ \advance\X@p\cosDirection\dimen@ \advance\Y@p\sinDirection\dimen@
+ \resetDirection@}
+\xydef@\noCslidec@@#1{\dimen@=#1\relax
+ \advance\X@c\cosDirection\dimen@ \advance\Y@c\sinDirection\dimen@
+ \resetDirection@}
+\xydef@\noCalong@@#1{%
+ \d@X=#1\d@X \d@Y=#1\d@Y \X@c=\X@p \Y@c=\Y@p \advance\X@c\d@X \advance\Y@c\d@Y
+ \resetupDirection@}
+\xydef@\noCintercept@@{\enter@{\pfromthep@}%
+ \begingroup\Creset@@ \edef\tmp@{\endgroup
+ \X@origin=\the\X@p \Y@origin=\the\Y@p \R@c=\the\d@X \U@c=\the\d@Y}\tmp@
+ \loop@\dimen@=\ifdim\R@c<\z@-\fi\R@c \advance\dimen@\ifdim\U@c<\z@-\fi\U@c
+ \ifdim\dimen@>10\p@ \advance\R@c \ifdim\R@c<\z@-\fi 16sp \divide\R@c\KK@
+ \advance\U@c \ifdim\U@c<\z@-\fi 16sp \divide\U@c\KK@ \repeat@
+ \intersect@ \leave@}
+\xydef@\noCbreak@@{\edef\lastbreak@@{\cfromthec@}}
+\xydef@\noClast@@{\Creset@@ \edef\lastbreak@@{\cfromthep@}}
+\xydef@\no@@{\setupDirection@ \edef\lastbreak@@{\cfromthep@}%
+ \enter@{\cfromthec@\pfromthep@\DirectionfromtheDirection@}%
+ \edef\Creset@@{\cfromthec@ \pfromthep@ \DirectionfromtheDirection@}%
+ \edef\next@{{\sd@X}{\sd@Y}}\expandafter\straightcheckoverlap@\next@
+ \setupDirection@ \the\Edge@c\z@
+ \swap@\reverseDirection@\the\Edge@c\z@\swap@\reverseDirection@
+ \resetDirection@
+ \edef\Cshavep@@{\DirectionfromtheDirection@
+ \pfromthep@\noexpand\resetDirection@}%
+ \edef\Cshavec@@{\DirectionfromtheDirection@
+ \cfromthec@\noexpand\resetDirection@}%
+ \leave@
+ \def\Cslidep@@{\noCslidep@@}\def\Cslidec@@{\noCslidec@@}%
+ \def\Calong@@{\noCalong@@}\def\Cintercept@@{\noCintercept@@}%
+ \def\Cbreak@@{\noCbreak@@}\def\Clast@@{\noClast@@}\noinsert@}
+\xydef@\noinsert@{\ifHidden@\else
+ \ifdim\Y@c>\Y@max \Y@max=\Y@c \fi \ifdim\Y@p>\Y@max \Y@max=\Y@p \fi
+ \ifdim\Y@c<\Y@min \Y@min=\Y@c \fi \ifdim\Y@p<\Y@min \Y@min=\Y@p \fi
+ \ifdim\X@c>\X@max \X@max=\X@c \fi \ifdim\X@p>\X@max \X@max=\X@p \fi
+ \ifdim\X@c<\X@min \X@min=\X@c \fi \ifdim\X@p<\X@min \X@min=\X@p \fi
+ \fi}
+\xydef@\Spread@@{}
+\xydef@\checkoverlap@@{}
+\xydef@\straight@#1{\setupDirection@ \def\Spread@@{#1}%
+ \edef\Creset@@{\cfromthec@ \pfromthep@ \DirectionfromtheDirection@}%
+ \edef\lastbreak@@{\cfromthep@}%
+ \edef\next@{{\sd@X}{\sd@Y}}\expandafter\straightcheckoverlap@\next@
+ \setupDirection@ \the\Edge@c\z@
+ \swap@\reverseDirection@\the\Edge@c\z@\swap@\reverseDirection@
+ \resetDirection@
+ \edef\Cshavep@@{\DirectionfromtheDirection@
+ \pfromthep@\noexpand\resetDirection@}%
+ \edef\Cshavec@@{\DirectionfromtheDirection@
+ \cfromthec@\noexpand\resetDirection@}%
+ \noinsert@
+ \straight@typeset
+ \def\Cbreak@@{\straightCbreak@}\def\Clast@@{\straightClast@}%
+ \def\Cslidep@@{\noCslidep@@}\def\Cslidec@@{\noCslidec@@}%
+ \def\Calong@@{\noCalong@@}\def\Cintercept@@{\noCintercept@@}%
+ \Creset@@}
+\xydef@\straightcheckoverlap@#1#2{\def\checkoverlap@@{%
+ \ifdim#1\X@p>#1\X@c \let\next@=\relax \fi
+ \ifdim#2\Y@p>#2\Y@c \let\next@=\relax \fi}}
+\xydef@\straight@typeset{%
+ \ifInvisible@ \let\next@=\relax
+ \else\ifdim 1\Direction<-2\K@ \DN@{\straightv@}%
+ \else\ifdim 1\Direction<\z@ \DN@{\straighth@}%
+ \else\ifdim 1\Direction<2\K@ \DN@{\straightv@}%
+ \else \DN@{\straighth@}%
+ \fi\fi\fi\fi \checkoverlap@@ \next@}
+\xylet@\nextbreak@@=\empty
+\xydef@\straightCbreak@{\connectRestore@
+ \edef\nextbreak@@{\cfromthec@}%
+ \Creset@@ \swap@ \the\Edge@c4\enter@{\cmergethec@}\lastbreak@@ \leave@
+ \swap@ \the\Edge@c4\enter@{\cmergethec@}\nextbreak@@ \leave@
+ \setupDirection@
+ \the\Edge@c\z@
+ \swap@ \reverseDirection@ \the\Edge@c\z@ \swap@ \reverseDirection@
+ \resetDirection@ \noinsert@ \straight@typeset
+ \Creset@@ \let\lastbreak@@=\nextbreak@@}
+\xydef@\straightClast@{\connectRestore@
+ \Creset@@ \swap@ \the\Edge@c4\enter@{\cmergethec@}\lastbreak@@ \leave@
+ \swap@
+ \setupDirection@
+ \the\Edge@c\z@
+ \swap@\reverseDirection@ \the\Edge@c\z@ \swap@\reverseDirection@
+ \resetDirection@ \noinsert@ \straight@typeset
+ \Creset@@ \edef\lastbreak@@{\cfromthep@}}
+\xydef@\straighth@{\setbox\z@=\hbox{%
+ \setbox8=\copy\lastobjectbox@
+ \A@=\wd8\relax \B@=\dp8\relax \advance\B@\ht8\relax
+ \ifdim \A@=\z@ \count@@=\m@ne
+ \else \dimen@=\sd@X\d@X \divide\dimen@\A@ \count@@=\dimen@ \fi
+ \Spread@@
+ \ifdim\d@X>\z@ \advance\X@c-\wd8\relax\fi
+ \dimen@=-\sd@X\wd8\relax
+ \multiply\dimen@\K@dYdX \divide\dimen@\K@
+ \ifdim\d@X>\z@ \advance\Y@c\dimen@ \advance\Y@c-\Leftness@\dimen@
+ \else \advance\Y@c\Leftness@\dimen@ \fi
+ \dimen@=\wd8\relax \A@=\sd@X\d@X \advance\A@-\dimen@
+ \B@=\sd@X\dimen@ \multiply\B@\K@dYdX \divide\B@\K@
+ \advance\B@-\d@Y \B@=\sd@Y\B@
+ \count@=\count@@ \advance\count@\m@ne
+ \ifnum\z@<\count@ \divide\A@\count@ \divide\B@\count@ \fi
+ \A@=-\sd@X\A@ \B@=\sd@Y\B@ \wd8=\A@
+ \kern\X@c \count@=\z@
+ \loop@\ifnum\count@<\count@@ \advance\count@\@ne
+ \raise\Y@c\copy8\relax \advance\Y@c\B@ \repeat@}%
+ \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@ {\Drop@@}}
+\xydef@\straightv@{\setbox\z@=\vtop{%
+ \setbox8=\copy\lastobjectbox@
+ \A@=\wd8\relax \B@=\dp8\relax \advance\B@\ht8\relax
+ \ifdim \B@=\z@ \count@@=\m@ne
+ \else \dimen@=\sd@Y\d@Y \divide\dimen@\B@ \count@@=\dimen@ \fi
+ \Spread@@
+ \dimen@=\dp8\relax \advance\dimen@\ht8\relax
+ \B@=\sd@Y\d@Y \advance\B@-\dimen@
+ \A@=\sd@Y\dimen@ \multiply\A@\K@dXdY \divide\A@\K@ \advance\A@-\d@X
+ \A@=\sd@X\A@ \count@=\count@@ \advance\count@\m@ne
+ \ifnum\z@<\count@ \divide\B@\count@ \divide\A@\count@ \fi
+ \B@=\sd@Y\B@ \A@=\sd@X\A@ \ht8=\B@ \dp8=\z@
+ \ifdim\d@Y<\z@
+ \advance\Y@c\dimen@ \advance\Y@c\Upness@\B@
+ \else
+ \advance\dimen@\Upness@\B@ \advance\Y@c-\dimen@ \advance\Y@c\B@
+ \fi
+ \advance\Y@c\B@
+ \ifdim\d@X<\z@ \else \advance\X@c-\wd8\relax \fi
+ \null \kern-\Y@c \count@=\z@
+ \loop@\ifnum\count@<\count@@ \advance\count@\@ne
+ \nointerlineskip \moveright\X@c\copy8\relax \advance\X@c\A@
+ \repeat@}%
+ \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@ {\Drop@@}}
+\message{ Xy-pic loaded}\xyuncatcodes \endinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xy16textures.tex b/macros/generic/diagrams/xypic/texinputs/xy16textures.tex
new file mode 100644
index 0000000000..79b773b025
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xy16textures.tex
@@ -0,0 +1,122 @@
+%% xy16textures.tex from $Id: xy16textures.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Textures v1.6'' driver interface option.
+%% Copyright (c) 1995-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{16textures}{Textures v1.6 driver}{\stripRCS$Revision: 3.7 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xydef@\oldTextures@@#1{\dvimessage@{Textures v1.6}{#1}}
+\newdriver{%
+ \xyaddsupport{color}\oldtexturesColor@@
+ \xyaddsupport{crayon}\oldtexturesCrayon@@
+ \xyaddsupport{ps}\oldtexturesPS@@
+ \xyaddsupport{rotate}\oldtexturesRotate@@
+ \xyaddsupport{line}\oldtexturesLine@@
+ \xyaddsupport{frame}\oldtexturesFrames@@
+ \xyaddsupport{tile}\oldtexturesTiles@@
+ \xyaddsupport{cmtip}\relax
+}
+\xydef@\oldTexturesColours@{\oldtexturesPStypes@
+ \let\xylocalColor@=\xyNoColor@@ \def\xycolor@{\xycolor@@}%
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-c}{\xydrivernoload@{ps-c}}%
+ \installPScolor@ }\else\DN@{}\fi \next@
+ \ifx\xycolor@@\xyNoColor@ \let\xycolor@@=\xycolor@raw@@\fi
+ \ifx\xycrayolaloaded\empty \DN@{\xystandardcolors@\oldtexturesCrayon@@{}}%
+ \else\let\next@=\xystandardcolors@ \fi \next@
+ \let\xycolorwarning@=\relax
+ \let\oldtexturesColor@@=\relax
+ \let\UnloadColor@@=\NooldTexturesColor@
+ }
+\xydef@\oldtexturesColor@@{\oldTexturesColours@}
+\xydef@\NooldTexturesColor@{%
+ \let\xylocalColor@=\xyNoColor@@
+ \let\xycolor@=\xyNoColor@
+ \let\xycolorwarning@=\xycolorwarning@@
+ \let\oldtexturesColor@@=\oldTexturesColours@
+ \let\UnloadColor@@=\UnloadColor@
+ }
+\xydef@\oldtexturesCrayon@@{\oldtexturesColor@@\oldtexturesCrayon@}
+\xydef@\oldtexturesCrayon@{\installCrayolaColors@}%
+\xydef@\oldtexturesPS@@{\oldtexturesPS@}
+\xydef@\oldtexturesPSunload@{\UnloadPS@
+ \ifx\xyrealshipout@\undefined\else
+ \ifx\shipout\xyrealshipout@
+ \else \let\shipout=\xyrealshipout@\fi\fi
+ \let\installxyps@@=\relax
+ \let\UnloadPS@@=\UnloadPS@
+ \let\oldtexturesPS@@=\oldtexturesPS@ }
+\xydef@\oldTexturesSpecial@#1{\firstPS@@\special{postscript #1}}
+\xydef@\oldTexturesMacro@#1{\special{postscript {#1}xy}}
+\xydef@\oldTexturesInclude@#1{\firstPS@@\special{rawpostscriptfile #1}}
+\xydef@\oldTexturesRaw@#1{\firstPS@@\special{rawpostscript #1}}
+\xydef@\oldtexturesPStypes@{%
+ \xyinputorelse@{xyps-ps}{\xydrivernoload@{ps-ps}}%
+ \ifx\PSspecial@@\oldTexturesSpecial@\else
+ \let\PSspecial@@=\oldTexturesSpecial@
+ \let\PSmacro@@=\oldTexturesMacro@
+ \let\PSdict@@=\oldTexturesRaw@
+ \let\PSraw@@=\oldTexturesRaw@
+ \let\PSinclude@@=\oldTexturesInclude@
+ \let\PSspecialdict@@=\oldTexturesRaw@
+ \let\xyPSobeylines@@=\obeyoldTextureslines@
+ \oldTextures@@{PostScript}%
+ \fi
+ \oldtexturesCurrpt@ \@PSshipout }
+{\catcode`\^^M=\active
+ \gdef\next{\catcode`\^^M=\active \let^^M=\par \obeyspaces}}
+\xylet@\obeyoldTextureslines@=\next
+\xydef@\oldtexturesCurrpt@{\let\xyPScurrpt@@=\oldtexturesCurrpt@@}%
+\xydef@\oldtexturesCurrpt@@{\PSspecial@@{xyi}\PSraw@@{userdict begin xyx end}}
+\xydef@\oldtexturesPS@{\oldtexturesPStypes@
+ \let\oldtexturesPS@@=\relax
+ \let\UnloadPS@@=\oldtexturesPSunload@
+ \let\installxyps@@=\@PSshipout \installxyps@ }
+\xydef@\oldtexturesRotate@@{\oldtexturesRotate@}
+\xydef@\oldtexturesRotate@{\oldtexturesPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-r}{\xydrivernoload@{ps-r}}%
+ \xyRotScale@@ \installPSrotscale@ }%
+ \else\DN@{\xydriverfail@{rotations are}\UnloadRotate@\relax}\fi
+ \next@ }
+\xydef@\oldtexturesLine@@{\oldtexturesLine@}
+\xydef@\oldtexturesLine@{\oldtexturesPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-l}{\xydrivernoload@{ps-l}}%
+ \installPSline@ }%
+ \else\DN@{\xydriverfail@{line-styles are}\UnloadLine@\relax}\fi
+ \next@ }
+\xydef@\oldtexturesFrames@@{\oldtexturesFrames@}
+\xydef@\oldtexturesFrames@{\oldtexturesPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-f}{\xydrivernoload@{ps-f}}%
+ \installPSframes@ }%
+ \else\DN@{\xydriverfail@{frames are}\UnloadPSFrames@\relax}\fi
+ \next@ }
+\xydef@\oldtexturesTiles@@{\oldtexturesTiles@}
+\xydef@\oldtexturesTiles@{\oldtexturesPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-t}{\xydrivernoload@{ps-t}}%
+ \installPSpatterns@ \xystandardpatterns@}%
+ \else\DN@{\xydriverfail@{Patterns are}\UnloadPSpatterns@\relax}\fi
+ \next@ }
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xy17oztex.tex b/macros/generic/diagrams/xypic/texinputs/xy17oztex.tex
new file mode 100644
index 0000000000..fed8bf2a6a
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xy17oztex.tex
@@ -0,0 +1,121 @@
+%% xy17oztex.tex from $Id: xy17oztex.doc,v 3.8 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``OzTeX v1.7'' driver interface option.
+%% Copyright (c) 1995-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{17oztex}{OzTeX v1.7 driver}{\stripRCS$Revision: 3.8 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xydef@\OzTeX@@#1{\dvimessage@{OzTeX v1.7}{#1}}
+\newdriver{%
+ \xyaddsupport{color}\oldoztexColor@@
+ \xyaddsupport{crayon}\oldoztexCrayon@@
+ \xyaddsupport{ps}\oldoztexPS@@
+ \xyaddsupport{rotate}\oldoztexRotate@@
+ \xyaddsupport{line}\oldoztexLine@@
+ \xyaddsupport{frame}\oldoztexFrames@@
+ \xyaddsupport{tile}\oldoztexTiles@@
+ \xyaddsupport{cmtip}\relax
+}
+\xydef@\oldoztexColor@@{\oldOzTeXColours@}
+\xydef@\oldOzTeXColours@{\oldOzTeXPStypes@
+ \let\xylocalColor@=\xyNoColor@@ \def\xycolor@{\xycolor@@}%
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-c}{\xydrivernoload@{ps-c}}%
+ \installPScolor@ }\else\DN@{}\fi \next@
+ \ifx\xycrayolaloaded\empty \DN@{\xystandardcolors@\oldOzTeXCrayon@@{}}%
+ \else\let\next@=\xystandardcolors@\fi \next@
+ \let\xycolorwarning@=\relax
+ \let\oldoztexColor@@=\relax
+ \let\UnloadColor@@=\NooldOzTeXColor@
+ }
+\xydef@\NooldOzTeXColor@{%
+ \let\xylocalColor@=\xyNoColor@@
+ \let\xycolor@=\xyNoColor@
+ \let\xycolorwarning@=\xycolorwarning@@
+ \let\oldoztexColor@@=\oldOzTeXColours@
+ \let\UnloadColor@@=\UnloadColor@
+ }
+\xydef@\oldOzTeXCrayon@@{\installCrayolaColors@}
+\xydef@\oldoztexPS@@{\oldoztexPS@}
+\xydef@\oldoztexPSunload@{\UnloadPS@
+ \def\xyPSdictname{}\UsePSdict@@false
+ \let\installxyps@@=\relax
+ \let\UnloadPS@@=\UnloadPS@
+ \xyPSshapes@true
+ \let\oldoztexPS@@=\oldoztexPS@ }
+\xydef@\oldOzTeXSpecial@#1{\special{empty.ps {#1}xy}}
+\xydef@\oldOzTeXMacro@#1{\special{empty.ps {#1}xy}}
+\xydef@\oldOzTeXDict@#1{\special{empty.ps @obxy{#1}stopped pop @eoxy}}
+\xydef@\oldOzTeXinclude@#1{\special{#1}}
+\xydef@\oldOzTeXraw@#1{\special{empty.ps @boxy #1 @eoxy}}%
+\xydef@\oldOzTeXPStypes@{%
+ \xyinputorelse@{xyps-ps}{\xydrivernoload@{ps-ps}}%
+ \ifx\PSspecial@@\oldOzTeXSpecial@\else
+ \let\PSspecial@@=\oldOzTeXSpecial@
+ \let\PSmacro@@=\oldOzTeXMacro@
+ \let\PSdict@@=\oldOzTeXDict@
+ \let\PSraw@@=\oldOzTeXraw@
+ \let\PSinclude@@=\oldOzTeXinclude@
+ \let\xyPSobeylines@@=\obeyoldOzTeXlines@
+ \let\PSspecialdict@@=\oldOzTeXDict@
+ \oldOzTeX@@{PostScript}%
+ \fi
+ \oldOzTeXCurrpt@ }
+{\catcode`\^^M=\active
+ \gdef\next{\catcode`\^^M=\active \let^^M=\space \obeyspaces}}
+\xylet@\obeyoldOzTeXlines@=\next
+\xydef@\oldOzTeXCurrpt@{\let\xyPScurrpt@@=\OzTeXCurrpt@@}%
+\xydef@\oldOzTeXCurrpt@@{}
+\xydef@\oldoztexPS@@{\oldOzTeXPStypes@
+ \let\installxyps@@=\old@OzTeX@PS@
+ \installxyps@ }
+\xydef@\old@OzTeX@PS@{\UsePSdict@@true
+ \let\includePSmessage@=\xyoldOzTeXheader
+ \ifx\undefined\xyPSdictname\def\xyPSdictname{global.ps}\fi}
+\xydef@\xyoldOzTeXheader#1#2#3{\UsePSdict@@true}
+\xydef@\oldoztexLine@@{\oldoztexLine@}
+\xydef@\oldoztexLine@{\oldOzTeXPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-l}{\xydrivernoload@{ps-l}}\installPSline@ }%
+ \else\DN@{\xydriverfail@{line-styles are}\UnloadLine@\relax}\fi
+ \next@ }
+\xydef@\oldoztexFrames@@{\oldOzTeXFrames@}
+\xydef@\oldOzTeXFrames@{\oldOzTeXPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-f}{\xydrivernoload@{ps-f}}\installPSframes@ }%
+ \else\DN@{\xydriverfail@{frames are}\UnloadPSFrames@\relax}\fi
+ \next@ }
+\xydef@\oldoztexTiles@@{\oldOzTeXTiles@}
+\xydef@\oldOzTeXTiles@{\oldOzTeXPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-t}{\xydrivernoload@{ps-t}}\installPSpatterns@
+ \xystandardpatterns@ }%
+ \else\DN@{\xydriverfail@{Patterns are}\UnloadPSpatterns@\relax}\fi
+ \next@ }
+\xydef@\oldoztexRotate@@{\oldOzTeXRotate@}
+\xydef@\oldOzTeXRotate@{\oldOzTeXPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-r}{\xydrivernoload@{ps-r}}%
+ \xyRotScale@@ \installPSrotscale@ \xyPSshapes@false }%
+ \else\DN@{\xydriverfail@{rotations are}\UnloadRotate@\relax}\fi
+ \next@ }
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xy2cell.tex b/macros/generic/diagrams/xypic/texinputs/xy2cell.tex
new file mode 100644
index 0000000000..05d3534f48
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xy2cell.tex
@@ -0,0 +1,668 @@
+%% xy2cell.tex from $Id: xy2cell.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``2-cell'' feature.
+%% Copyright (c) 1993-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this macro package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{2cell}{Two-cell feature}{\stripRCS$Revision: 3.7 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xyrequire{curve}\xycatcodes
+\message{two-cells,}
+\xydef@\UseTwocells{\definesupermorphism{twocell}{%
+ \xy@{start of 2-cell}{\begingroup}%
+ \twocell@}}
+\xydef@\UseHalfTwocells{%
+ \definesupermorphism{uppertwocell}{%
+ \xy@{start of 2-cell}{\begingroup}%
+ \uppertwocell@}%
+ \definesupermorphism{lowertwocell}{%
+ \xy@{start of 2-cell}{\begingroup}%
+ \lowertwocell@}}
+\xydef@\UseCompositeMaps{\definesupermorphism{compositemap}{%
+ \xy@{start composite-map}{\begingroup}%
+ \compositemap@}}
+\xydef@\UseAllTwocells{%
+ \UseTwocells \UseHalfTwocells \UseCompositeMaps }
+\xydef@\supermorphism#1[#2]#3{\def\afterMORPHISM{[#2]#3}#1}
+\xydef@\afterMORPHISM{}
+\xydef@\definesupermorphism#1#2{%
+ \expandafter\def\csname x#1\endcsname{\supermorphism{#2}}%
+ \expandafter\def\csname u#1\endcsname{\supermorphism{#2}[-1,0]{}}%
+ \expandafter\def\csname d#1\endcsname{\supermorphism{#2}[1,0]{}}%
+ \expandafter\def\csname l#1\endcsname{\supermorphism{#2}[0,-1]{}}%
+ \expandafter\def\csname r#1\endcsname{\supermorphism{#2}[0,1]{}}%
+ \expandafter\def\csname uu#1\endcsname{\supermorphism{#2}[-2,0]{}}%
+ \expandafter\def\csname dd#1\endcsname{\supermorphism{#2}[2,0]{}}%
+ \expandafter\def\csname ll#1\endcsname{\supermorphism{#2}[0,-2]{}}%
+ \expandafter\def\csname rr#1\endcsname{\supermorphism{#2}[0,2]{}}%
+ \expandafter\def\csname ur#1\endcsname{\supermorphism{#2}[-1,1]{}}%
+ \expandafter\def\csname ul#1\endcsname{\supermorphism{#2}[-1,-1]{}}%
+ \expandafter\def\csname dr#1\endcsname{\supermorphism{#2}[1,1]{}}%
+ \expandafter\def\csname dl#1\endcsname{\supermorphism{#2}[1,-1]{}}%
+ \expandafter\def\csname uul#1\endcsname{\supermorphism{#2}[-2,-1]{}}%
+ \expandafter\def\csname uur#1\endcsname{\supermorphism{#2}[-2,1]{}}%
+ \expandafter\def\csname ull#1\endcsname{\supermorphism{#2}[-1,-2]{}}%
+ \expandafter\def\csname urr#1\endcsname{\supermorphism{#2}[-1,2]{}}%
+ \expandafter\def\csname ddl#1\endcsname{\supermorphism{#2}[2,-1]{}}%
+ \expandafter\def\csname ddr#1\endcsname{\supermorphism{#2}[2,1]{}}%
+ \expandafter\def\csname dll#1\endcsname{\supermorphism{#2}[1,-2]{}}%
+ \expandafter\def\csname drr#1\endcsname{\supermorphism{#2}[1,2]{}}%
+ \expandafter\def\csname uull#1\endcsname{\supermorphism{#2}[-2,-2]{}}%
+ \expandafter\def\csname uurr#1\endcsname{\supermorphism{#2}[-2,2]{}}%
+ \expandafter\def\csname ddll#1\endcsname{\supermorphism{#2}[2,-2]{}}%
+ \expandafter\def\csname ddrr#1\endcsname{\supermorphism{#2}[2,2]{}}}
+\newdir{=>}{!/5pt/\dir{=}!/2.5pt/\dir{=}*!/-5pt/\dir2{>}}
+\xydef@\arrowobject#1{\def\Arrowobject@{#1}}
+\xydef@\Arrowobject@{\dir{=>}}
+\xydef@\twocell@{\toks6={3.5}\toks5={@}\toks7={@}\toks8={@}\toks3={f}%
+ \tw@cell@ }
+\xydef@\uppertwocell@{\toks6={7}\toks5={@}\toks7={@}\toks8={@}\toks3={o}%
+ \tw@cell@ }
+\xydef@\lowertwocell@{\toks6={-7}\toks5={@}\toks7={@}\toks8={@}\toks3={o}%
+ \tw@cell@ }
+\xydef@\compositemap@{\toks6={3.5}\toks5={@}\toks7={@}\toks8={@}\toks3={t}%
+ \tw@cell@ }
+\xydef@\tw@cell@@@{%
+ \expandafter\ifx\the\toks6\omit\relax\toks6={}\else
+ \expandafter\ifx\expandafter @\the\toks7\relax\expandafter\dimen@\the\toks6\p@
+ \expandafter\if\the\toks3t\relax\dimen@=\p@
+ \else\expandafter\if\the\toks3o\divide\dimen@\tw@
+ \ifdim\dimen@<\z@ \dimen@ii-\p@ \advance\dimen@ii\dimen@
+ \dimen@=\dimen@ii \else \dimen@\p@ \fi
+ \else\dimen@\p@
+ \fi\fi
+ \edef\tmp@{\expandafter\removePT@\the\dimen@}%
+ \expandafter\toks\expandafter7\expandafter{\tmp@}\fi
+ \expandafter\ifx\expandafter @\the\toks8\relax
+ \expandafter\dimen@\the\toks6\p@
+ \expandafter\if\the\toks3t\relax\dimen@\p@
+ \else\expandafter\if\the\toks3o\divide\dimen@\tw@
+ \ifdim\dimen@<\z@ \dimen@ii-\p@ \advance\dimen@ii\dimen@
+ \dimen@=\dimen@ii \else \dimen@\p@ \fi
+ \else\dimen@\p@
+ \fi\fi
+ \edef\tmp@{\expandafter\removePT@\the\dimen@}%
+ \expandafter\toks\expandafter8\expandafter{\tmp@}\fi
+ \expandafter\ifx\expandafter @\the\toks5\relax
+ \expandafter\dimen@\the\toks6\p@
+ \expandafter\if\the\toks3o\divide\dimen@ by-4\relax
+ \else\dimen@\z@\fi
+ \edef\tmp@{\expandafter\removePT@\the\dimen@}%
+ \expandafter\toks\expandafter5\expandafter{\tmp@}\fi
+ \fi
+ \twocellmod@
+ \expandafter\if\the\toks3t\relax
+ \edef\tmp@{.[\noexpand\twocell@@@@{\the\toks6}{\the\toks5}%
+ {\the\toks7}{\the\toks8}{\the\toks3}%
+ {\the\toks2}{\the\toks1}{\the\toks@}{\the\toks4}!!!].\afterMORPHISM}%
+ \else
+ \edef\tmp@{.[\noexpand\twocell@@@@{\the\toks6}{\the\toks5}%
+ {\the\toks7}{\the\toks8}{\the\toks3}%
+ {\the\toks1}{\the\toks2}{\the\toks@}{\the\toks4}!!!].\afterMORPHISM}%
+ \fi
+ \toks@={\endgroup}%
+ \expandafter\def\expandafter\next@\expandafter{%
+ \expandafter\def\expandafter\twocellhead@\expandafter{\twocellhead@}}%
+ \expandafter\addtotoks@\expandafter{\next@}%
+ \expandafter\def\expandafter\next@\expandafter{%
+ \expandafter\def\expandafter\twocelltail@\expandafter{\twocelltail@}}%
+ \expandafter\addtotoks@\expandafter{\next@}%
+ \expandafter\addtotoks@\expandafter{\expandafter\twocellPATH\tmp@}%
+ \the\toks@ }%
+\xydef@\twocellstyle{\scriptstyle}
+\xydef@\droptwocelllabel@#1{\xyFN@\droptwocelllabel@@#1@!}
+\xydef@\droptwocelllabel@@{%
+ \ifx*\next\DN@*{\droptwocelldrop@}%
+ \else\DN@##1@!{\droptwocelltext@{##1}}%
+ \fi \next@ }
+{\xyuncatcodes \gdef\next#1{\drop+!C{\twocellstyle #1}}}
+\xylet@\droptwocelltext@=\next
+\xydef@\droptwocelldrop@#1@!{\bgroup \let\xy@=\oxy@
+ \let\objectstyle=\twocellstyle \drop#1{}%
+ \edef\tmp@{\egroup \X@min=\the\X@min \X@max=\the\X@max
+ \Y@min=\the\Y@min \Y@max=\the\Y@max}\tmp@ }
+\xydef@\twocellhead#1{\def\twocellhead@{#1}}
+\xydef@\twocelltail#1{\def\twocelltail@{#1}}
+\xydef@\twocellhead@{\dir{>}}
+\xydef@\twocelltail@{}
+\xywarnifdefined\twocellmod@
+\xydef@\tw@cell@{\begingroup
+ \toks@={{}}\toks1={{}}\toks2={{}}\toks4={{}}%
+ \def\twocellmod@{}\xyFN@\tw@@cell@}%
+\xydef@\tw@@cell@{%
+ \ifx\space@\next\expandafter\DN@\space{\xyFN@\tw@@cell@}%
+ \else\ifx\bgroup\next \let\next@=\toks@\afterassignment\tw@@cell@@
+ \else\ifx ^\next \DN@^##1{\toks@={##1}\nudgepos@71\tw@@cell@}%
+ \else\ifx _\next \DN@_##1{\toks@={##1}\nudgepos@82\tw@@cell@}%
+ \else\addLT@\ifx \next \addGT@{\addLT@\DN@##1}{%
+ \toks6={##1}\ifx\omit##1\relax\toks3={t}\toks5={0}\fi\xyFN@\tw@@cell@}%
+ \else\ifx\omit\next \DN@\omit{\omitarrows@\xyFN@\tw@@cell@}%
+ \else\ifx~\next \DN@~{\xyFN@\whichCurveObject@}%
+ \else \DN@{\xyFN@\tw@cell@@\empty @}%
+ \fi\fi\fi\fi\fi\fi\fi%
+ \next@ }
+\xydef@\whichCurveObject@{%
+ \ifx\space@\next\expandafter\DN@\space{\xyFN@\whichCurveObject@}%
+ \else\ifx\next^\DN@^##1{\xy@{~^{##1}}{\uppercurveobject{##1}}\xyFN@\tw@@cell@}%
+ \else\ifx\next_\DN@_##1{\xy@{~_{##1}}{\lowercurveobject{##1}}\xyFN@\tw@@cell@}%
+ \else\addRQ@\ifx\next \addRQ@\DN@##1{%
+ \xy@{~'{##1}}{\def\twocellhead@{##1}}\xyFN@\tw@@cell@}%
+ \else\addLQ@\ifx\next \addLQ@\DN@##1{%
+ \xy@{~`{##1}}{\def\twocelltail@{##1}}\xyFN@\tw@@cell@}%
+ \else\ifx!\next \DN@!{\xyFN@\checkmodmap@}%
+ \else\ifx\next\bgroup\DN@##1{\xy@{~{##1}}{\curveobject{##1}}\xyFN@\tw@@cell@}%
+ \else\DN@##1{\xy@{~##1}{\curveobject{##1}}\xyFN@\tw@@cell@}%
+ \fi\fi\fi\fi \fi\fi\fi
+ \next@ }
+\xydef@\checkmodmap@{%
+ \ifx\space@\next\expandafter\DN@\space{\xyFN@\checkmodmap@}%
+ \else \def\twocellmod@{\modmap@}%
+ \ifx\next!\DN@!##1{%
+ \xy@{~!!{##1}}{\def\modmapobject@{##1}}\xyFN@\tw@@cell@}%
+ \else \DN@{\xyFN@\tw@@cell@}\fi
+ \fi \next@ }
+\xydef@\omitarrows@{\toks5={0}\toks6={}\toks7={0}\toks8={0}}
+\xydef@\tw@@cell@@{\expandafter\xyFN@\expandafter\tw@cell@@\the\toks@ @}
+\xydef@\tw@cell@@{\ifx \space@\next\expandafter\DN@\space{\xyFN@\tw@cell@@}%
+ \else\ifx ^\next
+ \DN@^##1@{\toks@={##1}\toks4={^}\nudgepos@50\tw@cell@@@}%
+ \else\addEQ@\ifx\next
+ \addEQ@\DN@##1@{\toks@={##1}\toks4={=}\nudgepos@50\tw@cell@@@}%
+ \else\ifx _\next
+ \DN@_##1@{\toks@={##1}\toks4={_}\nudgepos@50\tw@cell@@@}%
+ \else\addLT@\ifx \next
+ \DN@##1@{\toks@={##1}\toks4={_}\nudgepos@50\tw@cell@@@}%
+ \else\ifx\omit\next \DN@\omit##1@{\toks4={@}\toks@={##1}\tw@cell@@@}%
+ \else\addRQ@\ifx\next \addRQ@\DN@##1@{\toks4={@}\toks3={/}\toks@={##1}%
+ \nudgepos@50\tw@cell@@@}%
+ \else\addLQ@\ifx\next \addLQ@\DN@##1@{\toks4={@}\toks3={b}\toks@={##1}%
+ \nudgepos@50\tw@cell@@@}%
+ \else\ifx"\next \DN@"##1@{\toks4={@}\toks3={B}\toks@={##1}%
+ \nudgepos@50\tw@cell@@@}%
+ \else\ifx!\next \DN@!##1@{\toks4={@}\toks3={@}\toks@={##1}%
+ \nudgepos@50\tw@cell@@@}%
+ \else\ifx\next\empty\DN@##1@{\toks@={{}}\toks4={_}\tw@cell@@@}%
+ \else\DN@##1@{\toks@={##1}\toks4={_}\tw@cell@@@}%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@ }
+\xywarnifdefined\whichnudge
+\xywarnifdefined\whichinfo
+\xywarnifdefined\afternudge
+\xydef@\nudgepos@#1#2#3{\def\whichnudge{\toks#1}\def\whichinfo{\toks#2}%
+ \def\afternudge{#3}\expandafter\xyFN@\expandafter\nudgepos@@\the\toks@ @}
+\xydef@\nudgepos@@{\ifx \space@\next\expandafter\DN@\space{\xyFN@\nudgepos@}%
+ \else\addLT@\ifx \next
+ \addGT@{\addLT@\DN@##1}##2@{%
+ \ifx\omit##1\relax\whichnudge={0}\whichinfo={}%
+ \else\whichnudge={##1}\whichinfo={##2}\fi\xyFN@\afternudge}%
+ \else \DN@##1@{\whichinfo={##1}\xyFN@\afternudge}%
+ \fi\fi \next@ }
+\xydef@\modmap@{%
+ \expandafter\ifx\the\toks4@\toks4={!}%
+ \else\expandafter\ifx\the\toks4=\toks4={H}%
+ \else\expandafter\ifx\the\toks4^\toks4={A}%
+ \else\expandafter\ifx\the\toks4_\toks4={V}\fi\fi\fi\fi
+ \expandafter\DN@\expandafter{\the\toks6}%
+ \ifx\next@\empty\relax\else\expandafter\moddefs@\fi}
+\xydef@\moddefs@{%
+ \expandafter\dimen@\the\toks6\p@
+ \ifdim\dimen@=\z@\relax
+ \expandafter\dimen@\the\toks7\p@
+ \ifdim\dimen@<\z@\advance\dimen@.5\p@\else\advance\dimen@-.5\p@\fi
+ \edef\tmp@{\noexpand\toks7={\expandafter\removePT@\the\dimen@}}\tmp@
+ \expandafter\dimen@\the\toks8\p@
+ \ifdim\dimen@<\z@\advance\dimen@-.5\p@\else\advance\dimen@.5\p@\fi
+ \expandafter\ifx\the\toks3t\advance\dimen@-1\p@\fi
+ \edef\tmp@{\noexpand\toks8={\expandafter\removePT@\the\dimen@}}\tmp@
+ \else
+ \ifdim\dimen@<\z@\advance\dimen@-.5\p@\else\advance\dimen@.5\p@\fi
+ \edef\tmp@{\noexpand\toks6={\expandafter\removePT@\the\dimen@}}\tmp@
+ \expandafter\dimen@\the\toks7\p@
+ \ifdim\dimen@<\z@\advance\dimen@-.5\p@\else\advance\dimen@.5\p@\fi
+ \expandafter\ifx\the\toks3t\advance\dimen@-2\p@\fi
+ \edef\tmp@{\noexpand\toks7={\expandafter\removePT@\the\dimen@}}\tmp@
+ \expandafter\dimen@\the\toks8\p@
+ \ifdim\dimen@<\z@\advance\dimen@-.5\p@\else\advance\dimen@.5\p@\fi
+ \expandafter\ifx\the\toks3t\advance\dimen@-2\p@\fi
+ \edef\tmp@{\noexpand\toks8={\expandafter\removePT@\the\dimen@}}\tmp@
+ \fi }%
+\xydef@\modmapobject#1{\def\modmapobject@{#1}}
+\xydef@\modmapobject@{\dir{|}}
+\xydef@\@modmapobject@{{\if\@mod@\relax\expandafter\empty
+ \else\expandafter\modmapobject@\fi}}
+\xydef@\curveobject#1{\def\ucurveObject@{~*#1}\def\dcurveObject@{~*#1}}
+\xydef@\uppercurveobject#1{\def\ucurveObject@{~*#1}}
+\xydef@\lowercurveobject#1{\def\dcurveObject@{~*#1}}
+\xydef@\ucurveObject@{}
+\xydef@\dcurveObject@{}
+\xydef@\savetwocellobjects{%
+ \xy@{twocell objects}{%
+ \expandafter\uppercurveobject\expandafter{\ucurveObject@}%
+ \expandafter\lowercurveobject\expandafter{\dcurveObject@}%
+ \expandafter\modmapobject\expandafter{\modmapobject@}%
+ \expandafter\twocellhead\expandafter{\twocellhead@}%
+ \expandafter\twocelltail\expandafter{\twocelltail@}%
+ \expandafter\arrowobject\expandafter{Arrowobject@}%
+ }}
+\xydef@\twocell@path.[#1].{%
+ \expandafter\ifx\csname Q@@c\endcsname\relax
+ \DN@{\enter@{\cfromthec@ \pfromthep@ \basefromthebase@}%
+ \xy@{}{\expandafter\edef\csname Q@@\endcsname{\cfromthec@}}%
+ \afterPOS{\xy@{}%
+ {\expandafter\edef\csname Q@@c\endcsname{\cfromthec@}}%
+ \xy@{}%
+ {\cfromid@{@}\expandafter\edef\csname Q@@p\endcsname{\cfromthec@}}%
+ \xy@{twocell #1}{#1}\leave@\aftertwoCELL};p,}%
+ \else
+ \DN@{\enter@{\cfromthec@ \pfromthep@ \basefromthebase@}%
+ \xy@{twocell #1}{#1}\leave@\aftertwoCELL}%
+ \fi \next@ }
+\xydef@\twocellpath.[#1].{%
+ \expandafter\edef\csname Q@@p\endcsname{\cfromthec@}%
+ \xy@{}{\enter@{\pfromthep@}}%
+ \xy@{}{\enter@{\cfromthec@ \pfromthep@ \basefromthebase@}%
+ \enter@{\pfromthec@}}%
+ \afterPOS{\xy@{}{\leave@\setupDirection@}#1\restore\restore
+ \xy@{end of 2-cell}\xysaveMinMax@ }}%
+\xydef@\xysaveMinMax@{\edef\tmp@{\endgroup
+ \noexpand\ifdim\X@max<\the\X@max \X@max=\the\X@max\noexpand\fi
+ \noexpand\ifdim\X@min>\the\X@min \X@min=\the\X@min\noexpand\fi
+ \noexpand\ifdim\Y@max<\the\Y@max \Y@max=\the\Y@max\noexpand\fi
+ \noexpand\ifdim\Y@min>\the\Y@min \Y@min=\the\Y@min\noexpand\fi
+ }\tmp@ }
+\xylet@\twocellPATH=\twocellpath
+\xydef@\aftertwo@CELL{\let\twocellPATH=\twocellpath \def\aftertwoCELL{}}
+\xydef@\aftertwoCELL{}
+\xydef@\twocell@@@@#1!!!{\xy@{twocell #1}{\twocell@@#1!!!}}
+\let\xystatus=\xystatus@
+\xydef@\twocell{\hbox\bgroup\@twocell}
+\xydef@\uppertwocell{\hbox\bgroup\@uppertwocell}
+\xydef@\lowertwocell{\hbox\bgroup\@lowertwocell}
+\xydef@\compositemap{\hbox\bgroup\@compositemap}
+\xydef@\twocelll#1#{\hbox\bgroup\xy@\save\save@\@twocelll{#1}}
+\xydef@\@twocelll#1#2{%
+ \afterPOS{\@twocelll@\xyFN@\twocell@#1{#2}}}
+\xydef@\uppertwocelll#1#{\hbox\bgroup\xy@\save\save@\@uppertwocelll{#1}}
+\xydef@\@uppertwocelll#1#2{%
+ \afterPOS{\@twocelll@\xyFN@\uppertwocell@#1{#2}}}
+\xydef@\lowertwocelll#1#{\hbox\bgroup\xy@\save\save@\@lowertwocelll{#1}}
+\xydef@\@lowertwocelll#1#2{%
+ \afterPOS{\@twocelll@\xyFN@\lowertwocell@#1{#2}}}
+\xydef@\compositemapp#1#{\hbox\bgroup\xy@\save\save@\@compositemapp{#1}}
+\xydef@\@compositemapp#1#2{%
+ \afterPOS{\@twocelll@\xyFN@\compositemap@#1{#2}}}
+\xydef@\@twocelll@{%
+ \expandafter\edef\csname Q@@c\endcsname{\cfromthec@}\swap@
+ \expandafter\edef\csname Q@@p\endcsname{\cfromthec@}\swap@
+ \let\twocellPATH=\twocell@path
+ \def\aftertwoCELL{\twocell@DONE \xy@\restore \leave@
+ }}
+\xydef@\@twocell#1{\DN@{\@twocell@\twocell@}\xyFN@\next@[#1]}
+\xydef@\@uppertwocell#1{\DN@{\@twocell@\uppertwocell@}\xyFN@\next@[#1]}
+\xydef@\@lowertwocell#1{\DN@{\@twocell@\lowertwocell@}\xyFN@\next@[#1]}
+\xydef@\@compositemap#1{\DN@{\@twocell@\compositemap@}\xyFN@\next@[#1]}
+\xydef@\@twocell@#1{\ifx\next[\DN@[{\toks@={#1}\xyFN@\@@twocell@}%
+ \else\DN@{#1{}}\fi
+%%
+ \expandafter\edef\csname Q@@c\endcsname{\cfromthec@}\swap@
+ \expandafter\edef\csname Q@@p\endcsname{\cfromthec@}\swap@
+ \let\twocellPATH=\twocell@path
+ \def\aftertwoCELL{\twocell@DONE}\next@}
+\xydef@\@@twocell@{\ifx\next\bgroup\DN@##1]{\the\toks@{##1}}%
+ \else\DN@##1]{\the\toks@##1}\fi\next@}
+%% \DN@{\twocell}%
+%% \expandafter\def\csname*dir@@\codeof\next@ @\endcsname{\@twocell}
+%% \DN@{\uppertwocell}%
+%% \expandafter\def\csname*dir@@\codeof\next@ @\endcsname{\@uppertwocell}
+%% \DN@{\lowertwocell}%
+%% \expandafter\def\csname*dir@@\codeof\next@ @\endcsname{\@lowertwocell}
+%% \DN@{\compositemap}%
+%% \expandafter\def\csname*dir@@\codeof\next@ @\endcsname{\@compositemap}
+\xydef@\twocell@DONE{%
+ \edef\tmp@{\egroup \X@min=\the\X@min \X@max=\the\X@max
+ \Y@min=\the\Y@min \Y@max=\the\Y@max}\tmp@
+ \L@c=\X@c \advance\L@c-\X@min \R@c=\X@max \advance\R@c-\X@c
+ \D@c=\Y@c \advance\D@c-\Y@min \U@c=\Y@max \advance\U@c-\Y@c
+ \ht\z@=\U@c \dp\z@=\D@c \dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@
+ \computeLeftUpness@
+\setboxz@h{\kern-\X@p \raise-\Y@c\boxz@ }%
+\dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@ \ht\z@=\U@c \dp\z@=\D@c
+ \Edge@c={\rectangleEdge}\Invisible@false \Hidden@false
+ \edef\Drop@@{\noexpand\drop@Twocell
+ \noexpand\def\noexpand\Leftness@{\Leftness@}%
+ \noexpand\def\noexpand\Upness@{\Upness@}}%
+ \edef\Connect@@{\noexpand\connect@Twocell
+ \noexpand\ifdim\X@max<\the\X@max \X@max=\the\X@max\noexpand\fi
+ \noexpand\ifdim\X@min>\the\X@min \X@min=\the\X@min\noexpand\fi
+ \noexpand\ifdim\Y@max<\the\Y@max \Y@max=\the\Y@max\noexpand\fi
+ \noexpand\ifdim\Y@min>\the\Y@min \Y@min=\the\Y@min\noexpand\fi }}%
+\xydef@\drop@Twocell{\boxz@ }
+\xydef@\connect@Twocell{%
+ \setboxz@h{\kern\X@p \raise\Y@c\box\lastobjectbox@ }%
+ \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \Drop@@ }
+\xywarnifdefined\@mod@
+\xywarnifdefined\Arrowtok@
+\xydef@\twocell@@#1#2#3#4#5#6#7#8#9!!!{%
+ \def\@mod@{@}\DN@{#9}%
+ \ifx #9!\def\Arrowtok@{@}\else\ifx #9A\def\Arrowtok@{^}%
+ \else\ifx #9V\def\Arrowtok@{_}\else\ifx #9H\def\Arrowtok@{=}%
+ \else\def\@mod@{\relax}%
+ \ifx #5/\def\Arrowtok@{@}\else\ifx #5b\def\Arrowtok@{@}%
+ \else\ifx #5B\def\Arrowtok@{@}\else\ifx #5@\def\Arrowtok@{@}%
+ \else\def\Arrowtok@{#9}%
+ \fi\fi\fi\fi\fi\fi\fi\fi
+ \addEQ@\ifx #9\def\Arrowtok@{=}\fi
+ \DN@{\omit}\ifx\next@\Arrowtok@\def\Arrowtok@{}\else
+ \edef\Arrowtok@{\codeof\Arrowtok@}\fi
+ \save@ \idfromc@{@c}\swap@\idfromc@{@p}\swap@
+ \cfromid@{@c}\no@@
+ \ifdim \X@c<\X@p \X@min=\X@c \X@max=\X@p \else \X@min=\X@p \X@max=\X@c \fi
+ \ifdim \Y@c<\Y@p \Y@min=\Y@c \Y@max=\Y@p \else \Y@min=\Y@p \Y@max=\Y@c \fi
+ \Calong@@{.5}\idfromc@{@m}\idfromc@{@m1}\idfromc@{@m2}%
+ \ifx #5t\relax
+ \enter@{\cplusthec@\pfromthep@}%
+ \enter@\DirectionfromtheDirection@ \begingroup\aboveDirection@ \xydashl@
+ \DN@{#1}\ifx\next@\empty\dimen@=\z@\else\dimen@=#1\p@\fi
+ \ifdim\dimen@=\z@ \DN@{\vfromslide@i{\xydashl@}@}\relax
+ \else\DN@{\vfromslide@i{#1\xydashl@}@}\fi \next@
+ \czeroEdge@ \leave@ \no@@ \drop@{+}{}\idfromc@{@m1}%
+ \DN@{#1}\ifx\next@\empty\DN@{\no@@}\else\DN@{\connect@{\dir}{-}}\fi
+ \else
+ \DN@{#1}\ifx\next@\empty\dimen@=\z@\else\dimen@=#1\p@\fi
+ \ifdim\dimen@=\z@ \enter@{\cplusthec@\pfromthep@}%
+ \enter@\DirectionfromtheDirection@ \begingroup\aboveDirection@\xydashl@
+ \vfromslide@i{\xydashl@}@\czeroEdge@ \leave@ \idfromc@{@m1}%
+ \cfromid@{@p}\swap@\cfromid@{@c}%
+ \DN@{#1}\ifx\next@\empty\DN@{\no@@}\else\DN@{\connect@{\dir}{-}}\fi
+ \else \DN@{\enter@\cplusthec@
+ \enter@\DirectionfromtheDirection@ \begingroup\aboveDirection@ \xydashl@
+ \vfromslide@i{#1\xydashl@}@\czeroEdge@ \leave@
+ \idfromc@{@m1}\cfromid@{@p}\swap@\cfromid@{@c}%
+ \edef\next@{\codeof\ucurveObject@}%
+ \ifx\next@\empty\DN@{\connect@\crv{"@m1"}}%
+ \else
+ \DNii@####1{\connect@\crv{####1}}\expandafter\DN@\expandafter{%
+ \expandafter\nextii@\expandafter{\ucurveObject@"@m1"}}%
+ \fi \next@ }%
+%% \ifx\next@\empty\def\ucurveObject@{.}\fi
+%% \enter@\cfromthec@\sinit@\cfromid@{@m1}\senter@\leave@
+%% \expandafter\connect@\expandafter\crvs\expandafter{\ucurveObject@}%
+%% \sinit@\sleave@ }%
+ \fi
+ \fi \next@
+ \DN@{#1}\ifx\next@\empty\relax\else
+ \if\@mod@ @\relax
+ \enter@\pfromthep@ \Creset@@
+ \ifx #5t\relax
+ \PLACEedgec@ \PLACEedgep@ \def\PLACEf@{{.5}}%
+ \else \def\next@{\crvreset@}%
+ \ifx\next@\Creset@@
+ \gettwocelledges@ \edef\PLACEf@{{\expandafter\removePT@\the\dimen@}}%
+ \else \PLACEedgec@ \PLACEedgep@ \def\PLACEf@{{.5}}\fi
+ \fi
+ \expandafter\Calong@@\PLACEf@ \czeroEdge@ \leave@
+ \edef\tmp@{\codeof\modmapobject@}%
+ \ifx\tmp@\empty \DN@{\drop@{\dir}{|}}%
+ \else \DNii@##1##{\drop@{##1}}%
+ \DN@{\expandafter\nextii@\modmapobject@{}}%
+ \fi \next@
+ \fi\fi
+ \DN@{#6}\ifx\next@\empty\DN@{\relax}\else
+ \DNii@{{}}\ifx\next@\nextii@\DN@{\relax}\else
+ \ifx @#3\relax\DN@{\relax}\else
+ \DN@{\enter@\pfromthep@ \Creset@@
+ \Calong@@{.5}\czeroEdge@ \leave@
+ \enter@\cplusthec@
+ \enter@\DirectionfromtheDirection@\begingroup
+ \DN@{#1}\ifx\next@\empty\dimen@\z@\else\dimen@=#1\p@\fi
+ \ifdim\dimen@<\z@ \belowDirection@ \xydashl@
+ \else \aboveDirection@ \xydashl@ \fi
+ \dimen@=#3\p@ \if\@mod@ @\relax
+ \advance\dimen@\ifdim\dimen@<\z@-\fi.5\p@\fi
+ \edef\next@{\expandafter\removePT@\the\dimen@}%
+ \expandafter\vfromslide@i\expandafter{\next@\xydashl@}@\leave@
+ \droptwocelllabel@{#6}}%
+ \fi\fi\fi \next@
+ \DN@{#1}\ifx\next@\empty\relax\else
+ \ifx #5b\relax
+ \enter@ {\pfromthep@ }\Creset@@ \PLACEedgep@
+ \Calong@@{0}\czeroEdge@ \leave@
+ \edef\next@{\codeof\twocelltail@}%
+ \ifx\next@\empty \DN@{\dir{>}}%
+ \ifx\next@\twocellhead@\drop@{\dir}{<}%
+ \else
+ \reverseDirection@ \DNii@##1##{\drop@{##1}}%
+ \expandafter\nextii@\twocellhead@{}\reverseDirection@
+ \fi
+ \else
+ \DNii@##1##{\drop@{##1}}\expandafter\nextii@\twocelltail@{}%
+ \fi
+ \else\ifx #5@\relax
+ \else
+ \enter@\pfromthep@ \Creset@@ \PLACEedgec@
+ \Calong@@{1}\czeroEdge@ \leave@
+ \edef\next@{\codeof\twocellhead@}%
+ \ifx\next@\empty\drop@{\dir}{>}%
+ \else
+ \DNii@##1##{\drop@{##1}}\expandafter\nextii@\twocellhead@{}%
+ \fi
+ \ifx #5B\relax
+ \enter@ {\pfromthep@ }\Creset@@ \PLACEedgep@
+ \Calong@@{0}\czeroEdge@ \leave@
+ \edef\next@{\codeof\twocelltail@}%
+ \ifx\next@\empty \DN@{\dir{>}}%
+ \ifx\next@\twocellhead@\drop@{\dir}{<}%
+ \else
+ \reverseDirection@\DNii@##1##{\drop@{##1}}%
+ \expandafter\nextii@\twocellhead@{}\reverseDirection@
+ \fi
+ \else
+ \DNii@##1##{\drop@{##1}}\expandafter\drop\twocelltail@{}%
+ \fi
+ \else\ifx #5/\relax
+ \else \edef\next@{\codeof\twocelltail@}%
+ \ifx\next@\empty\relax\else
+ \enter@\pfromthep@ \Creset@@ \PLACEedgep@
+ \Calong@@{0}\czeroEdge@ \leave@
+ \DNii@##1##{\drop@{##1}}\expandafter\nextii@\twocelltail@{}%
+ \fi\fi\fi
+ \fi\fi\fi
+ \cfromid@{@p}\swap@\cfromid@{@c}\no@@ \cfromid@{@m}%
+ \ifx #5t\relax
+ \idfromc@{@m2}\cfromid@{@m1}\swap@ \cfromid@{@c}\no@@
+ \DN@{#1}\ifx\next@\empty\DN@{\no@@}\else\DN@{\connect@{\dir}{-}}\fi
+ \else\ifx #5o\relax
+ \idfromc@{@m2}\DN@{}%
+ \else
+ \DN@{#1}\ifx\next@\empty\dimen@=\z@\else\dimen@=#1\p@\fi
+ \ifdim\dimen@=\z@
+ \enter@{\cplusthec@\pfromthep@}%
+ \enter@\DirectionfromtheDirection@ \begingroup \belowDirection@\xydashl@
+ \vfromslide@i{\xydashl@}@\czeroEdge@ \leave@ \idfromc@{@m2}%
+ \DN@{\cfromid@{@p}\swap@\cfromid@{@c}\no@@}%
+ \else \DN@{\enter@\cplusthec@
+ \enter@\DirectionfromtheDirection@ \begingroup \belowDirection@ \xydashl@
+ \vfromslide@i{#1\xydashl@}@\czeroEdge@ \leave@
+ \idfromc@{@m2}\cfromid@{@p}\swap@\cfromid@{@c}%
+ \edef\next@{\codeof\dcurveObject@}%
+ \ifx\next@\empty\DN@{\connect@\crv{"@m2"}}%
+ \else
+ \DNii@####1{\connect@\crv{####1}}\expandafter\DN@\expandafter{%
+ \expandafter\nextii@\expandafter{\dcurveObject@"@m2"}}%
+ \fi \next@ }\fi
+%% \enter@\cfromthec@\sinit@\cfromid@{@m2}\senter@\leave@
+%% \expandafter\connect@\expandafter\crvs\expandafter{\dcurveObject@}%
+%% \sinit@\sleave@
+%% }\fi
+ \fi\fi \next@
+ \DN@{#1}\ifx\next@\empty\relax\else \ifx #5o\relax\else
+ \if\@mod@ @\DN@{\enter@\pfromthep@ \Creset@@
+ \ifx #5t\relax
+ \PLACEedgec@ \PLACEedgep@ \def\PLACEf@{{.5}}%
+ \else \def\next@{\crvreset@}%
+ \ifx\next@\Creset@@
+ \gettwocelledges@ \edef\PLACEf@{{\expandafter\removePT@\the\dimen@}}%
+ \else \PLACEedgec@ \PLACEedgep@ \def\PLACEf@{{.5}}\fi
+ \fi
+ \expandafter\Calong@@\PLACEf@ \czeroEdge@ \leave@
+ \edef\tmp@{\codeof\modmapobject@}\ifx\tmp@\empty\DN@{\drop@{\dir}{|}}%
+ \else \DNii@####1####{\drop@{####1}}%
+ \DN@{\expandafter\nextii@\modmapobject@{}}\fi
+ \next@ }\else\DN@{\relax}\fi
+ \next@ \fi\fi
+ \DN@{#7}\ifx\next@\empty\DN@{\relax}\else
+ \DNii@{{}}\ifx\next@\nextii@\DN@{\relax}\else
+ \ifx @#4\relax\DN@{\relax}\else
+ \DN@{\enter@\pfromthep@ \Creset@@
+ \Calong@@{.5}\czeroEdge@ \leave@
+ \enter@\cplusthec@
+ \enter@\DirectionfromtheDirection@ \begingroup
+ \DN@{#1}\ifx\next@\empty\dimen@\z@ \else\dimen@=#1\p@\fi
+ \ifx #5t\relax \ifdim\dimen@<\z@ \belowDirection@ \xydashl@
+ \else \aboveDirection@ \xydashl@ \fi
+ \else \ifdim\dimen@<\z@ \aboveDirection@ \xydashl@
+ \else \belowDirection@ \xydashl@ \fi
+ \fi \dimen@=#4\p@ \if\@mod@ @\relax
+ \advance\dimen@\ifdim\dimen@<\z@-\fi.5\p@\fi
+ \edef\next@{\expandafter\removePT@\the\dimen@}%
+ \expandafter\vfromslide@i\expandafter{\next@\xydashl@}@\leave@
+ \droptwocelllabel@{#7}}%
+ \fi\fi\fi \next@
+ \DN@{#1}\ifx\next@\empty\relax\else
+ \ifx #5o\relax
+ \else\ifx #5b\relax
+ \enter@ {\pfromthep@ }\Creset@@ \PLACEedgec@
+ \Calong@@{1}\czeroEdge@ \leave@
+ \edef\next@{\codeof\twocelltail@}%
+ \ifx\next@\empty \DN@{\dir{>}}%
+ \ifx\next@\twocellhead@\drop@{\dir}{>}%
+ \else
+ \DNii@##1##{\drop@{##1}}\expandafter\nextii@\twocellhead@{}%
+ \fi
+ \else
+ \DNii@##1##{\drop@{##1}}\expandafter\drop\twocelltail@{}%
+ \fi
+ \else\ifx #5/\relax
+ \enter@{\pfromthep@}\Creset@@ \PLACEedgep@
+ \Calong@@{0}\czeroEdge@ \leave@
+ \edef\next@{\codeof\twocelltail@}%
+ \ifx\next@\empty \DN@{\dir{>}}%
+ \ifx\next@\twocellhead@\drop@{\dir}{<}%
+ \else
+ \reverseDirection@\DNii@##1##{\drop@{##1}}%
+ \expandafter\nextii@\twocellhead@{}\reverseDirection@
+ \fi
+ \else
+ \DNii@##1##{\drop@{##1}}\expandafter\nextii@\twocelltail@{}%
+ \fi
+ \else\ifx #5@\relax
+ \else
+ \enter@\pfromthep@ \Creset@@ \PLACEedgec@
+ \Calong@@{1}\czeroEdge@ \leave@
+ \edef\next@{\codeof\twocellhead@}%
+ \ifx\next@\empty\drop@{\dir}{>}%
+ \else
+ \DNii@##1##{\drop@{##1}}\expandafter\nextii@\twocellhead@{}%
+ \fi
+ \ifx #5B\relax
+ \enter@ {\pfromthep@ }\Creset@@ \PLACEedgep@
+ \Calong@@{0}\czeroEdge@ \leave@
+ \edef\next@{\codeof\twocelltail@}%
+ \ifx\next@\empty\DN@{\dir{>}}%
+ \ifx\next@\twocellhead@\drop@{\dir}{<}%
+ \else
+ \reverseDirection@\DNii@##1##{\drop@{##1}}%
+ \expandafter\nextii@\twocellhead@{}\reverseDirection@
+ \fi
+ \else
+ \DNii@##1##{\drop@{##1}}\expandafter\nextii@\twocelltail@{}%
+ \fi
+ \else
+ \edef\next@{\codeof\twocelltail@}%
+ \ifx\next@\empty\relax\else
+ \enter@ {\pfromthep@ }\Creset@@ \PLACEedgep@
+ \Calong@@{0}\czeroEdge@ \leave@
+ \DNii@##1##{\drop@{##1}}\expandafter\nextii@\twocelltail@{}%
+ \fi\fi
+ \fi\fi\fi
+ \fi\fi
+ \DN@{#1}\ifx\next@\empty\dimen@=\z@\else\dimen@=#1\p@\fi
+ \ifdim\dimen@<\z@ \cfromid@{@m2}\swap@\cfromid@{@m1}%
+ \else \cfromid@{@m1}\swap@\cfromid@{@m2}%
+ \fi \no@@ \cfromid@{@m}%
+ \ifx\Arrowtok@\empty
+ \else\DN@{_}\edef\next@{\codeof\next@}\ifx\next@\Arrowtok@
+ \enter@{\pfromthep@ \cplusthec@}\dimen@=#2\xydashl@
+ \enter@\DirectionfromtheDirection@ \begingroup
+ \expandafter\vfromslide@i\expandafter{\the\dimen@}@\czeroEdge@
+ \leave@ \idfromc@{@m}%
+ \DNii@##1##{\drop@{##1}}\expandafter\nextii@\Arrowobject@{}%
+ \else\DN@{^}\edef\next@{\codeof\next@}\ifx\next@\Arrowtok@
+ \DN@{_}\edef\Arrowtok@{\codeof\next@}%
+ \enter@{\pfromthep@ \cplusthec@}\dimen@=#2\xydashl@
+ \enter@\DirectionfromtheDirection@ \begingroup
+ \expandafter\vfromslide@i\expandafter{\the\dimen@}@\czeroEdge@
+ \leave@ \idfromc@{@m}\reverseDirection@
+ \DNii@##1##{\drop@{##1}}\expandafter\nextii@\Arrowobject@{}%
+ \else \DN@{=}\edef\next@{\codeof\next@}\ifx\next@\Arrowtok@
+ \enter@{\pfromthep@ \cplusthec@}%
+ \dimen@=#2\xydashl@ \advance\dimen@\xydashl@
+ \enter@\DirectionfromtheDirection@ \begingroup
+ \expandafter\vfromslide@i\expandafter{\the\dimen@}@\czeroEdge@
+ \leave@ \idfromc@{@m2}%
+ \cfromid@{@m}%
+ \enter@{\pfromthep@ \cplusthec@}%
+ \dimen@=#2\xydashl@ \advance\dimen@-\xydashl@
+ \enter@\DirectionfromtheDirection@ \begingroup
+ \expandafter\vfromslide@i\expandafter{\the\dimen@}@\czeroEdge@
+ \leave@ \idfromc@{@m1}%
+ \cfromid@{@m2}\swap@\cfromid@{@m1}\connect@{\dir 2}{-}%
+ \fi\fi\fi\fi
+ \DN@{#8}\ifx\next@\empty\DN@{}\else\DN@{%
+ \ifx\Arrowtok@\empty
+ \Calong@@{.5}%
+ \else\DN@{=}\edef\next@{\codeof\next@}\ifx\next@\Arrowtok@
+ \Calong@@{.5}%
+ \else\DN@{_}\edef\next@{\codeof\next@}\ifx\next@\Arrowtok@
+ \cfromid@{@m}%
+ \fi\fi\fi
+ \enter@\cplusthec@
+ \enter@\DirectionfromtheDirection@ \begingroup \aboveDirection@\xydashl@
+ \ifx\Arrowtok@\empty
+ \def\tmp@{0pt}%
+ \else\DN@{=}\edef\next@{\codeof\next@}\ifx\next@\Arrowtok@
+ \def\tmp@{\xydashl@}%
+ \else\DN@{_}\edef\next@{\codeof\next@}\ifx\next@\Arrowtok@
+ \def\tmp@{1.2\xydashl@}%
+ \else\def\tmp@{0pt}%
+ \fi\fi\fi
+ \expandafter\vfromslide@i\expandafter{\tmp@}@\czeroEdge@ \leave@
+ \droptwocelllabel@{#8}%
+ }\fi \next@
+ \leave@ }%
+\xydef@\gettwocelledges@{%
+ \bgroup \the\crvpts@
+ \edef\next@{\edges@}%
+ \expandafter\gettwocelledges@@\next@ }
+\xydef@\gettwocelledges@@#1;#2,#3;#4,{%
+ \dimen@=#2\advance\dimen@-#4\relax
+ \advance\dimen@ 2\p@ \divide\dimen@ by4 \relax
+ \edef\next@{\egroup\dimen@=\the\dimen@ }\next@}%
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyall.tex b/macros/generic/diagrams/xypic/texinputs/xyall.tex
new file mode 100644
index 0000000000..a95fe9d213
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyall.tex
@@ -0,0 +1,36 @@
+%% xyall.tex from $Id: xyall.doc,v 3.8 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``All features'' option.
+%% Copyright (c) 1993-1996 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{all}{All features}{\stripRCS$Revision: 3.8 $}%
+ {Kristoffer H.~Rose}{krisrose@tug.org}%
+ {IBM T.~ J.\ Watson Research Center, P.O.~Box 704, Yorktown Heights, NY 10598 (USA)}
+\xyrequire{curve}
+\xyrequire{frame}
+\xyrequire{cmtip}
+\xyrequire{line}
+\xyrequire{rotate}
+\xyrequire{color}
+\xyrequire{matrix}
+\xyrequire{arrow}
+\xyrequire{graph}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyarc.tex b/macros/generic/diagrams/xypic/texinputs/xyarc.tex
new file mode 100644
index 0000000000..eaad720083
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyarc.tex
@@ -0,0 +1,683 @@
+%% xyarc.tex from $Id: xyarc.doc,v 3.8 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Circles, Ellipses and Arcs'' feature.
+%% Copyright (c) 1995-1997 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The XY-pic package 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.
+%%
+%% The XY-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{arc}{Circle, Ellipse, Arc feature}{\stripRCS$Revision: 3.8 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xyrequire{curve}
+\xycatcodes
+\xydef@\ellipse#1#{\xy@{ELLIPSE}{\hbox\bgroup\save@}%
+ \let\endarc@=\endellipse@@ \xyFN@\preARC@ #1@}
+\xydef@\endellipse@@{\xy@{endELLIPSE}{\leave@\origDirection@
+ \edef\next@{\egroup \X@min=\the\X@min \X@max=\the\X@max
+ \Y@min=\the\Y@min \Y@max=\the\Y@max }\next@}\let\bstartPLACE@=\relax}
+\xydef@\preARC@{%
+ \ifx\next\space@ \expandafter\DN@\space{\xyFN@\preARC@}%
+ \else\ifx\next @\DN@{\xy@{ellipseARC}\ellipticARC@ \arc@}%
+ \else\ifx\next ~\DN@~##1{\tildeARC@{##1}}%
+ \else\DN@{\xy@{ellipticARC}\ellipticARC@ \arc@}%
+ \fi\fi\fi \next@ }
+\xydef@\arc@#1@#2{\DN@{#2}%
+ \ifx\next@\empty \xy@{arcSTYLE}{\def\arcSTYLE{-}}%
+ \else \xy@{arcSTYLE}{\def\arcSTYLE{#2}}\fi \arc@i
+ \DNii@{#1}%
+ \ifx\nextii@\empty \DN@{\fullCircle@}%
+ \else \DN@{_}%
+ \ifx\next@\nextii@ \xy@{_}{\def\arcOrient@@{_}}%
+ \let\arcOrient@@=\next@ \DN@{\fullCircle@}%
+ \else \DN@{^}%
+ \ifx\next@\nextii@ \xy@{^}{\def\arcOrient@@{^}}%
+ \let\arcOrient@@=\next@ \DN@{\fullCircle@}%
+ \else \DN@{\def\afterARCextents@@{%
+ \xy@{aftARCext}{\let\doCircleArc@=\doCircleArc@@}%
+ \ellipseArc@ \xy@{doCircARCs}{\doCircleArcs@}\endarc@ }%
+ \xyFN@\getarcparams@#1@}\fi\fi\fi
+ \next@ }
+\xydef@\arc@i{\xy@{ARCi}{%
+ \save@\idfromc@{0@c}\cfromp@\idfromc@{0@p}%
+ \enter@\cplusthec@ \enter@\relax\begingroup\vfromslide@i{}@\czeroEdge@
+ \leave@\idfromc@{0@m}\leave@ \zeroDivideLimit@{50}%
+ \edef\origDirection@{\Direction=\the\Direction
+ \relax\noexpand\imposeDirection@}%
+ \let\startDirection@=\origDirection@ \def\startDirection@@{}%
+ \def\endDirection@{}\def\endDirection@@{}\def\arcOrient@@{^}}%
+ \def\arcOrient@@{^}\let\processDirections@=\checkstartDirection@
+ \def\arcRadius@{}\def\ellipseRatio@{}\def\arcScale@{\arcScale@@}}
+\message{circles,}
+\xydef@\fullCircle@{\xy@{fullCIRC}{\let\endDirection@=\relax
+ \let\doCircleArc@=\doMergeEndArc@@}\circleArc@ }%
+\xydef@\getarcparams@{%
+ \ifx\space@\next \expandafter\DN@\space{\xyFN@\getarcparams@}%
+ \else\addLT@\ifx \next \xy@{<}{}%
+ \addGT@{\addLT@\DN@##1}{\splitRadius@dim##1,,@}%
+ \else\ifx\next (\DN@({\xyFN@\checkRadOpen@}%
+ \else\ifx\next @\xy@{@}{}\DN@ @{\fullEllipse@}%
+ \else \addLQ@\ifx \next \addLQ@\DN@{\xy@`{}\ARCturn@}%
+ \else \DN@{\getarcExtents@}%
+ \fi\fi\fi\fi\fi \next@ }
+\xydef@\checkRadOpen@{%
+ \ifx\next *\DN@{\xyFN@\getarcExtents@ (}%
+ \else \xy@{(}{}\DN@##1){\splitRadius@##1,,@}%
+ \fi \next@ }
+\xydef@\fixedRadiusArc@{%
+ \xy@{fixRadArc}{\save@ \idfromc@{0@0}\cfromp@\idfromc@{0@c}\leave@}%
+ \xyFN@\fixedRadiusArc@i }
+\xydef@\fixedRadiusArc@i{%
+ \ifx\next\space@ \expandafter\DN@\space{\xyFN@\fixedRadiusArc@i}%
+ \else\ifx\next @\xy@{@}{}\DN@ @{\fullEllipse@}%
+ \else\DN@{\let\processDirections@=\processArcDirections@
+ \def\afterARCextents@@{\xy@{aftARCext}{\let\doCircleArc@=\doCircleArc@@
+ \ellipseSector@}}\xyFN@\getarcExtents@}%
+ \fi\fi \next@ }
+\xydef@\arcScale@@{\xy@{arcSCALE@@}{\save@
+ \cfromid@{0@0}\pfromc@\cfromid@{0@p}\setbase@\X@p\Y@p\X@c\Y@c}}
+\xydef@\arcScale@dim#1{\xy@{arcSCALEdim}{\save@
+ \cfromid@{0@0}\pfromc@ \cfromid@{0@p}\setupDirection@\cfromp@
+ \enter@\cplusthec@ \begingroup\vfromslide@i#1@%
+ \setbase@\X@p\Y@p\X@c\Y@c \idfromc@{0@p}}}
+\xydef@\ellipseScale@dim#1{\xy@{ellSCALEdim}{\setupDirection@\cfromp@
+ \enter@\cplusthec@ \aboveDirection@\xydashl@ \vfromslide@{#1}\leave@
+ \setbase@@\X@c\Y@c}}
+\xydef@\ellipseScale@#1{\xy@{ellSCALE@}%
+ {\vfromcartesian@@0,#1@\setbase@@\X@c\Y@c}}
+\xydef@\splitRadius@dim#1,#2,#3@{%
+ \DN@{#1}\ifx\next@\empty\dimen@=\z@\else\dimen@=#1\relax%\splinetracing
+ \expandafter\def\expandafter\arcRadius@
+ \expandafter{\arcScale@dim{#1}}\fi
+ \DN@{#2}\ifx\next@\empty\dimen@ii=\z@\def\ellipseRatio@{}%
+ \else\dimen@ii=#2\relax \expandafter
+ \def\expandafter\ellipseRatio@\expandafter{\ellipseScale@dim{#2}}%
+ \fi \fixedRadiusArc@ }
+\xydef@\splitRadius@#1,#2,#3@{%
+ \DN@{#1}\ifx\next@\empty\dimen@=\z@\else\dimen@=#1\p@\relax\fi
+ \DN@{#2}\ifx\next@\empty\dimen@ii=\z@\else\dimen@ii=#2\p@\relax\fi
+ \ifdim\dimen@=\z@ \ifdim\dimen@ii=\z@\else \expandafter
+ \def\expandafter\ellipseRatio@\expandafter{\ellipseScale@{#2}}\fi
+ \else
+ \ifdim\dimen@ii=\z@
+ \def\arcScale@{\xy@{arcSCALE@}{\save@\cfromid@{0@0}%
+ \X@origin=\X@c \Y@origin=\Y@c
+ \X@xbase=#1\X@xbase \Y@xbase=#1\Y@xbase
+ \X@ybase=#1\X@ybase \Y@ybase=#1\Y@ybase
+ \advance\X@c\X@xbase \advance\Y@c\Y@xbase \czeroEdge@
+ \idfromc@{0@p}\idfromc@{0@c}}}%
+ \else
+ \def\arcScale@{\xy@{arcSCALE@}{\save@\cfromid@{0@0}%
+ \X@origin=\X@c \Y@origin=\Y@c
+ \X@xbase=#1\X@xbase \Y@xbase=#1\Y@xbase
+ \X@ybase=#2\X@ybase \Y@ybase=#2\Y@ybase
+ \advance\X@c\X@xbase \advance\Y@c\Y@xbase \czeroEdge@
+ \idfromc@{0@p}\idfromc@{0@c}}}%
+ \fi
+ \fi \fixedRadiusArc@ }
+\xydef@\baseOrient@{\DN@{_}\ifx\next@\arcOrient@@
+ \X@ybase=-\X@ybase \Y@ybase=-\Y@ybase \fi }
+\message{ellipses,}
+\xydef@\fullEllipse@{\xy@{fullELLIPSE}%
+ {\def\startDirection@{}\let\doCircleArc@=\doMergeEndArc@@}%
+ \ellipseArc@
+ \xy@{doCIRCarcs}{\leave@ \doCircleArcs@}\endarc@ }
+\xydef@\ellipseArc@{%
+ \arcScale@ \arcRadius@ \ellipseRatio@
+ \xy@{arcCONTROLS}{\baseOrient@ \arcControls@ \let\bstartPLACE@=\relax }}
+\xydef@\cubicARCcontrols@@{\czeroEdge@
+ \vfromcartesian@@0,1@\idfromc@{1@c}%
+ \vfromcartesian@@-1,0@\idfromc@{2@c}%
+ \vfromcartesian@@0,-1@\idfromc@{3@c}%
+ \vfromcartesian@@1,\arcparam@ @\idfromc@{1@m}%
+ \vfromcartesian@@\arcparam@,1@\idfromc@{2@m}%
+ \vfromcartesian@@-\arcparam@,1@\idfromc@{3@m}%
+ \vfromcartesian@@-1,\arcparam@ @\idfromc@{4@m}%
+ \vfromcartesian@@-1,-\arcparam@ @\idfromc@{5@m}%
+ \vfromcartesian@@-\arcparam@,-1@\idfromc@{6@m}%
+ \vfromcartesian@@\arcparam@,-1@\idfromc@{7@m}%
+ \vfromcartesian@@1,-\arcparam@ @\idfromc@{8@m}%
+ }
+\xydef@\doCircleArc@@#1#2{\save@ \ifcase#2\relax
+ \doCircleArc@@@{0@p}{1@m}{2@m}{1@c}{#1}\or
+ \doCircleArc@@@{1@c}{3@m}{4@m}{2@c}{#1}\or
+ \doCircleArc@@@{2@c}{5@m}{6@m}{3@c}{#1}\or
+ \doCircleArc@@@{3@c}{7@m}{8@m}{0@p}{#1}\or
+ \doCircleArc@@@{0@p}{1@m}{2@m}{1@c}{#1}\or
+ \doCircleArc@@@{1@c}{3@m}{4@m}{2@c}{#1}\or
+ \doCircleArc@@@{2@c}{5@m}{6@m}{3@c}{#1}\or
+ \doCircleArc@@@{3@c}{7@m}{8@m}{0@p}{#1}\fi \leave@ }
+\xydef@\doCircleArc@@@#1#2#3#4#5{%
+ \cfromid@{#1}\pfromc@\senter@
+ \cfromid@{#2}\spushc@\cfromid@{#3}\spushc@\cfromid@{#4}%
+ \connect@\crvs{#5}\relax\sinit@\sleave@}
+\xydef@\doMergeEndArc@@#1#2{\save@\ifcase#2\relax
+ \doMergeEnd@@@{0@p}{1@m}{2@m}{1@c}{#1}\relax\or
+ \doMergeEnd@@@{1@c}{3@m}{4@m}{2@c}{#1}\relax\or
+ \doMergeEnd@@@{2@c}{5@m}{6@m}{3@c}{#1}\relax\or
+ \doMergeEnd@@@{3@c}{7@m}{8@m}{0@p}{#1}@\fi \leave@ }
+\xydef@\doMergeEnd@@@#1#2#3#4#5#6{%
+ \cfromid@{#1}\pfromc@\senter@
+ \cfromid@{#2}\spushc@\cfromid@{#3}\spushc@\cfromid@{#4}%
+ \ifx#6\relax
+ \L@c=.1\p@ \R@c=\L@c \U@c=\L@c \D@c=\L@c \Edge@c={\rectangleEdge}\fi
+ \enter@\cmergethec@\cfromid@{0@c}\leave@
+ \enter@\cmergethec@\cfromcontrols@{#1}{#2}{#3}{#4}\leave@
+ \connect@\crvs{#5}\relax
+ \sinit@\sleave@}
+\xydef@\doMergeStartArc@#1#2{\save@\ifcase#2\relax
+ \doMergeStart@@{0@p}{1@m}{2@m}{1@c}{#1}@\or
+ \doMergeStart@@{1@c}{3@m}{4@m}{2@c}{#1}\relax\or
+ \doMergeStart@@{2@c}{5@m}{6@m}{3@c}{#1}\relax\or
+ \doMergeStart@@{3@c}{7@m}{8@m}{0@p}{#1}\relax\fi \leave@ }
+\xydef@\doMergeStart@@#1#2#3#4#5#6{%
+ \cfromid@{#1}\ifx#6\relax
+ \L@c=.1\p@ \R@c=\L@c \U@c=\L@c \D@c=\L@c \Edge@c={\rectangleEdge}\fi
+ \enter@\cmergethec@\cfromid@{0@x}\leave@
+ \enter@\cmergethec@\cfromcontrols@{#4}{#3}{#2}{#1}\leave@
+ \pfromc@
+ \senter@ \cfromid@{#2}\spushc@\cfromid@{#3}\spushc@\cfromid@{#4}%
+ \connect@\crvs{#5}\relax\sinit@\sleave@}
+\xydef@\doMergeBothArc@#1#2{\save@\ifcase#2\relax
+ \doMergeBoth@@{0@p}{1@m}{2@m}{1@c}{#1}@\or
+ \doMergeBoth@@{1@c}{3@m}{4@m}{2@c}{#1}\relax\or
+ \doMergeBoth@@{2@c}{5@m}{6@m}{3@c}{#1}\relax\or
+ \doMergeBoth@@{3@c}{7@m}{8@m}{0@p}{#1}\relax\fi \leave@ }
+\xydef@\doMergeBoth@@#1#2#3#4#5#6{%
+ \cfromid@{#1}\ifx#6\relax
+ \L@c=.1\p@ \R@c=\L@c \U@c=\L@c \D@c=\L@c \Edge@c={\rectangleEdge}\fi
+ \enter@\cmergethec@\cfromid@{0@x}\leave@
+ \enter@\cmergethec@\cfromcontrols@{#4}{#3}{#2}{#1}\leave@
+ \pfromc@
+ \senter@ \cfromid@{#2}\spushc@\cfromid@{#3}\spushc@\cfromid@{#4}%
+ \enter@\cmergethec@\cfromid@{0@c}\leave@
+ \enter@\cmergethec@\cfromcontrols@{#1}{#2}{#3}{#4}\leave@
+ \connect@\crvs{#5}\relax\sinit@\sleave@}
+\xydef@\doMergeEndArc@#1#2{\count@@=#2\relax
+ \ifnum\count@@>\thr@@ \advance\count@@-4\fi\relax
+ \doMergeEndArc@@{#1}\count@@ }
+\xydef@\doStraightArc@@#1{\xy@{STRAITarc}{\save@
+ \cfromid@{0@p}\pfromc@\cfromid@{0@c}%
+ \senter@\connect@\crvs{#1}\sinit@\sleave@\leave@}}
+\xydef@\cfromcontrols@#1#2#3#4{\bgroup
+ \cfromid@{#1}\L@p=\X@c \U@p=\Y@c
+ \cfromid@{#4}\R@p=\X@c \D@p=\Y@c
+ \cfromid@{#3}\A@=\X@c \B@=\Y@c \cfromid@{#2}%
+ \ifdim\R@p>\L@p \ifdim\A@>\R@p \R@p=\A@
+ \ifdim\X@c>\R@p \R@p=\X@c\fi\fi
+ \else \ifdim\A@<\R@p \R@p=\A@
+ \ifdim\X@c<\R@p \R@p=\X@c\fi\fi
+ \fi
+ \ifdim\D@p>\U@p \ifdim\B@>\D@p \D@p=\B@
+ \ifdim\Y@p>\D@p \D@p=\Y@p\fi\fi
+ \else \ifdim\B@<\D@p \D@p=\B@
+ \ifdim\Y@p<\D@p \D@p=\Y@p\fi\fi
+ \fi
+ \edef\next@{\egroup \X@c=\the\R@p \Y@c=\the\D@p}\next@ }
+\xydef@\doCircleArcs@{\save@
+ \cfromid@{0@0}\pfromc@\cfromid@{0@p}\setupDirection@
+ \startDirection@ \edef\startDirection@@{\the\Direction}%
+ \cfromid@{1@c}\setupDirection@ \edef\quadDirection@{\the\Direction}\relax
+ \count@=\quadDirection@ \relax\def\nextii@{^}%
+ \let\preDirection@@=\startDirection@@
+ \ifx\nextii@\arcOrient@@
+ \ifnum\quadDirection@>\startDirection@@ \relax
+ \else \advance\count@ by8192 \relax\edef\quadDirection@{\the\count@}\fi
+ \ifx\endDirection@@\empty
+ \ifx\endDirection@\relax
+ \bgroup\cfromid@{0@c}\setupDirection@
+ \edef\next@{\egroup \count@@=\the\Direction}\next@ \relax
+ \ifnum\count@@<\startDirection@@ \advance\count@@ 8192 \fi
+ \edef\endDirection@@{\the\count@@}%
+ \else
+ \count@@=\startDirection@@
+ \advance\count@@ by8192 \edef\endDirection@@{\the\count@@}%
+ \fi
+ \else
+ \count@@=\endDirection@@ \relax\ifnum\count@@<\startDirection@@ \relax
+ \advance\count@@ by8192 \edef\endDirection@@{\the\count@@}\fi
+ \fi
+ \ifnum\endDirection@@>\quadDirection@
+ \DN@{\expandafter\doCircleArc@@\expandafter{\arcSTYLE}{0}}%
+ \else
+ \DN@{\expandafter\doCircleArc@\expandafter{\arcSTYLE}{0}}%
+ \fi
+ \else
+ \ifnum\count@<\startDirection@@\relax\else\advance\count@ by-8192 \relax
+ \edef\quadDirection@{\the\count@}\fi
+ \ifx\endDirection@@\empty
+ \ifx\endDirection@\relax
+ \bgroup\cfromid@{0@c}\setupDirection@
+ \edef\next@{\egroup \count@@=\the\Direction}\next@ \relax
+ \ifnum\count@@>\startDirection@@ \advance\count@@-8192 \fi
+ \edef\endDirection@@{\the\count@@}%
+ \else
+ \count@@=\startDirection@@
+ \advance\count@@ by-8192 \edef\endDirection@@{\the\count@@}%
+ \fi
+ \else
+ \count@@=\endDirection@@ \relax \ifnum\count@@>\startDirection@@
+ \advance\count@@ by-8192 \edef\endDirection@@{\the\count@@}\fi
+ \fi
+ \ifnum\endDirection@@<\quadDirection@
+ \DN@{\expandafter\doCircleArc@@\expandafter{\arcSTYLE}{0}}%
+ \else \DN@{\expandafter\doCircleArc@\expandafter{\arcSTYLE}{0}}\fi
+ \fi
+ \next@ \relax
+ \count@=\quadDirection@ \relax\def\nextii@{^}\DN@{}%
+ \ifx\nextii@\arcOrient@@
+ \count@@=\startDirection@@ \advance\count@@ by4096 \relax
+ \ifnum \count@<\endDirection@@ \relax
+ \ifnum\endDirection@@>\count@@
+ \DN@{\expandafter\doCircleArc@@\expandafter{\arcSTYLE}{1}}%
+ \else \DN@{\expandafter\doCircleArc@\expandafter{\arcSTYLE}{1}}\fi
+ \fi
+ \else
+ \count@@=\startDirection@@ \advance\count@@ by-4096 \relax
+ \ifnum \count@>\endDirection@@ \relax
+ \ifnum\endDirection@@<\count@@
+ \DN@{\expandafter\doCircleArc@@\expandafter{\arcSTYLE}{1}}%
+ \else \DN@{\expandafter\doCircleArc@\expandafter{\arcSTYLE}{1}}\fi
+ \fi\fi
+ \next@ \relax
+ \ifx\next@\empty \else \relax
+ \count@=\startDirection@@ \relax\def\nextii@{^}\DN@{}%
+ \ifx\nextii@\arcOrient@@ \advance\count@ by4096 \relax
+ \count@@=\quadDirection@ \advance\count@@ by4096 \relax
+ \ifnum \count@<\endDirection@@
+ \ifnum\endDirection@@>\count@@
+ \DN@{\expandafter\doCircleArc@@\expandafter{\arcSTYLE}{2}}%
+ \else \DN@{\expandafter\doCircleArc@\expandafter{\arcSTYLE}{2}}\fi
+ \fi
+ \else \advance\count@ by-4096 \relax
+ \count@@=\quadDirection@ \advance\count@@ by-4096 \relax
+ \ifnum \count@>\endDirection@@ \relax
+ \ifnum\endDirection@@<\count@@
+ \DN@{\expandafter\doCircleArc@@\expandafter{\arcSTYLE}{2}}%
+ \else \DN@{\expandafter\doCircleArc@\expandafter{\arcSTYLE}{2}}\fi
+ \fi\fi
+ \next@ \relax
+ \fi
+ \ifx\next@\empty \else \relax
+ \count@=\quadDirection@ \def\nextii@{^}\DN@{}%
+ \ifx\nextii@\arcOrient@@ \advance\count@ by4096 \relax
+ \ifnum \count@<\endDirection@@
+ \DN@{\expandafter\doCircleArc@\expandafter{\arcSTYLE}{3}}\fi
+ \else \advance\count@ by-4096 \relax
+ \ifnum \count@>\endDirection@@
+ \DN@{\expandafter\doCircleArc@\expandafter{\arcSTYLE}{3}}\fi
+ \fi \next@ \relax
+ \fi
+ \leave@ }
+\message{elliptical arcs,}
+\xydef@\arcmagic@@{0.5517847}
+\xylet@\arcmagic=\arcmagic@@
+\xydef@\tildeARC@#1{%
+ \if q#1\DN@{\xy@{quadARC}\quadARC@ \arc@}%
+ \else\if c#1\DN@{\xyFN@\cubicARC@i}%
+ \else\if e#1\DN@{\xy@{ellipticARC}\ellipticARC@ \arc@}%
+ \else\if i#1\DN@{\xy@{interpARC}\interpARC@ \arc@}%
+ \else\if p#1\DN@{\xy@{cuspidalARC}\cuspidalARC@ \arc@}%
+ \else\xywarning@{unknown arc type: #1 }%
+ \DN@{\xy@{ellipticARC}\ellipticARC@ \arc@}%
+ \fi\fi\fi\fi\fi \next@ }
+\xydef@\cubicARC@i{%
+ \ifx\next\space@ \expandafter\DN@\space{\xyFN@\cubicARC@i}%
+ \else\ifx\next (\DN@(##1){\xy@{cubicARC(##1)}{\cubicARC@{##1}}\arc@}%
+ \else \DN@{\xy@{cubicARC(1)}{\cubicARC@{1}}\arc@}%
+ \fi\fi \next@ }
+\xydef@\ellipticARC@{\let\arcControls@=\cubicARCcontrols@@
+ \edef\arcparam@{\arcmagic@@}}
+\xydef@\cubicARC@#1{\let\arcControls@=\cubicARCcontrols@@
+ \dimen@=#1\p@ \edef\arcparam@{\expandafter\removePT@\the\dimen@}}
+\xydef@\quadARC@{\let\arcControls@=\cubicARCcontrols@@
+ \def\arcparam@{.66667}}
+\xydef@\cuspidalARC@{\let\arcControls@=\cubicARCcontrols@@
+ \def\arcparam@{2}}
+\xydef@\interpARC@{\let\arcControls@=\cubicARCcontrols@@
+ \def\arcparam@{1.33333}}
+\xydef@\ARCturn@{\xy@@\bgroup\afterCOORD{%
+ \xy@@{\edef\next@{\egroup \A@=\the\X@c \B@=\the\Y@c}\next@}\ARCturn@@}}
+\xydef@\ARCturn@@#1@{\DN@{#1}\DNii@{^}%
+ \ifx\next@\nextii@ \xy@{^}{\def\arcOrient@@{^}}%
+ \else\DNii@{_}\ifx\next@\nextii@ \xy@{_}{\def\arcOrient@@{_}}%
+ \else\xy@{}{\def\arcOrient@@{}}\fi\fi
+ \xy@@\ARCturn@@@ \processDirections@@ }
+\xydef@\ARCturn@@@{%
+ \bgroup\cfromid@{0@p}\X@p=\X@c \Y@p=\Y@c \X@c=\A@ \Y@c=\B@
+ \setupDirection@ \edef\next@{\egroup\count@=\the\Direction}\next@\relax
+ \edef\startDirection@@{\the\count@ }%
+ \bgroup\cfromid@{0@c}\X@p=\A@ \Y@p=\B@
+ \setupDirection@ \edef\next@{\egroup\count@=\the\Direction}\next@\relax
+ \edef\endDirection@@{\the\count@}%
+ \ifx\arcOrient@@\empty
+ \bgroup\cfromid@{0@p}\X@p=\X@c \Y@p=\Y@c \cfromid@{0@c}%
+ \setupDirection@ \edef\next@{\egroup\count@@=\the\Direction}\next@\relax
+ \count@=-\count@@ \advance\count@\startDirection@@ \relax \count@=-\count@
+ \ifnum\count@>4096 \def\arcOrient@@{_}%
+ \else\ifnum\count@<-4096 \def\arcOrient@@{^}%
+ \else\ifnum\count@>\z@ \def\arcOrient@@{^}%
+ \else\def\arcOrient@@{_}\fi\fi\fi
+ \fi }
+\xydef@\circleArc@{%
+ \xy@{circARC@}{\cfromid@{0@p}\pfromc@\cfromp@\startDirection@
+ \arcCenter@\idfromc@{0@0}%
+ \def\startDirection@{\bgroup
+ \cfromid@{0@0}\pfromc@\cfromid@{0@p}\setupDirection@
+ \edef\next@{\egroup \Direction=\the\Direction}\next@
+ \relax\imposeDirection@}}%
+ \ifx\endDirection@@\empty
+ \ifx\arcRadius@\empty \ifx\ellipseRatio@\empty\else
+ \DN@{\arcScale@@}\ifx\arcScale@\next@\else
+ \xy@@{\bgroup\cfromid@{0@0}\pfromc@\cfromid@{0@c}\setupDirection@
+ \edef\next@{\egroup \Direction=\the\Direction}\next@
+ \edef\endDirection@@{\the\Direction}}\fi\fi\fi\fi
+ \ellipseArc@ \xy@@{\leave@ \doCircleArcs@}\endarc@ }
+\xydef@\arcbisector{%
+ \cfromid@{0@p}\pfromc@\cfromid@{0@c}\setupDirection@
+ \advance\X@c\X@p\divide\X@c\tw@
+ \advance\Y@c\Y@p\divide\Y@c\tw@ \czeroEdge@ \pfromc@
+ \enter@\cplusthec@ \enter@\relax\begingroup
+ \aboveDirection@\xydashl@ \vfromslide@i{}@\leave@ }
+\xydef@\arcCenter@{%
+ \cfromid@{0@p}\pfromc@\cfromid@{0@m}\setupDirection@
+ \cfromp@\enter@\cplusthec@ \enter@\relax\begingroup
+ \aboveDirection@\xydashl@ \vfromslide@i{}@\leave@\no@@
+ \arcCenter@i }
+\xydef@\arcCenter@i{%
+ \enter@{\pfromthep@}\setupDirection@ \Creset@@
+ \let\PLACEedgep@@=\PLACEedgep@ \let\PLACEedgec@@=\PLACEedgec@
+ \enter@{\pfromthep@\basefromthebase@}\bgroup
+ \arcbisector \edef\next@{\egroup
+ \X@c =\the\X@c \Y@c=\the\Y@c \X@p=\the\X@p \Y@p=\the\Y@p }%
+ \next@ \Cintercept@@ \leave@\leave@ }
+\xydef@\getarcExtents@{%
+ \ifx\space@\next\expandafter\DN@\space{\xyFN@\getarcExtents@}%
+ \else\ifx\next @\xy@{@}{}\DN@ @{\fullEllipse@}%
+ \else\DN@{\xy@{arcEXTENTs}{\save@
+ \def\startDirection@{\Direction=\startDirection@@ \imposeDirection@}}%
+ \xyFN@\getarcExtents@ii}\fi\fi \next@ }
+\xydef@\getarcExtents@ii{%
+ \ifx\next!\xy@{![[}{}\DN@![[##1]]{\getxyDirection@{##1}\getarcExtents@iv}%
+ \else\DN@{\getarcExtents@iv}\fi \next@ }
+\xydef@\getarcExtents@iv{\afterDIRECTIONorEMPTY
+ {\xy@{startDIR}{\edef\startDirection@@{\the\Direction}\leave@}%
+ \xyFN@\getarcOrientation@}%
+ {\xy@{startDIR}{\edef\startDirection@@{\the\Direction}\leave@}%
+ \xyFN@\getarcOrientation@}}
+\xydef@\getarcOrientation@{%
+ \ifx\space@\next\expandafter\DN@\space{\xyFN@\getarcOrientation@}%
+ \else\ifx\next @\xy@{@}{}\DN@{\getEndDirection@x}%
+ \else\ifx\next,\xy@{,}{}\DN@,{\xyFN@\getarcOrientation@i}%
+ \else\DN@{\getarcOrientation@i}\fi\fi\fi \next@ }%
+\xydef@\getarcOrientation@i{%
+ \ifx\space@\next\expandafter\DN@\space{\xyFN@\getarcOrientation@i}%
+ \else\ifx\next @\xy@{@}{}\DN@{\getEndDirection@x}%
+ \else\ifx\next^{}\DN@##1{\xy@{^}{\def\arcOrient@@{^}}%
+ \def\arcOrient@@{^}\xyFN@\getEndDirection@}%
+ \else\ifx\next_\DN@##1{\xy@{_}{\def\arcOrient@@{_}}%
+ \def\arcOrient@@{_}\xyFN@\getEndDirection@}%
+ \else\DN@{\xyFN@\getEndDirection@}%
+ \fi\fi\fi\fi \next@ }
+\xydef@\getEndDirection@{%
+ \ifx\space@\next\expandafter\DN@\space{\xyFN@\getEndDirection@}%
+ \else\ifx\next,\DN@,{\xy@{,}{}\xyFN@\getEndDirection@}%
+ \else\addEQ@\ifx\next\addEQ@\DN@{\xy@{=}{\save@\startDirection@}%
+ \xyFN@\getEqDirection@}%
+ \else \ifx\next!\DN@![[##1]]{\xy@{![[}{\save@}\getxyDirection@{##1}%
+ \xy@{endDIR}{\edef\endDirection@@{\the\Direction}}%
+ \xyFN@\getEndDirection@i}%
+ \else \DN@{\xy@{origDIR}{\save@\origDirection@}\getEndDirection@i}%
+ \fi\fi\fi\fi \next@ }
+\xydef@\getEqDirection@{%
+ \ifx\space@\next\expandafter\DN@\space{\xyFN@\getEqDirection@}%
+ \else\ifx\next @\xy@{@}{}\DN@ @{%
+ \xy@{sameDIR}{\edef\endDirection@@{\startDirection@@}\leave@}%
+ \parEllipse@{1}{}}%
+ \else\ifx\next (\DN@({\xyFN@\checkEqOpen@}%
+ \else \DN@{\getEndDirection@i}\fi\fi\fi \next@ }
+\xydef@\checkEqOpen@{%
+ \ifx\next *\DN@{\getEndDirection@i (}%
+ \else \DN@##1)##2@{\xy@{()}\leave@ \parEllipse@{##1}{##2}}%
+ \fi \next@ }
+\xydef@\getEndDirection@i{\afterDIRECTIONorEMPTY
+ {\xy@{endDIR}{\edef\endDirection@@{\the\Direction}\leave@}%
+ \getEndDirection@x }%
+ {\xy@{endDIR}\leave@ \getEndDirection@x }}
+\xydef@\getEndDirection@x#1@{%
+ \DN@{#1}\ifx\next@\empty\relax \else\xywarning@{\omittingTokens@}\fi
+ \processDirections@ }
+\xydef@\omittingTokens@{omitting unused tokens: \codeof\next@ }
+\xydef@\processDirections@@{%
+ \ifx\endDirection@@\empty \skewCircle@
+ \else \skewEllipse@ \expandafter \afterARCextents@@ \fi }
+\xydef@\processArcDirections@{%
+ \xy@{ARCdirs}{\ifx\endDirection@@\empty
+ \origDirection@ \edef\endDirection@@{\the\Direction}\fi}%
+ \ellipseArc@
+ \xy@{procARCdirs}\processArcDirections@@
+ \let\arcScale@\ellsave@ \let\arcRadius@\ellsave@ \def\ellipseRatio@{}%
+ \xy@{circSECTORS}{\doCircleSectors@}\endarc@ }
+\xydef@\ellsave@{\xy@@{\save@}}
+\xydef@\processArcDirections@@{\save@
+ \bgroup \cfromid@{0@0}\pfromc@ \Direction=\startDirection@@
+ \DN@{_}\ifx\next@\arcOrient@@
+ \advance\Direction \ifnum\Direction<\z@-\fi 4096 \relax\fi
+ \imposeDirection@
+ \d@X=\cosDirection\Y@ybase \advance\d@X-\sinDirection\X@ybase
+ \d@Y=-\cosDirection\Y@xbase \advance\d@Y\sinDirection\X@xbase
+ \setupDirection@i
+ \d@X=-\cosDirection\X@ybase \advance\d@X\sinDirection\X@xbase
+ \d@Y=-\cosDirection\Y@ybase \advance\d@Y\sinDirection\Y@xbase
+ \enter@\cplusthec@\X@c=\d@X \Y@c=\d@Y \leave@ \czeroEdge@
+ \setupDirection@i
+ \czeroEdge@
+ \edef\next@{\egroup \cfromthec@ \count@=\the\Direction}\next@
+ \edef\startDirection@@{\the\count@}\idfromc@{0@x}%
+ \bgroup \cfromid@{0@0}\pfromc@ \Direction=\endDirection@@
+ \DN@{_}\ifx\next@\arcOrient@@
+ \advance\Direction \ifnum\Direction<\z@-\fi 4096 \relax\fi
+ \imposeDirection@
+ \d@X=\cosDirection\Y@ybase \advance\d@X-\sinDirection\X@ybase
+ \d@Y=-\cosDirection\Y@xbase \advance\d@Y\sinDirection\X@xbase
+ \setupDirection@i
+ \d@X=-\cosDirection\X@ybase \advance\d@X\sinDirection\X@xbase
+ \d@Y=-\cosDirection\Y@ybase \advance\d@Y\sinDirection\Y@xbase
+ \enter@\cplusthec@\X@c=\d@X \Y@c=\d@Y \leave@
+ \czeroEdge@
+ \setupDirection@i
+ \edef\next@{\egroup \cfromthec@ \count@=\the\Direction}\next@
+ \edef\endDirection@@{\the\count@}\idfromc@{0@c}%
+ \count@=\startDirection@@ \relax \count@@=\endDirection@@ \relax
+ \DN@{^}\ifx\arcOrient@@\next@
+ \ifnum\count@@>\count@ \else\advance\count@@ 8192 \relax\fi
+ \else
+ \ifnum\count@@<\count@ \else\advance\count@@-8192 \relax\fi\fi
+ \edef\startDirection@@{\the\count@}%
+ \edef\endDirection@@{\the\count@@}}%
+\xydef@\doCircleSectors@{%
+ \let\doCircleArc@=\doMergeEndArc@@ \leave@ \leave@
+ \cfromid@{0@0}\pfromc@\cfromid@{0@p}\setupDirection@
+ \count@=\Direction \DN@{^}\ifx\arcOrient@@\next@
+ \ifnum\count@>\startDirection@@ \advance\count@-8192 \fi\relax
+ \count@@=\count@ \advance\count@@ 8192 \relax
+ \ifnum\count@@<\endDirection@@ \advance\count@@ 8192 \fi\relax
+ \else
+ \ifnum\count@<\startDirection@@ \advance\count@ 8192 \fi\relax
+ \count@@=\count@ \advance\count@@-8192 \relax
+ \ifnum\count@@>\endDirection@@ \advance\count@@-8192 \fi\relax
+ \fi \relax
+ \edef\preDirection@@{\the\count@}\edef\postDirection@@{\the\count@@}%
+ \cfromid@{1@c}\setupDirection@ \count@=\Direction
+ \def\nextii@{^}\ifx\nextii@\arcOrient@@
+ \DN@{\forwardSectors@\doEllipseSectors@}%
+ \ifnum\count@<\preDirection@@ \advance\count@ 8192 \relax
+ \else \count@@=\count@\advance\count@-8192 \relax
+ \ifnum\count@@<\preDirection@@ \else\count@=\count@@ \fi\fi
+ \else
+ \DN@{\backwardSectors@\doEllipseSectors@}%
+ \ifnum\count@>\preDirection@@ \advance\count@-8192 \relax
+ \else \count@@=\count@\advance\count@ 8192 \relax
+ \ifnum\count@@>\preDirection@@ \else\count@=\count@@ \fi\fi
+ \fi \edef\quadDirection@{\the\count@}%
+ \next@ }
+\xydef@\forwardSectors@{%
+ \ifnum \startDirection@@<\quadDirection@ \def\startSector@@{0}%
+ \else\count@=\preDirection@@ \advance\count@ 4096 \relax
+ \ifnum \startDirection@@<\count@ \def\startSector@@{1}%
+ \else\count@=\quadDirection@ \advance\count@ 4096 \relax
+ \ifnum\startDirection@@<\count@ \def\startSector@@{2}%
+ \else \def\startSector@@{3}\fi\fi\fi
+ \ifnum\quadDirection@ <\endDirection@@ \relax
+ \count@=\preDirection@@ \advance\count@ 4096 \relax
+ \ifnum\count@<\endDirection@@ \relax
+ \count@=\quadDirection@ \advance\count@ 4096 \relax
+ \ifnum\count@<\endDirection@@ \relax
+ \count@=\preDirection@@ \advance\count@ 8192 \relax
+ \ifnum\count@<\endDirection@@ \relax
+ \count@=\quadDirection@ \advance\count@ 8192 \relax
+ \ifnum\count@<\endDirection@@ \relax
+ \count@=\preDirection@@ \advance\count@ 12288 \relax
+ \ifnum\count@<\endDirection@@ \relax
+ \count@=\quadDirection@ \advance\count@ 12288 \relax
+ \ifnum\count@<\endDirection@@ \def\endSector@@{7}%
+ \else \def\endSector@@{6}\fi
+ \else \def\endSector@@{5}\fi
+ \else \def\endSector@@{4}\fi
+ \else \def\endSector@@{3}\fi
+ \else \def\endSector@@{2}\fi
+ \else \def\endSector@@{1}\fi
+ \else \def\endSector@@{0}\fi }
+\xydef@\backwardSectors@{%
+ \ifnum \startDirection@@>\quadDirection@ \def\startSector@@{0}%
+ \else\count@=\preDirection@@ \advance\count@-4096 \relax
+ \ifnum \startDirection@@>\count@ \def\startSector@@{1}%
+ \else\count@=\quadDirection@ \advance\count@-4096 \relax
+ \ifnum\startDirection@@>\count@ \def\startSector@@{2}%
+ \else \def\startSector@@{3}\fi\fi\fi
+ \ifnum\quadDirection@>\endDirection@@ \relax
+ \count@=\preDirection@@ \advance\count@-4096 \relax
+ \ifnum\count@>\endDirection@@ \relax
+ \count@=\quadDirection@ \advance\count@-4096 \relax
+ \ifnum\count@>\endDirection@@ \relax
+ \count@=\preDirection@@ \advance\count@-8192 \relax
+ \ifnum\count@>\endDirection@@ \relax
+ \count@=\quadDirection@ \advance\count@-8192 \relax
+ \ifnum\count@>\endDirection@@ \relax
+ \count@=\preDirection@@ \advance\count@-12288 \relax
+ \ifnum\count@>\endDirection@@ \relax
+ \count@=\quadDirection@ \advance\count@-12288 \relax
+ \ifnum\count@>\endDirection@@ \def\endSector@@{7}%
+ \else \def\endSector@@{6}\fi
+ \else \def\endSector@@{5}\fi
+ \else \def\endSector@@{4}\fi
+ \else \def\endSector@@{3}\fi
+ \else \def\endSector@@{2}\fi
+ \else \def\endSector@@{1}\fi
+ \else \def\endSector@@{0}\fi }
+\xydef@\doEllipseSectors@{%
+ \ifx\startSector@@\endSector@@
+ \DN@{\expandafter\doMergeBothArc@\expandafter{\arcSTYLE}{\endSector@@}}%
+ \else
+ \expandafter\doMergeStartArc@\expandafter{\arcSTYLE}{\startSector@@}%
+ \edef\countArcs@@{\startSector@@}%
+ \loop@ \count@=\countArcs@@ \relax \advance\count@\@ne
+ \ifnum \count@ < \endSector@@ \edef\countArcs@@{\the\count@}%
+ \bgroup\expandafter\doCircleArc@@\expandafter{\arcSTYLE}{\countArcs@@}%
+ \egroup
+ \repeat@
+ \DN@{\expandafter\doMergeEndArc@\expandafter{\arcSTYLE}{\endSector@@}}%
+ \fi \next@ }
+\xydef@\checkstartDirection@{%
+ \bgroup\no@@ \edef\next@{\egroup\count@@=\the\Direction}\next@\relax
+ \ifnum\count@@=\startDirection@@ \relax \DN@{\straightArc@}%
+ \else \advance\count@@-\startDirection@@ \relax
+ \ifnum\count@@=\ifnum\count@@<\z@-\fi 4096 \relax \DN@{\straightArc@}%
+ \else \DN@{\processDirections@@}\fi\fi \next@ }
+\xydef@\straightArc@{\xywarning@{straight arc encountered}%
+ \xy@@{\let\bstartPLACE@=\relax
+ \expandafter\doStraightArc@@\expandafter{\arcSTYLE}}\endarc@ }%
+\xydef@\skewEllipse@{\xy@@{\doskewEllipse@}%
+ \def\afterARCextents@@{\xy@{aftARCext}{\let\doCircleArc@=\doMergeEndArc@@}%
+ \ellipseArc@ \xy@{doCircARCs}{\doCircleArcs@}\endarc@ }%
+ \let\arcScale@=\relax \def\arcRadius@{}\def\ellipseRatio@{}}
+\xydef@\skewCircle@{\xy@@{\setupDirection@}%
+ \ifnum\Direction=\startDirection@@\relax\DN@{\halfEllipse@{1}}%
+ \else
+ \xy@@{\def\startDirection@{\Direction=\startDirection@@\imposeDirection@}%
+ \cfromid@{0@p}\enter@\cplusthec@ \startDirection@
+ \enter@\relax\begingroup\vfromslide@i{}@\czeroEdge@\leave@\idfromc@{0@m}%
+ \let\endDirection@=\relax \let\doCircleArc@=\doMergeEndArc@@}%
+ \DN@{\circleArc@}%
+ \fi \next@ }
+\xydef@\doskewEllipse@{%
+ \def\startDirection@{\Direction=\startDirection@@ \relax
+ \imposeDirection@}\startDirection@ \cfromid@{0@p}%
+ \enter@\cplusthec@ \enter@\relax\begingroup\vfromslide@i{}@\leave@
+ \idfromc@{0@x}%
+ \ifx\endDirection@@\empty \parallelDirection@
+ \else
+ \def\endDirection@{\Direction=\endDirection@@ \relax
+ \imposeDirection@ }\endDirection@ \skewEllB@
+ \bgroup\setupDirection@\edef\next@{\egroup\count@@=\the\Direction}\next@
+ \edef\endDirection@@{\the\count@@}%
+ \fi
+ \cfromid@{0@p}\bgroup \setupDirection@
+ \edef\next@{\egroup \count@@=\the\Direction}\next@
+ \edef\startDirection@@{\the\count@@}}
+\xydef@\halfEllipse@#1{\xy@@{%
+ \cfromid@{0@p}\pfromc@\cfromid@{0@c}\no@@
+ \edef\endDirection@@{\the\Direction}%
+ \advance\X@c\X@p \divide\X@c\tw@ \advance\Y@c\Y@p \divide\Y@c\tw@
+ \idfromc@{0@0}\pfromc@ \cfromid@{0@p}\setbase@\X@p\Y@p\X@c\Y@c
+ \dimen@=\X@origin \advance\dimen@-\X@c \dimen@ii=\cosDirection\dimen@
+ \dimen@=\Y@origin \advance\dimen@-\Y@c \advance\dimen@ii \sinDirection\dimen@
+ \X@c=\X@origin \Y@c=\Y@origin \enter@\cplusthec@
+ \dimen@=#1\p@ \ifdim\dimen@<\z@ \DN@{^}\dimen@ii=-#1\dimen@ii
+ \ifx\next@\arcOrient@@\def\arcOrient@@{_}\else\def\arcOrient@@{^}\fi
+ \else \dimen@ii=#1\dimen@ii\fi
+ \startDirection@ \enter@\relax\begingroup\expandafter
+ \vfromslide@i\expandafter{\the\dimen@ii}@\leave@
+ \idfromc@{1@c}\setbase@@ \X@c \Y@c \adjustBaseOrient@
+ \count@@=\endDirection@@ \relax
+ \DN@{^}\advance\count@@\ifx\arcOrient@@\next@\else-\fi 4096 \relax
+ \edef\startDirection@@{\the\count@@}%
+ \def\startDirection@{\Direction=\startDirection@@ \imposeDirection@ }%
+ \let\doCircleArc@=\doMergeEndArc@@ }%
+ \let\arcScale@=\relax \ellipseArc@
+ \xy@@{\doCircleArcs@}\endarc@ }
+\xydef@\parallelDirection@{\show\parallelDirection@}%
+\xydef@\parEllipse@#1#2{\DN@{#2}\ifx\next@\empty
+ \else\xywarning@{\omittingTokens@ }\fi \halfEllipse@{#1}}
+\xydef@\skewEllB@{\cfromid@{0@c}\pfromc@\enter@\cplusthec@
+ \enter@\relax\begingroup\vfromslide@i{}@\leave@
+ \enter@{\pfromthep@\basefromthebase@}\no@@
+ \bgroup \cfromid@{0@p}\pfromc@\cfromid@{0@x}\edef\next@{\egroup
+ \X@c =\the\X@c \Y@c=\the\Y@c \X@p=\the\X@p \Y@p=\the\Y@p }\next@
+ \Cintercept@@\leave@ \idfromc@{0@x}\cfromid@{0@p}\enter@\cplusthec@
+ \cfromid@{0@c}\leave@ \enter@\cplusthec@ \cfromid@{0@x}%
+ \X@c=-\X@c \Y@c=-\Y@c \leave@ \idfromc@{0@0}\pfromc@\cfromid@{0@p}%
+ \setbase@\X@p\Y@p\X@c\Y@c \cfromid@{0@c}\setbase@@\X@c\Y@c
+ \adjustBaseOrient@ }
+\xydef@\adjustBaseOrient@{%
+ \edef\tmp@{\expandafter\removePT@\the\X@xbase}\dimen@=\Y@ybase
+ \divide\dimen@ 64 \relax \dimen@ii=\tmp@\dimen@
+ \edef\tmp@{\expandafter\removePT@\the\X@ybase}\dimen@=\Y@xbase
+ \divide\dimen@ 64 \relax \dimen@=\tmp@\dimen@
+ \ifdim\dimen@>\dimen@ii \X@ybase=-\X@ybase \Y@ybase=-\Y@ybase \fi }
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyarrow.tex b/macros/generic/diagrams/xypic/texinputs/xyarrow.tex
new file mode 100644
index 0000000000..56f8349940
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyarrow.tex
@@ -0,0 +1,538 @@
+%% xyarrow.tex from $Id: xyarrow.doc,v 3.9 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Arrows and Paths'' feature.
+%% Copyright (c) 1991-1997 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{arrow}{Arrow and Path feature}{\stripRCS$Revision: 3.9 $}%
+ {Kristoffer H.~Rose}{krisrose@tug.org}%
+ {IBM T.~ J.\ Watson Research Center, P.O.~Box 704, Yorktown Heights, NY 10598 (USA)}
+\message{path,}
+\xydef@\PATH{\afterPATH{}}
+\xylet@\afterPATH@=\empty
+\xydef@\afterPATH#1{\save
+ \DN@##1{\def\afterPATH@{\restore \def\afterPATH@{##1}#1}}%
+ \expandafter\next@\expandafter{\afterPATH@}%
+ \let\PATHfail@@=\empty
+ \let\PATHbefore@@=\empty
+ \let\PATHafter@@=\empty
+ \let\PATHlabelsevery@@=\empty
+ \let\PATHlabelsnext@@=\empty
+ \let\PATHlabelslast@@=\empty
+ \xy@{\afterPATH{#1}}{\def\PATHslide@@{\z@}}%
+ \def\PATHcontinue@@{\xyFN@\PATH@}%
+ \xyFN@\PATH@}
+\xynew@{if}\ifPATHsingle@
+\xydef@\PATH@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\PATH@}%
+ \else\ifPATHsingle@ \let\next@=\PATH@single
+ \else \let\next@=\PATH@normal \fi\fi \next@}
+\xydef@\PATH@normal{%
+ \ifx ~\next \DN@ ~{\xyFN@\PATHsetting@}%
+ \else \addRQ@\ifx \next \addRQ@\DN@{\xy@'{}\xyFN@\PATHstraight@}%
+ \else \addLQ@\ifx \next \addLQ@\DN@{\xy@`{}\xyFN@\PATHturn@}%
+ \else\ifx \PATHfail@@\PATH@x \DN@{\xyFN@\PATHfinal@}%
+ \else
+ \DNii@{\let\PATHfail@@=\PATH@x \xyFN@\PATH@}%
+ \DN@{\expandafter\nextii@\PATHfail@@}%
+ \fi\fi\fi\fi \next@}
+\xylet@\PATHfail@@=\empty
+\xylet@\PATHbefore@@=\empty
+\xylet@\PATHafter@@=\empty
+\xylet@\PATHlabelsevery@@=\empty
+\xylet@\PATHlabelsnext@@=\empty
+\xylet@\PATHlabelslast@@=\empty
+\xydef@\PATHsetting@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\PATHsetting@}%
+ \else\ifx \bgroup\next
+ \DN@##1{\xy@{~{##1}}{}\def\PATHfail@@{##1}\xyFN@\PATH@}%
+ \else \addEQ@\ifx \next
+ \addEQ@\DN@##1{\xy@{~={##1}}{}\def\PATHbefore@@{##1}\xyFN@\PATH@}%
+ \else \addLT@\ifx \next
+ \addLT@\DN@##1{\xy@{~<{##1}}{}\def\PATHlabelsnext@@{##1}\xyFN@\PATH@}%
+ \else \addGT@\ifx \next
+ \addGT@\DN@##1{\xy@{~>{##1}}{}\def\PATHlabelslast@@{##1}\xyFN@\PATH@}%
+ \else \addPLUS@\ifx \next
+ \addPLUS@\DN@##1{\xy@{~+{##1}}{}\def\PATHlabelsevery@@{##1}\xyFN@\PATH@}%
+ \else \ifx /\next
+ \DN@/##1{\xy@{~/{##1}}{}\def\PATHafter@@{##1}\xyFN@\PATH@}%
+ \else \addDASH@\ifx \next
+ \xywarning@{Obsolete `-' PATH <action> translated to `='.}%
+ \addDASH@\DN@##1{\xy@{~-{##1}}{}\def\PATHbefore@@{##1}\xyFN@\PATH@}%
+ \else
+ \xyerror@{Unknown \string~ setting: \meaning\next}%
+ {See the Xy-pic arrow feature documentation for help.}%
+ \fi\fi\fi\fi\fi\fi\fi\fi \next@}
+\xylet@\PATHinit@@=\empty
+\xylet@\PATHextra@@=\empty
+\xylet@\PATHpost@@=\empty
+\xylet@\PATHcontinue@@=\empty
+\xydef@\PATHstraight@{%
+ \def\PATHinit@@{\PATHinitstraight@}%
+ \let\PATHextra@@=\empty
+ \let\PATHpost@@=\empty
+ \let\PATHlabelsextra@@=\relax
+ \xy@@\pfromc@ \PATHafterPOS{\xyFN@\PATHsegment@}}
+\xydef@\PATHfinal@{%
+ \def\PATHinit@@{\PATHinitstraight@}%
+ \def\PATHextra@@{\let\PATHcontinue@@=\afterPATH@}%
+ \let\PATHpost@@=\empty
+ \let\PATHlabelsextra@@=\PATHlabelsextralast@
+ \xy@@\pfromc@ \PATHafterPOS{\xyFN@\PATHsegment@}}
+\xydef@\PATHlabelsextralast@{\let\PATHlabelsextra@@=\relax
+ \expandafter\xyFN@\expandafter\PATHlabels@\PATHlabelslast@@}
+\xydef@\PATHinitstraight@{\xy@@{\setupDirection@ \dimen@=\PATHslide@@
+ \dimen@ii=-\sinDirection\dimen@
+ \ifPATHomitslide@@\else\advance\X@p\dimen@ii\fi \advance\X@c\dimen@ii
+ \dimen@ii= \cosDirection\dimen@
+ \ifPATHomitslide@@\else\advance\Y@p\dimen@ii\fi \advance\Y@c\dimen@ii
+ \PATHomitslide@@false \resetupDirection@}}
+\xydef@\PATHslide@@{\z@}
+\xynew@{if}\ifPATHomitslide@@
+\xydef@\PATHsegment@{%
+ \addLT@\ifx\next
+ \addGT@{\addLT@\DN@##1}{%
+ \xy@{<##1>}{\dimen@=##1\relax \edef\PATHslide@@{\the\dimen@}}%
+ \xyFN@\PATHsegment@@}%
+ \else \let\next@=\PATHsegment@@
+ \fi \next@}
+\xydef@\PATHsegment@@{\PATHinit@@ \addEQ@\PATHaction@\PATHbefore@@ \PATHextra@@
+ \expandafter\toks@\expandafter{\PATHlabelsnext@@}\let\PATHlabelsnext@@=\empty
+ \expandafter\addtotoks@\expandafter{\PATHlabelsevery@@}%
+ \expandafter\def\expandafter\PATHlabels@@\expandafter{\the\toks@}%
+ \toks@={}\expandafter\xyFN@\expandafter\PATHlabels@\PATHlabels@@}
+\xylet@\PATHlabelit@@=\empty
+\xydef@\PATHlabels@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\PATHlabels@}%
+ \else \ifx ^\next
+ \DN@##1{\xy@^{}\let\PATHlabelit@@=\PATHlabelabove@@
+ \DNii@{}\xyFN@\PATHanchor@}%
+ \else \ifx _\next
+ \DN@##1{\xy@_{}\let\PATHlabelit@@=\PATHlabelbelow@@
+ \DNii@{}\xyFN@\PATHanchor@}%
+ \else \ifx |\next
+ \DN@##1{\xy@|{}\let\PATHlabelit@@=\PATHlabelbreak@
+ \DNii@{}\xyFN@\PATHanchor@}%
+ \else \let\next@=\PATHfinishsegments@ \fi\fi\fi\fi \next@}
+\xydef@\PATHanchor@{\begingroup \toks@={}\PATHanchor@i}
+\xydef@\PATHanchor@i{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\PATHanchor@i}%
+ \else\addDASH@\ifx \next
+ \addDASH@\DN@{\expandafter\addtotoks@\expandafter{\PATHanchor@toks}%
+ \xyFN@\PATHanchor@i}%
+ \else
+ \DNii@##1{\endgroup\afterPLACE{\xyFN@\PATHit@}##1}%
+ \DN@{\expandafter\nextii@\expandafter{\the\toks@}}%
+ \fi\fi \next@}
+{\xyuncatcodes \gdef\next{<>(.5)}}
+\xylet@\PATHanchor@toks=\next
+\xylet@\PATHitshapes@@=\empty
+\xydef@\PATHit@{\let\PATHitshape@@=\empty \xyFN@\PATHit@i}
+\xydef@\PATHit@i{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\PATHit@i}%
+ \else \ifx *\next \DN@*##1##{\PATHlabelit@@{!C##1}}%
+ \else \addAT@\ifx\next \addAT@\DN@##1##{\PATHlabelit@@{\dir##1}}%
+ \else \ifx [\next \DN@[##1]{%
+ \expandafter\def\expandafter\PATHitshape@@\expandafter{\PATHitshape@@[##1]}%
+ \xyFN@\PATHit@i}%
+ \else \DN@{\PATHlabelit@@{}}%
+ \fi\fi\fi\fi \next@}
+\xydef@\PATHfinishsegments@{%
+ \ifx\PATHlabelsextra@@\relax \expandafter\PATHfinishsegments@i
+ \else
+ \expandafter\PATHlabelsextra@@ \fi}
+\xydef@\PATHfinishsegments@i{%
+ \xy@@{\Clast@@}\the\toks@ \toks@={}%
+ \xy@@\setupDirection@
+ \PATHpost@@ \PATHaction@/\PATHafter@@
+ \PATHcontinue@@}
+\xydef@\PATHaction@default#1#2{\xy@{PATHaction#1{#2}}{}\POS#2\relax}
+\xylet@\PATHaction=\PATHaction@default
+\xydef@\PATHaction@#1#2{\expandafter\PATHaction\expandafter#1\expandafter{#2}}
+\xylet@\PATHafterPOS@default=\afterPOS
+\xylet@\PATHafterPOS=\PATHafterPOS@default
+\xydef@\PATHlastout@@{3}
+\xydef@\PATHturn@{\afterCIRorDIAG\PATHturn@cir\PATHturn@diag}
+\xydef@\PATHturn@cir{\toks@={\xy@@{%
+ \count@=\CIRin@@ \ifnum\count@<4\else\advance\count@-4\fi
+ \count@@=\CIRout@@ \ifnum\count@@<4\else\advance\count@@-4\fi
+ \ifnum\count@=\count@@ \xyerror@{<turn> cannot be half or full}{%
+You asked for a <turn>ed segment with parallel in- and out-direction.^^J%
+This is not allowed because it is not possible to position it uniquely.}\fi}}%
+ \edef\next@{{\CIRin@@}{\expandafter\noexpand\CIRorient@@}{\CIRout@@}}%
+ \expandafter\PATHturn@i\next@}
+\xydef@\PATHturn@diag{\toks@={\xy@@{%
+ \setupDirection@ \count@=\CIRin@@ \dimen@=\xydashl@ \ABfromdiag@
+ \ifdim \sinDirection\A@>\cosDirection\B@ \def\CIRorient@@{\CIRacw@}%
+ \advance\count@\ifnum\count@<6 \tw@ \else -6\fi
+ \else \def\CIRorient@@{\CIRcw@}%
+ \advance\count@\ifnum\count@>\@ne -\tw@ \else 6\fi
+ \fi
+ \edef\CIRout@@{\the\count@}}}%
+ \edef\next@{{\CIRin@@}{}{}}%
+ \expandafter\PATHturn@i\next@}
+\xylet@\PATHpostpos@@=\empty
+\xydef@\PATHturn@i#1#2#3{%
+ \DN@##1{\def\PATHinit@@{\xy@@{%
+ \def\CIRin@@{#1}\def\CIRorient@@{#2}\def\CIRout@@{#3}%
+ \ifnum\CIRin@@=8 \let\CIRin@@=\PATHlastout@@ \fi
+ \R@=\turnradius@
+ ##1\relax}%
+ \xy@@{\count@=\CIRin@@
+ \ifPATHomitslide@@ \dimen@=-\PATHslide@@
+ \ABfromdiag@ \advance\X@p-\B@ \advance\Y@p\A@ \fi
+ \enter@{\pfromthep@ \basefromthebase@}}%
+ \xy@@{\dimen@=\expandafter\ifx\CIRorient@@\CIRcw@-\fi\R@
+ \ABfromdiag@ \advance\X@p-\B@ \advance\Y@p\A@
+ \X@origin=\X@p \Y@origin=\Y@p}%
+ \xy@@{\dimen@=\xydashl@ \ABfromdiag@ \R@c=\A@ \U@c=\B@
+ \count@=\CIRout@@
+ \dimen@=\expandafter\ifx\CIRorient@@\CIRcw@-\fi\R@
+ \ABfromdiag@ \advance\X@c-\B@ \advance\Y@c\A@
+ \dimen@=\xydashl@ \X@p=\X@c \Y@p=\Y@c
+ \ABfromdiag@ \advance\X@p-\A@ \advance\Y@p-\B@
+ \intersect@
+ \count@=\CIRin@@ \dimen@=\p@ \ABfromdiag@}%
+ \xy@@{\edef\next@{\expandafter\removePT@\the\A@}%
+ \edef\nextii@{\expandafter\removePT@\the\B@}%
+ \A@=\X@c \advance\A@-\X@origin \B@=\Y@c \advance\B@-\Y@origin
+ \ifdim \next@\A@<-\nextii@\B@
+ \dontleave@ \cfromp@
+ \count@=\CIRin@@ \advance\count@\ifnum\count@<4 +4\else -4\fi
+ \dimen@=\xydashl@ \Directionfromdiag@
+ \the\Edge@c\z@
+ \count@=\CIRin@@ \dimen@=\expandafter\ifx\CIRorient@@\CIRcw@-\fi\R@
+ \ABfromdiag@ \advance\X@c-\B@ \advance\Y@c\A@
+ \dimen@=5sp \ABfromdiag@ \advance\X@c\A@ \advance\Y@c\B@
+ \fi
+ \dimen@ii=\expandafter\ifx\CIRorient@@\CIRacw@-\fi\PATHslide@@
+ \advance\R@\dimen@ii
+ \drop@\literal@{\hbox\bgroup\cir@i}}%
+ \xy@@{\X@p=\X@c \Y@p=\Y@c
+ \count@=\CIRout@@
+ \dimen@=\expandafter\ifx\CIRorient@@\CIRacw@-\fi\R@c
+ \ABfromdiag@ \advance\X@p-\B@ \advance\Y@p\A@
+ \edef\PATHpostpos@@{\X@c=\the\X@p \Y@c=\the\Y@p \noexpand\czeroEdge@
+ \noexpand\PATHomitslide@@true}}%
+ \xy@@{\count@=\CIRin@@
+ \dimen@=\expandafter\ifx\CIRorient@@\CIRacw@-\fi\R@c
+ \ABfromdiag@ \advance\X@c-\B@ \advance\Y@c\A@ \czeroEdge@}%
+ \xy@@{\leave@
+ \count@=\CIRin@@ \dimen@=\PATHslide@@
+ \ABfromdiag@ \advance\X@p-\B@ \advance\Y@p\A@
+ \edef\PATHlastout@@{\CIRout@@}%
+ \count@=\CIRout@@ \dimen@=\xydashl@ \Directionfromdiag@}}}%
+ \expandafter\next@\expandafter{\the\toks@}\toks@={}%
+ \let\PATHextra@@=\empty
+ \def\PATHpost@@{\xy@@\PATHpostpos@@}%
+ \let\PATHlabelsextra@@=\relax
+ \xyFN@\PATHturn@ii}
+\xydef@\PATHturn@ii{%
+ \ifx /\next
+ \DN@ /{\afterassignment\nextii@\dimen@=}%
+ \DNii@{%
+ \edef\next@{\noexpand\xy@@{\edef\noexpand\turnradius@{\the\dimen@}}}\next@
+ \xy@@\pfromc@ \PATHafterPOS{\xyFN@\PATHsegment@}}%
+ \else \DN@{\xy@@\pfromc@ \PATHafterPOS{\xyFN@\PATHsegment@}}\fi
+ \next@}
+\xydef@\ABfromdiag@{\ifcase\count@\relax
+ \A@=-.7071\dimen@ \B@=-.7071\dimen@ \or \A@=\z@ \B@=-\dimen@
+ \or \A@=+.7071\dimen@ \B@=-.7071\dimen@ \or \A@=\dimen@ \B@=\z@
+ \or \A@=+.7071\dimen@ \B@=+.7071\dimen@ \or \A@=\z@ \B@=+\dimen@
+ \or \A@=-.7071\dimen@ \B@=+.7071\dimen@ \or \A@=-\dimen@ \B@=\z@
+ \else\xybug@{impossible <diag>?}\fi}
+\xydef@\turnradius@{10pt}
+\xydef@\turnradius{\afterADDOP{\Addop@@\turnradius@}}
+\xydef@\PATHlabelabove@#1#2{\droplabel@\belowDirection@{#1}{#2}%
+ \let\afteraliases@@=\empty \xyFN@\PATHlabelalias@}
+\xydef@\PATHlabelbelow@#1#2{\droplabel@\aboveDirection@{#1}{#2}%
+ \let\afteraliases@@=\empty \xyFN@\PATHlabelalias@}
+\xylet@\PATHlabelabove@@=\PATHlabelabove@
+\xylet@\PATHlabelbelow@@=\PATHlabelbelow@
+\xydef@\droplabel@#1#2#3{\xy@@{\enter@\DirectionfromtheDirection@}%
+ \DN@{#2}\ifx\next@\empty
+ \expandafter\xy@@ix@\expandafter{\PATHitshape@@\labelbox{#3}}%
+ \else \expandafter\xy@@ix@\expandafter{\PATHitshape@@#2{#3}}\fi
+ \xy@@{\setbox\z@=\expandafter\object\the\toks9
+ \advance\L@c\labelmargin@ \advance\R@c\labelmargin@
+ \advance\D@c\labelmargin@ \advance\U@c\labelmargin@
+ \setboxz@h{\kern\labelmargin@\boxz@\kern\labelmargin@}%
+ \A@=\X@c \B@=\Y@c #1\xydashl@ \the\Edge@c\thr@@
+ \advance\A@-\X@c \advance\B@-\Y@c \advance\X@c 2\A@ \advance\Y@c 2\B@
+ \ht\z@=\U@c \dp\z@=\D@c \dimen@=\L@c \advance\dimen@\R@c \wd\z@=\dimen@
+ \setbox\lastobjectbox@=\hbox{\X@c=\L@c \Y@c=\z@ \Drop@@}%
+ \drop@{\box\lastobjectbox@}{}%
+ \leave@}}
+\xydef@\PATHlabelbreak@#1#2{%
+ \DN@{#1}\ifx\next@\empty \drop\labelbox{#2}\else \drop#1{#2}\fi
+ \def\afteraliases@@{\xy@@\Cbreak@@}\xyFN@\PATHlabelalias@}
+\xylet@\labelmargin@=\objectmargin@
+\xydef@\labelmargin{\afterADDOP{\Addop@@\labelmargin@}}
+\xydef@\hole{\hbox{\dimen@=\objectmargin@ \kern2\dimen@
+ \vrule height\dimen@ depth\dimen@ width\z@}}
+\xylet@\labelstyle=\scriptstyle
+\xydef@\labelbox#1{\hbox{$\m@th\labelstyle{#1}$}}
+\xydef@\PATHlabelalias@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\PATHlabelalias@}%
+ \else \addEQ@\ifx \next
+ \addEQ@\DN@"##1"{\savealias@{##1}\xyFN@\PATHlabelalias@}%
+ \else \DN@{\afteraliases@@\PATHlabels@}\fi\fi \next@}
+\xylet@\afteraliases@@=\empty
+\xydef@\savealias@#1{\xy@@{\enter@\cfromthec@
+ \advance\X@c-\L@c \advance\L@c\R@c \L@c=.5\L@c \R@c=\L@c \advance\X@c\L@c
+ \advance\Y@c-\D@c \advance\D@c\U@c \D@c=.5\D@c \U@c=\D@c \advance\Y@c\D@c
+ \idfromc@{#1}\leave@}}
+\message{\string\ar,}
+\xylet@\arvariant@@=\empty
+\xylet@\arstemprefix@@=\empty
+\xylet@\artail@@=\empty
+\xylet@\arstem@@=\empty
+\xylet@\arhead@@=\empty
+\xylet@\armodifiers@@=\empty
+\xylet@\arlabels@@=\empty
+\xylet@\arafterPOS@@=\empty
+\xylet@\arinit@@=\empty
+\xylet@\arexit@@=\empty
+\xylet@\arcomponent@@=\relax
+\xylet@\arcomponenttype@@=\relax
+\xylet@\afterar@@=\relax
+\xydef@\ar{\relax\arSAFE}
+\xydef@\arSAFE{%
+ \let\arvariant@@=\empty
+ \def\arstemprefix@@{\dir}%
+ \edef\artail@@{\arvariant@@{}}%
+ \edef\arstem@@{\arvariant@@{-}}%
+ \edef\arhead@@{\arvariant@@{>}}%
+ \def\armodifiers@@{}%
+ \def\arafterPOS@@{}%
+ \def\arlabels@@{}%
+ \def\arinit@@{}%
+ \def\arexit@@{}%
+ \let\PATHlabelabove@@=\PATHlabelabove@
+ \let\PATHlabelbelow@@=\PATHlabelbelow@
+ \xyFN@\ar@}
+\xydef@\ar@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\ar@}%
+ \else \addAT@\ifx\next \addAT@\DN@{\xyFN@\ar@form}%
+ \else\ifx |\next
+ \DN@ |{\ar@anchor|}%
+ \else\ifx ^\next
+ \DN@ ^{\ar@anchor^}%
+ \else\ifx _\next
+ \DN@ _{\ar@anchor_}%
+ \else \let\next@=\ar@x \fi\fi\fi\fi\fi \next@}
+\xydef@\addtoarinit@#1{%
+ \expandafter\def\expandafter\arinit@@\expandafter{\arinit@@ #1}}
+\xydef@\addtoarlabels@#1{%
+ \expandafter\def\expandafter\arlabels@@\expandafter{\arlabels@@ #1}}
+\xydef@\ar@anchor#1{\begingroup
+ \def\PATHlabelit@@##1##2{%
+ \DN@{##1}\ifx\next@\empty
+ \DN@####1{\expandafter\endgroup\expandafter\addtoarlabels@
+ \expandafter{\the\toks@####1{##2}}\xyFN@\ar@}%
+ \else
+ \DN@####1{\expandafter\endgroup\expandafter\addtoarlabels@
+ \expandafter{\the\toks@*!C####1##1{##2}}\xyFN@\ar@}\fi
+ \expandafter\next@\expandafter{\PATHitshape@@}}%
+ \toks@={#1}%
+ \def\xy@##1##2{\addtotoks@{##1}}\change@oxy@\xy@ \let\xy@@ix@=\eat@
+ \DNii@{}\xyFN@\PATHanchor@}
+\xydef@\ar@form{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\ar@form}%
+ \else\ifx ^\next \DN@ ^{\xyFN@\ar@style}\edef\arvariant@@{\string^}%
+ \else\ifx _\next \DN@ _{\xyFN@\ar@style}\edef\arvariant@@{\string_}%
+ \else\ifx 0\next \DN@ 0{\xyFN@\ar@style}\def\arvariant@@{0}%
+ \else\ifx 1\next \DN@ 1{\xyFN@\ar@style}\def\arvariant@@{1}%
+ \else\ifx 2\next \DN@ 2{\xyFN@\ar@style}\def\arvariant@@{2}%
+ \else\ifx 3\next \DN@ 3{\xyFN@\ar@style}\def\arvariant@@{3}%
+ \else\ifx \bgroup\next \let\next@=\ar@style
+ \else\ifx [\next \DN@[##1]{\ar@modifiers{[##1]}}%
+ \else\ifx *\next \DN@ *{\ar@modifiers}%
+ \else\addLT@\ifx\next \let\next@=\ar@slide
+ \else\ifx /\next \let\next@=\ar@curveslash
+ \else\ifx (\next \let\next@=\ar@curveinout
+ \else\addRQ@\ifx\next \addRQ@\DN@{\ar@curve@}%
+ \else\addLQ@\ifx\next \addLQ@\DN@{\xyFN@\ar@curve}%
+ \else\addDASH@\ifx\next \addDASH@\DN@{\defarstem@-\xyFN@\ar@}%
+ \else\addEQ@\ifx\next \addEQ@\DN@{\def\arvariant@@{2}\defarstem@-\xyFN@\ar@}%
+ \else\addDOT@\ifx\next \addDOT@\DN@{\defarstem@.\xyFN@\ar@}%
+ \else\ifx :\next \DN@:{\def\arvariant@@{2}\defarstem@.\xyFN@\ar@}%
+ \else\ifx ~\next \DN@~{\defarstem@~\xyFN@\ar@}%
+ \else\ifx !\next \DN@!{\dasharstem@\xyFN@\ar@}%
+ \else\ifx ?\next \DN@?{\ar@upsidedown\xyFN@\ar@}%
+ \else \let\next@=\ar@error
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@}
+\xydef@\defarstem@#1{\edef\arstem@@{\arvariant@@{\string#1}}%
+ \DNii@##1##{\next@}%
+ \edef\next@##1{\def\noexpand\artail@@{\arvariant@@{##1}}}%
+ \expandafter\nextii@\artail@@
+ \edef\next@##1{\def\noexpand\arhead@@{\arvariant@@{##1}}}%
+ \expandafter\nextii@\arhead@@}
+\xydef@\dasharstem@{%
+ \DN@##1##{\nextii@{##1}}\DNii@##1##2{\def\arstem@@{##1{##2##2}}}%
+ \expandafter\next@\arstem@@}
+\xydef@\ar@error#1{\xyerror@{Illegal <form>ation (\meaning\next)}{}%
+ \xyFN@\ar@}
+\xydef@\ar@style{%
+ \ifx \bgroup\next \def\artail@@{{}}%
+ \edef\arstem@@{\arvariant@@{-}}\edef\arhead@@{\arvariant@@{>}}%
+ \expandafter\ar@i
+ \else \resetvariant@\artail@@ \resetvariant@\arstem@@ \resetvariant@\arhead@@
+ \expandafter\xyFN@\expandafter\ar@ \fi}
+\xydef@\resetvariant@#1{%
+ \DN@##1##{\DN@{##1}\ifx\next@\empty
+ \DN@{\expandafter\nextii@\expandafter{\arvariant@@}}%
+ \else \DN@{\nextii@{##1}}\fi \next@}%
+ \DNii@##1##2{\def#1{##1{##2}}}%
+ \expandafter\next@#1}
+\xydef@\ar@i#1{\DN@{#1}%
+ \ifx\next@\empty \edef\arstem@@{\arvariant@@{}}\edef\arhead@@{\arvariant@@{}}%
+ \DN@{\xyFN@\ar@}%
+ \else
+ \let\arcomponent@@=\ar@ii \let\arcomponenttype@@=\artip@
+ \DN@{\xyFN@\arcomponent@#1$}%
+ \fi \next@}
+\xydef@\ar@ii{\ifx $\next \let\next@=\ar@iv
+ \else \expandafter\def\expandafter\artail@@\expandafter{\the\toks@}%
+ \let\arcomponent@@=\ar@iii \let\arcomponenttype@@=\arconn@
+ \DN@{\xyFN@\arcomponent@}\fi \next@}
+\xydef@\ar@iii{%
+ \expandafter\def\expandafter\arstem@@\expandafter{\the\toks@}%
+ \resetvariant@\artail@@
+ \let\arcomponent@@=\ar@iv \let\arcomponenttype@@=\artip@
+ \xyFN@\arcomponent@}
+\xydef@\ar@iv{%
+ \expandafter\def\expandafter\arhead@@\expandafter{\the\toks@}%
+ \ifx $\next \DN@ ${\xyFN@\ar@}%
+ \else \xyerror@{illegal <arrow>: \meaning\next\space not valid}{}\fi \next@}
+\xydef@\ar@x{%
+ \let\arsavedPATHafterPOS@@=\PATHafterPOS \let\PATHafterPOS=\arafterPOS@
+ \toks@={\ar@PATH}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\artail@@}}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\arstem@@}}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\arstemprefix@@}}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\arhead@@}}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\armodifiers@@}}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\arinit@@}}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\arexit@@}}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\arlabels@@}}%
+ \addtotoks@{\afterar@@}%
+ \expandafter\DNii@\expandafter{\the\toks@}\toks@={}%
+ \nextii@}
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{%
+ \def\next{%
+ \afterPATH{#9}%
+ ~={#6\preconnect#5#3#2}%
+ ~/{#7}%
+ ~<{|<*h#5\dir#1}%
+ ~>{|>*h#5\dir#4}%
+ ~+{#8}%
+ }%
+ \next}}
+\xylet@\ar@PATH=\next
+\xydef@\arafterPOS@#1{%
+ \arsavedPATHafterPOS@@{\let\PATHafterPOS=\arsavedPATHafterPOS@@
+ \DN@{#1}\expandafter\next@\arafterPOS@@}}%
+\xylet@\arsavedPATHafterPOS@@=\relax
+\xydef@\arcomponent@{%
+ \ifx ^\next \toks@ii={^}\DN@ ^{\xyFN@\arcomponent@i}%
+ \else\ifx _\next \toks@ii={_}\DN@ _{\xyFN@\arcomponent@i}%
+ \else\ifx 1\next \toks@ii={1}\DN@ 1{\xyFN@\arcomponent@i}%
+ \else\ifx 2\next \toks@ii={2}\DN@ 2{\xyFN@\arcomponent@i}%
+ \else\ifx 3\next \toks@ii={3}\DN@ 3{\xyFN@\arcomponent@i}%
+ \else\ifx \bgroup\next \expandafter\toks@ii\expandafter{\arvariant@@}%
+ \let\next@=\arcomponent@i
+ \else\ifx *\next \DN@*##1##{\arcomponent@ii{##1}}%
+ \else \expandafter\toks@ii\expandafter{\arvariant@@}\toks@={}%
+ \let\next@=\arcomponenttype@@
+ \fi\fi\fi\fi\fi\fi\fi
+ \next@}
+\xydef@\arcomponent@i#1{\toks@={#1}\arcomponent@x}
+\xydef@\arcomponent@ii#1#2{\toks@={*#1{#2}}\xyFN@\arcomponent@@}
+\xydef@\artip@{%
+ \addGT@\ifx\next \addGT@\addtotoks@ \addGT@\DN@{\xyFN@\artip@}%
+ \else\addLT@\ifx\next \addLT@\addtotoks@ \addLT@\DN@{\xyFN@\artip@}%
+ \else\ifx (\next \addtotoks@(\DN@({\xyFN@\artip@}%
+ \else\ifx )\next \addtotoks@)\DN@){\xyFN@\artip@}%
+ \else\ifx |\next \addtotoks@|\DN@|{\xyFN@\artip@}%
+ \else\addLQ@\ifx\next \addLQ@\addtotoks@ \addLQ@\DN@{\xyFN@\artip@}%
+ \else\addRQ@\ifx\next \addRQ@\addtotoks@ \addRQ@\DN@{\xyFN@\artip@}%
+ \else\addPLUS@\ifx \next \addPLUS@\addtotoks@ \addPLUS@\DN@{\xyFN@\artip@}%
+ \else\ifx /\next \addtotoks@/\DN@/{\xyFN@\artip@}%
+ \else\ifcat A\noexpand\next \DN@##1{\addtotoks@{##1}\xyFN@\artip@}%
+ \else\ifx\space@\next \addtotoks@{ }\expandafter\DN@\space{\xyFN@\artip@}%
+ \else \let\next@=\arcomponent@x
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@}
+\xydef@\arconn@{%
+ \addDASH@\ifx\next \addDASH@\addtotoks@ \addDASH@\DN@{\xyFN@\arconn@}%
+ \else\addEQ@\ifx\next \addEQ@\addtotoks@ \addEQ@\DN@{\xyFN@\arconn@}%
+ \ifx\arvariant@@\empty \def\arvariant@@{2}\fi
+ \else\addDOT@\ifx\next \addDOT@\addtotoks@ \addDOT@\DN@{\xyFN@\arconn@}%
+ \else\ifx :\next \addtotoks@:\DN@:{\xyFN@\arconn@}%
+ \ifx\arvariant@@\empty \def\arvariant@@{2}\fi
+ \else\ifx ~\next \addtotoks@~\DN@~{\xyFN@\arconn@}%
+ \else \let\next@=\arcomponent@x
+ \fi\fi\fi\fi\fi \next@}
+\xydef@\arcomponent@x{%
+ \DN@##1{\toks@=\expandafter{\the\toks@ii{##1}}}%
+ \expandafter\next@\expandafter{\the\toks@}%
+ \xyFN@\arcomponent@@}
+\xydef@\ar@curveslash/#1/{\expandafter\ar@curve@\ar@slashing{#1}}
+\xydef@\ar@slashing#1{{\xy@{**{} ?+/#1/+/#1/ @+c}{\setupDirection@
+ \vfromslide@{#1}%
+ \X@c=2\X@c \advance\X@c\X@p \advance\X@c.5\d@X
+ \Y@c=2\Y@c \advance\Y@c\Y@p \advance\Y@c.5\d@Y
+ \czeroEdge@
+ \spushc@}}}
+{\xyuncatcodes \catcode`\#=6
+ \gdef\next(#1,#2){{+/#1 3pc/,p+/#2 3pc/}}}
+\xylet@\ar@curveinout@=\next
+\xydef@\ar@curveinout{\expandafter\ar@curve@load\ar@curveinout@}
+\xydef@\ar@curve{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\ar@curve}%
+ \else\ifx \bgroup\next \let\next@=\ar@curve@load
+ \else\ifx "\next \DN@"##1"{\ar@curve@{"##1"}}%
+ \else \xyerror@{@= <form> must be followed by \string"<id>\string" or
+ {<control point list>}}{}%
+ \fi\fi\fi \next@}
+{\xyuncatcodes \gdef\next#1#2{\def#1##1{#2{;@={##1}}}}}
+\next\ar@curve@load\ar@curve@
+\xydef@\ar@curve@#1{\curve@check
+ \setcurvearinit@{#1}\setcurvearexit@\arexit@@
+ \def\arstemprefix@@{\crvi}\xyFN@\ar@}
+{\xyuncatcodes \gdef\next#1{\save @(,#1\restore}}
+\xylet@\setcurvearinit@i=\next
+\xydef@\setcurvearinit@#1{%
+ \expandafter\addtoarinit@\expandafter{\setcurvearinit@i{#1}}}
+{\xyuncatcodes \gdef\next#1{\def#1{\POS @i @) }}}
+\xylet@\setcurvearexit@=\next
+\xydef@\curve@check{%
+ \xyerror@{Forms @/.../, @(...), and @`{...}, only available when curve
+ extension loaded}{}}
+\xywithoption{curve}{\let\curve@check=\relax}
+\xydef@\ar@modifiers#1{%
+ \expandafter\def\expandafter\armodifiers@@\expandafter{\armodifiers@@#1}%
+ \xyFN@\ar@}
+{\xyuncatcodes \catcode`\#=6 \catcode`\@=11
+ \gdef\next<#1>{\def\arafterPOS@@{<#1>}\xyFN@\ar@}}
+\xylet@\ar@slide=\next
+\xydef@\ar@upsidedown{\let\next=\PATHlabelabove@@
+ \let\PATHlabelabove@@=\PATHlabelbelow@@ \let\PATHlabelbelow@@=\next}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xybarr.tex b/macros/generic/diagrams/xypic/texinputs/xybarr.tex
new file mode 100644
index 0000000000..51a419db15
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xybarr.tex
@@ -0,0 +1,1016 @@
+%% xybarr.tex from $Id: xybarr.doc,v 1.3 2013/10/06 00:12:30 krisrose Exp $
+%%
+%% Xy-pic ``Barr Feature'' option.
+%% Copyright (c) 2001 Michael Barr <barr@barrs.org>
+%%
+%% 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 Michael Barr
+%%
+%% This work is derived from the file diagxy.tex and has
+%% documentation/tutorial file barrdoc.latex
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{barr}{Barr's diagram feature}{2011-06-18}%
+ {Michael Barr}{barr@math.mcgill.ca}%
+ {Dept of Math and Stats,
+ McGill University,
+ 805 Sherbrooke Street West,
+ Montreal, Quebec H3A 0B9, Canada}
+\xyrequire{curve}
+\xyrequire{arrow}
+\xycatcodes
+\def\dated#1{\def\thedate{#1}}%
+\dated{2011-06-18}%
+ \newdimen\xydashw@@
+ \xydashw@@\xydashw@
+ \multiply\xydashw@@ by 7
+ \divide\xydashw@@ by 4
+\setbox\zerodotbox@=\hbox{\dimen@=.5\xydashw@@
+ \kern-\dimen@ \vrule width\xydashw@@ height\dimen@ depth\dimen@}
+\wd\zerodotbox@=\z@ \ht\zerodotbox@=\z@ \dp\zerodotbox@=\z@
+\catcode`\@=12
+\newdir{ >}{{ }*!/-.9em/@{>}}%
+\newdir^{ (}{{ }*!/-.5em/@^{(}}%
+\newdir{< }{!/.9em/@{<}*{ }}%
+\newdir{) }{!/.9em/@^{)}*{ }}%
+\newdir{ (}{{ }*!/-.5em/@^{(}}%
+\newdir{d}{\object{.}}
+\newdir{into}{{ }*!/-.5em/@^{(}}%
+\newdimen\high%
+\newdimen\ul%
+\newcount\deltax%
+\newcount\deltay%
+\newcount\deltaX%
+\newcount\deltaXprime%
+\newcount\deltaY%
+\newcount\deltaYprime%
+\newdimen\wdth%
+\newcount\xend%
+\newcount\yend%
+\newcount\Xend%
+\newcount\Yend%
+\newcount\xpos%
+\newcount\ypos%
+\newcount\default \default=500%
+\newcount\defaultmargin \defaultmargin=150%
+\newcount\topw%
+\newcount\botw%
+\newcount\Xpos%
+\newcount\Ypos%
+\def\ratchet#1#2{\ifnum#1<#2\global #1=#2\fi}%
+\catcode`\@=11%
+\expandafter\ifx\csname @ifnextchar\endcsname\relax%
+\def\ifnextchar#1#2#3{\let\@tempe%
+#1\def\@tempa{#2}\def\@tempb{#3}\futurelet%
+ \@tempc\@ifnch}%
+\def\@ifnch{\ifx \@tempc \@sptoken \let\@tempd\@xifnch%
+ \else \ifx \@tempc \@tempe\let\@tempd\@tempa\else\let\@tempd\@tempb\fi%
+ \fi \@tempd}%
+\def\:{\let\@sptoken= } \:
+\def\:{\@xifnch} \expandafter\def\: {\futurelet\@tempc\@ifnch}%
+\else%
+\let\ifnextchar\@ifnextchar%
+\fi%
+\setbox0=\hbox{$x$}
+\newdimen\axis \axis=\fontdimen22\textfont2%
+\ul=.01em%
+\X@xbase =.01em%
+\Y@ybase =.01em%
+\def\scalefactor#1{\ul=#1\ul \X@xbase=#1\X@xbase \Y@ybase=#1\Y@ybase}%
+\catcode`\@=12%
+\def\fontscale#1{%
+\if#1h\relax%
+\font\xydashfont=xydash10 scaled \magstephalf%
+\font\xyatipfont=xyatip10 scaled \magstephalf%
+\font\xybtipfont=xybtip10 scaled \magstephalf%
+\font\xybsqlfont=xybsql10 scaled \magstephalf%
+\font\xycircfont=xycirc10 scaled \magstephalf%
+\else%
+\font\xydashfont=xydash10 scaled \magstep#1%
+\font\xyatipfont=xyatip10 scaled \magstep#1%
+\font\xybtipfont=xybtip10 scaled \magstep#1%
+\font\xybsqlfont=xybsql10 scaled \magstep#1%
+\font\xycircfont=xycirc10 scaled \magstep#1%
+\fi}%
+\def\bfig{\vcenter\bgroup\xy}%
+\def\efig{\endxy\egroup}%
+\def\car#1#2\nil{#1}%
+\def\morphism{\ifnextchar({\morphismp}{\morphismp(0,0)}}%
+\def\morphismp(#1){\ifnextchar|{\morphismpp(#1)}{\morphismpp(#1)|a|}}%
+\def\morphismpp(#1)|#2|{\ifnextchar/{\morphismppp(#1)|#2|}%
+ {\morphismppp(#1)|#2|/>/}}%
+\def\morphismppp(#1)|#2|/#3/{%
+ \ifnextchar<{\morphismpppp(#1)|#2|/#3/}%
+ {\morphismpppp(#1)|#2|/#3/<\default,0>}}%
+\def\morphismpppp(#1,#2)|#3|/#4/<#5,#6>[#7`#8;#9]{%
+\xend#1\advance \xend by #5%
+\yend#2\advance \yend by #6%
+\domorphism(#1,#2)|#3|/#4/<#5,#6>[{#7}`{#8};{#9}]}%
+\def\domorphism(#1,#2)|#3|/#4/<#5,#6>[#7`#8;#9]{%
+\def\next{\car#4.\nil}%
+\if@\next\relax%
+ \if#3l%
+ \ifnum #6>0%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else \if#3m%
+ \setbox0\hbox{$#9$}%
+ \ifdim \wd0=0pt%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4 (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4|-*+<1pt,4pt>{\labelstyle#9}%
+ (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else \if#3r%
+ \ifnum #6<0%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else \if#3a%
+ \ifnum #5>0%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else \if#3b%
+ \ifnum #5<0%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar#4 (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi\fi\fi\fi\fi%
+\else%
+ \if#3l%
+ \ifnum #6>0%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else \if#3m%
+ \setbox0\hbox{$#9$}%
+ \ifdim \wd0=0pt%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}|-*+<1pt,4pt>{\labelstyle#9}%
+ (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else \if#3r%
+ \ifnum #6<0%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else \if#3a%
+ \ifnum #5>0%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else \if#3b%
+ \ifnum #5<0%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}^-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4}_-{#9} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi%
+ \else%
+ \POS(#1,#2)*+!!<0ex,\axis>{#7}\ar@{#4} (\xend,\yend)*+!!<0ex,\axis>{#8}%
+ \fi\fi\fi\fi\fi%
+\fi\ignorespaces}%
+\def\vect(#1,#2)/#3/<#4,#5>{%
+ \xend#1 \yend#2 \advance\xend by #4 \advance\yend by #5%
+ \POS(#1,#2)\ar#3 (\xend,\yend)}%
+\def\squarepppp(#1,#2)|#3|/#4`#5`#6`#7/<#8>[#9]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3##4|{%
+ \def\xa{##1}\def\xb{##2}\def\xc{##3}\def\xd{##4}\ignorespaces}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#8>%
+\def\next[##1`##2`##3`##4;##5`##6`##7`##8]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}%
+ \def\labela{##5}\def\labelb{##6}\def\labelc{##7}\def\labeld{##8}\ignorespaces}%
+\next[#9]%
+\morphism(\xpos,\ypos)|\xd|/{#7}/<\deltax,0>[\nodec`\noded;\labeld]%
+\advance \ypos by \deltay%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<0,-\deltay>[\nodea`\nodec;\labelb]%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<\deltax,0>[\nodea`\nodeb;\labela]%
+ \advance \xpos by \deltax%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<0,-\deltay>[\nodeb`\noded;\labelc]%
+\ignorespaces}%
+\def\square{\ifnextchar({\squarep}{\squarep(0,0)}}%
+\def\squarep(#1){\ifnextchar|{\squarepp(#1)}{\squarepp(#1)|alrb|}}%
+\def\squarepp(#1)|#2|{\ifnextchar/{\squareppp(#1)|#2|}%
+ {\squareppp(#1)|#2|/>`>`>`>/}}%
+\def\squareppp(#1)|#2|/#3`#4`#5`#6/{%
+ \ifnextchar<{\squarepppp(#1)|#2|/#3`#4`#5`#6/}%
+ {\squarepppp(#1)|#2|/#3`#4`#5`#6/<\default,\default>}}%
+\def\diamondpppp(#1,#2)|#3|/#4`#5`#6`#7/<#8>[#9]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3##4|{%
+ \def\xa{##1}\def\xb{##2}\def\xc{##3}\def\xd{##4}\ignorespaces}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#8>%
+\def\next[##1`##2`##3`##4;##5`##6`##7`##8]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}%
+ \def\labela{##5}\def\labelb{##6}\def\labelc{##7}%
+\def\labeld{##8}\ignorespaces}%
+\next[#9]%
+\advance\ypos\deltay
+\morphism(\xpos,\ypos)|\xc|/{#6}/<\deltax,-\deltay>[\nodeb`\noded;\labelc]%
+\advance\xpos \deltax
+\advance\xpos \deltax
+\morphism(\xpos,\ypos)|\xd|/{#7}/<-\deltax,-\deltay>[\nodec`\noded;\labeld]%
+\advance\ypos\deltay \advance\xpos -\deltax
+\morphism(\xpos,\ypos)|\xa|/{#4}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]%
+}
+\def\Diamond{\ifnextchar({\diamondp}{\diamondp(0,0)}}%
+\def\diamondp(#1){\ifnextchar|{\diamondpp(#1)}{\diamondpp(#1)|lrlr|}}%
+\def\diamondpp(#1)|#2|{\ifnextchar/{\diamondppp(#1)|#2|}%
+ {\diamondppp(#1)|#2|/>`>`>`>/}}%
+\def\diamondppp(#1)|#2|/#3`#4`#5`#6/{%
+ \ifnextchar<{\diamondpppp(#1)|#2|/#3`#4`#5`#6/}%
+ {\diamondpppp(#1)|#2|/#3`#4`#5`#6/<400,400>}}%
+\def\ptrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#7>%
+\def\next[##1`##2`##3;##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}%
+\next[#8]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<\deltax,0>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<0,-\deltay>[\nodea`\nodec;\labelb]%
+\advance\xpos by \deltax%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<-\deltax,-\deltay>[\nodeb`\nodec;\labelc]%
+\ignorespaces}%
+\def\qtrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#7>%
+\def\next[##1`##2`##3;##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}%
+\next[#8]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<\deltax,0>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]%
+\advance\xpos by \deltax%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<0,-\deltay>[\nodeb`\nodec;\labelc]%
+\ignorespaces}%
+\def\dtrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#7>%
+\def\next[##1`##2`##3;##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}%
+\next[#8]%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<\deltax,0>[\nodeb`\nodec;\labelc]%
+\advance\ypos by \deltay\advance \xpos by \deltax%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<0,-\deltay>[\nodea`\nodec;\labelb]%
+\ignorespaces}%
+\def\btrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#7>%
+\def\next[##1`##2`##3;##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}%
+\next[#8]%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<\deltax,0>[\nodeb`\nodec;\labelc]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<0,-\deltay>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]%
+\ignorespaces}%
+\def\Atrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#7>%
+\def\next[##1`##2`##3;##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}%
+\next[#8]%
+\multiply\deltax by 2%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<\deltax,0>[\nodeb`\nodec;\labelc]%
+\divide\deltax by 2%
+\advance\ypos by \deltay\advance\xpos by \deltax%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]%
+\ignorespaces}%
+\def\Vtrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#7>%
+\def\next[##1`##2`##3;##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}%
+\next[#8]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]%
+\multiply\deltax by 2%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<\deltax,0>[\nodea`\nodeb;\labela]%
+\advance\xpos by \deltax \divide \deltax by 2%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<-\deltax,-\deltay>[\nodeb`\nodec;\labelc]%
+\ignorespaces}%
+\def\Ctrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#7>%
+\def\next[##1`##2`##3;##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}%
+\next[#8]%
+\advance \ypos by \deltay%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<\deltax,-\deltay>[\nodeb`\nodec;\labelc]%
+\advance\ypos by \deltay \advance \xpos by \deltax%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]%
+\multiply\deltay by 2%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<0,-\deltay>[\nodea`\nodec;\labelb]%
+\ignorespaces}%
+\def\Dtrianglepppp(#1,#2)|#3|/#4`#5`#6/<#7>[#8]{%
+\xpos#1\ypos#2%
+\def\next|##1##2##3|{\def\xa{##1}\def\xb{##2}\def\xc{##3}}%
+\next|#3|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#7>%
+\def\next[##1`##2`##3;##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\labela{##4}\def\labelb{##5}\def\labelc{##6}}%
+\next[#8]%
+\advance\xpos by \deltax \advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xc|/{#6}/<-\deltax,-\deltay>[\nodeb`\nodec;\labelc]%
+\advance\xpos by -\deltax \advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xb|/{#5}/<\deltax,-\deltay>[\nodea`\nodeb;\labelb]%
+\multiply \deltay by 2%
+\morphism(\xpos,\ypos)|\xa|/{#4}/<0,-\deltay>[\nodea`\nodec;\labela]%
+\ignorespaces}%
+\def\ptriangle{\ifnextchar({\ptrianglep}{\ptrianglep(0,0)}}%
+\def\ptrianglep(#1){\ifnextchar|{\ptrianglepp(#1)}{\ptrianglepp(#1)|alr|}}%
+\def\ptrianglepp(#1)|#2|{\ifnextchar/{\ptriangleppp(#1)|#2|}%
+ {\ptriangleppp(#1)|#2|/>`>`>/}}%
+\def\ptriangleppp(#1)|#2|/#3`#4`#5/{%
+ \ifnextchar<{\ptrianglepppp(#1)|#2|/#3`#4`#5/}%
+ {\ptrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%
+\def\qtriangle{\ifnextchar({\qtrianglep}{\qtrianglep(0,0)}}%
+\def\qtrianglep(#1){\ifnextchar|{\qtrianglepp(#1)}{\qtrianglepp(#1)|alr|}}%
+\def\qtrianglepp(#1)|#2|{\ifnextchar/{\qtriangleppp(#1)|#2|}%
+ {\qtriangleppp(#1)|#2|/>`>`>/}}%
+\def\qtriangleppp(#1)|#2|/#3`#4`#5/{%
+ \ifnextchar<{\qtrianglepppp(#1)|#2|/#3`#4`#5/}%
+ {\qtrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%
+\def\dtriangle{\ifnextchar({\dtrianglep}{\dtrianglep(0,0)}}%
+\def\dtrianglep(#1){\ifnextchar|{\dtrianglepp(#1)}{\dtrianglepp(#1)|lrb|}}%
+\def\dtrianglepp(#1)|#2|{\ifnextchar/{\dtriangleppp(#1)|#2|}%
+ {\dtriangleppp(#1)|#2|/>`>`>/}}%
+\def\dtriangleppp(#1)|#2|/#3`#4`#5/{%
+ \ifnextchar<{\dtrianglepppp(#1)|#2|/#3`#4`#5/}%
+ {\dtrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%
+\def\btriangle{\ifnextchar({\btrianglep}{\btrianglep(0,0)}}%
+\def\btrianglep(#1){\ifnextchar|{\btrianglepp(#1)}{\btrianglepp(#1)|lrb|}}%
+\def\btrianglepp(#1)|#2|{\ifnextchar/{\btriangleppp(#1)|#2|}%
+ {\btriangleppp(#1)|#2|/>`>`>/}}%
+\def\btriangleppp(#1)|#2|/#3`#4`#5/{%
+ \ifnextchar<{\btrianglepppp(#1)|#2|/#3`#4`#5/}%
+ {\btrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%
+\def\Atriangle{\ifnextchar({\Atrianglep}{\Atrianglep(0,0)}}%
+\def\Atrianglep(#1){\ifnextchar|{\Atrianglepp(#1)}{\Atrianglepp(#1)|lrb|}}%
+\def\Atrianglepp(#1)|#2|{\ifnextchar/{\Atriangleppp(#1)|#2|}%
+ {\Atriangleppp(#1)|#2|/>`>`>/}}%
+\def\Atriangleppp(#1)|#2|/#3`#4`#5/{%
+ \ifnextchar<{\Atrianglepppp(#1)|#2|/#3`#4`#5/}%
+ {\Atrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%
+\def\Vtriangle{\ifnextchar({\Vtrianglep}{\Vtrianglep(0,0)}}%
+\def\Vtrianglep(#1){\ifnextchar|{\Vtrianglepp(#1)}{\Vtrianglepp(#1)|alb|}}%
+\def\Vtrianglepp(#1)|#2|{\ifnextchar/{\Vtriangleppp(#1)|#2|}%
+ {\Vtriangleppp(#1)|#2|/>`>`>/}}%
+\def\Vtriangleppp(#1)|#2|/#3`#4`#5/{%
+ \ifnextchar<{\Vtrianglepppp(#1)|#2|/#3`#4`#5/}%
+ {\Vtrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%
+\def\Ctriangle{\ifnextchar({\Ctrianglep}{\Ctrianglep(0,0)}}%
+\def\Ctrianglep(#1){\ifnextchar|{\Ctrianglepp(#1)}{\Ctrianglepp(#1)|arb|}}%
+\def\Ctrianglepp(#1)|#2|{\ifnextchar/{\Ctriangleppp(#1)|#2|}%
+ {\Ctriangleppp(#1)|#2|/>`>`>/}}%
+\def\Ctriangleppp(#1)|#2|/#3`#4`#5/{%
+ \ifnextchar<{\Ctrianglepppp(#1)|#2|/#3`#4`#5/}%
+ {\Ctrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%
+\def\Dtriangle{\ifnextchar({\Dtrianglep}{\Dtrianglep(0,0)}}%
+\def\Dtrianglep(#1){\ifnextchar|{\Dtrianglepp(#1)}{\Dtrianglepp(#1)|lab|}}%
+\def\Dtrianglepp(#1)|#2|{\ifnextchar/{\Dtriangleppp(#1)|#2|}%
+ {\Dtriangleppp(#1)|#2|/>`>`>/}}%
+\def\Dtriangleppp(#1)|#2|/#3`#4`#5/{%
+ \ifnextchar<{\Dtrianglepppp(#1)|#2|/#3`#4`#5/}%
+ {\Dtrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%
+\def\Atrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<#8>[#9]{%
+\def\next(##1,##2){\xpos##1\ypos##2}%
+\next(#1)%
+\def\next|##1##2##3##4##5|{\def\xa{##1}\def\xb{##2}%
+\def\xc{##3}\def\xd{##4}\def\xe{##5}}%
+\next|#2|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#8>%
+\def\next[##1`##2`##3`##4;##5`##6`##7`##8`##9]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}%
+ \def\labela{##5}\def\labelb{##6}\def\labelc{##7}\def\labeld{##8}\def\labele{##9}}%
+\next[#9]%
+\morphism(\xpos,\ypos)|\xd|/{#6}/<\deltax,0>[\nodeb`\nodec;\labeld]%
+\advance\xpos by \deltax%
+\morphism(\xpos,\ypos)|\xe|/{#7}/<\deltax,0>[\nodec`\noded;\labele]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xa|/{#3}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#4}/<0,-\deltay>[\nodea`\nodec;\labelb]%
+\morphism(\xpos,\ypos)|\xc|/{#5}/<\deltax,-\deltay>[\nodea`\noded;\labelc]%
+\ignorespaces}%
+\def\Vtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<#8>[#9]{%
+\def\next(##1,##2){\xpos##1\ypos##2}%
+\next(#1)%
+\def\next|##1##2##3##4##5|{\def\xa{##1}\def\xb{##2}%
+\def\xc{##3}\def\xd{##4}\def\xe{##5}}%
+\next|#2|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#8>%
+\def\next[##1`##2`##3`##4;##5`##6`##7`##8`##9]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}%
+ \def\labela{##5}\def\labelb{##6}\def\labelc{##7}\def\labeld{##8}\def\labele{##9}}%
+\next[#9]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xa|/{#3}/<\deltax,0>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xc|/{#5}/<\deltax,-\deltay>[\nodea`\noded;\labelc]%
+\advance\xpos by \deltax%
+\morphism(\xpos,\ypos)|\xb|/{#4}/<\deltax,0>[\nodeb`\nodec;\labelb]%
+\morphism(\xpos,\ypos)|\xd|/{#6}/<0,-\deltay>[\nodeb`\noded;\labeld]%
+\advance\xpos by \deltax%
+\morphism(\xpos,\ypos)|\xe|/{#7}/<-\deltax,-\deltay>[\nodec`\noded;\labele]%
+\ignorespaces}%
+\def\Ctrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<#8>[#9]{%
+\def\next(##1,##2){\xpos##1\ypos##2}%
+\next(#1)%
+\def\next|##1##2##3##4##5|{\def\xa{##1}\def\xb{##2}%
+\def\xc{##3}\def\xd{##4}\def\xe{##5}}%
+\next|#2|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#8>%
+\def\next[##1`##2`##3`##4;##5`##6`##7`##8`##9]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}%
+ \def\labela{##5}\def\labelb{##6}\def\labelc{##7}\def\labeld{##8}\def\labele{##9}}%
+\next[#9]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xe|/{#7}/<0,-\deltay>[\nodec`\noded;\labele]%
+\advance\xpos by -\deltax%
+\morphism(\xpos,\ypos)|\xc|/{#5}/<\deltax,0>[\nodeb`\nodec;\labelc]%
+\morphism(\xpos,\ypos)|\xd|/{#6}/<\deltax,-\deltay>[\nodeb`\noded;\labeld]%
+\advance\ypos by \deltay%
+\advance\xpos by \deltax%
+\morphism(\xpos,\ypos)|\xa|/{#3}/<-\deltax,-\deltay>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#4}/<0,-\deltay>[\nodea`\nodec;\labelb]%
+\ignorespaces}%
+\def\Dtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<#8>[#9]{%
+\def\next(##1,##2){\xpos##1\ypos##2}%
+\next(#1)%
+\def\next|##1##2##3##4##5|{\def\xa{##1}\def\xb{##2}%
+\def\xc{##3}\def\xd{##4}\def\xe{##5}}%
+\next|#2|%
+\def\next<##1,##2>{\deltax=##1\deltay=##2\ignorespaces}%
+\next<#8>%
+\def\next[##1`##2`##3`##4;##5`##6`##7`##8`##9]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}\def\noded{##4}%
+ \def\labela{##5}\def\labelb{##6}\def\labelc{##7}\def\labeld{##8}\def\labele{##9}}%
+\next[#9]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xc|/{#5}/<\deltax,0>[\nodeb`\nodec;\labelc]%
+\morphism(\xpos,\ypos)|\xd|/{#6}/<0,-\deltay>[\nodeb`\noded;\labeld]%
+\advance\ypos by \deltay%
+\morphism(\xpos,\ypos)|\xa|/{#3}/<0,-\deltay>[\nodea`\nodeb;\labela]%
+\morphism(\xpos,\ypos)|\xb|/{#4}/<\deltax,-\deltay>[\nodea`\nodec;\labelb]%
+\advance\ypos by -\deltay%
+\advance\xpos by \deltax%
+\morphism(\xpos,\ypos)|\xe|/{#7}/<-\deltax,-\deltay>[\nodec`\noded;\labele]%
+\ignorespaces}%
+\def\Atrianglepair{\ifnextchar({\Atrianglepairp}{\Atrianglepairp(0,0)}}%
+\def\Atrianglepairp(#1){\ifnextchar|{\Atrianglepairpp(#1)}%
+{\Atrianglepairpp(#1)|lmrbb|}}%
+\def\Atrianglepairpp(#1)|#2|{\ifnextchar/{\Atrianglepairppp(#1)|#2|}%
+ {\Atrianglepairppp(#1)|#2|/>`>`>`>`>/}}%
+\def\Atrianglepairppp(#1)|#2|/#3`#4`#5`#6`#7/{%
+ \ifnextchar<{\Atrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/}%
+ {\Atrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<\default,\default>}}%
+\def\Vtrianglepair{\ifnextchar({\Vtrianglepairp}{\Vtrianglepairp(0,0)}}%
+\def\Vtrianglepairp(#1){\ifnextchar|{\Vtrianglepairpp(#1)}%
+{\Vtrianglepairpp(#1)|aalmr|}}%
+\def\Vtrianglepairpp(#1)|#2|{\ifnextchar/{\Vtrianglepairppp(#1)|#2|}%
+ {\Vtrianglepairppp(#1)|#2|/>`>`>`>`>/}}%
+\def\Vtrianglepairppp(#1)|#2|/#3`#4`#5`#6`#7/{%
+ \ifnextchar<{\Vtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/}%
+ {\Vtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<\default,\default>}}%
+\def\Ctrianglepair{\ifnextchar({\Ctrianglepairp}{\Ctrianglepairp(0,0)}}%
+\def\Ctrianglepairp(#1){\ifnextchar|{\Ctrianglepairpp(#1)}%
+{\Ctrianglepairpp(#1)|lrmlr|}}%
+\def\Ctrianglepairpp(#1)|#2|{\ifnextchar/{\Ctrianglepairppp(#1)|#2|}%
+ {\Ctrianglepairppp(#1)|#2|/>`>`>`>`>/}}%
+\def\Ctrianglepairppp(#1)|#2|/#3`#4`#5`#6`#7/{%
+ \ifnextchar<{\Ctrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/}%
+ {\Ctrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<\default,\default>}}%
+\def\Dtrianglepair{\ifnextchar({\Dtrianglepairp}{\Dtrianglepairp(0,0)}}%
+\def\Dtrianglepairp(#1){\ifnextchar|{\Dtrianglepairpp(#1)}%
+{\Dtrianglepairpp(#1)|lrmlr|}}%
+\def\Dtrianglepairpp(#1)|#2|{\ifnextchar/{\Dtrianglepairppp(#1)|#2|}%
+ {\Dtrianglepairppp(#1)|#2|/>`>`>`>`>/}}%
+\def\Dtrianglepairppp(#1)|#2|/#3`#4`#5`#6`#7/{%
+ \ifnextchar<{\Dtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/}%
+ {\Dtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<\default,\default>}}%
+\def\pplace[#1](#2,#3)[#4]{\POS(#2,#3)*+!!<0ex,\axis>!#1{#4}\ignorespaces}%
+\def\cplace(#1,#2)[#3]{\POS(#1,#2)*+!!<0ex,\axis>{#3}\ignorespaces}%
+\def\place{\ifnextchar[{\pplace}{\cplace}}%
+\def\pullback#1]#2]{\square#1]\trident#2]\ignorespaces}%
+\def\tridentppp|#1#2#3|/#4`#5`#6/<#7,#8>[#9]{%
+\def\next[##1;##2`##3`##4]{\def\nodee{##1}\def\labele{##2}%
+ \def\labelf{##3}\def\labelg{##4}}%
+\next[#9]%
+\advance \xpos by -\deltax%
+\advance \xpos by -#7\advance \ypos by #8%
+\advance\deltax by #7%
+\morphism(\xpos,\ypos)|#1|/{#4}/<\deltax,-#8>[\nodee`\nodeb;\labele]%
+\advance\deltax by -#7%
+\morphism(\xpos,\ypos)|#2|/{#5}/<#7,-#8>[\nodee`\nodea;\labelf]%
+\advance\deltay by #8%
+\morphism(\xpos,\ypos)|#3|/{#6}/<#7,-\deltay>[\nodee`\nodec;\labelg]%
+\ignorespaces}%
+\def\trident{\ifnextchar|{\tridentp}{\tridentp|amb|}}%
+\def\tridentp|#1|{\ifnextchar/{\tridentpp|#1|}{\tridentpp|#1|/{>}`{>}`{>}/}}%
+\def\tridentpp|#1|/#2/{\ifnextchar<{\tridentppp|#1|/#2/}%
+ {\tridentppp|#1|/#2/<500,500>}}%
+\def\setmorphismwidth#1#2#3#4{%
+ \setbox0=\hbox{$#1{\labelstyle#3#3}#2$}#4=\wd0%
+ \divide #4 by 2 \divide #4 by \ul%
+ \advance #4 by 350 \ratchet{#4}{500}}%
+\def\setSquarewidth[#1`#2`#3`#4;#5`#6`#7`#8]{%
+ \setmorphismwidth{#1}{#2}{#5}{\topw}%
+ \setmorphismwidth{#3}{#4}{#8}{\botw}%
+\ratchet{\topw}{\botw}}%
+\def\Squarepppp(#1)|#2|/#3/<#4>[#5]{%
+ \setSquarewidth[#5]%
+ \squarepppp(#1)|#2|/#3/<\topw,#4>[#5]%
+\ignorespaces}%
+\def\Square{\ifnextchar({\Squarep}{\Squarep(0,0)}}%
+\def\Squarep(#1){\ifnextchar|{\Squarepp(#1)}{\Squarepp(#1)|alrb|}}%
+\def\Squarepp(#1)|#2|{\ifnextchar/{\Squareppp(#1)|#2|}%
+ {\Squareppp(#1)|#2|/>`>`>`>/}}%
+\def\Squareppp(#1)|#2|/#3`#4`#5`#6/{%
+ \ifnextchar<{\Squarepppp(#1)|#2|/#3`#4`#5`#6/}%
+ {\Squarepppp(#1)|#2|/#3`#4`#5`#6/<\default>}}%
+\def\hsquarespppp(#1,#2)|#3|/#4/<#5>[#6;#7]{%
+\Xpos=#1\Ypos=#2%
+\def\next|##1##2##3##4##5##6##7|{%
+ \def\Xa{##1}\def\Xb{##2}\def\Xc{##3}\def\Xd{##4}%
+ \def\Xe{##5}\def\Xf{##6}\def\Xg{##7}}%
+\next|#3|%
+\def\next<##1,##2,##3>{\deltaX=##1\deltaXprime=##2\deltaY=##3}%
+\next<#5>%
+\def\next[##1`##2`##3`##4`##5`##6]{%
+ \def\Nodea{##1}\def\Nodeb{##2}\def\Nodec{##3}%
+ \def\Noded{##4}\def\Nodee{##5}\def\Nodef{##6}}%
+\next[#6]%
+\def\next[##1`##2`##3`##4`##5`##6`##7]{%
+ \def\Labela{##1}\def\Labelb{##2}\def\Labelc{##3}\def\Labeld{##4}%
+ \def\Labele{##5}\def\Labelf{##6}\def\Labelg{##7}}%
+\next[#7]%
+\dohsquares/#4/}%
+\def\dohsquares/#1`#2`#3`#4`#5`#6`#7/{%
+\squarepppp(\Xpos,\Ypos)|\Xa\Xc\Xd\Xf|/#1`#3`#4`#6/<\deltaX,\deltaY>%
+ [\Nodea`\Nodeb`\Noded`\Nodee;\Labela`\Labelc`\Labeld`\Labelf]%
+ \advance \Xpos by \deltaX%
+\squarepppp(\Xpos,\Ypos)|\Xb\Xd\Xe\Xg|/#2``#5`#7/<\deltaXprime,\deltaY>%
+[\Nodeb`\Nodec`\Nodee`\Nodef;\Labelb``\Labele`\Labelg]%
+\ignorespaces}%
+\def\hsquares{\ifnextchar({\hsquaresp}{\hsquaresp(0,0)}}%
+\def\hsquaresp(#1){\ifnextchar|{\hsquarespp(#1)}{\hsquarespp%
+(#1)|aalmrbb|}}%
+\def\hsquarespp(#1)|#2|{\ifnextchar/{\hsquaresppp(#1)|#2|}%
+ {\hsquaresppp(#1)|#2|/>`>`>`>`>`>`>/}}%
+\def\hsquaresppp(#1)|#2|/#3/{%
+ \ifnextchar<{\hsquarespppp(#1)|#2|/#3/}%
+ {\hsquarespppp(#1)|#2|/#3/<\default,\default,\default>}}%
+\def\hSquarespppp(#1,#2)|#3|/#4/<#5>[#6;#7]{%
+\Xpos=#1\Ypos=#2%
+\def\next|##1##2##3##4##5##6##7|{%
+ \def\Xa{##1}\def\Xb{##2}\def\Xc{##3}\def\Xd{##4}%
+ \def\Xe{##5}\def\Xf{##6}\def\Xg{##7}}%
+\next|#3|%
+\deltaY=#5%
+\def\next[##1`##2`##3`##4`##5`##6]{%
+ \def\Nodea{##1}\def\Nodeb{##2}\def\Nodec{##3}%
+ \def\Noded{##4}\def\Nodee{##5}\def\Nodef{##6}}%
+\next[#6]%
+\def\next[##1`##2`##3`##4`##5`##6`##7]{%
+ \def\Labela{##1}\def\Labelb{##2}\def\Labelc{##3}\def\Labeld{##4}%
+ \def\Labele{##5}\def\Labelf{##6}\def\Labelg{##7}}%
+\next[#7]%
+\dohSquares/#4/}%
+\def\dohSquares/#1`#2`#3`#4`#5`#6`#7/{%
+\Squarepppp(\Xpos,\Ypos)|\Xa\Xc\Xd\Xf|/#1`#3`#4`#6/<\deltaY>%
+ [\Nodea`\Nodeb`\Noded`\Nodee;\Labela`\Labelc`\Labeld`\Labelf]%
+ \advance \Xpos by \topw%
+\Squarepppp(\Xpos,\Ypos)|\Xb\Xd\Xe\Xg|/#2``#5`#7/<\deltaY>%
+[\Nodeb`\Nodec`\Nodee`\Nodef;\Labelb``\Labele`\Labelg]%
+\ignorespaces}%
+\def\hSquares{\ifnextchar({\hSquaresp}{\hSquaresp(0,0)}}%
+\def\hSquaresp(#1){\ifnextchar|{\hSquarespp(#1)}{\hSquarespp%
+(#1)|aalmrbb|}}%
+\def\hSquarespp(#1)|#2|{\ifnextchar/{\hSquaresppp(#1)|#2|}%
+ {\hSquaresppp(#1)|#2|/>`>`>`>`>`>`>/}}%
+\def\hSquaresppp(#1)|#2|/#3/{%
+ \ifnextchar<{\hSquarespppp(#1)|#2|/#3/}%
+ {\hSquarespppp(#1)|#2|/#3/<\default>}}%
+\def\vsquarespppp(#1,#2)|#3|/#4/<#5>[#6;#7]{%
+\Xpos=#1\Ypos=#2%
+\def\next|##1##2##3##4##5##6##7|{%
+ \def\Xa{##1}\def\Xb{##2}\def\Xc{##3}\def\Xd{##4}%
+ \def\Xe{##5}\def\Xf{##6}\def\Xg{##7}}%
+\next|#3|%
+\def\next<##1,##2,##3>{\deltaX=##1\deltaY=##2\deltaYprime=##3}%
+\next<#5>%
+\def\next[##1`##2`##3`##4`##5`##6]{%
+ \def\Nodea{##1}\def\Nodeb{##2}\def\Nodec{##3}%
+ \def\Noded{##4}\def\Nodee{##5}\def\Nodef{##6}}%
+\next[#6]%
+\def\next[##1`##2`##3`##4`##5`##6`##7]{%
+ \def\Labela{##1}\def\Labelb{##2}\def\Labelc{##3}\def\Labeld{##4}%
+ \def\Labele{##5}\def\Labelf{##6}\def\Labelg{##7}}%
+\next[#7]%
+\dovsquares/#4/}%
+\def\dovsquares/#1`#2`#3`#4`#5`#6`#7/{%
+\squarepppp(\Xpos,\Ypos)|\Xd\Xe\Xf\Xg|/`#5`#6`#7/<\deltaX,\deltaYprime>%
+[\Nodec`\Noded`\Nodee`\Nodef;`\Labele`\Labelf`\Labelg]%
+ \advance\Ypos by \deltaYprime%
+\squarepppp(\Xpos,\Ypos)|\Xa\Xb\Xc\Xd|/#1`#2`#3`#4/<\deltaX,\deltaY>%
+ [\Nodea`\Nodeb`\Nodec`\Noded;\Labela`\Labelb`\Labelc`\Labeld]%
+\ignorespaces}%
+\def\vsquares{\ifnextchar({\vsquaresp}{\vsquaresp(0,0)}}%
+\def\vsquaresp(#1){\ifnextchar|{\vsquarespp(#1)}{\vsquarespp%
+(#1)|aalmrbb|}}%
+\def\vsquarespp(#1)|#2|{\ifnextchar/{\vsquaresppp(#1)|#2|}%
+ {\vsquaresppp(#1)|#2|/>`>`>`>`>`>`>/}}%
+\def\vsquaresppp(#1)|#2|/#3/{%
+ \ifnextchar<{\vsquarespppp(#1)|#2|/#3/}%
+ {\vsquarespppp(#1)|#2|/#3/<\default,\default,\default>}}%
+\def\vSquarespppp(#1,#2)|#3|/#4/<#5,#6>[#7;#8]{%
+\Xpos=#1\Ypos=#2%
+\def\next|##1##2##3##4##5##6##7|{%
+ \def\Xa{##1}\def\Xb{##2}\def\Xc{##3}\def\Xd{##4}%
+ \def\Xe{##5}\def\Xf{##6}\def\Xg{##7}}%
+\next|#3|%
+\deltaX=#5%
+\deltaY=#6%
+\def\next[##1`##2`##3`##4`##5`##6]{%
+ \def\Nodea{##1}\def\Nodeb{##2}\def\Nodec{##3}%
+ \def\Noded{##4}\def\Nodee{##5}\def\Nodef{##6}}%
+\next[#7]%
+\def\next[##1`##2`##3`##4`##5`##6`##7]{%
+ \def\Labela{##1}\def\Labelb{##2}\def\Labelc{##3}\def\Labeld{##4}%
+ \def\Labele{##5}\def\Labelf{##6}\def\Labelg{##7}}%
+\next[#8]%
+\dovSquares/#4/\ignorespaces}%
+\def\dovSquares/#1`#2`#3`#4`#5`#6`#7/{%
+\setmorphismwidth{\Nodea}{\Nodeb}{\Labela}{\topw}%
+\setmorphismwidth{\Nodec}{\Noded}{\Labeld}{\botw}%
+\ratchet{\topw}{\botw}%
+\setmorphismwidth{\Nodee}{\Nodef}{\Labelg}{\botw}%
+\ratchet{\topw}{\botw}%
+\square(\Xpos,\Ypos)|\Xd\Xe\Xf\Xg|/`#5`#6`#7/<\topw,\deltaY>%
+ [\Nodec`\Noded`\Nodee`\Nodef;`\Labele`\Labelf`\Labelg]%
+\advance \Ypos by \deltaY%
+\square(\Xpos,\Ypos)|\Xa\Xb\Xc\Xd|/#1`#2`#3`#4/<\topw,\deltaX>%
+ [\Nodea`\Nodeb`\Nodec`\Noded;\Labela`\Labelb`\Labelc`\Labeld]%
+}%
+\def\vSquares{\ifnextchar({\vSquaresp}{\vSquaresp(0,0)}}%
+\def\vSquaresp(#1){\ifnextchar|{\vSquarespp(#1)}{\vSquarespp%
+(#1)|alrmlrb|}}%
+\def\vSquarespp(#1)|#2|{\ifnextchar/{\vSquaresppp(#1)|#2|}%
+ {\vSquaresppp(#1)|#2|/>`>`>`>`>`>`>/}}%
+\def\vSquaresppp(#1)|#2|/#3/{%
+ \ifnextchar<{\vSquarespppp(#1)|#2|/#3/}%
+ {\vSquarespppp(#1)|#2|/#3/<\default,\default>}}%
+\def\osquarepppp(#1)|#2|/#3`#4`#5`#6/<#7>[#8]{\squarepppp%
+ (#1)|#2|/#3`#4`#5`#6/<#7>[#8]%
+ \let\Nodea\nodea\let\Nodeb\nodeb%
+\let\Nodec\nodec\let\Noded\noded\Xpos=\xpos\Ypos=\ypos%
+\deltaX=\deltax \deltaY=\deltay \isquare}%
+\def\cube{\ifnextchar({\osquarep}{\osquarep(0,0)}}%
+\def\osquarep(#1){\ifnextchar|{\osquarepp(#1)}{\osquarepp(#1)|alrb|}}%
+\def\osquarepp(#1)|#2|{\ifnextchar/{\osquareppp(#1)|#2|}%
+ {\osquareppp(#1)|#2|/>`>`>`>/}}%
+\def\osquareppp(#1)|#2|/#3`#4`#5`#6/{%
+ \ifnextchar<{\osquarepppp(#1)|#2|/#3`#4`#5`#6/}%
+ {\osquarepppp(#1)|#2|/#3`#4`#5`#6/<1500,1500>}}%
+\def\isquarepppp(#1)|#2|/#3`#4`#5`#6/<#7>[#8]{%
+ \squarepppp(#1)|#2|/#3`#4`#5`#6/<#7>[#8]%
+\ifnextchar|{\cubep}{\cubep|mmmm|}}%
+\def\cubep|#1|{\ifnextchar/{\cubepp|#1|}{\cubepp|#1|/>`>`>`>/}}%
+\def\isquare{\ifnextchar({\isquarep}{\isquarep(\default,\default)}}%
+\def\isquarep(#1){\ifnextchar|{\isquarepp(#1)}{\isquarepp(#1)|alrb|}}%
+\def\isquarepp(#1)|#2|{\ifnextchar/{\isquareppp(#1)|#2|}%
+ {\isquareppp(#1)|#2|/>`>`>`>/}}%
+\def\isquareppp(#1)|#2|/#3`#4`#5`#6/{%
+ \ifnextchar<{\isquarepppp(#1)|#2|/#3`#4`#5`#6/}%
+ {\isquarepppp(#1)|#2|/#3`#4`#5`#6/<500,500>}}%
+\def\cubepp|#1#2#3#4|/#5`#6`#7`#8/[#9]{%
+\def\next[##1`##2`##3`##4]{\gdef\Labela{##1}%
+\gdef\Labelb{##2}\gdef\Labelc{##3}\gdef\Labeld{##4}}\next[#9]%
+\xend\xpos \yend\ypos%
+\Xend\xend\advance\Xend by -\Xpos%
+\Yend\yend\advance\Yend by -\Ypos%
+\domorphism(\Xpos,\Ypos)|#2|/#6/<\Xend,\Yend>[\Nodeb`\nodeb;\Labelb]%
+\advance\Xpos by-\deltaX%
+\advance\xend by-\deltax%
+\Xend\xend\advance\Xend by -\Xpos%
+\domorphism(\Xpos,\Ypos)|#1|/#5/<\Xend,\Yend>[\Nodea`\nodea;\Labela]%
+\advance\Ypos by-\deltaY%
+\advance\yend by-\deltay%
+\Yend\yend\advance\Yend by -\Ypos%
+\domorphism(\Xpos,\Ypos)|#3|/#7/<\Xend,\Yend>[\Nodec`\nodec;\Labelc]%
+\advance\Xpos by\deltaX%
+\advance\xend by\deltax%
+\Xend\xend\advance\Xend by -\Xpos%
+\domorphism(\Xpos,\Ypos)|#4|/#8/<\Xend,\Yend>[\Noded`\noded;\Labeld]%
+\ignorespaces}%
+\def\setwdth#1#2{\setbox0\hbox{$\labelstyle#1$}\wdth=\wd0%
+\setbox0\hbox{$\labelstyle#2$}\ifnum\wdth<\wd0 \wdth=\wd0 \fi}%
+\def\topppp/#1/<#2>^#3_#4{\:%
+\ifnum#2=0%
+ \setwdth{#3}{#4}\deltax=\wdth \divide \deltax by \ul%
+ \advance \deltax by \defaultmargin \ratchet{\deltax}{100}%
+\else \deltax #2%
+\fi%
+\xy\ar@{#1}^{#3}_{#4}(\deltax,0) \endxy%
+\:}%
+\def\toppp/#1/<#2>^#3{\ifnextchar_{\topppp/#1/<#2>^{#3}}{\topppp/#1/<#2>^{#3}_{}}}%
+\def\topp/#1/<#2>{\ifnextchar^{\toppp/#1/<#2>}{\toppp/#1/<#2>^{}}}%
+\def\toop/#1/{\ifnextchar<{\topp/#1/}{\topp/#1/<0>}}%
+\def\to{\ifnextchar/{\toop}{\toop/>/}}%
+\def\mon{\to/ >->/}%
+\def\epi{\to/->>/}%
+\def\toleft{\to/<-/}%
+\def\monleft{\to/<-< /}%
+\def\epileft{\to/<<-/}%
+\def\rlimto{{%
+\font\xyatipfont=xyatip10 scaled 800
+\font\xybtipfont=xybtip10 scaled 800
+\raise 2pt\hbox{\,\xy\ar@{->}(100,0) \endxy}\,}}
+\def\llimto{{%
+\font\xyatipfont=xyatip10 scaled 800
+\font\xybtipfont=xybtip10 scaled 800
+\raise 2pt\hbox{\,\xy\ar@{<-}(100,0) \endxy}\,}}
+\def\twopppp/#1`#2/<#3>^#4_#5{\:%
+\ifnum0=#3%
+ \setwdth{#4}{#5}\deltax=\wdth \divide \deltax by \ul \advance \deltax%
+ by \defaultmargin \ratchet{\deltax}{200}%
+\else \deltax#3 \fi%
+\xy\ar@{#1}@<2.5pt>^{#4}(\deltax,0)%
+\ar@{#2}@<-2.5pt>_{#5}(\deltax,0)\endxy\:}%
+\def\twoppp/#1`#2/<#3>^#4{\ifnextchar_{\twopppp/#1`#2/<#3>^{#4}}%
+ {\twopppp/#1`#2/<#3>^{#4}_{}}}%
+\def\twopp/#1`#2/<#3>{\ifnextchar^{\twoppp/#1`#2/<#3>}{\twoppp/#1`#2/<#3>^{}}}%
+\def\twop/#1`#2/{\ifnextchar<{\twopp/#1`#2/}{\twopp/#1`#2/<0>}}%
+\def\two{\ifnextchar/{\twop}{\twop/>`>/}}%
+\def\twoleft{\two/<-`<-/}%
+\def\threeppppp/#1`#2`#3/<#4>^#5|#6_#7{\:%
+\ifnum0=#4%
+\setbox0\hbox{$\labelstyle#5$}\wdth=\wd0%
+\setbox0\hbox{$\labelstyle#6$}\ifnum\wdth<\wd0 \wdth=\wd0 \fi%
+\setbox0\hbox{$\labelstyle#7$}\ifnum\wdth<\wd0 \wdth=\wd0 \fi%
+\deltax=\wdth \divide \deltax by \ul \advance \deltax by%
+\defaultmargin \ratchet{\deltax}{300}%
+\else\deltax#4 \fi%
+ \xy \ifnum\wd0=0 \ar@{#2}(\deltax,0)%
+ \else \ar@{#2}|{#6}(\deltax,0)\fi%
+\ar@{#1}@<4.5pt>^{#5}(\deltax,0)%
+\ar@{#3}@<-4.5pt>_{#7}(\deltax,0)\endxy\:}%
+\def\threepppp/#1`#2`#3/<#4>^#5|#6{\ifnextchar_{\threeppppp%
+ /#1`#2`#3/<#4>^{#5}|{#6}}{\threeppppp/#1`#2`#3/<#4>^{#5}|{#6}_{}}}%
+\def\threeppp/#1`#2`#3/<#4>^#5{\ifnextchar|{\threepppp%
+ /#1`#2`#3/<#4>^{#5}}{\threepppp/#1`#2`#3/<#4>^{#5}|{}}}%
+\def\threepp/#1`#2`#3/<#4>{\ifnextchar^{\threeppp/#1`#2`#3/<#4>}%
+ {\threeppp/#1`#2`#3/<#4>^{}}}%
+\def\threep/#1`#2`#3/{\ifnextchar<{\threepp/#1`#2`#3/}%
+ {\threepp/#1`#2`#3/<0>}}%
+\def\three{\ifnextchar/{\threep}{\threep/>`>`>/}}%
+\def\twoar(#1,#2){{%
+ \scalefactor{0.1}%
+ \deltax#1\deltay#2%
+ \deltaX=\ifnum\deltax<0-\fi\deltax%
+ \deltaY=\ifnum\deltay<0-\fi\deltay%
+ \Xend\deltax \multiply \Xend by \deltax%
+ \Yend\deltay \multiply \Yend by \deltay%
+ \advance\Xend by \Yend \multiply \Xend by 3%
+ \ifnum \deltaX > \deltaY%
+ \multiply \deltaX by 3 \advance \deltaX by \deltaY%
+ \else%
+ \multiply \deltaY by 3 \advance \deltaX by \deltaY%
+ \fi%
+ \multiply\deltax by 500%
+ \multiply\deltay by 500%
+ \xpos\deltax \multiply \xpos by 3 \divide\xpos by \deltaX%
+ \Xpos\deltax \multiply \Xpos by \deltaX \divide \Xpos by \Xend%
+ \advance \xpos by \Xpos%
+ \ypos\deltay \multiply \ypos by 3 \divide\ypos by \deltaX%
+ \Ypos\deltay \multiply \Ypos by \deltaX \divide \Ypos by \Xend%
+ \advance \ypos by \Ypos%
+ \xy \ar@{=>}(\xpos,\ypos) \endxy%
+}\ignorespaces}%
+\def\iiixiiipppppp(#1,#2)|#3|/#4/<#5>#6<#7>[#8;#9]{%
+ \xpos#1\ypos#2\relax%
+ \def\next|##1##2##3##4##5##6##7|{\def\xa{##1}\def\xb{##2}%
+ \def\xc{##3}\def\xd{##4}\def\xe{##5}\def\xf{##6}\nextt|##7|}%
+ \def\nextt|##1##2##3##4##5##6|{\def\xg{##1}\def\xh{##2}%
+ \def\xi{##3}\def\xj{##4}\def\xk{##5}\def\xl{##6}}%
+ \next|#3|%
+ \def\next<##1,##2>{\deltax##1\deltay##2}%
+ \next<#5>%
+ \def\next<##1,##2>{\deltaX##1\deltaY##2}%
+ \next<#7>%
+ \def\next##1{\topw##1\relax%
+ \ifodd\topw \def\za{}\else\def\za{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zb{}\else\def\zb{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zc{}\else\def\zc{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zd{}\else\def\zd{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\ze{}\else\def\ze{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zf{}\else\def\zf{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zg{}\else\def\zg{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zh{}\else\def\zh{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zi{}\else\def\zi{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zj{}\else\def\zj{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zk{}\else\def\zk{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zl{}\else\def\zl{\relax}\fi}%
+ \next{#6}%
+ \def\next[##1`##2`##3`##4`##5`##6`##7`##8`##9]{%
+ \def\nodeA{##1}\def\nodeB{##2}\def\nodeC{##3}%
+ \def\nodeD{##4}\def\nodeE{##5}\def\nodeF{##6}%
+ \def\nodeG{##7}\def\nodeH{##8}\def\nodeI{##9}}%
+ \next[#8]%
+ \def\next[##1`##2`##3`##4`##5`##6`##7]{%
+ \def\labela{##1}\def\labelb{##2}\def\labelc{##3}%
+ \def\labeld{##4}\def\labele{##5}\def\labelf{##6}\nextt[##7]}%
+ \def\nextt[##1`##2`##3`##4`##5`##6]{%
+ \def\labelg{##1}\def\labelh{##2}\def\labeli{##3}%
+ \def\labelj{##4}\def\labelk{##5}\def\labell{##6}}%
+ \next[#9]%
+ \def\next/##1`##2`##3`##4`##5`##6`##7`##8/{%
+ \advance\ypos\deltay
+ \ifx\zf\empty \morphism(\xpos,\ypos)/<-/<-\deltaX,0>[\nodeD`0;]\fi
+ \morphism(\xpos,\ypos)|\xf|/{##6}/<\deltax,0>[\nodeD`\nodeE;\labelf]%
+ \advance \xpos\deltax
+ \morphism(\xpos,\ypos)|\xg|/{##7}/<\deltax,0>[\nodeE`\nodeF;\labelg]%
+ \ifx\zg\empty \advance\xpos \deltax
+ \morphism(\xpos,\ypos)<\deltaX,0>[\nodeF`0;]\fi
+ \xpos#1 \advance\ypos\deltay
+ \ifx\zd\empty \morphism(\xpos,\ypos)/<-/<-\deltaX,0>[\nodeA`0;]\fi
+ \ifx\za\empty \morphism(\xpos,\ypos)/<-/<0,\deltaY>[\nodeA`0;]\fi
+ \morphism(\xpos,\ypos)|\xa|/{##1}/<\deltax,0>[\nodeA`\nodeB;\labela]%
+ \morphism(\xpos,\ypos)|\xc|/{##3}/<0,-\deltay>[\nodeA`\nodeD;\labelc]%
+ \advance \xpos\deltax
+ \morphism(\xpos,\ypos)|\xb|/{##2}/<\deltax,0>[\nodeB`\nodeC;\labelb]%
+ \morphism(\xpos,\ypos)|\xd|/{##4}/<0,-\deltay>[\nodeB`\nodeE;\labeld]%
+ \ifx\zb\empty \morphism(\xpos,\ypos)/<-/<0,\deltaY>[\nodeB`0;]\fi
+ \advance\xpos\deltax
+ \morphism(\xpos,\ypos)|\xe|/{##5}/<0,-\deltay>[\nodeC`\nodeF;\labele]%
+ \ifx\zc\empty \morphism(\xpos,\ypos)/<-/<0,\deltaY>[\nodeC`0;]\fi
+ \ifx\ze\empty \morphism(\xpos,\ypos)<\deltaX,0>[\nodeC`0;]\fi
+ \nextt/##8/}%
+ \def\nextt/##1`##2`##3`##4`##5/{%
+ \xpos#1\ypos#2\relax%
+ \ifx\zh\empty \morphism(\xpos,\ypos)/<-/<-\deltaX,0>[\nodeG`0;]\fi
+ \ifx\zj\empty \morphism(\xpos,\ypos)<0,-\deltaY>[\nodeG`0;]\fi
+ \morphism(\xpos,\ypos)|\xk|/{##4}/<\deltax,0>[\nodeG`\nodeH;\labelk]%
+ \advance\xpos\deltax
+ \morphism(\xpos,\ypos)|\xl|/{##5}/<\deltax,0>[\nodeH`\nodeI;\labell]%
+ \ifx\zk\empty \morphism(\xpos,\ypos)<0,-\deltaY>[\nodeH`0;]\fi
+ \advance\xpos\deltax
+ \ifx\zi\empty \morphism(\xpos,\ypos)<\deltaX,0>[\nodeI`0;]\fi
+ \ifx\zl\empty \morphism(\xpos,\ypos)<0,-\deltaY>[\nodeI`0;]\fi
+ \xpos#1 \advance\ypos\deltay
+ \morphism(\xpos,\ypos)|\xh|/{##1}/<0,-\deltay>[\nodeD`\nodeG;\labelh]%
+ \advance \xpos\deltax
+ \morphism(\xpos,\ypos)|\xi|/{##2}/<0,-\deltay>[\nodeE`\nodeH;\labeli]%
+ \advance \xpos\deltax
+ \morphism(\xpos,\ypos)|\xj|/{##3}/<0,-\deltay>[\nodeF`\nodeI;\labelj]}%
+ \next/#4/\ignorespaces}%
+\def\iiixiii{\ifnextchar({\iiixiiip}{\iiixiiip(0,0)}}%
+\def\iiixiiip(#1){\ifnextchar|{\iiixiiipp(#1)}%
+ {\iiixiiipp(#1)|aalmrmmlmrbb|}}%
+\def\iiixiiipp(#1)|#2|{\ifnextchar/{\iiixiiippp(#1)|#2|}%
+ {\iiixiiippp(#1)|#2|/>`>`>`>`>`>`>`>`>`>`>`>/}}%
+\def\iiixiiippp(#1)|#2|/#3/{%
+ \ifnextchar<{\iiixiiipppp(#1)|#2|/#3/}%
+ {\iiixiiipppp(#1)|#2|/#3/<\default,\default>}}%
+\def\iiixiiipppp(#1)|#2|/#3/<#4>{\ifnextchar[{\iiixiiippppp(#1)|#2|/#3/%
+ <#4>0<0,0>}{\iiixiiippppp(#1)|#2|/#3/<#4>}}%
+\def\iiixiiippppp(#1)|#2|/#3/<#4>#5{\ifnextchar<%
+ {\iiixiiipppppp(#1)|#2|/#3/<#4>{#5}}%
+ {\iiixiiipppppp(#1)|#2|/#3/<#4>{#5}<400,400>}}%
+\def\iiixiipppppp(#1,#2)|#3|/#4/<#5>#6<#7>[#8;#9]{%
+ \xpos#1\ypos#2\relax%
+ \def\next|##1##2##3##4##5##6##7|{\def\xa{##1}\def\xb{##2}%
+ \def\xc{##3}\def\xd{##4}\def\xe{##5}\def\xf{##6}\def\xg{##7}}%
+ \next|#3|%
+ \def\next<##1,##2>{\deltax##1\deltay##2}%
+ \next<#5>%
+ \deltaX#7
+ \topw#6
+ \def\next{%
+ \ifodd\topw \def\za{}\else\def\za{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zb{}\else\def\zb{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zc{}\else\def\zc{\relax}\fi \divide\topw by 2
+ \ifodd\topw \def\zd{}\else\def\zd{\relax}\fi}%
+ \next%
+ \def\next[##1`##2`##3`##4`##5`##6]{%
+ \def\nodea{##1}\def\nodeb{##2}\def\nodec{##3}%
+ \def\noded{##4}\def\nodee{##5}\def\nodef{##6}}%
+ \next[#8]%
+ \def\next[##1`##2`##3`##4`##5`##6`##7]{%
+ \def\labela{##1}\def\labelb{##2}\def\labelc{##3}%
+ \def\labeld{##4}\def\labele{##5}\def\labelf{##6}\def\labelg{##7}}%
+ \next[#9]%
+ \def\next/##1`##2`##3`##4`##5`##6`##7/{%
+ {\ifx\zc\empty\advance\xpos -\deltaX
+\relax\morphism(\xpos,\ypos)<\deltaX,0>[0`\noded;]\fi}%
+ \morphism(\xpos,\ypos)|\xf|/##6/<\deltax,0>[\noded`\nodee;\labelf]%
+ \advance\xpos by \deltax%
+ \morphism(\xpos,\ypos)|\xg|/##7/<\deltax,0>[\nodee`\nodef;\labelg]%
+ {\ifx\zd\empty \advance\xpos by \deltax
+\relax \morphism(\xpos,\ypos)<\deltaX,0>[\nodef`0;]\fi}%
+ \advance\xpos by -\deltax \advance\ypos by \deltay
+ {\ifx\za\empty\advance \xpos by -\deltaX
+\relax\morphism(\xpos,\ypos)<\deltaX,0>[0`\nodea;]\fi}%
+ \morphism(\xpos,\ypos)|\xa|/##1/<\deltax,0>[\nodea`\nodeb;\labela]%
+ \morphism(\xpos,\ypos)|\xc|/##3/<0,-\deltay>[\nodea`\noded;\labelc]%
+ \advance\xpos by \deltax%
+ \morphism(\xpos,\ypos)|\xb|/##2/<\deltax,0>[\nodeb`\nodec;\labelb]%
+ \morphism(\xpos,\ypos)|\xd|/##4/<0,-\deltay>[\nodeb`\nodee;\labeld]%
+ \advance\xpos by \deltax%
+ \morphism(\xpos,\ypos)|\xe|/##5/<0,-\deltay>[\nodec`\nodef;\labele]%
+ \ifx\zb\empty\relax \morphism(\xpos,\ypos)<\deltaX,0>[\nodec`0;]\fi}%
+ \next/#4/\ignorespaces}%
+\def\iiixii{\ifnextchar({\iiixiip}{\iiixiip(0,0)}}%
+\def\iiixiip(#1){\ifnextchar|{\iiixiipp(#1)}%
+ {\iiixiipp(#1)|aalmrbb|}}%
+\def\iiixiipp(#1)|#2|{\ifnextchar/{\iiixiippp(#1)|#2|}%
+ {\iiixiippp(#1)|#2|/>`>`>`>`>`>`>/}}%
+\def\iiixiippp(#1)|#2|/#3/{%
+ \ifnextchar<{\iiixiipppp(#1)|#2|/#3/}%
+ {\iiixiipppp(#1)|#2|/#3/<\default,\default>}}%
+\def\iiixiipppp(#1)|#2|/#3/<#4>{\ifnextchar[{\iiixiippppp(#1)|#2|/#3/%
+ <#4>{0}<0>}{\iiixiippppp(#1)|#2|/#3/<#4>}}%
+\def\iiixiippppp(#1)|#2|/#3/<#4>#5{\ifnextchar<%
+ {\iiixiipppppp(#1)|#2|/#3/<#4>{#5}}%
+ {\iiixiipppppp(#1)|#2|/#3/<#4>{#5}<400>}}%
+\def\node#1(#2,#3)[#4]{%
+\expandafter\gdef\csname x@#1\endcsname{#2}%
+\expandafter\gdef\csname y@#1\endcsname{#3}%
+\expandafter\gdef\csname ob@#1\endcsname{#4}%
+\ignorespaces}%
+\newcount\xfinish%
+\newcount\yfinish%
+\def\arrow{\ifnextchar|{\arrowp}{\arrowp|a|}}%
+\def\arrowp|#1|{\ifnextchar/{\arrowpp|#1|}{\arrowpp|#1|/>/}}%
+\def\arrowpp|#1|/#2/[#3`#4;#5]{%
+\xfinish=\csname x@#4\endcsname%
+\yfinish=\csname y@#4\endcsname%
+\advance\xfinish by -\csname x@#3\endcsname%
+\advance\yfinish by -\csname y@#3\endcsname%
+\morphism(\csname x@#3\endcsname,\csname y@#3\endcsname)|#1|/{#2}/%
+<\xfinish,\yfinish>[\csname ob@#3\endcsname`\csname ob@#4\endcsname;#5]%
+}%
+\def\Loop(#1,#2)#3(#4,#5){\POS(#1,#2)*+!!<0ex,\axis>{#3}\ar@(#4,#5)}%
+\def\iloop#1(#2,#3){\xy\Loop(0,0)#1(#2,#3)\endxy}%
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xycmactex.tex b/macros/generic/diagrams/xypic/texinputs/xycmactex.tex
new file mode 100644
index 0000000000..78e5fe6f8a
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xycmactex.tex
@@ -0,0 +1,28 @@
+%% xycmactex.tex from $Id: xycmactex.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``CMacTeX'' driver interface option.
+%% Copyright (c) 1995-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{cmactex}{CMacTeX driver}{\stripRCS$Revision: 3.7 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xyrequire{dvips}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xycmtip.tex b/macros/generic/diagrams/xypic/texinputs/xycmtip.tex
new file mode 100644
index 0000000000..ac0a223d3c
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xycmtip.tex
@@ -0,0 +1,29 @@
+%% xycmtip.tex from $Id: xycmtip.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Computer Modern tips'' extension.
+%% Copyright (c) 1992-1996 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{cmtip}{Computer Modern tip extension}{\stripRCS$Revision: 3.7 $}%
+ {Kristoffer H.~Rose}{krisrose@tug.org}%
+ {IBM T.~ J.\ Watson Research Center, P.O.~Box 704, Yorktown Heights, NY 10598 (USA)}
+\xyrequire{tips}\xycatcodes
+\xydef@\UseComputerModernTips{\SelectTips{cm}{10}\UseTips}
+\xydef@\NoComputerModernTips{\NoTips}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xycolor.tex b/macros/generic/diagrams/xypic/texinputs/xycolor.tex
new file mode 100644
index 0000000000..d4a6574218
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xycolor.tex
@@ -0,0 +1,112 @@
+%% xycolor.tex from $Id: xycolor.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Colour extension'' option.
+%% Copyright (c) 1993-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{color}{Colour extension}{\stripRCS$Revision: 3.11 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xydef@\xycolorwarning@@{\xycolormessage@
+ \gdef\xycolorwarning@{\xycolormessage@
+ \xywarning@{...no further colour warnings will be given.}%
+ \global\let\xycolorwarning@=\relax }}
+\xylet@\xycolorwarning@=\xycolorwarning@@
+\xydef@\xycolormessage@{%
+ \xywarning@{Current driver does not support colour.}}%
+\xydef@\xyNoColor@#1{}
+\xylet@\xycolor@@=\xyNoColor@
+\xydef@\xyNoColor@@#1#2{\xycolorwarning@}
+\xydef@\xycolor@{\xycolor@@}
+\xylet@\xylocalColor@=\xyNoColor@@
+\xydef@\UnloadColor@{%
+ \let\xylocalColor@=\xyNoColor@@
+ \let\xycolor@@=\xyNoColor@
+ \let\xycolorwarning@=\xycolorwarning@@ }
+\xylet@\UnloadColor@@=\UnloadColor@
+\xyaddunsupport{color}{\UnloadColor@@\relax}
+\ifx\current@color\undefined \xydef@\xybasecolor@{}%
+\else \def\xybasecolor@{\current@color}\fi
+\xydef@\xystackcolor@{\bgroup \DN@##1##2{\egroup}%
+ \ifInvisible@\else\ifHidden@\else\DNii@{\no@@}\ifx\nextii@\Connect@@
+ \else\DN@{\xystackcolor@i}\fi\fi\fi \next@ }
+\xydef@\xystackcolor@i#1#2{\checkXyStyle@
+ \DN@{#2}\ifx\next@\empty
+ \def\tmp@##1{\DN@{\xycolor@push{#1}##1\xycolor@pop}}%
+ \else\def\tmp@##1{\DN@{\xycolor@push{#2 #1}##1\xycolor@pop}}\fi
+ \toks@={\egroup \let\xy@style@=\relax \def\Drop@@}%
+ \expandafter\tmp@\expandafter{\Drop@@}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\next@}\def\Connect@@}%
+ \expandafter\tmp@\expandafter{\Connect@@}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\next@}}%
+ \the\toks@ }%
+\xydef@\xycolor@push@@#1{\special{color push #1}}
+\xydef@\xycolor@pop{\special{color pop}}
+\xylet@\xycolor@push=\xycolor@push@@
+\xydef@\newxycolor#1#2{\newxyColor{#1}{}{}{#2}{}}
+\xydef@\newxyColor#1#2#3#4{\newxycolor@{#1}{#2}{#3}{#4}{}}
+\xydef@\newxycolor@#1#2#3#4#5{%
+ \expandafter\let\expandafter\next@\csname shape [#1]\endcsname
+ \ifx\next@\relax
+ \DN@{#4}\ifx\next@\empty
+ \DN@{#2}\ifx\next@\empty
+ \DN@{\newxystyle{#1}{\xylocalColor@{}{#3}\xycolor@{#3}}}%
+ \else
+ \DN@{\newxystyle{#1}{\xylocalColor@{#2}{#3}\xycolor@{#2 #3}}}%
+ \fi
+ \else\DN@{#2#3}\ifx\next@\empty
+ \DN@{\newxystyle{#1}{\xylocalColor@{#4}{}\xycolor@{#4}}}%
+ \else
+ \DN@{\newxystyle{#1}{\xylocalColor@{#2}{#3}\xycolor@{#4}}}%
+ \fi \fi
+ \else \def\tmp@{\relax}\DNii@{#5}%
+ \ifx\nextii@\tmp@
+ \DN@{#4}\ifx\next@\empty
+ \DN@{#2}\ifx\next@\empty
+ \DN@{\newxystyle{#1}{\xylocalColor@{}{#3}\xycolor@{#3}}}%
+ \else
+ \DN@{\newxystyle{#1}{\xylocalColor@{#2}{#3}\xycolor@{#2 #3}}}%
+ \fi
+ \else
+ \DN@{#2#3}\ifx\next@\empty
+ \DN@{\newxystyle{#1}{\xylocalColor@{#4}{}\xycolor@{#4}}}%
+ \else
+ \DN@{\newxystyle{#1}{\xylocalColor@{#2}{#3}\xycolor@{#4}}}%
+ \fi \fi
+ \else\DN@{}\fi\fi \next@\relax}
+\xydef@\xystandardcolors@{%
+ \newxycolor@{black}{0. 0. 0.}{rgb}{}\relax
+ \newxycolor@{white}{1. 1. 1.}{rgb}{}\relax
+ \newxycolor@{gray}{.5}{gray}{}\relax
+ \newxycolor@{grey}{.5}{gray}{}\relax
+ \newxycolor@{red}{1. 0. 0.}{rgb}{}\relax
+ \newxycolor@{green}{0. 1. 0.}{rgb}{}\relax
+ \newxycolor@{blue}{0. 0. 1.}{rgb}{}\relax
+ \newxycolor@{cyan}{0. 1. 1.}{rgb}{}\relax
+ \newxycolor@{magenta}{1. 0. 1.}{rgb}{}\relax
+ \newxycolor@{yellow}{1. 1. 0.}{rgb}{}\relax
+ \xyuncatcodes }
+\xydef@\UseCrayolaColors{\xyrequire{crayon}\xyuncatcodes}%
+\xydef@\xyBEcolorcheck@{\ifx\xycolor@@\xyNoColor@\else
+ \xywarning@{PostScript colour support should be OK.}\fi }%
+\xywithoption{ps}{%
+ \xyinputorelse@{xyps-c}{\xyerror@{Could not load xyps-c}{}}}%
+ \xycatcodes
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xycrayon.tex b/macros/generic/diagrams/xypic/texinputs/xycrayon.tex
new file mode 100644
index 0000000000..8eae152ab8
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xycrayon.tex
@@ -0,0 +1,32 @@
+%% xycrayon.tex from $Id: xycrayon.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Crayola colours'' PostScript backend support.
+%% Copyright (c) 1995-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{crayon}{Crayola Colours}{\stripRCS$Revision: 3.7 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xydef@\installCrayolaColors@{%
+ \xyinputorelse@{xyps-col}{\xyerror@{Could not load Crayola colours}{}}%
+ \let\installCrayolaColors@=\relax
+ \xyuncatcodes }
+\xyendinput
+#
diff --git a/macros/generic/diagrams/xypic/texinputs/xycurve.tex b/macros/generic/diagrams/xypic/texinputs/xycurve.tex
new file mode 100644
index 0000000000..f5692fe257
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xycurve.tex
@@ -0,0 +1,2702 @@
+%% xycurve.tex from $Id: xycurve.doc,v 3.12 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Curves and Splines'' extension.
+%% Copyright (c) 1993-1997 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{curve}{Curve and Spline extension}{\stripRCS$Revision: 3.12 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\message{curve,}
+\xynew@{count}\crv@cnt@
+\xydef@\xynumctrlpts@{\the\crv@cnt@}
+\xynew@{toks}\crvpts@
+\xydef@\setcurve@{%
+ \edef\xysplineparams@{%
+ \expandafter\noexpand\csname params@\endcsname}%
+ \edef\xysplineedges@{%
+ \expandafter\noexpand\csname edges@\endcsname}%
+ \edef\xycrvcnt@{%
+ \expandafter\noexpand\csname crvcnt@\endcsname}%
+ \expandafter\edef\xycrvcnt@{\number\crv@cnt@}%
+ \ifcase\crv@cnt@
+ \expandafter\xycvxhull@\or
+ \expandafter\xyquadbezier@\or
+ \expandafter\xycubicbezier@\or
+ \expandafter\xybspline@iii\or
+ \expandafter\xybspline@iv\else
+ \expandafter\xybspline@
+ \fi}
+\xydef@\curve{\connect\crv}
+\xydef@\crv#1#{\hbox \bgroup \crvresetbreaks@ \initshape@
+ \def\pure@crv{\crv@saveStyles@}\crv@{#1}}
+\xydef@\crv@#1#2{%
+ \DN@{#1}\ifx\empty\next@
+ \DN@{\def\afterCURVEaction@{}\parsecurve@\xycurve@@}%
+ \else\DN@{\parseCURVE@#1\parsecurve@\curveSTYLE@}\fi
+ \next@ #2\@endcurve\endcrv@ }
+\xydef@\curveSTYLE@{\xycurve@@}%
+\xydef@\afterCURVEaction@{}%
+\xydef@\@endcurve{}%
+\xydef@\endcrv@@{\endcrv@\POS}%
+\xydef@\pure@crv{\relax}
+\xywarnifdefined\crv@normaltemplate
+\xywarnifdefined\crv@othertemplate
+\xywarnifdefined\crv@specialtemplate@@
+{\xyuncatcodes \catcode`\@=11 \catcode`\#=6
+ \gdef\crv@normaltemplate#1{{}{~**#1\xy@@crvaddstack@}}
+ \gdef\crv@othertemplate#1{{}{~*=<2\jot>{}~**#1\xy@@crvaddstack@}}
+ \gdef\crv@specialtemplate@@#1{{}{~**\dir{#1}\xy@@crvaddstack@}}
+}
+\xydef@\crvs#1#{\hbox \bgroup \def\pure@crv{\relax}\crvs@{#1}}%
+\xydef@\crvi#1#{\hbox \bgroup \def\pure@crv{\relax}\invisbreaks@ \crvs@{#1}}%
+\xydef@\crvs@#1{\DN@{\initshape@ \@crv@{#1}}%
+ \def\crv@defaultshape{-}%
+ \ifx\bstartPLACE@\relax \else
+ \ifx\bstartPLACE@\empty \Invisible@true \else
+\splinetrace@{bstartPLACE@=\bstartPLACE@, bendPLACE@=\bendPLACE@}%
+ \DN@{\let\xy@@crvaddstack@=\xy@@samecurve@
+ \let\saveshape@=\savesame@
+ \let\savectrlptsnum@=\relax
+ \let\startxycurve@=\recovercurve@
+ \crv@cnt@=\xycrvptsnum@\relax \@crv@{#1}}%
+ \fi \fi \next@ }
+\xydef@\xy@@samecurve@{\xyFN@\checkendcurve@}
+\xydef@\savesame@{\egroup }
+\xydef@\recovercurve@{%
+ \crv@cnt@=\xycrvptsnum@ \splinereset@ \recovercv@end
+ \ifx\bendPLACE@\relax \def\bendPLACE@{1}\fi
+ \ifdim\zz@\R@c \ifdim\zz@\L@c \ifdim\zz@\D@c \ifdim\zz@\U@c
+ \Edge@c={\zeroEdge}\fi\fi\fi\fi
+ \edef\cv@end{\cfromthec@}\edef\cv@start{\cfromthep@}}
+\xydef@\recovercv@end{\count@=\ptsnum@\relax\advance\count@\@ne
+ \edef\tmp@{\the\count@}\csname cv@\tmp@\endcsname}%
+\xydef@\crvSTYLE@@{}
+\expandafter\xydef@\expandafter\crv@defaultshape\expandafter{\addDASH@{}}
+\xydef@\crv@noobject{\Invisible@true}
+\xydef@\@crv@#1#2{\DN@{#1#2}%
+ \ifx\next@\empty \edef\next@{\crv@defaultshape}%
+ \ifx\bstartPLACE@\empty \xdef\crvSTYLE@@{{\crv@defaultshape}}\fi
+ \else
+ \ifx\bstartPLACE@\empty \gdef\crvSTYLE@@{#1{#2}}\fi
+ \fi
+ \ifx\next@\empty \crv@noobject \DN@{\crv@{}{\xy@@crvaddstack@}}%
+ \else\def\tmp@{-}\ifx\next@\tmp@ \DN@{\crv@{}{\xy@@crvaddstack@}}%
+ \else\def\tmp@{=}\ifx\next@\tmp@
+ \DN@{\expandafter\crv@\crv@normaltemplate{\dir{=}}}%
+ \else\def\tmp@{2-}\ifx\next@\tmp@
+ \DN@{\expandafter\crv@\crv@normaltemplate{\dir{2.}}}%
+ \else\def\tmp@{3-}\ifx\next@\tmp@
+ \DN@{\expandafter\crv@\crv@normaltemplate{\dir{3.}}}%
+ \else\def\tmp@{--}\ifx\next@\tmp@
+ \DN@{\expandafter\crv@\crv@specialtemplate@{--}}%
+ \else\def\tmp@{==}\ifx\next@\tmp@
+ \DN@{\expandafter\crv@\crv@normaltemplate{\dir2{--}}}%
+ \else\def\tmp@{2--}\ifx\next@\tmp@
+ \DN@{\expandafter\crv@\crv@normaltemplate{\dir2{--}}}%
+ \else\def\tmp@{3--}\ifx\next@\tmp@
+ \DN@{\expandafter\crv@\crv@normaltemplate{\dir3{--}}}%
+ \else\def\tmp@{.}\ifx\next@\tmp@
+ \DN@{\expandafter\crv@\crv@specialtemplate@{.}}%
+ \else\def\tmp@{:}\ifx\next@\tmp@
+ \DN@{\expandafter\crv@\crv@normaltemplate{\dir{:}}}%
+ \else\def\tmp@{2.}\ifx\next@\tmp@
+ \DN@{\expandafter\crv@\crv@normaltemplate{\dir{:}}}%
+ \else\def\tmp@{..}\ifx\next@\tmp@
+ \DN@{\expandafter\crv@\crv@specialtemplate@{.}}%
+ \else
+ \DN@{\expandafter\crv@\crv@othertemplate{\dir#1{#2}}}%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@}
+\xylet@\crv@specialtemplate@=\crv@specialtemplate@@
+\xydef@\crv@special#1{}
+\xydef@\parseCURVE@{\def\curveSTYLE@{\xycurve@@}\def\afterCURVEaction@{}%
+ \xyFN@\parseCURVE@@}
+\xydef@\parseCURVE@@{%
+ \ifx\space@\next\expandafter\DN@\space{\xyFN@\parseCURVE@@}%
+ \else\ifx ~\next \DN@ ~{\xy@~{}\xyFN@\setcurveSTYLE@@}%
+ \else\ifx\parsecurve@\next\DN@{}%
+ \else\ifcat\active\noexpand\next\DN@{\xyactive@Warning}%
+ \else\ifcat a\noexpand\next\DN@##1{\xytilde@Warning\setcurveSTYLE@{##1}%
+ \xyFN@\parseCURVE@@}%
+ \else\DN@{}\fi\fi\fi\fi\fi \next@ }%
+\xydef@\xyactive@Warning{\xywarning@{expandable control sequences should
+ not be here, results are unpredictable in diagrams.}}%
+\xydef@\xytilde@Warning{Please use ~ to set curve style.}%
+\xydef@\setcurveSTYLE@#1{\xyFN@\setcurveSTYLE@@#1}
+\xydef@\setcurveSTYLE@@{%
+ \ifx\next p\def\curveSTYLE@{\xyc@trlpts@@}%
+ \DN@ p{\xyFN@\setafterCURVEaction@}%
+ \else\ifx\next P\def\curveSTYLE@{\xyc@trlpts@}%
+ \DN@ P{\xyFN@\setafterCURVEaction@}%
+ \else\ifx\next l\def\curveSTYLE@{\xyc@vxhull@@}%
+ \DN@ l{\xyFN@\setafterCURVEaction@}%
+ \else\ifx\next L\def\curveSTYLE@{\xyc@vxhull@}%
+ \DN@ L{\xyFN@\setafterCURVEaction@}%
+ \else\ifx\next c\def\curveSTYLE@{\xycurve@@}%
+ \DN@ c{\xyFN@\setafterCURVEaction@}%
+ \else\ifx\next C\def\curveSTYLE@{\xycurve@@}%
+ \DN@ C{\xyFN@\setafterCURVEaction@}%
+ \else \DN@##1{\xywarning@{unknown curve style ##1}\xyFN@\parseCURVE@@}%
+ \fi\fi\fi\fi\fi\fi \next@ }
+\xydef@\setafterCURVEaction@{%
+ \ifx\next~\DN@~{\xyFN@\setcurveSTYLE@@}%
+ \else\ifcat a\noexpand\next\DN@{\setafterCURVEaction@@}%
+ \else\DN@{\xyFN@\parseCURVE@@}%
+ \fi\fi \next@}
+\xydef@\setafterCURVEaction@@{%
+ \ifx\next c\DN@ c{%
+ \def\afterCURVEaction@{\noexpand\endcurve\noexpand\xy@curve@}%
+ \xyFN@\parseCURVE@@ }%
+ \else\ifx\next C\DN@ C{%
+ \def\afterCURVEaction@{\noexpand\endcurve\noexpand\xy@curve@@}%
+ \xyFN@\parseCURVE@@ }%
+ \else \DN@##1{\xywarning@{unknown after-curve action ##1}%
+ \xyFN@\parseCURVE@@ }%
+ \fi\fi \next@ }
+\xydef@\parsecurve@{\xyFN@\parsecurve@@}
+\xydef@\parsecurve@@{%
+ \ifx\space@\next\expandafter\DN@\space{\xyFN@\parsecurve@@}%
+ \else\ifx\next\@endcurve\DN@\@endcurve{\checkafterCURVE@}%
+ \else\ifcat\active\noexpand\next\DN@{\relax}%
+ \else\DN@{\xycurve@@}\fi\fi\fi\next@}%
+\xydef@\xycurve@{\begingroup\afterCURVE{\setcurve@\endgroup}\crvobjects@
+ \startxycurve@\xycrvmods@}
+\xydef@\xycurve@@{\afterCURVE{\setcurve@}\crvobjects@\startxycurve@
+ \xycrvmods@}
+\xydef@\xy@curve@{\xy@curve@@@{\splinedefaulttol@\crvobjects@}}
+\xydef@\xy@curve@@{\xy@curve@@@{\resetcrvobjects@}}
+\xydef@\xy@curve@@@#1{\ifx\cv@start\relax
+ \DN@{\xywarning@{There is no curve to plot}}.
+ \else\DN@{\begingroup\afterCURVE{\setcurve@\endgroup}#1\cv@end}%
+ \fi \next@ }
+\xydef@\crvobjects@{\def\xycrvdrop@{}\def\xycrvconn@{}}
+\xydef@\resetcrvobjects@{\crvobjects@}
+\xylet@\savecurve=\xycurve@@
+\xylet@\samecurve=\xy@curve@
+\xydef@\xycrvmods@{\xyFN@\xy@crvmods@}%
+\xydef@\xy@crvmods@{%
+ \ifx\space@\next\expandafter\DN@\space{\xyFN@\xy@crvmods@}%
+ \else\ifx\next ~\DN@ ~{\xyFN@\xy@crvmods@@}%
+ \else\DN@{\xy@crvmods@@@@}\fi\fi \next@}%
+\xydef@\xy@crvmods@@@@{\xyFN@\checkendcurve@}%
+\xydef@\xy@crvmods@@{%
+ \ifx\space@\next\expandafter\DN@\space{\xyFN@\xy@crvmods@@}%
+ \else\ifx\next *\DN@ *{\xyFN@\xy@@crvmods@}%
+ \else\addAT@\ifx\next\addAT@\DN@{\xyFN@\xy@@crvaddstack}%
+ \else\DN@{\xywarning@{badly-formed curve option}\xyFN@\xy@crvmods@}%
+ \fi\fi\fi \next@}%
+\xydef@\xy@@crvmods@{%
+ \ifx\space@\next\expandafter\DN@\space{\xyFN@\xy@@crvmods@}%
+ \else\ifx\next *\DN@ *{\xyFN@\xy@@crvmods@@}%
+ \else\DN@{\xy@crv@mods@@}\fi\fi \next@}%
+\xydef@\xy@crv@mods@@#1#{\DN@##1{\xy@crvmods@@@{#1}{##1}}\next@}%
+\xydef@\xy@crvmods@@@#1#2{%
+ \DN@{#1#2}\ifx\next@\empty \def\xycrvdrop@{ #1{\zerodot}}%
+ \else \def\xycrvdrop@{ #1{#2}}\fi
+ \xyFN@\xy@crvmods@ }%
+\xydef@\xy@@crvmods@@#1#{\DN@##1{\xy@@crvmods@@@{#1}{##1}}\next@}%
+\xydef@\xy@@crvmods@@@#1#2{\def\xycrvconn@{ #1{#2}}\xyFN@\xy@crvmods@ }%
+\xydef@\checkendcurve@{%
+ \ifx\space@\next\expandafter\DN@\space{\xyFN@\checkendcurve@}%
+ \else\ifx\next\endcurve\DN@\endcurve{\clearsearchflag@\endxycurve@}%
+ \else\ifx\next\@endcurve\DN@\@endcurve{\checkafterCURVE@}%
+ \else\ifx\next\xy@@crvaddstack@\DN@{}%
+ \else\ifx\next\endxy\DN@{\clearsearchflag@\sloppyendcrv@}%
+ \else\testAND@\iffalse \DN@##1{\clearsearchflag@\searchnextpt@}%
+ \else\ifx ~\next\DN@ ~{\xyFN@\checkcrvtilde@}%
+ \else\ifx\next\relax\DN@\relax{\clearsearchflag@\searchnextpt@}%
+ \else\ifx\next\\\DN@\\{\clearsearchflag@\searchnextpt@}%
+ \else\ifx\searchflag@\relax
+ \DN@{\setsearchflag@\searchnextpt@}%
+ \else\DN@##1{\flagwarn@{##1}}\fi
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi \next@ }
+\xydef@\searchnextpt@{\afterPOS{\xy@@\addtocrv@ \xyFN@\checkendcurve@}}
+\xydef@\checkafterCURVE@{%
+ \edef\tmp@{\noexpand\xyFN@\noexpand\checkendcurve@
+ \afterCURVEaction@\noexpand\endcurve}\tmp@ }
+\xylet@\searchflag@=\relax
+\xydef@\setsearchflag@{\let\searchflag@=@}
+\xydef@\clearsearchflag@{\let\searchflag@=\relax}
+\xydef@\flagwarn@#1{%
+ \ifx\next\@endcurve\DN@{\xyFN@\checkendcurve@\endcurve}%
+ \else\setsearchflag@\DN@{\xyFN@\checkendcurve@}%
+ \xywarning@{skipping invalid token \string#1\space in curve}%
+ \fi \next@ }
+\xydef@\sloppyendcrv@{%
+\xywarning@{Please use \string\endcurve\space to end the curve.}\endxycurve@}
+\xydef@\endcrv@{\saveshape@
+ \Edge@c={\splineEdge}\Invisible@false\Hidden@false
+ \edef\Drop@@{\noexpand\ifInvisible@ \setbox\z@=\copy\voidb@x
+ \noexpand\else
+ \noexpand\wdz@=\z@
+ \noexpand\ht\z@=\z@ \noexpand\dp\z@=\z@
+ \noexpand\splineDrop@
+ \noexpand\fi }%
+ \edef\Connect@@{%
+ \noexpand\setbox\z@=\noexpand\box\lastobjectbox@
+ \noexpand\wdz@=\z@
+ \noexpand\ht\z@=\z@ \noexpand\dp\z@=\z@
+ \expandafter\noexpand\pure@crv
+ \noexpand\ifInvisible@ \noexpand\crv@saveStyles@ \noexpand\else
+ \noexpand\crv@getStyles@\noexpand\styledboxz@ \noexpand\fi
+ \noexpand\ifHidden@\noexpand\else
+ \noexpand\ifx\noexpand\COORD@\noexpand\xymatrixCOORD@ \noexpand\else
+ \noexpand\X@min=\the\X@min \noexpand\X@max=\the\X@max
+ \noexpand\Y@min=\the\Y@min \noexpand\Y@max=\the\Y@max
+ \noexpand\fi \noexpand\fi
+ \savecrvparams@ \noexpand\crvconnect@
+ }%
+ \wdz@=\z@
+ \ht\z@=\z@ \dp\z@=\z@ }
+\xydef@\crvXY@pre@{}
+\xydef@\crvXY@post@{}
+\xydef@\crv@saveStyles@{\def\xy@style@{}%
+ \expandafter\def\expandafter\crvXY@pre@\expandafter{\preXY@style@}%
+ \expandafter\def\expandafter\crvXY@post@\expandafter{\postXY@style@}}
+\xydef@\crv@getStyles@{\def\xy@style@{}%
+ \gdef\preXY@style@{\crvXY@pre@}\gdef\postXY@style@{\crvXY@post@}}
+\xydef@\initshape@{\savescope@
+ \ifdim\X@c>\X@p \X@min=\X@p \X@max=\X@c \else \X@max=\X@p \X@min=\X@c \fi
+ \ifdim\Y@c>\Y@p \Y@min=\Y@p \Y@max=\Y@c \else \Y@max=\Y@p \Y@min=\Y@c \fi }
+\xydef@\saveshape@{\savectrlptsnum@
+ \R@c=\X@max \advance\R@c-\X@c \L@c=\X@c \advance\L@c-\X@min
+ \U@c=\Y@max \advance\U@c-\Y@c \D@c=\Y@c \advance\D@c-\Y@min
+ \edef\tmp@{\egroup \U@c=\the\U@c \D@c=\the\D@c \L@c=\the\L@c \R@c=\the\R@c
+ \noexpand\ifdim\noexpand\X@min>\the\X@min\noexpand\X@min=\the\X@min\noexpand\fi
+ \noexpand\ifdim\noexpand\Y@min>\the\Y@min\noexpand\Y@min=\the\Y@min\noexpand\fi
+ \noexpand\ifdim\noexpand\X@max<\the\X@max\noexpand\X@max=\the\X@max\noexpand\fi
+ \noexpand\ifdim\noexpand\Y@max<\the\Y@max\noexpand\Y@max=\the\Y@max\noexpand\fi
+ \savecrvparams@ \def\noexpand\pure@crv{\expandafter\noexpand\pure@crv}}%
+ \tmp@ }
+\xydef@\savecrvparams@{\crvpts@={\the\crvpts@}%
+ \noexpand\def\noexpand\crvconnect@{\expandafter\noexpand\crvconnect@}}%
+\xydef@\splineEdge{\rectangleEdge}
+\xydef@\xy@@crvaddstack{%
+ \ifx\next ~\xywarning@{there should be a poslist here, \string~@ ignored}%
+ \DN@{\xy@crvmods@}%
+ \else\DN@{\xy@@crvaddstack@}\fi \next@}
+\xydef@\xy@@crvaddstack@{\smapxy@@\addtocrv@ \xyFN@\checkendcurve@}
+\xydef@\checkcrvtilde@{%
+ \addAT@\ifx\next\addAT@\DN@{\xy@@crvaddstack@}%
+ \else\xywarning@{invalid token after ~, ignored}%
+ \DN@##1{\xyFN@\checkendcurve@}%
+ \fi \next@ }
+\xydef@\crvconnect@@{%
+ \def\Creset@@{\crvreset@}%
+ \def\Cshavep@@{\crvshavep@}%
+ \def\Cshavec@@{\crvshavec@}%
+ \def\Cslidep@@{\crvslidep@}%
+ \def\Cslidec@@{\crvslidec@}%
+ \def\Calong@@{\crvalong@}%
+ \def\Cintercept@@{\crvintercept@}%
+ \def\Cbreak@@{\crvbreak@}%
+ \def\Clast@@{\crvlast@}%
+}
+\xydef@\straitconnect@{\crvconnect@@
+ \let\crvreset@=\straitreset@
+ \let\crvshavep@=\straitshavep@
+ \let\crvshavec@=\straitshavec@
+ \let\crvslidep@=\straitslidep@
+ \let\crvslidec@=\straitslidec@
+ \let\crvalong@=\straitalong@
+ \let\crvintercept@=\straitintercept@
+ \let\crvbreak@=\straitbreak@
+ \let\crvlast@=\straitlast@
+}
+\xydef@\straitreset@{\the\crvpts@
+ \edef\xycrvptsnum@{\csname ptsnum@\endcsname}%
+ \def\segmentnum@{0}}
+\xydef@\straitslidep@{\setupDirection@ii \noCslidep@@ }
+\xydef@\straitslidec@{\setupDirection@ii \noCslidec@@ }
+\xydef@\straitshavep@{%
+ \expandafter\ifnum\xycrvptsnum@>\z@
+ \def\segmentnum@{0}%
+ \csname cv@1\endcsname
+ \resetDirection@ \setupDirection@ii
+ \fi \noCshavep@@ }
+\xydef@\straitshavec@{%
+ \expandafter\ifnum\xycrvptsnum@>\z@
+ \expandafter\count@@\xycrvptsnum@\relax
+ \bgroup \csname cv@\number\count@@\endcsname
+ \edef\tmp@{\egroup \X@p=\the\X@c \Y@p=\the\Y@c}\tmp@
+ \edef\segmentnum@{\xycrvptsnum@}%
+ \resetDirection@ \setupDirection@ii
+ \fi \noCshavec@@ }
+\xydef@\straitalong@#1{%
+ \ifdim#1\p@<\z@
+ \xywarning@{parameter value #1 is negative, using 0}%
+ \cfromp@ \def\PLACEf@{{0}}%
+ \else
+ \dimen@=#1\p@ \count@=\dimen@ \divide\count@\p@
+ \expandafter\count@@\xycrvptsnum@\relax \advance\count@@\@ne
+ \advance\dimen@\segmentnum@\p@
+ \advance\count@\segmentnum@\relax
+ \def\segmentnum@{0}%
+ \ifnum\count@@<\count@
+ \xywarning@{parameter value #1 too large, using \the\count@@}%
+ \count@=\count@@ \advance\count@\m@ne \edef\PLACEf@{{1}}%
+ \else
+ \advance\dimen@-\count@\p@
+ \ifdim\zz@\dimen@\ifnum\count@>\z@
+ \advance\count@\m@ne \advance\dimen@\p@ \fi\fi
+ \edef\PLACEf@{{\expandafter\removePT@\the\dimen@}}%
+ \fi
+ \ifnum\count@=\z@\else \bgroup
+ \csname cv@\number\count@\endcsname
+ \edef\tmp@{\egroup \X@p=\the\X@c \Y@p=\the\Y@c}\tmp@
+ \fi
+ \advance\count@\@ne
+ \ifnum\count@<\count@@
+\splinetrace@{find place \the\dimen@\space along straight segment
+ \the\count@}%
+ \csname cv@\number\count@\endcsname
+ \fi
+ \d@X=\X@c \advance\d@X-\X@p \d@Y=\Y@c \advance\d@Y-\Y@p
+ \fi \expandafter\noCalong@@\PLACEf@ \czeroEdge@ }
+\xydef@\straitintercept@{\noCintercept@@}
+\xydef@\straitbreak@{\straightCbreak@@}
+\xydef@\straitlast@{\straightClast@@}
+\xydef@\splineconnect@{%
+ \let\crvreset@=\splinereset@
+ \let\crvshavep@=\splineshavep@
+ \let\crvshavec@=\splineshavec@
+ \let\crvslidep@=\splineslidep@
+ \let\crvslidec@=\splineslidec@
+ \let\crvalong@=\splinealong@
+ \let\crvintercept@=\splineintercept@
+ \let\crvbreak@=\splinebreak@
+ \let\crvlast@=\splinelast@
+}
+\xydef@\splinereset@{\the\crvpts@
+ \edef\xycrvptsnum@{\csname ptsnum@\endcsname}%
+ \edef\xysplineparams@{%
+ \expandafter\noexpand\csname params@\endcsname}%
+ \edef\xysplineedges@{%
+ \expandafter\noexpand\csname edges@\endcsname}%
+ \def\segmentnum@{1}\def\splinecorrect@p{0}\def\splinecorrect@c{0}%
+ \splinelength@=\z@ \def\splineplace@f{.5}%
+}
+\xydef@\splineshavep@{\begingroup
+ \edef\xysplineedges@{%
+ \expandafter\noexpand\csname edges@\endcsname}%
+ \expandafter\expandafter\expandafter\getsplineedges@safe\xysplineedges@ @@%
+ \edef\tmp@{\noexpand\removePT@\the\dimen5}%
+ \edef\tmp@{\endgroup
+ \noexpand\def\noexpand\splinecorrect@p{\tmp@}}\tmp@
+ \setupDirection@ii }
+\xydef@\splineshavec@{\begingroup
+ \edef\xysplineedges@{%
+ \expandafter\noexpand\csname edges@\endcsname}%
+ \expandafter\expandafter\expandafter\getsplineedges@safe\xysplineedges@ @@%
+ \dimen@=-\dimen7\relax \advance\dimen@\p@
+%% \getcrvsegsnum@ \advance\dimen@\count@\p@
+ \edef\tmp@{\noexpand\removePT@\the\dimen@}%
+ \edef\tmp@{\endgroup
+ \noexpand\def\noexpand\splinecorrect@c{\tmp@}}\tmp@
+ \setupDirection@ii }
+\xydef@\splineslidep@#1{\enter@{\pfromthep@}%
+ \begingroup \splinealong@@{0}{#1}+\splineslidep@@@
+ \setupDirection@ii \leave@ }%
+\xydef@\splineslidep@@@{%
+ \d@X=\dimen5 \d@Y=\dimen7 \edef\tmp@{\postfind@}\tmp@ \dimen@=\splineval@
+ \expandafter\count@\xycrvptsnum@\relax
+ \ifnum\count@>\tw@ \advance\count@\m@ne
+ \advance\dimen@\segmentnum@\p@ \advance\dimen@-\p@
+ \fi
+ \edef\tmp@{\endgroup \endgroup
+ \noexpand\def\noexpand\xysplineval@{\the\splineval@}%
+ \noexpand\def\noexpand\splinecorrect@p{\expandafter\removePT@\the\dimen@}%
+\splinetrace@{slide = \the\splinelength@}%
+ \X@c=\dimen@i \Y@c=\dimen3
+ \d@X=\the\d@X \d@Y=\the\d@Y
+ \noexpand\def\noexpand\segmentnum@{\segmentnum@}}\tmp@ }
+\xydef@\splineslidec@#1{\enter@{\pfromthep@}%
+ \begingroup
+ \expandafter\splinealong@@\PLACEf@{#1}+\splineslidec@@@
+ \setupDirection@ii \leave@ }
+\xydef@\splineslidec@@@{%
+ \d@X=\dimen5 \d@Y=\dimen7 \edef\tmp@{\postfind@}\tmp@ \dimen@=\splineval@
+ \expandafter\count@\xycrvptsnum@\relax
+ \ifnum\count@>\tw@ \advance\count@\m@ne
+ \advance\dimen@\segmentnum@\p@ \advance\dimen@-\p@
+ \dimen@=-\dimen@ \advance\dimen@\count@\p@
+ \else \dimen@=-\dimen@ \advance\dimen@\p@ \fi
+%% splinecorrect@c is probably wrong here!!
+ \edef\tmp@{\endgroup \endgroup
+ \noexpand\def\noexpand\xysplineval@{\the\splineval@}%
+ \noexpand\def\noexpand\splinecorrect@c{\expandafter\removePT@\the\dimen@}%
+\splinetrace@{slide = \the\splinelength@; correct@c=\noexpand\splinecorrect@c}%
+ \X@c=\dimen@i \Y@c=\dimen3
+ \d@X=\the\d@X \d@Y=\the\d@Y
+ \noexpand\def\noexpand\segmentnum@{\segmentnum@}}\tmp@ }
+\xydef@\checkslidemore@#1{%
+ \dimen@ii=-#1\relax\ifdim\dimen@ii<\z@\multiply\dimen@ii\m@ne\fi
+ \dimen@=-\splinelength@ \advance\dimen@\dimen@ii\relax
+ \ifdim\dimen@<\z@\dimen@ii=-\dimen@\else\dimen@ii=\dimen@\fi
+ \ifdim\dimen@ii<.2\p@\DN@{\splineslidec@@ \leave@}%
+ \else \splinetrace@{not found yet, \the\dimen@ii\space still to go}%
+ \dimen@ii=#1\relax\ifdim\dimen@ii<\z@\multiply\dimen@\m@ne\fi
+ \DN@{\expandafter\splineslidemore@\expandafter{\the\dimen@}}\fi
+ \next@}%
+\xydef@\splineslidemore@#1{%
+ \expandafter\count@\segmentnum@\relax
+ \ifdim#1<\z@\advance\count@\m@ne\dimen@=\p@
+ \else\advance\count@\@ne\dimen@=\z@\fi
+ \ifnum\count@<\@ne
+ \expandafter\splinesegment@\expandafter{\segmentnum@}%
+ \DN@{\xywarning@{cannot slide beyond start of curve}%
+ \spline@find{\z@}{\z@}{}\splineslidec@@ \leave@ }%
+ \else \expandafter\count@@\xycrvptsnum@\relax\advance\count@@\m@ne
+ \expandafter\ifnum\count@@<\count@\relax
+ \expandafter\splinesegment@\expandafter{\segmentnum@}%
+ \DN@{\xywarning@{cannot slide beyond end of curve}%
+ \spline@find{\p@}{\z@}{}\splineslidec@@ \leave@ }%
+ \else
+ \edef\segmentnum@{\the\count@}%
+ \expandafter\splinesegment@\expandafter{\segmentnum@}%
+\splinetrace@{sliding onto segment \segmentnum@}%
+ \expandafter\spline@find\expandafter{\the\dimen@}{#1}{}%
+ \DN@{\checkslidemore@{#1}}%
+ \fi\fi \next@ }
+\xydef@\splineslidec@@{%
+ \dimen@=\splineval@ \advance\dimen@\segmentnum@\p@\advance\dimen@-\p@
+ \edef\tmp@{\endgroup
+ \noexpand\def\noexpand\xysplineval@{\the\dimen@}%
+\splinetrace@{slide = \the\splinelength@}%
+ \X@c=\the\dimen@i \Y@c=\the\dimen3 \d@X=\the\dimen5 \d@Y=\the\dimen7 \postfind@
+ \noexpand\def\noexpand\segmentnum@{\segmentnum@}}\tmp@
+ \setupDirection@ii}
+\xydef@\splinealong@#1{\def\postfind@{}\splinealong@@{#1}\z@+%
+ \splineslidec@@
+ \dimen@=\xysplineval@\relax
+ \count@=\xycrvptsnum@\relax \ifnum\count@>\@ne \advance\count@\m@ne\fi
+ \ifnum\count@>\@ne \dimen@nth\count@\dimen@
+ \fi \edef\bthisPLACE@{\expandafter\removePT@\the\dimen@}%
+\splinetrace@{bthisPLACE@=\bthisPLACE@}}%
+\xydef@\splinealong@@#1#2#3{%
+ \edef\tmp@{#1}\relax \dimen@ii\tmp@\p@
+%% \getcrvsegsnum@
+%% \dimen@=-\count@\p@
+ \dimen@=-\p@
+ \expandafter\advance\expandafter\dimen@\splinecorrect@p\p@
+ \expandafter\advance\expandafter\dimen@\splinecorrect@c\p@
+ \edef\tmp@{#1}\relax \dimen@=-\tmp@\dimen@ \relax
+ \expandafter\advance\expandafter\dimen@\splinecorrect@p\p@
+ \getcrvsegsnum@ \multiply \dimen@ by\count@\relax
+\splinetrace@{actual:\the\dimen@; f:\the\dimen@ii; p:\splinecorrect@p, c:\splinecorrect@c}%
+ \count@=\dimen@ \divide\count@\p@ \DN@{\relax}%
+ \def\tmp@{\relax}\ifx\next@\tmp@
+ \expandafter\ifnum\xycrvptsnum@<\count@
+ \xywarning@{parameter value #1 too large}%
+ \DNii@{\relax}\DN@{\begingroup}%
+ \else
+ \edef\xysplineval@{\the\dimen@}%
+ \advance\dimen@-\count@\p@
+ \ifdim\dimen@=\z@
+\splinetrace@{find knot point \the\count@}%
+ \ifnum\count@=\z@ \count@=\@ne \else \dimen@=\p@ \fi
+ \else \advance\count@\@ne
+\splinetrace@{find point \the\dimen@\space on spline segment \the\count@}%
+ \fi
+ \edef\segmentnum@{\the\count@}%
+ \edef\next@{\begingroup\noexpand\splinesegment@{\the\count@}}%
+ \edef\nextii@{%
+ \noexpand\spline@find{\the\dimen@}{#2}{}\noexpand\checksplinefind@{#2}}%
+ \ifx>#3\relax
+ \edef\nextii@{%
+ \noexpand\spline@find{\the\dimen@}{#2}#3\noexpand\checksplinefind@{#2}}%
+ \else\ifx-#3\relax \ifdim\dimen@>\z@\relax \ifdim\dimen@<\p@
+ \dimen@=-\dimen@ \advance\dimen@\p@
+ \edef\nextii@{\noexpand\splinereverse@
+ \noexpand\spline@find{\the\dimen@}{#2}{}\noexpand\checksplinefind@{#2}}%
+ \fi\fi
+ \else\ifx<#3\relax \ifdim\dimen@>\z@\relax \ifdim\dimen@<\p@
+ \dimen@=-\dimen@ \advance\dimen@\p@
+ \edef\nextii@{\noexpand\splinereverse@
+ \noexpand\spline@find{\the\dimen@}{#2}#3\noexpand\checksplinefind@{#2}}%
+ \fi\fi
+ \fi\fi\fi
+ \fi\fi \expandafter\next@\nextii@ }
+\xydef@\checksplinefind@#1{%
+ \dimen@ii=#1\relax \dimen@=\splinelength@
+ \ifdim\dimen@ii=\z@\DN@{}%
+ \else
+ \ifdim\dimen@ii<\z@\advance\dimen@\dimen@ii
+ \else\advance\dimen@-\dimen@ii\fi
+ \ifdim\dimen@<\z@\multiply\dimen@\m@ne\fi
+ \ifdim\dimen@<.2\p@\DN@{}%
+ \else
+ \count@=\segmentnum@\relax
+ \ifdim\dimen@ii<\z@\advance\dimen@ii\splinelength@
+ \ifnum\count@>\@ne\advance\count@\m@ne
+ \edef\next@{\noexpand\splinesegment@{\the\count@}%
+ \noexpand\spline@find\p@{\the\dimen@ii}{}%
+ \noexpand\checksplinefind@{\the\dimen@ii}}%
+ \else
+ \xywarning@{cannot slide \the\dimen@ii\space before start}%
+ \DN@{\splinesegment@\@ne \spline@find\z@\z@{}}\fi
+ \else\advance\dimen@ii-\splinelength@
+ \count@@=\numcontrolpts
+ \ifnum\count@<\count@@ \advance\count@\@ne
+ \edef\next@{\noexpand\splinesegment@{\the\count@}%
+ \noexpand\spline@find\z@{\the\dimen@ii}{}%
+ \noexpand\checksplinefind@{\the\dimen@ii}}%
+ \else
+ \xywarning@{cannot slide \the\dimen@ii\space beyond end}%
+ \DN@{\splinesegment@{\the\count@@}\spline@find\p@\z@{}}\fi
+ \fi
+ \fi\fi \next@ }
+\xydef@\resetbreaks@{%
+ \let\bstartPLACE@=\relax \let\bthisPLACE@=\empty
+ \let\bendPLACE@=\relax \let\bprevPLACE@=\relax}
+\xydef@\invisbreaks@{\resetbreaks@ \let\bstartPLACE@=\empty}
+\xydef@\crvresetbreaks@{\resetbreaks@ \let\bstartPLACE@=\relax }
+\xydef@\initbreaks@{\xy@@{\ifx\bstartPLACE@\relax
+ \def\bstartPLACE@{0}\def\bendPLACE@{1}\else
+ \ifx\bstartPLACE@\empty\def\bstartPLACE@{0}\def\bendPLACE@{1}%
+ \fi\fi}}
+\xydef@\lastbreaks@{\ifx\bprevPLACE@\relax \def\bstartPLACE@{0}%
+ \else \expandafter \bprevPLACE@ \fi
+ \let\bprevPLACE@\relax \let\bendPLACE@\relax}
+\xylet@\bstartPLACE@\relax
+\xylet@\bendPLACE@\relax
+\xylet@\bprevPLACE@\relax
+\xydef@\bthisPLACE@{1}
+\xydef@\splinebreak@{%
+\splinetrace@{***new break*** this:\bthisPLACE@ }%
+ \ifx\bthisPLACE@\empty\def\bendPLACE@{1}%
+ \else\edef\bendPLACE@{\bthisPLACE@}\let\bthisPLACE@\empty\fi
+ \ifx\bprevPLACE@\relax\def\bstartPLACE@{0}\else\expandafter\bprevPLACE@\fi
+ \edef\bprevPLACE@{\def\noexpand\bstartPLACE@{\bendPLACE@}\pfromthec@}%
+\splinetrace@{splineBREAK: \bstartPLACE@ <> \bendPLACE@}%
+ \edef\cv@brend{\cfromthec@}%
+ \edef\cv@brstart{\cfromthep@}%
+ \expandafter\connect\expandafter\crvs\crvSTYLE@@{}%
+ \let\cv@brend=\relax
+ \let\cv@brstart=\relax
+\splinetrace@{**break done**}%
+}
+\xydef@\splinelast@{\splinereset@ \lastbreaks@
+\splinetrace@{splineLAST}%
+ \edef\cv@brend{\cfromthec@}%
+ \edef\cv@brstart{\cfromthep@}%
+ \expandafter\connect\expandafter\crvs\crvSTYLE@@{}%
+ \let\cv@brend=\relax
+ \let\cv@brstart=\relax
+\splinetrace@{**last done**}%
+ \resetbreaks@}
+\xydef@\splineNointercept@{\enter@{\pfromthep@}%
+ \begingroup \splinereset@ \csname cv@0\endcsname \swap@
+ \count@=\ptsnum@ \advance\count@\@ne \csname cv@\the\count@\endcsname
+ \edef\tmp@{\endgroup \X@origin=\the\X@p \Y@origin=\the\Y@p
+ \R@c=\the\d@X \U@c=\the\d@Y}\tmp@
+ \loop@
+ \dimen@=\ifdim\R@c<\z@-\fi\R@c
+ \advance\dimen@ \ifdim\U@c<\z@-\fi\U@c
+ \ifdim\dimen@>10\p@
+ \advance\R@c \ifdim\R@c<\z@-\fi 16sp \divide\R@c\KK@
+ \advance\U@c \ifdim\U@c<\z@-\fi 16sp \divide\U@c\KK@
+ \repeat@
+ \intersect@ \leave@}
+\xydef@\splineintercept@{\Hidden@true\Invisible@true\splineintercept@i}
+\xydef@\splineintercept@i{\enter@{\pfromthep@}\begingroup
+ \R@p=\X@c \L@p=\X@p \d@X=\R@p \advance\d@X-\L@p
+ \D@p=\Y@c \U@p=\Y@p \d@Y=\D@p \advance\d@Y-\U@p
+ \dimen@nth\KK@\d@X \edef\sd@X{\expandafter\removePT@\the\d@X}%
+ \dimen@nth\KK@\d@Y \edef\sd@Y{\expandafter\removePT@\the\d@Y}%
+ \dimen@=\sd@Y\L@p \advance\dimen@-\sd@X\U@p
+ \edef\sideOffset@{\the\dimen@}\def\closestseg@{1}%
+ \let\crvconnect@@=\relax \crvconnect@
+ \let\spline@end=\splinef@end
+ \def\spline@start{\bgroup \def\prevnext@{+-}%
+ \def\splinerec@{\let\splinerec@=\splineIrec@ \splineinterceptTest@}%
+ \def\splinedecast@{\let\splinedecast@=\splinedecast@@
+ \def\splineadvance@{\splineIadvance@@}\splinedecast@@}%
+ \def\splineadvance@{\intercepthull@}%
+ \global\let\splinepoint=\splineIpt@@
+ \global\let\splinegoal@=\splinef@pt
+ \global\let\splinefinish@=\splinefinish@@}%
+ \begingroup \splineIsegment@
+ \splinesetparams@ \splined@@ \def\postfind@{}\splineIplace@
+ \setupDirection@ii \leave@ }
+\xydef@\splineIplace@{%
+ \d@X=\dimen5 \d@Y=\dimen7 \dimen@=\splineval@
+ \expandafter\count@\xycrvptsnum@\relax
+ \ifnum\count@>\tw@ \advance\count@\m@ne
+ \advance\dimen@\segmentnum@\p@ \advance\dimen@-\p@
+ \dimen@nth\count@\dimen@
+ \fi \edef\tmp@{\endgroup \endgroup
+ \def\noexpand\PLACEf@{{\expandafter\removePT@\the\dimen@}}%
+ \X@c=\dimen@i \Y@c=\dimen3
+ \d@X=\the\d@X \d@Y=\the\d@Y }\tmp@
+\splinetrace@{PLACE = \PLACEf@:(\the\X@c, \the\Y@c)}%
+ \expandafter\edef\expandafter\bthisPLACE@\PLACEf@
+ }
+\xydef@\splineIrec@{\splineinterceptTest@ }
+\xydef@\squineIpt@{\edef\tmp@{\endgroup
+ \def\noexpand\prevnext@{\next}\begingroup}\tmp@ }
+\xydef@\squineIadvance@{\edef\tmp@{\endgroup
+ \def\noexpand\prevnext@{\next}\def\noexpand\howclose@{\howclose@}}%
+ \tmp@ \splineadvance@@\begingroup}
+\xydef@\cubicIpt@{\edef\tmp@{\endgroup
+ \def\noexpand\prevnext@{\next}\begingroup}\tmp@ }
+\xydef@\cubicIadvance@{\edef\tmp@{\egroup
+ \def\noexpand\prevnext@{\next}\def\noexpand\howclose@{\howclose@}}%
+ \tmp@ \splineadvance@@\bgroup}
+\xydef@\splineIsegment@{\DN@{\splinesegment@\@ne}%
+ \ifx\splinesegment@\squinesegment@\else
+ \ifx\splinesegment@\cubicsegment@\else\DN@{\findIsegment@}%
+ \fi\fi\next@}
+\xydef@\findIsegment@{\expandafter\count@\xycrvptsnum@ \count@@\z@
+ \loop@ \advance\count@@\@ne \bgroup
+ \expandafter\splinesegment@\expandafter{\the\count@@}%
+ \xysidesofinterval@
+ \findIsegment@i \repeat@
+ \expandafter\dimen@\prevhowclose@ \relax
+ \ifdim\dimen@=\z@ \edef\closestseg@{\the\count@@}\fi
+ \expandafter\splinesegment@\expandafter{\closestseg@}}
+\xydef@\findIsegment@i{%
+ \expandafter\ifx\next \expandafter\findIsegment@ii
+ \else\expandafter\findIsegment@x\fi \next@ }
+\xydef@\findIsegment@ii{\expandafter\count@\xycrvptsnum@ \relax
+ \advance\count@\m@ne \ifnum\count@>\segmentnum@\relax
+ \expandafter\findIsegment@y\else\expandafter\findIsegment@x\fi}
+\xydef@\findIsegment@x{%
+ \edef\next@{\egroup\def\noexpand\next{\next}%
+ \def\noexpand\prevhowclose@{\prevhowclose@}%
+ \def\noexpand\closestseg@{\closestseg@}\noexpand\iffalse}}
+\xydef@\findIsegment@y{%
+ \edef\next@{\egroup\def\noexpand\next{\next}%
+ \def\noexpand\prevhowclose@{\prevhowclose@}%
+ \def\noexpand\closestseg@{\closestseg@}\noexpand\iftrue}}
+\xydef@\xysidesofinterval@{\bgroup
+ \L@p=\sd@X\Y@p \advance\L@p-\sd@Y\X@p \advance\L@p\sideOffset@
+ \U@p=\sd@X\Y@c \advance\U@p-\sd@Y\X@c \advance\U@p\sideOffset@
+ \def\this@{}\ifdim\L@p>\almostz@ \ifdim\U@p>\almostz@ \def\next{++}\else
+ \ifdim\U@p<-\almostz@ \def\next{+-}\else\def\next{+0}\def\this@{-}\fi\fi
+ \else\ifdim\L@p<-\almostz@ \ifdim\U@p>\almostz@ \def\next{-+}\else
+ \ifdim\U@p<-\almostz@ \def\next{--}\else\def\next{-0}\def\this@{+}\fi\fi
+ \else \ifdim\U@p>\almostz@ \def\next{0+}\else
+ \ifdim\U@p<-\almostz@ \def\next{0-}\else\def\next{00}\def\this@{+}\fi\fi
+ \fi\fi
+ \ifx\this@\empty
+ \L@p=\ifdim\L@p<\z@-\fi\L@p \U@p=\ifdim\U@p<\z@-\fi\U@p
+ \ifdim\L@p<\U@p \edef\howclose@{\the\L@p}\def\this@{-}%
+ \else \edef\howclose@{\the\U@p}\def\this@{+}\fi
+ \else\def\howclose@{0.0pt}\fi
+\splinetrace@{\next:\this@:\howclose@;\the\splineval@:%
+ (\the\X@p,\the\Y@p);(\the\X@c,\the\Y@c)}%
+ \ifdim\howclose@<\prevhowclose@\relax
+ \edef\tmp@{\egroup\def\noexpand\this@{\this@}\def\noexpand\next{\next}%
+ \def\noexpand\howclose@{\howclose@}\def\noexpand\prevhowclose@{\howclose@}%
+ \def\noexpand\closestseg@{\segmentnum@}}%
+\splinetrace@{closest yet: \howclose@, in segment \segmentnum@}%
+ \else
+ \edef\tmp@{\egroup\def\noexpand\this@{\this@}\def\noexpand\next{\next}%
+ \def\noexpand\howclose@{\howclose@}}%
+ \fi \tmp@ }
+\xydef@\splineinterceptTest@{%
+ \xysidesofinterval@ \DN@{\splineadvance@}%
+ \DNii@{0.0pt}\ifx\howclose@\nextii@ \DN@{\splineclosest@}%
+ \else\expandafter\ifx\next \expandafter\ifx\prevnext@
+ \ifx\next\prevnext@\else\DN@{\X@c=\X@p \Y@c=\Y@p
+ \splinefinishf@}\fi\fi
+ \else \DN@{\splinedecast@}\fi\fi
+ {\splinefar@false \splinenear@\X@p\X@c\Y@p\Y@c
+ \ifsplinefar@ \aftergroup\next@
+ \else\aftergroup\splineclosest@
+\splinetrace@{too close: (\the\X@p,\the\Y@p)::(\the\X@c,\the\Y@c)}%
+ \fi}}
+\xydef@\splineclosest@{%
+ \expandafter\ifx\this@-\relax
+ \X@c=\X@p \Y@c=\Y@p \global\advance\splineval@-\splinedepth@
+ \fi \splinefinishf@ }%
+\xydef@\squinetestcvxhull@{\begingroup
+\splinetrace@{hull: closest in segment \closestseg@}%
+ \expandafter\splinesegment@\ifx\undefined\closestseg@\@ne\else\closestseg@\fi
+ \X@c=\L@c \Y@c=\U@c \xysidesofinterval@
+ \expandafter\ifx\next \expandafter\splineoutsidehull@@
+ \else \expandafter\splineinsidehull@\fi}
+\xydef@\cubictestcvxhull@{\begingroup
+ \expandafter\splinesegment@\ifx\undefined\closestseg@\@ne\else\closestseg@\fi
+ \X@c=\L@c \Y@c=\U@c \xysidesofinterval@
+ \expandafter\ifx\next \expandafter\cubictestcvxhull@i
+ \else \expandafter\splineinsidehull@\fi}
+\xydef@\cubictestcvxhull@i{%
+ \X@c=\R@c \Y@c=\D@c \xysidesofinterval@
+ \expandafter\ifx\next \expandafter\splineoutsidehull@@
+ \else \expandafter\splineinsidehull@\fi}
+\xydef@\xysidesofhull@{\bgroup
+ \L@p=\sd@X\Y@p \advance\L@p-\sd@Y\X@p \advance\L@p\sideOffset@
+ \U@p=\sd@X\Y@c \advance\U@p-\sd@Y\X@c \advance\U@p\sideOffset@
+ \L@p=\ifdim\L@p<\z@-\fi\L@p \U@p=\ifdim\U@p<\z@-\fi\U@p
+ \ifdim\L@p<\U@p \edef\howclose@{\the\L@p}\def\this@{-}%
+ \else \edef\howclose@{\the\U@p}\def\this@{+}\fi
+ \ifx\splinedecast@\squinedecast@ \D@c=\U@c \R@c=\L@c \fi
+ \L@p=\sd@X\U@c \advance\L@p-\sd@Y\L@c \advance\L@p\sideOffset@
+ \L@p=\ifdim\L@p<\z@-\fi\L@p
+ \expandafter\if\this@-%
+ \ifdim\L@p<\prevhowclose@ \def\next{-+}\else \def\next{--}\fi
+ \else
+ \ifdim\L@p<\howclose@ \def\next{-+}\else
+ \U@p=\sd@X\D@c \advance\U@p-\sd@Y\R@c \advance\U@p\sideOffset@
+ \U@p=\ifdim\U@p<\z@-\fi\U@p
+ \ifdim\U@p<\howclose@ \def\next{+-}\else \def\next{++}\fi
+ \fi\fi
+ \edef\tmp@{\egroup\def\noexpand\this@{\this@}\def\noexpand\next{\next}%
+ \def\noexpand\howclose@{\howclose@}}\tmp@ }
+\def\PLACE@intercept@#1{%
+ \xy@@{\enter@{\pfromthep@\basefromthebase@}\begingroup}%
+ \xy@@ix@{#1}\xy@@{\plainxy@ \def\Creset@@{}%
+ \expandafter\POS\the\toks9\relax
+ \DNii@{\crvreset@}\ifx\nextii@\Creset@@ \edef\next@{\endgroup
+ \def\noexpand\xyinterceptpts@{\the\crvpts@}%
+ \X@c =\the\X@c \Y@c=\the\Y@c \X@p=\the\X@p \Y@p=\the\Y@p
+ \noexpand\CCintercept@@ }%
+ \else \edef\next@{\endgroup
+ \X@c =\the\X@c \Y@c=\the\Y@c \X@p=\the\X@p \Y@p=\the\Y@p
+ \noexpand\Cintercept@@ }%
+ \fi \next@ \leave@}%
+ \PLACE@@}
+\xydef@\CCintercept@@{\splineSintercept@}
+\xydef@\splineSintercept@{\enter@{\pfromthep@}\begingroup
+ \Creset@@ \edef\connect@pts{\cfromthec@ \pfromthep@}%
+ \xyinterceptpts@ \splinereset@ \connect@pts \splineintercept@
+ \edef\next@{\endgroup \cfromthec@ \DirectionfromtheDirection@ }%
+ \next@ \let\xyinterceptpts@=\empty \leave@}
+\xydef@\nointerceptwarning@{\let\nointerceptwarning@=\relax
+ \xywarning@{perhaps no curve intersection, or many. }}
+\xydef@\intercepthull@{\nointerceptwarning@
+ \expandafter\def\expandafter\prevnext@\expandafter{\next}%
+ \splinetestcvxhull@}
+\xydef@\splinetestcvxhull@{\begingroup
+ \X@c=\L@c \Y@c=\U@c \splinetrace@{hull:}\xysidesofinterval@
+ \expandafter\ifx\next \expandafter\splineoutsidehull@@
+ \else \expandafter\splineinsidehull@\fi}
+\xydef@\splineinsidehull@{\edef\tmp@{\endgroup
+ \def\noexpand\howcvxclose@{\howclose@}%
+ \noexpand\interceptinsidehull@}\tmp@ }
+\xydef@\interceptinsidehull@{\edef\prevhowclose@{\howclose@}%
+ \splinedecast@@ }
+{\xdef\next{\the\maxdimen}}
+\xylet@\prevhowclose@=\next
+\xydef@\splineoutsidehull@{\edef\tmp@{\endgroup
+ \def\noexpand\howcvxclose@{\howclose@}%
+ \noexpand\interceptoutsidehull@}\tmp@}
+\xylet@\splineoutsidehull@@=\splineoutsidehull@
+\xydef@\interceptoutsidehull@{\dimen@=\howcvxclose@ \relax
+\splinetrace@{OUTSIDE HULL: \the\dimen@ : (\howclose@)(\prevhowclose@)}%
+ \let\splinedecast@=\splinedecast@@
+ \let\splinerec@\splineHnear@test
+ \let\splineadvance@\splineIadvance@@
+ \splinedecast@@ }
+\xydef@\splineHnear@test{%
+ \xysidesofhull@ \DN@{\splinedecast@}%
+ \ifdim\howclose@<\prevhowclose@\edef\howclose@{\prevhowclose@}\fi
+ \expandafter\if\this@-%
+ \expandafter\ifx\next\DN@{\splineclosest@}\fi
+ \else
+ \expandafter\ifx\next\DN@{\splineadvance@}\fi
+ \fi
+ {\splinefar@false \splinenear@\X@p\X@c\Y@p\Y@c
+ \ifsplinefar@ \aftergroup\next@
+ \else\aftergroup\splineclosest@
+\splinetrace@{too close: (\the\X@p,\the\Y@p)::(\the\X@c,\the\Y@c)}%
+ \fi}}
+\xydef@\cubicoutsidehull@{\edef\tmp@{\endgroup
+ \def\noexpand\howcvxclose@{\howclose@}}\tmp@
+ \edef\prevhowcvxclose@{\howcvxclose@}\begingroup
+ \X@p=\R@c \Y@p=\D@c \splinetrace@{hullii:}\xysidesofinterval@
+ \expandafter\ifx\next \expandafter\cubicoutsidehull@i
+ \else \expandafter\cubicinsidehull@\fi}
+\xydef@\cubicinsidehull@{\edef\tmp@{\endgroup
+ \def\noexpand\howclose@{\howclose@}}\tmp@
+ \cubicoutsidehull@ii }
+\xydef@\cubicoutsidehull@i{\edef\tmp@{\endgroup
+ \def\noexpand\howcvxclose@{\howclose@}}\tmp@
+ \dimen@=\prevhowcvxclose@\relax
+ \ifdim\dimen@<\howcvxclose@ \relax
+ \edef\howcvxclose@{\the\dimen@}\expandafter\interceptoutsidehull@
+ \else \expandafter\cubicoutsidehull@ii\fi }
+\xydef@\cubicoutsidehull@ii{%
+ \def\splineadvance@{\splineadvance@@}%
+ \def\splinepoint\endgroup{\endgroup
+ \global\let\splinepoint=\relax
+ \def\splineadvance@{\intercepthull@}}%
+ \splinedecast@@ }%
+\xydef@\splineHadvance@{\futurelet\next@\splineHadvance@i}
+\xydef@\splineHadvance@i{\ifx\next@\endgroup
+ \expandafter\splineHadvance@x\else\expandafter\splineclosest@\fi}
+\xydef@\splineHadvance@x{\edef\tmp@{\endgroup
+ \def\noexpand\prevhowclose@{\prevhowclose@}%
+ \def\noexpand\prevnext@{\next}\def\noexpand\howcvxclose@{\howclose@}}%
+ \tmp@ \dimen@=\prevhowclose@ \relax
+ \ifdim\dimen@<\howclose@ \relax \DN@{\splineclosest@\begingroup}%
+ \else\ifdim\howcvxclose@=\dimen@\DN@{\splineclosest@\begingroup}%
+ \else\DN@{\splineadvance@@\begingroup}\fi\fi \next@ }
+\xydef@\xyclearcrv@{\cv@end\cv@restore\loop@
+ \expandafter\let\csname cv@\number\crv@cnt@\endcsname\relax
+ \ifnum\crv@cnt@>0\advance\crv@cnt@\m@ne\repeat@
+ \let\cv@start=\relax \let\cv@end=\relax \let\cv@restore=\relax \POS}
+\xylet@\clearcurve=\xyclearcrv@
+\xylet@\numcontrolpts=\xynumctrlpts@
+\xydef@\xycontrolpt@#1{{%
+ \ifnum#1<\z@\aftergroup\cv@restore\aftergroup\cv@start
+ \else
+ \expandafter\count@\xycrvptsnum@\relax \advance\count@\@ne
+ \ifnum#1>\count@ \ifx\cv@end\relax
+ \expandafter\aftergroup\csname cv@\number#1\endcsname
+ \else\aftergroup\cv@end\fi
+ \else
+ \expandafter\ifx\csname cv@\number#1\endcsname\relax
+ \ifnum#1=\z@\aftergroup\cv@start\else\aftergroup\cv@end\fi
+ \else\expandafter\aftergroup\csname cv@\number#1\endcsname
+ \fi\fi\fi}}%
+\xylet@\xycontrolpt=\xycontrolpt@
+\xydef@\startxycurve@@{\crv@cnt@=\z@
+ \edef\cv@start{\cfromthep@}%
+ \ifdim\zz@\R@c \ifdim\zz@\L@c \ifdim\zz@\D@c \ifdim\zz@\U@c
+ \Edge@c={\zeroEdge}\fi\fi\fi\fi
+ \edef\cv@end{\cfromthec@}%
+ \edef\cv@restore{\pfromthep@\basefromthebase@}}
+\xylet@\startxycurve@=\startxycurve@@
+\xylet@\cv@start=\relax
+\xylet@\cv@end=\relax
+\xylet@\cv@restore=\relax
+\xydef@\readxycurve@{\startxycurve@\xycrvmods@}
+\xylet@\readxycurve=\readxycurve@
+\xydef@\addtocrv@{\advance\crv@cnt@\@ne
+ \edef\tmp@{%
+ \expandafter\noexpand\csname cv@\number\crv@cnt@\endcsname}%
+ \expandafter\edef\tmp@{\cfromthec@}%
+ \edef\tmp@{\noexpand\addtocrvpts@{\noexpand\def
+ \expandafter\noexpand\tmp@{\X@c=\the\X@c \Y@c=\the\Y@c }}}\tmp@
+ \edef\xycrvptsnum@{\the\crv@cnt@}%
+}
+\xydef@\xycrvdrop@{ {\zerodot}}
+\xydef@\xycrvconn@{}
+\xydef@\xyc@trlpts@{\def\xycrvdrop@{ \dir{x}}\def\xycrvconn@{}%
+ \afterCURVE{\savecrvobjects@\xyctrlpts@}\readxycurve@}
+\xydef@\xyc@trlpts@@{%
+ \afterCURVE{\savecrvobjects@\def\xycrvdrop@{ \dir{x}}%
+ \def\xycrvconn@{}\xyctrlpts@}\readxycurve@}
+\xydef@\xyc@vxhull@{\def\xycrvdrop@{ {}}%
+ \edef\xycrvconn@{ \noexpand\dir{\addDASH@{}}}%
+ \afterCURVE{\savecrvobjects@\xycvxhull@}\readxycurve@}
+\xydef@\xyc@vxhull@@{%
+ \afterCURVE{\savecrvobjects@\def\xycrvdrop@{ {}}%
+ \edef\xycrvconn@{ \noexpand\dir{\addDASH@{}}}\xycvxhull@}\readxycurve@}
+\xylet@\controlpts=\xyc@trlpts@
+\xylet@\convexhull=\xyc@vxhull@
+\xydef@\savecrvobjects@{\bgroup
+ \expandafter\toks@\expandafter{\xycrvdrop@}%
+ \expandafter\toks@ii\expandafter{\xycrvconn@}%
+ \edef\tmp@{\egroup\noexpand\def\noexpand\resetcrvobjects@{%
+ \noexpand\def\noexpand\xycrvdrop@{\the\toks@}%
+ \noexpand\def\noexpand\xycrvconn@{\the\toks@ii}%
+ }}\tmp@}
+\xydef@\afterCURVE#1{\def\afterCURVE@{#1}}
+\xydef@\endxycurve@{\cv@end\savectrlptsnum@
+ \expandafter\def\csname params@\endcsname{\the\crvpts@}%
+ \cv@restore\afterCURVE@\POS}
+\xylet@\endcurve=\endxycurve@
+\xydef@\xyctrlpts@{\cv@end \cv@restore
+ \def\crvconnect@{\straitconnect@}%
+ \ifnum\crv@cnt@>\z@
+ \count@@@=\@ne \DN@{\loop@\xycontrolpt@{\count@@@}\relax
+ \expandafter\xycvxhulldrop@\xycrvdrop@
+ \ifnum\crv@cnt@>\count@@@\advance\count@@@\@ne\repeat@
+ \cv@end \cv@restore }%
+ \else\DN@{\relax}\fi \next@ }
+\xylet@\xyctrlpts=\xyctrlpts@
+\xydef@\addtocrvpts@#1{\crvpts@=\expandafter{\the\crvpts@#1}}
+\xydef@\savescope@{\crvpts@={}%
+ \edef\tmp@{\expandafter\noexpand\csname cv@0\endcsname}%
+ \edef\tmp@{\noexpand\addtocrvpts@{\noexpand\def
+ \expandafter\noexpand\tmp@{\X@c=\the\X@p \Y@c=\the\Y@p}}}%
+ \tmp@ }
+\xydef@\savectrlptsnum@{%
+ \advance\crv@cnt@\@ne \edef\tmp@{%
+ \expandafter\noexpand\csname cv@\number\crv@cnt@\endcsname}%
+ \edef\tmp@{\noexpand\addtocrvpts@{\noexpand\def
+ \expandafter\noexpand\tmp@{\X@c=\the\X@c \Y@c=\the\Y@c}}}\tmp@
+ \advance\crv@cnt@\m@ne
+ \edef\tmp@{\expandafter\noexpand\csname ptsnum@\endcsname}%
+ \edef\tmp@{\noexpand\addtocrvpts@{%
+ \noexpand\def\expandafter\noexpand\tmp@{\number\crv@cnt@}}}%
+ \tmp@ }
+\xydef@\xycvxhull@{\cv@end \cv@restore
+ \addtocrvpts@{\def\crvconnect@{\straitconnect@}}%
+ \def\crvconnect@{\straitconnect@}%
+ \ifnum\crv@cnt@>\z@
+ \count@@@=\@ne\relax \DN@{\loop@\xycontrolpt@{\count@@@}\relax
+ \expandafter\xycvxhulldrop@\xycrvdrop@
+ {\expandafter\connect\xycrvconn@{}}\pfromc@
+ \ifnum\crv@cnt@>\count@@@\relax \advance\count@@@\@ne\repeat@
+ \cv@end }%
+ \else
+ \ifx\empty\xycrvconn@
+ \edef\xycrvconn@{\noexpand!C\noexpand\dir{\addDASH@{}}}\fi
+ \DN@{\relax}\fi \next@
+ {{\expandafter\connect\xycrvconn@{}}}%
+ \cv@end \cv@restore }
+\xylet@\xycvxhull=\xycvxhull@
+\xydef@\xycvxhulldrop@#1#{\drop@{#1}}
+\xydef@\savespline@{%
+\splinetrace@{savespline@:}%
+ \edef\endspline@{\endgroup
+ \savesplineparams@ \savesplinerefs@
+ \X@min=\the\X@min\relax \X@max=\the\X@max\relax
+ \Y@min=\the\Y@min\relax \Y@max=\the\Y@max\relax
+ \ifInvisible@\noexpand\Invisible@true
+ \else\noexpand\Invisible@false\fi
+ }\endspline@
+ \edef\tmp@{\noexpand\addtocrvpts@{\savesplineparams@}}\tmp@
+ \xycontrolpt@\z@ \cv@end }
+\xydef@\savesplineparams@{%
+ \noexpand\def\expandafter\noexpand\xysplineedges@{\xysplineedges@}}
+\xydef@\savesplinerefs@{%
+ \noexpand\def\noexpand\xysplineparams@{%
+ \expandafter\noexpand\xysplineparams@}%
+ \noexpand\def\noexpand\xysplineedges@{%
+ \expandafter\noexpand\xysplineedges@}%
+}
+\xynew@{box}\splinebox@
+\xynew@{dimen}\splineval@
+\xynew@{dimen}\splinedepth@
+\xynew@{dimen}\splinetol@
+\xynew@{dimen}\splinelength@
+\xynew@{if}\ifsplinefar@
+\xynew@{if}\ifsplineplot@
+\xydef@\splinetracing{\let\splinetrace@=\W@}
+\xydef@\splineignore@#1{}
+\xylet@\splinetrace@=\splineignore@
+\xydef@\readsplineparams@{%
+ \expandafter\expandafter\expandafter\getsplineparams@\xysplineparams@
+ \expandafter\expandafter\expandafter\getsplineedges@safe\xysplineedges@ @@}
+\xydef@\getsplineedges@safe#1@@{\DN@{#1}%
+ \ifx\next@\empty \DN@{\getsplineedges@.0pt;0.0pt,0.0pt;0.0pt,}%
+ \else \DN@{\getsplineedges@safe@#1@@}\fi \next@}
+\xydef@\getsplineedges@safe@#1;#2,#3@@{\DN@{#3}%
+\splinetrace@{getsplineedges@safe}%
+ \ifx\next@\empty \DN@{\getsplineedges@#1;#2,0.0pt;0.0pt,}%
+ \else \DN@{\getsplineedges@#1;#2,#3}\fi \next@}
+\xydef@\getsplineedges@#1;#2,#3;#4,{%
+ \global\dimen@i=#1\global\dimen5=#2\relax
+ \dimen@=#3\multiply\dimen@\m@ne \advance\dimen@\splinelength@
+ \global\dimen3=\dimen@
+ \dimen@=#4\relax
+ \ifdim\dimen@>\p@ \xywarning@{edge out-of-range: \the\dimen@}%
+ \count@=\dimen@ \divide\count@\p@
+ \advance\dimen@-\count@\p@ \multiply\dimen@\m@ne
+ \advance\dimen@ \count@\p@ \advance\dimen@\p@
+\splinetrace@{\the\dimen@}%
+ \else
+ \multiply\dimen@\m@ne \advance\dimen@\p@
+ \fi
+ \global\dimen7=\dimen@ }
+\xydef@\dimen@half{%
+ \advance\dimen@ \ifdim\dimen@<\z@-\fi 1sp \divide\dimen@\tw@}
+\xydef@\halve@dimen#1{\dimen@=#1\relax \dimen@half #1=\dimen@}
+\xydef@\dimen@nth#1#2{\dimen@=#2\relax \dimen@ii=#1sp
+ \advance\dimen@ \ifdim\dimen@<\z@-\fi.5\dimen@ii
+ \divide\dimen@ by#1\relax #2=\dimen@}
+\xydef@\splinetolerance@#1{\dimen@=#1\relax
+ \ifdim\dimen@>\z@ \splinetol@=\dimen@
+ \else\splinetol@=.4\p@\fi}
+\xylet@\splinedefaulttol@=\relax
+\xydef@\splinetolerance#1{\splinetolerance@{#1}%
+ \edef\splinedefaulttol@{\splinetol@=\the\splinetol@}}
+\splinetolerance\z@
+\xydef@\SloppyCurves{\splinetolerance{.8\p@}}
+\xydef@\xylowtolerance@{\splinedefaulttol@
+ \ifdim\splinetol@<\p@ \divide\splinetol@\tw@ \fi}
+\xywarnifdefined\splinedrop@
+\xydef@\setstdsplinedrop@{%
+ \setbox\splinebox@=\hbox\bgroup
+ \setboxz@h{\expandafter\object\xycrvdrop@{}}%
+ \splinedefaulttol@ \dimen@=\wd\z@ \dimen@ii=\ht\z@ \advance\dimen@ii\dp\z@
+ \ifdim\dimen@ii>\dimen@ \dimen@=\dimen@ii \fi \dimen@=1.4142\dimen@
+ \ifdim\dimen@>\splinetol@ \splinetol@=\dimen@\else\dimen@=\splinetol@\fi
+ \dimen@=.5\wd\z@
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \kern-\dimen@ \Drop@@ \kern\dimen@
+ \edef\tmp@{\egroup \splinetol@=\the\splinetol@
+ \ifInvisible@\noexpand\Invisible@true
+ \else\noexpand\Invisible@false\fi}\tmp@
+ \edef\splinedefaulttol@{\splinetol@=\the\splinetol@}%
+ \def\splinedrop@{\copy\splinebox@\splineextra@@}}
+\xywarnifdefined\splineconn@
+\xydef@\stdsplineconn@{{\setsplinedir@
+ \setboxz@h\bgroup\expandafter\object\xycrvconn@{}%
+ \edef\tmp@{\egroup\L@c=\the\L@c \R@c=\the\R@c \D@c=\the\D@c \U@c=\the\U@c
+ \noexpand\def\noexpand\Drop@@}\expandafter\tmp@\expandafter{\Drop@@}%
+ \setboxz@h{\kern-\L@c \boxz@}%
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \Drop@@}}
+\xydef@\setcrvobjects@{\setstdsplinedrop@ \def\splineconn@{\stdsplineconn@}}
+\xylet@\splineextra@@=\relax
+\xydef@\splinenear@#1#2#3#4{{\d@X=#1\advance\d@X-#2%
+ \ifdim\d@X<\z@ \d@X=-\d@X\fi
+ \ifdim\splinetol@<\d@X \aftergroup\splinefar@true
+ \else \d@Y=#3\advance\d@Y-#4\ifdim\d@Y<\z@ \d@Y=-\d@Y\fi
+ \ifdim\splinetol@<\d@Y\aftergroup\splinefar@true
+ \else \xydist@\d@X\d@Y
+ \ifdim\splinetol@<\dimen@ \aftergroup\splinefar@true
+ \else
+ \ifdim\dimen@<.1\splinetol@\aftergroup\splinetooclose@\fi
+ \fi\fi\fi}}
+\xydef@\splineadvance@@{\global\advance\splineval@\splinedepth@}
+\xydef@\splinetooclose@{\aftergroup\aftergroup\aftergroup\splinetooclose@@}
+\xydef@\splinetooclose@@{\def\splineplotpt@{\relax}}
+\xydef@\splinepoint@@{%
+\splinetrace@{P@:(\the\X@c,\the\Y@c)::\the\splineval@;\the\splinedepth@}%
+ {\splinetest@\ifsplineplot@\relax\else\aftergroup\splinecontinue\fi}}
+\xydef@\splinepoint@{%
+ {\splinetest@\ifsplineplot@\aftergroup\splinecontinue\fi}}
+\xylet@\splinepoint=\splinepoint@
+\xydef@\splinecontinue@{%
+ \global\let\splinepoint=\splinepoint@@
+ \global\let\splinecontinue=\splinecontinue@@}
+\xydef@\splinecontinue@@{%
+ \global\let\splinepoint=\splinepoint@
+ \global\let\splinecontinue=\relax}
+\xylet@\splinecontinue=\splinecontinue@
+\xydef@\splineknotpoint@{{\X@p=\X@c \Y@p=\Y@c \cv@start
+ \the\Edge@c\@ne \ifInside@\else\aftergroup\splineknotpoint@@\fi}}%
+\xydef@\splineknotpoint@@{{\X@p=\X@c \Y@p=\Y@c \cv@end
+ \the\Edge@c\@ne \ifInside@\else \aftergroup\splinepoint\fi}}%
+\xylet@\firstsplinepoint@=\splineknotpoint@
+\xylet@\lastsplinepoint@= \splineknotpoint@
+\xydef@\splined@@@{%
+\splinetrace@{finding end types}%
+\splinetrace@{bstartPLACE@:\bstartPLACE@; bendPLACE@:\bendPLACE@}%
+ \DN@{\splinescan@}\ifx\bstartPLACE@\empty
+ \ifx\bendPLACE@\relax\def\bendPLACE@{1}\fi
+ \else\ifx\bstartPLACE@\relax
+ \else\ifx\bstartPLACE@\undefined
+ \else
+ \DN@{\splinescanbreak@}\ifx\bendPLACE@\relax\def\bendPLACE@{1}\fi
+ \DNii@{0}\ifx\bstartPLACE@\nextii@
+ \DNii@{1}\ifx\bendPLACE@\nextii@\DN@{}%
+ \fi\fi
+ \fi\fi\fi \next@ }%
+\xydef@\splineStarttest@{{\X@p=\X@c \Y@p=\Y@c \cv@start \the\Edge@c\@ne
+ \ifInside@\aftergroup\splineplot@false\else\aftergroup\splineplot@true\fi}}%
+\xydef@\splineEndtest@{{\X@p=\X@c \Y@p=\Y@c \cv@end \the\Edge@c\@ne
+ \ifInside@\aftergroup\splineplot@false\else\aftergroup\splineplot@true\fi}}%
+\xydef@\splineBreakStarttest@{{\X@p=\X@c \Y@p=\Y@c \cv@brstart \the\Edge@c\@ne
+ \ifInside@\aftergroup\splineplot@false\else\aftergroup\splineplot@true\fi}}%
+\xydef@\splineBreakEndtest@{{\X@p=\X@c \Y@p=\Y@c \cv@brend \the\Edge@c\@ne
+ \ifInside@\aftergroup\splineplot@false\else\aftergroup\splineplot@true\fi}}%
+\xylet@\splineStarttest=\splineStarttest@
+\xylet@\splineEndtest=\splineEndtest@
+\xydef@\splineSlowStarttest{{\X@p=\X@c \Y@p=\Y@c \cv@start \the\Edge@c\@ne
+ \ifInside@\aftergroup\splineplot@maybe@@\else\aftergroup\splineplot@true\fi}}%
+\xydef@\splineSlowEndtest{{\X@p=\X@c \Y@p=\Y@c \cv@end \the\Edge@c\@ne
+ \ifInside@\aftergroup\splineplot@maybe@@\else\aftergroup\splineplot@true\fi}}%
+\xydef@\splineplot@maybe{\splineplot@false}%
+\xylet@\splineplot@maybe@@=\splineplot@maybe
+\xydef@\splinescan@{\bgroup%
+ \expandafter\def\xysplineedges@{\z@;\z@,\z@;\z@,}%
+ \bgroup \cv@start
+ \expandafter\DN@\expandafter{\the\Edge@c}\DNii@{\zeroEdge}%
+ \ifx\next@\nextii@ \gdef\splineedges@{\z@;\z@,}%
+ \else\aftergroup\splinestartScan@\fi
+ \egroup \relax
+ \bgroup \cv@end
+ \expandafter\DN@\expandafter{\the\Edge@c}\DNii@{\zeroEdge}%
+ \ifx\next@\nextii@
+ \getcrvsegsnum@ \edef\segmentnum@{\the\count@}%
+ \splineval@=\z@ \splineRecordEndValue@
+ \else\aftergroup\splineendScan@\fi
+ \egroup \egroup
+ \expandafter\testsplineedges@\splineedges@;,@@%
+ \expandafter\edef\xysplineedges@{\splineedges@}%
+ \global\let\splineedges@=\relax
+\splinetrace@{edge params: \xysplineedges@}}%
+\xydef@\testsplineedges@#1;#2,#3;#4,#5@@{%
+ \DN@{#5}\ifx\next@\empty
+ \DNii@{#4}\ifx\nextii@\empty
+ \xynoedgespline@{end}\def\splineedges@{#1;#2,\z@;\z@,}\fi
+ \DNii@{#2}\ifx\nextii@\empty
+ \xynoedgespline@{start}\def\splineedges@{\z@;\z@,\z@;\z@,}\fi
+ \fi }
+\xydef@\xynoedgespline@#1{\xywarning@{#1 edge of spline not found}}%
+\xydef@\splinestartScan@{\bgroup
+\splinetrace@{scan for start}%
+ \global\let\splineadvance@=\splineadvance@@
+ \let\spline@start=\splinefindStart@
+ \let\spline@end=\spline@end@@
+ \let\splinefinish@=\splinefinish@@
+ \let\splinewhich=\relax
+ \global\splinelength@=\z@
+ \def\splinerec@{\let\splinerec@=\splineSrec@ \splinedecast@@}%
+ \edef\splineedges@{}%
+ \expandafter\let\xysplineedges@\relax
+ \xylowtolerance@ \splined@@
+ \ifx\splineedges@\empty\expandafter\splineslowScan@\fi
+ \ifx\splineedges@\relax\expandafter\splinenostart@\fi
+ \egroup }%
+\xydef@\splineslowScan@{%
+ \let\splineStarttest=\splineSlowStarttest
+ \let\splinescanStarttest=\relax
+ \def\splinerec@{\let\splinerec@=\splineSrec@ \splinedecast@@}%
+ \splined@@ }
+\xydef@\splineslowEnd@{%
+ \global\let\splineEndtest=\splineSlowEndtest
+ \let\splinescanEndtest=\relax
+ \def\splinerec@{\let\splinerec@=\splineErec@ \splinedecast@@}%
+ \splined@@ }
+\xydef@\splinenostart@{%
+ \def\segmentnum@{1}\splinelength@=\z@ \splineval@=\z@
+ \xynoedgespline@{start}\splineRecordValue@ }
+\xydef@\splineendScan@{\bgroup
+ \bgroup
+\splinetrace@{scan for end}%
+ \global\let\splineadvance@=\splineadvance@@
+ \let\spline@start=\splinefindEnd@
+ \let\spline@end=\spline@end@@
+ \let\splinefinish@=\splinefinish@@
+ \let\splinewhich=\relax
+ \global\splinelength@=\z@
+ \global\let\splineEndtest=\splineEndtest@
+ \def\splinerec@{\let\splinerec@=\splineErec@ \splinedecast@@}%
+ \expandafter\def\expandafter\prevedges@\expandafter{\splineedges@}%
+ \xylowtolerance@ \splined@@
+ \ifx\splineedges@\prevedges@\expandafter\splineslowScan@\fi
+ \egroup \egroup}
+\xydef@\splinescanbreak@{%
+\splinetrace@{SCANBREAK}%
+ \gdef\breakedges@{}%
+ \DN@{0}\ifx\next@\bstartPLACE@
+ \DN@{\bgroup \def\tmp@####1;####2,####3;####4,{%
+ \global\splineval@=####2\relax}%
+ \expandafter\expandafter\expandafter\tmp@\xysplineedges@
+ \def\segmentnum@{1}\splineRecordBreakValue@ \egroup}%
+ \else
+ \bgroup \cv@start
+ \expandafter\DN@\expandafter{\the\Edge@c}\DNii@{\zeroEdge}%
+ \ifx\next@\nextii@ \aftergroup\splinezerostart
+ \else\aftergroup\splinewidestart\fi
+ \egroup
+ \fi \next@
+ \DN@{1}\ifx\next@\bendPLACE@
+ \DN@{\bgroup \def\tmp@####1;####2,####3;####4,{%
+ \global\splineval@=####4\relax}%
+ \expandafter\expandafter\expandafter\tmp@\xysplineedges@
+%% \multiply\splineval@\m@ne \advance\splineval@\p@
+%% \def\segmentnum@{1}
+ \getcrvsegsnum@ \edef\segmentnum@{\the\count@}%
+ \global\multiply\splineval@\count@
+ \splineRecordEndBreakValue@ \egroup}%
+ \else
+ \bgroup \cv@end
+ \expandafter\DN@\expandafter{\the\Edge@c}\DNii@{\zeroEdge}%
+ \ifx\next@\nextii@ \aftergroup\splinezeroend
+ \else\aftergroup\splinewideend\fi
+ \egroup
+ \fi \next@
+ \expandafter\def\expandafter
+ \xybreakedges@\expandafter{\breakedges@}%
+ \global\let\breakedges@=\relax
+\splinetrace@{break params: \xybreakedges@::\bstartPLACE@--\bendPLACE@}%
+ \expandafter\let\xysplineedges@\xybreakedges@ }
+\xydef@\getcrvsegsnum@{%
+ \count@=\ptsnum@\relax \ifnum\count@>\@ne\advance\count@\m@ne\fi}
+\xydef@\splinezerostart{\DN@{\bgroup
+\splinetrace@{splinezerostart:}%
+ \dimen@=\bstartPLACE@\p@
+ \global\splineval@=\dimen@
+ \splineRecordBreakValue@ \egroup }}
+\xydef@\splinezeroend{\DN@{\bgroup
+\splinetrace@{splinezeroend:}%
+ \dimen@=\bendPLACE@\p@
+ \multiply\dimen@\m@ne \advance\dimen@\p@
+ \def\segmentnum@{0}\global\splineval@=\dimen@
+ \splineRecordEndBreakValue@ \egroup }}
+\xydef@\splinewidestart{\DN@{\bgroup
+ \splinetrace@{scan for start}%
+ \let\splinefbcontinue@=\breakstartcontinue@
+ \let\splinef@pt=\splinef@breakpt
+ \let\splinef@end=\break@start
+ \edef\tmp@{{\bstartPLACE@}}%
+ \expandafter\splinealong@@\tmp@\z@>\endgroup\egroup }}
+\xydef@\splinewideend{\DN@{\bgroup
+ \splinetrace@{scan for wide end}%
+ \let\splinefbcontinue@=\breakendcontinue@
+ \let\splinef@pt=\splinef@breakpt
+ \let\splinef@end=\break@end
+ \edef\tmp@{{\bendPLACE@}}%
+ \expandafter\splinealong@@\tmp@\z@<\endgroup\egroup }}
+\xydef@\splineSrec@{{%
+\splinetrace@{v=\the\splineval@ + d=\the\splinedepth@ :
+ (\the\X@p,\the\Y@p);(\the\X@c,\the\Y@c):Srec }%
+ \splineStarttest
+ \ifsplineplot@
+ \ifdim\splinedepth@<.0001\p@ \aftergroup\splinefinish@
+ \global\advance\splineval@ .5\splinedepth@
+ \else\aftergroup\splinedecast@@ \fi
+ \else \aftergroup\splineadvance@ \fi}}
+\xydef@\splinefindStart@@{\bgroup \bgroup
+ \expandafter\expandafter\expandafter\getsplineparams@\xysplineparams@
+ \global\let\splineadvance@=\splineadvance@@
+ \global\let\splinepoint=\relax
+ \let\splinegoal@=\splineRecordValue@ \global\dimen5=\z@
+ {\X@c=\X@p \Y@c=\Y@p \splinescanStarttest }%
+}
+\xydef@\splinefindStart@{%
+ \expandafter\crv@cnt@\xycrvptsnum@\relax
+ \ifnum\crv@cnt@>\tw@
+ \crv@cnt@=\@ne \splineplot@false \splinesegment@{\crv@cnt@}%
+ {\splineStarttest
+ \ifsplineplot@\aftergroup\splineplot@true\fi}%
+ \ifsplineplot@ \else \searchforStartsegment@ \fi
+ \splinesegment@{\crv@cnt@}%
+\splinetrace@{start is in segment \segmentnum@}%
+ \else \splinesegment@\@ne \fi
+ \splineplot@false \splinefindStart@@
+}
+\xydef@\searchforStartsegment@{\splineplot@true\loop@
+ \advance\crv@cnt@\@ne
+ \expandafter\count@\xycrvptsnum@\relax
+ \ifnum\count@=\crv@cnt@\expandafter\splineplot@false
+ \else
+ \splinesegment@{\crv@cnt@}{\splineStarttest
+ \ifsplineplot@\aftergroup\splineplot@false
+ \else\aftergroup\splineplot@true\fi }%
+ \fi \ifsplineplot@\repeat@
+}
+\xydef@\splinefindEnd@@{\bgroup \bgroup
+ \expandafter\expandafter\expandafter\getsplineparams@\xysplineparams@
+\splinetrace@{params:\xysplineparams@}%
+ \splinereverse@@
+\splinetrace@{params:\xysplineparams@}%
+ \global\let\splineadvance@=\splineadvance@@
+ \global\let\splinepoint=\splinescanEndtest
+ \let\splinegoal@=\splineRecordEndValue@ \global\dimen5=\z@
+ {\X@c=\X@p \Y@c=\Y@p \splinescanEndtest }%
+}
+\xydef@\splinereverse@@{\splinereverse@@@}
+\xydef@\splinereverse@@@{%
+ \def\postspline@{\d@X=-\d@X \d@Y=-\d@Y}%
+ \dimen@ii=\X@c \X@c=\X@p \X@p=\dimen@ii
+ \dimen@ii=\Y@c \Y@c=\Y@p \Y@p=\dimen@ii
+ \global\dimen5=-\dimen5\relax
+ \global\advance\dimen5\splinelength@ }
+\xydef@\postspline@{}
+\xydef@\splineErec@{{%
+ \dimen@=\splineval@ \advance\dimen@\splinedepth@
+\splinetrace@{ER (\the\X@p,\the\Y@p);(\the\X@c,\the\Y@c);;;
+\the\dimen@,\the\splinedepth@}%
+ \splineEndtest
+ \ifsplineplot@
+ \ifdim\splinedepth@<.0001\p@ \aftergroup\splinefinish@
+ \else\aftergroup\splinedecast@@ \fi
+ \else \aftergroup\splineadvance@ \fi}}
+\xydef@\splinefindEnd@{%
+ \expandafter\crv@cnt@\xycrvptsnum@\relax
+ \ifnum\crv@cnt@>\tw@
+ \advance\crv@cnt@\m@ne
+ \splineplot@false \splinesegment@{\crv@cnt@}%
+ {\X@c=\X@p \Y@c=\Y@p \splineEndtest
+ \ifsplineplot@\aftergroup\splineplot@true\fi }%
+ \ifsplineplot@
+ \else \searchforEndsegment@ \fi
+ \splinesegment@{\crv@cnt@}%
+\splinetrace@{end is in segment: \segmentnum@ }%
+ \else \splinesegment@\@ne \fi
+ \splineplot@false\splinefindEnd@@
+}
+\xydef@\searchforEndsegment@{\splineplot@true\loop@
+ \advance\crv@cnt@\m@ne
+ \ifnum\crv@cnt@=\z@\expandafter\splineplot@false
+ \else
+ \splinesegment@{\crv@cnt@}{\X@c=\X@p \Y@c=\Y@p \splineEndtest
+ \ifsplineplot@\aftergroup\splineplot@false
+ \else\aftergroup\splineplot@true\fi}%
+ \fi \ifsplineplot@\repeat@
+}
+\xydef@\splinescanStarttest{%
+\splinetrace@{SST (\the\X@c,\the\Y@c); \the\splinelength@, \the\splineval@}%
+ {\splineplot@false\splineStarttest
+ \ifsplineplot@\expandafter\splinefinish@\fi}}
+\xydef@\splinescanEndtest{%
+\splinetrace@{SET (\the\X@c,\the\Y@c); \the\splinelength@, \the\splineval@}%
+ {\splineplot@false\splineEndtest
+ \ifsplineplot@\expandafter\splinefinish@\fi}}
+\xydef@\splineBrec@{{%
+ \dimen@=\splineval@ \advance\dimen@\splinedepth@
+\splinetrace@{BR (\the\X@p,\the\Y@p);(\the\X@c,\the\Y@c);;;
+\the\dimen@,\the\splinedepth@}%
+ \splineEndtest
+ \ifsplineplot@ \aftergroup\splineadvance@ \else
+ \ifdim\splinedepth@<.0001\p@ \aftergroup\splinefinish@
+ \else\aftergroup\splinedecast@@ \fi \fi}}
+\xydef@\splineBSrec@{{%
+\splinetrace@{SR (\the\X@p,\the\Y@p);(\the\X@c,\the\Y@c);;;
+\the\dimen@,\the\splinedepth@:SR}%
+ \splineStarttest
+ \ifsplineplot@
+ \ifdim\splinedepth@<.0001\p@ \aftergroup\splinefinish@
+ \global\advance\splineval@ .5\splinedepth@
+ \else \advance\splineval@\splinedepth@
+ \splinetest@ \advance\splineval@-\splinedepth@
+ \ifsplineplot@\aftergroup\splineadvance@
+ \else\aftergroup\splinedecast@@\fi
+ \fi
+ \else
+ \global\advance\splineval@\splinedepth@
+ \aftergroup\splinefinish@ \fi }}
+\xydef@\splineBErec@{{%
+ \dimen@=\splineval@ \advance\dimen@\splinedepth@
+\splinetrace@{BE (\the\X@p,\the\Y@p);(\the\X@c,\the\Y@c);;;
+ \the\dimen@,\the\splinedepth@}%
+ \splineEndtest
+ \ifsplineplot@
+ \ifdim\splinedepth@<.0001\p@ \aftergroup\splinefinish@
+ \global\advance\splineval@ .5\splinedepth@
+ \else \advance\splineval@\splinedepth@
+ \splinetest@ \advance\splineval@-\splinedepth@
+ \ifsplineplot@\aftergroup\splineadvance@
+ \else\aftergroup\splinedecast@@\fi
+ \fi
+ \else
+ \ifdim\splinedepth@<\p@ \global\advance\splineval@\splinedepth@ \fi
+ \aftergroup\splinefinish@ \fi }}
+\xydef@\splinef@breakpt#1{%
+ \ifdim\splineval@>\z@
+\splinetrace@{found: val=\the\splineval@;(\the\X@c,\the\Y@c)}%
+ \else
+\splinetrace@{found: val=\the\splineval@;(\the\X@p,\the\Y@p)}%
+ \fi \splinefbcontinue@ }
+\xydef@\splinef@pt@@{%
+ \ifdim\splineval@>\z@
+\splinetrace@{found: val=\the\splineval@;c:(\the\X@c,\the\Y@c)}%
+ \global\dimen@i=\X@c \global\dimen3=\Y@c
+ \else
+\splinetrace@{found: val=\the\splineval@;p:(\the\X@p,\the\Y@p)}%
+ \fi
+ \setsplinedir@ \global\dimen5=\d@X \global\dimen7=\d@Y
+ \global\splineval@=\splineval@
+ \aftergroup\splinefocus@ }
+\xydef@\findbreakwarning@#1{%
+ \xywarning@{#1 of break not found: bSTART=\bstartPLACE@, bEND=\bendPLACE@}%
+ \DN@{#1}\def\DNii@{start}\ifx\next@\nextii@\splineRecordBreakValue@
+ \else\splineRecordEndBreakValue@\fi\egroup}%
+\xydef@\breakstartcontinue@{\bgroup \cv@start
+ \expandafter\DN@\expandafter{\the\Edge@c}\DNii@{\zeroEdge}%
+ \ifx\next@\nextii@ \aftergroup\breakstartfound@
+ \else \aftergroup\breakstartcontinue@i\fi \egroup }%
+\xydef@\breakstartcontinue@i{%
+\splinetrace@{move to start edge, from (\the\X@c,\the\Y@c): val=\the\splineval@ }%
+ \global\let\splineEndtest=\splineBreakStarttest@
+ \global\let\splinetest@=\splineBreakStarttest@
+ \gdef\splinerec@{\global\let\splinerec@=\splineSrec@ \splinedecast@@}%
+ \global\let\splinepoint=\relax
+ \global\let\spline@end=\checkfoundSbreak@
+ \global\let\splinegoal@=\splineRecordSBreakValue@
+ \global\let\splinefinish@=\splinefinish@@ }
+\xydef@\breakstartfound@{%
+\splinetrace@{found start edge, at (\the\X@c,\the\Y@c): val=\the\splineval@ }%
+ \global\let\splinetest@=\splineStarttest
+ \gdef\splinerec@{\splinegoal@ \global\let\splinerec@=\splinefinish@ }%
+ \global\let\splinepoint=\relax
+ \global\let\spline@end=\relax
+ \global\let\splinegoal@=\splineRecordBreakValue@
+ \global\let\splinefinish@=\splinefinish@@
+ }
+\xydef@\checkfoundSbreak@{%
+ \ifnum\xycrvptsnum@<\thr@@\DN@{\findbreakwarning@{start}}%
+ \else\DN@{\searchBreakSsegment@}\fi \next@ }%
+\xydef@\searchBreakSsegment@{%
+ \crv@cnt@=\segmentnum@ \DN@{}\count@=\crv@cnt@
+ \DNii@{}\ifnum\splineval@=\z@ \ifnum\crv@cnt@=\@ne
+ \ifnum\xycrvptsnum@=\@ne\count@=\z@\DNii@{\egroup}\fi
+ \else \DN@{\egroup}\fi
+ \else \ifnum\splineval@=\m@ne
+ \else \advance\crv@cnt@\@ne \fi \fi
+ \ifnum\crv@cnt@=\xycrvptsnum@\relax
+ \ifnum\xycrvptsnum@>\tw@ \DNii@{\egroup}\fi
+ \DN@{\expandafter\splineRecordBreakValue@\nextii@}%
+ \else
+ \DN@{\splinesegment@{\crv@cnt@}\splinesetparams@
+ \splined@@ \egroup}%
+ \fi \next@ }
+\xydef@\checkfoundEbreak@{%
+ \ifnum\xycrvptsnum@<\thr@@\DN@{\findbreakwarning@{end}}%
+ \else\DN@{\searchBreakEsegment@}\fi \next@ }%
+\xydef@\searchBreakEsegment@{%
+ \crv@cnt@=\segmentnum@ \DN@{}\count@=\crv@cnt@
+ \DNii@{}\ifnum\splineval@=\z@ \ifnum\crv@cnt@=\@ne
+ \ifnum\xycrvptsnum@=\@ne\count@=\z@\DNii@{\egroup}\fi
+ \else\DN@{\egroup}\fi
+ \else \advance\crv@cnt@\m@ne \fi
+ \ifnum\count@=\z@
+ \ifnum\xycrvptsnum@>\tw@ \splineval@=\m@ne\p@
+ \DNii@{\egroup}\fi
+ \DN@{\expandafter\splineRecordEndBreakValue@\nextii@}\else
+ \DN@{\splinesegment@{\crv@cnt@}\splinereverse@
+ \readsplineparams@ \splined@@ \egroup}%
+ \fi \next@ }
+\xydef@\break@start{\egroup \egroup
+\splinetrace@{scan for start}%
+ \global\let\splineadvance@=\splineadvance@@
+ \let\spline@start=\splinefindBStart@
+ \let\spline@end=\egroup
+ \let\splinefinish@=\splinefinish@@
+ \let\splinewhich=\relax
+ \global\let\splineadvance@=\splineadvance@@
+ \global\let\splinepoint=\relax
+ \let\splinegoal@=\splineRecordBreakValue@
+ \global\dimen5=\z@ \global\splinelength@=\z@
+ \let\splinerec@=\splineSrec@
+ \def\breakedges@{}%
+ \bgroup \bgroup \splined@@ }
+\xydef@\splinefindBStart@{\bgroup
+ \global\splineval@=\z@ \splinedepth@=.5\p@}
+\xydef@\breakendcontinue@{\bgroup
+ \edef\tmp@{\X@p = \the\X@c \Y@p=\the\Y@c}\cv@end\tmp@
+ \expandafter\DN@\expandafter{\the\Edge@c}\DNii@{\zeroEdge}%
+ \ifx\next@\nextii@ \aftergroup\breakendfound@
+ \else\aftergroup\breakendcontinue@i\fi \egroup }%
+\xydef@\breakendcontinue@i{%
+\splinetrace@{move to end edge, from (\the\X@c,\the\Y@c): val=\the\splineval@ }%
+ \global\let\splineEndtest=\splineBreakEndtest@
+ \global\let\splinetest@=\splineBreakEndtest@
+ \gdef\splinerec@{\global\let\splinerec@=\splineErec@\splinedecast@@}%
+ \global\let\splinepoint=\relax
+ \global\let\spline@end=\checkfoundEbreak@
+ \global\let\splinegoal@=\splineRecordEBreakValue@
+ \global\let\splinefinish@=\splinefinish@@
+ \splinerec@ }
+\xydef@\splineRecordEBreakValue@{%
+\splinetrace@{\the\count@\space segments, \the\splineval@}%
+ \splineRecordEndBreakValue@ }
+\xydef@\splineRecordSBreakValue@{\getcrvsegsnum@
+ \dimen@=\splineval@
+ \advance\dimen@\segmentnum@\p@ \advance\dimen@-\p@
+ \dimen@nth\count@\dimen@
+ \global\splineval@=\dimen@ \def\segmentnum@{1}%
+ \splineRecordBreakValue@ }
+\xydef@\breakendfound@{%
+\splinetrace@{found end edge, at (\the\X@c,\the\Y@c): val=\the\splineval@ }%
+ \global\let\splinetest@=\splineEndtest
+ \gdef\splinerec@{\splinegoal@ \global\let\splinerec@=\splinefinish@}%
+ \global\let\splinepoint=\relax
+ \global\let\spline@end=\relax
+ \global\let\splinegoal@=\splineRecordEndBreakValue@
+ \global\let\splinefinish@=\splinefinish@@ }
+\xydef@\break@end{\egroup \egroup
+ \global\let\splineadvance@=\splineadvance@@
+ \let\spline@start=\splinefindBEnd@
+ \let\spline@end=\egroup
+ \let\splinefinish@=\splinefinish@@
+ \let\splinewhich=\relax
+ \global\let\splineadvance@=\splineadvance@@
+ \global\let\splinegoal@=\splineRecordEndBreakValue@
+ \global\splinelength@=\z@
+ \let\splinerec@=\splineErec@
+ \global\let\splineEndtest=\splineEndtest@
+ \bgroup \splined@@ }
+\xydef@\splinefindBEnd@{\bgroup\bgroup
+ \splinereverse@ \readsplineparams@
+ \global\splineval@=\z@ }
+\xydef@\splineRecordValue@{%
+ \ifx\unknown\segmentnum@\relax
+ \else
+ \getcrvsegsnum@
+ \dimen@=\splineval@ \advance\dimen@ \segmentnum@\p@
+ \advance\dimen@-\p@ \dimen@nth\count@\dimen@
+ \global\splineval@=\dimen@
+ \fi
+ \xdef\splineedges@{\splineedges@\the\splinelength@;\the\splineval@,}%
+\splinetrace@{found edge: \splineedges@}}
+\xydef@\splineRecordEndValue@{%
+ \ifx\unknown\segmentnum@\relax
+ \else
+ \getcrvsegsnum@
+ \dimen@=\splineval@ \advance\dimen@ \count@\p@
+ \advance\dimen@-\segmentnum@\p@ \dimen@nth\count@\dimen@
+ \global\splineval@=\dimen@
+ \fi
+ \xdef\splineedges@{\splineedges@\the\splinelength@;\the\splineval@,}%
+\splinetrace@{found edge: \splineedges@}}
+\xydef@\splineRecordBreakValue@{%
+ \ifx\unknown\segmentnum@\relax
+ \else\expandafter\advance\expandafter\splineval@\segmentnum@\p@
+ \count@=\segmentnum@\relax
+ \ifnum\count@>0 \advance\splineval@-\p@ \fi\fi
+ \xdef\breakedges@{\breakedges@\the\splinelength@;\the\splineval@,}%
+ \global\let\spline@end=\egroup
+\splinetrace@{found break edge: \breakedges@}}
+\xydef@\splineRecordEndBreakValue@{%
+ \ifx\unknown\segmentnum@\relax
+ \else\count@=\segmentnum@\relax \ifnum\count@=\z@
+ \else \getcrvsegsnum@
+ \count@@=\count@ \advance\count@@-\segmentnum@\relax
+ \dimen@=\splineval@ \advance\dimen@ \count@@\p@
+ \dimen@nth\count@\dimen@
+ \global\splineval@=\dimen@
+ \fi\fi
+ \ifdim\splineval@<\z@ \relax\splineval@=\z@ \fi
+ \ifx\breakedges@\relax\relax\else\ifx\breakedges@\empty\else
+ \ifdim\splineval@<\p@\relax \ifdim\splineval@>\z@
+ \expandafter\testbreakedges@\breakedges@ @%
+ \fi\fi\fi\fi
+ \xdef\breakedges@{\breakedges@\the\splinelength@;\the\splineval@,}%
+ \global\let\spline@end=\egroup
+\splinetrace@{found break edge: \breakedges@}}
+\xydef@\testbreakedges@#1;#2,#3@{\bgroup \dimen@=#2\relax
+ \advance\dimen@\splineval@ \advance\dimen@-\p@
+\splinetrace@{testbreak: #1;#2,#3@ \the\splineval@::\the\dimen@}%
+ \DN@{\egroup}\ifdim\dimen@>\z@
+ \edef\next@{\egroup\def\noexpand\breakedges@{#1;1pt,#3}}%
+ \else\ifdim\zz@\dimen@
+ \edef\next@{\egroup\def\noexpand\breakedges@{#1;1pt,#3}}%
+ \fi \fi \next@ }
+\xydef@\splineRecordBreakEValue{%
+ \ifdim\splineval@>\z@
+ \splineval@=-\splineval@ \advance\splineval@\p@ \fi
+ \splineRecordBreakValue@ }%
+\xydef@\xydist@#1#2{\ifdim#1>#2\relax
+ \quotient@@\tmp@#2#1\expandafter\dimen@ii\tmp@#2\relax
+ \ifdim\dimen@ii>.41422#1\relax
+ \dimen@=1.060665#1\advance\dimen@ .353555\dimen@ii\relax
+ \else \dimen@=#1\advance\dimen@.5\dimen@ii\fi
+ \else
+ \quotient@@\tmp@#1#2\expandafter\dimen@ii\tmp@#1\relax
+ \ifdim\dimen@ii>.41422#2\relax
+ \dimen@=1.060665#2\advance\dimen@ .353555\dimen@ii\relax
+ \else \dimen@=#2\advance\dimen@.5\dimen@ii\fi
+ \fi}
+\xydef@\splineDadvance@{\splineadvance@@
+ \expandafter\splineDadvance@@\splineDadvance@@@}
+\xydef@\splineDadvance@@#1#2#3#4{%
+ {\d@X=#1\advance\d@X-#2\ifdim\d@X<\z@ \d@X=-\d@X\fi
+ \d@Y=#3\advance\d@Y-#4\ifdim\d@Y<\z@ \d@Y=-\d@Y\fi
+ \xydist@\d@X\d@Y
+ \global\advance\splinelength@\dimen@
+\splinetrace@{d=(\the\d@X,\the\d@Y): v=\the\splineval@: l=\the\splinelength@}%
+}}
+\xydef@\spline@end@{\lastsplinepoint@ \egroup \egroup
+ \ht\z@=\z@ \dp\z@=\z@ \wdz@=\z@ \boxz@}%
+\gdef\splinetest@{\splineplot@true}
+\xydef@\spline@end@@{\egroup \egroup}
+\xydef@\splinefrec@{{%
+ \advance\splineval@\splinedepth@
+\splinetrace@{F:(\the\X@p,\the\Y@p);(\the\X@c,\the\Y@c);;
+\the\splineval@;\the\splinedepth@}%
+ \ifdim\dimen5=\splineval@ \aftergroup\splinefinishf@
+ \else \dimen@=\dimen5\advance\dimen@-\splineval@
+ \ifdim\dimen@<\z@ \dimen@=-\dimen@ \fi
+ \ifdim\dimen@<.0001\p@ \aftergroup\splinefinishf@
+ \else
+ \ifdim\dimen5<\splineval@\aftergroup\splinedecast@@
+ \else \aftergroup\splineadvance@
+ \fi\fi\fi}}
+\xydef@\splinefinishf@{\global\advance\splineval@\splinedepth@
+ \splinefinish@}%
+\xydef@\spline@find#1#2#3{%
+\splinetrace@{spline@find #1 #2 #3}%
+ \readsplineparams@
+ \global\let\splinefinish@=\splinefinish@@
+ \global\let\splinegoal@=\splinef@pt
+ \global\let\splinepoint=\relax
+ \dimen@=#1\relax\dimen@ii=#2\relax
+ \ifdim\dimen@ii=\z@ \def\postfind@{}%
+ \else\def\postfind@{}%
+ \ifdim\dimen@ii<\z@ \splinereverse@
+ \readsplineparams@
+\splinetrace@{reverse orientation: (\the\X@p,\the\Y@p),(\the\X@c,\the\Y@c)}%
+ \dimen@=#1\relax\dimen@ii=#2\relax
+ \multiply\dimen@\m@ne \advance\dimen@\p@ \multiply\dimen@ii\m@ne
+ \def\postfind@{\d@X=-\the\d@X \d@Y=-\the\d@Y \noexpand\reversesplineval@}%
+ \fi\fi
+ \expandafter\splinetrace@\expandafter{\xysplineparams@}%
+ \edef\next@{\noexpand\spline@@find{\the\dimen@}{\the\dimen@ii}{#3}}%
+ \next@ }
+\xydef@\reversesplineval@{\splineval@=-\splineval@ \advance\splineval@\p@ }
+\xydef@\spline@@find#1#2#3{%
+\splinetrace@{spline@@find #1 #2 #3}%
+ \let\splinerec@=\splinefrec@
+ \global\let\splineadvance@=\splineadvance@@
+ \dimen5=#1\relax
+ \ifdim #2=\z@\relax
+ \ifdim #1=\z@\relax \bgroup
+ \let\splined@@=\spline@@knot
+ \global\splineval@=\m@ne\p@
+ \else\ifdim #1=\p@\relax \bgroup
+ \let\splined@@=\spline@@knot
+ \global\splineval@=\z@
+ \else
+ \global\splineval@=\z@
+ \global\let\splineadvance@=\splineadvance@@
+ \DN@{#3}\ifx\next@\empty \setsplinetest@\splineval@>{#1}{}%
+ {{\ifdim\splineval@=\dimen5\aftergroup\splineplot@false\fi}}%
+ \else\DNii@{>}\ifx\next@\nextii@
+ \setsplineundertest@\splineval@>{#1}{}{}%
+ \let\splinerec@=\splineBSrec@
+ \else\DNii@{<}\ifx\next@\nextii@
+ \setsplineundertest@\splineval@>{#1}{}{}%
+ \let\splinerec@=\splineBErec@
+ \else\xywarning@{unknown find-mode: #3}\fi\fi\fi
+ \fi\fi
+ \else
+ \global\splineval@=\z@
+ \def\splineslidetest@@{%
+ \setsplinetest@\splinelength@<{#2}{}{}}%
+ \let\splinefinish@=\splinefcontinue@
+ \fi
+ \let\spline@end=\splinef@end
+ \let\splinepoint@=\relax
+ \splinelength@=\z@
+ \def\spline@start{\bgroup\xylowtolerance@}%
+ \splined@@ }
+\xydef@\spline@@knot{%
+ \let\setsplinedir@=\setsplineknotdir@
+ \splinesetparams@\spline@start
+ \splinedepth@=\p@
+ \global\dimen@i=\X@p \global\dimen3=\Y@p
+ \splinefinishf@ \spline@end \egroup }
+\xydef@\splinefcontinue@{%
+\splinetrace@{sliding... from (\the\X@c,\the\Y@c): val=\the\splineval@ }%
+ \global\let\splinerec@=\splinerec@@
+ \global\splinelength@=\z@
+ \global\splineval@=\splineval@
+ \global\let\splinepoint=\splinefindtest@
+ \global\let\splinegoal@=\splinef@pt
+ \global\let\splineadvance@=\splineDadvance@
+ \global\let\splinefinish@=\splinefinish@@
+ \splineslidetest@@
+ }
+\xydef@\splinefindtest@{%
+\splinetrace@{SFT (\the\X@c,\the\Y@c); \the\splinelength@, \the\splineval@}%
+ {\splineplot@false\splinetest@
+ \ifsplineplot@\expandafter\splinefinishf@\fi}}
+\def\setsplineundertest@#1#2#3#4#5{%
+\splinetrace@{setsplineundertest@: #1,#2,#3,#4,#5,}%
+ \DNii@{\gdef\splinetest@}%
+ \DN@##1\next{\def\tmp@{{\splineplot@false
+ \ifdim#1#2##1\relax #4\else\splineplot@true#5\fi }}}%
+ \next@#3\relax\next
+ \expandafter\nextii@\tmp@ }
+\xydef@\splinef@end{\edef\tmp@{\egroup\splinelength@=\the\splinelength@}\tmp@}
+\xydef@\splinef@pt{%
+ \ifdim\splineval@>\z@
+\splinetrace@{found: val=\the\splineval@;c:(\the\X@c,\the\Y@c)}%
+ \global\dimen@i=\X@c \global\dimen3=\Y@c
+ \else
+\splinetrace@{found: val=\the\splineval@;p:(\the\X@p,\the\Y@p)}%
+ \fi
+ \setsplinedir@ \global\dimen5=\d@X \global\dimen7=\d@Y
+ \global\splineval@=\splineval@
+ \aftergroup\splinefocus@ }
+\def\setsplinetest@#1#2#3#4#5{%
+ \DNii@{\gdef\splinetest@}%
+ \DN@##1\next{\def\tmp@{{\splineplot@false \ifdim#1#2##1\relax
+ #4\else\splineplot@true#5\fi}}}%
+ \next@#3\relax\next
+ \expandafter\nextii@\tmp@ }%
+\xydef@\splinefocus@{%
+ \d@X=\dimen5\relax \d@Y=\dimen7\relax \setsplinedir@ }
+\xydef@\splinesegment@#1{}
+\xydef@\xyprecurve@{}
+\xydef@\xypostcurve@{}
+\xydef@\splineset@{%
+\splinetrace@{splineset@:}%
+ \ifx\bstartPLACE@\empty
+ \DN@{\xyprecurve@
+ \edef\tmp@{\egroup \X@max=\the\X@max \X@min=\the\X@min
+ \Y@max=\the\Y@max \Y@min=\the\Y@min}\tmp@ \xypostcurve@ }%
+ \else
+ \DN@{\xyprecurve@ \xysplinespecialcases@
+ \edef\tmp@{\egroup \X@max=\the\X@max \X@min=\the\X@min
+ \Y@max=\the\Y@max \Y@min=\the\Y@min}\tmp@ \xypostcurve@ }%
+ \fi
+ \next@ }
+\xydef@\xysplinespecialcases@{%
+ \ifx\empty\xycrvdrop@
+ \ifx\empty\xycrvconn@ \DN@{\splinesolid@}%
+ \else \DN@{ \dir{-}}\ifx\next@\xycrvconn@ \DN@{\splinesolid@}%
+ \else \DN@{ \dir 2{-}}\ifx\next@\xycrvconn@ \DN@{\splinedoubled@}%
+ \else \DN@{ \dir{=}}\ifx\next@\xycrvconn@ \DN@{\splineribboned@}%
+ \else \DN@{ \dir {2.}}\ifx\next@\xycrvconn@ \DN@{\splinedoubled@}%
+ \else \DN@{ \dir 3{-}}\ifx\next@\xycrvconn@ \DN@{\splinetrebled@}%
+ \else \DN@{ \dir {3.}}\ifx\next@\xycrvconn@ \DN@{\splinetrebled@}%
+ \else \DN@{ \dir{--}}\ifx\next@\xycrvconn@ \DN@{\splinedashed@}%
+ \else \DN@{ \dir{.}}\ifx\next@\xycrvconn@ \DN@{\splinedotted@}%
+ \else \DN@{ \dir{:}}\ifx\next@\xycrvconn@ \DN@{\splinedbldotted@}%
+ \else \ifdim\splinetol@>\z@ \else \splinedefaulttol@ \fi
+ \DN@{\splineset@@}\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \else
+ \DN@{\splineset@@}%
+ \fi \ifInvisible@\DN@{}\fi \next@ }
+\xydef@\splinesolid@{\setbox\splinebox@=\zerodot \def\xycrvdrop@{ }%
+ \def\xycrvconn@{}\splineset@@}
+\xydef@\splinedoubled@{\splinedefaulttol@\def\xycrvdrop@{ }\def\splinedrop@{}%
+ \def\xycrvconn@{!C\dir2{.}}\splineset@@}
+\xydef@\splineribboned@{\splinedefaulttol@\def\xycrvdrop@{ }\def\splinedrop@{}%
+ \def\xycrvconn@{!C\dir{:}}\splineset@@}
+\xydef@\splinetrebled@{\splinedefaulttol@\def\xycrvdrop@{ }\def\splinedrop@{}%
+ \def\xycrvconn@{!C\dir3{.}}\splineset@@}
+\xydef@\splinedashed@{\splinetol@=1.5pc \def\xycrvdrop@{ }%
+ \def\splinedrop@{}\edef\xycrvconn@{\noexpand!C\noexpand\dir{\addDASH@{}}}%
+ \splineset@@}
+\xydef@\splinedotted@{\setbox\splinebox@=\zerodot \def\xycrvdrop@{ }%
+ \splinetol@=1.5\jot \def\xycrvconn@{}\splineset@@}
+\xydef@\splinedbldotted@{\def\xycrvdrop@{ }\def\splinedrop@{}%
+ \splinetol@=1.5\jot \def\xycrvconn@{!C\dir{:}}\splineset@@}
+\xydef@\splineset@@{%
+ \readsplineparams@
+ \ifx\xycrvdrop@\empty \splinetol@=7.5\p@
+ \def\splinedefaulttol@{\splinetol@=7.5\p@}\def\splinedrop@{}%
+ \else\edef\splinedefaulttol@{\splinetol@=\the\splinetol@}\fi
+ \ifx\xycrvconn@\empty \def\splineconn@{}\fi
+\splinetrace@{set the curve: >\the\dimen5, <\the\dimen7}%
+ \global\let\splineadvance@=\splineadvance@@
+ \let\splinerec@=\splineTrec@
+ \def\splineStarttest{\splinetest@}%
+ \global\let\splinepoint=\relax
+ \let\spline@start=\spline@start@
+ \let\spline@end=\spline@end@
+ \ifdim\dimen7=\p@
+ \gdef\splinecontinue{\splinesetting@
+ \global\let\splinetest@=\splineplot@true}%
+ \else
+ \ifdim\dimen7=\tw@\p@
+%% \ifdim\bendPLACE@\p@=\z@ \emptyspline@ \else
+ \ifdim\bendPLACE@\p@=\p@
+ \fi
+ \else
+ \xdef\splinecontinue{\noexpand\setsplinetest@
+ \splineval@>{\the\dimen7}{\noexpand\splinebreakcancel@}{}%
+ \noexpand\splinesetting@ }%
+ \fi\fi
+ \ifdim\dimen7>\z@ \DN@{\splinesetting@\splinecontinue}%
+ \ifdim\zz@{\dimen5}%
+ \else
+ \edef\next@{\noexpand\setsplinetest@
+ \splineval@<{\the\dimen5}{}%
+ {\noexpand\expandafter\noexpand\splinecontinue}%
+ \noexpand\splinesetting@ }%
+ \fi
+ \else\DN@{\dimen5=\p@}\fi
+ \next@
+ \ifdim\dimen5=\p@\DN@{}\else\DN@{\splined@@}\fi \next@
+ }
+\xydef@\emptyspline@{\xywarning@{empty curve subsegment}%
+\splinetrace@{bstartPLACE@=\bstartPLACE@, bendPLACE@=\bendPLACE@,
+ empty segment}%
+ \gdef\splinecontinue{\splinesetting@
+ \global\let\splinetest@=\splineplot@false
+ \global\dimen5=\z@ }}
+\xydef@\splineTrec@{{%
+ \advance\splineval@\splinedepth@
+ \ifdim\dimen5=\splineval@
+ \aftergroup\splinecontinue
+ \else \dimen@=\dimen5\advance\dimen@-\splineval@
+ \ifdim\dimen@<\z@ \dimen@=-\dimen@ \fi
+ \ifdim\dimen@<.001\p@
+ \aftergroup\splinecontinue
+ \else
+ \ifdim\dimen5<\splineval@\aftergroup\splinedecast@@
+ \else \aftergroup\splineadvance@
+ \fi\fi\fi}}
+\xydef@\splinesetting@{\splinesetting@@}
+\xydef@\splinesetting@@{%
+\splinetrace@{splinesetting@@:}%
+ \ifdim\splinedepth@=\z@ \splinedepth@=\p@ \fi
+ \ifdim\splinedepth@=\p@
+ \def\splinerec@{\global\let\splinerec@=\splinerec@@\splinedecast@@}%
+ \else \global\let\splinerec@=\splinerec@@ \fi
+ \gdef\splinepoint{\splineplotpt@}}
+\xydef@\splineplotpt@{{\global\advance\dimen@i-\X@c
+ \splinetest@ \DN@{\splineglue@}\ifsplineplot@
+ \DN@{\dosplineplotpt@}%
+ \fi \next@ \global\dimen@i=\X@c \global\dimen3=\Y@c }}
+\xydef@\splineglue@{\hglue-\dimen@i
+\splinetrace@{N:(\the\X@c,\the\Y@c);;\the\dimen@i;\the\dimen3%
+ ,\the\splinelength@,\the\splineval@,\the\splinedepth@}}
+\xydef@\dosplineplotpt@{\ifdim\dimen@i<\z@
+ \raise\Y@c\hbox to-\dimen@i{\hfill\splinedrop@}%
+ \else \kern-\dimen@i\raise\Y@c\hbox{\splinedrop@}\fi
+ \ifx\splineconn@\relax\else\raise\Y@c\hbox{%
+ \setboxz@h{\splineconn@}\Drop@@}\fi
+\splinetrace@{P:(\the\X@c,\the\Y@c);;\the\dimen@i;\the\dimen3
+ ,\the\splinelength@,\the\splineval@,\the\splinedepth@}}
+\xydef@\splinefinish@@{\postspline@ \splinegoal@ \splinecancel@ }
+\xydef@\splinecancel@{%
+ \global\let\splinerec@=\relax
+ \global\let\splinepoint=\relax
+ \global\let\splinecontinue=\relax
+ \global\let\splinedecast@=\relax
+ }
+\xydef@\splinebreakcancel@{\bsplinecancel@ \splinecancel@}
+\xydef@\bsplinecancel@{\gdef\lastbspline@{\leave@\leave@}%
+ \global\let\middlebspline@=\lastbspline@ }
+\xydef@\splinegoal@{\ifdim\splineval@>\z@
+ \global\dimen@i=\X@c \global\dimen3=\Y@c \fi
+ \global\splineval@=\splineval@ \global\splinelength@=\splinelength@
+ \splinesetdir@ }
+\xylet@\splinefinish@\splinefinish@@
+\xylet@\splinewhich\splineDwhich@
+\xydef@\squinewhich@{%
+ \ifdim\dimen5>\squinelength
+ \d@X=\X@c \d@Y=\Y@c \advance\d@X-\L@c \advance\d@Y-\U@c
+ \advance\squineval-\squinedepth
+ \else \X@c=\X@p \Y@c=\Y@p \advance\squineval-\squinedepth
+ \d@X=\L@c \d@Y=\U@c \advance\d@X-\X@p \advance\d@Y-\Y@p \fi
+ \d@X=-\d@X \d@Y=-\d@Y
+ \squinefinish}
+\xydef@\squineDwhich@{%
+ \ifdim\dimen5>\squinelength
+ \d@X=\X@c \d@Y=\Y@c \advance\d@X-\L@c \advance\d@Y-\U@c
+ \else \X@c=\X@p \Y@c=\Y@p \advance\squineval-\squinedepth
+ \d@X=\L@c \d@Y=\U@c \advance\d@X-\X@p \advance\d@Y-\Y@p \fi
+ \d@X=-\d@X \d@Y=-\d@Y
+ \squinefinish}
+\xydef@\xyquadbezier@{%
+ \global\let\splinerec@=\relax
+ \addtocrvpts@{\def\crvconnect@{\squineconnect@}}%
+ \xyquadmethods@ \let\splinesegment@=\squinesegment@
+ \begingroup\setcrvobjects@ \xysplineparams@ \splined@@@
+ \bgroup \setupsquine@ \squined@ \splineset@ \savespline@ }
+\xydef@\xyquadmethods@{%
+ \def\crvconnect@{\squineconnect@}%
+ \def\splinereverse@@{\splinereverse@@@}%
+ \let\getsplineparams@=\getsquineparams@
+ \let\spline@start@=\squine@start@
+ \let\splinedecast@@=\squinedecast@
+ \let\splinerec@@=\squinerec@
+ \let\splined@@=\squined@@
+ \let\splineIpt@@=\squineIpt@
+ \let\splineIadvance@@=\squineIadvance@
+ \let\splineinfo@=\squineinfo@
+ \let\setsplinedir@=\setsquinedir@
+ \let\splinetestcvxhull@=\squinetestcvxhull@
+ \let\setsplineknotdir@=\setsquineknotdir@
+ \let\splinereverse@=\squinereverse@
+ \let\splineDadvance@@@=\squineDadvance@@@
+ \let\splinesetparams@=\squinesetparams@
+ \let\splineplot@maybe@@=\squineplot@maybe
+}
+\xydef@\squineconnect@{\splineconnect@ \crvconnect@@
+ \let\splinesegment@=\squinesegment@ }%
+\xydef@\squinesegment@#1{\xyquadmethods@ \def\segmentnum@{1}%
+ \setupsquine@ \squined@ }
+\xydef@\setupsquine@{%
+ \xycontrolpt@\z@ \X@p=\X@c \Y@p=\Y@c
+ \xycontrolpt@\@ne \A@=\X@c \B@=\Y@c
+ \xycontrolpt@\tw@
+ \ifdim \A@>\X@max
+ \dimen@=\X@p\advance\dimen@\A@ \dimen@half
+ \ifdim \dimen@>\X@max \X@max=\dimen@ \fi
+ \dimen@=\X@c\advance\dimen@\A@ \dimen@half
+ \ifdim \dimen@>\X@max \X@max=\dimen@ \fi
+ \else \ifdim \A@<\X@min
+ \dimen@=\X@p\advance\dimen@\A@ \dimen@half
+ \ifdim \dimen@<\X@min \X@min=\dimen@ \fi
+ \dimen@=\X@c\advance\dimen@\A@ \dimen@half
+ \ifdim \dimen@>\X@min \X@min=\dimen@ \fi
+ \fi\fi
+ \ifdim \B@>\Y@max
+ \dimen@=\Y@p\advance\dimen@\B@ \dimen@half
+ \ifdim \dimen@>\Y@max \Y@max=\dimen@ \fi
+ \dimen@=\Y@c\advance\dimen@\B@ \dimen@half
+ \ifdim \dimen@>\Y@max \Y@max=\dimen@ \fi
+ \else \ifdim \B@<\Y@min
+ \dimen@=\Y@p\advance\dimen@\B@ \dimen@half
+ \ifdim \dimen@<\Y@min \Y@min=\dimen@ \fi
+ \dimen@=\Y@c\advance\dimen@\B@ \dimen@half
+ \ifdim \dimen@>\Y@min \Y@min=\dimen@ \fi
+ \fi\fi }
+\xydef@\squinedecast@{\halve@dimen\splinedepth@
+ \R@c=\L@c \advance\L@c\X@p \halve@dimen\L@c
+ \advance\R@c\X@c \halve@dimen\R@c
+ \A@=\L@c \advance\A@\R@c \halve@dimen\A@
+ \D@c=\U@c \advance\U@c\Y@p \halve@dimen\U@c
+ \advance\D@c\Y@c \halve@dimen\D@c
+ \B@=\U@c \advance\B@\D@c \halve@dimen\B@
+ \begingroup \X@c=\A@ \Y@c=\B@ \splinerec@ \endgroup
+ \begingroup \X@c=\A@ \Y@c=\B@ \splinepoint \endgroup
+ \X@p=\A@ \L@c=\R@c \Y@p=\B@ \U@c=\D@c \splinerec@}
+\xydef@\squinerec@{{\splinefar@false \splinenear@\X@p\X@c\Y@p\Y@c
+ \ifsplinefar@ \aftergroup\squinedecast@
+ \else \aftergroup\splineadvance@ \fi}}
+\xydef@\squineDadvance@@@{\X@p\L@c\Y@p\D@c}
+\xydef@\squineplot@maybe{{\X@p=\L@c \Y@p=\U@c \cv@start \the\Edge@c\@ne
+ \ifInside@\aftergroup\splineplot@false\else\aftergroup\splineplot@true\fi}}
+\xydef@\setsquinedir@{%
+ \d@X=\X@c \advance\d@X-\L@c \d@Y=\Y@c \advance\d@Y-\U@c
+ \dimen@=\ifdim\d@X<\z@-\fi\d@X \ifdim\dimen@<.02\p@
+ \dimen@=\ifdim\d@Y<\z@-\fi\d@Y \ifdim\dimen@<.02\p@
+ \d@X=\X@c \advance\d@X-\X@p \d@Y=\Y@c \advance\d@Y-\Y@p \fi\fi
+ \ifdim\X@c=\X@p \ifdim\Y@c=\Y@p
+ \d@X=\L@c \advance\d@X-\X@p \d@Y=\U@c \advance\d@Y-\Y@p \fi\fi
+ \setupDirection@ii }
+\xydef@\setsquineknotdir@{%
+ \ifdim\zz@\splineval@ \expandafter \setsquinezerodir@
+ \else\expandafter \setsquinedir@ \fi }
+\xydef@\setsquinezerodir@{%
+ \d@X=\L@c \advance\d@X-\X@p \d@Y=\U@c \advance\d@Y-\Y@p
+ \ifdim\zz@\d@X \ifdim\zz@\d@Y
+ \d@X=\X@c \advance\d@X-\X@p \d@Y=\Y@c \advance\d@Y-\Y@p
+ \fi\fi \setupDirection@ii }
+\xydef@\getsquineparams@#1,#2,#3,#4,#5,#6,#7,{%
+ \splinelength@=#1\relax\X@p=#2\relax\Y@p=#3\relax
+ \A@=#4\relax\B@=#5\relax\X@c=#6\relax\Y@c=#7\relax
+}
+\xydef@\squineinfo@{%
+\expandafter\removePT@\the\X@c\space
+\expandafter\removePT@\the\Y@c\space
+\expandafter\removePT@\the\A@\space
+\expandafter\removePT@\the\B@\space
+\expandafter\removePT@\the\X@p\space
+\expandafter\removePT@\the\Y@p\space
+\expandafter\removePT@\the\dimen5\space\space
+\expandafter\removePT@\the\dimen7\space
+ }%
+\xydef@\squinereverse@{\readsplineparams@
+ \expandafter\edef\xysplineparams@{\the\splinelength@,%
+ \the\X@c,\the\Y@c,\the\A@,\the\B@,\the\X@p,\the\Y@p,}}%
+\xydef@\squine@start@{\setboxz@h\bgroup
+ \global\splinelength@=\z@ \global\dimen@i=\z@ \global\dimen3=\z@
+ \kern\X@p
+ {\squinesetparams@ \X@c=\X@p \Y@c=\Y@p \firstsplinepoint@
+ }\bgroup }
+\xydef@\squinesetparams@{%
+ \global\dimen@i=\X@p \global\dimen3=\Y@p
+ \L@c=\A@ \U@c=\B@ \R@c=\L@c \D@c=\U@c }%
+\xydef@\squined@{%
+ \expandafter\edef\xysplineparams@{%
+ \the\z@,\the\X@p,\the\Y@p,\the\A@,\the\B@,\the\X@c,\the\Y@c,}}
+\xydef@\squined@@{%
+ \splinedepth@=\p@
+ \global\splineval@=\z@
+ \global\dimen@i=\X@p \global\dimen3=\Y@p
+ \spline@start
+ \ifx\splinerec@\relax \let\splinerec@=\squinerec@\fi
+ \L@c=\A@ \U@c=\B@ \R@c=\L@c \D@c=\U@c
+ \splinerec@ \spline@end }
+\xydef@\xycubicbezier@{%
+ \addtocrvpts@{\def\crvconnect@{\cubicconnect@}}%
+ \xycubicmethods@ \let\splinesegment@=\cubicsegment@
+ \begingroup \setcrvobjects@ \xysplineparams@ \splined@@@
+ \bgroup \setupcubic@ \cubiced@ \splineset@ \savespline@ }
+\xydef@\xycubicmethods@{%
+ \def\crvconnect@{\cubicconnect@}%
+ \def\splinereverse@@{\cubicreverse@@}%
+ \let\getsplineparams@=\getcubicparams@
+ \let\spline@start@=\cubic@start@
+ \let\splinedecast@@=\cubicdecast@
+ \let\splinerec@@=\cubicrec@
+ \let\splined@@=\cubiced@@
+ \let\splineIpt@@=\cubicIpt@
+ \let\splineIadvance@@=\cubicIadvance@
+ \let\splineoutsidehull@@=\cubicoutsidehull@
+ \let\splinetestcvxhull@=\cubictestcvxhull@
+ \let\splineinfo@=\cubicinfo@
+ \let\setsplinedir@=\setcubicdir@
+ \let\setsplineknotdir@=\setcubicknotdir@
+ \let\splinereverse@=\cubicreverse@
+ \let\splineDadvance@@@=\cubicDadvance@@@
+ \let\splinesetparams@=\cubicsetparams@
+ \let\splineplot@maybe@@=\cubicplot@maybe
+ }
+\xydef@\cubicconnect@{\splineconnect@ \crvconnect@@
+ \let\splinesegment@=\cubicsegment@ }%
+\xydef@\cubicsegment@#1{\xycubicmethods@ \def\segmentnum@{1}%
+ \setupcubic@ \cubiced@ }
+\xydef@\setupcubic@{%
+ \xycontrolpt@\z@ \X@p=\X@c \Y@p=\Y@c
+ \xycontrolpt@\@ne \A@=\X@c \B@=\Y@c
+ \xycontrolpt@\tw@ \global\dimen3=\X@c \global\dimen5=\Y@c
+ \xycontrolpt@\thr@@
+ \adjustmaxmin@ }
+\xydef@\adjustmaxmin@{%
+ \ifdim \A@>\X@max \dimen@=\A@ \advance\dimen@\X@p \dimen@half
+ \ifdim\dimen@>\X@max \X@max=\dimen@ \fi \else
+ \ifdim \A@<\X@min \dimen@=\A@ \advance\dimen@\X@p \dimen@half
+ \ifdim\dimen@<\X@min \X@min=\dimen@ \fi \fi\fi
+ \ifdim \B@>\Y@max \dimen@=\B@ \advance\dimen@\Y@p \dimen@half
+ \ifdim\dimen@>\Y@max \Y@max=\dimen@ \fi \else
+ \ifdim \B@<\Y@min \dimen@=\B@ \advance\dimen@\Y@p \dimen@half
+ \ifdim\dimen@<\Y@min \Y@min=\dimen@ \fi \fi\fi
+ \ifdim \dimen3>\X@max \dimen@=\dimen3\advance\dimen@\X@c \dimen@half
+ \ifdim\dimen@>\X@max \X@max=\dimen@ \fi \else
+ \ifdim \dimen3<\X@min \dimen@=\dimen3\advance\dimen@\X@c \dimen@half
+ \ifdim\dimen@<\X@min \X@min=\dimen@ \fi \fi\fi
+ \ifdim \dimen5>\Y@max \dimen@=\dimen5\advance\dimen@\Y@c \dimen@half
+ \ifdim\dimen@>\Y@max \Y@max=\dimen@ \fi \else
+ \ifdim \dimen5<\Y@min \dimen@=\dimen5\advance\dimen@\Y@c \dimen@half
+ \ifdim\dimen@<\Y@min \Y@min=\dimen@ \fi \fi\fi
+ \dimen@=\A@ \advance\dimen@\dimen3 \dimen@half
+ \ifdim\dimen@>\X@max \X@max=\dimen@
+ \else \ifdim\dimen@<\X@min \X@min=\dimen@ \fi\fi
+ \dimen@=\B@ \advance\dimen@\dimen5 \dimen@half
+ \ifdim\dimen@>\Y@max \Y@max=\dimen@
+ \else \ifdim\dimen@<\Y@min \Y@min=\dimen@ \fi\fi
+}
+\xydef@\cubicdecast@{\halve@dimen\splinedepth@
+ \A@=\L@c \advance\A@\R@c \halve@dimen\A@
+ \advance\R@c\X@c \halve@dimen\R@c
+ \B@=\U@c \advance\B@\D@c \halve@dimen\B@
+ \advance\D@c\Y@c \halve@dimen\D@c
+ \advance\L@c\X@p \halve@dimen\L@c
+ \advance\U@c\Y@p \halve@dimen\U@c
+ \begingroup
+ \X@c=\R@c \advance\X@c\L@c \halve@dimen\X@c
+ \advance\X@c\A@ \halve@dimen\X@c
+ \Y@c=\D@c \advance\Y@c\U@c \halve@dimen\Y@c
+ \advance\Y@c\B@ \halve@dimen\Y@c
+ \R@c=\L@c \advance\R@c\A@ \halve@dimen\R@c
+ \D@c=\U@c \advance\D@c\B@ \halve@dimen\D@c
+ \bgroup \splinerec@
+ \egroup \splinepoint \endgroup
+ \X@p=\L@c \advance\X@p\R@c \halve@dimen\X@p
+ \advance\X@p\A@ \halve@dimen\X@p
+ \L@c=\R@c \advance\L@c\A@ \halve@dimen\L@c
+ \Y@p=\U@c \advance\Y@p\D@c \halve@dimen\Y@p
+ \advance\Y@p\B@ \halve@dimen\Y@p
+ \U@c=\D@c \advance\U@c\B@ \halve@dimen\U@c
+ \splinerec@ }
+\xydef@\cubicrec@{{\splinefar@false \splinenear@\X@p\X@c\Y@p\Y@c
+ \ifsplinefar@ \aftergroup\cubicdecast@
+ \else \aftergroup\splineadvance@ \fi}}
+\xydef@\cubicDadvance@@@{\X@p\X@c\Y@p\Y@c}
+\xydef@\cubicplot@maybe{{\X@p=\L@c \Y@p=\U@c \cv@start \the\Edge@c\@ne
+ \ifInside@\aftergroup\cubicplot@maybeii\else\aftergroup\splineplot@true\fi}}
+\xydef@\cubicplot@maybeii{{\X@p=\R@c \Y@p=\D@c \cv@start \the\Edge@c\@ne
+ \ifInside@\aftergroup\splineplot@false\else\aftergroup\splineplot@true\fi}}
+\xydef@\cubiced@@{%
+ \splinedepth@=\p@
+ \global\splineval@=\z@
+ \spline@start
+ \global\dimen@i=\X@p \global\dimen3=\Y@p
+ \splinerec@ \spline@end }
+\xydef@\setcubicdir@{%
+ \ifdim\splinedepth@<.001\p@\DN@{\cubiccoarsedir@}%
+ \else\DN@{\cubicfinedir@}\fi \next@ }
+\xydef@\cubicfinedir@{%
+ \d@X=\X@c \advance\d@X-\R@c \d@Y=\Y@c \advance\d@Y-\D@c
+ \ifdim\zz@\d@X \ifdim\zz@\d@Y
+ \d@X=\X@c \advance\d@X-\L@c \d@Y=\Y@c \advance\d@Y-\U@c
+ \ifdim\zz@\d@X \ifdim\zz@\d@Y
+ \d@X=\X@c \advance\d@X-\X@p \d@Y=\Y@c \advance\d@Y-\Y@p
+ \fi\fi \fi\fi
+ \setupDirection@ii
+\splinetrace@{dir:(\the\d@X,\the\d@Y),\the\Direction; depth:\the\splinedepth@}%
+}
+\xydef@\cubiccoarsedir@{%
+ \d@X=\X@c \advance\d@X-\X@p \d@Y=\Y@c \advance\d@Y-\Y@p \setupDirection@ii
+ \global\dimen5=\d@X \global\dimen7=\d@Y
+\splinetrace@{dir:(\the\d@X,\the\d@Y),\the\Direction; depth:\the\splinedepth@}%
+}
+\xydef@\setcubicknotdir@{%
+ \ifdim\zz@\splineval@ \DN@{\setcubiczerodir@}%
+ \else \DN@{\cubicfinedir@}\fi \next@ }
+\xydef@\setcubiczerodir@{%
+ \d@X=\L@c \advance\d@X-\X@p \d@Y=\U@c \advance\d@Y-\Y@p
+ \ifdim\zz@\d@X \ifdim\zz@\d@Y
+ \d@X=\R@c \advance\d@X-\X@p \d@Y=\D@c \advance\d@Y-\Y@p
+ \ifdim\zz@\d@X \ifdim\zz@\d@Y
+ \d@X=\X@c \advance\d@X-\X@p \d@Y=\Y@c \advance\d@Y-\Y@p
+ \fi\fi \fi\fi \setupDirection@ii }
+\xydef@\getcubicparams@#1,#2,#3,#4,#5,#6,#7,#8,#9,{%
+ \splinelength@=#1\relax\X@p=#2\relax\Y@p=#3\relax\L@c=#4\relax
+ \U@c=#5\relax\R@c=#6\relax\D@c=#7\relax\X@c=#8\relax\Y@c=#9\relax
+}%
+\xydef@\cubicinfo@{%
+\expandafter\removePT@\the\X@p\space
+\expandafter\removePT@\the\Y@p\space
+\expandafter\removePT@\the\L@c\space
+\expandafter\removePT@\the\U@c\space
+\expandafter\removePT@\the\R@c\space
+\expandafter\removePT@\the\D@c\space
+\expandafter\removePT@\the\X@c\space
+\expandafter\removePT@\the\Y@c\space
+\expandafter\removePT@\the\dimen5\space\space
+\expandafter\removePT@\the\dimen7\space
+ }%
+\xydef@\cubicreverse@{\readsplineparams@
+ \expandafter\edef\xysplineparams@{\the\splinelength@,%
+ \the\X@c,\the\Y@c,\the\R@c,\the\D@c,\the\L@c,\the\U@c,\the\X@p,\the\Y@p,}}%
+\xydef@\cubicreverse@@{%
+ \splinereverse@@@
+ \dimen@ii=\L@c \L@c=\R@c \R@c=\dimen@ii
+ \dimen@ii=\U@c \U@c=\D@c \D@c=\dimen@ii }
+\xydef@\cubic@start@{\setboxz@h\bgroup
+ \global\splinelength@=\z@ \global\dimen@i=\z@ \global\dimen3=\z@
+ \kern\X@p
+ {\cubicsetparams@ \X@c=\X@p \Y@c=\Y@p \R@c=\X@c \D@c=\Y@c
+ \firstsplinepoint@ }\bgroup
+}
+\xydef@\cubicsetparams@{%
+ \expandafter\expandafter\expandafter\getsplineparams@\xysplineparams@
+ \global\dimen@i=\X@p \global\dimen3=\Y@p }
+\xydef@\cubiced@{%
+ \expandafter\edef\xysplineparams@{\the\z@,\the\X@p,\the\Y@p
+ ,\the\A@,\the\B@,\the\dimen3,\the\dimen5,\the\X@c,\the\Y@c,}%
+ }%
+\xydef@\xybspline@iii{%
+ \addtocrvpts@{\def\crvconnect@{\bsplineiiiconnect@}}%
+ \def\crvconnect@{\bsplineiiiconnect@}\xybsplinemethods@
+ \let\splinesegment@=\bsplinesegment@iii
+ \begingroup\setcrvobjects@ \dobspline@ \savespline@ }
+\xydef@\bsplineiiiconnect@{\splineconnect@ \crvconnect@@
+ \let\splinesegment@=\bsplinesegment@iii }%
+\xydef@\xybspline@iv{%
+ \addtocrvpts@{\def\crvconnect@{\bsplineivconnect@}}%
+ \def\crvconnect@{\bsplineivconnect@}\xybsplinemethods@
+ \let\splinesegment@=\bsplinesegment@iv
+ \begingroup\setcrvobjects@ \dobspline@ \savespline@ }
+\xydef@\bsplineivconnect@{\splineconnect@ \crvconnect@@
+ \let\splinesegment@=\bsplinesegment@iv }%
+\xydef@\xybspline@{%
+\splinetrace@{B-spline with \numcontrolpts\space control points.}%
+ \addtocrvpts@{\def\crvconnect@{\bsplineconnect@}}%
+ \def\crvconnect@{\bsplineconnect@}\xybsplinemethods@
+ \let\splinesegment@=\bsplinesegment@
+ \begingroup\setcrvobjects@
+ \dobspline@ \savespline@ }
+\xydef@\xybsplinemethods@{%
+ \def\splinereverse@@{\cubicreverse@@}%
+ \let\getsplineparams@=\getbsplineparams@
+ \let\spline@start@=\cubic@start@
+ \let\splinedecast@@=\cubicdecast@
+ \let\splinerec@@=\cubicrec@
+ \let\splineIpt@@=\cubicIpt@
+ \let\splineIadvance@@=\cubicIadvance@
+ \let\splined@@=\bsplined@@
+ \let\splineinfo@=\cubicinfo@
+ \let\setsplinedir@=\setcubicdir@
+ \let\setsplineknotdir@=\setcubicknotdir@
+ \let\splinereverse@=\cubicreverse@
+ \let\splineDadvance@@@=\cubicDadvance@@@
+ \let\splinesetparams@=\cubicsetparams@
+ \global\let\lastbspline@=\lastbspline@@
+ \global\let\middlebspline@=\middlebspline@@
+}
+\xydef@\bsplined@@{%
+ \splinedepth@=\p@
+ \global\splineval@=\z@
+ \spline@start
+ \global\dimen@i=\X@p \global\dimen3=\Y@p
+ \splinerec@ \spline@end }
+\xydef@\bsplineconnect@{\splineconnect@ \crvconnect@@
+ \let\splinesegment@=\bsplinesegment@ }%
+\xydef@\getbsplineparams@{\getcubicparams@}
+\xydef@\dobspline@{\xysplineparams@ \scanbspline@ \firstbspline@ }%
+\xydef@\firstbspline@{%
+ \enter@{\pfromthep@ \cfromthec@}\enter@{\cfromthec@}\bgroup
+ \def\segmentnum@{1}\xycontrolpt@\z@ \X@p=\X@c \Y@p=\Y@c
+\splinetrace@{0: \the\X@p, \the\Y@p}%
+ \xycontrolpt@\@ne \A@=\X@c \B@=\Y@c
+\splinetrace@{1: \the\X@c, \the\Y@c}%
+ \xycontrolpt@\tw@
+\splinetrace@{2: \the\X@c, \the\Y@c}%
+ \dimen@=\X@c \advance\dimen@\A@ \dimen@half
+ \global\dimen3=\dimen@
+ \dimen@=\Y@c \advance\dimen@\B@ \dimen@half
+ \global\dimen5=\dimen@
+ \xycontrolpt@{3}%
+\splinetrace@{3: \the\X@c, \the\Y@c}%
+ \expandafter\count@\xycrvcnt@\relax
+ \ifnum\count@=3\relax
+ \advance\X@c-\A@ \dimen@nth4\X@c
+ \advance\X@c\dimen3\relax
+ \advance\Y@c-\B@ \dimen@nth4\Y@c
+ \advance\Y@c\dimen5\relax
+ \enter@{\X@p=\the\X@c \Y@p=\the\Y@c \crv@cnt@=\@ne\relax
+ \noexpand\lastbspline@ }%
+ \else
+ \advance\X@c 7\dimen3 \advance\X@c-2\A@
+ \dimen@nth6\X@c
+ \advance\Y@c 7\dimen5 \advance\Y@c-2\B@
+ \dimen@nth6\Y@c
+ \enter@{\X@p=\the\X@c \Y@p=\the\Y@c \crv@cnt@=\@ne\relax
+ \noexpand\middlebspline@ }%
+ \fi \adjustmaxmin@ \czeroEdge@
+ \bsplined@ \splineset@ \leave@ }
+\xydef@\lastbspline@@{\bgroup
+ \advance\crv@cnt@\@ne \edef\segmentnum@{\the\crv@cnt@}%
+\splinetrace@{<: \the\X@p, \the\Y@p}%
+ \advance\crv@cnt@\@ne \xycontrolpt@{\crv@cnt@}%
+ \global\dimen3=\X@c \global\dimen5=\Y@c
+\splinetrace@{\the\crv@cnt@: \the\X@c, \the\Y@c}%
+ \advance\crv@cnt@\m@ne \xycontrolpt@{\crv@cnt@}%
+\splinetrace@{\the\crv@cnt@: \the\X@c, \the\Y@c}%
+ \A@=\X@c \advance\A@\dimen3 \halve@dimen\A@
+ \B@=\Y@c \advance\B@\dimen5 \halve@dimen\B@
+ \adjustmaxmin@ \leave@ \relax \cv@end
+\splinetrace@{>: \the\X@c, \the\Y@c}%
+ \bsplined@ \splineset@ \leave@ }%
+\xylet@\lastbspline@=\lastbspline@@
+\xydef@\middlebspline@@{%
+ \advance\crv@cnt@\@ne \edef\segmentnum@{\the\crv@cnt@}%
+\splinetrace@{<: \the\X@p, \the\Y@p}%
+ \bgroup
+ \xycontrolpt@{\crv@cnt@}\A@=2\X@c \B@=2\Y@c
+\splinetrace@{\the\crv@cnt@: \the\X@c, \the\Y@c}%
+ \advance\crv@cnt@\@ne \xycontrolpt@{\crv@cnt@}%
+\splinetrace@{\the\crv@cnt@: \the\X@c, \the\Y@c}%
+ \advance\A@\X@c \dimen@nth3\A@
+ \advance\B@\Y@c \dimen@nth3\B@
+ \advance\X@c\A@ \halve@dimen\X@c
+ \advance\Y@c\B@ \halve@dimen\Y@c
+ \global\dimen3=\X@c \global\dimen5=\Y@c
+ \advance\crv@cnt@\@ne \xycontrolpt@{\crv@cnt@}%
+\splinetrace@{\the\crv@cnt@: \the\X@c, \the\Y@c}%
+ \expandafter\count@\xycrvcnt@\relax
+ \ifnum\crv@cnt@<\count@\relax
+ \advance\X@c 7\dimen3\advance\X@c-2\A@
+ \dimen@nth6\X@c
+ \advance\Y@c 7\dimen5\advance\Y@c-2\B@
+ \dimen@nth6\Y@c
+ \enter@{\X@p=\the\X@c \Y@p=\the\Y@c \crv@cnt@=\segmentnum@\relax
+ \noexpand\middlebspline@}%
+ \else
+ \advance\X@c-\A@ \dimen@nth4\X@c
+ \advance\X@c \dimen3\relax
+ \advance\Y@c-\B@ \dimen@nth4\Y@c
+ \advance\Y@c \dimen5\relax
+ \enter@{\X@p=\the\X@c \Y@p=\the\Y@c \noexpand\lastbspline@}%
+ \fi \adjustmaxmin@
+ \bsplined@ \splineset@ \leave@ }
+\xylet@\middlebspline@=\middlebspline@@
+\xydef@\scanbspline@{\splined@@@}
+\xydef@\bsplined@{\cubiced@
+ \expandafter\ifx\xysplineedges@\relax\relax\DN@{}%
+ \else\DN@{\adjustbsplineedges@}\fi \next@ }
+\xydef@\adjust@forsegments@{\getcrvsegsnum@
+ \ifnum\count@>\@ne
+\splinetrace@{adjust for \the\count@\space segments:
+ \the\dimen5, \the\dimen7}%
+ \multiply\dimen5 by \count@\relax \dimen@=\segmentnum@\p@
+ \ifnum\dimen5>\dimen@ \relax\dimen5=\p@
+ \else \advance\dimen5-\segmentnum@\p@ \advance\dimen5 by\p@ \fi
+ \ifnum\dimen5<\z@ \relax\dimen5=\z@\relax\fi
+ \multiply\dimen7 by \count@\relax
+ \dimen@=\segmentnum@\p@
+ \ifnum\dimen7<\dimen@ \advance\dimen@-\p@
+ \ifnum\dimen7>\dimen@ \advance\dimen7-\dimen@
+ \else \dimen7=\z@ \fi
+ \else \dimen7=\p@ \fi
+\splinetrace@{adjusted for \the\count@\space segments:
+ \the\dimen5, \the\dimen7}%
+ \fi}
+\xydef@\adjustbsplineedges@{\bgroup
+\splinetrace@{** adjusting edges **}%
+ \readsplineparams@ \adjust@forsegments@
+\splinetrace@{params:\xysplineparams@}%
+\splinetrace@{segment \segmentnum@:<\the\dimen5,\the\dimen7>:\xysplineedges@}%
+ \multiply\dimen7by\m@ne \advance\dimen7by\p@
+ \expandafter\edef\xysplineedges@{%
+ \noexpand\z@;\the\dimen5,\noexpand\z@;\the\dimen7,}%
+ \edef\tmp@{\egroup
+ \noexpand\def\expandafter\noexpand\xysplineedges@{\xysplineedges@}}%
+ \tmp@ }
+\xydef@\bsegment@@ii@iii{%
+ \xycontrolpt@{\count@@}\global\dimen3=\X@c \global\dimen5=\Y@c
+\splinetrace@{\the\count@@: \the\X@c, \the\Y@c}%
+ \advance\count@@\@ne \xycontrolpt@{\count@@}\A@=\X@c \B@=\Y@c
+ \advance\A@ by2\dimen3 \dimen@nth3\A@
+ \advance\B@ by2\dimen5 \dimen@nth3\B@
+ \dimen@=\dimen3 \advance\dimen@ by2\X@c
+ \dimen@nth3\dimen@
+ \global\dimen3=\dimen@
+ \dimen@=\dimen5 \advance\dimen@ by2\Y@c
+ \dimen@nth3\dimen@
+ \global\dimen5=\dimen@
+\splinetrace@{<: \the\dimen3, \the\dimen5}%
+\splinetrace@{>: \the\A@, \the\B@}%
+ \advance\count@@\m@ne }
+\xydef@\bsegment@@i{\bgroup
+ \advance\count@@\m@ne \xycontrolpt@{\count@@}%
+\splinetrace@{\the\count@@: \the\X@c, \the\Y@c}%
+ \edef\tmp@{\egroup \X@p=\the\X@c \Y@p=\the\Y@c}\tmp@
+ \advance\X@p-2\dimen3\advance\X@p by7\A@
+ \dimen@nth6\X@p
+ \advance\Y@p-2\dimen5\advance\Y@p by7\B@
+ \dimen@nth6\Y@p
+}
+\xydef@\bsegment@@iv{%
+ \advance\count@@\tw@ \xycontrolpt@{\count@@}%
+\splinetrace@{\the\count@@: \the\X@c, \the\Y@c}%
+ \advance\X@c by7\dimen3\advance\X@c-2\A@
+ \dimen@nth6\X@c
+ \advance\Y@c by7\dimen5\advance\Y@c-2\B@
+ \dimen@nth6\Y@c
+\splinetrace@{>>: \the\X@c, \the\Y@c }%
+}
+\xydef@\bsegment@@ii@i{\bgroup
+ \advance\count@@\m@ne \xycontrolpt@{\count@@}%
+\splinetrace@{\the\count@@: \the\X@c, \the\Y@c}%
+ \edef\tmp@{\egroup \X@p=\the\X@c \Y@p=\the\Y@c}\tmp@
+ \advance\X@p-\dimen3\advance\X@p by4\A@
+ \dimen@nth4\X@p
+ \advance\Y@p-\dimen5\advance\Y@p by4\B@
+ \dimen@nth4\Y@p
+\splinetrace@{<<: \the\X@p, \the\Y@p}%
+}
+\xydef@\bsegment@@y@iv{%
+ \advance\count@@\tw@ \xycontrolpt@{\count@@}%
+\splinetrace@{\the\count@@: \the\X@c, \the\Y@c}%
+ \advance\X@c by4\dimen3\advance\X@c-\A@
+ \dimen@nth4\X@c
+ \advance\Y@c by4\dimen5\advance\Y@c-\B@
+ \dimen@nth4\Y@c
+}
+\xydef@\bsegment@i{%
+ \xycontrolpt@\z@ \X@p=\the\X@c \Y@p=\the\Y@c
+\splinetrace@{0: \the\X@p \the\Y@p}%
+ \xycontrolpt@\@ne
+\splinetrace@{1: \the\X@c, \the\Y@c}\A@=\X@c \B@=\Y@c
+ \xycontrolpt@\tw@
+ \dimen@=\X@c \advance\dimen@\A@ \dimen@half
+ \global\dimen3=\dimen@
+\splinetrace@{2: \the\X@c, \the\Y@c}%
+ \dimen@=\Y@c \advance\dimen@\B@ \dimen@half
+ \global\dimen5=\dimen@ }
+\xydef@\bsegment@i@iv{%
+ \xycontrolpt@{3}%
+\splinetrace@{3: \the\X@c, \the\Y@c}%
+ \advance\X@c by7\dimen3\advance\X@c-2\A@
+ \dimen@nth6\X@c
+ \advance\Y@c by7\dimen5\advance\Y@c-2\B@
+ \dimen@nth6\Y@c
+ }
+\xydef@\bsegment@z{%
+ \expandafter\count@@\xycrvptsnum@ \advance\count@@\@ne
+ \xycontrolpt@{\the\count@@}\relax
+\splinetrace@{\the\count@@: \the\X@c, \the\Y@c}%
+ \advance\count@@\m@ne
+ \bgroup
+ \xycontrolpt@{\the\count@@}%
+\splinetrace@{\the\count@@: \the\X@c, \the\Y@c}%
+ \global\dimen3=\X@c \global\dimen5=\Y@c
+ \advance\count@@\m@ne \xycontrolpt@{\the\count@@}%
+\splinetrace@{\the\count@@: \the\X@c, \the\Y@c}%
+ \A@=\X@c \advance\A@\dimen3 \halve@dimen\A@
+ \B@=\Y@c \advance\B@\dimen5 \halve@dimen\B@
+ \edef\tmp@{\egroup \A@=\the\A@ \B@=\the\B@ \count@@=\the\count@@}%
+ \tmp@ }
+\xydef@\bsegment@z@i{%
+ \expandafter\count@@\xycrvptsnum@\relax\advance\count@@-\tw@
+ \bgroup
+ \xycontrolpt@{\count@@}\X@p=\the\X@c \Y@p=\the\Y@c
+\splinetrace@{\the\count@@: \the\X@c, \the\Y@c}%
+ \advance\X@p by7\A@ \advance\X@p-2\dimen3 \dimen@nth6\X@p
+ \advance\Y@p by7\B@ \advance\Y@p-2\dimen5 \dimen@nth6\Y@p
+ \edef\tmp@{\egroup \X@p=\the\X@p \Y@p=\the\Y@p}%
+ \tmp@ }
+\xydef@\bsplinesegment@#1{\xybsplinemethods@
+ \count@@=#1\relax
+ \ifnum\count@@=\@ne
+ \bsegment@i \bsegment@i@iv
+ \else\ifnum\count@@=\tw@
+ \bsegment@@ii@iii \bsegment@@ii@i \bsegment@@iv
+ \else\expandafter\count@\xycrvptsnum@\advance\count@\m@ne
+ \ifnum\count@@=\count@
+ \bsegment@z \bsegment@z@i
+ \else\advance\count@\m@ne
+ \ifnum\count@@=\count@
+ \bsegment@@ii@iii \bsegment@@i \bsegment@@y@iv
+ \else
+ \bsegment@@ii@iii \bsegment@@i \bsegment@@iv
+ \fi\fi\fi\fi
+ \expandafter\def\expandafter\segmentnum@\expandafter{\number#1}%
+ \bsplined@ }
+\xydef@\bsplinesegment@iii#1{\xybsplinemethods@
+\splinetrace@{2 segments; \number#1}%
+ \count@@=#1\relax
+ \ifnum\count@@=\@ne \bsegment@i
+ \xycontrolpt@{3}%
+\splinetrace@{3: \the\X@c, \the\Y@c}%
+ \advance\X@c 4\dimen3\advance\X@c-\A@
+ \dimen@nth4\X@c
+ \advance\Y@c 4\dimen5\advance\Y@c-\B@
+ \dimen@nth4\Y@c
+ \else\ifnum\count@@=\tw@ \bsegment@z
+ \bgroup\xycontrolpt@{\@ne}%
+\splinetrace@{1: \the\X@c, \the\Y@c}%
+ \edef\tmp@{\egroup \X@p=\the\X@c \Y@p=\the\Y@c}\tmp@
+ \advance\X@p 4\A@ \advance\X@p-\dimen3
+ \dimen@nth4\X@p
+ \advance\Y@p 4\B@ \advance\Y@p-\dimen5
+ \dimen@nth4\Y@p
+ \fi\fi
+ \expandafter\def\expandafter\segmentnum@\expandafter{\number#1}%
+ \bsplined@ }
+\xydef@\bsplinesegment@iv#1{\xybsplinemethods@
+\splinetrace@{3 segments; \number#1}%
+ \count@@=#1\relax
+ \ifnum\count@@=\@ne \bsegment@i \bsegment@i@iv
+ \else\ifnum\count@@=\tw@
+ \bsegment@@ii@iii \bsegment@@ii@i \bsegment@@y@iv
+ \else\ifnum\count@@=3\relax
+ \bsegment@z \bsegment@z@i
+ \fi\fi\fi
+ \expandafter\def\expandafter\segmentnum@\expandafter{\number#1}%
+ \bsplined@ }
+\message{circles,}
+\xydef@\Circmagic@@{0.5517847}
+\xylet@\Circmagic=\Circmagic@@
+\xydef@\twoPi@{6.2831852}
+\xydef@\fullPi@{3.1415926}
+\xydef@\halfPi@{1.5707963}
+\xynew@{dimen}\L@
+\xydef@\xycircle#1#{\hbox\bgroup\afterVECTORorEMPTY{%
+ \xy@@{\R@=\X@c \L@=\Y@c}\xycircle@}{\xy@@{\R@=\R@c \L@=\L@c}\xycircle@}#1@}
+\xydef@\xycircle@#1@#2{%
+ \DN@{#1}\ifx\next@\empty\def\onlyQuad@{}\else \count@=#1\relax
+ \ifnum\count@<5 \advance\count@-3\relax
+ \ifnum\count@<\z@ \advance\count@ 4\relax\fi \edef\onlyQuad@{\the\count@}%
+ \else\xyerror@{illegal circle <radius>: must be <vector> or <empty>}{}\fi
+ \fi \xy@@{\def\circleSTYLE@{#2}}\def\circleSTYLE@{#2}\xycircle@i}
+\xydef@\xycircle@i{\hbox{\vbox{\vskip\L@
+ \hbox to2\R@{\hfill \buildcircle@ \hfill}\vskip\L@ }}%
+ \L@c=\R@ \R@c=\R@ \D@c=\L@ \U@c=\L@ \def\Leftness@{.5}\def\Upness@{.5}%
+ \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@\relax}\Edge@c={\circleEdge}%
+ \OBJECT@x}
+\xydef@\adjustMinMaxcirc@#1#2{%
+ \dimen@=\X@c \advance\dimen@#1\relax\ifdim\dimen@>\X@max \X@max=\dimen@\fi
+ \dimen@=\X@c \advance\dimen@-#1\relax\ifdim\dimen@<\X@min \X@min=\dimen@\fi
+ \dimen@=\Y@c \advance\dimen@#2\relax\ifdim\dimen@>\Y@max \Y@max=\dimen@\fi
+ \dimen@=\Y@c \advance\dimen@-#2\relax\ifdim\dimen@<\Y@min \Y@min=\dimen@\fi
+}
+%% \cubicCircleControls@@
+\xydef@\cubicCircleControls@@{\X@origin=\z@ \Y@origin=\z@
+ \X@xbase=\R@ \Y@xbase=\z@ \X@ybase=\z@ \Y@ybase=\L@
+ \vfromcartesian@@1,0@\czeroEdge@\idfromc@{0@c}%
+ \vfromcartesian@@0,1@\czeroEdge@\idfromc@{1@c}%
+ \vfromcartesian@@-1,0@\czeroEdge@\idfromc@{2@c}%
+ \vfromcartesian@@0,-1@\czeroEdge@\idfromc@{3@c}%
+ \vfromcartesian@@1,\Circmagic@@ @\czeroEdge@\idfromc@{1@m}%
+ \vfromcartesian@@\Circmagic@@,1@\czeroEdge@\idfromc@{2@m}%
+ \vfromcartesian@@-\Circmagic@@,1@\czeroEdge@\idfromc@{3@m}%
+ \vfromcartesian@@-1,\Circmagic@@ @\czeroEdge@\idfromc@{4@m}%
+ \vfromcartesian@@-1,-\Circmagic@@ @\czeroEdge@\idfromc@{5@m}%
+ \vfromcartesian@@-\Circmagic@@,-1@\czeroEdge@\idfromc@{6@m}%
+ \vfromcartesian@@\Circmagic@@,-1@\czeroEdge@\idfromc@{7@m}%
+ \vfromcartesian@@1,-\Circmagic@@ @\czeroEdge@\idfromc@{8@m}%
+ }
+\xydef@\doCircleQuadrant@@#1#2{\save@ \ifcase#2\relax
+ \doCircleQuadrant@@@{0@c}{1@m}{2@m}{1@c}{#1}\or
+ \doCircleQuadrant@@@{1@c}{3@m}{4@m}{2@c}{#1}\or
+ \doCircleQuadrant@@@{2@c}{5@m}{6@m}{3@c}{#1}\or
+ \doCircleQuadrant@@@{3@c}{7@m}{8@m}{0@c}{#1}\or
+ \doCircleQuadrant@@@{0@c}{1@m}{2@m}{1@c}{#1}\or
+ \doCircleQuadrant@@@{1@c}{3@m}{4@m}{2@c}{#1}\or
+ \doCircleQuadrant@@@{2@c}{5@m}{6@m}{3@c}{#1}\or
+ \doCircleQuadrant@@@{3@c}{7@m}{8@m}{0@c}{#1}\fi \leave@ }
+\xydef@\doCircleQuadrant@@@#1#2#3#4#5{%
+ \cfromid@{#1}\pfromc@\senter@
+ \cfromid@{#2}\spushc@\cfromid@{#3}\spushc@\cfromid@{#4}%
+ \let\bstartPLACE@=\empty \connect@\crvs{#5}\relax\sinit@\sleave@
+ \resetbreaks@}
+\xydef@\dosolidcircle@#1{%
+ \cubicCircleControls@@
+ \doCircleQuadrant@@{#1}1 \relax\Clast@@
+ \doCircleQuadrant@@{#1}2 \relax\Clast@@
+ \doCircleQuadrant@@{#1}3 \relax\Clast@@
+ \doCircleQuadrant@@{#1}4 \relax\Clast@@}%
+\xydef@\solidcircle@{\dosolidcircle@@}
+\xylet@\dosolidcircle@@=\dosolidcircle@
+\xydef@\circledobjects@{\cubicCircleControls@@
+ \setboxz@h{\expandafter\object\circleSTYLE@{}}%
+ \ifdim\L@>\R@ \dimen@ii=\ht\z@ \advance\dimen@ii \dp\z@
+ \ifdim\zz@\dimen@ii \dimen@ii=\wdz@\fi
+ \else \dimen@ii=\wdz@
+ \ifdim\zz@\dimen@ii \dimen@ii=\ht\z@ \advance\dimen@ii \dp\z@\fi
+ \fi \ifdim\zz@\dimen@ii \dimen@ii=2\jot\fi
+ \expandafter\dimen@\ifdim\L@>\R@ \twoPi@\L@\else \twoPi@\R@\fi
+ \advance\dimen@.5\dimen@ii
+ \count@@=\dimen@ \count@=\dimen@ii \divide\count@@\count@
+ \edef\numobjects{\the\count@@}\dimen@=4\p@
+ \dimen@nth\numobjects\dimen@
+ \edef\circleseparation@{\expandafter\removePT@\the\dimen@}%
+ \edef\circleplace@{-\circleseparation@}\placeQuadrants@}%
+\xydef@\placeQuadrants@{\DN@{\placeAllQuadrants@}%
+ \ifx\onlyQuad@\undefined\else\ifx\onlyQuad@\empty\else
+ \DN@{\expandafter\placeCircQuadrant@\expandafter{\onlyQuad@}}%
+ \fi\fi \next@ }%
+\xydef@\placeAllQuadrants@{%
+ \placeCircQuadrant@{1}%
+ \advance\dimen@-\p@\advance\dimen@-\circleseparation@\p@
+ \edef\circleplace@{\expandafter\removePT@\the\dimen@}%
+ \placeCircQuadrant@{2}%
+ \advance\dimen@-\p@\advance\dimen@-\circleseparation@\p@
+ \edef\circleplace@{\expandafter\removePT@\the\dimen@}%
+ \placeCircQuadrant@{3}%
+ \advance\dimen@-\p@\advance\dimen@-\circleseparation@\p@
+ \edef\circleplace@{\expandafter\removePT@\the\dimen@}%
+ \placeCircQuadrant@{4}}
+\xydef@\placeCircQuadrant@#1{%
+ \let\bstartPLACE@=\relax \doCircleQuadrant@@{}#1%
+ \loop@
+ \expandafter\dimen@\circleplace@\p@
+ \advance\dimen@\circleseparation@\p@
+ \edef\circleplace@{\expandafter\removePT@\the\dimen@}%
+ \ifdim\dimen@<\p@ \placeCircObject@
+ \repeat@ }
+\xydef@\placeCircObject@{\begingroup
+ \crvconnect@@ \Creset@@ \Invisible@false
+ \expandafter\splinealong@\expandafter{\circleplace@}%
+ \expandafter\drop\circleSTYLE@{}\endgroup }
+\xydef@\buildcircle@{\save@
+ \DNii@{\circledobjects@}%
+ \ifx\circleSTYLE@\empty\DNii@{\solidcircle@{}}%
+ \else \expandafter\DN@\expandafter{\addDASH@{}}\relax
+ \ifx\next@\circleSTYLE@ \DNii@{\solidcircle@{}}%
+ \else \expandafter\DN@\expandafter{\addEQ@{}}%
+ \ifx\next@\circleSTYLE@
+ \expandafter\circletemplate@\expandafter{\addEQ@{}}{}%
+ \else \expandafter\DN@\expandafter{\addDASH@ 2}%
+ \ifx\next@\circleSTYLE@ \DNii@{\doublecircle@{}}%
+ \else \expandafter\DN@\expandafter{\addDASH@ 3}%
+ \ifx\next@\circleSTYLE@ \DNii@{\triplecircle@{}}%
+ \else \expandafter\expandafter\expandafter\DN@\expandafter\expandafter
+ \expandafter{\expandafter\addDASH@\addDASH@{}}%
+ \ifx\next@\circleSTYLE@ \DNii@{\dashedcircle@{}}%
+ \else \expandafter\expandafter\expandafter\DN@\expandafter\expandafter
+ \expandafter{\expandafter\addEQ@\addEQ@{}}%
+ \ifx\next@\circleSTYLE@ \expandafter\expandafter\expandafter
+ \circletemplate@\expandafter\expandafter\expandafter{%
+ \expandafter\addEQ@\addEQ@{}}2%
+ \else \expandafter\expandafter\expandafter\DN@\expandafter\expandafter
+ \expandafter{\expandafter\addEQ@\addEQ@2}%
+ \ifx\next@\circleSTYLE@ \expandafter\expandafter\expandafter
+ \circletemplate@\expandafter\expandafter\expandafter{%
+ \expandafter\addEQ@\addEQ@{}}2%
+ \else \expandafter\expandafter\expandafter\DN@\expandafter\expandafter
+ \expandafter{\expandafter\addEQ@\addEQ@3}%
+ \ifx\next@\circleSTYLE@ \expandafter\expandafter\expandafter
+ \circletemplate@\expandafter\expandafter\expandafter{%
+ \expandafter\addEQ@\addEQ@{}}3%
+ \else \expandafter\DN@\expandafter{\addDOT@{}}\relax
+ \ifx\next@\circleSTYLE@ \DNii@{\dottedcircle@{}}%
+ \else \expandafter\DN@\expandafter{\addDOT@2}\relax
+ \ifx\next@\circleSTYLE@ \DNii@{\dbldottedcircle@{}}%
+ \else \expandafter\DN@\expandafter{\addDOT@3}\relax
+ \ifx\next@\circleSTYLE@ \DNii@{\trpldottedcircle@{}}%
+ \else \DN@{:}\relax
+ \ifx\next@\circleSTYLE@ \DNii@{\dbldottedcircle@{}}%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \nextii@ \leave@}
+\xydef@\circletemplate@#1#2{\def\circleSTYLE@{\dir#2{#1}}}
+\xydef@\doublecircle@#1{%
+ \advance\R@-\p@ \advance\L@-\p@ \solidcircle@{}%
+ \advance\R@ 2\p@ \advance\L@ 2\p@ \solidcircle@{}}
+\xydef@\triplecircle@#1{%
+ \advance\R@-2\p@ \advance\L@-2\p@ \solidcircle@{}%
+ \advance\R@ 2\p@ \advance\L@ 2\p@ \solidcircle@{}%
+ \advance\R@ 2\p@ \advance\L@ 2\p@ \solidcircle@{}}
+\xydef@\dottedcircle@#1{%
+ \expandafter\def\expandafter\circleSTYLE@\expandafter{%
+ \zerodot@i}%
+ \circledobjects@}
+\xydef@\dashedcircle@#1{%
+ \expandafter\def\expandafter\circleSTYLE@\expandafter{\zerodash@i}%
+ \circledobjects@}
+\xydef@\dbldottedcircle@#1{%
+ \advance\R@-\p@ \advance\L@-\p@ \dottedcircle@{}%
+ \advance\R@ 2\p@ \advance\L@ 2\p@ \dottedcircle@{}}
+\xydef@\trpldottedcircle@{%
+ \advance\R@-2\p@ \advance\L@-2\p@ \dottedcircle@{}%
+ \advance\R@ 2\p@ \advance\L@ 2\p@ \dottedcircle@{}%
+ \advance\R@ 2\p@ \advance\L@ 2\p@ \dottedcircle@{}}
+{\xyuncatcodes \gdef\next{=<.75\jot>{\zerodot}}}
+\xylet@\zerodot@i=\next
+{\dimen0=2\xydashl@ \xyuncatcodes
+\expandafter\gdef\expandafter\next\expandafter{\expandafter
+ =\expandafter<\the\dimen0 >_\dir{|}}}
+\xylet@\zerodash@i=\next
+{\xyuncatcodes\gdef\next{--}}
+\xylet@\dashcorntemp@@=\next
+{\xyuncatcodes\gdef\next{.}}
+\xylet@\dotcorntemp@@=\next
+\xydef@\dotcorner@#1{%
+ \expandafter\circleCorner@\expandafter{\dotcorntemp@@}{#1}}%
+\xydef@\dashcorner@#1{%
+ \expandafter\circleCorner@\expandafter{\dashcorntemp@@}{#1}}
+\xydef@\circleCorner@#1#2{\setboxz@h\bgroup
+ \edef\next{#2\relax\R@=\the\R@\relax\L@=\R@ }%
+ \expandafter\xycircle@\next @{#1}%
+ \ifcase#2\or \setboxz@h{\lower\R@\boxz@\kern\X@c}%
+ \or \setboxz@h{\kern-\R@\lower\R@\boxz@\kern\R@\kern\X@c}%
+ \or \setboxz@h{\kern-\R@\lower\R@\boxz@\kern\R@\kern\X@c}%
+ \or \setboxz@h{\lower\R@\boxz@\kern\X@c}\fi
+ \wdz@=\R@ \ht\z@=\R@ \dp\z@=\R@ \boxz@
+ }
+\xydef@\qspline{\hbox\bgroup\crvresetbreaks@ \xy@spline@}
+\xydef@\xy@spline@#1#{\if\sempty@ \DN@{\crvs@{}\resetbreaks@}%
+ \else\DN@{\xy@spline@i{#1}}\fi \next@ }%
+\xydef@\xy@spline@i#1#2{\def\splineSTYLE@{#2}%
+ \DN@{\xy@spline@ii}\DNii@{#1}%
+ \ifx\nextii@\empty\DN@{\xy@spline@ii@@}\fi \next@ }
+\xydef@\xy@spline@ii{\save@ \cfromp@\idfromc@{@p}%
+ \enter@\cplusthec@ \count@@=\s@top\advance\count@@\m@ne
+ \cfroms@{\count@@}\leave@
+ \halve@dimen\X@c
+ \halve@dimen\Y@c
+ \czeroEdge@ \idfromc@{@c}%
+ \expandafter\doSplineStraight@\expandafter{\splineSTYLE@}%
+ \count@=\@ne \edef\next@{\the\count@}%
+ \ifx\next@\s@top\DN@{\xy@spline@iv}\else\DN@{\xy@spline@iii}\fi
+ \next@ }
+\xylet@\xy@spline@ii@@=\xy@spline@ii
+\xydef@\xy@spline@iii{\crv@cnt@=\s@top
+ \loop \advance\crv@cnt@\m@ne \xy@spline@g \ifnum\crv@cnt@>\@ne\repeat
+ \xy@spline@iv}
+\xydef@\xy@spline@g{\cfromid@{@c}\idfromc@{@p}%
+ \count@@=\crv@cnt@\cfroms@{\count@@}\idfromc@{@m}%
+ \enter@\cplusthec@ \count@@=\crv@cnt@ \advance\count@@\m@ne
+ \cfroms@{\count@@}\leave@
+ \halve@dimen\X@c
+ \halve@dimen\Y@c
+ \czeroEdge@\idfromc@{@c}%
+ \expandafter\doSplineSegment@\expandafter{\splineSTYLE@}}
+\xydef@\xy@spline@iv{\cfromid@{@c}\idfromc@{@p}%
+ \cfroms@{\z@}\idfromc@{@m}\leave@ \save@
+ \enter@\cplusthec@ \cfromid@{@m}\leave@
+ \halve@dimen\X@c
+ \halve@dimen\Y@c
+ \czeroEdge@\idfromc@{@c}%
+ \expandafter\doSplineSegment@\expandafter{\splineSTYLE@}%
+ \xy@spline@v }
+\xydef@\xy@spline@v{\cfromid@{@c}\idfromc@{@p}%
+ \leave@ \save@ \idfromc@{@c}%
+ \expandafter\doSplineStraight@\expandafter{\splineSTYLE@}%
+ \xy@spline@x }
+\xydef@\xy@spline@x{\leave@
+ \def\Drop@@{\splineDrop@ \resetbreaks@}%
+ \def\Connect@@{\straight@\relax\splineConnect@ \resetbreaks@}%
+ \OBJECT@x}
+\xydef@\splineDrop@{\ifInvisible@\setboxz@h{}%
+ \else\setboxz@h{\kern-\the\X@c\raise-\the\Y@c\hbox{\styledboxz@}}\fi
+ \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@ }
+\xydef@\splineConnect@{%
+ \ifInvisible@\else\box\lastobjectbox@\fi }%
+\xydef@\doSplineStraight@#1{\begingroup \sinit@
+ \cfromid@{@p}\pfromc@\cfromid@{@c}%
+ \connect@\crvs{#1}\relax\sleave@\endgroup }
+\xydef@\doSplineSegment@#1{\begingroup \sinit@
+ \cfromid@{@p}\pfromc@\senter@\cfromid@{@m}\spushc@\cfromid@{@c}%
+ \connect@\crvs{#1}\relax\sinit@\sleave@\endgroup }
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xydummy.tex b/macros/generic/diagrams/xypic/texinputs/xydummy.tex
new file mode 100644
index 0000000000..99182b8b5c
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xydummy.tex
@@ -0,0 +1,30 @@
+%% xydummy.tex from $Id: xydummy.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Dummy'' option.
+%% Copyright (c) 1993-1996 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{dummy}{Dummy option}{\stripRCS$Revision: 3.7 $}%
+ {Kristoffer H.~Rose}{krisrose@tug.org}%
+ {IBM T.~ J.\ Watson Research Center, P.O.~Box 704, Yorktown Heights, NY 10598 (USA)}
+\xynew@{count}\xydummyrequires@@
+\xyeveryrequest{dummy}{\global\advance\xydummyrequires@@\@ne
+ \W@{The `dummy' option was used \the\xydummyrequires@@\space times!}}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xydvidrv.tex b/macros/generic/diagrams/xypic/texinputs/xydvidrv.tex
new file mode 100644
index 0000000000..2f8eb1745e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xydvidrv.tex
@@ -0,0 +1,36 @@
+%% xydvidrv.tex from $Id: xydvidrv.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``dvidrv-driver'' option.
+%% Copyright (c) 1995-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{dvidrv}{dvidrv driver}{\stripRCS$Revision: 3.7 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xydef@\dvidrv@@#1{\dvimessage@{dvidrv}{#1}}
+\newdriver{%
+ \xyaddsupport{emtex}\dvidrvEmTeX@@
+ \xyaddsupport{line}\dvidrvLine@@
+}
+\xydef@\dvidrvEmTeX@@{\dvidrvEmTeX@}%
+\xydef@\dvidrvEmTeX@{\setupxyEMTeX@}%
+\xydef@\dvidrvLine@@{\dvidrvLine@}%
+\xydef@\dvidrvLine@{\xywithoption{emtex}{\installEMline@}}%
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xydvips.tex b/macros/generic/diagrams/xypic/texinputs/xydvips.tex
new file mode 100644
index 0000000000..d0d1176753
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xydvips.tex
@@ -0,0 +1,154 @@
+%% xydvips.tex from $Id: xydvips.doc,v 3.9 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``dvips-driver'' option.
+%% Copyright (c) 1995-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{dvips}{DVIPS driver}{\stripRCS$Revision: 3.9 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xydef@\dvips@@#1{\dvimessage@{dvips}{#1}}
+\newdriver{%
+ \xyaddsupport{color}\dvipsColor@@
+ \xyaddsupport{crayon}\dvipsCrayola@@
+ \xyaddsupport{ps}\dvipsPS@@
+ \xyaddsupport{rotate}\dvipsRotate@@
+ \xyaddsupport{line}\dvipsLine@@
+ \xyaddsupport{frame}\dvipsFrames@@
+ \xyaddsupport{tile}\dvipsTiles@@
+ \xyaddsupport{tpic}\dvipsTPIC@
+ \xyaddsupport{emtex}\dvipsEM@
+ \xyaddsupport{tips}\dvipsTIPS@
+}
+\xydef@\dvips@Color@{\dvipsPStypes@
+ \let\xylocalColor@=\xystackcolor@
+ \let\xycolor@push\xycolor@push@@
+ \def\xycolor@{\xycolor@@}\let\xycolorwarning@=\relax
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-c}{\xydrivernoload@{ps-c}}\installPScolor@ }%
+ \else\DN@{}\fi \next@
+ \ifx\xycolor@@\xyNoColor@ \let\xycolor@@=\xycolor@raw@@\fi
+ \ifx\xycrayolaloaded\empty \DN@{\xystandardcolors@\dvipsCrayola@{}}%
+ \else \DN@{\xystandardcolors@}\fi \next@
+ \let\dvipsColor@@=\relax
+ \let\UnloadColor@@=\NoDVIPScolor@
+ }%
+\xydef@\dvipsColor@@{\dvips@Color@}
+\xydef@\NoDVIPScolor@{%
+ \def\xycolor@{\xycolor@@}%
+ \let\xycolor@@=\xyNoColor@
+ \let\xylocalColor@=\xyNoColor@@
+ \let\xycolorwarning@=\xycolorwarning@@
+ \let\dvipsColor@@=\dvips@Color@
+ \let\UnloadColor@@=\UnloadColor@
+ }
+\xydef@\NoDVIPScolordvi@{\xywarning@{%
+ Neither colordvi.tex nor colordvi.sty could be found.}%
+ \xyBEcolorcheck@}%
+\xydef@\dvipsCrayola@@{\dvipsColor@@\dvipsCrayola@}
+\xydef@\dvipsCrayola@{%
+ \let\prevxycolor@=\newxycolor@
+ \def\newxyDVIPScolor@##1##2##3{\prevxycolor@{##1}{}{##1}}%
+ \let\newxycolor@=\newxyDVIPScolor@ \dvipsInclude@{color.pro}%
+ \installCrayolaColors@
+ \let\newxycolor@=\prevxycolor@ }%
+\xydef@\dvipsPS@@{\dvipsPS@}
+\xydef@\dvipsPS@unload{\UnloadPS@
+ \let\UnloadPS@@=\UnloadPS@
+ \let\dvipsPS@@=\dvipsPS@ }
+\xydef@\dvipsPStypes@{%
+ \xyinputorelse@{xyps-ps}{\xydrivernoload@{ps-ps}}%
+ \ifx\PSspecial@@\dvipsSpecial@\else
+ \let\PSspecial@@=\dvipsSpecial@
+ \let\PSmacro@@=\dvipsMacro@
+ \let\PSdict@@=\dvipsDict@
+ \let\PSspecialdict@@=\dvipsDict@
+ \let\PSraw@@=\dvipsRaw@
+ \let\PSinclude@@=\dvipsInclude@
+ \let\xyPSobeylines@@=\obeyDVIPSlines@
+ \let\xyPScurrpt@@=\dvipsCurrpt@@
+ \dvips@@{PostScript}%
+ \fi
+ \XYpredict@ }
+\xywarnifdefined\dvipsSpecial@
+\xywarnifdefined\dvipsMacro@
+\xywarnifdefined\dvipsDict@
+\xywarnifdefined\dvipsInclude@
+\xywarnifdefined\dvipsRaw@
+{\catcode`\"=11 \catcode`\!=11 \catcode`\:=11
+ \gdef\dvipsSpecial@#1{\special{ps:: SDict begin #1 end}}
+ \gdef\dvipsMacro@#1{\firstPS@@\special{" {#1}xy}}
+ \gdef\dvipsDict@#1{\special{! #1}}
+ \gdef\dvipsInclude@#1{\special{header=#1}}
+ \gdef\dvipsRaw@#1{\special{ps: SDict begin #1 end}}
+\catcode`\^^M=\active
+ \gdef\next{\catcode`\^^M=\active \let^^M=\space }}%
+\xylet@\obeyDVIPSlines@=\next
+\xydef@\dvipsCurrpt@{\let\xyPScurrpt@@=\dvipsCurrpt@@}%
+\xydef@\dvipsCurrpt@@{\PSraw@@{xyp}}
+\xydef@\dvipsPS@{\dvipsPStypes@
+ \let\dvipsPS@@=\PSspecials@true
+ \let\UnloadPS@@=\dvipsPS@unload
+ \let\installxyps@@=\relax \installxyps@ }
+\xydef@\dvipsRotate@@{\dvipsRotate@}
+\xydef@\dvipsRotate@{\dvipsPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-r}{\xydrivernoload@{ps-r}}%
+ \dvipsCurrpt@ \dvipsRotScale@ \installPSrotscale@ }%
+ \else\DN@{\xydriverfail@{rotations are}UnloadRotate@\relax}\fi
+ \next@ }
+\xydef@\dvipsRotScale@{%
+ \def\xyrot@start(##1){{xyct ##1\space xyrs }}%
+ \def\xyrot@end{}%
+ \def\xyscale@start(##1,##2){{xyct ##1\space##2\space xyss }}%
+ \def\xyscale@end{}}
+\xydef@\dvipsLine@@{\dvipsLine@}
+\xydef@\dvipsLine@{\dvipsPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-l}{\xydrivernoload@{ps-l}}\installPSline@ }%
+ \else\DN@{\xydriverfail@{line-widths are}\UnloadLine@\relax}\fi
+ \next@ }
+\xydef@\dvipsFrames@@{\dvipsFrames@}
+\xydef@\dvipsFrames@{\dvipsPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-f}{\xydrivernoload@{ps-f}}\installPSframes@ }%
+ \else\DN@{\xydriverfail@{frames are}\UnloadFrames@\relax}\fi
+ \next@ }
+\xydef@\dvipsTiles@@{\dvipsTiles@}
+\xydef@\dvipsTiles@{\dvipsPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-t}{\xydrivernoload@{ps-t}}\installPSpatterns@ }%
+ \else\DN@{\xydriverfail@{Patterns are}\UnloadPSpatterns@\relax}\fi
+ \next@ }
+\xydef@\dvipsTPIC@@{\dvipsTPIC@}
+\xydef@\dvipsTPIC@{\setupxyTPIC@}
+\xydef@\dvipsEM@@{\dvipsEM@}
+\xydef@\dvipsEM@{\setupxyEMTeX@}
+\xydef@\dvipsTIPS@{
+ \PSdict@@{/XYdict where pop begin XYdict begin}%
+ \PSdict@@{%
+ /lu{0.04 0.0 -0.16 0.125 -0.11 0.0
+ 1 1 6{pop xyfsize mul 6 1 roll}for
+ lineto lineto lineto closepath fill
+ 0 0 0 0 0 0}def
+ }%
+ \PSdict@@{end end}%
+}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xydvitops.tex b/macros/generic/diagrams/xypic/texinputs/xydvitops.tex
new file mode 100644
index 0000000000..42f8f8ea2e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xydvitops.tex
@@ -0,0 +1,179 @@
+%% xydvitops.tex from $Id: xydvitops.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``DVITOPS-driver'' option.
+%% Copyright (c) 1995-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{dvitops}{DVITOPS driver}{\stripRCS$Revision: 3.7 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xydef@\dvitops@@#1{\dvimessage@{DVITOPS}{#1}}
+\newdriver{%
+ \xyaddsupport{color}\dvitopsColor@@
+ \xyaddsupport{crayon}\dvitopsCrayon@@
+ \xyaddsupport{ps}\dvitopsPS@@
+ \xyaddsupport{rotate}\dvitopsRotate@@
+ \xyaddsupport{line}\dvitopsLine@@
+ \xyaddsupport{frame}\dvitopsFrames@@
+ \xyaddsupport{tile}\dvitopsTiles@@
+ \xyaddsupport{cmtip}\relax
+}
+\xydef@\dvitopsColor@@{\dvitops@Color@}
+\xydef@\dvitops@Color@{\dvitopsPStypes@
+ \let\xylocalColor@=\xyDVITOPScolor@
+ \let\xycolor@push\xycolor@push@@
+ \def\xycolor@{\xycolor@@}\let\xycolorwarning@=\relax
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-c}{\xydrivernoload@{ps-c}}\xycatcodes
+ \installPScolor@ }\else\DN@{}\fi \next@
+ \ifx\xycolor@@\xyNoColor@ \let\xycolor@@=\xycolor@raw@@\fi
+ \ifx\xycrayolaloaded\empty \DN@{\xystandardcolors@\dvitopsCrayon@{}}%
+ \else\let\next@=\xystandardcolors@
+ \fi \next@
+ \let\dvitops@Color@@=\relax
+ \let\UnloadColor@@=\NoDVITOPScolor@
+ }%
+\xydef@\NoDVITOPScolor@{%
+ \def\xycolor@{\xycolor@@}%
+ \let\xycolor@@=\xyNoColor@
+ \let\xylocalColor@=\xyNoColor@@
+ \let\xycolorwarning@=\xycolorwarning@@
+ \let\dvitops@Color@@=\dvitops@Color@
+ }
+\xydef@\xyDVITOPScolor@{\bgroup \DN@##1##2{\egroup}%
+ \ifInvisible@\else\ifHidden@\else\DNii@{\no@@}\ifx\nextii@\Connect@@
+ \else\DN@{\xyDVITOPScolor@i}\fi\fi\fi \next@ }
+\xydef@\xyDVITOPScolor@i#1#2{\checkXyStyle@
+ \DN@{#2}\ifx\next@\empty
+ \def\tmp@##1{\DN@{\xycolor@begin##1\xycolor@end{#1}}}%
+ \else\DNii@{gray}\ifx\next@\nextii@
+ \def\tmp@##1{\DN@{\xycolor@begin##1\xycolor@end{gray}{#1}}}%
+ \else\DNii@{rgb}\ifx\next@\nextii@
+ \def\tmp@##1{\DN@{\xycolor@begin##1\xycolor@end{rgbcolor}{#1}}}%
+ \else\DNii@{hsb}\ifx\next@\nextii@
+ \def\tmp@##1{\DN@{\xycolor@begin##1\xycolor@end{hsbcolor}{#1}}}%
+ \else \DN@{\xywarning@{DVITOPS cannot support color: #2 #1}}%
+ \fi\fi\fi\fi
+ \toks@={\egroup \let\xy@style@=\relax \def\Drop@@}%
+ \expandafter\tmp@\expandafter{\Drop@@}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\next@}\def\Connect@@}%
+ \expandafter\tmp@\expandafter{\Connect@@}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\next@}}%
+ \the\toks@ }%
+\xydef@\xycolor@begin{\dvitopsBegin@{color}}
+\xydef@\xycolor@end{\dvitopsEnd@{color}\dvitopsColor@x}
+\xydef@\dvitopsCrayon@@{\dvitopsColor@@\dvitopsCrayon@}
+\xydef@\dvitopsCrayon@{\installCrayolaColors@}%
+\xydef@\dvitopsPS@@{\dvipsPS@}
+\xydef@\dvitopsPS@unload{\UnloadPS@
+ \let\UnloadPS@@=\UnloadPS@
+ \let\dvitopsPS@@=\dvitopsPS@ }
+\xydef@\dvitopsPStypes@{%
+ \xyinputorelse@{xyps-ps}{\xydrivernoload@{ps-ps}}%
+ \ifx\PSspecial@@\dvitopsSpecial@\else
+ \let\PSspecial@@=\dvitopsSpecial@
+ \let\PSmacro@@=\dvitopsMacro@
+ \let\PSdict@@=\dvitopsDict@
+ \let\PSspecialdict@@=\dvitopsDict@
+ \let\PSraw@@=\dvitopsRaw@
+ \let\PSinclude@@=\dvitopsInclude@
+ \let\xyPSobeylines@@=\obeyDVIPSlines@
+ \let\xyPScurrpt@@=\dvitopsCurrpt@@
+ \dvitops@@{PostScript}%
+ \fi
+ \XYpredict@ }
+\xywarnifdefined\dvitopsSpecial@
+\xywarnifdefined\dvitopsMacro@
+\xywarnifdefined\dvitopsDict@
+\xywarnifdefined\dvitopsInclude@
+\xywarnifdefined\dvitopsRaw@
+\xywarnifdefined\dvitopsOrigin@
+\xywarnifdefined\dvitopsBegin@
+\xywarnifdefined\dvitopsEnd@
+\xywarnifdefined\dvitopsRotate@x
+\xywarnifdefined\dvitopsTransform@x
+\xywarnifdefined\dvitopsColor@x
+{\catcode`\:=11
+ \gdef\dvitopsSpecial@#1{\special{dvitops: inline #1}}
+ \gdef\dvitopsMacro@#1{\special{dvitops: inline {#1}xy}}
+ \gdef\dvitopsDict@#1{\special{dvitops: inline #1}}
+ \gdef\dvitopsInclude@#1{\special{dvitops: prolog #1}}
+ \gdef\dvitopsRaw@#1{\special{dvitops: inline #1}}
+ \gdef\dvitopsOrigin@#1{\special{dvitops: origin #1}}
+ \gdef\dvitopsBegin@#1{\special{dvitops: begin #1}}
+ \gdef\dvitopsEnd@#1{\special{dvitops: end #1}}
+ \gdef\dvitopsRotate@x#1{\special{dvitops: rotate #1}}
+ \gdef\dvitopsTransform@x#1{\special{dvitops: transform #1}}
+ \gdef\dvitopsColor@x#1#2{\special{dvitops: #1 color #2}}
+}
+\catcode`\^^M=\active
+ \gdef\next{\catcode`\^^M=\active \let^^M=\space }}%
+\xylet@\obeyDVIPSlines@=\next
+\xydef@\dvitopsCurrpt@{\global\let\xyPScurrpt@@=\relax}%
+\xydef@\dvitopsPS@{\dvitopsPStypes@
+ \let\installxyps@@=\relax \installxyps@ }
+\xydef@\dvitopsRotate@@{\dvitopsRotate@}
+\xydef@\dvitopsRotate@{\dvitopsPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty
+ \DN@{\xyinputorelse@{xyps-r}{\xydrivernoload@{ps-r}}%
+ \installDVITOPSrotate@ }%
+ \else\DN@{\xydriverfail@{rotations are}\UnloadRotate@\relax}\fi
+ \next@ }
+\xydef@\dvitopsRotScale@{%
+ \def\xyrot@start{\dvitopsBegin@{rot}\dvitopsOrigin@{rot}}%
+ \def\xyrot@end(##1){\dvitopsEnd@{rot}\dvitopsRotate@x{##1}}%
+ \def\xyscale@start{\dvitopsBegin@{scal}\dvitopsOrigin@{scal}}%
+ \def\xyscale@end(##1,##2){%
+ \dvitopsEnd@{scal}\dvitopsTransform@x{##1 0 ##2 0}}%
+ }
+\xydef@\installDVITOPSrotate@{\installPSstyle@
+ \let\xyRotate@@=\dvitopsRotate@
+ \let\doSpecialRotate@@=\dvitopsSpecialRotate@
+ \let\xyscale@@=\dvitopsScale@
+ \dvitopsCurrpt@
+ \dvitopsRotScale@ \xyPSshapes@true }
+\xydef@\UnloadDVITOPSrotate@{\UnloadRotate@\relax}
+ \xydef@\dvitopsRotate@#1{\xyPSsplitPS@
+ {\dvitopsBegin@{rot}\dvitopsOrigin@{rot}}%
+ {\dvitopsEnd@{rot}\dvitopsRotate@x{#1}}}%
+ \xydef@\dvitopsScale@#1#2{\xyPSsplitPS@
+ {\dvitopsBegin@{scal}\dvitopsOrigin@{scal}}%
+ {\dvitopsEnd@{scal}\dvitopsTransform@x{#1 0 #2 0}}}
+ \xydef@\dvitopsSpecialRotate@#1@@{\dvitopsRotate@{#1}}
+\xydef@\dvitopsLine@@{\dvitopsLine@}
+\xydef@\dvitopsLine@{\dvitopsPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-l}{\xydrivernoload@{ps-l}}\installPSline@ }%
+ \else\DN@{\xydriverfail@{line-widths are}\UnloadLine@\relax}\fi
+ \next@ }
+\xydef@\dvitopsFrames@@{\dvitopsFrames@}
+\xydef@\dvitopsFrames@{\dvitopsPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-f}{\xydrivernoload@{ps-f}}\installPSframes@ }%
+ \else\DN@{\xydriverfail@{frames are}\UnloadFrames@\relax}\fi
+ \next@ }
+\xydef@\dvitopsTiles@{\dvitopsPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-t}{\xydrivernoload@{ps-t}}\installPSpatterns@ }%
+ \else\DN@{\xydriverfail@{Patterns are}\UnloadPSpatterns@\relax}\fi
+ \next@ }
+\xydef@\dvitopsTPIC@@{\dvitopsTPIC@}
+\xydef@\dvitopsTPIC@{\setupxyTPIC@}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyemtex.tex b/macros/generic/diagrams/xypic/texinputs/xyemtex.tex
new file mode 100644
index 0000000000..d1a7e76da0
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyemtex.tex
@@ -0,0 +1,101 @@
+%% xyemtex.tex from $Id: xyemtex.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``em-TeX'' back-end extension.
+%% Copyright (c) 1995-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{emtex}{em-TeX backend}{\stripRCS$Revision: 3.7 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xynew@{if}\ifEMspecials@
+\xydef@\UseEMspecials{\EMspecials@true}
+\xydef@\NoEMspecials{\EMspecials@false}
+\xydef@\xyemtex@lineto{\xyEM@special{lineto}}
+\xydef@\xyemtex@moveto{\xyEM@special{moveto}}
+\xydef@\xyemtex@line#1{\xyEM@special{line #1}}
+\xydef@\xyemtex@point#1{\xyEM@special{point #1}}
+\xydef@\xyemtex@pen#1{\addtostyletoks@{\xyEM@special{linewidth #1}}}
+{\catcode`:=12 \gdef\next#1{\special{em:#1}}}
+\xylet@\xyEM@special=\next
+{\catcode`:=12 \gdef\next#1{%
+ \W@{EM:#1 (\the\X@p,\the\Y@p),(\the\X@c,\the\Y@c)}\special{em:#1}}}
+\xylet@\xyEM@noisy=\next
+\xydef@\NoisyEMTeX{\let\xyEM@special=\xyEM@noisy}
+\xydef@\EMalternative@#1#2{%
+\expandafter\global\expandafter\let\csname origxy#2@\endcsname=#1%
+ \xdef#1{\noexpand\ifEMspecials@
+ \noexpand\expandafter\expandafter\noexpand\csname xyemtex@#2@\endcsname
+ \noexpand\else
+ \noexpand\expandafter\expandafter\noexpand\csname origxy#2@\endcsname
+ \noexpand\fi}}%
+\xydef@\setupxyEMTeX@{\xywarning@{using em-TeX specials}%
+ \EMalternative@{\solid@}{solid}%
+ \EMalternative@{\splinesolid@}{splinesolid}%
+ \let\setupxyEM@=\reloadxyEM@
+ \activateEM@ }
+\xydef@\xyunloadEM@{\xywarning@{EM specials turned off}%
+ \xywithoption{line}{\xysetup@@\uninstallEMline@ }%
+ \EMspecials@false
+ \let\setupxyEM@=\reloadxyEM@ }
+\xydef@\activateEM@{%
+ \xywithoption{line}{\xysetup@@\installEMline@}%
+ \EMspecials@true }
+\xydef@\reloadxyEM@{\xywarning@{EM specials back on}\activateEM@ }
+\xydef@\xyemtex@solid@{%
+ \ifInvisible@ \let\next@=\no@@
+ \else \DN@{\xyEMstraight@}\fi
+ \next@ }
+\xydef@\xyEMstraight@{\setupDirection@
+ \edef\Creset@@{\cfromthec@ \pfromthep@ \DirectionfromtheDirection@}%
+ \DN@##1##2{\def\checkoverlap@@{%
+ \ifdim##1\X@p>##1\X@c \let\next@=\relax \fi
+ \ifdim##2\Y@p>##2\Y@c \let\next@=\relax \fi}}%
+ \edef\nextii@{{\sd@X}{\sd@Y}}\expandafter\next@\nextii@
+ \noCshavep@@ \edef\Cshavep@@{\pfromthep@ \noexpand\resetDirection@}%
+ \noCshavec@@ \edef\Cshavec@@{\cfromthec@ \noexpand\resetDirection@}%
+ \ifHidden@\else
+ \ifdim\Y@c>\Y@max \Y@max=\Y@c \fi \ifdim\Y@p>\Y@max \Y@max=\Y@p \fi
+ \ifdim\Y@c<\Y@min \Y@min=\Y@c \fi \ifdim\Y@p<\Y@min \Y@min=\Y@p \fi
+ \ifdim\X@c>\X@max \X@max=\X@c \fi \ifdim\X@p>\X@max \X@max=\X@p \fi
+ \ifdim\X@c<\X@min \X@min=\X@c \fi \ifdim\X@p<\X@min \X@min=\X@p \fi \fi
+ \ifInvisible@\let\next@=\relax \else
+ \DN@{%
+ \setboxz@h{\kern\X@p \raise\Y@p\hbox{\xyemtex@moveto}}%
+ \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@
+ \setboxz@h{\boxz@ \kern\X@c \raise\Y@c\hbox{\xyemtex@lineto}}%
+ \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@ {\Drop@@}}%
+ \fi
+ \checkoverlap@@
+ \ifdim\d@X=\z@ \ifdim\d@Y=\z@ \DN@{\relax}\fi\fi \next@
+ \def\Cslidep@@{\noCslidep@@}\def\Cslidec@@{\noCslidec@@}%
+ \def\Calong@@{\noCalong@@}\Creset@@ }
+\xydef@\xyemtex@splinesolid@{\setbox\splinebox@=\copy\voidb@x
+ \multiply\splinetol@\thr@@
+ \gdef\splineextra@@{\xyemtex@moveto\gdef\splineextra@@{\xyemtex@lineto}}%
+ \def\xycrvdrop@{ }\def\xycrvconn@{}\splineset@@ }
+\xydef@\xyEMlinewidth@#1{\dimen@=#1\relax\edef\next@{\the\dimen@}}
+\xydef@\installEMline@{%
+ \let\xylinewidth@@=\xylinewidth@
+ \let\xylineSpecial@@=\xyemtex@pen
+ \let\transxyline@@=\xyEMlinewidth@ }
+\xydef@\uninstallEMline@{\UnloadLine@\relax}%
+\xydef@\UseEMlinewidth{\installEMline@}%
+\xydef@\NoEMlinewidth{\uninstallEMline@}%
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyframe.tex b/macros/generic/diagrams/xypic/texinputs/xyframe.tex
new file mode 100644
index 0000000000..c4a04214a6
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyframe.tex
@@ -0,0 +1,537 @@
+%% xyframe.tex from $Id: xyframe.doc,v 3.14 2012/05/24 00:30:38 krisrose Exp $
+%%
+%% Xy-pic ``Frames and Brackets'' extension.
+%% Copyright (c) 1991-1997 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{frame}{Frame and Bracket extension}{\stripRCS$Revision: 3.14 $}%
+ {Kristoffer H.~Rose}{krisrose@tug.org}%
+ {IBM T.~ J.\ Watson Research Center, P.O.~Box 704, Yorktown Heights, NY 10598 (USA)}
+\xydef@\frm{\hbox{}\dimen@=\L@c \advance\dimen@\R@c \wdz@=\dimen@
+ \ht\z@=\U@c \dp\z@=\D@c \dimen@=\U@c \advance\dimen@\D@c
+ \ifdim\wdz@=\z@ \def\Leftness@{.5}\else \quotient@\Leftness@\L@c\wdz@ \fi
+ \ifdim\dimen@=\z@ \def\Upness@{.5}\else \quotient@\Upness@\U@c\dimen@ \fi
+ \expandafter\Edge@c\expandafter{\prevEdge@@}\let\frmradius@@=\z@
+ \def\Drop@@{}%
+ \def\Connect@@{\xy@@{\save@\cmerge@\Y@p\X@p\D@p\U@p\L@p\R@p\Drop@@}\restore}%
+ \xyFN@\frm@i}
+\xylet@\frmradius@@=\z@
+\xydef@\frm@i{%
+ \addLT@\ifx\next \addGT@{\addLT@\DN@##1}{\def\frmradius@@{##1}\xyFN@\frm@i}%
+ \else \DN@##1##{\frm@{##1}}\fi \next@}
+\xydef@\frm@#1#2{\DNii@{frm#1{#2}}%
+ \expandafter\let\expandafter\next@\csname\codeof\nextii@\endcsname
+ \ifx\next@\relax \DNii@{frm{#2}}%
+ \expandafter\let\expandafter\next@\csname\codeof\nextii@\endcsname
+ \ifx\next@\relax \let\next@=\frm@generic \fi\fi \next@}
+\xydef@\frm@generic{\xyerror@{No generic frames yet!}{}}
+\xydef@\frmDrop@#1{%
+ \ifx\frmradius@@\z@ \addtoDrop@@{\let\frmradius@@=\z@ #1}%
+ \else \expandafter\addtoDrop@@\expandafter{%
+ \expandafter\def\expandafter\frmradius@@\expandafter{\frmradius@@}#1}\fi}
+\xydef@\EdgefromtheEdge@{%
+ \U@c=\the\U@c \D@c=\the\D@c \L@c=\the\L@c \R@c=\the\R@c
+ \Edge@c={\expandafter\noexpand\the\Edge@c}}
+\xydef@\prevEdgefromtheEdge@{%
+ \U@c=\the\U@c \D@c=\the\D@c \L@c=\the\L@c \R@c=\the\R@c
+ \noexpand\def\noexpand\prevEdge@@{\expandafter\noexpand\the\Edge@c}}
+\xydef@\addtoDrop@@#1{%
+ \expandafter\def\expandafter\Drop@@\expandafter{\Drop@@#1}}
+\xydef@\addbeforeDrop@@#1{\DNii@{#1}%
+ \expandafter\DN@\expandafter{\expandafter\nextii@\Drop@@}%
+ \expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\expandafter\Drop@@
+ \expandafter\expandafter\expandafter{\next@}}
+\xydefcsname@{frm{}}{}
+\xyletcsnamecsname@{frm[]{}}{frm{}}
+\xyletcsnamecsname@{frm[o]{}}{frm{}}
+\xydefcsname@{frm{.}}{\frmDrop@{\let\zerocorner=\framezerodot@@
+ \let\framehfill=\frm@doth@@ \let\framevfill=\frm@dotv@@
+ \framed@@{\frmradius@@}}}
+\xyletcsnamecsname@{frm[]{.}}{frm{.}}
+\xydef@\frm@doth@@{\setboxz@h{\kern5\B@\framezerodot@@\kern5\B@}\ht\z@=\B@
+ \dp\z@=\B@\kern5\B@\xleaders\boxz@\hss\kern5\B@}
+\xydef@\frm@dotv@@{\setboxz@h to2\B@{\hss\framezerodot@@\hss}\ht\z@=5\B@
+ \dp\z@=5\B@\kern5\B@\xleaders\boxz@\vss\kern5\B@}
+\xyletcsnamecsname@{frm{..}}{frm{.}}
+\xylet@\framezerodot@@=\zerodot
+\xydefcsname@{frm{-}}{\frmDrop@{\framed@\frmradius@@}}
+\xyletcsnamecsname@{frm[]{-}}{frm{-}}
+\xydef@\framed@{\let\zerocorner=\framezerodot@@
+ \let\framehfill=\frm@solidh@@ \let\framevfill=\frm@solidv@@ \framed@@}
+\xylet@\framesetthick@=\relax
+\xydef@\frm@solidh@@{\framesetthick@\leaders\hrule height\B@ depth\B@\hfill}
+\xydef@\frm@solidv@@{\framesetthick@\leaders\vrule width2\B@\vfill}
+\xydefcsname@{frm{=}}{\frmDrop@{\framed@\frmradius@@
+ {\advance\L@c-2\p@ \advance\R@c-2\p@ \advance\U@c-2\p@ \advance\D@c-2\p@
+ \dimen@=\frmradius@@
+ \ifdim\dimen@>2\p@ \advance\dimen@-2\p@ \else \dimen@=\z@\fi
+ \framed@\dimen@}}}
+\xyletcsnamecsname@{frm[]{=}}{frm{=}}
+\xydef@\framesetthick@line{\B@=.5\xylinethick@}
+\xydef@\frm@thickc@@{\hbox{\framesetthick@line
+ \vrule height.5\B@ depth.5\B@ width\B@}}
+\xywithoption{line}{%
+ \let\framezerodot@@\frm@thickc@@ \let\framesetthick@=\framesetthick@line}
+\xydef@\framed@@#1{\setboxz@h{\R@=#1\relax
+ \dimen@=\L@c \advance\dimen@\R@c \dimen@ii=\U@c \advance\dimen@ii\D@c
+ \ifdim.5\dimen@<\R@ \R@=.5\dimen@ \fi
+ \ifdim.5\dimen@ii<\R@ \R@=.5\dimen@ii \fi
+ \A@=\X@c \advance\A@-\L@c \B@=\Y@c \advance\B@-\D@c
+ \ifdim\R@<\p@\else \cirrestrict@@ \fi
+ \dimen@=2\R@ \advance\dimen@-\L@c \advance\dimen@-\R@c
+ \ifdim\dimen@>\z@ \advance\A@-.5\dimen@ \fi
+ \dimen@=2\R@ \advance\dimen@-\U@c \advance\dimen@-\D@c
+ \ifdim\dimen@>\z@ \advance\B@-.5\dimen@ \fi
+ \kern\A@ \raise\B@\vbox to \dimen@ii{\framed@body@@}}%
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}
+\xydef@\framed@body@{%
+ \advance\dimen@ii.22\p@ \advance\dimen@-.2\p@
+ \setboxz@h{\corn@@4\R@}\A@=-.5\wdz@ \B@=.5\xydashw@
+ \dimen@=\L@c \advance\dimen@\R@c \advance\dimen@-.2\p@
+ \setboxz@h to\dimen@{\kern\A@ \boxz@ \framehfill\corn@@3\R@\kern\A@}%
+ \advance\dimen@ii-\dp\z@ \kern-\ht\z@ \nointerlineskip\boxz@
+ \dimen@=\L@c \advance\dimen@\R@c \advance\dimen@-.2\p@
+ \setboxz@h to\dimen@{\kern\A@\corn@@1\R@\framehfill\corn@@2\R@\kern\A@}%
+ \advance\dimen@ii-\ht\z@
+ \dimen@=\L@c \advance\dimen@\R@c \advance\dimen@.2\p@
+ \nointerlineskip\hbox to\dimen@{%
+ \setbox\z@=\vbox to\dimen@ii{\framevfill}\kern-.5\wdz@\copy\z@
+ \hss \copy\z@\kern-.5\wdz@ }%
+ \nointerlineskip\boxz@ \vss \kern\z@}
+\xylet@\framed@body@@=\framed@body@
+\xylet@\zerocorner=\framezerodot@@
+\xydef@\solidcorner@#1#2{\hbox\bgroup \R@=#2\relax
+ \ifdim\R@<\p@ \zerocorner
+ \else \cirrestrict@@ \multiply\count@8
+ \setboxz@h{\corn@x@@{#1}}\dimen@=\wdz@
+ \ifcase#1\or \ht\z@=\z@ \kern\dimen@ \raise\dimen@\boxz@
+ \or \ht\z@=\z@ \raise\dimen@\boxz@ \kern\dimen@
+ \or \dp\z@=\z@ \lower\dimen@\boxz@ \kern\dimen@
+ \or \dp\z@=\z@ \kern\dimen@ \lower\dimen@\boxz@ \fi
+ \vrule height\dimen@ depth\dimen@ width\z@\fi
+ \edef\tmp@{\egroup \U@c=\the\dimen@}\tmp@ \D@c=\U@c \L@c=\U@c \R@c=\U@c
+ \Edge@c={\circleEdge}\ignorespaces}
+\xydef@\corn@x@#1{\ifcase#1\or
+ \circhar@@\z@ \circhar@@\@ne\or\circhar@@\tw@ \circhar@@3\or
+ \circhar@@5\circhar@@4\or\circhar@@7\circhar@@6\fi}
+\xylet@\corn@x@@=\corn@x@
+\xydef@\corn@@{\DN@{\solidcorner@}%
+ \ifx\framehfill\frm@doth@@ \DN@{\let\cirrestrict@@=\relax
+ \let\corn@x@@=\dotcorner@@ \let\zerodot=\framezerodot@@
+ \solidcorner@ }%
+ \else\ifx\framehfill\frm@dashh@@ \DN@{\let\cirrestrict@@=\relax
+ \let\corn@x@@=\dashcorner@@ \let\zerodot=\framezerodot@@
+ \solidcorner@ }%
+ \fi\fi \next@}
+\xydef@\dotcorner@@#1{\zerocorner}
+\xydef@\dashcorner@@#1{\zerocorner}
+\xywithoption{curve}{%
+ \let\dotcorner@@=\dotcorner@ \let\dashcorner@@=\dashcorner@}
+\xydefcsname@{frm{--}}{%
+ \frmDrop@{\let\zerocorner=\framezerodot@@
+ \let\framehfill=\frm@dashh@@ \let\framevfill=\frm@dashv@@
+ \framed@@\frmradius@@}}
+\xyletcsnamecsname@{frm[]{--}}{frm{--}}
+\xydef@\frm@dashh@@{\setboxz@h{\dashhfillchar}%
+ \ht\z@=\B@ \dp\z@=\B@ \wdz@=2\xydashl@
+ \copy\z@ \xleaders\copy\z@\hss \boxz@\kern-\xydashl@}
+\xydef@\frm@dashv@@{\setboxz@h to2\B@{\hss\dashvfillchar\hss}\ht\z@=\z@
+ \dp\z@=2\xydashl@ \nointerlineskip\copy\z@ \xleaders\copy\z@\vss
+ \nointerlineskip\boxz@\kern-\xydashl@}%
+\xydef@\dashhfillchar{{\rDirection@\xydashl@ \line@@}}
+\xydef@\dashvfillchar{{\dDirection@\xydashl@ \line@@}}
+\xydefcsname@{frm{o-}}{%
+ \ifdim\frmradius@@<2\xydashl@\relax \dimen@=.8\xydashl@
+ \expandafter\def\expandafter\frmradius@@\expandafter{\the\dimen@}\fi
+ \frmDrop@{\let\zerocorner=\framezerodot@@
+ \let\framehfill=\frm@rddashh@@ \let\framevfill=\frm@rddashv@@
+ \framed@@\frmradius@@}}%
+\xydef@\frm@rddashh@@{\setboxz@h{\kern\xydashl@\dashhfillchar}%
+ \ht\z@=\B@ \dp\z@=\B@ \copy\z@ \xleaders\copy\z@\hss \boxz@ \kern\xydashl@}
+\xydef@\frm@rddashv@@{\ifdim\dimen@ii<2\xydashl@\else
+ \setbox\z@=\vbox to2\xydashl@{\hbox to2\B@{\hss\dashvfillchar\hss}\vss}%
+ \kern\xydashl@ \copy\z@ \xleaders\copy\z@\vss
+ {\ifdim\dimen@ii<2\xydashl@\else\aftergroup\boxz@\fi}\fi}
+\xydefcsname@{frm{,}}{%
+ \ifx\frmradius@@\z@ \shaded@{1.2\p@}\else \shaded@\frmradius@@ \fi}
+\xydef@\shaded@#1{\frmDrop@{\R@=#1\relax
+ {\advance\X@c\R@ \advance\Y@c-\D@c \U@c=\z@ \D@c=\R@ \blacked@}%
+ {\advance\X@c\R@c \advance\Y@c-\R@ \L@c=\z@ \R@c=\R@ \blacked@}}}
+\xydefcsname@{frm{-,}}{\addtoDrop@@{\drop\frm{-}\drop\frm{,}}}
+\xydef@\blacked@{\setboxz@h{%
+ \A@=\X@c \advance\A@-\L@c \dimen@=\L@c \advance\dimen@\R@c
+ \B@=\Y@c \advance\B@-\D@c \dimen@ii=\Y@c \advance\dimen@ii\U@c
+ \advance\A@-.5\xydashw@
+ \kern\A@ \blacked@@ }%
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}
+\xydef@\bblacked@{\setboxz@h{%
+ \dimen@=\L@c \advance\dimen@\R@c \B@=-\D@c \dimen@ii=\U@c
+ \kern-\L@c \blacked@@ \kern-\dimen@ \kern\L@c}%
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}
+\xydef@\blacked@@{\vrule width\dimen@ depth-\B@ height\dimen@ii}
+\xydefcsname@{frm{o}}{%
+ \ifx\frmradius@@\z@
+ \frmDrop@{\dimen@=.5\L@c \advance\dimen@.5\R@c
+ \let\framehfill=\frm@solidh@@ \let\framevfill=\frm@solidv@@
+ \circled@\dimen@}%
+ \else
+ \frmDrop@{\let\framehfill=\frm@solidh@@
+ \let\framevfill=\frm@solidv@@ \circled@\frmradius@@}%
+ \fi}
+\xydefcsname@{frm{oo}}{%
+ \ifx\frmradius@@\z@
+ \frmDrop@{\dimen@=.5\L@c \advance\dimen@.5\R@c
+ \let\framehfill=\frm@solidh@@ \let\framevfill=\frm@solidv@@
+ {\circled@\dimen@}\advance\dimen@-2.1\p@ \circled@\dimen@}%
+ \else
+ \frmDrop@{\dimen@=\frmradius@@
+ \let\framehfill=\frm@solidh@@ \let\framevfill=\frm@solidv@@
+ {\circled@\dimen@}\advance\dimen@-2.1\p@ \circled@\dimen@}%
+ \fi}
+\xydef@\circled@#1{\setboxz@h\bgroup \R@=#1\relax
+ \setboxz@h{\vbox{\circled@x@@}}%
+ \A@=\X@c \advance\A@-.5\wd\z@
+ \B@=\Y@c \advance\B@-.5\ht\z@ \advance\B@.5\dp\z@ \advance\B@.2\p@
+ \edef\tmp@{\egroup\dimen@=\the\wdz@}%
+ \kern\A@ \raise\B@\boxz@
+ \tmp@ \divide\dimen@4 \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}
+\xydef@\circled@x@{\hbox{\corn@@4\R@ \corn@@3\R@}%
+ \nointerlineskip\hbox{\corn@@1\R@ \corn@@2\R@}}
+\xylet@\circled@x@@=\circled@x@
+\xydefcsname@{frm{.o}}{%
+ \ifx\frmradius@@\z@ \frmDrop@{\let\framehfill=\frm@doth@@
+ \dimen@=.5\L@c \advance\dimen@.5\R@c \circled@\dimen@}%
+ \else
+ \frmDrop@{\let\framehfill=\frm@doth@@ \circled@\frmradius@@}%
+ \fi}
+\xydefcsname@{frm{-o}}{%
+ \ifx\frmradius@@\z@ \frmDrop@{\let\framehfill=\frm@dashh@@
+ \dimen@=.5\L@c \advance\dimen@.5\R@c \circled@\dimen@}%
+ \else
+ \frmDrop@{\let\framehfill=\frm@dashh@@ \circled@\frmradius@@}%
+ \fi}
+\xydefcsname@{frm{e}}{\ellipse@whichfrm@\ellipsesolidframed@}%
+\xydefcsname@{frm{.e}}{\ellipse@whichfrm@\ellipsedotframed@}%
+\xydefcsname@{frm{-e}}{\ellipse@whichfrm@\ellipsedashframed@}%
+\xydefcsname@{frm{ee}}{\ellipse@whichdblfrm@\ellipsesolidframed@}%
+\xydefcsname@{frm2{.e}}{\ellipse@whichdblfrm@\ellipsedotframed@}%
+\xydefcsname@{frm2{-e}}{\ellipse@whichdblfrm@\ellipsedashframed@}%
+\xyletcsnamecsname@{frm[o]{-}}{frm{e}}
+\xyletcsnamecsname@{frm[o]{=}}{frm{ee}}
+\xyletcsnamecsname@{frm[o]{.}}{frm{.e}}
+\xyletcsnamecsname@{frm[o]{--}}{frm{-e}}
+\xydef@\ellipse@whichfrm@#1{%
+ \ifx\frmradius@@\z@
+ \frmDrop@{#1\dimen@=.5\L@c \advance\dimen@.5\R@c
+ \dimen@ii=.5\U@c \advance\dimen@ii.5\D@c
+ \edef\next@{\noexpand\ellipsed@{\the\dimen@}{\the\dimen@ii}}\next@ }%
+ \else
+ \frmDrop@{#1\expandafter\ellipsed@i@\frmradius@@,,@@}%
+ \fi}
+\xydef@\ellipse@whichdblfrm@#1{%
+ \ifx\frmradius@@\z@
+ \frmDrop@{#1\dimen@=.5\L@c \advance\dimen@.5\R@c
+ \dimen@ii=.5\U@c \advance\dimen@ii.5\D@c
+ \edef\next@{\noexpand\ellipsed@e@{\the\dimen@}{\the\dimen@ii}}\next@ }%
+ \else
+ \frmDrop@{#1\expandafter\ellipsed@ei@\frmradius@@,,@@}%
+ \fi}
+\xydef@\ellipsed@i@#1,#2,#3@@{\DNii@{,}\DN@{#3}%
+ \ifx\next@\nextii@
+ \dimen@=#1\relax \dimen@ii=#2\relax
+ \edef\next@{\noexpand\ellipsed@{\the\dimen@}{\the\dimen@ii}}%
+ \else \ifx\next@\empty \DN@{#2}%
+ \ifx\next@\empty \DN@{#1}%
+ \dimen@=.5\L@c \advance\dimen@.5\R@c
+ \dimen@ii=.5\U@c \advance\dimen@ii.5\D@c
+ \edef\next@{\noexpand\ellipsed@{\the\dimen@}{\the\dimen@ii}}%
+ \else \dimen@=#1\relax
+ \edef\next@{\noexpand\ellipsed@{\the\dimen@}{\the\dimen@ii}}%
+ \fi
+ \else\xywarning@{ignoring extra tokens in elliptical frame: #3 }%
+ \dimen@=#1\relax \dimen@ii=#2\relax
+ \edef\next@{\noexpand\ellipsed@{\the\dimen@}{\the\dimen@ii}}%
+ \fi\fi \next@ }
+\xydef@\ellipsed@ei@#1,#2,#3@@{\DNii@{,}\DN@{#3}%
+ \ifx\next@\nextii@
+ \dimen@=#1\relax \dimen@ii=#2\relax
+ \edef\next@{\noexpand\ellipsed@e@{\the\dimen@}{\the\dimen@ii}}%
+ \else \ifx\next@\empty \DN@{#2}%
+ \ifx\next@\empty \DN@{#1}%
+ \dimen@=.5\L@c \advance\dimen@.5\R@c
+ \dimen@ii=.5\U@c \advance\dimen@ii.5\D@c
+ \edef\next@{\noexpand\ellipsed@e@{\the\dimen@}{\the\dimen@ii}}%
+ \else
+ \dimen@=#1\relax
+ \edef\next@{\noexpand\ellipsed@e@{\the\dimen@}{\the\dimen@}}%
+ \fi
+ \else\xywarning@{ignoring extra tokens in elliptical frame: #3 }%
+ \dimen@=#1\relax \dimen@ii=#2\relax
+ \edef\next@{\noexpand\ellipsed@e@{\the\dimen@}{\the\dimen@ii}}%
+ \fi\fi \next@ }
+\xydef@\ellipsed@e@#1#2{%
+ \dimen@=#1\relax \dimen@ii=#2\relax
+ \edef\next@{\noexpand\ellipsed@{\the\dimen@}{\the\dimen@ii}}\next@
+ \dimen@=#1\relax \dimen@ii=#2\relax
+ \ifdim\dimen@>2\p@ \advance\dimen@-2\p@ \else \dimen@=\z@\fi
+ \ifdim\dimen@ii>2\p@ \advance\dimen@ii-2\p@ \else \dimen@ii=\z@\fi
+ \edef\next@{\noexpand\ellipsed@{\the\dimen@}{\the\dimen@ii}}\next@ }%
+\xydef@\ellipsed@#1#2{\setboxz@h\bgroup \relax
+ \setboxz@h{\vbox{\ellipsed@x@@{#1}{#2}}}%
+ \A@=\X@c \advance\A@-.5\wd\z@
+ \B@=\Y@c \advance\B@-.5\ht\z@ \advance\B@.5\dp\z@
+ \edef\tmp@{\egroup\dimen@=\the\wdz@}%
+ \kern\A@ \raise\B@\boxz@
+ \tmp@ \divide\dimen@4 \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}
+\xydef@\ellipsed@i#1#2{{\R@c=#1\relax\L@c=\R@c
+ \U@c=#2\relax\D@c=\U@c \ellipsed@{#1}{#2}}}
+\xydef@\ellipsed@x@#1#2{\R@=#1\relax\advance\R@#2\relax
+ \divide\R@\tw@ \circled@x@@ }
+\xylet@\ellipsed@x@@=\ellipsed@x@
+\xydef@\ellipsesolidframed@{%
+ \let\framehfill=\frm@solidh@@ \let\framevfill=\frm@solidv@@}
+\xydef@\ellipsedotframed@{%
+ \let\framehfill=\frm@doth@@ \let\framevfill=\frm@dotv@@}
+\xydef@\ellipsedashframed@{%
+ \let\framehfill=\frm@dashh@@ \let\framevfill=\frm@dashv@@}
+\xydefcsname@{frm{\{}}{\addtoDrop@@{\lbraced}}
+\xydefcsname@{frm{\}}}{\addtoDrop@@{\rbraced}}
+\xydefcsname@{frm{^\}}}{\addtoDrop@@{\ubraced}}
+\xydefcsname@{frm{_\}}}{\addtoDrop@@{\dbraced}}
+\xydef@\dbraced{\xy@@{\setboxz@h{%
+ \A@=\X@c \advance\A@-\L@c \B@=\Y@c \advance\B@-\D@c
+ \setboxz@h{$\m@th\bracelu$}\dimen@=2\wdz@ \advance\B@-.5\ht\z@
+ \ifdim\R@c<\dimen@ \R@c=\dimen@ \fi
+ \ifdim\L@c<\dimen@ \advance\A@-\dimen@ \advance\A@\L@c \L@c=\dimen@ \fi
+ \advance\A@-.25pt
+ \kern\A@\raise\B@\hbox{%
+ \hbox to\L@c{$\m@th\bracelu\leaders\vrule\hfil\bracerd$}%
+ \kern.5pt
+ \hbox to\R@c{$\m@th\braceld\leaders\vrule\hfil\braceru$}}}%
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}}
+\xydef@\ubraced{\xy@@{\setboxz@h{%
+ \A@=\X@c \advance\A@-\L@c \B@=\Y@c \advance\B@\U@c
+ \setboxz@h{$\m@th\bracelu$}\dimen@=2\wdz@
+ \ifdim\R@c<\dimen@ \R@c=\dimen@ \fi
+ \ifdim\L@c<\dimen@ \advance\A@-\dimen@ \advance\A@\L@c \L@c=\dimen@ \fi
+ \advance\A@-.25pt
+ \kern\A@\raise\B@\hbox{%
+ \hbox to\L@c{$\m@th\braceld\leaders\vrule\hfil\braceru$}%
+ \kern.5pt
+ \hbox to\R@c{$\m@th\bracelu\leaders\vrule\hfil\bracerd$}}}%
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}}
+{\catcode`\"=12
+ \global\mathchardef\braceur="338
+ \global\mathchardef\braceul="339
+ \global\mathchardef\bracedr="33A
+ \global\mathchardef\bracedl="33B
+ \global\mathchardef\bracecl="33C
+ \global\mathchardef\bracecr="33D
+ \global\mathchardef\bracec="33E }
+\xydef@\lbraced{\xy@@{\setboxz@h{%
+ \A@=\X@c \advance\A@-\L@c \B@=\Y@c \advance\B@-\D@c
+ \setboxz@h{$\m@th\bracecl$}\dimen@ii=\dp\z@ \advance\A@-.5\wdz@
+ \setboxz@h{$\m@th\bracec$}\dimen@=\dp\z@
+ \ifdim\U@c<.5\dimen@ \U@c=.5\dimen@ \fi
+ \ifdim\D@c<.5\dimen@ \advance\B@-.5\dimen@ \advance\B@\D@c \D@c=.5\dimen@ \fi
+ \advance\U@c.6\p@ \advance\D@c.6\p@ \advance\B@-.6\p@
+ \kern\A@\raise\B@\vbox{\vbox to\U@c{%
+ \nointerlineskip\hbox{$\m@th\braceur$}%
+ \kern-.61\dimen@ \cleaders\copy\z@\vfil \kern-.4\dimen@
+ \nointerlineskip\hbox{$\m@th\bracecl$}\kern-.5\dimen@ii}%
+ \nointerlineskip\vbox to\D@c{\kern.5\dimen@ii
+ \kern-.4\dimen@ \cleaders\copy\z@\vfil \kern-.61\dimen@
+ \nointerlineskip\hbox{$\m@th\bracedr$}\kern\z@}}}%
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}}
+\xydef@\rbraced{\xy@@{\setboxz@h{%
+ \A@=\X@c \advance\A@\R@c \B@=\Y@c \advance\B@-\D@c
+ \setboxz@h{$\m@th\bracecr$}\dimen@ii=\dp\z@ \advance\A@-.5\wdz@
+ \setboxz@h{$\m@th\bracec$}\dimen@=\dp\z@
+ \ifdim\U@c<.5\dimen@ \U@c=.5\dimen@ \fi
+ \ifdim\D@c<.5\dimen@ \advance\B@-.5\dimen@ \advance\B@\D@c \D@c=.5\dimen@ \fi
+ \advance\U@c.6\p@ \advance\D@c.6\p@ \advance\B@-.6\p@
+ \kern\A@\raise\B@\vbox{\vbox to\U@c{%
+ \nointerlineskip\hbox{$\m@th\braceul$}%
+ \kern-.61\dimen@ \cleaders\copy\z@\vfil \kern-.4\dimen@
+ \nointerlineskip\hbox{$\m@th\bracecr$}\kern-.5\dimen@ii}%
+ \nointerlineskip\vbox to\D@c{\kern.5\dimen@ii
+ \kern-.4\dimen@ \cleaders\copy\z@\vfil \kern-.61\dimen@
+ \nointerlineskip\hbox{$\m@th\bracedl$}\kern\z@}}}%
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}}
+\xydefcsname@{frm{(}}{\addtoDrop@@{\lparenthesized}}
+\xydefcsname@{frm{)}}{\addtoDrop@@{\rparenthesized}}
+\xydefcsname@{frm{^)}}{\addtoDrop@@{\uparenthesized}}
+\xydefcsname@{frm{_)}}{\addtoDrop@@{\dparenthesized}}
+\xydef@\dparenthesized{\xy@@{\setboxz@h{%
+ \A@=\X@c \advance\A@-\L@c \B@=\Y@c \advance\B@-\D@c
+ \setboxz@h{$\m@th\bracelu$}\dimen@=2\wdz@ \advance\B@-.5\ht\z@
+ \ifdim\R@c<\dimen@ \R@c=\dimen@ \fi
+ \ifdim\L@c<\dimen@ \advance\A@-\dimen@ \advance\A@\L@c \L@c=\dimen@ \fi
+ \dimen@=\L@c \advance\dimen@\R@c
+ \kern\A@\raise\B@\hbox to\dimen@{%
+ $\m@th\bracelu\leaders\vrule\hfil\braceru$}}%
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}}
+\xydef@\uparenthesized{\xy@@{\setboxz@h{%
+ \A@=\X@c \advance\A@-\L@c \B@=\Y@c \advance\B@\U@c
+ \setboxz@h{$\m@th\bracelu$}\dimen@=2\wdz@
+ \ifdim\R@c<\dimen@ \R@c=\dimen@ \fi
+ \ifdim\L@c<\dimen@ \advance\A@-\dimen@ \advance\A@\L@c \L@c=\dimen@ \fi
+ \dimen@=\L@c \advance\dimen@\R@c
+ \kern\A@\raise\B@\hbox to\dimen@{%
+ $\m@th\braceld\leaders\vrule\hfil\bracerd$}}%
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}}
+\xydef@\lparenthesized{\xy@@{\setboxz@h{%
+ \A@=\X@c \advance\A@-\L@c \B@=\Y@c \advance\B@-\D@c
+ \setboxz@h{$\m@th\bracecr$}\dimen@ii=\dp\z@ \advance\A@-.5\wdz@
+ \setboxz@h{$\m@th\bracec$}\dimen@=\dp\z@
+ \ifdim\U@c<.5\dimen@ \U@c=.5\dimen@ \fi
+ \ifdim\D@c<.5\dimen@ \advance\B@-.5\dimen@ \advance\B@\D@c \D@c=.5\dimen@ \fi
+ \advance\U@c.6\p@ \advance\D@c.6\p@ \advance\B@-.6\p@
+ \dimen@ii\U@c \advance\dimen@ii\D@c
+ \kern\A@\raise\B@\vbox to \dimen@ii{%
+ \nointerlineskip\hbox{$\m@th\braceur$}%
+ \kern-.61\dimen@ \cleaders\copy\z@\vfil \kern-.61\dimen@
+ \nointerlineskip\hbox{$\m@th\bracedr$}\kern\z@}}%
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}}
+\xydef@\rparenthesized{\xy@@{\setboxz@h{%
+ \A@=\X@c \advance\A@\R@c \B@=\Y@c \advance\B@-\D@c
+ \setboxz@h{$\m@th\bracecr$}\dimen@ii=\dp\z@ \advance\A@-.5\wdz@
+ \setboxz@h{$\m@th\bracec$}\dimen@=\dp\z@
+ \ifdim\U@c<.5\dimen@ \U@c=.5\dimen@ \fi
+ \ifdim\D@c<.5\dimen@ \advance\B@-.5\dimen@ \advance\B@\D@c \D@c=.5\dimen@ \fi
+ \advance\U@c.6\p@ \advance\D@c.6\p@ \advance\B@-.6\p@
+ \dimen@ii\U@c \advance\dimen@ii\D@c
+ \kern\A@\raise\B@\vbox to \dimen@ii{%
+ \nointerlineskip\hbox{$\m@th\braceul$}%
+ \kern-.61\dimen@ \cleaders\copy\z@\vfil \kern-.61\dimen@
+ \nointerlineskip\hbox{$\m@th\bracedl$}\kern\z@}}%
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}}
+\xydefcsname@{frm{*}}{%
+ \expandafter\frmDrop@\expandafter{%
+ \expandafter\def\expandafter\prevEdge@@\expandafter{\prevEdge@@}%
+ \frame@fill@@\frmradius@@}}
+\xydefcsname@{frm{**}}{%
+ \expandafter\frmDrop@\expandafter{%
+ \expandafter\def\expandafter\prevEdge@@\expandafter{\prevEdge@@}%
+ \frame@emph@@\frmradius@@}}
+\xydef@\frame@fill@#1{\filled@{#1}\empty}
+\xydef@\frame@emph@#1{\framed@\frmradius@@}
+\xylet@\frame@fill@@=\frame@fill@
+\xylet@\frame@emph@@=\frame@emph@
+\xydef@\filled@#1{\R@=#1\relax
+ \expandafter\DNii@\expandafter{\prevEdge@@}%
+ \DN@{\rectangleEdge}\ifx\next@\prevEdge@@
+ \ifdim\R@=\z@ \DN@{\filled@Rectangle@}%
+ \else \DN@{\filled@Oval@}\fi
+ \else \DN@{\circleEdge}\ifx\next@\prevEdge@@
+ \ifdim\R@=\z@ \DN@{\filled@Ellipse@}%
+ \else \DN@{\restR@max\filled@Circle@}\fi
+ \else
+ \ifdim\R@=\z@ \DN@{\filled@Rectangle@}%
+ \else \DN@{\filled@Circle@}\fi
+ \fi\fi \next@}
+\xydef@\restR@max{%
+ \dimen@=\L@c\advance\dimen@\R@c
+ \dimen@ii=\U@c \advance\dimen@ii\D@c
+ \ifdim\dimen@ii>\dimen@ \dimen@=\dimen@ii\fi
+ \ifdim\dimen@>\z@ \divide\dimen@\tw@
+ \ifdim\R@>\dimen@\R@=\dimen@\fi\fi }
+\xylet@\filledRectangle@@=\bblacked@
+\xylet@\filledCircle@@=\bblacked@
+\xylet@\filledEllipse@@=\bblacked@
+\xylet@\filledOval@@=\bblacked@
+\xydef@\filled@Region@#1#2{\setboxz@h\bgroup
+ \setboxz@h{\vbox{#1#2\empty}}%
+ \A@=\X@c \advance\A@-.5\wd\z@
+ \B@=\Y@c \advance\B@-.5\ht\z@ \advance\B@.5\dp\z@
+ \edef\tmp@{\egroup\dimen@=\the\wdz@}%
+ \kern\A@ \raise\B@\boxz@ \kern-\A@
+ \tmp@ \divide\dimen@\tw@ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \styledboxz@}
+\xydef@\filled@Rectangle@{\filled@Region@\filledRectangle@@}
+\xydef@\filled@Oval@{\filled@Region@\filledOval@@}
+\xydef@\filled@Circle@{\filled@Region@\filledCircle@@}
+\xydef@\filled@Ellipse@{\filled@Region@\filledEllipse@@}
+\xydefcsname@{shape [F...]}#1{\xyFN@\Fshape@#1:@}
+\xylet@\whichframe@@=\empty
+\xylet@\whichoptions@@=\empty
+\xydef@\Fshape@#1:{\def\whichframe@@{{#1}}%
+ \DN@{{}}\ifx\whichframe@@\next@ \def\whichframe@@{{-}}\fi
+ \expandafter\DN@\expandafter{\the\Edge@c}\DNii@{\circleEdge}\ifx\next@\nextii@
+ \DN@##1{\def\whichframe@@{[o]##1}}%
+ \expandafter\next@\expandafter{\whichframe@@}\fi
+ \let\whichoptions@@=\empty \xyFN@\Fshape@i}
+\xydef@\Fshape@i{%
+ \ifx @\next \let\next@=\Fshape@x
+ \else\addLT@\ifx\next \let\next@=\Fshape@iii
+ \else \let\next@=\Fshape@ii \fi\fi \next@}
+\xydef@\Fshape@ii#1:{%
+ \expandafter\def\expandafter\whichoptions@@\expandafter{\whichoptions@@[#1]}%
+ \xyFN@\Fshape@i}
+\xydef@\Fshape@iii#1:{\DN@##1{\def\whichframe@@{#1##1}}%
+ \expandafter\next@\expandafter{\whichframe@@}\xyFN@\Fshape@i}
+\xydef@\Fshape@x @{%
+ \edef\next@##1{\noexpand\addbeforeDrop@@{{\EdgefromtheEdge@##1}}}%
+ \DNii@##1##2{\next@{\saveframestyles@{\setbox\z@=\object##2\frm##1%
+ \xypre@Style@@\Drop@@\xypost@Style@@\restoreframestyles@}}}%
+ \expandafter\expandafter\expandafter\nextii@
+ \expandafter\expandafter\expandafter{%
+ \expandafter\whichframe@@\expandafter}\expandafter{\whichoptions@@}}
+\xydef@\saveframestyles@{%
+ \expandafter\def\expandafter\afterframe@preStyle@\expandafter{\preXY@style@}%
+ \expandafter\def\expandafter\afterframe@postStyle@\expandafter{\postXY@style@}}
+\xydef@\restoreframestyles@{%
+ \expandafter\gdef\expandafter\preXY@style@\expandafter{\afterframe@preStyle@}%
+ \expandafter\gdef\expandafter\postXY@style@\expandafter{\afterframe@postStyle@}%
+ \def\afterframe@preStyle@{}\def\afterframe@postStyle@{}}
+\xydef@\xycircleframe@x@{\L@=\R@ \xycircleframe@x@i}%
+\xydef@\xyellipseframe@x@#1#2{\R@=#1\relax \L@=#2\relax \xycircleframe@x@i}
+\xydef@\xycircleframe@x@i{%
+ \ifx\framehfill\frm@solidh@@\def\circleSTYLE@{}%
+ \else\ifx\framehfill\frm@doth@@
+ \expandafter\def\expandafter\circleSTYLE@\expandafter{\addDOT@{}}%
+ \else\ifx\framehfill\frm@dashh@@
+ \expandafter\expandafter\expandafter\def\expandafter\expandafter
+ \expandafter\circleSTYLE@\expandafter\expandafter\expandafter
+ {\expandafter\addDASH@\addDASH@{}}%
+ \fi\fi\fi \xycircleframe@x@x }
+\xydef@\xycircleframe@x@x{\hbox{\vbox{\vskip\L@
+ \hbox to2\R@{\hfill \buildcircle@ \hfill}\vskip\L@ }}}
+\xydef@\UseCurveFrames@{%
+ \let\circled@x@@=\xycircleframe@x@
+ \let\ellipsed@x@@=\xyellipseframe@x@ }
+\def\UseCurveFrames{\xywithoption{curve}{\UseCurveFrames@}}%
+\xydef@\UseFontFrames@{%
+ \let\circled@x@@=\circled@x@
+ \let\ellipsed@x@@=\ellipsed@x@ }
+\xylet@\UseFontFrames=\UseFontFrames@
+\xydef@\UnloadFrames@{%
+ \let\framed@body@@=\framed@body@
+ \let\circled@x@@=\circled@x@
+ \let\ellipsed@x@@=\ellipsed@x@
+ \let\frame@fill@@=\frame@fill@
+ \let\frame@emph@@=\frame@emph@
+ \let\filledRectangle@@=\bblacked@
+ \let\filledCircle@@=\bblacked@
+ \let\filledEllipse@@=\bblacked@
+ \let\filledOval@@=\bblacked@
+}
+\xyaddunsupport{frame}\UnloadFrames@
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xygraph.tex b/macros/generic/diagrams/xypic/texinputs/xygraph.tex
new file mode 100644
index 0000000000..fef420ce6f
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xygraph.tex
@@ -0,0 +1,219 @@
+%% xygraph.tex from $Id: xygraph.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Graph Combinator feature'' option.
+%% Copyright (c) 1994-1997 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{graph}{Graph feature}{\stripRCS$Revision: 3.11 $}%
+ {Kristoffer H.~Rose}{krisrose@tug.org}%
+ {IBM T.~ J.\ Watson Research Center, P.O.~Box 704, Yorktown Heights, NY 10598 (USA)}
+\xyrequire{arrow}\xycatcodes
+\xydef@\xygraph#1{\relax\graph#1\endgraph}
+\xydef@\graph{\if\inxy@ \DN@{\xy@@{\nter@{}}}%
+ \else \DN@{\xy \xy@\xy{\nter@\endxy}}\fi \next@
+ \xy@\xygraph{\senter@ \idfromc@{?NODE}\spushc@
+ \expandafter\let\expandafter\next@\csname Q@graphbase\endcsname
+ \ifx\next@\relax \setbase@\z@\z@{3pc}\z@
+ \else \expandafter\next@ \fi}%
+ \GRAPH[]}
+\xydef@\endgraph{\ignorespaces}
+\xydef@\GRAPH{\xyFN@\GRAPH@}
+\xydef@\GRAPH@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\GRAPH@}%
+ \else\ifx :\next \DN@:{\xy@:{}\expandafter\GRAPHar@\GRAPHeveryarrow@@}%
+ \else\addDASH@\ifx\next
+ \addDASH@\DN@{\xy@-{}\expandafter\GRAPHar@\GRAPHeveryline@@}%
+ \else\ifx (\next
+ \DN@({\xy@({\spushid@{?NODE}\idfromc@{?NODE}}\xyFN@\GRAPH@}%
+ \else\ifx ,\next
+ \DN@,{\xy@,{\cfromid@{?NODE}}\xyFN@\GRAPH@}%
+ \else\ifx )\next
+ \DN@){\xy@){\cfromid@{?NODE}%
+ \tests@\z@{\idfroms@{?NODE}\z@ \spop@}{\xyerror@{) without (}{}}}%
+ \xyFN@\GRAPH@}%
+ \else\ifx \endgraph\next \DN@{\xy@@{\tests@\z@\spop@\sleave@\leave@}}%
+ \else\ifx \end\next \DN@{\xy@@{\tests@\z@\spop@\sleave@\leave@}}%
+ \else\ifx ~\next
+ \DN@~{\xy@@{\enter@\cfromthec@}\afterNODE{\leave@ \xyFN@\GRAPH@}!}%
+ \else \DN@{\afterNODE{\xyFN@\GRAPH@}}%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi \next@}
+\xylet@\GRAPHsaved@PATHafterPOS=\PATHafterPOS
+\xylet@\GRAPHsaved@afterar@@=\afterar@@
+\xydef@\GRAPHar@{%
+ \let\PATHafterPOS=\afterNODE \let\afterar@@=\GRAPHafterar@ \ar}
+\xydef@\GRAPHafterar@{%
+ \let\PATHafterPOS=\GRAPHsaved@PATHafterPOS
+ \let\afterar@@=\GRAPHsaved@afterar@@
+ \xy@@{\cfromid@{}}\xyFN@\GRAPH@}
+\xylet@\afterNODE@@=\empty
+\xydef@\afterNODE#1{\xy@@{\enter@\pfromthep@}%
+ \DN@##1{\def\afterNODE@@{\xy@@\leave@ \def\afterNODE@@{##1}#1}}%
+ \expandafter\next@\expandafter{\afterNODE@@}%
+ \xyFN@\NODE@}
+\xylet@\theMOVE@@=\relax
+\xydef@\NODE@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\NODE@}%
+ \else\ifx [\next \DN@[##1]{\xy@{[##1]}{}%
+ \def\theMOVE@@{[##1]}\xyFN@\MOVE@##1]}%
+ \else\ifx "\next \DN@ "##1"{%
+ \xy@{"##1"}{\cfromid@{##1}}\def\theMOVE@@{"##1"}\xyFN@\NODE@i}%
+ \else\ifx ?\next \DN@ ?{%
+ \xy@?{\cfromid@{?NODE}}\def\theMOVE@@{?}\xyFN@\NODE@i}%
+ \else\ifx !\next \def\theMOVE@@{[]}\let\next@=\NODE@i
+ \else \testAND@\iffalse
+ \DN@##1{\xy@{}{\pfromc@ \advance\X@c\X@xbase \advance\Y@c\Y@xbase
+ \czeroEdge@}\jumpMOVE@ \xyFN@\NODE@i}%
+ \else\ifx \\\next
+ \DN@\\{\xy@\\{\pfromc@ \advance\X@c\X@xbase \advance\Y@c\Y@xbase
+ \R@c=\X@ybase \U@c=\Y@ybase \intersect@
+ \advance\X@c-\X@ybase \advance\Y@c-\Y@ybase
+ \czeroEdge@}\def\theMOVE@@{\\}\xyFN@\NODE@i}%
+ \else \xyerror@{Illegal <node>: \string`\meaning\next\string' unexpected}{}%
+ \fi\fi\fi\fi\fi\fi\fi \next@}
+\xydef@\jumpMOVE@@{&}
+\xydef@\jumpMOVE@{\let\theMOVE@@=\jumpMOVE@@}
+\xydef@\MOVE@{\xy@@{\count@=\z@ \count@@=\z@}%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\MOVE@}%
+ \else\ifcat A\noexpand\next \let\next@=\MOVE@letter
+ \else \let\next@=\MOVE@x \fi\fi \next@}
+\xydef@\MOVE@letter{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\MOVE@letter}%
+ \else\ifx u\next \DN@ u{\xy@@{\advance\count@\@ne}\xyFN@\MOVE@letter}%
+ \else\ifx d\next \DN@ d{\xy@@{\advance\count@\m@ne}\xyFN@\MOVE@letter}%
+ \else\ifx l\next \DN@ l{\xy@@{\advance\count@@\m@ne}\xyFN@\MOVE@letter}%
+ \else\ifx r\next \DN@ r{\xy@@{\advance\count@@\@ne}\xyFN@\MOVE@letter}%
+ \else \let\next@=\MOVE@x \fi\fi\fi\fi\fi \next@}
+\xydef@\MOVE@x{%
+ \ifx ]\next \DN@ ]{\MOVE@hop \xyFN@\NODE@i}%
+ \else\ifx (\next \DN@{\MOVE@hop \xyFN@\MOVE@place}%
+ \else\ifx !\next \DN@{\MOVE@hop \xyFN@\MOVE@place}%
+ \else\ifx /\next \DN@{\MOVE@hop \xyFN@\MOVE@place}%
+ \else\addLT@\ifx\next \DN@{\MOVE@hop \xyFN@\MOVE@place}%
+ \else\addGT@\ifx\next \DN@{\MOVE@hop \xyFN@\MOVE@place}%
+ \else\addDASH@\ifx\next \addDASH@\DN@{\xyerror@{- not implemented yet}{}}%
+ \else \xyerror@{illegal <move>: \codeof\theMOVE@@}{}\let\next@=\NODE@i
+ \fi\fi\fi\fi\fi\fi\fi \next@}
+\xydef@\MOVE@hop{\xy@@{\pfromc@ \czeroEdge@
+ \edef\next@{\the\count@@,\the\count@ @}\expandafter\vfromcartesian@@\next@
+ \advance\X@c-\X@origin \advance\Y@c-\Y@origin
+ \advance\X@c\X@p \advance\Y@c\Y@p}}
+\xydef@\MOVE@place{\xy@@\no@@ \afterPLACE{\xyFN@\MOVE@}}
+\xydef@\NODE@i{\let\next@=\NODE@x
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\NODE@i}%
+ \else\addEQ@\ifx \next
+ \addEQ@\DN@"##1"{\xy@{="##1"}{\idfromc@{##1}}\xyFN@\NODE@i}%
+ \else\ifx !\next \DN@!{\xyFN@\NODE@escape}%
+ \else\ifx :\next
+ \else\addDASH@\ifx\next
+ \else\ifx (\next
+ \else\ifx ,\next
+ \else\ifx )\next
+ \else\ifx ~\next
+ \else\ifx [\next
+ \else\ifx "\next
+ \else\ifx ?\next
+ \else\ifx ^\next
+ \else\ifx _\next
+ \else\ifx |\next
+ \else\addLQ@\ifx\next
+ \else\addRQ@\ifx\next
+ \else \testAND@ \iffalse
+ \else\ifx \\\next
+ \else\ifx \endgraph\next
+ \else\ifx \end\next
+ \else \let\next@=\NODE@it
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@}
+\xydef@\NODE@x{\xy@@{\idfromc@{}}\afterNODE@@}
+\xydef@\NODE@it{\let\PATHlabelit@@=\NODEit@ \PATHit@}
+{\xyuncatcodes \gdef\next{+}}
+\xylet@\GRAPHnodemodifiers@@=\next
+\xydef@\NODEit@#1{%
+ \DN@{#1}\ifx\next@\empty
+ \DN@{\expandafter\NODEit@i\expandafter{\GRAPHnodemodifiers@@}}%
+ \else \DN@{\NODEit@i{#1}}\fi \next@}
+\def\NODEit@i#1#2{\xy@{*#1{#2}}{\drop@{#1}{#2}}%
+ \DN@{\addEQ@\ifx\next\else \xy@@{\idfromc@{#2}}\fi \NODE@i}%
+ \xyFN@\next@}
+\xydef@\NODE@escape{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\NODE@escape}%
+ \else\ifcat A\noexpand\next \DN@##1{\rungraphescape@{##1}}%
+ \else\ifcat !\noexpand\next \DN@##1{\rungraphescape@{##1}}%
+ \else\ifx \bgroup\next \DN@##1{\xy@{!{##1}}{}\POS##1\relax \xyFN@\NODE@i}%
+ \else\ifx ~\next \let\next@=\graphsetup@
+ \else \DN@{\xyerror@{Unknown graph <escape>}{}\xyFN@\NODE@i}%
+ \fi\fi\fi\fi\fi \next@}
+\xydefcsname@{graph !M}#1#{\NODE@matrix{#1}}
+\xydef@\NODE@matrix#1#2{\xyerror@{matrix feature not loaded}{}\xyFN@\GRAPH@}
+\xydef@\NODE@matrix@#1#2{\xy@{!M#1{#2}}{}%
+ \def\everyentry@{\GRAPHeveryentry}%
+ \xymatrix#1{#2}%
+ \let\everyentry@=\empty \insertmatrixingraph@ \xyFN@\NODE@i}
+\xydef@\GRAPHeveryentry{\def\:{\ar}\def\="##1"{\xy@@{\idfromc@{##1}}}}
+\xywithoption{matrix}{\let\NODE@matrix=\NODE@matrix@}
+\xydef@\insertmatrixingraph@{%
+ \xy@@{\enter@{\cfromthec@ \pfromthep@}%
+ \expandafter\let\expandafter\next@\csname Q@1,1\endcsname
+ \ifx\next@\relax\else
+ \next@ \swap@
+ \expandafter\let\expandafter\next@\csname Q@1,2\endcsname
+ \ifx\next@\relax\else \next@ \setbase@\X@p\Y@p\X@c\Y@c
+ \expandafter\let\expandafter\next@\csname Q@2,1\endcsname
+ \ifx\next@\relax\else
+ \next@ \setbase@@{-\X@c}{-\Y@c}\fi\fi\fi
+ \leave@}}
+\xydefcsname@{graph !P}#1#{\NODE@poly{#1}}
+\xydef@\NODE@poly#1#2{\xyerror@{poly(gon) feature not loaded}{}\xyFN@\GRAPH@}
+\xydef@\NODE@poly@#1#2{\xy@{!P#1{#2}}{}\xypoly@#1{#2}\xyFN@\NODE@i}
+\xywithoption{poly}{\let\NODE@poly=\NODE@poly@}
+\xydefcsname@{graph !E}#1#{\NODE@arc{#1}!}
+\xydef@\NODE@arc#1#2{\xyerror@{(ellipse+)arc feature not loaded}{}%
+ \xyFN@\GRAPH@}
+\xydef@\NODE@arc@#1#2{\xy@{!E#1{#2}}{}\ellipse#1{#2}\xyFN@\NODE@i}
+\xywithoption{arc}{\let\NODE@arc=\NODE@arc@}
+\xylet@\GRAPHeveryarrow@@=\empty
+{\xyuncatcodes \gdef\next{@{-}}}
+\xylet@\GRAPHeveryline@@=\next
+\xydef@\graphsetup@~{\xyFN@\graphsetup@i}
+\xydef@\graphsetup@i{%
+ \ifx :\next \DN@:##1{\def\GRAPHeveryarrow@@{##1}\xyFN@\NODE@i}%
+ \else\addDASH@\ifx\next
+ \addDASH@\DN@##1{\def\GRAPHeveryline@@{##1}\xyFN@\NODE@i}%
+ \else\ifx *\next \DN@*##1{\def\GRAPHnodemodifiers@@{##1}\xyFN@\NODE@i}%
+ \else\ifcat A\next \DN@##1##2{\newgraphescape{##1}{##2}\xyFN@\NODE@i}%
+ \else \DN@{\xyerror@{illegal graph setup \codeof\next@}{}\xyFN@\NODE@i}%
+ \fi\fi\fi\fi \next@}
+\xydef@\newgraphescape#1{%
+ \expandafter\let\expandafter\next\csname graph !#1\endcsname
+ \ifx\next\relax\else \expandafter\let\csname G!#1\endcsname=\undefined
+ \xywarning@{Redefining graph <escape> !#1}\fi
+ \expandafter\gdef\csname graph !#1\endcsname{%
+ \expandafter\let\expandafter\next\csname G!#1\endcsname
+ \expandafter\xyFN@\expandafter\NODE@\next}%
+ \DN@{\newgraphescape@{#1}}\xyFN@\next@}
+\xydef@\newgraphescape@#1{%
+ \ifx [\next
+ \ifx\newcommand\undefined \xyerror@{[n] only with LaTeX}%
+ \else
+ \def\nextiv@{\expandafter\newcommand\expandafter{\csname G!#1\endcsname}}\fi
+ \else \def\nextiv@{\expandafter\gdef\csname G!#1\endcsname}\fi \nextiv@}
+\xydef@\rungraphescape@#1{%
+ \expandafter\let\expandafter\next\csname graph !#1\endcsname
+ \ifx\next\relax \xyerror@{Undefined graph <escape> !#1}\fi \next}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyidioms.tex b/macros/generic/diagrams/xypic/texinputs/xyidioms.tex
new file mode 100644
index 0000000000..c4026d436b
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyidioms.tex
@@ -0,0 +1,72 @@
+%% xyidioms.tex from $Id: xyidioms.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Format-dependent idioms for Xy-pic.
+%% Copyright (c) 1991-1997 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyidiomsloaded\empty \message{not reloaded}\endinput \fi
+\let\xyidiomsloaded=\empty
+\xywarnifdefined\A@ \dimendef\A@=4
+\xywarnifdefined\B@ \dimendef\B@=6
+\xywarnifdefined\R@ \dimendef\R@=8
+\ifx\undefined\AveryUNLIKELYc@ntr@lSEQUENCE@@\else
+\errmessage{Xy-pic Error: \string\undefined\space defined.}\fi
+\ifx\undefined\literal@ \def\literal@#1{#1}\fi
+\ifx\undefined\eat@ \def\eat@#1{}\fi
+\xydef@\xyFN@{\futurelet\next}
+\ifx\undefined\DN@ \def\DN@{\def\next@}\fi
+\ifx\undefined\DNii@ \def\DNii@{\def\nextii@}\fi
+\ifx\undefined\setboxz@h\def\setboxz@h{\setbox\z@\hbox}\fi
+\ifx\undefined\wdz@ \def\wdz@{\wd\z@}\fi
+\ifx\undefined\boxz@ \def\boxz@{\box\z@}\fi
+\ifx\undefined\W@ \def\W@{\immediate\write16 }\fi
+\ifx\undefined\space@ \def\space@.{\futurelet\space@\relax}\space@. \fi
+\ifx\undefined\notempty \def\notempty#1{T\if @#1@F\else T\fi}\fi
+\xydef@\xysetup@dummy#1{\xyuncatcodes#1}
+\xywarnifdefined\xysetup@@
+\ifx\AtEndDocument\undefined
+ \expandafter\ifx\csname amsppt.sty\endcsname\relax
+ \let\xysetup@@=\xysetup@dummy
+ \else
+ \def\xysetup@@#1{%
+ \expandafter\def\expandafter\topmatter\expandafter{\topmatter
+ #1\xyuncatcodes}}\fi
+\else
+ \def\xysetup@@#1{\AtBeginDocument{#1\xyuncatcodes}}
+\fi
+\ifx\xysetup@@\xysetup@dummy\else
+ \xysetup@@{\let\xysetup@@=\xysetup@dummy \xyuncatcodes}\fi
+\xywarnifdefined\xyclosedown@@
+\ifx\AtEndDocument\undefined \let\xyclosedown@@=\eat@
+\else \def\xyclosedown@@#1{\AtEndDocument{#1}}\fi
+\xylet@\xy@begindvi=\literal@
+\ifx\undefined\AtBeginDvi\else
+ \AtBeginDocument{\let\xy@begindvi=\AtBeginDvi}
+ \AtBeginDvi{\global\let\xy@begindvi=\literal@}\fi
+\ifx\amstexloaded@\relax
+\xylet@\toks@ii=\toks@@ \endinput \fi
+\ifx\@tempcnta\undefined
+\xynew@{count}\count@@
+\xynew@{count}\count@@@
+\else
+\xylet@\count@@=\@tempcnta
+\xylet@\count@@@=\@tempcntb
+\fi
+\ifx\undefined\toks@ii \toksdef\toks@ii=2 \fi
+\endinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyimport.tex b/macros/generic/diagrams/xypic/texinputs/xyimport.tex
new file mode 100644
index 0000000000..6c5e340d4e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyimport.tex
@@ -0,0 +1,68 @@
+%% xyimport.tex from $Id: xyimport.doc,v 3.13 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Import feature'' option.
+%% Copyright (c) 1993-1997 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{import}{Import graphics extension}{\stripRCS$Revision: 3.13 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xydef@\xyimport#1#{\xyimport@{#1}}
+\xydef@\xyimport@#1#2{\xydelayimport@{#1}{#2}}
+\xydef@\xydelayimport@#1#2{\xy@@ix@{#1{#2}}%
+ \xy@@{\expandafter\xyextern@\the\toks9}}
+\xydef@\xyextern@(#1,#2){\hbox\bgroup\R@c=#1\p@ \U@c=#2\p@\xyextern@i}
+\xydef@\xyextern@i#1#{\DN@{#1}%
+ \ifx\next@\empty \L@c=\z@ \D@c=\z@ \DN@{\xyextern@x}%
+ \else \DN@{\xyextern@ii#1}\fi \next@ }
+\xydef@\xyextern@ii(#1,#2){\L@c=#1\p@ \D@c=#2\p@
+ \advance\R@c-\L@c \advance\U@c-\D@c \xyextern@x}
+\xydef@\xyimportdefault@{3}
+\xydef@\xyexportwarning@#1#2#3{\xywarning@{%
+ #1 for import has zero #2; using \xyimportdefault@#3 default}}
+\xydef@\xyextern@x#1{\toks@={\egroup\L@c=}\setboxz@h{#1}%
+ \dimen@ii=\L@c \advance\dimen@ii\R@c \dimen@=\wdz@
+ \ifdim\dimen@=\z@ \xyexportwarning@{graphic}{width}{cm}%
+ \dimen@=\xyimportdefault@ cm\fi
+ \ifdim\dimen@ii=\z@ \xyexportwarning@{coords}{width}{unit}%
+ \dimen@ii=\xyimportdefault@\p@\fi
+ \quotient@\next@\dimen@\dimen@ii \dimen@=\next@\p@
+ \edef\tmp@{\expandafter\removePT@\the\L@c}\L@c=\tmp@\dimen@
+ \expandafter\addtotoks@\expandafter{\the\L@c\relax\R@c=}%
+ \edef\tmp@{\expandafter\removePT@\the\R@c}\R@c=\tmp@\dimen@
+ \expandafter\addtotoks@\expandafter{\the\R@c\relax\setbase@\z@\z@}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\the\dimen@}\z@\D@c=}%
+ \dimen@ii=\U@c \advance\dimen@ii\D@c \dimen@=\ht\z@\advance\dimen@\dp\z@
+ \ifdim\dimen@=\z@ \xyexportwarning@{graphic}{height}{cm}%
+ \dimen@=\xyimportdefault@ cm\fi
+ \ifdim\dimen@ii=\z@ \xyexportwarning@{coords}{height}{unit}%
+ \dimen@ii=\xyimportdefault@\p@\fi
+ \quotient@\next@\dimen@\dimen@ii \dimen@=\next@\p@
+ \edef\tmp@{\expandafter\removePT@\the\D@c}\D@c=\tmp@\dimen@
+ \expandafter\addtotoks@\expandafter{\the\D@c\relax\U@c=}%
+ \edef\tmp@{\expandafter\removePT@\the\U@c}\U@c=\tmp@\dimen@
+ \expandafter\addtotoks@\expandafter{\the\U@c\relax\setbase@@\z@}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\the\dimen@}}%
+ \setboxz@h{\kern-\L@c\lower\D@c\boxz@\kern\L@c}%
+ \wd\z@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@ \the\toks@ \X@c=\z@ \Y@c=\z@
+ \ifdim\X@min>-\L@c \X@min=-\L@c \fi \ifdim\X@max<\R@c \X@max=\R@c \fi
+ \ifdim\Y@min>-\D@c \Y@min=-\D@c \fi \ifdim\Y@max<\U@c \Y@max=\U@c \fi
+ \idfromc@{import}\POS }
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyknot.tex b/macros/generic/diagrams/xypic/texinputs/xyknot.tex
new file mode 100644
index 0000000000..4c5d7108ed
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyknot.tex
@@ -0,0 +1,901 @@
+%% xyknot.tex from $Id: xyknot.doc,v 3.9 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Knots and Links'' feature.
+%% Copyright (c) 1994-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this macro package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{knot}{Knots and Links feature}{\stripRCS$Revision: 3.9 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\message{knots and links,}
+\xyrequire{arrow}\xycatcodes
+\xydef@\xykparsecross@{%
+ \def\xykSCALE@@{}\edef\xyknotPLACE{\xykmidPLACE@}%
+ \let\xykparser@=\xykparsecross@@
+ \def\xykdefaultbreak@{\let\xykbreak@=\xykforetemp@
+ \def\xyknotPLACE{(.5)}\appendtoholder@}%
+ \xyFN@\xykparsescale@ }
+{\xyuncatcodes \catcode`@=11
+\gdef\next{%
+ \ifx\space@\next \expandafter\DN@\space{\xyFN@\xykparsecross@@}%
+ \else\addLT@\ifx\next \addLT@\DN@{\xyprecross@}%
+ \else\addGT@\ifx\next \addGT@\DN@{\xypostcross@}%
+ \else\addEQ@\ifx\next \addEQ@\DN@{\xyFN@\xykparsetips@@}%
+ \else\ifx|\next\DN@|{\xymidcross@}%
+ \else\addAT@\ifx\next \addAT@\DN@(##1){%
+ \xyadjustBREAK@i##1@@\xyFN@\xykparsecross@@}%
+ \else\DN@{\afterknot@}%
+ \fi\fi\fi\fi\fi\fi \next@ }}
+\xylet@\xykparsecross@@=\next
+\xydef@\xyprecross@{%
+ \def\xykholder@{\xykprebreak@@}%
+ \edef\xyknotPLACE{\xykprePLACE@}%
+ \xyFN@\xykparsebreak@}
+\xydef@\xypostcross@{%
+ \def\xykholder@{\xykpostbreak@@}%
+ \edef\xyknotPLACE{\xykpostPLACE@}%
+ \xyFN@\xykparsebreak@}
+\xydef@\xymidcross@{%
+ \def\xykholder@{\xykmidbreak@@}%
+ \edef\xyknotPLACE{\xykmidPLACE@}%
+ \xyFN@\xykparsebreak@}
+\xydef@\xykcross@#1{\xykcheckTIPS@
+ \expandafter\toks@\expandafter{\expandafter#1\knotSTYLE}}
+\xydef@\xykoverstring@{\addtotoks@{{}}\xykmidbreak@ \xyknottips@}
+\xydef@\xykunderstring@{\xykprebreak@ \xykpostbreak@ \xyknottips@}
+\xydef@\vcross{\begingroup\def\afterknot@{\xyvcross}%
+ \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
+ \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{|\knothole}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\hcross{\begingroup\def\afterknot@{\xyhcross}%
+ \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
+ \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{|\knothole}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\vcrossneg{\begingroup\def\afterknot@{\xyvcrossneg}%
+ \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
+ \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{|\knothole}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\hcrossneg{\begingroup\def\afterknot@{\xyhcrossneg}%
+ \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
+ \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{|\knothole}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\vuncross{\begingroup\def\afterknot@{\xyvuncross}%
+ \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
+ \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\huncross{\begingroup\def\afterknot@{\xyhuncross}%
+ \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
+ \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\xyvcross{\xykcross@\xykcrossv
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(0,-1)}}
+\xydef@\xyhcross{\xykcross@\xykcrossh
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
+\xydef@\xyvcrossneg{\xykcross@\xykcrossv
+ \xykunderstring@ \xykoverstring@ \xykhvobject@{+(0,-1)}}
+\xydef@\xyhcrossneg{\xykcross@\xykcrossh
+ \xykunderstring@ \xykoverstring@ \xykhvobject@{+(1,0)}}
+\xydef@\xyvuncross{\xykcross@\xykuncrossv
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(0,-1)}}
+\xydef@\xyhuncross{\xykcross@\xykuncrossh
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
+ "^<",{\xykz_\ar #1@'{"_<"**{}?(.25)@+,?+(.375,0)@+,
+ "_>";"^>"**{}?-(.375,0)@+,?(.25)@+}"_>"#3#4#5},
+ "_<",{\xykz^\ar #2@'{"^<"**{}?(.25)@+,?+(.375,0)@+,
+ "^>";"_>"**{}?-(.375,0)@+,?(.25)@+}"^>"#6#7#8}
+ \restore\POS #9}}
+\xylet@\xykcrossv=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
+ "_<",{\xykz_\ar #1@'{"_>"**{}?(.25)@+,?+(0,.375)@+,
+ "^>";"^<"**{}?-(0,.375)@+,?(.25)@+}"^>"#3#4#5},
+ "_>",{\xykz^\ar #2@'{"_<"**{}?(.25)@+,?+(0,.375)@+,
+ "^<";"^>"**{}?-(0,.375)@+,?(.25)@+}"^<"#6#7#8}
+ \restore\POS #9}}
+\xylet@\xykcrossh=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
+ "^<",{\xykz^\ar #1@'{"_<"**{}?(.25)@+,?(.375)+(.375,0)@+,
+ "^>";"_>"**{}?(.375)-(.375,0)@+,?(.25)@+}"^>"#3#4#5},
+ "_<",{\xykz^\ar #2@'{"^<"**{}?(.25)@+,?(.375)+(.375,0)@+,
+ "_>";"^>"**{}?(.375)-(.375,0)@+,?(.25)@+}"_>"#6#7#8}
+ \restore\POS #9}}
+\xylet@\xykuncrossv=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
+ "_<",{\xykz^\ar #1@'{"_>"**{}?(.25)@+,?(.375)+(0,.375)@+,
+ "^<";"^>"**{}?(.375)-(0,.375)@+,?(.25)@+}"^<"#3#4#5},
+ "_>",{\xykz^\ar #2@'{"_<"**{}?(.25)@+,?(.375)+(0,.375)@+,
+ "^>";"^<"**{}?(.375)-(0,.375)@+,?(.25)@+}"^>"#6#7#8}
+ \restore\POS #9}}
+\xylet@\xykuncrossh=\next
+\xydef@\vover{\begingroup\def\afterknot@{\xyvover}%
+ \def\xykprePLACE@{(.2)}\def\xykpostPLACE@{(.9)}%
+ \def\xykmidPLACE@{(.8)}\def\xykpostbreak@@{|(.725)\knothole}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\hover{\begingroup\def\afterknot@{\xyhover}%
+ \def\xykprePLACE@{(.2)}\def\xykpostPLACE@{(.9)}%
+ \def\xykmidPLACE@{(.8)}\def\xykpostbreak@@{|(.725)\knothole}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\vunder{\begingroup\def\afterknot@{\xyvunder}%
+ \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.8)}%
+ \def\xykmidPLACE@{(.2)}\def\xykpostbreak@@{|(.275)\knothole}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\hunder{\begingroup\def\afterknot@{\xyhunder}%
+ \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.8)}%
+ \def\xykmidPLACE@{(.2)}\def\xykpostbreak@@{|(.275)\knothole}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\vunover{\begingroup\def\afterknot@{\xyvunover}%
+ \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
+ \def\xykmidPLACE@{(.8)}\def\xykpostbreak@@{}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\hunover{\begingroup\def\afterknot@{\xyhunover}%
+ \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
+ \def\xykmidPLACE@{(.8)}\def\xykpostbreak@@{}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\xoverv{\begingroup\def\afterknot@{\xyxoverv}%
+ \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.85)}%
+ \def\xykmidPLACE@{(.15)}\def\xykpostbreak@@{|\knothole}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\xunderv{\begingroup\def\afterknot@{\xyxunderv}%
+ \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.85)}%
+ \def\xykmidPLACE@{(.15)}\def\xykpostbreak@@{|\knothole}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\xoverh{\begingroup\def\afterknot@{\xyxoverh}%
+ \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.85)}%
+ \def\xykmidPLACE@{(.15)}\def\xykpostbreak@@{|\knothole}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\xunderh{\begingroup\def\afterknot@{\xyxunderh}%
+ \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.85)}%
+ \def\xykmidPLACE@{(.85)}\def\xykpostbreak@@{|\knothole}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\xunover{\begingroup\def\afterknot@{\xyxunover}%
+ \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.85)}%
+ \def\xykmidPLACE@{(.15)}\def\xykpostbreak@@{}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\xunoverv{\begingroup\def\afterknot@{\xyxunoverv}%
+ \def\xykprePLACE@{(.2)}\def\xykpostPLACE@{(.8)}%
+ \def\xykmidPLACE@{(.2)}\def\xykpostbreak@@{}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\xunoverh{\begingroup\def\afterknot@{\xyxunoverh}%
+ \def\xykprePLACE@{(.2)}\def\xykpostPLACE@{(.8)}%
+ \def\xykmidPLACE@{(.8)}\def\xykpostbreak@@{}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\xyvover{\xykcross@\xykoverv
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(0,-1)}}
+\xydef@\xyhover{\xykcross@\xykoverh
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
+\xydef@\xyvunder{\xykcross@\xykoverv
+ \xykunderstring@ \xykoverstring@ \xykhvobject@{+(0,-1)}}
+\xydef@\xyhunder{\xykcross@\xykoverh
+ \xykunderstring@ \xykoverstring@ \xykhvobject@{+(1,0)}}
+\xydef@\xyvunover{\xykcross@\xykunoverv
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(0,-1)}}
+\xydef@\xyhunover{\xykcross@\xykunoverh
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
+\xydef@\xyxoverv{\xykcross@\xykxoverv
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(0,-1)}}
+\xydef@\xyxunderv{\xykcross@\xykxoverv
+ \xykunderstring@ \xykoverstring@ \xykhvobject@{+(0,-1)}}
+\xydef@\xyxoverh{\xykcross@\xykxoverh
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
+\xydef@\xyxunderh{\xykcross@\xykxoverh
+ \xykunderstring@ \xykoverstring@ \xykhvobject@{+(1,0)}}
+\xydef@\xyxunover{\xykcross@\xykxoverv
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
+\xydef@\xyxunoverv{\xykcross@\xykxunoverv
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(0,-1)}}
+\xydef@\xyxunoverh{\xykcross@\xykxunoverh
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
+ "^<",{\xykz^\ar #1@'{"^>"**{}?(.25)@+,?(.625)+(0,-.125)@+,
+ "_>";"^>"**{}?(.625)-(.125,0)@+,?(.25)@+}"_>"#3#4#5},
+ "_<",{\xykz^\ar #2@'{"^<"**{}?(.25)@+,?(.625)+(.125,0)@+,
+ "^>";"^<"**{}?(.625)-(0,.125)@+,?(.25)@+}"^>"#6#7#8},\restore\POS#9}}
+\xylet@\xykoverv=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
+ "_<",{\xykz^\ar #1@'{"^<"**{}?(.25)@+,?(.625)+(.125,0)@+,
+ "^>";"^<"**{}?(.625)-(0,.125)@+,?(.25)@+}"^>"#3#4#5},
+ "_>",{\xykz^\ar #2@'{"_<"**{}?(.25)@+,?(.625)+(0,.125)@+,
+ "^<";"_<"**{}?(.625)+(.125,0)@+,?(.25)@+}"^<"#6#7#8},\restore\POS#9}}
+\xylet@\xykoverh=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
+ "^<",{\xykz^\ar #1@'{"^>"**{}?(.25)@+,?-(0,.175)@+,?(.75)@+}
+ "^>"#3#4#5},
+ "_<",{\xykz^\ar #2@'{"^<"**{}?(.25)@+,?+(.125,0)@+,
+ "_>"**{}?+(0,.7)@+,"_>";"^>"**{}?-(.125,0)@+,?(.25)@+}
+ "_>"#6#7#8},\restore\POS#9}}
+\xylet@\xykunoverv=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
+ "_<",{\xykz^\ar #1@'{"^<"**{}?(.25)@+,?+(.175,0)@+,?(.75)@+}
+ "^<"#3#4#5},
+ "_>",{\xykz^\ar #2@'{"_<"**{}?(.25)@+,?+(0,.125)@+,
+ "^>"**{}?-(.7,0)@+,"^>";"^<"**{}?-(0,.125)@+,?(.25)@+}
+ "^>"#6#7#8},\restore\POS#9}}
+\xylet@\xykunoverh=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
+ "^<";"^>"**{}?="^_","_<";"_>"**{}?;"^_",**{}?="^_",
+ "^>",{\xykz^\ar #1@'{"^_"@+}"_<"#3#4#5},
+ "^<",{\xykz_\ar #2@'{"^_"@+}"_>"#6#7#8},\restore\POS#9}}
+\xylet@\xykxoverv=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
+ "^<";"_<"**{}?="^_","^>";"_>"**{}?;"^_",**{}?="^_",
+ "^<",{\xykz_\ar #1@'{"^_"@+}"_>"#3#4#5},
+ "_<",{\xykz_\ar #2@'{"^_"@+}"^>"#6#7#8},\restore\POS#9}}
+\xylet@\xykxoverh=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
+ "^<";"^>"**{}?="^_","_<";"_>"**{}?;"^_",**{}?="^_",
+ "^>",{\xykz^\ar #1@'{"^_"@+}"_>"#3#4#5},
+ "^<",{\xykz^\ar #2@'{"^_"@+}"_<"#6#7#8},\restore\POS#9}}
+\xylet@\xykxunoverv=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
+ "^<";"_<"**{}?="^_","^>";"_>"**{}?;"^_",**{}?="^_",
+ "^<",{\xykz^\ar #1@'{"^_"@+}"^>"#3#4#5},
+ "_<",{\xykz^\ar #2@'{"^_"@+}"_>"#6#7#8},
+ \restore\POS#9}}
+\xylet@\xykxunoverh=\next
+\xydef@\vtwist{\begingroup\def\afterknot@{\xyvtwist}%
+ \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
+ \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{|\knothole}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\htwist{\begingroup\def\afterknot@{\xyhtwist}%
+ \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
+ \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{|\knothole}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\vtwistneg{\begingroup\def\afterknot@{\xyvtwistneg}%
+ \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
+ \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{|\knothole}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\htwistneg{\begingroup\def\afterknot@{\xyhtwistneg}%
+ \def\xykprePLACE@{(.1)}\def\xykpostPLACE@{(.9)}%
+ \def\xykmidPLACE@{(.9)}\def\xykpostbreak@@{|\knothole}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\vuntwist{\begingroup\def\afterknot@{\xyvuntwist}%
+ \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.85)}%
+ \def\xykmidPLACE@{(.85)}\def\xykpostbreak@@{}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\huntwist{\begingroup\def\afterknot@{\xyhuntwist}%
+ \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.85)}%
+ \def\xykmidPLACE@{(.85)}\def\xykpostbreak@@{}%
+ \xyFN@\xykparsecross@ }%
+\xydef@\xyvtwist{\xykcross@\xyktwistv
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(0,-1)}}
+\xydef@\xyvtwistneg{\xykcross@\xyktwistv
+ \xykunderstring@ \xykoverstring@ \xykhvobject@{+(0,-1)}}
+\xydef@\xyvuntwist{\xykcross@\xykuntwistv
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(0,-1)}}
+\xydef@\xyhtwist{\xykcross@\xyktwisth
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
+\xydef@\xyhuntwist{\xykcross@\xykuntwisth
+ \xykoverstring@ \xykunderstring@ \xykhvobject@{+(1,0)}}
+\xydef@\xyhtwistneg{\xykcross@\xyktwisth
+ \xykunderstring@ \xykoverstring@ \xykhvobject@{+(1,0)}}
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
+ "^>",{\xykz_\ar #1@'{"_>"**{}?(.25)@+,?-(.375,0)@+,
+ "_<";"^<"**{}?+(.375,0)@+,?(.25)@+}"_<"#3#4#5},
+ "^<",{\xykz^\ar #2@'{"_<"**{}?(.25)@+,?+(.375,0)@+,
+ "_>";"^>"**{}?+(-.375,0)@+,?(.25)@+}"_>"#6#7#8}
+ \restore\POS #9}}
+\xylet@\xyktwistv=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
+ "^>",{\xykz^\ar #1@'{"_>"**{}?(.125)@+,?(.375)-(.25,0)@+,
+ ?(.625)-(.25,0)@+,?(.875)@+}"_>"#3#4#5},
+ "^<",{\xykz^\ar #2@'{"_<"**{}?(.125)@+,?(.375)+(.25,0)@+,
+ ?(.625)+(.25,0)@+,?(.875)@+}"_<"#6#7#8}
+ \restore\POS #9}}
+\xylet@\xykuntwistv=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
+ "^<",{\xykz_\ar #1@'{"^>"**{}?(.25)@+,?+(0,-.375)@+,
+ "_>";"_<"**{}?+(0,.375)@+,?(.25)@+}"_>"#3#4#5},
+ "_<",{\xykz^\ar #2@'{"_>"**{}?(.25)@+,?+(0,.375)@+,
+ "^>";"^<"**{}?-(0,.375)@+,?(.25)@+}"^>"#6#7#8}
+ \restore\POS #9}}
+\xylet@\xyktwisth=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\save,
+ "^<",{\xykz^\ar #1@'{"^>",**{}?(.125)@+,?(.375)+(0,-.25)@+,
+ ?(.625)+(0,-.25)@+,?(.875)@+}"^>"#3#4#5},
+ "_<",{\xykz^\ar #2@'{"_>",**{}?(.125)@+,?(.375)+(0,.25)@+,
+ ?(.625)+(0,.25)@+,?(.875)@+}"_>"#6#7#8},\restore\POS #9}}
+\xylet@\xykuntwisth=\next
+\xydef@\xykparsescale@{%
+ \ifx\space@\next \expandafter\DN@\space{\xyFN@\xykparsescale@}%
+ \else\addDASH@\ifx\next \addDASH@\DN@{\def\xykSCALE@@{-1}%
+ \xyFN@\xykparser@}%
+ \else\ifx[\next \DN@[##1]{\dimen@=##1\p@
+ \ifdim\dimen@=\z@\xywarning@{\xykscaleerror@}%
+ \else\edef\xykSCALE@@{\expandafter\removePT@\the\dimen@}\fi
+ \xyFN@\xykparser@}%
+ \else\ifx~\next \DN@~##1##2##3##4{%
+ \def\xykSCALE@@{@{##1}{##2}{##3}{##4}}\xyFN@\xykparser@}%
+ \else\DN@{\xyFN@\xykparser@}%
+ \fi\fi\fi\fi \next@}
+\xydef@\xykscaleerror@{Ignoring zero scale factor}
+\xydef@\xykhobject@{\aftergroup\xykhadjust@
+ \ifx\xykSCALE@@\empty\DN@{\xykkeepscale@}%
+ \else \DN@{\xyksavescale@{}}%
+ \fi \next@ }
+\xydef@\xykvobject@{\aftergroup\xykvadjust@
+ \ifx\xykSCALE@@\empty\DN@{\xykkeepscale@}%
+ \else \DN@{\xyksavescale@{}}%
+ \fi \next@ }
+\xydef@\xykhvobject@{\aftergroup\xykhvadjust@
+ \ifx\xykSCALE@@\empty\DN@{\xykkeepscale@}%
+ \else \DN@{\xyksavescale@{}}%
+ \fi \next@ }
+\xydef@\xykhuobject@{\aftergroup\xykhuadjust@
+ \ifx\xykSCALE@@\empty\DN@{\xykkeepscale@}%
+ \else \DN@{\xyksavescale@{}}%
+ \fi \next@ }
+\xydef@\xyksavescale@#1#2{%
+ \expandafter\ifx\the\Edge@c\zeroEdge\relax \def\xyksaveEdgec{}%
+ \else
+ \edef\xyksaveEdgec{\noexpand\Edge@c={\expandafter\noexpand\the\Edge@c}%
+ \L@c=\the\L@c \R@c=\the\R@c \D@c=\the\D@c \U@c=\the\U@c}%
+ \fi
+ \edef\next@##1##2{\endgroup
+ \def\noexpand\xyksaveEdgec{}%
+ \def\noexpand\xykSCALE@@\noexpand{##1}%
+ \def\noexpand\xykjoincontrol\noexpand{\xykjoincontrol}%
+ \noexpand\toks@\noexpand{##2}%
+ \noexpand\xy@@{\def\noexpand\xyksaveEdgec{}%
+ \def\noexpand\xykSCALE@@{##1}%
+ \def\noexpand\xykjoincontrol{\xykjoincontrol}}}%
+ \expandafter\expandafter\expandafter\next@
+ \expandafter\expandafter\expandafter{\expandafter\xykSCALE@@\expandafter}%
+ \expandafter{\the\toks@}%
+ \xykrescale@ #1\the\toks@\restore\POS#2}
+\xydef@\xykkeepscale@{%
+ \edef\next@##1{\endgroup \noexpand\toks@={##1}%
+ \def\noexpand\xykjoincontrol{\xykjoincontrol}}%
+ \expandafter\next@\expandafter{\the\toks@}%
+ \def\xykSCALE@@{}\def\xyksaveEdgec{}%
+ \xy@@{\def\xykSCALE@@{}\def\xyksaveEdgec{}}%
+ \edef\next@{\def\noexpand\xykjoincontrol{\xykjoincontrol}}%
+ \expandafter\xy@@\expandafter{\next@}%
+ \xyknoflexscale@ \the\toks@}
+\xydef@\xykrescale@{\expandafter\xykcheckscale@\xykSCALE@@ !}%
+\xydef@\xykcheckscale@#1#2!{%
+ \expandafter\DN@\expandafter{\codeof{#1}}%
+ \expandafter\DNii@\expandafter{\codeof{@}}%
+ \ifx\next@\nextii@\relax\DN@{\xykflexiscale@#2%
+ \xy@@{\divide\X@xbase2\divide\X@ybase2\divide\Y@xbase2\divide\Y@ybase2%
+ \def\xykSCALE@@{}}\def\xykSCALE@@{}%
+ \expandafter\toks@\expandafter{\afterFLEX@}}%
+ \else\DN@{\save \xykrescale@@}\fi \next@ }
+\xydef@\xykflexiscale@{%
+ \expandafter\def\expandafter\afterFLEX@\expandafter{\the\toks@}%
+ \xykflexiscale@@ }
+\xydef@\xykrescale@@{%
+ \edef\next@{\X@xbase=\xykSCALE@@\X@xbase \X@ybase=\xykSCALE@@\X@ybase
+ \Y@xbase=\xykSCALE@@\Y@xbase \Y@ybase=\xykSCALE@@\Y@ybase}%
+ \expandafter\xy@@\expandafter{\next@}%
+ \ifdim\xykSCALE@@\p@<\z@\relax \DN@{\xyknegflexscale@}%
+ \else\DN@{\xyknoflexscale@}\fi \next@ }
+{\xyuncatcodes \gdef\next#1#2#3#4{\save="@",
+ #1,="^<",\POS"@",#2,="^>",\POS"@",#3,="_<",\POS"@",#4,="_>",
+ (0,0);"^>"-"^<"+"_>"-"_<":"^<"-"_<"+"^>"-"_>"::}}
+\xylet@\xykflexiscale@@=\next
+{\xyuncatcodes \gdef\next{\save ="^<",
+ +(1,0)="^>",-(1,1)="_<",+(1,0)="_>"\restore }}
+\xylet@\xyknoflexscale@@=\next
+\xylet@\xyknoflexscale@=\next
+{\xyuncatcodes \gdef\next{\save ="_>",
+ +(-1,1)="^<",+(1,0)="^>",-(1,1)="_<"\restore }}
+\xylet@\xyknegflexscale@@=\next
+\xylet@\xyknegflexscale@=\next
+{\xyuncatcodes \gdef\next{\save ="_<",
+ +(1,0)="_>",+(-1,1)="^<",+(1,0)="^>"\restore }}
+\xylet@\xykhscale@@=\next
+{\xyuncatcodes \gdef\next{\save ="^>",
+ -(1,0)="^<",+(1,-1)="_>",-(1,0)="_<"\restore }}
+\xylet@\xykvscale@@=\next
+\xydef@\xykhadjust@{%
+ \let\xyknoflexscale@=\xykhscale@@
+ \let\xyknegflexscale@=\xyknegflexscale@@ }
+\xydef@\xykvadjust@{%
+ \let\xyknoflexscale@=\xyknoflexscale@@
+ \let\xyknegflexscale@=\xykhscale@@ }
+\xydef@\xykhvadjust@{%
+ \let\xyknoflexscale@=\xyknoflexscale@@
+ \let\xyknegflexscale@=\xyknegflexscale@@ }
+\xydef@\xykhuadjust@{%
+ \let\xyknoflexscale@=\xykhscale@@
+ \let\xyknegflexscale@=\xykvscale@@ }
+\xydef@\xykprebreak@{%
+ \ifx\xykprebreak@@\empty\addtotoks@{{}}\else
+ \expandafter\addtotoks@\expandafter{\expandafter{\xykprebreak@@}}\fi}
+\xydef@\xykpostbreak@{%
+ \ifx\xykpostbreak@@\empty\addtotoks@{{}}\else
+ \expandafter\addtotoks@\expandafter{\expandafter{\xykpostbreak@@}}\fi}
+\xydef@\xykmidbreak@{%
+ \ifx\xykmidbreak@@\empty\addtotoks@{{}}\else
+ \expandafter\addtotoks@\expandafter{\expandafter{\xykmidbreak@@}}\fi}
+\xydef@\xykparsebreak@{%
+ \ifx\space@\next \expandafter\DN@\space{\xyFN@\xykparsebreak@}%
+ \else \addLT@\ifx\next
+ \expandafter\appendtoholder@\xykbacktemp@\next@
+ \addLT@\DN@{\xyFN@\xykparser@}%
+ \else \addGT@\ifx\next
+ \expandafter\appendtoholder@\xykforetemp@\next@
+ \addGT@\DN@{\xyFN@\xykparser@}%
+ \else \ifx|\next
+ \expandafter\appendtoholer@\xyknulltemp@\next@
+ \DN@|{\xyFN@\xykparser@}%
+ \else \ifx\next \bgroup\DN@##1{\checkgroupbreak@##1@}%
+ \else \ifx (\next\DN@(##1){\xyadjustknotPLACE@i##1@@%
+ \xyFN@\xykparsebreak@}%
+ \else \ifx\next \knothole@\DN@##1{\expandafter\appendtoholder@@
+ \expandafter{\expandafter|\xyknotPLACE\knothole}\next@
+ \xyFN@\xykparser@}%
+ \else
+ \expandafter\xykdefaultbreak@\xykbreak@\next@
+ \DN@{\xyFN@\xykparser@}%
+ \fi\fi\fi\fi\fi\fi\fi \next@ }
+{\xyuncatcodes \gdef\next{^>*\dir{>}}}
+\xylet@\xykforetips@=\next
+{\xyuncatcodes \gdef\next{^<*\dir{<}}}
+\xylet@\xykbacktips@=\next
+{\xyuncatcodes \gdef\next{*!/-1pt/=0\dir{>}}}
+\xylet@\xykforetemp@=\next
+{\xyuncatcodes \gdef\next{*!/1pt/=0\dir{<}}}
+\xylet@\xykbacktemp@=\next
+{\xyuncatcodes \gdef\next{*=<\xykholesize>[o]{}}}
+\xylet@\xykholetemp@=\next
+\xydef@\knothole@{\hbox to\xykholesize{%
+ \dimen@=\xykholesize \divide\dimen@\tw@
+ \hfill \vrule height\dimen@ depth\dimen@ width\z@ }}
+\xylet@\knothole=\knothole@
+\xylet@\khole=\knothole@
+{\xyuncatcodes \gdef\next{*=<0pt>{}}}
+\xylet@\xyknulltemp@=\next
+\xylet@\xykbreak@=\xyknulltemp@
+\xydef@\checkgroupbreak@#1#2@{%
+ \ifx|#1\DN@{\appendtoholder@@#1#2\next@ \xyFN@\xykparser@}%
+ \else \ifx_#1\DN@{\appendtoholder@@_#2\next@ \xyFN@\xykparser@}%
+ \else \ifx^#1\DN@{\appendtoholder@@^#2\next@ \xyFN@\xykparser@}%
+ \else
+ \def\next##1\next{\expandafter\DNii@\expandafter{\xyk@@##1}}%
+ \expandafter\next\xyknotPLACE\next
+ \ifx*#1%
+ \expandafter\DN@\expandafter{%
+ \expandafter\appendtoholder@@\nextii@#1#2\next@ \xyFN@\xykparser@}%
+ \else
+ \expandafter\DN@\expandafter{%
+ \expandafter\appendtoholder@@\nextii@{#1#2}\next@ \xyFN@\xykparser@}%
+ \fi\fi\fi\fi \next@ }
+{\xyuncatcodes \gdef\next{%
+ \expandafter{\expandafter^\xyknotPLACE##1}}}%
+ \DN@{\xydef@\xykholder@@##1}\DNii@{\expandafter\toks@}%
+ \expandafter\expandafter\expandafter\next@
+ \expandafter\expandafter\expandafter{\expandafter\nextii@\next}
+\xydef@\appendtoholder@#1\next@{\xykholder@@{#1}%
+ \DN@##1{\expandafter\DN@\expandafter{\xykholder@##1}}%
+ \expandafter\next@\expandafter{\the\toks@}\appendtoholder@@@ }
+\xydef@\appendtoholder@@#1\next@{%
+ \DN@##1\next@{\expandafter\DN@\expandafter{\xykholder@##1}}%
+ \next@#1\next@ \appendtoholder@@@}%
+\xydef@\appendtoholder@@@{%
+ \expandafter\expandafter\expandafter\DN@
+ \expandafter\expandafter\expandafter{\next@}%
+ \DNii@{\expandafter\def\xykholder@}%
+ \expandafter\nextii@\expandafter{\next@}}
+{\xyuncatcodes \gdef\next{%
+ \expandafter{\expandafter|\xyknotPLACE##1}}}%
+\DN@{\xydef@\xykholer@@##1}\DNii@{\expandafter\toks@}%
+ \expandafter\expandafter\expandafter\next@
+ \expandafter\expandafter\expandafter{\expandafter\nextii@\next}
+\xydef@\appendtoholer@#1\next@{\xykholer@@{#1}%
+ \DN@##1{\expandafter\DN@\expandafter{\xykholder@##1}}%
+ \expandafter\next@\expandafter{\the\toks@}\appendtoholder@@@ }
+\xydef@\xykz#1{\let\xyk@@=#1\xy@@{\let\xyk@@=#1}}
+{\xyuncatcodes \global\let\next=_}
+\xylet@\xyk@@=\next
+\xydef@\xyadjustknotPLACE@i{%
+ \ifx\xyknotPLACE\empty\DN@{\dimen@=.5\p@}%
+ \else\DN@{\expandafter\xygetknotPLACE@@\xyknotPLACE}%
+ \fi \next@ \relax \let\xywhichknotPLACE@@=\xysetknotPLACE@@
+ \xyFN@\xyadjustknotPLACE@}
+\xydef@\xyadjustknotPLACE@{\expandafter\ifx\space@\next
+ \expandafter\DN@\space{\xyFN@\xyadjustknotPLACE@}%
+ \else\addDASH@\ifx\next\DN@{\xyadjustknotPLACE@@}%
+ \else\addPLUS@\ifx\next\DN@{\xyadjustknotPLACE@@}%
+ \else\addEQ@\ifx\next\addEQ@\DN@{\dimen@=\z@ \xyadjustknotPLACE@@}%
+ \else \DN@{\dimen@=\z@ \xyadjustknotPLACE@@}%
+ \fi\fi\fi\fi \next@}
+\xydef@\xyadjustknotPLACE@@#1@@{\advance\dimen@#1\p@
+ \expandafter\xysetknotPLACE@\expandafter{\the\dimen@}}
+\xydef@\xysetknotPLACE@#1{%
+ \expandafter\xywhichknotPLACE@@\expandafter{\removePT@#1}}
+{\xyuncatcodes\gdef\next#1{\def\xyknotPLACE{(#1)}}}%
+\xylet@\xysetknotPLACE@@=\next
+{\xyuncatcodes \catcode`@=11
+ \gdef\next(#1){\DN@\next@{#1}\ifx\next@\empty
+ \dimen@=\z@\else\dimen@=#1\p@ \fi}}%
+\xylet@\xygetknotPLACE@@=\next
+\xydef@\xyadjustJOIN@i{%
+ \ifx\xykjoincontrol\empty\DN@{\dimen@=.75\p@}%
+ \else\DN@{\expandafter\xygetknotPLACE@@\expandafter(\xykjoincontrol)}%
+ \fi \next@ \relax \let\xywhichknotPLACE@@=\xysetjoincontrol@
+ \xyFN@\xyadjustknotPLACE@}
+\xydef@\xyadjustBREAK@i{%
+ \ifx\xykpostbreak@@\empty\DN@{\dimen@=.5\p@}%
+ \else\DN@{\expandafter\xygetpostBREAK@\xykpostbreak@@}%
+ \fi \next@ \relax \let\xywhichknotPLACE@@=\xysetpostbreak@
+ \xyFN@\xyadjustknotPLACE@}
+\xydef@\xygetpostBREAK@|#1\knothole{\DN@{#1}%
+ \ifx\next@\empty\dimen@=.5\p@\else \xygetknotPLACE@@#1\fi}
+\xydef@\xysetpostbreak@#1{\def\xykpostbreak@@{|(#1)\knothole}}
+\xydef@\xysetjoincontrol@#1{\edef\xykjoincontrol{#1}}
+\xydef@\xykparsetips@{%
+ \def\xyknotTIPS@@{}\def\xyknotPLACE{}%
+ \let\xykparser@=\xykparsetips@@
+ \xyFN@\xykparser@ }
+\xydef@\xykparsetips@@{%
+ \ifx\space@\next \expandafter\DN@\space{\xyFN@\xykparsetips@@}%
+ \else\addLT@\ifx\next
+ \ifx\xyknotTIPS@@\empty \def\xyknotTIPS@@{TF}%
+ \else\DN@{FF}\ifx\next@\xyknotTIPS@@ \def\xyknotTIPS@@{TF}%
+ \else\DN@{FT}\ifx\next@\xyknotTIPS@@ \def\xyknotTIPS@@{TT}%
+ \fi\fi\fi
+ \addLT@\DN@{\xyFN@\xykparser@}%
+ \else\addGT@\ifx\next
+ \ifx\xyknotTIPS@@\empty \def\xyknotTIPS@@{FT}%
+ \else\DN@{FF}\ifx\next@\xyknotTIPS@@ \def\xyknotTIPS@@{FT}%
+ \else\DN@{TF}\ifx\next@\xyknotTIPS@@ \def\xyknotTIPS@@{TT}%
+ \fi\fi\fi
+ \addGT@\DN@{\xyFN@\xykparser@}%
+ \else\addEQ@\ifx\next \def\xyknotTIPS@@{TT}%
+ \addEQ@\DN@{\xyFN@\xykparser@}%
+ \else \ifx!\next \def\xyknotTIPS@@{FF}\DN@!{\xyFN@\xykparser@}%
+ \else\DN@{\xyFN@\xykparser@}%
+ \fi\fi\fi\fi\fi \next@ }
+\xydef@\xykcheckTIPS@{%
+ \ifx\xyknotTIPS@@\empty \edef\xyknotTIPS@@{\xyknotTIPS@}\fi
+ \DN@{FF}\ifx\next@\xyknotTIPS@@\def\tmp@{}%
+ \else\DN@{FT}\ifx\next@\xyknotTIPS@@
+ \expandafter\def\expandafter\tmp@\expandafter{\xykforetips@}%
+ \else\DN@{TF}\ifx\next@\xyknotTIPS@@
+ \expandafter\def\expandafter\tmp@\expandafter{\xykbacktips@}%
+ \else
+ \DN@##1\next@{\DN@{\xykforetips@##1}}%
+ \expandafter\next@\xykbacktips@\next@
+ \DNii@{\expandafter\def\expandafter\tmp@\expandafter}%
+ \expandafter\nextii@\expandafter{\next@}%
+ \fi\fi\fi \def\xyknotTIPS@@{}}
+\xydef@\xyknottips@{%
+ \ifx\tmp@\empty\addtotoks@{{}}\else
+ \expandafter\addtotoks@\expandafter{\expandafter{\tmp@}}\fi}
+\xydef@\xykparsejoin@{%
+ \def\xykSCALE@@{}%
+ \edef\xyknotPLACE{\xykmidPLACE@}%
+ \let\xykparser@=\xykparsejoin@@
+ \def\xykdefaultbreak@{\let\xykbreak@=\xykforetemp@
+ \def\xyknotPLACE{(.5)}\appendtoholder@}%
+ \xyFN@\xykparsescale@ }
+{\xyuncatcodes \catcode`@=11
+\gdef\next{%
+ \ifx\space@\next \expandafter\DN@\space{\xyFN@\xykparsejoin@@}%
+ \else\addLT@\ifx\next \let\xykbreak@=\xykbacktemp@
+ \def\xykdefaultbreak@{\def\xyknotPLACE{(.5)}%
+ \appendtoholder@}\addLT@\DN@{\xyprecross@}%
+ \else\addGT@\ifx\next \let\xykbreak@=\xykforetemp@
+ \def\xykdefaultbreak@{\def\xyknotPLACE{(.5)}%
+ \appendtoholder@}\addGT@\DN@{\xypostcross@}%
+ \else\ifx|\next \let\xykbreak@=\xyknulltemp@
+ \def\xykdefaultbreak@{\def\xyknotPLACE{(.5)}%
+ \appendtoholer@}\DN@|{\xymidcross@}%
+ \else\addEQ@\ifx\next \addEQ@\DN@{\xyFN@\xykparsetips@@}%
+ \else\addAT@\ifx\next \addAT@\DN@(##1){%
+ \xyadjustJOIN@i##1@@\xyFN@\xykparsejoin@@}%
+ \else\DN@{\afterknot@}%
+ \fi\fi\fi\fi\fi\fi \next@ }}
+\xylet@\xykparsejoin@@=\next
+\xydef@\xykjoincontrol@@{.75}%
+\xydef@\xyk@joincontrol@#1{\DN@{#1}%
+ \ifx\next@\empty\edef\xykjoincontrol@@{.75}%
+ \else\dimen@=#1\p@
+ \edef\xykjoincontrol@@{\expandafter\removePT@\the\dimen@}\fi}
+\xylet@\xykjoincontrol\empty
+\xydef@\xykjoincontrol@(#1){\DN@{#1}%
+ \ifx\next@\empty\edef\xykjoincontrol{\xykjoincontrol@@}%
+ \else\dimen@=#1\p@
+ \edef\xykjoincontrol{\expandafter\removePT@\the\dimen@}%
+ \fi \xyFN@\xykparsejoin@@ }
+\xydef@\xykjoincontrol@i#1{\DN@{#1}%
+ \ifx\next@\empty\edef\xykjoincontrol{\xykjoincontrol@@}%
+ \else\dimen@=#1\p@
+ \edef\xykjoincontrol{\expandafter\removePT@\the\dimen@}\fi}
+\xydef@\xykjoin@#1{%
+ \expandafter\toks@\expandafter{\expandafter#1\knotSTYLE}}
+\xydef@\xyksetjoin@{\xykcheckTIPS@
+ \xykprebreak@ \xykmidbreak@ \xykpostbreak@ \xyknottips@ }
+\xydef@\hcap{\begingroup\def\afterknot@{\xyhcap}%
+ \def\xykprePLACE@{(.385)}\def\xykpostPLACE@{(.615)}%
+ \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.25}%
+ \xyFN@\xykparsejoin@ }%
+\xydef@\vcap{\begingroup\def\afterknot@{\xyvcap}%
+ \def\xykprePLACE@{(.385)}\def\xykpostPLACE@{(.615)}%
+ \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.25}%
+ \xyFN@\xykparsejoin@ }%
+\xydef@\xcapv{\begingroup\def\afterknot@{\xyxcapv}%
+ \def\xykprePLACE@{(.2)}\def\xykpostPLACE@{(.8)}%
+ \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.5}%
+ \xyFN@\xykparsejoin@ }%
+\xydef@\xcaph{\begingroup\def\afterknot@{\xyxcaph}%
+ \def\xykprePLACE@{(.2)}\def\xykpostPLACE@{(.8)}%
+ \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.5}%
+ \xyFN@\xykparsejoin@ }%
+\xydef@\xyvcap{\xykjoin@\xykcapv \xyksetjoin@ \xykhobject@{}}
+\xydef@\xyhcap{\xykjoin@\xykcaph \xyksetjoin@ \xykvobject@{}}
+\xydef@\xyxcapv{\xykjoin@\xykxcapv \xyksetjoin@ \xykvobject@{+(0,-1)}}
+\xydef@\xyxcaph{\xykjoin@\xykxcaph \xyksetjoin@ \xykhobject@{+(1,0)}}
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
+ "_>",{\xyksaveEdgec},{\xykz_\ar #1@'{"^>"**{}?(\xykjoincontrol)@+
+ ,?-(.25,0)@+,"_<";"^<"**{}?+(.25,0)@+,?(\xykjoincontrol)@+}
+ "_<"#3#4#5#6},\restore \POS#7}}
+\xylet@\xykcapv=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
+ "_<",{\xyksaveEdgec},{\xykz_\ar #1@'{"_>"**{}?(\xykjoincontrol)@+,
+ ?+(0,.25)@+,"^<";"^>"**{}?-(0,.25)@+,?(\xykjoincontrol)@+}
+ "^<"#3#4#5#6}
+ \restore \POS#7}}
+\xylet@\xykcaph=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
+ "^>";"_>"**{}?="^_","^<";"_<"**{}?;"^_",**{}?(\xykjoincontrol)="^_",
+ "_<",{\xyksaveEdgec},{\xykz_\ar #1@'{"^_"@+}
+ "^<"#3#4#5#6},\restore \POS#7}}
+\xylet@\xykxcapv=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
+ "^<";"^>"**{}?="^_","_<";"_>"**{}?;"^_",**{}?(\xykjoincontrol)="^_",
+ "_>",{\xyksaveEdgec},{\xykz_\ar #1@'{"^_"@+}
+ "_<"#3#4#5#6},\restore \POS#7}}
+\xylet@\xykxcaph=\next
+\xydef@\hloop{\begingroup\def\afterknot@{\xyhloop}%
+ \def\xykprePLACE@{(.07)}\def\xykpostPLACE@{(.93)}%
+ \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.75}%
+ \xyFN@\xykparsejoin@ }%
+\xydef@\vloop{\begingroup\def\afterknot@{\xyvloop}%
+ \def\xykprePLACE@{(.07)}\def\xykpostPLACE@{(.93)}%
+ \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.75}%
+ \xyFN@\xykparsejoin@ }%
+\xydef@\xyvloop{\xykjoin@\xykloopv \xyksetjoin@ \xykhobject@{}}
+\xydef@\xyhloop{\xykjoin@\xyklooph \xyksetjoin@ \xykvobject@{}}
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
+ "_>",{\xykz_\ar #1@'{"^>"**{}?(\xykjoincontrol)@+,?(1.25)-(.25,0)@+,
+ "_<";"^<"**{}?(1.25)+(.25,0)@+,?(\xykjoincontrol)@+}"_<"#3#4#5#6}
+ \restore \POS#7}}
+\xylet@\xykloopv=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
+ "_<",{\xykz_\ar #1@'{"_>"**{}?(\xykjoincontrol)@+,?(1.25)+(0,.25)@+,
+ "^<";"^>"**{}?(1.25)+(0,-.25)@+,?(\xykjoincontrol)@+}"^<"#3#4#5#6}
+ \restore \POS#7}}
+\xylet@\xyklooph=\next
+\xydef@\zbendh{\begingroup\def\afterknot@{\xyzbendh}%
+ \def\xykprePLACE@{(.25)}\def\xykpostPLACE@{(.75)}%
+ \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{\xykjoincontrol@@}%
+ \xyFN@\xykparsejoin@ }%
+\xydef@\sbendv{\begingroup\def\afterknot@{\xysbendv}%
+ \def\xykprePLACE@{(.25)}\def\xykpostPLACE@{(.75)}%
+ \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{\xykjoincontrol@@}%
+ \xyFN@\xykparsejoin@ }%
+\xydef@\sbendh{\begingroup\def\afterknot@{\xysbendh}%
+ \def\xykprePLACE@{(.25)}\def\xykpostPLACE@{(.75)}%
+ \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{\xykjoincontrol@@}%
+ \xyFN@\xykparsejoin@ }%
+\xydef@\zbendv{\begingroup\def\afterknot@{\xyzbendv}%
+ \def\xykprePLACE@{(.25)}\def\xykpostPLACE@{(.75)}%
+ \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{\xykjoincontrol@@}%
+ \xyFN@\xykparsejoin@ }%
+\xydef@\xbendr{\begingroup\def\afterknot@{\xyxbendr}%
+ \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.75)}%
+ \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.5}%
+ \xyFN@\xykparsejoin@ }%
+\xydef@\xbendl{\begingroup\def\afterknot@{\xyxbendl}%
+ \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.75)}%
+ \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.5}%
+ \xyFN@\xykparsejoin@ }%
+\xydef@\xbendu{\begingroup\def\afterknot@{\xyxbendu}%
+ \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.75)}%
+ \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.5}%
+ \xyFN@\xykparsejoin@ }%
+\xydef@\xbendd{\begingroup\def\afterknot@{\xyxbendd}%
+ \def\xykprePLACE@{(.15)}\def\xykpostPLACE@{(.75)}%
+ \def\xykmidPLACE@{(.5)}\edef\xykjoincontrol{.5}%
+ \xyFN@\xykparsejoin@ }%
+\xydef@\xyzbendh{\xykjoin@\xykzbendh \xyksetjoin@ \xykhvobject@{+(1,-1)}}
+\xydef@\xysbendv{\xykjoin@\xyksbendv \xyksetjoin@ \xykhvobject@{+(1,-1)}}
+\xydef@\xysbendh{\xykjoin@\xyksbendh \xyksetjoin@ \xykhuobject@{+(1,1)}}
+\xydef@\xyzbendv{\xykjoin@\xykzbendv \xyksetjoin@ \xykhuobject@{+(1,1)}}
+\xydef@\xyxbendr{\xykjoin@\xykxbendr \xyksetjoin@ \xykhvobject@{+(1,-1)}}
+\xydef@\xyxbendl{\xykjoin@\xykxbendl \xyksetjoin@ \xykhvobject@{+(0,-1)}}
+\xydef@\xyxbendu{\xykjoin@\xykxbendu \xyksetjoin@ \xykhvobject@{+(1,0)}}
+\xydef@\xyxbendd{\xykjoin@\xykxbendd \xyksetjoin@ \xykhvobject@{+(1,-1)}}
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
+ "^<",{\xyksaveEdgec},
+ {\xykz^\ar #1@'{"^>"**{}?(\xykjoincontrol)@+,
+ "_>";"_<"**{}?(\xykjoincontrol)@+}"_>"#3#4#5#6}%
+ \restore \POS#7}}
+\xylet@\xykzbendh=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
+ "^<",{\xyksaveEdgec},
+ {\xykz_\ar #1@'{"_<"**{}?(\xykjoincontrol)@+,
+ "_>";"^>"**{}?(\xykjoincontrol)@+}"_>"#3#4#5#6}%
+ \restore \POS#7}}
+\xylet@\xyksbendv=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
+ "_<",{\xyksaveEdgec},
+ {\xykz_\ar #1@'{"_>"**{}?(\xykjoincontrol)@+,
+ "^>";"^<"**{}?(\xykjoincontrol)@+}"^>"#3#4#5#6}%
+ \restore \POS#7}}
+\xylet@\xyksbendh=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
+ "_<",{\xyksaveEdgec},
+ {\xykz^\ar #1@'{"^<"**{}?(\xykjoincontrol)@+,
+ "^>";"_>"**{}?(\xykjoincontrol)@+}"^>"#3#4#5#6}%
+ \restore \POS#7}}
+\xylet@\xykzbendv=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
+ "^<"-(0,.5),{\xyksaveEdgec},
+ {\xykz_\ar #1@'{"_<";"_>"**{}?(\xykjoincontrol)@+,}"_>"#3#4#5#6}%
+ \restore \POS#7}}
+\xylet@\xykxbendr=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
+ "^>"-(0,.5),{\xyksaveEdgec},
+ {\xykz^\ar #1@'{"_>";"_<"**{}?(\xykjoincontrol)@+,}"_<"#3#4#5#6}%
+ \restore \POS#7}}
+\xylet@\xykxbendl=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
+ "_<"+(.5,0),{\xyksaveEdgec},
+ {\xykz_\ar #1@'{"_>";"^>"**{}?(\xykjoincontrol)@+,}"^>"#3#4#5#6}%
+ \restore \POS#7}}
+\xylet@\xykxbendu=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\save,
+ "^<"+(.5,0),{\xyksaveEdgec},
+ {\xykz^\ar #1@'{"^>";"_>"**{}?(\xykjoincontrol)@+,}"_>"#3#4#5#6}%
+ \restore \POS#7}}
+\xylet@\xykxbendd=\next
+{\xyuncatcodes \gdef\next{{@{-}}{@{-}}}}
+\xylet@\knotSTYLE=\next
+{\xyuncatcodes \gdef\next#1{\def\knotSTYLE{{@{#1}}{@{#1}}}}}
+\xylet@\knotstyle=\next
+{\xyuncatcodes \gdef\next#1#2{\def\knotSTYLE{{@{#1}}{@{#2}}}}}
+\xylet@\knotstyles=\next
+{\xyuncatcodes \gdef\next#1{\def\knotSTYLE{#1}}}
+\xylet@\KNOTstyle=\next
+\xydef@\knotholesize@#1{\def\xykholesize{#1}}
+\xydef@\xykholesize{5pt}
+\xylet@\knotholesize=\knotholesize@
+\xylet@\holesize=\knotholesize@
+\xydef@\knottips#1{\def\xyknotTIPS@{#1}}
+\xydef@\xyknotTIPS@{FF}
+\xydef@\xyknotTIPS@@{}
+\xydef@\xykSCALE@@{}
+\xydef@\xykprebreak@@{}%
+\xydef@\xykpostbreak@@{}%
+\xydef@\xykmidbreak@@{}%
+\xydef@\xykprePLACE@{(.25)}%
+\xydef@\xykpostPLACE@{(.75)}%
+\xydef@\xykmidPLACE@{}%
+\xylet@\xykPLACE@=\xykmidPLACE@
+{\gdef\next#1#2#3#4{%
+ \save(0,0);"#2"-"#1"+"#4"-"#3":(.5,0):
+ "#3"-"#1"+"#4"-"#2"::(0,.5)::}}
+\xylet@\xykflexbase@=\next
+\xylet@\xykflexbase=\xykflexbase@
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8{\xykflexbase{#1}{#2}{#3}{#4}%
+ "#1",{\ar @{#5}@'{"#1"+(0,.125)@++(.1875,.125)@+,
+ "#4"-(.1875,.25)@++(.1875,.125)@+}"#4" #6},
+ "#2",{\ar @{#5}@'{"#2"+(0,.125)@++(-.1875,.125)@+,
+ "#3"+(.1875,-.25)@++(-.1875,.125)@+}"#3" #7}%
+\restore \POS#8}}
+\xylet@\Xtwist=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8{\xykflexbase{#1}{#2}{#3}{#4}%
+ "#1",{\ar @{#5}@'{"#1"+(0,.0625)@++(.1875,.0625)@+,
+ "#3"+(.1875,-.125)@++(-.1875,.0625)@+}"#3" #6},
+ "#2",{\ar @{#5}@'{"#2"+(0,.0625)@++(-.1875,.0625)@+,
+ "#4"-(.1875,.125)@++(.1875,.0625)@+}"#4" #7}%
+\restore \POS#8}}
+\xylet@\Xuntwist=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\xykflexbase{#1}{#2}{#3}{#4}%
+ "#1",{\ar @{#5}@'{"#1"+(.1875,.0625)@++(.1875,.1875)@+,
+ "#4"+(-#9,-.125)@+}"#4" #6},
+ "#2",{\ar @{#5}@'{"#2"+(-.1875,.0625)@++(-.1875,.1875)@+,
+ "#3"+(#9,-.125)@+}"#3" #7}%
+\restore \POS#8}}
+\xylet@\Xover=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7#8#9{\xykflexbase{#1}{#2}{#3}{#4}%
+ "#1",{\ar @{#5}@'{"#1"+(.1875,.0625)@++(.1875,.1875)@+,
+ "#2"+(-.1875,.0625)@+}"#2" #6},
+ "#3",{\ar @{#5}@'{"#3"+(#9,-.125)@+,"#3"+(.25,-.25)@+,
+ "#4"+(-#9,-.125)@+}"#4" #7}%
+\restore \POS#8}}
+\xylet@\Xunover=\next
+{\xyuncatcodes \gdef\next#1#2#3#4#5#6#7{\xykflexbase{#1}{#2}{#3}{#4}%
+ "#1",{\ar @{#5}@'{"#1"+(0,.125)@++(.125,.25)@+,
+ "#4"+(-.125,.375)@++(.125,-.25)@+}"#4" #6},
+\restore \POS#7}}
+\xylet@\Xcap=\next
+{\xyuncatcodes \catcode`@=11
+ \gdef\next#1#2#3#4#5#6#7#8#9{\dimen@=#1\p@
+ \ifdim\dimen@=\z@ \DN@{\Xunover{#2}{#3}{#4}{#5}{#8}{#6}{#7}{"#5"}}%
+ \else\ifdim\dimen@>\z@
+ \DNii@{#6}\ifx\nextii@\empty
+ \DN@{\Xover{#2}{#3}{#4}{#5}{#8}{|(.45)\knothole}{#7}{"#5"}}%
+ \else \DN@{\Xover{#2}{#3}{#4}{#5}{#8}{#6}{#7}{"#5"}}\fi
+ \else
+ \DNii@{#7}\ifx\nextii@\empty
+ \DN@{\Xover{#2}{#3}{#4}{#5}{#8}{#6}{|(.45)\knothole}{"#5"}}%
+ \else\DN@{\Xover{#2}{#3}{#4}{#5}{#8}{#6}{#7}{"#5"}}\fi
+ \fi\fi
+ \def\tmp@{{#9}}\ifx\tmp@\empty\def\tmp@{{0}}\else\dimen@=#9\p@\fi
+ \expandafter\next@\tmp@ }}
+\xylet@\XXover=\next
+{\xyuncatcodes \catcode`@=11
+ \gdef\next#1#2#3#4#5#6#7#8{\dimen@=#1\p@
+ \ifdim\dimen@=\z@ \DN@{\Xuntwist{#2}{#4}{#3}{#5}{#8}{#6}{#7}{"#5"}}%
+ \else\ifdim\dimen@>\z@
+ \DNii@{#6}\ifx\nextii@\empty
+ \DN@{\Xtwist{#2}{#4}{#3}{#5}{#8}{|(.45)\knothole}{#7}{"#5"}}%
+ \else \DN@{\Xtwist{#2}{#4}{#3}{#5}{#8}{#6}{#7}{"#5"}}\fi
+ \else
+ \DNii@{#7}\ifx\nextii@\empty
+ \DN@{\Xtwist{#2}{#4}{#3}{#5}{#8}{#6}{|(.45)\knothole}{"#5"}}%
+ \else\DN@{\Xtwist{#2}{#4}{#3}{#5}{#8}{#6}{#7}{"#5"}}\fi
+ \fi\fi \next@ }}
+\xylet@\XXtwist=\next
+{\xyuncatcodes \catcode`@=11
+ \gdef\next#1#2#3#4{\dimen@=#1\p@
+ \ifdim\dimen@=\z@ \DN@{\xykuncrossv{#4}{#2}{#3}{+(0,-1)}}%
+ \else\ifdim\dimen@>\z@
+ \DNii@{#2}\ifx\nextii@\empty
+ \DN@{\xyktwistv{#4}{|\knothole}{#3}{+(1,0)}}%
+ \else \DN@{\xyktwistv{#4}{#2}{#3}{+(1,0)}}\fi
+ \else
+ \DNii@{#3}\ifx\nextii@\empty
+ \DN@{\xyktwistv{#4}{#2}{|\knothole}{+(0,-1)}}%
+ \else\DN@{\xyktwistv{#4}{#2}{#3}{+(0,-1)}}\fi
+ \fi\fi \next@ }}
+\xylet@\Vcross=\next
+{\xyuncatcodes \catcode`@=11
+ \gdef\next#1#2#3#4{\dimen@=#1\p@
+ \ifdim\dimen@=\z@ \DN@{\xykuncrossh{#4}{#2}{#3}{+(0,-1)}}%
+ \else\ifdim\dimen@<\z@
+ \DNii@{#2}\ifx\nextii@\empty
+ \DN@{\xyktwisth{#4}{|\knothole}{#3}{+(1,0)}}%
+ \else \DN@{\xyktwisth{#4}{#2}{#3}{+(1,0)}}\fi
+ \else
+ \DNii@{#3}\ifx\nextii@\empty
+ \DN@{\xyktwisth{#4}{}{|\knothole}{+(1,0)}}%
+ \else\DN@{\xyktwisth{#4}{#2}{#3}{+(1,0)}}\fi
+ \fi\fi \next@ }}
+\xylet@\Hcross=\next
+{\xyuncatcodes \catcode`@=11
+ \gdef\next#1#2#3{\dimen@=#1\p@ \save
+ \ifdim\dimen@<\z@
+ \DN@{\POS="@",p="@@",(0,0);(-1,0):(0,-1)::"@@";"@",}%
+ \else\DN@{}\fi
+ \next@ \xykcaph{#3}{#2}\restore }}
+\xylet@\Hcap=\next
+{\xyuncatcodes \catcode`@=11
+ \gdef\next#1#2#3{\dimen@=#1\p@ \save
+ \ifdim\dimen@<\z@
+ \DN@{\POS="@",p="@@",(0,0);(0,-1)::"@@";"@",}%
+ \else\DN@{}\fi
+ \next@ \xykcapv{#3}{#2}\restore }}
+\xylet@\Vcap=\next
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyline.tex b/macros/generic/diagrams/xypic/texinputs/xyline.tex
new file mode 100644
index 0000000000..d70d6f84ab
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyline.tex
@@ -0,0 +1,237 @@
+%% xyline.tex from $Id: xyline.doc,v 3.10 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Line Width'' extension.
+%% Copyright (c) 1993-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{line}{Line styles extension}{\stripRCS$Revision: 3.10 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xydefcsname@{*stylechar@|@}#1{\xyFN@\xywidthchar@#1@@}%
+\xydefcsname@{style [thinner]}{\xyshape@thinner@}
+\xydefcsname@{style [thicker]}{\xyshape@thicker@}
+\xynew@{dimen}\xylinethick@ \xylinethick@=\xydashw@
+\xydef@\xyshape@thicker@{\xylinewidth@i{\multiply\xylinethick@\tw@}}
+\xydef@\xyshape@thinner@{\xylinewidth@i{\divide\xylinethick@\tw@}}
+\xydef@\xylinewidth@i#1{\edef\xyprevwidth@@{\the\xylinethick@}%
+ #1\edef\next@{\xylinethick@=\the\xylinethick@}%
+ \edef\next@ii{\noexpand\addtotoks@{%
+ \noexpand\xylinewidth@@{\next@}{\xyprevwidth@@}}}%
+ \next@ii }
+\xydef@\xywidthchar@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\xywidthchar@}%
+ \else\ifx @\next \DN@ @@{\checkXyStyle@}%
+ \else\ifx (\next \DN@ (##1)##2@@{%
+ \xylinewidth@i{\xylinethick@=##1\xydashw@}}%
+ \else\addLT@\ifx \next \addGT@{\addLT@\DN@ ##1}##2@@{%
+ \xylinewidth@i{\xylinethick@=##1\relax}}%
+ \else\ifx *\next \DN@ *@@{\recoverXyStyle@}%
+ \else\addEQ@\ifx \next \addEQ@\DN@##1@@{\checkXyStyle@
+ \addtotoks@{\xynamestyle@{##1}}}%
+ \else\ifx C\next \DN@ C##1@@{\xysetlinecap@{##1}@}%
+ \else\ifx J\next \DN@ J##1@@{\xysetlinejoin@{##1}@}%
+ \else\ifx M\next \DN@ M(##1)@@{\xymiterlimit@{##1}@}%
+ \else \DN@##1@@{\xylinewidth@i{\xylinethick@=##1\relax}}%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi \next@}
+\xydef@\xylinecap@{2}
+\xydef@\xylinejoin@{2}
+\xydef@\xylinemiter@{10}
+\xydefcsname@{style [bevel]}{\xyshape@bevel@}
+\xydefcsname@{style [roundjoin]}{\xyshape@rdjoin@}
+\xydefcsname@{style [miter]}{\xyshape@miter@}
+\xydefcsname@{style [butt]}{\xyshape@butt@}
+\xydefcsname@{style [roundcap]}{\xyshape@rdcap@}
+\xydefcsname@{style [projcap]}{\xyshape@projcap@}
+\xydef@\xyshape@butt@{\xysetlinecap@@0}
+\xydef@\xyshape@rdcap@{\xysetlinecap@@1}
+\xydef@\xyshape@projcap@{\xysetlinecap@@2}
+\xydef@\xyshape@miter@{\xysetlinejoin@@0}
+\xydef@\xyshape@rdjoin@{\xysetlinejoin@@1}
+\xydef@\xyshape@bevel@{\xysetlinejoin@@2}
+\xydef@\xysetlinecap@#1@{\DN@ii{#1}\count@=#1\relax
+ \expandafter\DN@\expandafter{\the\count@}%
+ \ifx\next@\next@ii\else
+ \xywarning@{ignoring extra tokens in line-cap: \next@}\fi
+ \expandafter\xysetlinecap@@\expandafter{\next@}}
+\xydef@\xysetlinejoin@#1@{\DN@ii{#1}\count@=#1\relax
+ \expandafter\DN@\expandafter{\the\count@}%
+ \ifx\next@\next@ii\else
+ \xywarning@{ignoring extra tokens in line-join: \next@}\fi
+ \expandafter\xysetlinejoin@@\expandafter{\next@}}
+\xydef@\xysetmiterlimit@#1@{\DN@ii{#1}\dimen@=#1\p@\relax
+ \edef\next@{\expandafter\removePT@\the\dimen@}%
+ \ifx\next@\next@ii\else
+ \xywarning@{ignoring extra tokens in miter-limit: \next@}\fi
+ \expandafter\xysetmiterlimit@@\expandafter{\next@}}
+\xydef@\xysetlinecap@@#1{\xy@linecap@i{\def\xylinecap@{#1}}}
+\xydef@\xysetlinejoin@@#1{\xy@linejoin@i{\def\xylinejoin@{#1}}}
+\xydef@\xysetmiterlimit@@#1{%
+ \xy@linemiter@i{\def\xylinemiter@{#1}}}
+\xydef@\xy@linecap@i#1{#1\addtotoks@{\xy@linecap@@{#1}}}
+\xydef@\xy@linejoin@i#1{#1\addtotoks@{\xy@linejoin@{#1}}}
+\xydef@\xy@linemiter@i#1{#1\addtotoks@{\xy@linemiter@{#1}}}
+\xydef@\xy@linecap@#1{\checkXyStyle@ \edef\xyprevcap@@{\xylinecap@}%
+ #1\let\prexylinecap@=\prexylinecap@@ \let\postxylinecap@=\postxylinecap@@
+ \applyLIFOstyle@\prexylinecap@{\xylinecap@}%
+ \postxylinecap@{\xyprevcap@@}}
+\xydef@\prexylinecap@@{\let\prexylinecap@=\eat@
+ \let\postxylinecap@=\postxylinecap@@ \outputxylinecap@ }
+\xydef@\postxylinecap@@{\let\postxylinecap@=\eat@
+ \let\prexylinecap@=\prexylinecap@@ \resetxylinecap@@ }
+\xylet@\prexylinecap@=\prexylinecap@@
+\xylet@\postxylinecap@=\postxylinecap@@
+\xydef@\outputxylinecap@#1{\xycapSpecial@@{#1}}
+\xydef@\resetxylinecap@#1{\resetxylinecap@i{#1}\outputxylinecap@{#1}}
+\xydef@\resetxylinecap@i#1{\def\xylinecap@{#1}}
+\xylet@\resetxylinecap@@=\resetxylinecap@
+\xylet@\xycapSpecial@@=\eat@
+\xydef@\xy@linejoin@#1{\checkXyStyle@
+ \edef\xyprevjoin@@{\xylinejoin@}#1%
+ \let\prexylinejoin@=\prexylinejoin@@
+ \let\postxylinejoin@=\postxylinejoin@@
+ \applyLIFOstyle@\prexylinejoin@{\xylinejoin@}%
+ \postxylinecap@{\xyprevjoin@@}}
+\xydef@\prexylinejoin@@{\let\prexylinejoin@=\eat@
+ \let\postxylinejoin@=\postxylinejoin@@ \outputxylinejoin@ }
+\xydef@\postxylinejoin@@{\let\postxylinejoin@=\eat@
+ \let\prexylinejoin@=\prexylinejoin@@ \resetxylinejoin@@ }
+\xylet@\prexylinejoin@=\prexylinejoin@@
+\xylet@\postxylinejoin@=\postxylinejoin@@
+\xydef@\outputxylinejoin@#1{\xyjoinSpecial@@{#1}}
+\xydef@\resetxylinejoin@#1{\resetxylinejoin@i{#1}\outputxylinejoin@{#1}}
+\xydef@\resetxylinejoin@i#1{\def\xylinejoin@{#1}}
+\xylet@\resetxylinejoin@@=\resetxylinejoin@
+\xylet@\xyjoinSpecial@@=\eat@
+\xydef@\xy@linemiter@#1{\checkXyStyle@
+ \edef\xyprevmiter@@{\xylinemiter@}#1%
+ \let\prexylinemiter@=\prexylinemiter@@
+ \let\postxylinemiter@=\postxylinemiter@@
+ \applyLIFOstyle@\prexylinemiter@{\xylinemiter@}%
+ \postxylinecap@{\xyprevmiter@@}}
+\xydef@\prexylinemiter@@{\let\prexylinemiter@=\eat@
+ \let\postxylinemiter@=\postxylinemiter@@ \outputxylinemiter@ }
+\xydef@\postxylinemiter@@{\let\postxylinemiter@=\eat@
+ \let\prexylinemiter@=\prexylinemiter@@ \resetxylinemiter@@ }
+\xylet@\prexylinemiter@=\prexylinemiter@@
+\xylet@\postxylinemiter@=\postxylinemiter@@
+\xydef@\outputxylinemiter@#1{\xymiterSpecial@@{#1}}
+\xydef@\resetxylinemiter@#1{\resetxylinemiter@i{#1}\outputxylinemiter@{#1}}
+\xydef@\resetxylinemiter@i#1{\def\xylinemiter@{#1}}
+\xylet@\resetxylinemiter@@=\resetxylinemiter@
+\xylet@\xymiterSpecial@@=\eat@
+\xydef@\xypolyline#1{\xypolyline@{#1}}
+\xydef@\xypolyline@#1{\hbox\bgroup
+ \enter@{\pfromthep@ \basefromthebase@ \cfromthec@}%
+ \def\xyps@list{}\edef\smapp@@{\s@bot}%
+ \smapxy@i{\enter@{\pfromthep@ \basefromthebase@ }%
+ \edef\xyps@list{\expandafter\removePT@\the\X@c\space
+ \expandafter\removePT@\the\Y@c\space \xyps@list}\leave@}%
+ \leave@ \xy@polystyle@@{#1}\xydopoly@style\egroup
+ \def\Drop@@{\styledboxz@}\def\Connect@@{\styledboxz@}}%
+\xylet@\xypolyline@Special=\eat@
+\xylet@\xypolyfill@Special=\eat@
+\xylet@\xypolyeofill@Special=\eat@
+\xylet@\xypolydot@Special=\eat@
+\xylet@\xypolydash@Special=\eat@
+\xydef@\UnloadpolySpecials@{%
+ \let\xypolyline@Special=\eat@
+ \let\xypolyfill@Special=\eat@
+ \let\xypolyeofill@Special=\eat@
+ \let\xypolydot@Special=\eat@
+ \let\xypolydash@Special=\eat@
+}
+\xydef@\xy@polystyle@#1{%
+ \let\poly@style@@=\xypolyline@Special
+ \DNii@{#1}\ifx\nextii@\empty
+ \else\DN@{*}\ifx\next@\nextii@ \let\poly@style@@=\xypolyfill@Special
+ \else\DN@{?}\ifx\next@\nextii@ \let\poly@style@@=\xypolyeofill@Special
+ \else\expandafter\DN@\expandafter{\addDOT@{}}\ifx\next@\nextii@
+ \let\poly@style@@=\xypolydot@Special
+ \else\expandafter\DN@\expandafter{\addDASH@{}}\ifx\next@\nextii@
+ \let\poly@style@@=\xypolydash@Special
+ \else\DN@{{*}}\ifx\next@\nextii@ \def\poly@style@@{\xypolystraight@{*}}%
+ \else \def\poly@style@@{\xypolystraight@{#1}}%
+ \fi\fi\fi\fi\fi\fi }
+\xydef@\xydopoly@style{\expandafter\poly@style@@\expandafter{\xyps@list}}
+\xydef@\xynopolystyle@#1#2{\xyundefinedLine@{polyline}{{#1}}@@}
+\xydef@\xypolynospec@#1{\DNii@{#1}%
+ \ifx\nextii@\empty\def\poly@style@@{\xypolystraight@{-}}%
+ \else\DN@{.}\ifx\next@\nextii@ \def\poly@style@@{\xypolystraight@{.}}%
+ \else\DN@{-}\ifx\next@\nextii@ \def\poly@style@@{\xypolystraight@{--}}%
+ \else\DN@{*}\ifx\next@\nextii@ \def\poly@style@@{\xypolystraight@{.}}%
+ \else\DN@{?}\ifx\next@\nextii@ \def\poly@style@@{\xypolystraight@{.}}%
+ \else\DN@{{*}}\ifx\next@\nextii@ \def\poly@style@@{\xypolystraight@{*}}%
+ \else \def\poly@style@@{\xypolystraight@{#1}}%
+ \fi\fi\fi\fi\fi\fi }
+\xydef@\xypolystraight@#1#2{%
+ \enter@{\pfromthep@ \basefromthebase@ \cfromthec@}%
+ \edef\smapp@@{\s@bot}\csname S@0\endcsname\czeroEdge@\pfromc@\def\smapp@@{0}%
+ \smapxy@i{\czeroEdge@\enter@{\pfromthec@}{\connect@\dir{#1}}\leave@}\leave@ }
+\xylet@\xy@polystyle@@=\xypolynospec@
+\xydef@\UninstallPolylines@{%
+ \UnloadpolySpecials@
+ \let\xy@polystyle@@=\xypolynospec@ }
+\UninstallPolylines@
+\xydef@\xyundefinedLine@#1#2@@{%
+ \xywarning@{The #1 #2 effect is not implemented with the current driver.}}%
+\xydef@\xynolinewidth@#1#2{%
+ \xyundefinedLine@{linewidth}{\the\xylinethick@}@@}%
+\xydef@\xynolinecap@#1{\xyundefinedLine@{linecap}{\xylinecap@}@@}%
+\xydef@\xynolinejoin@#1{\xyundefinedLine@{linejoin}{\xylinejoin@}@@}%
+\xydef@\xynolinemiter@#1{\xyundefinedLine@{miterlimit}{\xylinemiter@}@@}%
+\xylet@\xylinewidth@@=\xynolinewidth@
+\xylet@\xy@linecap@@=\xynolinecap@
+\xylet@\xy@linejoin@@=\xynolinejoin@
+\xylet@\xy@linemiter@@=\xynolinemiter@
+\xydef@\UnloadLine@#1{%
+ \ifx#1\relax\else\xyunload@{line width extension}\fi
+ \let\resetxyline@@=\resetxyline@
+ \let\resetxylinecap@@=\resetxylinecap@
+ \let\resetxylinejoin@@=\resetxylinejoin@
+ \let\resetxylinemiter@@=\resetxylinemiter@
+ \let\transxyline@@=\DN@
+ \let\xylineSpecial@@=\eat@
+ \let\xycapSpecial@@=\eat@
+ \let\xyjoinSpecial@@=\eat@
+ \let\xymiterSpecial@@=\eat@
+ \let\xylinewidth@@=\xynolinewidth@
+ \let\xy@linecap@@=\xynolinecap@
+ \let\xy@linejoin@@=\xynolinejoin@
+ \let\xy@linemiter@@=\xynolinemiter@
+ \UninstallPolylines@ }
+\xyaddunsupport{line}{\UnloadLine@\relax}
+\xydef@\xylinewidth@#1#2{\checkXyStyle@
+ #1\let\prexyline@=\prexyline@@ \let\postxyline@=\postxyline@@
+ \applyLIFOstyle@\prexyline@{\the\xylinethick@}\postxyline@{#2}}
+\xydef@\prexyline@@{\let\prexyline@=\eat@
+ \let\postxyline@=\postxyline@@ \outputxyline@ }
+\xydef@\postxyline@@{\let\postxyline@=\eat@
+ \let\prexyline@=\prexyline@@ \resetxyline@@ }
+\xylet@\prexyline@=\prexyline@@
+\xylet@\postxyline@=\postxyline@@
+\xydef@\resetxyline@#1{\resetxyline@i{#1}\outputxyline@{#1}}
+\xydef@\resetxyline@i#1{\xylinethick@=#1\relax}
+\xydef@\outputxyline@#1{\transxyline@@{#1}%
+ \expandafter\xylineSpecial@@\expandafter{\next@}}
+\xylet@\resetxyline@@=\resetxyline@
+\xydef@\transxyline@#1{\edef\next@{\removePT@#1}}
+\xylet@\transxyline@@=\DN@
+\xylet@\xylineSpecial@@=\eat@
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xymacpat.xyp b/macros/generic/diagrams/xypic/texinputs/xymacpat.xyp
new file mode 100644
index 0000000000..5bdf9716db
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xymacpat.xyp
@@ -0,0 +1,60 @@
+% $Id: xymacpat.xyp,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%
+% Patterns for Xy-pic tile extension.
+% Copyright (c) 1995-1996 Ross Moore <ross.moore@mq.edu.au>
+%
+% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+% See the companion README and INSTALL files for further information.
+% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%
+% The Xy-pic package 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.
+%
+% The Xy-pic 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 GNU General Public License
+% for more details.
+%
+% You should have received a copy of the GNU General Public License along
+% with this package; if not, see http://www.gnu.org/licenses/.
+%
+mac01 00 <FFFFFFFFFFFFFFFF>
+mac02 08 <DDFF77FFDDFF77FF>
+mac03 16 <DD77DD77DD77DD77>
+mac04 32 <AA55AA55AA55AA55>
+mac05 16 <55FF55FF55FF55FF>
+mac06 32 <AAAAAAAAAAAAAAAA> <AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA>
+mac07 16 <EEDDBB77EEDDBB77> <EEEEEEDDDDDDBBBBBB777777EEEEEEDDDDDDBBBBBB777777>
+mac08 48 <8888888888888888> <888888888888888888888888888888888888888888888888>
+mac09 40 <B130031BD8C00C8D> <B1B1B13030300303031B1B1BD8D8D8C0C0C00C0C0C8D8D8D>
+mac10 56 <8010022001084004> <808080101010020202202020010101080808404040040404>
+mac11 36 <FF888888FF888888> <FFFFFF888888888888888888FFFFFF888888888888888888>
+mac12 42 <FF808080FF080808> <FFFFFF808080808080808080FFFFFF080808080808080808>
+mac13 63 <8000000000000000> <808080000000000000000000000000000000000000000000>
+mac14 58 <8040200002040800> <808080404040202020000000020202040404080808000000>
+mac15 49 <8244394482010101> <828282444444393939444444828282010101010101010101>
+mac16 34 <F87422478F172271> <F8F8F87474742222224747478F8F8F171717222222717171>
+mac17 48 <55A04040550A0404> <555555A0A0A04040404040405555550A0A0A040404040404>
+mac18 50 <2050888888880502> <202020505050888888888888888888888888050505020202>
+mac19 31 <BF00BFBFB0B0B0B0> <BFBFBF000000BFBFBFBFBFBFB0B0B0B0B0B0B0B0B0B0B0B0>
+mac20 64 <0000000000000000>
+mac21 60 <8000080080000800>
+mac22 56 <8800220088002200>
+mac23 48 <8822882288228822>
+mac24 48 <AA00AA00AA00AA00>
+mac25 32 <FF00FF00FF00FF00> <FFFFFF000000FFFFFF000000FFFFFF000000FFFFFF000000>
+mac26 48 <1122448811224488> <111111222222444444888888111111222222444444888888>
+mac27 48 <FF000000FF000000> <FFFFFF000000000000000000FFFFFF000000000000000000>
+mac28 56 <0102040810204080> <010101020202040404080808101010202020404040808080>
+mac29 56 <AA00800088008000> <AAAAAA000000808080000000888888000000808080000000>
+mac30 49 <FF80808080808080> <FFFFFF808080808080808080808080808080808080808080>
+mac31 51 <081C22C180010204> <0808081C1C1C222222C1C1C1808080010101020202040404>
+mac32 50 <881422418800AA00> <888888141414222222414141888888000000AAAAAA000000>
+mac33 58 <40A00000040A0000> <404040A0A0A00000000000000404040A0A0A000000000000>
+mac34 51 <038448300C020101> <0303038484844848483030300C0C0C020202010101010101>
+mac35 46 <8080413E080814E3> <8080808080804141413E3E3E080808080808141414E3E3E3>
+mac36 44 <102054AAFF020408> <101010202020545454AAAAAAFFFFFF020202040404080808>
+mac37 26 <77898F8F7798F8F8> <7777778989898F8F8F8F8F8F777777989898F8F8F8F8F8F8>
+mac38 48 <0008142A552A1408> <0000000808081414142A2A2A5555552A2A2A141414080808>
diff --git a/macros/generic/diagrams/xypic/texinputs/xymatrix.tex b/macros/generic/diagrams/xypic/texinputs/xymatrix.tex
new file mode 100644
index 0000000000..9cdf39b8d7
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xymatrix.tex
@@ -0,0 +1,500 @@
+%% xymatrix.tex from $Id: xymatrix.doc,v 3.14 2011/03/31 06:10:57 krisrose Exp $
+%%
+%% Xy-pic ``Matrix'' feature.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{matrix}{Matrix feature}{\stripRCS$Revision: 3.14 $}%
+ {Kristoffer H.~Rose}{krisrose@tug.org}%
+ {IBM T.~ J.\ Watson Research Center, P.O.~Box 704, Yorktown Heights, NY 10598 (USA)}
+\xynew@{count}\Row
+\xynew@{count}\Col
+\xydef@\maxrow@{0}
+\xydef@\maxcol@{0}
+\xydef@\maxcolrow@{0}
+\xynew@{toks}\queue@
+\xynew@{toks}\queue@@
+\xynew@{count}\qcount@
+\xynew@{count}\qcount@@
+\xydef@\clearq@{%
+ \global\queue@={}\global\qcount@=\@ne
+ \global\queue@@={}\global\qcount@@=\z@}
+\xydef@\addq@#1{\global\advance\matrixsize@\@ne
+ \ifnum\qcount@@<\qcount@ \let\addq@@=\addq@i
+ \else \let\addq@@=\addq@ii \fi
+ \expandafter\addq@@\the\queue@@\addq@@{#1}}
+\xylet@\addq@@=\relax
+\xydef@\addq@i#1\addq@@#2{%
+ \global\advance\qcount@@\@ne \global\queue@@={#1#2}}
+\xydef@\addq@ii#1\addq@@#2{%
+ \global\advance\qcount@\@ne \global\qcount@@=\z@
+ \global\queue@=\expandafter{\the\queue@#1#2}\global\queue@@={}}
+\xydef@\finishq@{\expandafter\addq@ii\the\queue@@\addq@@{}}
+\xynew@{count}\matrixsize@
+\xynew@{if}\ifnoisymatrices@ \noisymatrices@true
+\xydef@\SilentMatrices{\noisymatrices@false}
+\xydef@\NoisyMatrices{\noisymatrices@true}
+\xydef@\xymatrixnocompile{\global\matrixsize@=\z@
+ \ifnoisymatrices@\message{<xymatrix}\fi
+ \if\inxy@
+ \DN@{\nter@{}\xy@\xymatrix{\enter@{%
+ \def\noexpand\xy@minX@@{\xy@minX@@}\def\noexpand\xy@maxX@@{\xy@maxX@@}%
+ \def\noexpand\xy@minY@@{\xy@minY@@}\def\noexpand\xy@maxY@@{\xy@maxY@@}%
+ \edef\noexpand\xymatrixprefix@@{\codeof\xymatrixprefix@@}}}}%
+ \else \DN@{\xy \nter@\endxy \xy@\xymatrix{\nter@{}}}\fi \next@
+ \xy@@{\save@ \edef\matrixorigin@{\X@c=\the\X@c \Y@c=\the\Y@c}%
+ \edef\xy@minX@@{\the\X@c}\edef\xy@maxX@@{\the\X@c}%
+ \edef\xy@minY@@{\the\Y@c}\edef\xy@maxY@@{\the\Y@c}}%
+ \xdef\maxrow@{0}\xdef\maxcol@{0}\xdef\maxcolrow@{0}%
+ \mkHWdefaults@ \xymatrix@prefix""}
+\xylet@\xymatrix=\xymatrixnocompile
+\xydef@\xymatrixprefix@@{}
+\xydef@\xymatrix@prefix"#1"{\DN@{#1}\edef\xymatrixprefix@@{\codeof\next@}%
+ \DNii@##1{\xy@{"#1"}{\edef\xymatrixprefix@@{##1}}}%
+ \expandafter\nextii@\expandafter{\xymatrixprefix@@}%
+ \xyFN@\xymatrix@setup}
+\xydef@\xymatrix@setup{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\xymatrix@setup}%
+ \else\ifx \bgroup\next \let\next@=\xymatrix@ii
+ \else\addAT@\ifx\next \addAT@\DN@{\xy@{@}{}\xyFN@\xymatrix@at}%
+ \else\ifx "\next \let\next@=\xymatrix@prefix
+ \else \DN@{\xyerror@{\string\xymatrix<setup>{<rows>} expected}{}}%
+ \fi\fi\fi\fi \next@}
+\xydef@\xymatrix@ii#1{%
+ \xymatrix@pretypeset{#1}%
+ \ifnum\maxcol@=\z@ \mkWcol@ \mkWmax@ \mkHrow@ \mkHmax@
+ \xdef\maxcol@{\the\Col}\xdef\maxcolrow@{\the\Row}\fi
+ \ifnoisymatrices@\message{\maxcol@ x\maxrow@}\fi
+ \xymatrix@measureit@@ \the\queue@ \global\queue@={}%
+ \xymatrix@typeset{#1}\restore\xymatrix@insert
+ \xy@@\leave@ \leave@
+ \ifnoisymatrices@\message{\the\matrixsize@>}\fi \ignorespaces}
+\xydef@\xymatrixcompile#1#{\xymatrixcompile@{#1}}
+\xydef@\xymatrixcompile@#1#2{\xycompile{\xymatrixnocompile#1{#2}}}
+\xydef@\CompileMatrices{\let\xymatrix=\xymatrixcompile}
+\xydef@\NoCompileMatrices{\let\xymatrix=\xymatrixnocompile}
+\xydef@\xy@cossign@@{+}
+\xydef@\xy@sinsign@@{+}
+\xydef@\xy@cosabs@@{1}
+\xydef@\xy@sinabs@@{0}
+\xydef@\xy@tanabs@@{0}
+\xydef@\xy@cotabs@@{100}
+\xydef@\xymatrix@rotation{%
+ \xy@@{%
+ \edef\xy@cossign@@{\ifdim\cosDirection\p@<\z@-\else+\fi}%
+ \edef\xy@sinsign@@{\ifdim\sinDirection\p@<\z@-\else+\fi}%
+ \edef\xy@cosabs@@{%
+ \if\xy@cossign@@\cosDirection\else\xy@cossign@@\cosDirection\fi}%
+ \edef\xy@sinabs@@{%
+ \if\xy@sinsign@@\sinDirection\else\xy@sinsign@@\sinDirection\fi}%
+ \dimen@=\xy@cosabs@@\p@ \dimen@ii=\xy@sinabs@@\p@
+ \ifdim\dimen@ii<.01\p@ \def\xy@cotabs@@{100}%
+ \else \quotient@\xy@cotabs@@\dimen@\dimen@ii \fi
+ \dimen@=\xy@cosabs@@\p@ \dimen@ii=\xy@sinabs@@\p@
+ \ifdim\dimen@<.01\p@ \def\xy@tanabs@@{100}%
+ \else \quotient@\xy@tanabs@@\dimen@ii\dimen@ \fi}}
+\xylet@\xymatrixsavedCOORD@=\relax
+\xydef@\xymatrix@pretypeset#1{%
+ \global\Row=\z@ \xdef\maxcol@{0}\clearq@
+ \setbox8=\vtop{%
+ \ifx\xymatrixsavedCOORD@\relax \let\xymatrixsavedCOORD@=\COORD@ \fi
+ \let\COORD@=\xymatrixCOORD@
+ \everycr{}\let\\=\cr \tabskip=\z@ \offinterlineskip
+ \halign{\prentry@ ##!@&&\xyFN@\prentry@@##!@\cr#1\crcr}%
+ \prentry@@@}%
+ \xdef\maxrow@{\the\Row}%
+ \finishq@}
+\xydef@\prentry@{\relax
+ \ifnum\Row>\z@
+ \ifnum\maxcol@<\Col\xdef\maxcol@{\the\Col}\xdef\maxcolrow@{\the\Row}\fi
+ \expandafter\xdef\csname maxcol@\the\Row\endcsname{\the\Col}\fi
+ \global\advance\Row\@ne \global\Col=\z@ \xyFN@\prentry@@}
+\xylet@\lastprentry@@=\relax
+\xydef@\xyeatall@{\let\xy@=\xyeat@ \change@oxy@\xyeat@ \let\xy@@ix@=\eat@}
+\xydef@\prentry@@{\global\advance\Col\@ne
+ \let\next@=\prentry@@norm
+ \ifoldxymatrix@\else \ifx *\next \DN@*{\xyFN@\prentry@@star}\fi \fi
+ \next@}
+\xydef@\prentry@@star{\ifx *\next \DN@*{\xyFN@\prentry@@star@ii}%
+ \else \DN@##1##{\prentry@@star@i{##1}}\fi \next@}
+\xydef@\prentry@@star@i#1#2#3!@{\gdef\lastprentry@@{*#1{#2}#3}%
+ \setbox\lastobjectbox@=\object#1{#2}%
+ \prentry@@x}
+\xydef@\prentry@@star@ii{%
+ \ifx [\next
+ \DN@[##1]{\DN@####1{\def\entrymodifiers@{[##1]####1}}%
+ \expandafter\next@\expandafter{\entrymodifiers@}\prentry@@norm}%
+ \else
+ \DN@##1{\DN@####1{\def\entrymodifiers@{##1####1}}%
+ \expandafter\next@\expandafter{\entrymodifiers@}\prentry@@norm}%
+ \fi \next@}
+\xydef@\prentry@@norm#1!@{\gdef\lastprentry@@{#1}%
+ \DN@{\setbox\lastobjectbox@=\object}%
+ \expandafter\next@\entrymodifiers@{\xyeatall@ \everyentry@ #1}%
+ \prentry@@x}
+\xydef@\prentry@@x{%
+ \edef\next@{{\noexpand\pre@emit{\the\Row}{\Upness@}{\the\Col}{\Leftness@}%
+ {\the\L@c}{\the\R@c}{\the\D@c}{\the\U@c}{\expandafter\noexpand\the\Edge@c}}}%
+ \expandafter\addq@\next@ \box\lastobjectbox@}
+\xynew@{if}\ifoldxymatrix@ \oldxymatrix@false
+\xydef@\prentry@@@{\relax \let\next@=\prentry@@@i
+ \ifoldxymatrix@ \ifnum\Col=\@ne \ifx\lastprentry@@\empty
+ \global\advance\Row\m@ne \let\next@=\relax \fi\fi\fi
+ \global\let\lastprentry@@=\relax \next@}
+\xydef@\prentry@@@i{%
+ \ifnum\maxcol@<\Col \xdef\maxcol@{\the\Col}\xdef\maxcolrow@{\the\Row}\fi
+ \expandafter\xdef\csname maxcol@\the\Row\endcsname{\the\Col}}
+\xydef@\xy@minX@@{\z@}
+\xydef@\xy@maxX@@{\z@}
+\xydef@\xy@minY@@{\z@}
+\xydef@\xy@maxY@@{\z@}
+\xydef@\pre@emit#1#2#3#4#5#6#7#8#9{%
+ \global\Row=#1\global\Col=#3\relax
+ \ifnum#3=\@ne
+ \ifnum#1=\@ne \xy@@{\matrixorigin@}%
+ \else \count@@=#1\advance\count@@\m@ne
+ \edef\next@{\noexpand\xy@@{\noexpand\cfromid@
+ {\xymatrixprefix@@\the\count@@,1}}}\next@
+ \pre@emit@ \W@maxout\Hrow@c@@\W@maxin\Hrow@in\xy@tanabs@@
+ \X@c\xy@sinsign@@\xy@sinabs@@\xymatrixrowsep@
+ \pre@emit@ \Hrow@c@@\W@maxout\Hrow@in\W@maxin\xy@cotabs@@
+ \Y@c{-\xy@cossign@@}\xy@cosabs@@\xymatrixrowsep@
+ \fi
+ \else \count@@=#3\advance\count@@\m@ne
+ \pre@emit@ \Wcol@c@@\H@maxout\Wcol@in\H@maxin\xy@cotabs@@
+ \X@c\xy@cossign@@\xy@cosabs@@\xymatrixcolsep@
+ \pre@emit@ \H@maxout\Wcol@c@@\H@maxin\Wcol@in\xy@tanabs@@
+ \Y@c\xy@sinsign@@\xy@sinabs@@\xymatrixcolsep@
+ \fi
+ \DN@##1{\xy@@{\L@c=#5\R@c=#6\D@c=#7\U@c=#8\Edge@c={#9}\idfromc@{##1#1,#3}}}%
+ \expandafter\next@\expandafter{\xymatrixprefix@@}%
+ \xy@@{%
+ \dimen@=\X@c \advance\dimen@-\L@c
+ \ifdim\dimen@<\xy@minX@@ \edef\xy@minX@@{\the\dimen@}\fi
+ \dimen@=\X@c \advance\dimen@+\R@c
+ \ifdim\dimen@>\xy@maxX@@ \edef\xy@maxX@@{\the\dimen@}\fi
+ \dimen@=\Y@c \advance\dimen@-\D@c
+ \ifdim\dimen@<\xy@minY@@ \edef\xy@minY@@{\the\dimen@}\fi
+ \dimen@=\Y@c \advance\dimen@+\U@c
+ \ifdim\dimen@>\xy@maxY@@ \edef\xy@maxY@@{\the\dimen@}\fi}}
+\xydef@\pre@emit@#1#2#3#4{#1\A@ #2\B@ #3\R@ #4\dimen@
+ \edef\next@{{\the\A@}{\the\B@}{\the\R@}{\the\dimen@}}%
+ \expandafter\pre@emit@i\next@}
+\xydef@\pre@emit@i#1#2#3#4#5{\xy@@{%
+ \dimen@=#2\R@=#5\dimen@ \dimen@=#1\relax \ifdim\R@>\dimen@ \R@=\dimen@ \fi
+ \dimen@=#4\B@=#5\dimen@ \dimen@=#3\relax \ifdim\B@>\dimen@ \B@=\dimen@ \fi
+ \advance\R@\B@}%
+ \pre@emit@ii}
+\xydef@\pre@emit@ii#1#2#3#4{\xy@@{%
+ \dimen@=#4\dimen@=#3\dimen@ \advance\R@\dimen@ \advance#1#2\R@}}
+\xydef@\Wcol@in#1{#1=\csname Wcol@\the\Col\endcsname #1=.5#1}
+\xydef@\Wcol@out#1{#1=\csname Wcol@\the\Col\endcsname #1=.5#1}
+\xydef@\Wcol@c@@#1{#1=\csname Wcol@\the\count@@\endcsname #1=.5#1}
+\xydef@\W@maxin#1{#1=\W@max #1=.5#1}
+\xydef@\W@maxout#1{#1=\W@max #1=.5#1}
+\xydef@\Hrow@in#1{#1=\csname Hrow@\the\Row\endcsname #1=.5#1}
+\xydef@\Hrow@out#1{#1=\csname Hrow@\the\Row\endcsname #1=.5#1}
+\xydef@\Hrow@c@@#1{#1=\csname Hrow@\the\count@@\endcsname #1=.5#1}
+\xydef@\H@maxin#1{#1=\H@max #1=.5#1}
+\xydef@\H@maxout#1{#1=\H@max #1=.5#1}
+\xydef@\H@max{\z@}
+\xydef@\W@max{\z@}
+\xydef@\HW@max{\z@}
+\xydef@\mkHrow@{}
+\xydef@\mkWcol@{}
+\xydef@\mkHmax@{}
+\xydef@\mkWmax@{}
+\xydef@\mkHWmax@{}
+\xydef@\mkHWdefaults@{\let\xymatrix@measureit@@=\xymatrix@measureit
+ \let\mkHrow@=\Hrow@R \let\mkWcol@=\Wcol@C
+ \def\mkHmax@{\ifdim\dimen@>\H@max\relax \xdef\H@max{\the\dimen@}\fi}%
+ \def\mkWmax@{\ifdim\dimen@>\W@max\relax \xdef\W@max{\the\dimen@}\fi}%
+ \let\mkHWmax@=\HWmax@max}
+\xydef@\Hrow@R{\expandafter\xdef\csname Hrow@\the\Row\endcsname{\the\dimen@}}
+\xydef@\Wcol@C{\expandafter\xdef\csname Wcol@\the\Col\endcsname{\the\dimen@}}
+\xydef@\Hrow@max{\expandafter\gdef\csname Hrow@\the\Row\endcsname{\H@max}}
+\xydef@\Wcol@max{\expandafter\gdef\csname Wcol@\the\Col\endcsname{\W@max}}
+\xydef@\Hrow@HWmax{\expandafter\gdef\csname Hrow@\the\Row\endcsname{\HW@max}}
+\xydef@\Wcol@HWmax{\expandafter\gdef\csname Wcol@\the\Col\endcsname{\HW@max}}
+\xydef@\HWmax@max{%
+ \ifdim\H@max>\W@max\global\let\HW@max=\H@max\else\global\let\HW@max=\W@max\fi}
+\xydef@\HWmax@set#1{\gdef\HW@max{#1}%
+ \global\let\H@max=\HW@max \global\let\W@max=\HW@max}
+\xydef@\xymatrix@measureit{%
+ \xdef\H@max{\z@}\xdef\W@max{\z@}%
+ \setbox6=\vbox{\unvbox8 \global\Row=\maxrow@
+ \loop@ \dimen@ii=\lastskip\unskip \ifnum\z@<\Row
+ \setbox4=\lastbox \dimen@=\dp4 \advance\dimen@\ht4 \mkHrow@ \mkHmax@
+ \ifnum\Row=\maxcolrow@
+ \setbox2=\hbox{\unhbox4
+ \global\Col=\maxcol@
+ \loop@ \dimen@ii=\lastskip\unskip \ifnum\z@<\Col
+ \setbox\z@=\lastbox \dimen@=\wdz@ \mkWcol@ \mkWmax@
+ \global\advance\Col\m@ne
+ \repeat@}\fi
+ \global\advance\Row\m@ne
+ \repeat@}%
+ \mkHWmax@}
+\xylet@\xymatrix@measureit@@=\relax
+\xydef@\xymatrix@typeset#1{%
+ \clearq@
+ \hbox{\vtop{\xyqall@
+ \xy@@{\ifx\xymatrixsavedCOORD@\relax
+ \enter@{\noexpand\let\noexpand\COORD@\noexpand\xymatrixsavedCOORD@}%
+ \let\xymatrixsavedCOORD@=\COORD@ \let\COORD@=\xymatrixCOORD@
+ \else \enter@{}\fi}%
+ \ifx\xymatrixsavedCOORD@\relax \let\xymatrixsavedCOORD@=\COORD@ \fi
+ \let\COORD@=\xymatrixCOORD@
+ \kern\z@ \global\Row=\z@
+ \everycr{}\let\\=\cr \tabskip=\z@ \offinterlineskip
+ \halign{\entry@##!@&&\entry@@##!@\cr#1\crcr}%
+ \xy@@{\leave@}}}%
+ \finishq@ \expandafter\xy@@\expandafter{\the\queue@}\global\queue@={}}
+\xydef@\entry@{\relax \global\advance\Row\@ne \global\Col=\z@ \entry@@}
+\xydef@\entry@@{\global\advance\Col\@ne
+ \DN@##1,##2,##3@{\xy@{ENTRY "##3##1,##2"}{\Row=##1 \Col=##2\relax
+ \cfromid@{##3##1,##2}\pfromc@}}%
+ \edef\nextii@{\the\Row,\the\Col,\xymatrixprefix@@ @}%
+ \expandafter\next@\nextii@
+ \xyFN@\entry@@i}
+\xydef@\entry@@i{\let\next@=\entry@@norm
+ \ifoldxymatrix@\else \ifx *\next \DN@*{\xyFN@\entry@@star}\fi \fi
+ \next@}
+\xydef@\entry@@star{\ifx *\next \DN@*{\xyFN@\entry@@star@ii}%
+ \else \DN@##1##{\entry@@star@i{##1}}\fi \next@}
+\xydef@\entry@@star@i#1#2#3!@{%
+ \xy@@ix@{{#1}{#2}}\xy@@{\expandafter\dropentry@\the\toks9}%
+ \setboxz@h{\xyqall@
+ \ifx\xymatrixsavedCOORD@\relax \let\xymatrixsavedCOORD@=\COORD@ \fi
+ \let\COORD@=\xymatrixCOORD@ \everyentry@ #3}%
+ \setbox\z@=\copy\voidb@x}
+\xydef@\entry@@star@ii{%
+ \ifx [\next
+ \DN@[##1]{\DN@####1{\def\entrymodifiers@{[##1]####1}}%
+ \expandafter\next@\expandafter{\entrymodifiers@}\entry@@norm}%
+ \else
+ \DN@##1{\DN@####1{\def\entrymodifiers@{##1####1}}%
+ \expandafter\next@\expandafter{\entrymodifiers@}\entry@@norm}%
+ \fi \next@}
+\xydef@\entry@@norm#1!@{%
+ \DN@##1{\expandafter\xy@@ix@
+ \expandafter{\expandafter{\entrymodifiers@}{##1}}}%
+ \expandafter\next@\expandafter{\everyentry@#1}%
+ \xy@@{\expandafter\dropentry@\the\toks9}%
+ \setbox\z@=\expandafter\object\entrymodifiers@{\xyqall@
+ \ifx\xymatrixsavedCOORD@\relax \let\xymatrixsavedCOORD@=\COORD@ \fi
+ \let\COORD@=\xymatrixCOORD@ \everyentry@ #1}%
+ \setbox\z@=\copy\voidb@x}
+\xydef@\dropentry@#1#2{\drop@{#1}{\xyeatall@
+ \ifx\xymatrixsavedCOORD@\relax \let\xymatrixsavedCOORD@=\COORD@ \fi
+ \let\COORD@=\xymatrixCOORD@ #2}}
+\xydef@\xyqall@{%
+ \ifxysaving@ \let\xy@=\xyqs@ \let\xy@@ix@=\xysave@@toksix@
+ \else \let\xy@=\xyq@ \let\xy@@ix@=\xyq@@toksix@ \fi
+ \change@oxy@\xy@}
+\xydef@\xyq@#1#2{\addq@{#2}}
+\xydef@\xyq@@toksix@{\begingroup
+ \xyuncatcodes \afterassignment\xyq@@toksix@i \global\toks9=}
+\xydef@\xyq@@toksix@i{%
+ \DN@##1{\endgroup \xy@@{\global\toks9={##1}}}%
+ \expandafter\next@\expandafter{\the\toks9}}
+\xydef@\xyqs@{\global\advance\matrixsize@\@ne \xysave@}
+\xydef@\xymatrix@insert{%
+ \xy@@{\edef\nextii@{{\xy@minX@@}{\xy@maxX@@}{\xy@minY@@}{\xy@maxY@@}}%
+ \expandafter\xymatrix@insert@\nextii@}}
+\xydef@\xymatrix@insert@#1#2#3#4{\matrixorigin@
+ \L@c=+\X@c \advance\L@c-#1\relax
+ \R@c=-\X@c \advance\R@c+#2\relax
+ \D@c=+\Y@c \advance\D@c-#3\relax
+ \U@c=-\Y@c \advance\U@c+#4\relax
+ \Edge@c={\rectangleEdge}}
+\xylet@\thematrixCOORD@@=\relax
+\xylet@\thematrixprefix@@=\relax
+\xydef@\xymatrixCOORD@{%
+ \ifx [\next
+ \DN@[##1]{\xy@{[##1]}{\def\thematrixCOORD@@{[##1]}}%
+ \xyFN@\xymatrixCOORD@i##1]}%
+ \else \let\next@=\xymatrixsavedCOORD@ \fi \next@}
+\xydef@\xymatrixCOORD@i{\count@=\Row \count@@=\Col
+ \let\thematrixprefix@@=\xymatrixprefix@@
+ \ifcat A\noexpand\next
+ \DN@##1{\expandafter\notrelaxorelse@\csname xymatrixCOORD@i@##1\endcsname
+ \xymatrixCOORD@other}%
+ \else\ifx ]\next \DN@]{\xymatrixCOORD@x}%
+ \else\ifx "\next \DN@"##1"{\DN@{##1}\edef\thematrixprefix@@{\codeof\next@}%
+ \xyFN@\xymatrixCOORD@ii}%
+ \else \let\next@=\xymatrixCOORD@other \fi\fi\fi \next@}
+\xydef@\xymatrixCOORD@i@u{\advance\count@ \m@ne\xyFN@\xymatrixCOORD@ii}
+\xydef@\xymatrixCOORD@i@d{\advance\count@ \@ne \xyFN@\xymatrixCOORD@ii}
+\xydef@\xymatrixCOORD@i@l{\advance\count@@\m@ne\xyFN@\xymatrixCOORD@ii}
+\xydef@\xymatrixCOORD@i@r{\advance\count@@\@ne \xyFN@\xymatrixCOORD@ii}
+\xydef@\xymatrixCOORD@ii{%
+ \ifcat A\noexpand\next
+ \DN@##1{\expandafter\notrelaxorelse@\csname xymatrixCOORD@i@##1\endcsname
+ \xymatrixCOORD@error}%
+ \else\ifx ]\next \DN@]{\xymatrixCOORD@x}%
+ \else \let\next@=\xymatrixCOORD@xx \fi\fi \next@}
+\xydef@\xymatrixCOORD@error#1{\DN@{#1}%
+ \xyerror@{illegal <coord> (\codeof\next@): illegal [...] target form}{}%
+ \xyFN@\xymatrixCOORD@ii}
+\xydef@\xymatrixCOORD@other#1,#2]{%
+ \advance\count@#1\advance\count@@#2\xymatrixCOORD@x}
+\xydef@\xymatrixCOORD@x{%
+ \DN@##1{\xy@@{%
+ \expandafter\let\expandafter\next@\csname Q@##1\endcsname
+ \ifx\next@\relax \xyerror@RC{##1}\else \next@ \fi}%
+ \afterCOORD@}%
+ \edef\nextii@{{\thematrixprefix@@\the\count@,\the\count@@}}%
+ \expandafter\next@\nextii@}
+\xydef@\xymatrixCOORD@xx{%
+ \DN@##1{\xy@@{%
+ \expandafter\let\expandafter\next@\csname Q@##1\endcsname
+ \ifx\next@\relax \xyerror@RC{##1}\else \next@\no@@ \fi}%
+ \afterPLACE\xymatrixCOORD@after}%
+ \edef\nextii@{{\thematrixprefix@@\the\count@,\the\count@@}}%
+ \expandafter\next@\nextii@}
+\xydef@\xymatrixCOORD@after{%
+ \ifx ]\next \DN@]{\afterCOORD@}%
+ \else \let\next@=\xymatrixCOORD@error \fi \next@}
+\xydef@\xyerror@RC#1{\xyerror@{in entry \string"\the\Row,\the\Col\string":
+ No \codeof\thematrixCOORD@@\space(is \string"#1\string") from here}{}}
+\xylet@\xymatrix@addop@@=\relax
+\xydef@\xymatrix@at{\def\xymatrix@addop@@{\xymatrix@R\xymatrix@C}%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\xymatrix@at}%
+ \else\ifx !\next \DN@!{\xyFN@\xymatrix@fix}%
+ \else\addPLUS@\ifx \next \let\next@=\xymatrix@addop
+ \else\addDASH@\ifx \next \let\next@=\xymatrix@addop
+ \else\addEQ@\ifx \next \let\next@=\xymatrix@addop
+ \else\ifx 1\next \DN@1{%
+ \let\objectmargin@=\p@ \xyFN@\xymatrix@setup}%
+ \else\ifx R\next \def\xymatrix@addop@@{\xymatrix@R}\DN@ R{\xymatrix@addop}%
+ \else\ifx C\next \def\xymatrix@addop@@{\xymatrix@C}\DN@ C{\xymatrix@addop}%
+ \else\ifx M\next \def\xymatrix@addop@@{\xymatrix@M}\DN@ M{\xymatrix@addop}%
+ \else\ifx L\next \def\xymatrix@addop@@{\xymatrix@L}\DN@ L{\xymatrix@addop}%
+ \else\ifx H\next \def\xymatrix@addop@@{\xymatrix@H}\DN@ H{\xymatrix@addop}%
+ \else\ifx W\next \def\xymatrix@addop@@{\xymatrix@W}\DN@ W{\xymatrix@addop}%
+ \else\ifx *\next \DN@*{\xyFN@\xymatrix@mods}%
+ \else \DN@{\afterDIRECTIONorEMPTY
+ {\xymatrix@rotation \xyFN@\xymatrix@setup}{%
+ \xyerror@{<addop> or <direction> or one of 1RCMLHW*! expected}{}%
+ \xyFN@\xymatrix@setup}}%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@}
+\xydef@\xymatrix@fix{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\xymatrix@fix}%
+ \else\ifx R\next \let\mkHrow@=\Hrow@max \DN@ R{\xyFN@\xymatrix@fix@}%
+ \else\ifx C\next \let\mkWcol@=\Wcol@max \DN@ C{\xyFN@\xymatrix@fix@}%
+ \else \let\mkHrow@=\Hrow@HWmax \let\mkWcol@=\Wcol@HWmax
+ \let\next@=\xymatrix@fix@
+ \fi\fi\fi \next@}
+\xydef@\xymatrix@fix@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\xymatrix@fix@}%
+ \else\ifx 0\next \def\mkHWmax@{\HWmax@set\z@}\DN@ 0{\xyFN@\xymatrix@setup}%
+ \else\addEQ@\ifx\next \addEQ@\DN@{\afterassignment\xymatrix@fix@x\dimen@ii=}%
+ \else \let\mkHWmax@=\HWmax@max \let\next@=\xymatrix@setup \fi\fi\fi \next@}
+\xydef@\xymatrix@fix@x{%
+ \edef\mkHWmax@{\noexpand\HWmax@set{\the\dimen@ii}}\xyFN@\xymatrix@setup}
+\xydef@\xymatrix@addop{\afterADDOP{\xyFN@\xymatrix@addop@}}
+\xydef@\xymatrix@addop@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\xymatrix@addop@}%
+ \else\ifx R\next \DN@ R{\xy@{R}{}\dimen@ii=\xymatrixrowsep@\xymatrix@addop@x}%
+ \else\ifx C\next \DN@ C{\xy@{C}{}\dimen@ii=\xymatrixcolsep@\xymatrix@addop@x}%
+ \else \DN@{\afterassignment\xymatrix@addop@x\dimen@ii=}\fi\fi\fi \next@}
+\xydef@\xymatrix@addop@x{\expandafter\xy@\expandafter{\the\dimen@ii}{}%
+ \xymatrix@addop@@ \xyFN@\xymatrix@setup}
+\xydef@\xymatrix@R{\Addop@@\xymatrixrowsep@\dimen@ii}
+\xydef@\xymatrix@C{\Addop@@\xymatrixcolsep@\dimen@ii}
+\xydef@\xymatrix@M{\Addop@@\objectmargin@\dimen@ii}
+\xydef@\xymatrix@L{\Addop@@\labelmargin@\dimen@ii}
+\xydef@\xymatrix@H{\Addop@@\objectheight@\dimen@ii}
+\xydef@\xymatrix@W{\Addop@@\objectwidth@\dimen@ii}
+\xydef@\xymatrixrowsep@{2pc}
+\xydef@\xymatrixcolsep@{2pc}
+\xydef@\xymatrixrowsep{\afterADDOP{\Addop@@\xymatrixrowsep@}}
+\xydef@\xymatrixcolsep{\afterADDOP{\Addop@@\xymatrixcolsep@}}
+\xydef@\xymatrix@mods{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\xymatrix@mods}%
+ \else\ifx [\next
+ \DN@ [##1]{\xy@{[##1]}{}\DN@####1{\def\entrymodifiers@{[##1]####1}}%
+ \expandafter\next@\expandafter{\entrymodifiers@}\xyFN@\xymatrix@setup}%
+ \else\addPLUS@\ifx \next \DN@##1{\DNii@{##1}\xyFN@\xymatrix@change}%
+ \else\addDASH@\ifx \next \DN@##1{\DNii@{##1}\xyFN@\xymatrix@change}%
+ \else\addEQ@\ifx \next \DN@##1{\DNii@{##1}\xymatrix@set}%
+ \else \let\next@=\xymatrix@mods@error \fi\fi\fi\fi\fi \next@}
+\xydef@\xymatrix@set{%
+ \begingroup \plainxy@
+ \afterVECTORorEMPTY\xymatrix@mods@x\xymatrix@mods@error}
+\xydef@\xymatrix@change{%
+ \addEQ@\ifx\next \DN@##1{\expandafter\DNii@\expandafter{\nextii@##1}%
+ \expandafter\xy@\expandafter{\nextii@}{}\begingroup \plainxy@
+ \afterVECTORorEMPTY\xymatrix@mods@x\xymatrix@mods@xx}%
+ \else \DN@{\expandafter\xy@\expandafter{\nextii@}{}\begingroup \plainxy@
+ \afterVECTORorEMPTY\xymatrix@mods@x\xymatrix@mods@xx}\fi
+ \next@}
+\xydef@\xymatrix@mods@x{\expandafter\xy@\expandafter{\nextii@}{}%
+ \def\next@##1##2##3{\def\nextii@####1{##1##2####1##3}}%
+ \addGT@{\addLT@{\expandafter\next@\expandafter{\nextii@}}}%
+ \DN@##1{\gdef\tmp@@@{{##1}}}%
+ \edef\nextiii@{{\the\X@c,\the\Y@c}}%
+ \expandafter\expandafter\expandafter\next@
+ \expandafter\expandafter\expandafter{\expandafter\nextii@\nextiii@}%
+ \endgroup
+ \DN@##1{\xy@{##1}{}\DN@####1{\def\entrymodifiers@{##1####1}}%
+ \expandafter\next@\expandafter{\entrymodifiers@}\xyFN@\xymatrix@setup}%
+ \expandafter\next@\tmp@@@}
+\xydef@\xymatrix@mods@xx{\expandafter\xy@\expandafter{\nextii@}{}%
+ \expandafter\gdef\expandafter\tmp@@@\expandafter{\expandafter{\nextii@}}%
+ \endgroup
+ \DN@##1{\xy@{##1}{}\DN@####1{\def\entrymodifiers@{##1####1}}%
+ \expandafter\next@\expandafter{\entrymodifiers@}\xyFN@\xymatrix@setup}%
+ \expandafter\next@\tmp@@@}
+\xydef@\xymatrix@mods@error{\endgroup
+ \xyerror@{Impossible @*<addop><size> <setup>.}{}\xyFN@\xymatrix@setup}
+\xywarnifdefined\entrymodifiers
+\expandafter\def\addEQ@\entrymodifiers#1{\def\entrymodifiers@{#1}\ignorespaces}
+\xydef@\entrymodifiers@{!V\entrybox}
+\xydef@\entrybox#1{\hbox{\setbox\z@=\objectbox{#1}%
+%%
+%% \L@p=\wdz@ \D@p=\ht\z@ \advance\D@p\dp\z@
+%% \dimen@=\objectwidth@ \advance\dimen@-\L@p
+%% \ifdim\dimen@>\z@ \advance\L@p\dimen@ \R@p=.5\dimen@ \else \R@p=\z@ \fi
+%% \dimen@=\objectheight@ \advance\dimen@-\D@p
+%% \ifdim\dimen@>\z@ \advance\D@p\dimen@ \fi
+%% \dimen@=\objectmargin@ \advance\L@p2\dimen@ \advance\D@p2\dimen@
+%% \U@p=-.5\ht\z@ \advance\U@p.5\dp\z@ \advance\R@p\objectmargin@
+%% \setboxz@h{\kern\R@p \raise\U@p\boxz@}%
+%% \wdz@=\L@p \ht\z@=.5\D@p \dp\z@=.5\D@p
+ \L@p=\wdz@ \R@p=\z@
+ \dimen@=\objectwidth@ \advance\dimen@-\L@p
+ \ifdim\dimen@>\z@ \advance\L@p\dimen@ \R@p=.5\dimen@ \fi
+ \dimen@=\objectmargin@ \advance\L@p2\dimen@ \advance\R@p\dimen@
+ \D@p=\ht\z@ \advance\D@p\dp\z@ \U@p=-\fontdimen22\textfont\tw@
+ \dimen@=\objectheight@ \advance\dimen@-\D@p
+ \ifdim\dimen@>\z@ \advance\D@p\dimen@ \fi
+ \dimen@=\objectmargin@ \advance\D@p2\dimen@
+ \setboxz@h{\kern\R@p \raise\U@p\boxz@}%
+ \wdz@=\L@p
+ \advance\D@p-\ht\z@ \advance\D@p-\dp\z@ \D@p=.5\D@p
+ \dimen@=\ht\z@ \advance\dimen@\D@p \ht\z@=\dimen@
+ \dimen@=\dp\z@ \advance\dimen@\D@p \dp\z@=\dimen@
+ \boxz@}}
+\xywarnifdefined\everyentry
+\expandafter\def\addEQ@\everyentry#1{\def\everyentry@{#1}\ignorespaces}
+\xylet@\everyentry@=\empty
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xymovie.tex b/macros/generic/diagrams/xypic/texinputs/xymovie.tex
new file mode 100644
index 0000000000..a8950e694a
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xymovie.tex
@@ -0,0 +1,75 @@
+%% xymovie.tex from $Id: xymovie.doc,v 3.9 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Movie Storyboard extension'' option.
+%% Copyright (c) 1996-1997 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{movie}{Movie Storyboard extension}{\stripRCS$Revision: 3.9 $}%
+ {Kristoffer H.~Rose}{krisrose@tug.org}%
+ {IBM T.~ J.\ Watson Research Center, P.O.~Box 704, Yorktown Heights, NY 10598 (USA)}
+\xynew@{dimen}\m@height
+\xynew@{dimen}\m@width
+\xydef@\extractparameterm@#1#2#3{%
+ \DN@##1,#1=##2,##3@{\csname m@#1\endcsname=##2\relax}%
+ \next@,#2,#3,@}
+\xydef@\MovieSetup#1{%
+ \extractparameterm@{height}{#1}{height=2in}%
+ \extractparameterm@{width}{#1}{width=2in}%
+}
+\xydef@\theScene{0}
+\xydef@\theF{0}
+\xydef@\theFr{1}
+\xydef@\F#1{#1(0)}
+\xydef@\Fr#1{#1(1)}
+\xynew@{if}\iflastframe@
+\xynew@{count}\m@scene
+\xydef@\scene{\advance\m@scene\@ne
+ \DN@{\ifx*\next \lastframe@true \DN@*{\xyFN@\scene@}%
+ \else \let\next@=\scene@ \fi \next@}%
+ \xyFN@\next@}
+\xydef@\scene@{%
+ \ifx[\next \DN@[##1]{\scene@i}\else \let\next@=\scene@i \fi \next@}
+\long\def\scene@i#1{{%
+ \def\caption##1{\gdef\m@caption{Scene \the\m@scene. ##1}}%
+ \edef\theScene{\the\m@scene}%
+ \def\theF{0}\def\theFr{1}%
+ \def\F##1{##1(0)}\def\Fr##1{##1(1)}%
+ \scene@frame{#1}%
+ \iflastframe@
+ \def\caption##1{}%
+ \gdef\m@caption{The End.}%
+ \def\theF{1}\def\theFr{0}%
+ \def\F##1{##1(1)}\def\Fr##1{##1(0)}%
+ \scene@frame{#1}%
+ \fi
+ }\ignorespaces}
+\def\scene@frame#1{\vbox{\null
+ \dimen@=\m@width \advance\dimen@2\xydashw@
+ \hrule width\dimen@
+ \hbox to\dimen@{\vrule width\xydashw@ \hss
+ \vbox to\m@height{\hsize=\m@width \null\vfil{#1}\vfil\null}%
+ \hss \vrule width\xydashw@}%
+ \hrule width\dimen@
+ \setbox0=\hbox{%
+ \setbox0=\hbox to\m@width{\hss\strut \m@caption\hss}%
+ \dimen0=\dp0 \ht0=0pt \dp0=0pt \raise\dimen0\box0}%
+ \ht0=0pt \dp0=0pt \box0\relax
+ \null}}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xynecula.tex b/macros/generic/diagrams/xypic/texinputs/xynecula.tex
new file mode 100644
index 0000000000..d39f505232
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xynecula.tex
@@ -0,0 +1,330 @@
+%% xynecula.tex from $Id: xynecula.doc,v 3.4 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Necula extensions'' option.
+%% Copyright (c) 1998 George C. Necula <necula@cs.cmu.edu>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{necula}{Necula's extensions}{\stripRCS$Revision: 3.4 $}%
+ {George C. Necula}{necula@cs.cmu.edu}%
+ {School of Computer Science,
+ Carnegie Mellon University,
+ 5000 Forbes Avenue,
+ Pittsburgh, PA 15213-3891, USA}
+\def\expandbeforenext@#1{%
+ \DN@ e|##1|{\edef\tmp@{##1}\expandafter\xyFN@\expandafter#1\tmp@}%
+}
+\xylet@\xy@oldOBJECT@=\OBJECT@
+\xydef@\xy@newOBJECT@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\xy@newOBJECT@}%
+ \else\ifx e\next
+ \expandbeforenext@\OBJECT@
+ \else
+ \DN@{\xy@oldOBJECT@}\fi\fi
+ \next@}%
+\let\OBJECT@=\xy@newOBJECT@
+\xylet@\xy@oldCOORD@=\COORD@
+\xydef@\xy@newCOORD@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\xy@newCOORD@}%
+ \else\ifx e\next
+ \expandbeforenext@\COORD@
+ \else
+ \DN@{\xy@oldCOORD@}\fi\fi
+ \next@}%
+\let\COORD@=\xy@newCOORD@
+\xydefcsname@{*stylechar@P@}#1{\Pshape@#1@}
+\xynew@{count}\c@poly@count \c@poly@count=\z@
+\xydef@\Pshape@:#1@{%
+ \addtotoks@{%
+ \def\poly@list{@}%
+ \poly@parse #1,\relax,%Sets the poly@list
+ \def\poly@cache{}%
+ \edef\poly@id{\the\c@poly@count}%
+ \global\advance\c@poly@count\@ne
+ \poly@setEdge
+ \edef\poly@saveLcshape{\the\L@c}%
+ \polygonEdge@Outer% Set U,R,D,L
+ \poly@setEdge
+ \dimen@=\poly@saveLcshape\advance\dimen@-\L@c
+ \advance\R@p -\dimen@
+}}
+\xydef@\poly@setEdge{\expandafter\poly@setEdge@\poly@list\poly@id}
+\xydef@\poly@setEdge@#1@#2{\Edge@c={\polygonEdge#1@#2@}%
+ \expandafter\xdef\csname poly@cache#2%
+ \endcsname{\poly@cache}}
+\xydefcsname@{frm[P]{-}}{\expandafter\draw@polyframe\the\Edge@c{-}}
+\xydefcsname@{frm[P]{.}}{\expandafter\draw@polyframe\the\Edge@c{.}}
+\xydefcsname@{frm[P]{=}}{\expandafter\draw@polyframe\the\Edge@c{=}}
+\xydef@\draw@polyframe\polygonEdge#1@#2@#3{%
+ \def\poly@dir{#3}%
+ \def\poly@list{#1@}%
+ \def\poly@id{#2}%
+ \edef\poly@cache{\csname poly@cache\poly@id\endcsname}%
+ \draw@polygon}
+\xydef@\poly@empty{}
+\xydef@\poly@map#1#2,#3;#4@{%
+ #1{#2}{#3}%
+ \def\tmp@{#4}%
+ \ifx \poly@empty\tmp@ \else
+ \poly@map@next#1#4@%
+ \fi
+}
+\xydef@\poly@map@stop#1@{}
+\xydef@\poly@mapExpand#1#2{%
+ \edef\tmp@{\noexpand\poly@map\noexpand #1#2}%
+ \tmp@}
+\xydef@\poly@parse #1,{%
+ \ifx #1\relax
+ \poly@close
+ \let\next@=\relax
+ \else
+ \save@
+ \POS #1%
+ \edef\tmp@{{\the\X@c}{\the\Y@c}}%
+ \expandafter\poly@append\tmp@
+ \restore
+ \let\next@=\poly@parse
+ \fi
+ \next@
+}
+\xydef@\poly@append#1#2{\expandafter\poly@append@\poly@list{#1,#2;}}
+\xydef@\poly@append@#1@#2{\global\def\poly@list{#1#2@}}
+\xydef@\poly@close{\expandafter\poly@close@\poly@list}
+\xydef@\poly@close@#1,#2;#3@{\poly@append{#1}{#2}}
+\xydef@\draw@polygon{%
+ \save@
+ \X@origin=\X@c \Y@origin=\Y@c
+ \poly@setp
+ \U@c=\z@\R@c=\z@\D@c=\z@\L@c=\z@\U@p=\z@\R@p=\z@\D@p=\z@\L@p=\z@
+ \Edge@c={\zeroEdge}\Edge@p={\zeroEdge}%
+ \let\poly@map@next=\poly@map
+ \poly@mapExpand\poly@drawseg\poly@rest
+ \restore
+}
+\xydef@\poly@setp{\expandafter\poly@setp@\poly@list}
+\xydef@\poly@setp@#1,#2;#3@{%
+ \X@p=#1\advance\X@p\X@origin \Y@p=#2\advance\Y@p\Y@origin%
+ \global\def\poly@rest{#3@}}
+\xydef@\poly@drawseg#1#2{%
+ \dimen@=#1\X@c=\the\dimen@\advance\X@c \X@origin
+ \dimen@=#2\Y@c=\the\dimen@\advance\Y@c \Y@origin
+ \expandafter\connect@\expandafter\dir\poly@dir%
+ \X@p=\X@c\Y@p=\Y@c}
+\xydef@\polygonEdge#1@#2@#3{%
+ \def\poly@list{#1@}%
+ \def\poly@id{#2}%
+ \edef\poly@cache{\csname poly@cache\poly@id\endcsname}%
+ \ifcase#3\relax
+ \DN@{\polygonEdge@Inters
+ }%
+ \or \DN@{\polygonEdge@Under}%
+ \or \DN@{\polygonEdge@Dist}%
+ \or \DN@{\rectangleProp@}%
+ \or \DN@{\polygonEdge@Inner}%
+ \or \DN@{\polygonEdge@Outer}%
+ \else \DN@{}\fi
+ \next@}
+\newif\ifpoly@badinters
+\xydef@\polygonEdge@Inters{%
+ \ifx\poly@cache\poly@empty
+ \poly@intersdoit
+ \else
+ \expandafter\poly@intersprobecache\poly@cache @%
+ \fi
+}
+\xydef@\poly@cachehit#1#2{%
+ \X@c=#1\Y@c=#2}
+\xydef@\poly@cachehitdisable#1#2{\poly@intersdoit}
+\xydef@\poly@intersprobecache#1,#2,#3,#4,#5@{%
+ \dimen@=#1\advance\dimen@-\d@X
+ \ifdim\zz@\dimen@
+ \dimen@=#2\advance\dimen@-\d@Y
+ \ifdim\zz@\dimen@
+ \poly@cachehit{#3}{#4}
+ \else
+ \poly@intersdoit
+ \fi
+ \else
+ \poly@intersdoit
+ \fi
+}
+\xydef@\poly@intersdoit{%
+ \edef\polyoldA@{\the\A@}\edef\polyoldB@{\the\B@}%
+ \def\poly@intersneg{}\def\poly@interspos{}%
+ \save@
+ \poly@setorigin
+ \def\zeroDivide@{\poly@badinterstrue}%
+ \let\poly@map@next=\poly@map
+ \poly@mapExpand\poly@interseg\poly@rest
+ \ifx\poly@intersneg\poly@empty
+ \poly@badinterstrue
+ \else
+ \ifx\poly@interspos\poly@empty
+ \poly@badinterstrue
+ \else
+ \poly@badintersfalse
+ \fi
+ \fi
+ \restore
+ \A@=\polyoldA@\B@=\polyoldB@
+ \ifpoly@badinters \else
+ \edef\tmp@{\poly@interspos,\poly@intersneg @}%
+ \expandafter\poly@intersfinish\tmp@
+ \fi
+}
+\xydef@\poly@intersfinish#1,#2,#3@{%
+ \X@c=#1\Y@c=#2\relax
+ \xdef\poly@cache{\the\d@X,\the\d@Y,#1,#2,#3}%
+ \poly@setEdge
+}
+\xydef@\poly@setorigin{\expandafter\poly@setorigin@\poly@list}
+\xydef@\poly@setorigin@#1,#2;#3@{%
+ \X@origin=#1\advance\X@origin\X@c \Y@origin=#2\advance\Y@origin\Y@c%
+ \global\def\poly@rest{#3@}}
+\xydef@\poly@interseg#1#2{%
+ \dimen@=#1\advance\dimen@\X@c \edef\poly@saveXcinters{\the\dimen@}%
+ \dimen@=#2\advance\dimen@\Y@c \edef\poly@saveYcinters{\the\dimen@}%
+ \save@
+ \poly@badintersfalse
+ \R@c=\poly@saveXcinters \advance\R@c -\X@origin
+ \U@c=\poly@saveYcinters \advance\U@c -\Y@origin
+ \intersect@
+ \A@=\X@c \B@=\Y@c
+ \restore
+ \ifpoly@badinters
+ \else
+\poly@isonseg\X@origin\Y@origin\A@\B@\poly@saveXcinters\poly@saveYcinters
+ \ifpoly@badinters
+ \else
+ \poly@isonray\X@c\Y@c\A@\B@\X@p\Y@p
+ \ifpoly@badinters
+ \edef\poly@intersneg{\the\A@,\the\B@}%
+ \else
+ \edef\poly@interspos{\the\A@,\the\B@}%
+ \fi
+ \fi
+ \fi
+ \X@origin=\poly@saveXcinters\Y@origin=\poly@saveYcinters
+}
+\xydef@\polygonEdge@Dist{\xyerror@{Dist is not yet implemented for polygons}}
+\newif\ifpoly@closedrange
+\xydef@\poly@isinrange#1#2#3{%
+ \ifpoly@badinters \else
+ \dimen@=#1\dimen@i=#2\dimen@ii=#3\relax
+ \advance\dimen@ii -\dimen@ \advance\dimen@i -\dimen@
+ \ifdim\dimen@ii<0pt\relax
+ \ifdim\dimen@i>100\almostz@
+ \poly@badinterstrue
+ \fi
+ \dimen@i=-\dimen@i \dimen@ii=-\dimen@ii
+ \else
+ \ifdim\dimen@i<-100\almostz@\relax
+ \poly@badinterstrue
+ \fi
+ \fi
+ \ifpoly@closedrange
+ \advance\dimen@ii 100\almostz@
+ \ifdim\dimen@i>\dimen@ii
+ \poly@badinterstrue
+ \fi
+ \fi
+ \fi}
+\xydef@\poly@isonseg#1#2#3#4#5#6{%
+ \poly@closedrangetrue
+ \poly@isinrange{#1}{#3}{#5}%
+ \poly@isinrange{#2}{#4}{#6}%
+}
+\xydef@\poly@isonray#1#2#3#4#5#6{%
+ \poly@closedrangefalse
+ \poly@isinrange{#1}{#3}{#5}%
+ \poly@isinrange{#2}{#4}{#6}%
+}
+\xydef@\polygonEdge@Under{%
+ \edef\polysaveA@under{\the\A@}\edef\polysaveB@under{\the\B@}%
+ \edef\poly@saveXcUnder{\the\X@c}\edef\poly@saveYcUnder{\the\Y@c}%
+ \polygonEdge@Inters
+ \ifpoly@badinters% p is very close to c
+ \Inside@true
+ \else
+ \A@=\X@c\B@=\Y@c
+ \X@c=\poly@saveXcUnder\Y@c=\poly@saveYcUnder
+ \poly@isonseg\X@c\Y@c\X@p\Y@p\A@\B@
+ \ifpoly@badinters \Inside@false \else \Inside@true\fi
+ \A@=\polysaveA@under\B@=\poly@saveB@under
+ \fi
+}
+\xydef@\polygonEdge@Inner{%
+ \enter@{\basefromthebase@ \pfromthep@ \DirectionfromtheDirection@}%
+ \L@c=\X@c \D@c=\Y@c
+ \polygonEdge@Inters
+ \ifpoly@badinters
+ \czeroEdge@
+ \else
+ \expandafter\poly@getinterspoints\poly@cache @%
+ \ifdim\X@c>\R@c
+ \L@c=\R@c \R@c=\X@c
+ \else
+ \L@c=\X@c
+ \fi
+ \X@c=0.5\L@c \advance\X@c 0.5\R@c \advance\R@c -\X@c \L@c=\R@c
+ \ifdim\Y@c>\U@c
+ \D@c=\U@c \U@c=\Y@c
+ \else
+ \D@c=\Y@c
+ \fi
+ \Y@c=0.5\D@c \advance\Y@c 0.5\U@c \advance\U@c -\Y@c \D@c=\U@c
+ \Edge@c={\rectangleEdge}%
+ \fi
+ \leave@
+}
+\xydef@\poly@getinterspoints#1,#2,#3,#4,#5,#6@{%
+ \R@c=#3\U@c=#4\X@c=#5\Y@c=#6}
+\xydef@\polygonEdge@Outer{%
+ \enter@{\basefromthebase@ \pfromthep@ \DirectionfromtheDirection@}%
+ \czeroEdge@
+ \let\poly@map@next=\poly@map
+ \poly@mapExpand\poly@findextent\poly@list
+ \Edge@c={\rectangleEdge}%
+ \leave@
+}
+\xydef@\poly@findextent#1#2{%
+ \dimen@=#1\dimen@=\the\dimen@% it fails if I remove the second assign
+ \ifdim\dimen@>\R@c \R@c=\dimen@ \fi
+ \ifdim -\dimen@>\L@c \L@c=-\dimen@ \fi
+ \dimen@=#2\dimen@=\the\dimen@% it fails if I remove the second assign
+ \ifdim\dimen@>\U@c \U@c=\dimen@ \fi
+ \ifdim -\dimen@>\D@c \D@c=-\dimen@ \fi
+}
+\xydef@\Fshape@#1:{\def\whichframe@@{{#1}}\let\whichoptions@@=\empty
+ \DN@{{}}\ifx\whichframe@@\next@ \def\whichframe@@{{-}}\fi
+ \expandafter\xyFN@\expandafter\Fshape@whichframe\the\Edge@c}
+\xydef@\Fshape@whichframe{%
+ \ifx\next\circleEdge
+ \edef\whichframe@@{[o]\whichframe@@}%
+ \DN@##1{\xyFN@\Fshape@i}%
+ \else
+ \ifx\next\polygonEdge
+ \edef\whichframe@@{[P]\whichframe@@}%
+ \DN@\polygonEdge##1@##2@{\xyFN@\Fshape@i}%
+ \else
+ \DN@##1{\xyFN@\Fshape@i}%
+ \fi\fi
+ \next@
+}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyoztex.tex b/macros/generic/diagrams/xypic/texinputs/xyoztex.tex
new file mode 100644
index 0000000000..68550dafb5
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyoztex.tex
@@ -0,0 +1,130 @@
+%% xyoztex.tex from $Id: xyoztex.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``OzTeX'' driver interface option.
+%% Copyright (c) 1995-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{oztex}{OzTeX driver}{\stripRCS$Revision: 3.7 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xydef@\OzTeX@@#1{\dvimessage@{OzTeX}{#1}}
+\newdriver{%
+ \xyaddsupport{color}\oztexColor@@
+ \xyaddsupport{crayon}\oztexCrayon@@
+ \xyaddsupport{ps}\oztexPS@@
+ \xyaddsupport{rotate}\oztexRotate@@
+ \xyaddsupport{line}\oztexLine@@
+ \xyaddsupport{frame}\oztexFrames@@
+ \xyaddsupport{tile}\oztexTiles@@
+ \xyaddsupport{cmtip}\relax
+}
+\xydef@\oztexColor@@{\OzTeXColours@}
+\xydef@\OzTeXColours@{\OzTeXPStypes@
+ \let\xylocalColor@=\xyNoColor@@ \def\xycolor@{\xycolor@@}%
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-c}{\xydrivernoload@{ps-c}}%
+ \installPScolor@ }\else\DN@{}\fi \next@
+ \ifx\xycrayolaloaded\empty \DN@{\xystandardcolors@\OzTeXCrayon@@{}}%
+ \else\let\next@=\xystandardcolors@\fi \next@
+ \let\xycolorwarning@=\relax
+ \let\oztexColor@@=\relax
+ \let\UnloadColor@@=\NoOzTeXColor@
+}
+\xydef@\NoOzTeXColor@{%
+ \let\xylocalColor@=\xyNoColor@@
+ \let\xycolor@=\xyNoColor@
+ \let\xycolorwarning@=\xycolorwarning@@
+ \let\oztexColor@@=\OzTeXColours@
+ \let\UnloadColor@@=\UnloadColor@
+ }
+\xydef@\OzTeXCrayon@@{\installCrayolaColors@}
+\xydef@\oztexPS@@{\oztexPS@}
+\xydef@\oztexPSunload@{\UnloadPS@
+ \def\xyPSdictname{}\UsePSdict@@false
+ \let\installxyps@@=\relax
+ \let\UnloadPS@@=\UnloadPS@
+ \xyPSshapes@true
+ \let\oztexPS@@=\oztexPS@ }
+\xydef@\OzTeXSpecial@#1{\special{empty.ps {#1}xy}}
+\xydef@\OzTeXMacro@#1{\special{empty.ps {#1}xy}}
+\xydef@\OzTeXDict@#1{\special{empty.ps @bxy{#1}stopped pop @exy}}
+\xydef@\OzTeXinclude@#1{\special{#1}}
+\xydef@\OzTeXraw@#1{\special{empty.ps @bxy #1 @exy}}%
+\xydef@\OzTeXPStypes@{%
+ \xyinputorelse@{xyps-ps}{\xydrivernoload@{ps-ps}}%
+ \ifx\PSspecial@@\OzTeXSpecial@\else
+ \let\PSspecial@@=\OzTeXSpecial@
+ \let\PSmacro@@=\OzTeXMacro@
+ \let\PSdict@@=\OzTeXDict@
+ \let\PSraw@@=\OzTeXraw@
+ \let\PSinclude@@=\OzTeXinclude@
+ \let\xyPSobeylines@@=\obeyOzTeXlines@
+ \let\PSspecialdict@@=\OzTeXDict@
+ \OzTeX@@{PostScript}%
+ \fi
+ \OzTeXCurrpt@ }
+{\catcode`\^^M=\active
+ \gdef\next{\catcode`\^^M=\active \let^^M=\space \obeyspaces}}
+\xylet@\obeyOzTeXlines@=\next
+\xydef@\OzTeXCurrpt@{\let\xyPScurrpt@@=\OzTeXCurrpt@@}%
+\xydef@\OzTeXCurrpt@@{\PSraw@@{xyp}}
+\xydef@\oztexPS@{\OzTeXPStypes@
+ \let\oztexPS@@=\relax
+ \let\UnloadPS@@=\oztexPSunload@
+ \let\installxyps@@=\@OzTeX@PS@
+ \installxyps@ }
+\xydef@\@OzTeX@PS@{\UsePSdict@@true
+ \let\includePSmessage@=\xyOzTeXheader
+ \ifx\undefined\xyPSdictname\def\xyPSdictname{global.ps}\fi}
+\xydef@\xyOzTeXheader#1#2#3{\UsePSdict@@true}
+\xydef@\oztexLine@@{\oztexLine@}
+\xydef@\oztexLine@{\OzTeXPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-l}{\xydrivernoload@{ps-l}}\installPSline@ }%
+ \else\DN@{\xydriverfail@{line-styles are}\UnloadLine@\relax}\fi
+ \next@ }
+\xydef@\oztexFrames@@{\OzTeXFrames@}
+\xydef@\OzTeXFrames@{\OzTeXPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-f}{\xydrivernoload@{ps-f}}\installPSframes@ }%
+ \else\DN@{\xydriverfail@{frames are}\UnloadPSFrames@\relax}\fi
+ \next@ }
+\xydef@\oztexTiles@@{\OzTeXTiles@}
+\xydef@\OzTeXTiles@{\OzTeXPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-t}{\xydrivernoload@{ps-t}}\installPSpatterns@
+ \xystandardpatterns@ }%
+ \else\DN@{\xydriverfail@{Patterns are}\UnloadPSpatterns@\relax}\fi
+ \next@ }
+\xydef@\oztexRotate@@{\OzTeXRotate@}
+\xydef@\OzTeXRotate@{\OzTeXPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-r}{\xydrivernoload@{ps-r}}%
+ \OzTeXRotScale@ \installPSrotscale@ \xyPSshapes@false }%
+ \else\DN@{\xydriverfail@{rotations are}\UnloadRotate@\relax}\fi
+ \next@ }
+\xydef@\OzTeXRotScale@{%
+ \def\xyrot@start(##1){%
+ {xyp xyt ##1\space xyr}{OzXy begin gsave}}%
+ \def\xyscale@start(##1,##2){%
+ {xyp xyt ##1\space##2\space xys}{OzXy begin gsave}}%
+ \def\xyrot@end{grestore end}\def\xyscale@end{grestore end}}
+\let\OzTeXRotScale@=\xyRotScale@@
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xypdf-co.tex b/macros/generic/diagrams/xypic/texinputs/xypdf-co.tex
new file mode 100644
index 0000000000..60e4060dbb
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xypdf-co.tex
@@ -0,0 +1,129 @@
+%%
+%% This is file `xypdf-co.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xypdf.dtx (with options: `color')
+%%
+%% The xypdf package for TeX and LaTeX
+%% Copyright (c) 2010 by Daniel Müllner (M\"ullner)
+%% <http://math.stanford.edu/~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/>.
+%%
+%% --------------------------------------------------------------------------
+%%
+%% This file is part of the xypdf package for TeX and LaTeX2e. 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 distribution consists of the following files:
+%%
+%% xypdf.dtx - Documented source code
+%% xypdf.ins - Installation script
+%% xypdf.pdf - Documentation (generated from xypdf.dtx)
+%%
+%% The files with the TeX code are generated by the following command:
+%%
+%% latex xypdf.ins
+%%
+%% This generates the files xypdf.tex, xypdf-co.tex, xypdf-cu.tex,
+%% xypdf-fr.tex, xypdf-li.tex and xypdf-ro.tex.
+%%
+%% --------------------------------------------------------------------------
+%%
+%% 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. It is being
+%% integrated and distributed together with Xy-pic, starting with Xy-pic
+%% version 3.8.
+%%
+%% The copyright for the xypdf package is by its author, Daniel Müllner
+%% (Muellner, M\"ullner).
+%%
+\xycatcodes
+\expandafter\let\csname xypdf-co@loaded\endcsname\@empty
+\@ifdefinable\xP@colorname\relax
+\@ifdefinable\xP@colA\relax
+\@ifdefinable\xP@colB\relax
+\@ifdefinable\xP@colC\relax
+\@ifdefinable\xP@colD\relax
+\xP@hook{color}{newxycolor}
+\newcommand*\xP@newxycolor[2]{\def\xP@colorname{#1}\xP@parsecolor#2 @}
+\xP@color@on
+\@ifdefinable\xP@parsecolor\relax
+\def\xP@parsecolor#1 #2 #3@{\def\xP@colA{#1}\def\xP@colB{#2}\ifx\xP@colB\xP@gray
+\xP@newcolor\xP@colorname\xP@colA\xP@gray\newxycolor
+\else
+\xP@parsecolor@#3 @\fi
+}
+\@ifdefinable\xP@parsecolor@\relax
+\def\xP@parsecolor@#1 #2 #3 #4@{\def\xP@colC{#1}\def\xP@colD{#2}\ifx\xP@colD\xP@rgb
+\xP@newcolor\xP@colorname{\xP@colA,\xP@colB,\xP@colC}\xP@rgb\newxycolor
+\else
+\def\@tempa{#3}\ifx\@tempa\xP@cmyk
+\xP@newcolor\xP@colorname{\xP@colA,\xP@colB,\xP@colC,\xP@colD}{cmyk}\newxycolor
+\else
+\PackageError{xypdf}{Syntax error in \string\newxycolor}{}\fi
+\fi
+}
+\newcommand*\xP@gray{gray}
+\newcommand*\xP@rgb{rgb}
+\newcommand*\xP@cmyk{cmyk}
+\xP@hook{color}{OBJECT@shape}
+\newcommand*\xP@OBJECT@shape[1]{\DN@{shape [#1]}\expandafter\let\expandafter\nextii@\csname\codeof\next@\endcsname
+\ifx\nextii@\relax\DN@{style [#1]}\expandafter\let\expandafter\nextii@\csname\codeof\next@\endcsname
+\ifx\nextii@\relax\DN@{\xP@checkcolor{#1}}\else\DN@{\nextii@\xyFN@\OBJECT@}\fi
+\else\expandafter\addtotoks@\expandafter{\nextii@}\DN@{\xyFN@\OBJECT@}\fi \next@}
+\newcommand*\xP@checkcolor[1]{\@ifundefined{\string\color@\detokenize{#1}}{\OBJECT@shapei[#1]}{\xP@append\toks@{\noexpand\xP@color{{\detokenize{#1}}}}\xyFN@\OBJECT@
+}}
+\newcommand*\xP@color[1]{\def\preStyle@@{\addtostyletoks@{\bgroup\xP@protectedcolor#1}}\def\postStyle@@{\addtostyletoks@{\egroup}}\modXYstyle@
+}
+\@ifdefinable\xP@protectedcolor\relax
+\protected\def\xP@protectedcolor{\@ifundefined{color}\xP@pdfcolor\color
+}
+\@ifdefinable\xP@pdfcolor\relax
+\def\xP@pdfcolor[#1]#2{\edef\@tempa{#1}\ifx\@tempa\xP@gray
+\DN@{\xP@graycolor{#2}}\else\ifx\@tempa\xP@rgb
+\DN@{\xP@rgbcolor#2@}\else\ifx\@tempa\xP@cmyk
+\DN@{\xP@cmykcolor#2@}\fi\fi\fi
+\aftergroup\xP@resetcolor
+\next@
+}\newcommand*\xP@graycolor[1]{\xP@setcolor{#1}gG}\@ifdefinable\xP@rgbcolor\relax
+\def\xP@rgbcolor#1,#2,#3@{\xP@setcolor{#1 #2 #3}{rg}{RG}}
+\@ifdefinable\xP@cmykcolor\relax
+\def\xP@cmykcolor#1,#2,#3,#4@{\xP@setcolor{#1 #2 #3 #4}kK}
+\newcommand*\xP@newcolor[4]{\expandafter\let\expandafter\next@\csname shape [#1]\endcsname
+\ifx\next@\relax
+\@ifundefined{\string\color@#1}\relax
+{\xP@warning{xypdf}{The color `#1' is overridden by \string#4}}\edef\next@{\noexpand\newxystyle{#1}{\noexpand\xP@unnamedcolor{#2}{#3}}}\else
+\DN@{}\fi
+\next@\relax}
+\newcommand*\xP@unnamedcolor[2]{\xP@color{[#2]{#1}}}
+\newcommand\xP@definecrayolacolor[2]{\xP@newcolor{#1}{#2}{cmyk}\UseCrayolaColors}\newcommand*\xP@installCrayolaColors{\xP@definecrayolacolor{GreenYellow}{.15,0,.69,0}\xP@definecrayolacolor{Yellow}{0,0,1,0}\xP@definecrayolacolor{Goldenrod}{0,.1,.84,0}\xP@definecrayolacolor{Dandelion}{0,.29,.84,0}\xP@definecrayolacolor{Apricot}{0,.32,.52,0}\xP@definecrayolacolor{Peach}{0,.5,.7,0}\xP@definecrayolacolor{Melon}{0,.46,.5,0}\xP@definecrayolacolor{YellowOrange}{0,.42,1,0}\xP@definecrayolacolor{Orange}{0,.61,.87,0}\xP@definecrayolacolor{BurntOrange}{0,.51,1,0}\xP@definecrayolacolor{Bittersweet}{0,.75,1,.24}\xP@definecrayolacolor{RedOrange}{0,.77,.87,0}\xP@definecrayolacolor{Mahogany}{0,.85,.87,.35}\xP@definecrayolacolor{Maroon}{0,.87,.68,.32}\xP@definecrayolacolor{BrickRed}{0,.89,.94,.28}\xP@definecrayolacolor{Red}{0,1,1,0}\xP@definecrayolacolor{OrangeRed}{0,1,.5,0}\xP@definecrayolacolor{RubineRed}{0,1,.13,0}\xP@definecrayolacolor{WildStrawberry}{0,.96,.39,0}\xP@definecrayolacolor{Salmon}{0,.53,.38,0}\xP@definecrayolacolor{CarnationPink}{0,.63,0,0}\xP@definecrayolacolor{Magenta}{0,1,0,0}\xP@definecrayolacolor{VioletRed}{0,.81,0,0}\xP@definecrayolacolor{Rhodamine}{0,.82,0,0}\xP@definecrayolacolor{Mulberry}{.34,.9,0,.02}\xP@definecrayolacolor{RedViolet}{.07,.9,0,.34}\xP@definecrayolacolor{Fuchsia}{.47,.91,0,.08}\xP@definecrayolacolor{Lavender}{0,.48,0,0}\xP@definecrayolacolor{Thistle}{.12,.59,0,0}\xP@definecrayolacolor{Orchid}{.32,.64,0,0}\xP@definecrayolacolor{DarkOrchid}{.4,.8,.2,0}\xP@definecrayolacolor{Purple}{.45,.86,0,0}\xP@definecrayolacolor{Plum}{.5,1,0,0}\xP@definecrayolacolor{Violet}{.79,.88,0,0}\xP@definecrayolacolor{RoyalPurple}{.75,.9,0,0}\xP@definecrayolacolor{BlueViolet}{.86,.91,0,.04}\xP@definecrayolacolor{Periwinkle}{.57,.55,0,0}\xP@definecrayolacolor{CadetBlue}{.62,.57,.23,0}\xP@definecrayolacolor{CornflowerBlue}{.65,.13,0,0}\xP@definecrayolacolor{MidnightBlue}{.98,.13,0,.43}\xP@definecrayolacolor{NavyBlue}{.94,.54,0,0}\xP@definecrayolacolor{RoyalBlue}{1,.5,0,0}\xP@definecrayolacolor{Blue}{1,1,0,0}\xP@definecrayolacolor{Cerulean}{.94,.11,0,0}\xP@definecrayolacolor{Cyan}{1,0,0,0}\xP@definecrayolacolor{ProcessBlue}{.96,0,0,0}\xP@definecrayolacolor{SkyBlue}{.62,0,.12,0}\xP@definecrayolacolor{Turquoise}{.85,0,.2,0}\xP@definecrayolacolor{TealBlue}{.86,0,.34,.02}\xP@definecrayolacolor{Aquamarine}{.82,0,.3,0}\xP@definecrayolacolor{BlueGreen}{.85,0,.33,0}\xP@definecrayolacolor{Emerald}{1,0,.5,0}\xP@definecrayolacolor{JungleGreen}{.99,0,.52,0}\xP@definecrayolacolor{SeaGreen}{.69,0,.5,0}\xP@definecrayolacolor{Green}{1,0,1,0}\xP@definecrayolacolor{ForestGreen}{.91,0,.88,.12}\xP@definecrayolacolor{PineGreen}{.92,0,.59,.25}\xP@definecrayolacolor{LimeGreen}{.5,0,1,0}\xP@definecrayolacolor{YellowGreen}{.44,0,.74,0}\xP@definecrayolacolor{SpringGreen}{.26,0,.76,0}\xP@definecrayolacolor{OliveGreen}{.64,0,.95,.4}\xP@definecrayolacolor{RawSienna}{0,.72,1,.45}\xP@definecrayolacolor{Sepia}{0,.83,1,.7}\xP@definecrayolacolor{Brown}{0,.81,1,.6}\xP@definecrayolacolor{Tan}{.14,.42,.56,0}\xP@definecrayolacolor{Gray}{0,0,0,.5}\xP@definecrayolacolor{Black}{0,0,0,1}\xP@definecrayolacolor{White}{0,0,0,0}}
+\xywithoption{crayon}{\xP@installCrayolaColors
+\renewcommand*\installCrayolaColors@{}}
+\xyendinput
+
+
+
+
+
+%%
+%% End of file `xypdf-co.tex'.
diff --git a/macros/generic/diagrams/xypic/texinputs/xypdf-cu.tex b/macros/generic/diagrams/xypic/texinputs/xypdf-cu.tex
new file mode 100644
index 0000000000..310d6a8ce6
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xypdf-cu.tex
@@ -0,0 +1,1187 @@
+%%
+%% This is file `xypdf-cu.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xypdf.dtx (with options: `curve')
+%%
+%% The xypdf package for TeX and LaTeX
+%% Copyright (c) 2010 by Daniel Müllner (M\"ullner)
+%% <http://math.stanford.edu/~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/>.
+%%
+%% --------------------------------------------------------------------------
+%%
+%% This file is part of the xypdf package for TeX and LaTeX2e. 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 distribution consists of the following files:
+%%
+%% xypdf.dtx - Documented source code
+%% xypdf.ins - Installation script
+%% xypdf.pdf - Documentation (generated from xypdf.dtx)
+%%
+%% The files with the TeX code are generated by the following command:
+%%
+%% latex xypdf.ins
+%%
+%% This generates the files xypdf.tex, xypdf-co.tex, xypdf-cu.tex,
+%% xypdf-fr.tex, xypdf-li.tex and xypdf-ro.tex.
+%%
+%% --------------------------------------------------------------------------
+%%
+%% 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. It is being
+%% integrated and distributed together with Xy-pic, starting with Xy-pic
+%% version 3.8.
+%%
+%% The copyright for the xypdf package is by its author, Daniel Müllner
+%% (Muellner, M\"ullner).
+%%
+\xycatcodes
+\expandafter\let\csname xypdf-cu@loaded\endcsname\@empty
+\newcommand*\xP@tempvar[2]{\@ifdefinable#1\relax
+\let#1#2}
+\newcommand*\xP@oldornewdimen[2]{\@ifundefined{#2}{\xP@newdimen#1}{\expandafter\xP@tempvar\expandafter#1\csname#2\endcsname}}
+\xP@tempvar\xP@bigdim\quotPTK@
+\xP@tempvar\xP@parA\L@p
+\xP@tempvar\xP@velA\U@p
+\xP@tempvar\xP@parB\R@p
+\xP@tempvar\xP@velB\D@p
+\xP@tempvar\xP@parC\X@origin
+\xP@tempvar\xP@velC\Y@origin
+\xP@tempvar\xP@parD\X@xbase
+\xP@tempvar\xP@velD\Y@xbase
+\xP@tempvar\xP@parE\X@ybase
+\xP@tempvar\xP@velE\Y@ybase
+\xP@tempvar\xP@lenA\X@min
+\xP@tempvar\xP@lenB\Y@min
+\xP@tempvar\xP@partlen\X@max
+\xP@tempvar\xP@oldpartlen\Y@max
+\xP@tempvar\xP@tolerance\almostz@
+\xP@tempvar\xP@A\L@p
+\xP@tempvar\xP@B\U@p
+\xP@tempvar\xP@C\R@p
+\xP@tempvar\xP@D\D@p
+\xP@tempvar\xP@E\X@origin
+\xP@tempvar\xP@F\Y@origin
+\xP@tempvar\xP@G\X@xbase
+\xP@tempvar\xP@H\Y@xbase
+\xP@tempvar\xP@I\X@ybase
+\xP@tempvar\xP@J\Y@ybase
+\xP@tempvar\xP@K\X@min
+\xP@tempvar\xP@L\Y@min
+\xP@tempvar\xP@fa\X@max
+\xP@tempvar\xP@fd\Y@max
+\xP@tempvar\xP@tm\almostz@
+\xP@tempvar\xP@xm\K@dXdY
+\xP@tempvar\xP@ym\K@dYdX
+\xP@tempvar\xP@off\splineval@
+\xP@tempvar\xP@ta\splinedepth@
+\xP@tempvar\xP@tb\splinetol@
+\xP@tempvar\xP@tc\splinelength@
+\xP@tempvar\xP@M\L@
+\@tempcnta\count11\relax
+\xP@oldornewdimen\xP@oldobj{normallineskiplimit}
+\xP@oldornewdimen\xP@Tax{@savsk}
+\xP@oldornewdimen\xP@Tay{lower@bound}
+\xP@oldornewdimen\xP@Tdx{upper@bound}
+\xP@oldornewdimen\xP@Tdy{leftmargin}
+\xP@oldornewdimen\xP@Tmx{rightmargin}
+\xP@oldornewdimen\xP@Tmy{listparindent}
+\xP@oldornewdimen\xP@xa{itemindent}
+\xP@oldornewdimen\xP@ya{labelwidth}
+\xP@oldornewdimen\xP@xb{labelsep}
+\xP@oldornewdimen\xP@yb{linewidth}
+\xP@oldornewdimen\xP@xc{@totalleftmargin}
+\xP@oldornewdimen\xP@yc{leftmargini}
+\xP@oldornewdimen\xP@xd{leftmarginii}
+\xP@oldornewdimen\xP@yd{leftmarginiii}
+\count11\@tempcnta
+\xP@tempvar\xP@a\X@ybase
+\xP@tempvar\xP@b\Y@ybase
+\xP@tempvar\xP@c\X@min
+\xP@tempvar\xP@valA\Y@min
+\xP@tempvar\xP@valB\X@max
+\xP@tempvar\xP@devA\Y@max
+\xP@tempvar\xP@devB\almostz@
+\xP@tempvar\xP@ti\K@dXdY
+\xP@tempvar\xP@tip\K@dYdX
+\xP@tempvar\xP@sa\xP@Tax
+\xP@tempvar\xP@sb\xP@Tay
+\xP@tempvar\xP@sc\xP@Tdx
+\xP@tempvar\xP@Ab\xP@Tdy
+\xP@tempvar\xP@AAb\xP@Tmx
+\xP@tempvar\xP@Aba\xP@Tmy
+\xP@tempvar\xP@Abb\xP@xa
+\xP@tempvar\xP@Abc\xP@ya
+\xP@tempvar\xP@AAba\xP@xb
+\xP@tempvar\xP@AAbb\xP@yb
+\xP@tempvar\xP@AAbc\xP@xc
+\xP@tempvar\xP@dta\xP@yc
+\xP@tempvar\xP@dtb\xP@xd
+\xP@tempvar\xP@dtc\xP@yd
+\xP@tempvar\xP@temppar\X@origin
+\xP@tempvar\xP@tempvel\Y@origin
+\xP@tempvar\xP@posX\X@xbase
+\xP@tempvar\xP@posY\Y@xbase
+\xP@tempvar\xP@oldpar\X@ybase
+\xP@tempvar\xP@lastpar\Y@ybase
+\xP@tempvar\xP@tempvel@\X@min
+\xP@tempvar\xP@parinc\Y@min
+\xP@tempvar\xP@squiglen\almostz@
+\xP@tempvar\xP@scaleone\K@
+\xP@tempvar\xP@scaletwo\KK@
+\xP@tempvar\xP@scalethree\Direction
+\xP@hook{curve}{splinesolid@}
+\newcommand*\xP@splinesolid@{\xP@spline\xP@setsolidpat}
+\xP@hook{curve}{splinedashed@}
+\newcommand*\xP@splinedashed@{\xP@spline\xP@setdashpat}
+\xP@hook{curve}{splinedotted@}
+\newcommand*\xP@splinedotted@{\xP@spline\xP@setdottedpat}
+\newcommand*\xP@spline[1]{\readsplineparams@
+\ifdim\dimen5<\dimen7
+\xP@preparespline
+\ifdim\@tempdimb>\z@
+#1\xP@stroke{\xP@coor\X@p\Y@p m \xP@coor\L@c\U@c\xP@coor\R@c\D@c\xP@coor\X@c\Y@c c}\xP@savec
+\fi
+\fi
+}
+\newcommand*\xP@preparespline{\ifx\splineinfo@\squineinfo@
+\L@c\dimexpr(\X@p+2\A@)/3\relax
+\U@c\dimexpr(\Y@p+2\B@)/3\relax
+\R@c\dimexpr(\X@c+2\A@)/3\relax
+\D@c\dimexpr(\Y@c+2\B@)/3\relax
+\fi
+\xP@shavespline
+\xP@bezierlength
+}
+\newcommand*\xP@inibigdim{\xP@bigdim5040pt}
+\newcommand*\xP@shavespline{\xP@shaveprec{\dimen5*\xP@bigdim/\p@}{\dimen7*\xP@bigdim/\p@}}
+\newcommand*\xP@shaveprec[2]{{\xP@inibigdim
+\A@\dimexpr#1\relax
+\B@\dimexpr#2\relax
+\@tempswatrue
+\ifdim\A@=\z@\ifdim\B@=\xP@bigdim\@tempswafalse\fi\fi
+\if@tempswa
+\L@p\dimexpr\L@c-\X@p\relax
+\U@p\dimexpr\R@c-\L@p-\L@c\relax
+\R@p\dimexpr\X@c-3\R@c+3\L@c-\X@p\relax
+\D@p\dimexpr\U@c-\Y@p\relax
+\X@min\dimexpr\D@c-\D@p-\U@c\relax
+\Y@min\dimexpr\Y@c-3\D@c+3\U@c-\Y@p\relax
+\xdef\@gtempa{\X@p\the\dimexpr\X@p+(3\L@p+(3\U@p+\R@p*\A@/\xP@bigdim)*\A@/\xP@bigdim)*\A@/\xP@bigdim\relax
+\Y@p\the\dimexpr\Y@p+(3\D@p+(3\X@min+\Y@min*\A@/\xP@bigdim)*\A@/\xP@bigdim)*\A@/\xP@bigdim\relax
+\L@c\the\dimexpr\X@p+(2\A@+\B@)*\L@p/\xP@bigdim+((\A@+2\B@)*\U@p/\xP@bigdim+\R@p*\A@/\xP@bigdim*\B@/\xP@bigdim)*\A@/\xP@bigdim\relax
+\U@c\the\dimexpr\Y@p+(2\A@+\B@)*\D@p/\xP@bigdim+((\A@+2\B@)*\X@min/\xP@bigdim+\Y@min*\A@/\xP@bigdim*\B@/\xP@bigdim)*\A@/\xP@bigdim\relax
+\R@c\the\dimexpr\X@p+(2\B@+\A@)*\L@p/\xP@bigdim+((\B@+2\A@)*\U@p/\xP@bigdim+\R@p*\B@/\xP@bigdim*\A@/\xP@bigdim)*\B@/\xP@bigdim\relax
+\D@c\the\dimexpr\Y@p+(2\B@+\A@)*\D@p/\xP@bigdim+((\B@+2\A@)*\X@min/\xP@bigdim+\Y@min*\B@/\xP@bigdim*\A@/\xP@bigdim)*\B@/\xP@bigdim\relax
+\X@c\the\dimexpr\X@p+(3\L@p+(3\U@p+\R@p*\B@/\xP@bigdim)*\B@/\xP@bigdim)*\B@/\xP@bigdim\relax
+\Y@c\the\dimexpr\Y@p+(3\D@p+(3\X@min+\Y@min*\B@/\xP@bigdim)*\B@/\xP@bigdim)*\B@/\xP@bigdim\relax}\else
+\global\let\@gtempa\relax
+\fi
+}\@gtempa
+}
+\newcommand*\xP@bezierlength{{\xP@inibigdim
+\@tempdimb\z@
+\xP@parA\z@
+\xP@velocity\z@\xP@velA
+\xP@parC.5\xP@bigdim
+\xP@velocity\xP@parC\xP@velC
+\xP@velocity\xP@bigdim\xP@velE
+\xP@oldpartlen\dimexpr(\xP@velA+4\xP@velC+\xP@velE)/6\relax
+\xP@tolerance\xP@max{1sp}{\dimexpr\xP@oldpartlen/100000\relax}\xP@arclength\xP@parC\xP@velC\xP@bigdim\xP@velE\xP@oldpartlen
+\global\dimen@i\@tempdimb
+}\@tempdimb\dimen@i
+}
+\newcommand*\xP@velocity[2]{{\@tempdima\dimexpr#1\relax
+\xP@tangent
+\global\dimen@i\@tempdimb
+}#2\dimen@i
+}
+\newcommand*\xP@tangent{\d@X3\xP@precbeziertan\X@p\L@c\R@c\X@c\@tempdima
+\d@Y3\xP@precbeziertan\Y@p\U@c\D@c\Y@c\@tempdima
+\xP@veclen
+}
+\newcommand*\xP@tangentvec[1]{{\@tempdima#1\relax
+\xP@tangent
+\ifdim\@tempdimb=\z@
+\L@p\dimexpr\X@c-\X@p+(\L@c-\R@c)*3\relax
+\U@p\dimexpr\Y@c-\Y@p+(\U@c-\D@c)*3\relax
+\d@X\dimexpr\L@p*\@tempdima/\xP@bigdim+(\X@p-2\L@c+\R@c)\relax
+\d@Y\dimexpr\U@p*\@tempdima/\xP@bigdim+(\Y@p-2\U@c+\D@c)\relax
+\xP@veclen
+\ifdim\@tempdimb=\z@
+\d@X\L@p
+\d@Y\U@p
+\xP@veclen
+\ifdim\@tempdimb=\z@
+\xP@warning{xypdf}{Cannot determine a tangent vector to a curve}\@tempdimb\p@
+\fi
+\fi
+\fi
+\global\dimen@i\d@X
+\global\dimen3\d@Y
+\global\dimen5\@tempdimb
+}\d@X\dimen@i
+\d@Y\dimen3\relax
+\@tempdimb\dimen5\relax
+}
+\newcommand*\xP@arclength[5]{\xP@parE#3\xP@velE#4\xP@parC#1\xP@velC#2\xP@oldpartlen#5\xP@parB\dimexpr(\xP@parC+\xP@parA)/2\relax
+\xP@velocity\xP@parB\xP@velB
+\xP@parD\dimexpr(\xP@parE+\xP@parC)/2\relax
+\xP@velocity\xP@parD\xP@velD
+\xP@lenA
+\dimexpr(\xP@velA+4\xP@velB+\xP@velC)/6*(\xP@parC-\xP@parA)/\xP@bigdim\relax
+\xP@lenB
+\dimexpr(\xP@velC+4\xP@velD+\xP@velE)/6*(\xP@parE-\xP@parC)/\xP@bigdim\relax
+\xP@partlen\dimexpr\xP@lenA+\xP@lenB\relax
+{\@tempdima\dimexpr\xP@oldpartlen-\xP@partlen\relax
+\expandafter}\ifdim\ifdim\@tempdima<\z@-\fi\@tempdima>\xP@tolerance
+\edef\next@{\noexpand\xP@arclength\xP@parB\xP@velB\xP@parC\xP@velC\xP@lenA
+\noexpand\xP@arclength{\the\xP@parD}{\the\xP@velD}{\the\xP@parE}{\the\xP@velE}{\the\xP@lenB}}\else
+\xP@parA\xP@parE
+\xP@velA\xP@velE
+\advance\@tempdimb\xP@partlen
+\DN@{}\fi
+\next@
+}
+\xP@hook{curve}{@crv@}
+\newcommand*\xP@@crv@[2]{\DN@{#1#2}\ifx\next@\@empty \edef\next@{\crv@defaultshape}\ifx\bstartPLACE@\@empty\xdef\crvSTYLE@@{{\crv@defaultshape}}\fi
+\else
+\ifx\bstartPLACE@\@empty\gdef\crvSTYLE@@{#1{#2}}\fi
+\fi
+\ifx\next@\@empty\crv@noobject \DN@{\crv@{}{\xy@@crvaddstack@}}\else\def\tmp@{-}\ifx\next@\tmp@ \DN@{\crv@{}{\xy@@crvaddstack@}}\else\def\tmp@{=}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@normaltemplate{\dir{=}}}\else\def\tmp@{2-}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@normaltemplate{\dir{2.}}}\else\def\tmp@{3-}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@normaltemplate{\dir{3.}}}\else\def\tmp@{--}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@specialtemplate@{--}}\else\def\tmp@{==}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@normaltemplate{\dir2{--}}}\else\def\tmp@{2--}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@normaltemplate{\dir2{--}}}\else\def\tmp@{3--}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@normaltemplate{\dir3{--}}}\else\def\tmp@{.}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@specialtemplate@{.}}\else\def\tmp@{:}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@normaltemplate{\dir{:}}}\else\def\tmp@{2.}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@normaltemplate{\dir{:}}}\else\def\tmp@{3.}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@normaltemplate{\dir3{.}}}\else\def\tmp@{~}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@normaltemplate{\dir{~}}}\else\def\tmp@{2~}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@normaltemplate{\dir2{~}}}\else\def\tmp@{3~}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@normaltemplate{\dir3{~}}}\else\def\tmp@{~~}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@normaltemplate{\dir{~~}}}\else\def\tmp@{2~~}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@normaltemplate{\dir2{~~}}}\else\def\tmp@{3~~}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@normaltemplate{\dir3{~~}}}\else\def\tmp@{..}\ifx\next@\tmp@
+\DN@{\expandafter\crv@\crv@specialtemplate@{.}}\else
+\DN@{\expandafter\crv@\crv@othertemplate{\dir#1{#2}}}\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\next@}
+\xP@hook{curve}{xysplinespecialcases@}
+\newcommand*\xP@xysplinespecialcases@{\ifx\@empty\xycrvdrop@
+\ifx\@empty\xycrvconn@\DN@{\splinesolid@}\else\DN@{ \dir{-}}\ifx\next@\xycrvconn@\DN@{\splinesolid@}\else\DN@{ \dir2{-}}\ifx\next@\xycrvconn@\DN@{\splinedoubled@}\else\DN@{ \dir{=}}\ifx\next@\xycrvconn@\DN@{\splineribboned@}\else\DN@{ \dir{2.}}\ifx\next@\xycrvconn@\DN@{\splinedoubled@}\else\DN@{ \dir3{-}}\ifx\next@\xycrvconn@\DN@{\splinetrebled@}\else\DN@{ \dir{3.}}\ifx\next@\xycrvconn@\DN@{\splinetrebled@}\else\DN@{ \dir{--}}\ifx\next@\xycrvconn@\DN@{\splinedashed@}\else\DN@{ \dir{.}}\ifx\next@\xycrvconn@\DN@{\splinedotted@}\else\DN@{ \dir{:}}\ifx\next@\xycrvconn@\DN@{\splinedbldotted@}\else\DN@{ \dir2{.}}\ifx\next@\xycrvconn@\DN@{\splinedbldotted@}\else\DN@{ \dir3{.}}\ifx\next@\xycrvconn@\DN@{\xP@splinetrbldotted}\else\DN@{ \dir2{--}}\ifx\next@\xycrvconn@\DN@{\xP@splinedbldashed}\else\DN@{ \dir3{--}}\ifx\next@\xycrvconn@\DN@{\xP@splinetrbldashed}\else\DN@{ \dir{~}}\ifx\next@\xycrvconn@\DN@{\xP@splinesquiggled}\else\DN@{ \dir2{~}}\ifx\next@\xycrvconn@\DN@{\xP@splinedblsquiggled}\else\DN@{ \dir3{~}}\ifx\next@\xycrvconn@\DN@{\xP@splinetrblsquiggled}\else\DN@{ \dir{~~}}\ifx\next@\xycrvconn@\DN@{\xP@splinebrokensquiggled}\else\DN@{ \dir2{~~}}\ifx\next@\xycrvconn@\DN@{\xP@splinebrokendblsquiggled}\else\DN@{ \dir3{~~}}\ifx\next@\xycrvconn@\DN@{\xP@splinebrokentrblsquiggled}\else\ifdim\splinetol@>\z@\else\splinedefaulttol@\fi
+\DN@{\splineset@@}\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+\else
+\DN@{\splineset@@}\fi
+\ifInvisible@\DN@{}\fi
+\next@
+}
+\xP@hook{curve}{splinedoubled@}
+\newcommand*\xP@splinedoubled@{\xP@checkspline\xP@splinemultsolid\xP@doublestroke}
+\xP@hook{curve}{splineribboned@}
+\@ifdefinable\xP@splineribboned@\relax
+\let\xP@splineribboned@\xP@splinedoubled@
+\xP@hook{curve}{splinetrebled@}
+\newcommand*\xP@splinetrebled@{\xP@checkspline\xP@splinemultsolid\xP@trblstroke}
+\newcommand*\xP@doublestroke{\xydashh@/2,-\xydashh@/2}
+\newcommand*\xP@trblstroke{\xydashh@,\z@,-\xydashh@}
+\newcommand*\xP@checkspline[1]{\readsplineparams@
+\let\next@\@gobble
+\ifdim\dimen5<\dimen7
+\xP@preparespline
+\ifdim\@tempdimb>\z@
+\ifdim\@tempdimb<2\dimexpr\xP@preclw\relax
+\let\next@\xP@splinemultsolid
+\else
+\let\next@#1\fi
+\fi
+\fi
+\next@
+}
+\newcommand*\xP@splinemultsolid[1]{{\xP@inibigdim
+\@temptokena{}\xP@setsolidpat
+\@for\@tempa:={#1}\do{\xP@paintsolid\z@\xP@bigdim}\xP@stroke{\the\@temptokena}}}
+\newcommand*\xP@paintsolid[2]{{\xP@savepts
+\xP@a#1\relax
+\xP@c#2\relax
+\xP@movetotrue
+\xP@paintsolid@
+\xdef\@gtempa{\the\@temptokena}}\@temptokena\expandafter{\@gtempa}}
+\newcommand*\xP@paintsolid@{\xP@b\xP@c
+\xP@off\dimexpr\@tempa\relax
+\ifdim\xP@off=\z@
+\xP@shaveprec\xP@a\xP@c
+\else
+\loop
+\xP@restorepts
+\xP@offsetsegment
+\xP@testoffset
+\unless\ifxP@offsetok
+\xP@b\dimexpr\xP@a+(\xP@b-\xP@a)*7/10\relax
+\repeat
+\fi
+\xP@append\@temptokena{\ifxP@moveto\xP@coor\X@p\Y@p m \fi
+\xP@coor\L@c\U@c\xP@coor\R@c\D@c\xP@coor\X@c\Y@c c }\xP@movetofalse
+\ifdim\xP@b<\xP@c\relax
+\xP@a\xP@b
+\expandafter\xP@paintsolid@
+\fi
+}
+\@ifdefinable\ifxP@moveto\relax
+\@ifdefinable\xP@movetotrue\relax
+\@ifdefinable\xP@movetofalse\relax
+\newif\ifxP@moveto
+\newcommand*\xP@savepts{\xP@xa\X@p
+\xP@ya\Y@p
+\xP@xb\L@c
+\xP@yb\U@c
+\xP@xc\R@c
+\xP@yc\D@c
+\xP@xd\X@c
+\xP@yd\Y@c
+}
+\newcommand*\xP@restorepts{\X@p\xP@xa
+\Y@p\xP@ya
+\L@c\xP@xb
+\U@c\xP@yb
+\R@c\xP@xc
+\D@c\xP@yc
+\X@c\xP@xd
+\Y@c\xP@yd
+}
+\@ifdefinable\xP@tmx\relax
+\@ifdefinable\xP@tmy\relax
+\newcommand*\xP@Tmxy{*\xP@Tmx/\xP@Tmy}
+\newcommand*\xP@Tmyx{*\xP@Tmy/\xP@Tmx}
+\newcommand*\xP@Tmzero{*\z@}
+\newcommand*\xP@offsetsegment{{\xP@tangentvec\xP@a
+\xP@xa\dimexpr\xP@precbezierpoly\X@p\L@c\R@c\X@c\xP@a/8+\d@Y*\xP@off/\@tempdimb\relax
+\xP@ya\dimexpr\xP@precbezierpoly\Y@p\U@c\D@c\Y@c\xP@a/8-\d@X*\xP@off/\@tempdimb\relax
+\xP@scaleT
+\xP@Tax\d@X
+\xP@Tay\d@Y
+\xP@E\@tempdimb
+\xP@tangentvec\xP@b
+\xP@xd\dimexpr\xP@precbezierpoly\X@p\L@c\R@c\X@c\xP@b/8+\d@Y*\xP@off/\@tempdimb\relax
+\xP@yd\dimexpr\xP@precbezierpoly\Y@p\U@c\D@c\Y@c\xP@b/8-\d@X*\xP@off/\@tempdimb\relax
+\xP@scaleT
+\xP@Tdx-\d@X
+\xP@Tdy-\d@Y
+\xP@F\@tempdimb
+\xP@M\z@
+\xP@Max\xP@M\xP@Tdx
+\xP@Max\xP@M\xP@Tdy
+\xP@L\dimexpr\xP@Tax*\xP@Tdx/\xP@M+\xP@Tay*\xP@Tdy/\xP@M\relax
+\xP@tm\dimexpr(\xP@a+\xP@b)/2\relax
+\ifdim\xP@L>\dimexpr\xP@E*\xP@F/\xP@M*49/50\relax
+\d@X-\dimexpr\xP@Tay+\xP@Tdy\relax
+\d@Y\dimexpr\xP@Tax+\xP@Tdx\relax
+\xP@veclen
+\xP@A\dimexpr\X@c-\X@p\relax
+\xP@B\dimexpr\Y@c-\Y@p\relax
+\xP@M\z@
+\xP@Max\xP@M\xP@A
+\xP@Max\xP@M\xP@B
+\ifdim\xP@M=\z@
+\xP@A\dimexpr\R@c-\L@c\relax
+\xP@B\dimexpr\D@c-\U@c\relax
+\xP@Max\xP@M\xP@A
+\xP@Max\xP@M\xP@B
+\fi
+\xP@M\dimexpr\d@X*\xP@A/\xP@M+\d@Y*\xP@B/\xP@M\relax
+\ifdim\xP@M<\z@
+\multiply\d@X\m@ne
+\multiply\d@Y\m@ne
+\fi
+\else
+\xP@tangentvec\xP@tm
+\fi
+\xP@xm\dimexpr\xP@precbezierpoly\X@p\L@c\R@c\X@c\xP@tm+8\d@Y*\xP@off/\@tempdimb\relax
+\xP@ym\dimexpr\xP@precbezierpoly\Y@p\U@c\D@c\Y@c\xP@tm-8\d@X*\xP@off/\@tempdimb\relax
+\xP@Tmx\d@X
+\xP@Tmy\d@Y
+\xP@ifabsless\xP@Tmy\xP@Tmx
+\let\xP@tmy\xP@Tmyx
+\let\xP@tmx\@empty
+\else
+\ifdim\xP@Tmy=\z@
+\let\xP@tmx\xP@Tmzero
+\let\xP@tmy\xP@Tmzero
+\else
+\let\xP@tmy\@empty
+\let\xP@tmx\xP@Tmxy
+\fi
+\fi
+\xP@fa\p@
+\xP@fd\p@
+\xP@tm\p@
+\count@\z@
+\loop
+\xP@offsetpoints
+\@tempswafalse
+\ifnum10>\count@
+\xP@objfun\xP@oldobj
+\ifdim\xP@oldobj>\xP@maxobjfun\relax\@tempswatrue\fi
+\fi
+\if@tempswa
+\xP@offsetloop
+\repeat
+\xdef\@gtempa{\X@p\the\xP@xa\Y@p\the\xP@ya
+\L@c\the\xP@xb\U@c\the\xP@yb\R@c\the\xP@xc\D@c\the\xP@yc
+\X@c\the\xP@xd\Y@c\the\xP@yd\relax}}\@gtempa
+}
+\newcommand*\xP@scaleT{\xP@B6.28\xP@off
+\xP@abs\xP@B
+\xP@C\dimexpr\d@X*\xP@B/\@tempdimb\relax
+\xP@D\dimexpr\d@Y*\xP@B/\@tempdimb\relax
+\xP@A\dimexpr\xP@b-\xP@a\relax
+\d@X\dimexpr\xP@C+\d@X*\xP@A/\xP@bigdim\relax
+\d@Y\dimexpr\xP@D+\d@Y*\xP@A/\xP@bigdim\relax
+\@tempdimb\dimexpr\xP@B+\@tempdimb*\xP@A/\xP@bigdim\relax
+}
+\newcommand*\xP@offsetloop{\xP@C\dimexpr\xP@C/2\relax
+\xP@G\dimexpr\xP@G/2\relax
+\xP@ta\dimexpr2\p@-\xP@tm\relax
+\xP@tb\dimexpr\xP@tm*\xP@ta/\p@\relax
+\xP@A\dimexpr\xP@Tax*\xP@tb/\p@*\xP@ta/\p@\relax
+\xP@B\dimexpr\xP@Tdx*\xP@tb/\p@*\xP@tm/\p@\relax
+\xP@E\dimexpr\xP@Tay*\xP@tb/\p@*\xP@ta/\p@\relax
+\xP@F\dimexpr\xP@Tdy*\xP@tb/\p@*\xP@tm/\p@\relax
+\xP@tb\dimexpr2\p@-3\xP@tm\relax
+\xP@tc\dimexpr\xP@tb+2\p@\relax
+\xP@I\dimexpr(2\xP@Tay\xP@tmx-2\xP@Tax\xP@tmy)*\xP@tb/\p@*\xP@ta/\p@\relax
+\xP@J\dimexpr(2\xP@Tdy\xP@tmx-2\xP@Tdx\xP@tmy)*\xP@tc/\p@*\xP@tm/\p@\relax
+\xP@K\dimexpr((\xP@yd-\xP@ya+(\xP@yb-\xP@yc)*3)
+*\xP@tm/\p@+(\xP@yc-2\xP@yb+\xP@ya)*2)*12\xP@tmx
+-((\xP@xd-\xP@xa+(\xP@xb-\xP@xc)*3)
+*\xP@tm/\p@+(\xP@xc-2\xP@xb+\xP@xa)*2)*12\xP@tmy\relax
+\xP@solvelinearsystem
+\ifxP@validsol
+\xP@correctsol
+\ifdim\xP@ta=\z@
+\ifdim\xP@tb=\z@
+\ifdim\xP@tc=\z@
+\xP@validsolfalse
+\fi\fi\fi
+\fi
+\ifxP@validsol
+\else
+\xP@applinsys
+\advance\xP@fa-\xP@ta
+\advance\xP@fd-\xP@tb
+\advance\xP@tm-\xP@tc
+\ifdim\xP@tm<\z@\xP@tm\z@\fi
+\ifdim\xP@tm>2\p@\xP@tm2\p@\fi
+\fi
+\advance\count@\@ne
+}
+\newcommand*\xP@maxsol{3pt}
+\newcommand*\xP@correctsol{\xP@M\z@
+\xP@Max\xP@M\xP@ta
+\xP@Max\xP@M\xP@tb
+\xP@Max\xP@M\xP@tc
+\ifdim\xP@M>\xP@maxsol
+\xP@ta\dimexpr\xP@maxsol*\xP@ta/\xP@M\relax
+\xP@tb\dimexpr\xP@maxsol*\xP@tb/\xP@M\relax
+\xP@tc\dimexpr\xP@maxsol*\xP@tc/\xP@M\relax
+\fi
+\advance\xP@fa-\xP@ta
+\advance\xP@fd-\xP@tb
+\xP@M\xP@tm
+\advance\xP@tm-\xP@tc
+\ifdim\xP@tm<\z@\xP@tm\z@\fi
+\ifdim\xP@tm>2\p@\xP@tm2\p@\fi
+{\xP@offsetpoints
+\xP@objfun\xP@M
+\expandafter}\ifdim\xP@M>\xP@oldobj
+\advance\xP@fa\xP@ta
+\advance\xP@fd\xP@tb
+\xP@tm\xP@M
+\xP@validsolfalse
+\fi
+}
+\newcommand*\xP@objfun[1]{\xP@D\dimexpr\xP@bezierpoly\xP@xa\xP@xb\xP@xc\xP@xd\xP@tm-\xP@xm\relax
+\xP@H\dimexpr\xP@bezierpoly\xP@ya\xP@yb\xP@yc\xP@yd\xP@tm-\xP@ym\relax
+\xP@C\xP@beziertan\xP@xa\xP@xb\xP@xc\xP@xd\xP@tm
+\xP@G\xP@beziertan\xP@ya\xP@yb\xP@yc\xP@yd\xP@tm
+\xP@L\dimexpr\xP@G\xP@tmx-\xP@C\xP@tmy\relax
+#1\z@
+\xP@Max#1\xP@D
+\xP@Max#1\xP@H
+\xP@Max#1\xP@L
+#1\ifdim#1>4843165sp
+\maxdimen
+\else
+\dimexpr\xP@D*\xP@D/\p@+\xP@H*\xP@H/\p@+\xP@L*\xP@L/\p@\relax
+\fi
+}
+\newcommand*\xP@offsetpoints{\xP@xb\dimexpr\xP@xa+\xP@Tax*\xP@fa/196608\relax
+\xP@yb\dimexpr\xP@ya+\xP@Tay*\xP@fa/196608\relax
+\xP@xc\dimexpr\xP@xd+\xP@Tdx*\xP@fd/196608\relax
+\xP@yc\dimexpr\xP@yd+\xP@Tdy*\xP@fd/196608\relax
+}
+\newcommand*\xP@bezierpoly[5]{\dimexpr(((#4-#1+(#2-#3)*3)*#5/\p@+(#1-2#2+#3)*6)*#5/\p@+(#2-#1)*12)*#5/\p@
++#1*8\relax
+}
+\newcommand*\xP@precbezierpoly[5]{\dimexpr(((#4-#1+(#2-#3)*3)*2*#5/\xP@bigdim+(#1-2#2+#3)*6)*2*#5/\xP@bigdim
++(#2-#1)*12)*2*#5/\xP@bigdim+#1*8\relax
+}
+\newcommand*\xP@beziertan[5]{\dimexpr((#4-#1+(#2-#3)*3)*3*#5/32768+(#1-2#2+#3)*24)*#5/\p@+(#2-#1)*24\relax
+}
+\newcommand*\xP@precbeziertan[5]{\dimexpr((#4-#1+(#2-#3)*3)*#5/\xP@bigdim+(#1-2#2+#3)*2)*#5/\xP@bigdim
++#2-#1\relax
+}
+\@ifdefinable\xP@varone\relax
+\@ifdefinable\xP@vartwo\relax
+\@ifdefinable\xP@varthree\relax
+\@ifdefinable\ifxP@validsol\relax
+\@ifdefinable\xP@validsoltrue\relax
+\@ifdefinable\xP@validsolfalse\relax
+\newif\ifxP@validsol
+\newcommand*\xP@solvelinearsystem{{\xP@scalerow\xP@A\xP@B\xP@C\xP@D
+\xP@scalerow\xP@E\xP@F\xP@G\xP@H
+\xP@scalerow\xP@I\xP@J\xP@K\xP@L
+\xP@scalecol\xP@A\xP@E\xP@I\xP@scaleone
+\xP@scalecol\xP@B\xP@F\xP@J\xP@scaletwo
+\xP@scalecol\xP@C\xP@G\xP@K\xP@scalethree
+\let\xP@varone\xP@ta
+\let\xP@vartwo\xP@tb
+\let\xP@varthree\xP@tc
+\count@\m@ne
+\@tempcnta\m@ne
+\xP@ifabsless\xP@A\xP@B\@tempcnta\z@\xP@M\xP@B
+\else\xP@M\xP@A\fi
+\xP@ifabsless\xP@M\xP@C\@tempcnta\@ne\xP@M\xP@C\fi
+\xP@ifabsless\xP@M\xP@E\@tempcnta\m@ne\count@\z@\xP@M\xP@E\fi
+\xP@ifabsless\xP@M\xP@F\@tempcnta\z@\count@\z@\xP@M\xP@F\fi
+\xP@ifabsless\xP@M\xP@G\@tempcnta\@ne\count@\z@\xP@M\xP@G\fi
+\xP@ifabsless\xP@M\xP@I\@tempcnta\m@ne\count@\@ne\xP@M\xP@I\fi
+\xP@ifabsless\xP@M\xP@J\@tempcnta\z@\count@\@ne\xP@M\xP@J\fi
+\xP@ifabsless\xP@M\xP@K\@tempcnta\@ne\count@\@ne\fi
+\ifcase\count@
+\xP@swapdim\xP@A\xP@E
+\xP@swapdim\xP@B\xP@F
+\xP@swapdim\xP@C\xP@G
+\xP@swapdim\xP@D\xP@H
+\or
+\xP@swapdim\xP@A\xP@I
+\xP@swapdim\xP@B\xP@J
+\xP@swapdim\xP@C\xP@K
+\xP@swapdim\xP@D\xP@L
+\fi
+\ifcase\@tempcnta
+\xP@swapdim\xP@A\xP@B
+\xP@swapdim\xP@E\xP@F
+\xP@swapdim\xP@I\xP@J
+\let\xP@varone\xP@tb
+\let\xP@vartwo\xP@ta
+\xP@swapnum\xP@scaleone\xP@scaletwo
+\or
+\xP@swapdim\xP@A\xP@C
+\xP@swapdim\xP@E\xP@G
+\xP@swapdim\xP@I\xP@K
+\let\xP@varone\xP@tc
+\let\xP@varthree\xP@ta
+\xP@swapnum\xP@scaleone\xP@scalethree
+\fi
+\multiply\xP@E\m@ne
+\multiply\xP@I\m@ne
+\ifdim\xP@A=\z@
+\else
+\advance\xP@F\dimexpr\xP@B*\xP@E/\xP@A\relax
+\advance\xP@G\dimexpr\xP@C*\xP@E/\xP@A\relax
+\advance\xP@H\dimexpr\xP@D*\xP@E/\xP@A\relax
+\advance\xP@J\dimexpr\xP@B*\xP@I/\xP@A\relax
+\advance\xP@K\dimexpr\xP@C*\xP@I/\xP@A\relax
+\advance\xP@L\dimexpr\xP@D*\xP@I/\xP@A\relax
+\fi
+\count@\m@ne
+\xP@ifabsless\xP@F\xP@G\@tempcnta\z@\xP@M\xP@G
+\else\@tempcnta\m@ne\xP@M\xP@F\fi
+\xP@ifabsless\xP@M\xP@J\@tempcnta\m@ne\count@\z@\xP@M\xP@J\fi
+\xP@ifabsless\xP@M\xP@K\@tempcnta\z@\count@\z@\fi
+\ifnum\count@=\z@
+\xP@swapdim\xP@F\xP@J
+\xP@swapdim\xP@G\xP@K
+\xP@swapdim\xP@H\xP@L
+\fi
+\ifnum\@tempcnta=\z@
+\xP@swapdim\xP@B\xP@C
+\xP@swapdim\xP@F\xP@G
+\xP@swapdim\xP@J\xP@K
+\let\@tempa\xP@varthree
+\let\xP@varthree\xP@vartwo
+\let\xP@vartwo\@tempa
+\xP@swapnum\xP@scaletwo\xP@scalethree
+\fi
+\ifdim\xP@F=\z@
+\else
+\advance\xP@K\dimexpr-\xP@G*\xP@J/\xP@F\relax
+\advance\xP@L\dimexpr-\xP@H*\xP@J/\xP@F\relax
+\fi
+\xP@ifabsless{\dimexpr\xP@L/60\relax}{\dimexpr\xP@K/\xP@scalethree\relax}\xP@validsoltrue
+\xP@varthree\dimexpr\xP@L*(\xP@scalethree*\p@)/\xP@K\relax
+\else
+\xP@validsolfalse
+\fi
+\xP@checkabs{\xP@H/8191}{\xP@F/\xP@scaletwo}\xP@checkabs{\xP@G/\xP@scalethree/136}{\xP@F/\xP@scaletwo}\ifxP@validsol
+\xP@vartwo\dimexpr\xP@H*(\xP@scaletwo*\p@)/\xP@F
+-\xP@varthree*\xP@scaletwo/\xP@scalethree*\xP@G/\xP@F\relax
+\xP@checkabs\xP@vartwo{60pt}\fi
+\xP@checkabs{\xP@D/5461}{\xP@A/\xP@scaleone}\xP@checkabs{\xP@B/\xP@scaletwo/91}{\xP@A/\xP@scaleone}\xP@checkabs{\xP@C/\xP@scalethree/91}{\xP@A/\xP@scaleone}\ifxP@validsol
+\xP@varone\dimexpr\xP@D*(\xP@scaleone*\p@)/\xP@A
+-\xP@vartwo*\xP@scaleone/\xP@scaletwo*\xP@B/\xP@A
+-\xP@varthree*\xP@scaleone/\xP@scalethree*\xP@C/\xP@A\relax
+\xP@checkabs\xP@varone{60pt}\fi
+\xdef\@gtempa{\ifxP@validsol
+\xP@ta\the\xP@ta\relax
+\xP@tb\the\xP@tb\relax
+\xP@tc\the\xP@tc\relax
+\noexpand\xP@validsoltrue
+\else
+\noexpand\xP@validsolfalse
+\fi
+}}\@gtempa
+}
+\newcommand*\xP@scalerow[4]{\xP@M\z@
+\xP@Max\xP@M#1\xP@Max\xP@M#2\xP@Max\xP@M#3\xP@Max\xP@M#4\count@134217727
+\loop
+\divide\xP@M\tw@
+\ifdim\xP@M>\z@
+\divide\count@\tw@
+\repeat
+\advance\count@\@ne
+\multiply#1\count@
+\multiply#2\count@
+\multiply#3\count@
+\multiply#4\count@
+}
+\newcommand*\xP@scalecol[4]{\xP@M\z@
+\xP@Max\xP@M#1\xP@Max\xP@M#2\xP@Max\xP@M#3#416777215
+\loop
+\divide\xP@M\tw@
+\ifdim\xP@M>\z@
+\divide#4\tw@
+\repeat
+\advance#4\@ne
+\multiply#1#4\multiply#2#4\multiply#3#4}
+\newcommand*\xP@checkabs[2]{\xP@ifabsless{\dimexpr#1\relax}{\dimexpr#2\relax}\else\xP@validsolfalse\fi}
+\newcommand*\xP@applinsys{{\xP@applinsys@
+\xP@ta\xP@dta
+\xP@tb\xP@dtb
+\xP@tc\xP@dtc
+\xP@checkapp
+\if@tempswa
+\xP@modobj
+\xP@applinsys@
+\xP@checkapp
+\if@tempswa
+\xP@modsol
+\xP@modobj
+\xP@applinsys@
+\xP@modsol
+\fi
+\fi
+\xdef\@gtempa{\xP@ta\the\xP@ta\relax
+\xP@tb\the\xP@tb\relax
+\xP@tc\the\xP@tc\relax
+}}\@gtempa
+}
+\newcommand*\xP@checkapp{\@tempswatrue
+\ifdim\xP@dta=\z@
+\ifdim\xP@dtb=\z@
+\ifdim\xP@dtc=\z@
+\@tempswafalse
+\fi\fi\fi
+}
+\newcommand*\xP@modobj{\advance\xP@D
+\dimexpr-\xP@A*\xP@dta/\p@-\xP@B*\xP@dtb/\p@-\xP@C*\xP@dtc/\p@\relax
+\advance\xP@H
+\dimexpr-\xP@E*\xP@dta/\p@-\xP@F*\xP@dtb/\p@-\xP@G*\xP@dtc/\p@\relax
+\advance\xP@L
+\dimexpr-\xP@I*\xP@dta/\p@-\xP@J*\xP@dtb/\p@-\xP@K*\xP@dtc/\p@\relax
+}
+\newcommand*\xP@modsol{\advance\xP@ta\xP@dta
+\advance\xP@tb\xP@dtb
+\advance\xP@tc\xP@dtc
+}
+\newcommand*\xP@applinsys@{{\xP@sa\z@
+\xP@Max\xP@sa\xP@A
+\xP@Max\xP@sa\xP@B
+\xP@Max\xP@sa\xP@C
+\xP@Max\xP@sa\xP@E
+\xP@Max\xP@sa\xP@F
+\xP@Max\xP@sa\xP@G
+\xP@Max\xP@sa\xP@I
+\xP@Max\xP@sa\xP@J
+\xP@Max\xP@sa\xP@K
+\xP@sa\ifdim\xP@sa<5460pt\thr@@\xP@sa\else\maxdimen\fi
+\xP@sb\z@
+\xP@Max\xP@sb\xP@D
+\xP@Max\xP@sb\xP@H
+\xP@Max\xP@sb\xP@L
+\ifdim\xP@sb>\z@
+\xP@D\dimexpr\xP@D*\maxdimen/\xP@sb\relax
+\xP@H\dimexpr\xP@H*\maxdimen/\xP@sb\relax
+\xP@L\dimexpr\xP@L*\maxdimen/\xP@sb\relax
+\fi
+\xP@Aba\dimexpr\xP@A*\xP@D/\xP@sa+\xP@E*\xP@H/\xP@sa+\xP@I*\xP@L/\xP@sa\relax
+\xP@Abb\dimexpr\xP@B*\xP@D/\xP@sa+\xP@F*\xP@H/\xP@sa+\xP@J*\xP@L/\xP@sa\relax
+\xP@Abc\dimexpr\xP@C*\xP@D/\xP@sa+\xP@G*\xP@H/\xP@sa+\xP@K*\xP@L/\xP@sa\relax
+\xP@AAba\dimexpr\xP@A*\xP@Aba/\xP@sa+\xP@B*\xP@Abb/\xP@sa
++\xP@C*\xP@Abc/\xP@sa\relax
+\xP@AAbb\dimexpr\xP@E*\xP@Aba/\xP@sa+\xP@F*\xP@Abb/\xP@sa
++\xP@G*\xP@Abc/\xP@sa\relax
+\xP@AAbc\dimexpr\xP@I*\xP@Aba/\xP@sa+\xP@J*\xP@Abb/\xP@sa
++\xP@K*\xP@Abc/\xP@sa\relax
+\xP@sc\z@
+\xP@Max\xP@sc\xP@Aba
+\xP@Max\xP@sc\xP@Abb
+\xP@Max\xP@sc\xP@Abc
+\xP@Max\xP@sc\xP@AAba
+\xP@Max\xP@sc\xP@AAbb
+\xP@Max\xP@sc\xP@AAbc
+\ifdim\xP@sc=\z@
+\xP@AAb\z@
+\else
+\xP@Ab\dimexpr\xP@Aba*\xP@bigdim/\xP@sc*\xP@Aba/\xP@sc
++\xP@Abb*\xP@bigdim/\xP@sc*\xP@Abb/\xP@sc
++\xP@Abc*\xP@bigdim/\xP@sc*\xP@Abc/\xP@sc
+\relax
+\xP@AAb\dimexpr\xP@AAba*\xP@bigdim/\xP@sc*\xP@AAba/\xP@sc
++\xP@AAbb*\xP@bigdim/\xP@sc*\xP@AAbb/\xP@sc
++\xP@AAbc*\xP@bigdim/\xP@sc*\xP@AAbc/\xP@sc
+\relax
+\fi
+\xdef\@gtempa{\ifdim\xP@AAb=\z@
+\xP@dta\z@
+\xP@dtb\z@
+\xP@dtc\z@
+\else
+\xP@dta\the\dimexpr\xP@Aba*\xP@sb/\xP@sa*\p@/\xP@AAb*\xP@Ab/\maxdimen
+\relax
+\xP@dtb\the\dimexpr\xP@Abb*\xP@sb/\xP@sa*\p@/\xP@AAb*\xP@Ab/\maxdimen
+\relax
+\xP@dtc\the\dimexpr\xP@Abc*\xP@sb/\xP@sa*\p@/\xP@AAb*\xP@Ab/\maxdimen
+\relax
+\fi
+}}\@gtempa
+}
+\@ifdefinable\ifxP@offsetok\relax
+\@ifdefinable\xP@offsetoktrue\relax
+\@ifdefinable\xP@offsetokfalse\relax
+\newif\ifxP@offsetok
+\newcommand*\xP@maxdev{.1pt}
+\newcommand*\xP@maxobjfun{.005pt}
+\newcommand*\xP@testoffset{{\gdef\xP@afteroffsetok{\xP@offsetoktrue}\def\xP@offsetokif{\ifdim\xP@ti<1.85pt}\xP@ti.1pt
+\loop
+\xP@tip\dimexpr\xP@a+(\xP@b-\xP@a)*\xP@ti/131072\relax
+\L@p\xP@precbezierpoly\xP@xa\xP@xb\xP@xc\xP@xd\xP@tip
+\U@p\xP@precbezierpoly\xP@ya\xP@yb\xP@yc\xP@yd\xP@tip
+\xP@valA\dimexpr\xP@bezierpoly\X@p\L@c\R@c\X@c\xP@ti-\L@p\relax
+\xP@valB\dimexpr\xP@bezierpoly\Y@p\U@c\D@c\Y@c\xP@ti-\U@p\relax
+\d@X3\xP@precbeziertan\xP@xa\xP@xb\xP@xc\xP@xd\xP@tip
+\d@Y3\xP@precbeziertan\xP@ya\xP@yb\xP@yc\xP@yd\xP@tip
+\xP@veclen
+\@tempdimc\dimexpr(\xP@b-\xP@a)*\@tempdimb/\xP@bigdim\relax
+\xP@abs\@tempdimc
+\ifdim.01pt<\@tempdimc
+\xP@devA\dimexpr\xP@valA*\d@X/\@tempdimb+\xP@valB*\d@Y/\@tempdimb\relax
+\xP@devB\dimexpr\xP@valA*\d@Y/\@tempdimb-\xP@valB*\d@X/\@tempdimb-8\xP@off
+\relax
+\xP@abs\xP@devA
+\xP@abs\xP@devB
+\@tempdima\dimexpr\xP@devA+\xP@devB\relax
+\else
+\ifdim\@tempdimc=\z@
+\@tempdima\z@
+\else
+{\d@X\xP@valA
+\d@Y\xP@valB
+\xP@veclen@
+\global\dimen@i\@tempdimb
+}\@tempdima\dimen@i
+\advance\@tempdima\ifdim\xP@off>\z@-\fi8\xP@off
+\xP@abs\@tempdima
+\fi
+\fi
+\ifdim\@tempdima>\xP@maxdev
+\divide\L@p-8\relax
+\divide\U@p-8\relax
+{\xP@transformcoor\X@p\Y@p
+\xP@transformcoor\L@c\U@c
+\xP@transformcoor\R@c\D@c
+\xP@transformcoor\X@c\Y@c
+\xP@findzero
+}\fi
+\xP@offsetokif
+\advance\xP@ti.1pt
+\repeat
+\expandafter}\xP@afteroffsetok
+}
+\newcommand*\xP@afteroffsetok{}
+\newcommand*\xP@offsetokif{}
+\newcommand*\xP@transformcoor[2]{\advance#1\L@p
+\advance#2\U@p
+\@tempdima\dimexpr#1*\d@X/\@tempdimb+#2*\d@Y/\@tempdimb\relax
+#2\dimexpr#2*\d@X/\@tempdimb-#1*\d@Y/\@tempdimb\relax
+#1\@tempdima
+}
+\newcommand*\xP@findzero{\xP@setleftvalue{.05}\xP@setrightvalue{.05}\ifdim\xP@valB<\z@\xP@reversecoeff\fi
+\ifdim\xP@valA>\z@
+\@tempswatrue
+\@for\@tempa:={.1,.15,.2,.25,.35,.5,1.1}\do{\if@tempswa
+\xP@setleftvalue\@tempa
+\ifdim\xP@valA<\z@\@tempswafalse\fi
+\if@tempswa
+\xP@setrightvalue\@tempa
+\ifdim\xP@valB<\z@
+\@tempswafalse
+\xP@reversecoeff
+\fi
+\fi
+\fi
+}\if@tempswa
+\L@p\xP@ti
+\xP@valA\xP@bezierpoly\X@p\L@c\R@c\X@c\L@p
+\ifdim\xP@valA<\z@
+\xP@setrightvalue{.05}\else
+\U@p\L@p
+\xP@valB\xP@valA
+\fi
+\fi
+\fi
+\loop
+\ifnum\numexpr\U@p-\L@p\relax>\@ne
+\xP@ti\dimexpr(\L@p+\U@p)/2\relax
+\xP@devA\xP@bezierpoly\X@p\L@c\R@c\X@c\xP@ti
+\ifdim\xP@devA>\z@
+\U@p\xP@ti
+\xP@valB\xP@devA
+\else
+\L@p\xP@ti
+\xP@valA\xP@devA
+\fi
+\repeat
+\xP@ifabsless\xP@valB\xP@valA
+\L@p\U@p
+\xP@valA\xP@valB
+\fi
+\xP@valB\dimexpr\xP@bezierpoly\Y@p\U@c\D@c\Y@c\L@p+8\xP@off\relax
+\xP@abs\xP@valA
+\xP@abs\xP@valB
+\ifdim\dimexpr\xP@valA+\xP@valB\relax>\xP@maxdev\relax
+\xP@failed
+\fi
+}
+\newcommand*\xP@failed{\global\let\xP@offsetokif\iffalse
+\gdef\xP@afteroffsetok{\xP@offsetokfalse}}
+\newcommand*\xP@reversecoeff{\multiply\X@p\m@ne
+\multiply\L@c\m@ne
+\multiply\R@c\m@ne
+\multiply\X@c\m@ne
+\multiply\xP@valA\m@ne
+\multiply\xP@valB\m@ne
+}
+\newcommand*\xP@setleftvalue[1]{\L@p\dimexpr\xP@ti-#1\p@\relax
+\ifdim\L@p<-.1pt\L@p-.1pt\fi
+\xP@valA\xP@bezierpoly\X@p\L@c\R@c\X@c\L@p
+}
+\newcommand*\xP@setrightvalue[1]{\U@p\dimexpr\xP@ti+#1\p@\relax
+\ifdim\U@p>2.1\p@\U@p2.1\p@\fi
+\xP@valB\xP@bezierpoly\X@p\L@c\R@c\X@c\U@p
+}
+\newcommand*\xP@splinedbldashed{\xP@checkspline\xP@splinemultdashed\xP@doublestroke}
+\newcommand*\xP@splinetrbldashed{\xP@checkspline\xP@splinemultdashed\xP@trblstroke}
+\newcommand*\xP@splinemultdashed[1]{\xP@testcont\xP@dashmacro
+\@tempcnta
+\ifxP@splinecont
+\numexpr2*((\@tempdimb-\xydashl@/3)/(2*\xydashl@))\relax
+\else
+\numexpr2*((\@tempdimb+\xydashl@)/(2*\xydashl@))-1\relax
+\fi
+\ifnum\@tempcnta>\@ne
+\xP@splinemultdashed@#1\else
+\ifnum\@tempcnta=\@ne
+\xP@splinemultsolid#1
+\else
+\xP@savec
+\fi
+\fi
+\global\let\xP@lastpattern\xP@dashmacro
+}
+\newcommand*\xP@splinemultdashed@[1]{{\xP@inibigdim
+\@tempdima\dimexpr\@tempdimb/\@tempcnta\relax
+\xP@temppar\z@
+\toks@{}\xP@savec
+\ifodd\@tempcnta
+\else
+\xP@slide
+\fi
+\@tempcnta\z@
+\loop
+\advance\@tempcnta\@ne
+\xP@append\toks@{\ifodd\@tempcnta\noexpand\xP@paintdash\fi
+{\the\xP@temppar}}\xP@oldpar\xP@temppar
+\xP@slide
+\ifdim\xP@temppar<\xP@bigdim
+\repeat
+\xP@lastpar
+\ifodd\@tempcnta
+\xP@temppar
+\xP@append\toks@{{\the\xP@temppar}}\else
+\xP@oldpar
+\fi
+\@temptokena{}\xP@setsolidpat
+\global\let\xP@lastpattern\xP@dashmacro
+\@for\@tempa:={#1}\do{\the\toks@}\xP@stroke{\the\@temptokena}}}
+\newcommand*\xP@paintdash[2]{\xP@paintsolid{\dimexpr#1*\xP@bigdim/\xP@lastpar\relax}{\dimexpr#2*\xP@bigdim/\xP@lastpar\relax}}
+\xP@hook{curve}{splinedbldotted@}
+\newcommand*\xP@splinedbldotted@{\let\xP@normalmult\@ne
+\xP@checkspline\xP@splinemultdotted\xP@doublestroke}
+\newcommand*\xP@splinetrbldotted{\let\xP@normalmult\tw@
+\xP@checkspline\xP@splinemultdotted\xP@trblstroke}
+\newcommand*\xP@multidottedpat{\def\xP@pattern{0 J [\xP@coor\xP@preclw{\xydashh@-\xP@preclw}]0 d}\global\let\xP@lastpattern\xP@dotmacro
+}
+\@ifdefinable\xP@normalmult\relax
+\newcommand\xP@splinemultdotted[1]{{\xP@inibigdim
+\xP@temppar\z@
+\xP@testcont\xP@dotmacro
+\ifxP@splinecont
+\@tempdimc\dimexpr\@tempdimb/(\@tempdimb/131072+1)\relax
+\@tempdima\dimexpr\@tempdimc-\xP@preclw/2\relax
+\xP@slide
+\@tempdima\@tempdimc
+\else
+\@tempdima\dimexpr\xP@preclw/2\relax
+\xP@slide
+\@tempdima\dimexpr\@tempdimb-\xP@preclw\relax
+\ifdim\@tempdima<\z@\@tempdima\z@\fi
+\@tempdima\dimexpr\@tempdima/(\@tempdima/131072+1)\relax
+\fi
+\xP@savec
+\toks@{}\ifdim\xP@temppar<\xP@bigdim
+\loop
+\xP@append\toks@{\noexpand\xP@paintdot{\the\xP@temppar}}\xP@oldpar\xP@temppar
+\xP@slide
+\ifdim\xP@temppar<\xP@bigdim
+\repeat
+\xP@velocity\xP@bigdim\xP@tempvel
+\ifdim
+\ifdim\xP@preclw<\xP@tempvel
+\dimexpr2\xP@bigdim-\xP@oldpar-\xP@preclw*\xP@bigdim/\xP@tempvel\relax
+\else
+-\maxdimen
+\fi<\xP@temppar
+\xP@temppar\xP@oldpar
+\else
+\xP@append\toks@{\noexpand\xP@paintdot{\the\xP@temppar}}\fi
+\@tempdima\dimexpr\xP@preclw/2\relax
+\xP@slide
+\xP@lastpar\xP@temppar
+\@temptokena{}\the\toks@
+\xP@multidottedpat
+\xP@stroke{\the\@temptokena}\else
+\global\let\xP@lastpattern\@empty
+\fi
+}}
+\newcommand*\xP@slide{{\xP@slide@
+\global\dimen@i\xP@temppar
+}\xP@temppar\dimen@i
+}
+\newcommand*\xP@slide@{\xP@velocity\xP@temppar\xP@tempvel
+\@tempdimc\dimexpr\xP@bigdim*\@tempdima/\@tempdimb\relax
+\count@\z@
+\@tempswatrue
+\loop
+\xP@velocity{\xP@temppar+\@tempdimc}\xP@tempvel@
+\ifdim\dimexpr\@tempdima*4/13\relax>\xP@tempvel@
+\@tempswafalse
+\else
+\xP@parinc\dimexpr\@tempdima*\xP@bigdim/\xP@tempvel@
+-(\xP@tempvel+\xP@tempvel@)/2*\@tempdimc/\xP@tempvel@\relax
+\advance\@tempdimc\xP@parinc
+\ifdim\@tempdimc>.12\xP@bigdim
+\@tempswafalse
+\else
+\ifdim\xP@parinc=\z@
+\@tempswafalse
+\else
+\ifnum\count@=9\relax
+\@tempswafalse
+\fi
+\fi
+\fi
+\fi
+\if@tempswa
+\advance\count@\@ne
+\repeat
+\ifdim\xP@temppar<5461pt
+\ifdim\@tempdimc>.1\xP@bigdim
+\@tempswatrue
+\fi
+\fi
+\if@tempswa
+{\dimen5\xP@temppar
+\advance\xP@temppar.1\xP@bigdim
+\ifdim\xP@temppar>5461pt\xP@temppar5461pt\fi
+\dimen7\xP@temppar
+\xP@shaveprec{\dimen5}{\dimen7}\xP@bezierlength
+\global\dimen@i\dimexpr\@tempdima-\@tempdimb\relax
+\global\dimen3\xP@temppar
+}\@tempdima\dimen@i
+\xP@temppar\dimen3\relax
+\expandafter\xP@slide@
+\else
+\advance\xP@temppar\@tempdimc
+\fi
+}
+\newcommand*\xP@paintdot[1]{\@tempdima\dimexpr#1*\xP@bigdim/\xP@lastpar\relax
+\xP@tangent
+\xP@posX\dimexpr\xP@precbezierpoly\X@p\L@c\R@c\X@c\@tempdima/8\relax
+\xP@posY\dimexpr\xP@precbezierpoly\Y@p\U@c\D@c\Y@c\@tempdima/8\relax
+\@tempdima\dimexpr(\xydashh@+\xP@preclw/\xP@normalmult)/2\relax
+\L@p\dimexpr\d@Y*\@tempdima/\@tempdimb\relax
+\U@p\dimexpr-\d@X*\@tempdima/\@tempdimb\relax
+\xP@append\@temptokena{\xP@coor{\xP@posX+\L@p*\xP@normalmult}{\xP@posY+\U@p*\xP@normalmult}m \xP@coor{\xP@posX-\L@p*(\xP@normalmult+\@ne)}{\xP@posY-\U@p*(\xP@normalmult+\@ne)}l }}
+\newcommand*\xP@splinesquiggled{\xP@checkspline\xP@splinesquiggled@\z@}
+\newcommand*\xP@splinedblsquiggled{\xP@checkspline\xP@splinesquiggled@\xP@doublestroke}
+\newcommand*\xP@splinetrblsquiggled{\xP@checkspline\xP@splinesquiggled@\xP@trblstroke}
+\newcommand*\xP@splinesquiggled@[1]{{\xP@inibigdim
+\xP@testcont\xP@oddsquigglemacro
+\ifxP@splinecont
+\def\xP@squigsign{-}\else
+\let\xP@squigsign\@empty
+\fi
+\xP@savec
+\@tempcnta=\numexpr\@tempdimb/\xybsqll@\relax
+\ifnum\@tempcnta<\tw@\@tempcnta\tw@\fi
+\multiply\@tempcnta\tw@
+\@tempdima\dimexpr\@tempdimb/\@tempcnta\relax
+\xP@squiglen\@tempdima
+\xP@temppar\z@
+\toks@{}\@tempcnta\z@
+\loop
+\advance\@tempcnta\@ne
+\xP@append\toks@{\noexpand\xP@paintsquiggle{\the\xP@temppar}}\xP@oldpar\xP@temppar
+\xP@slide
+\ifdim\xP@temppar<\xP@bigdim
+\repeat
+\xP@lastpar
+\ifodd\@tempcnta
+\xP@oldpar
+\advance\@tempcnta\m@ne
+\else
+\xP@temppar
+\xP@append\toks@{\noexpand\xP@paintsquiggle{\the\xP@temppar}}\fi
+\@temptokena{}\xP@setsolidpat
+\global\expandafter\let\expandafter\xP@lastpattern
+\ifodd\numexpr\@tempcnta/2\if\xP@squigsign-+1\fi\relax
+\xP@oddsquigglemacro
+\else
+\xP@evensquigglemacro
+\fi
+\@for\@tempa:={#1}\do{\let\xP@dosquiggle\xP@dosquiggle@
+\count@\z@
+\the\toks@
+}\xP@stroke{\the\@temptokena}}}
+\newcommand*\xP@paintsquiggle[1]{\xP@squigglevectors{#1}\xP@dosquiggle
+\ifnum\count@=\thr@@\relax\count@\z@\else\advance\count@\@ne\fi
+}
+\newcommand*\xP@squigglevectors[1]{\@tempdima\dimexpr#1*\xP@bigdim/\xP@lastpar\relax
+\xP@tangent
+\xP@posX\dimexpr\xP@precbezierpoly\X@p\L@c\R@c\X@c\@tempdima/8-\d@Y*(\@tempa)/\@tempdimb\relax
+\xP@posY\dimexpr\xP@precbezierpoly\Y@p\U@c\D@c\Y@c\@tempdima/8+\d@X*(\@tempa)/\@tempdimb\relax
+\L@p\dimexpr\d@X*\xP@squiglen/\@tempdimb\relax
+\U@p\dimexpr\d@Y*\xP@squiglen/\@tempdimb\relax
+\R@p\dimexpr\L@p*543339720/1311738121\relax
+\D@p\dimexpr\U@p*543339720/1311738121\relax
+\X@min\dimexpr\L@p*362911648/967576667\relax
+\Y@min\dimexpr\U@p*362911648/967576667\relax
+\X@max\dimexpr(\L@p+\xP@squigsign\U@p)*173517671/654249180\relax
+\Y@max\dimexpr(\L@p-\xP@squigsign\U@p)*173517671/654249180\relax
+}
+\@ifdefinable\xP@dosquiggle@\relax
+\newcommand*\xP@dosquiggle@{\edef\next@{\xP@coor{\xP@posX}{\xP@posY}m
+\xP@coor{\xP@posX+\Y@max}{\xP@posY+\xP@squigsign\X@max}}\let\xP@dosquiggle\xP@dosquiggle@@
+}
+\newcommand*\xP@dosquiggle@@{\xP@append\@temptokena{\next@\expandafter\xP@coor
+\ifcase\count@
+{\xP@posX-\Y@max}{\xP@posY-\xP@squigsign\X@max}\xP@coor\xP@posX\xP@posY
+\or
+{\xP@posX-\xP@squigsign\D@p-\X@min}{\xP@posY+\xP@squigsign\R@p-\Y@min}\xP@coor{\xP@posX-\xP@squigsign\D@p}{\xP@posY+\xP@squigsign\R@p}\or
+{\xP@posX-\X@max}{\xP@posY+\xP@squigsign\Y@max}\xP@coor\xP@posX\xP@posY
+\or
+{\xP@posX+\xP@squigsign\D@p-\X@min}{\xP@posY-\xP@squigsign\R@p-\Y@min}\xP@coor{\xP@posX+\xP@squigsign\D@p}{\xP@posY-\xP@squigsign\R@p}\fi c }\edef\next@{\expandafter\xP@coor
+\ifcase\count@
+{\xP@posX+\Y@max}{\xP@posY+\xP@squigsign\X@max}\or
+{\xP@posX-\xP@squigsign\D@p+\X@min}{\xP@posY+\xP@squigsign\R@p+\Y@min}\or
+{\xP@posX+\X@max}{\xP@posY-\xP@squigsign\Y@max}\or
+{\xP@posX+\xP@squigsign\D@p+\X@min}{\xP@posY-\xP@squigsign\R@p+\Y@min}\fi
+}}
+\newcommand*\xP@splinebrokensquiggled{\xP@checkspline\xP@splinebrokensquiggled@\z@}
+\newcommand*\xP@splinebrokendblsquiggled{\xP@checkspline\xP@splinebrokensquiggled@\xP@doublestroke}
+\newcommand*\xP@splinebrokentrblsquiggled{\xP@checkspline\xP@splinebrokensquiggled@\xP@trblstroke}
+\newcommand*\xP@splinebrokensquiggled@[1]{{\xP@inibigdim
+\xP@testcont\xP@brokensquigglemacro
+\ifxP@splinecont
+\let\xP@squigsign\@firstoftwo
+\else
+\let\xP@squigsign\@secondoftwo
+\fi
+\xP@savec
+\@tempcnta\numexpr(\@tempdimb\xP@squigsign{}{+2*\xybsqll@})/(4*\xybsqll@)\relax
+\ifnum\@tempcnta<\@ne\@tempcnta\@ne\fi
+\@tempdima\dimexpr\@tempdimb/(8*\@tempcnta\xP@squigsign{}{-4})\relax
+\xP@squiglen\@tempdima
+\xP@temppar\z@
+\xP@squigsign{\xP@slide\xP@slide\xP@slide\xP@slide}{}\count@\z@
+\toks@{}\loop
+\xP@append\toks@{\noexpand\xP@paintbrokensquiggle{\the\xP@temppar}}\xP@slide
+\xP@append\toks@{{\the\xP@temppar}}\xP@slide
+\xP@append\toks@{{\the\xP@temppar}}\xP@slide
+\xP@append\toks@{{\the\xP@temppar}}\xP@slide
+\xP@append\toks@{{\the\xP@temppar}}\xP@lastpar\xP@temppar
+\advance\count@\@ne
+\ifnum\count@<\@tempcnta
+\xP@slide
+\xP@slide
+\xP@slide
+\xP@slide
+\repeat
+\@temptokena{}\xP@setsolidpat
+\global\let\xP@lastpattern\xP@brokensquigglemacro
+\let\xP@squigsign\@empty
+\@for\@tempa:={#1}\do{\the\toks@}\xP@stroke{\the\@temptokena}}}
+\newcommand*\xP@paintbrokensquiggle[5]{\xP@squigglevectors{#1}\xP@append\@temptokena{\xP@coor\xP@posX\xP@posY m \xP@coor{\xP@posX+\Y@max}{\xP@posY+\X@max}}\xP@squigglevectors{#2}\xP@append\@temptokena{\xP@coor{\xP@posX-\D@p-\X@min}{\xP@posY+\R@p-\Y@min}\xP@coor{\xP@posX-\D@p}{\xP@posY+\R@p}c \xP@coor{\xP@posX-\D@p+\X@min}{\xP@posY+\R@p+\Y@min}}\xP@squigglevectors{#3}\xP@append\@temptokena{\xP@coor{\xP@posX-\X@max}{\xP@posY+\Y@max}\xP@coor\xP@posX\xP@posY c \xP@coor{\xP@posX+\X@max}{\xP@posY-\Y@max}}\xP@squigglevectors{#4}\xP@append\@temptokena{\xP@coor{\xP@posX+\D@p-\X@min}{\xP@posY-\R@p-\Y@min}\xP@coor{\xP@posX+\D@p}{\xP@posY-\R@p}c \xP@coor{\xP@posX+\D@p+\X@min}{\xP@posY-\R@p+\Y@min}}\xP@squigglevectors{#5}\xP@append\@temptokena{\xP@coor{\xP@posX-\Y@max}{\xP@posY-\X@max}\xP@coor\xP@posX\xP@posY c }}
+\xyendinput
+
+
+
+
+
+%%
+%% End of file `xypdf-cu.tex'.
diff --git a/macros/generic/diagrams/xypic/texinputs/xypdf-fr.tex b/macros/generic/diagrams/xypic/texinputs/xypdf-fr.tex
new file mode 100644
index 0000000000..4138294c1a
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xypdf-fr.tex
@@ -0,0 +1,438 @@
+%%
+%% This is file `xypdf-fr.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xypdf.dtx (with options: `frame')
+%%
+%% The xypdf package for TeX and LaTeX
+%% Copyright (c) 2010 by Daniel Müllner (M\"ullner)
+%% <http://math.stanford.edu/~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/>.
+%%
+%% --------------------------------------------------------------------------
+%%
+%% This file is part of the xypdf package for TeX and LaTeX2e. 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 distribution consists of the following files:
+%%
+%% xypdf.dtx - Documented source code
+%% xypdf.ins - Installation script
+%% xypdf.pdf - Documentation (generated from xypdf.dtx)
+%%
+%% The files with the TeX code are generated by the following command:
+%%
+%% latex xypdf.ins
+%%
+%% This generates the files xypdf.tex, xypdf-co.tex, xypdf-cu.tex,
+%% xypdf-fr.tex, xypdf-li.tex and xypdf-ro.tex.
+%%
+%% --------------------------------------------------------------------------
+%%
+%% 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. It is being
+%% integrated and distributed together with Xy-pic, starting with Xy-pic
+%% version 3.8.
+%%
+%% The copyright for the xypdf package is by its author, Daniel Müllner
+%% (Muellner, M\"ullner).
+%%
+\xyrequire{curve}\xycatcodes
+\expandafter\let\csname xypdf-fr@loaded\endcsname\@empty
+\newcommand*\xP@framedrop[1]{\expandafter\frmDrop@\expandafter{\expandafter\def\expandafter\prevEdge@@\expandafter{\prevEdge@@}\setboxz@h{#1\frmradius@@}\styledboxz@}}
+\xP@hook{frame}{frm{-}}
+\expandafter\newcommand\expandafter*\csname xP@frm{-}\endcsname{\xP@framedrop\xP@solidframe
+}
+\newcommand*\xP@solidframe[1]{\R@#1\relax
+\xP@setsolidpat
+\let\xP@fillorstroke\xP@stroke
+\xP@frameifnotzero\xP@oval
+}
+\newcommand*\xP@ifzerosize[2]{\@tempswafalse
+\ifdim\L@c=\z@\ifdim\R@c=\z@\ifdim\U@c=\z@\ifdim\D@c=\z@
+\@tempswatrue
+\fi\fi\fi\fi
+\if@tempswa#1\else#2\fi
+}
+\newcommand*\xP@frameifnotzero[1]{\setboxz@h{\hskip\X@c\raise\Y@c\hbox{\xP@ifzerosize{}{#1}}}\wd\z@\z@\ht\z@\z@\dp\z@\z@
+\boxz@
+}
+\newcommand*\xP@oval{\hskip-\L@c
+\lower\D@c\hbox{\dimen@\dimexpr\L@c+\R@c\relax
+\dimen@ii\dimexpr\U@c+\D@c\relax
+\R@\xP@min\R@{.5\dimen@}\R@\xP@min\R@{.5\dimen@ii}\@tempdimb\dimexpr2\dimen@+2\dimen@ii-\R@*696621973/405764219\relax
+\ifdim\R@=\z@
+\xP@fillorstroke{0 0 \xP@coor\dimen@\dimen@ii re}\else
+\def\@tempa{*119763188/267309217}\xP@fillorstroke{\xP@dim\R@0 m \xP@dim{\R@\@tempa}0 0 \xP@dim{\R@\@tempa}0 \xP@dim\R@ c \ifdim2\R@=\dimen@ii\else
+0 \xP@dim{\dimen@ii-\R@}l \fi
+0 \xP@dim{\dimen@ii-\R@\@tempa}\xP@coor{\R@\@tempa}\dimen@ii
+\xP@coor\R@\dimen@ii c \ifdim2\R@=\dimen@\else
+\xP@coor{\dimen@-\R@}\dimen@ii l \fi
+\xP@coor{\dimen@-\R@\@tempa}\dimen@ii
+\xP@coor\dimen@{\dimen@ii-\R@\@tempa}\xP@coor\dimen@{\dimen@ii-\R@} c \ifdim2\R@=\dimen@ii\else
+\xP@coor\dimen@\R@ l \fi
+\xP@coor\dimen@{\R@\@tempa}\xP@dim{\dimen@-\R@\@tempa}0 \xP@dim{\dimen@-\R@}0 c h}\fi
+}}
+\xP@hook{frame}{frm[o]{-}}
+\expandafter\newcommand\expandafter*\csname xP@frm[o]{-}\endcsname{\xP@framedrop{\xP@ellipseframe\xP@setsolidpat}}
+\newcommand*\xP@ellipseframe[2]{\xP@getradii{#2}\xP@ifzerosize{}{\def\xP@fillorstroke{#1\xP@stroke}\setboxz@h{\hskip\X@c\raise\Y@c\hbox{\xP@framedellipse}}\wd\z@\z@\ht\z@\z@\dp\z@\z@
+\boxz@
+}}
+\xP@hook{frame}{frm{.}}
+\expandafter\newcommand\expandafter*\csname xP@frm{.}\endcsname{\xP@framedrop\xP@rectframedotted
+}
+\newcommand*\xP@rectframedotted[1]{\R@#1\relax
+\xP@frameifnotzero{\ifdim\R@=\z@
+\xP@dottedrect
+\else
+\xP@dottedoval
+\fi
+}}
+\newcommand*\xP@dottedrect{\hskip-\L@c
+\lower\D@c\hbox{\dimen@ii\dimexpr\U@c+\D@c\relax
+\@tempdimc\dimexpr\xP@preclw/-2\relax
+\@tempdimb\dimexpr\L@c+\R@c+\xP@preclw\relax
+\xP@contfalse
+\xP@setdottedpat
+\dimen@\dimexpr\@tempdimb+\@tempdima/2+\@tempdimc\relax
+\xP@stroke{\xP@dim\@tempdimc0 m \xP@dim\dimen@0 l \xP@coor\@tempdimc\dimen@ii m \xP@coor\dimen@\dimen@ii l}\let\xP@testcont\xP@alwaysconttrue
+\@tempdimb\dimen@ii
+\xP@setdottedpat
+\dimen@\dimexpr\L@c+\R@c\relax
+\advance\dimen@ii\dimexpr\@tempdimc-\@tempdima/2\relax
+\multiply\@tempdimc\m@ne
+\xP@stroke{0 \xP@dim\@tempdimc m 0 \xP@dim\dimen@ii l \xP@coor\dimen@\@tempdimc m \xP@coor\dimen@\dimen@ii l}}}
+\newcommand*\xP@dottedoval{\def\xP@fillorstroke{\xP@setcldottedpat\xP@stroke}\xP@oval
+}
+\xP@hook{frame}{frm[o]{.}}
+\expandafter\newcommand\expandafter*\csname xP@frm[o]{.}\endcsname{\xP@framedrop{\xP@ellipseframe\xP@setcldottedpat}}
+\xP@hook{frame}{frm{--}}
+\expandafter\newcommand\expandafter*\csname xP@frm{--}\endcsname{\xP@framedrop\xP@rectframedashed
+}
+\newcommand*\xP@rectframedashed[1]{\R@#1\relax
+\xP@frameifnotzero{\ifdim\R@=\z@
+\xP@dashedrect
+\else
+\xP@dashedoval
+\fi
+}}
+\newcommand*\xP@dashedrect{\hskip-\L@c
+\lower\D@c\hbox{\dimen@\dimexpr\L@c+\R@c\relax
+\dimen@ii\dimexpr\U@c+\D@c\relax
+\@tempdimb\dimen@
+\xP@contfalse
+\xP@setdashpat
+\xP@stroke{0 0 m \xP@dim\dimen@0 l 0 \xP@dim\dimen@ii m \xP@coor\dimen@\dimen@ii l}\@tempdimb\dimen@ii
+\xP@setdashpat
+\xP@stroke{0 0 m 0 \xP@dim\dimen@ii l \xP@dim\dimen@0 m \xP@coor\dimen@\dimen@ii l}}}
+\newcommand*\xP@dashedoval{\def\xP@fillorstroke{\xP@setcldashpat\xP@stroke}\xP@oval
+}
+\xP@hook{frame}{frm[o]{--}}
+\expandafter\newcommand\expandafter*\csname xP@frm[o]{--}\endcsname{\xP@framedrop{\xP@ellipseframe\xP@setcldashpat}}
+\xP@hook{frame}{frm{,}}
+\expandafter\newcommand\expandafter*\csname xP@frm{,}\endcsname{\xP@framedrop\xP@frameshadow
+}
+\newcommand*\xP@frameshadow[1]{\R@#1\relax
+\ifdim\R@=\z@\R@1.2pt\relax\fi
+\xP@frameifnotzero\xP@shadow
+}
+\newcommand*\xP@shadow{\hskip\dimexpr\R@c+\R@/2\relax
+\lower\dimexpr\D@c+\R@/2\relax\hbox{\def\xP@pattern{0 J 0 j []0 d}\edef\xP@lw{\xP@dim\R@}\xP@stroke{\xP@dim{\R@/2-\L@c-\R@c} 0 m 0 0 l 0 \xP@dim{\D@c+\U@c-\R@/2}l}}}
+\xP@hook{frame}{frm{o-}}
+\expandafter\newcommand\expandafter*\csname xP@frm{o-}\endcsname{\xP@framedrop\xP@roundedrectframe
+}
+\newcommand*\xP@roundedrectframe[1]{\R@#1\relax
+\ifdim\R@=\z@\R@\xydashl@\relax\fi
+\xP@frameifnotzero\xP@roundedrectangle
+}
+\newcommand*\xP@roundedrectangle{\dimen@\dimexpr\L@c+\R@c\relax
+\dimen@ii\dimexpr\U@c+\D@c\relax
+\R@\xP@min\R@{.5\dimen@}\R@\xP@min\R@{.5\dimen@ii}\hskip-\L@c
+\lower\D@c\hbox{\@tempdimb\dimexpr2\dimen@+2\dimen@ii-\R@*696621973/405764219\relax
+\def\@tempa{*119763188/267309217}\xP@setsolidpat
+\xP@stroke{\xP@dim\R@0 m \xP@dim{\R@\@tempa}0 0 \xP@dim{\R@\@tempa}0 \xP@dim\R@ c \ifdim2\R@=\dimen@ii\else
+0 \xP@dim{\dimen@ii-\R@}m \fi
+0 \xP@dim{\dimen@ii-\R@\@tempa}\xP@coor{\R@\@tempa}\dimen@ii
+\xP@coor\R@\dimen@ii c \ifdim2\R@=\dimen@\else
+\xP@coor{\dimen@-\R@}\dimen@ii m \fi
+\xP@coor{\dimen@-\R@\@tempa}\dimen@ii
+\xP@coor\dimen@{\dimen@ii-\R@\@tempa}\xP@coor\dimen@{\dimen@ii-\R@} c \ifdim2\R@=\dimen@ii\else
+\xP@coor\dimen@\R@ m \fi
+\xP@coor\dimen@{\R@\@tempa}\xP@dim{\dimen@-\R@\@tempa}0 \xP@dim{\dimen@-\R@}0 c}\xP@contfalse
+\@tempdimb\dimexpr\L@c+\R@c-2\R@\relax
+\ifdim\@tempdimb<\z@\@tempdimb\z@\fi
+\xP@setdashpat
+\ifdim\@tempdima>\z@
+\dimen@\dimexpr\@tempdimb+\R@-\@tempdima/2\relax
+\dimen@ii\dimexpr\U@c+\D@c\relax
+\xP@stroke{\xP@dim{\R@+\@tempdima}0 m \xP@dim\dimen@ 0 l \xP@coor{\R@+\@tempdima}\dimen@ii m \xP@coor\dimen@\dimen@ii l}\fi
+\@tempdimb\dimexpr\U@c+\D@c-2\R@\relax
+\ifdim\@tempdimb<\z@\@tempdimb\z@\fi
+\xP@setdashpat
+\ifdim\@tempdima>\z@
+\dimen@\dimexpr\L@c+\R@c\relax
+\dimen@ii\dimexpr\@tempdimb+\R@-\@tempdima/2\relax
+\xP@stroke{0 \xP@dim{\R@+\@tempdima}m 0 \xP@dim\dimen@ii l \xP@coor\dimen@{\R@+\@tempdima}m \xP@coor\dimen@\dimen@ii l}\fi
+}}
+\xP@hook{frame}{frm{=}}
+\expandafter\newcommand\expandafter*\csname xP@frm{=}\endcsname{\xP@framedrop\xP@dsframe
+}
+\newcommand*\xP@dsframe[1]{\R@#1\relax
+\xP@frameifnotzero\xP@dsoval
+}
+\newcommand*\xP@dsoval{\dimen@\dimexpr(\L@c+\R@c)/2\relax
+\ifdim\dimen@<\xydashh@\dimen@\xydashh@\fi
+\dimen@ii\dimexpr(\U@c+\D@c)/2\relax
+\ifdim\dimen@ii<\xydashh@\dimen@ii\xydashh@\fi
+\R@\xP@min\R@\dimen@
+\R@\xP@min\R@\dimen@ii
+\xP@setsolidpat
+\let\xP@fillorstroke\xP@stroke
+\xP@oval
+\hskip\L@c
+\advance\L@c-\xydashh@
+\advance\R@c-\xydashh@
+\advance\U@c-\xydashh@
+\advance\D@c-\xydashh@
+\advance\R@-\xydashh@
+\ifdim\R@<\z@\R@\z@\fi
+\xP@oval
+}
+\xP@hook{frame}{frm[o]{=}}
+\expandafter\newcommand\expandafter*\csname xP@frm[o]{=}\endcsname{\xP@framedrop\xP@dsellframe
+}
+\xP@hook{frame}{frm{ee}}
+\expandafter\newcommand\expandafter*\csname xP@frm{ee}\endcsname{\xP@framedrop\xP@dsellframe
+}
+\newcommand*\xP@dsellframe[1]{\xP@getradii{#1}\xP@frameifnotzero\xP@dsellipse
+}
+\@ifdefinable\xP@temppath\relax
+\newcommand*\xP@dsellipse{\hskip\dimexpr(\R@c-\L@c)/2\relax
+\lower\dimexpr(\D@c-\U@c)/2\relax
+\hbox{\advance\A@-\xydashh@
+\advance\B@-\xydashh@
+\ifdim\A@<\z@\A@\z@\fi
+\ifdim\B@<\z@\B@\z@\fi
+\def\xP@fillorstroke{\edef\xP@temppath}\xP@ellipse@
+\xP@inibigdim
+\let\@tempa\xydashh@
+\xP@offsetellipse
+\xP@setsolidpat
+\xP@stroke{\xP@temppath\space\the\@temptokena}}}
+\newcommand*\xP@offsetellipse{\xP@movetotrue
+\@temptokena{}\xP@offsetelliptseg\A@\z@\A@{\B@*173517671/654249180}{\A@*554561898/619869377}{\B@*34221476/65864945}{\A@*543339720/768398401}{\B@*543339720/768398401}\xP@offsetelliptseg{\A@*543339720/768398401}{\B@*543339720/768398401}{\A@*34221476/65864945}{\B@*554561898/619869377}{\A@*173517671/654249180}\B@\z@\B@
+\xP@mirrorpath
+}
+\newcommand*\xP@mirrorpath{\edef\@tempa{\the\@temptokena\relax\space\space\space\space}\let\@tempb\@empty
+\let\@tempc\@empty
+\expandafter\xP@mirrorpath@\@tempa
+}
+\@ifdefinable\xP@mirrorpath@\relax
+\def\xP@mirrorpath@#1 #2 #3 #4 #5 #6 #7 {\ifx\relax#4\xP@append\@temptokena{\@tempb\xP@minus#1 \xP@minus#2 #3 \@tempc h}\else
+\edef\@tempb{\xP@minus#6 #7 \xP@minus#4 #5 \xP@minus#1 #2 c \@tempb\if#3m\else\xP@minus#1 \xP@minus#2 #3 \fi\xP@minus#4 \xP@minus#5 \xP@minus#6 \xP@minus#7 }\edef\@tempc{#6 \xP@minus#7 #4 \xP@minus#5 #1 \xP@minus#2 c \@tempc}\expandafter\xP@mirrorpath@
+\fi
+}
+\@ifdefinable\xP@minus\relax
+\def\xP@minus#1 {\if-#1 \else\ifdim\dimexpr#1pt\relax=\z@\else-\fi#1 \fi}
+\newcommand*\xP@insertbefore[2]{{\edef\@tempa{#1{#2\the#1}}\expandafter}\@tempa}
+\newcommand*\xP@offsetelliptseg[8]{\X@p\dimexpr#1\relax
+\Y@p\dimexpr#2\relax
+\L@c\dimexpr#3\relax
+\U@c\dimexpr#4\relax
+\R@c\dimexpr#5\relax
+\D@c\dimexpr#6\relax
+\X@c\dimexpr#7\relax
+\Y@c\dimexpr#8\relax
+\xP@savepts
+\xP@a\z@
+\xP@c\xP@bigdim
+\xP@paintsolid@
+}
+\newcommand*\xP@getradii[1]{\edef\@tempa{#1}\expandafter\xP@getradii@\@tempa,\maxdimen,@}
+\@ifdefinable\xP@getradii@\relax
+\def\xP@getradii@#1,#2,#3@{\A@#1\relax
+\B@#2\relax
+\ifdim\B@=\maxdimen
+\A@\dimexpr(\L@c+\R@c)/2\relax
+\B@\dimexpr(\U@c+\D@c)/2\relax
+\fi
+}
+\xP@hook{frame}{frm{o}}
+\expandafter\newcommand\expandafter*\csname xP@frm{o}\endcsname{\xP@framedrop{\xP@circleframe\xP@setsolidpat}}
+\xP@hook{frame}{frm{-o}}
+\expandafter\newcommand\expandafter*\csname xP@frm{-o}\endcsname{\xP@framedrop{\xP@circleframe\xP@setcldashpat}}
+\xP@hook{frame}{frm{.o}}
+\expandafter\newcommand\expandafter*\csname xP@frm{.o}\endcsname{\xP@framedrop{\xP@circleframe\xP@setcldottedpat}}
+\newcommand*\xP@circleframe[2]{\R@#2\relax
+\def\xP@fillorstroke{#1\xP@stroke}\xP@ifzerosize{\ifdim\R@>\z@
+\xP@circleframe@
+\fi
+}{\ifdim\R@=\z@
+\A@\dimexpr(\L@c+\R@c)/2\relax
+\B@\dimexpr(\U@c+\D@c)/2\relax
+\R@\xP@max\A@\B@
+\fi
+\xP@circleframe@
+}}
+\newcommand*\xP@circleframe@{\setboxz@h{\hskip\X@c\raise\Y@c\hbox{\xP@circle}}\wd\z@\z@\ht\z@\z@\dp\z@\z@
+\boxz@
+}
+\xP@hook{frame}{frm{e}}
+\expandafter\newcommand\expandafter*\csname xP@frm{e}\endcsname{\xP@framedrop{\xP@ellipseframe\xP@setsolidpat}}
+\xP@hook{frame}{frm{-e}}
+\expandafter\newcommand\expandafter*\csname xP@frm{-e}\endcsname{\xP@framedrop{\xP@ellipseframe\xP@setcldashpat}}
+\xP@hook{frame}{frm{.e}}
+\expandafter\newcommand\expandafter*\csname xP@frm{.e}\endcsname{\xP@framedrop{\xP@ellipseframe\xP@setcldottedpat}}
+\xP@hook{frame}{frm2{.e}}
+\expandafter\newcommand\expandafter*\csname xP@frm2{.e}\endcsname{\xP@framedrop\xP@dsdottedellframe
+}
+\newcommand*\xP@dsdottedellframe[1]{\xP@getradii{#1}\xP@frameifnotzero\xP@dsdottedellipse
+}
+\newcommand*\xP@dsdottedellipse{\hskip\dimexpr(\R@c-\L@c)/2\relax
+\lower\dimexpr(\D@c-\U@c)/2\relax
+\hbox{\@tempdima.5\xydashh@\relax
+\advance\A@-\@tempdima
+\advance\B@-\@tempdima
+\ifdim\A@<\@tempdima\A@\@tempdima\fi
+\ifdim\B@<\@tempdima\B@\@tempdima\fi
+\let\xP@normalmult\@ne
+\xP@specialellipse{\xP@splinemultdotted\xP@doublestroke}}}
+\newcommand*\xP@specialellipse[1]{\def\@tempa{*147546029/267309217}\X@p\A@
+\Y@p\z@
+\L@c\A@
+\U@c\dimexpr\B@\@tempa\relax
+\R@c\dimexpr\A@\@tempa\relax
+\D@c\B@
+\X@c\z@
+\Y@c\B@
+\xP@bezierlength
+\let\xP@testcont\xP@alwaysconttrue
+#1\X@p\z@
+\Y@p\B@
+\L@c-\R@c
+\D@c\U@c
+\U@c\B@
+\R@c-\A@
+\X@c-\A@
+\Y@c\z@
+#1\X@p-\A@
+\Y@p\z@
+\R@c\L@c
+\L@c-\A@
+\U@c-\D@c
+\D@c-\B@
+\X@c\z@
+\Y@c-\B@
+#1\X@p\z@
+\Y@p-\B@
+\L@c-\R@c
+\D@c\U@c
+\U@c-\B@
+\R@c\A@
+\X@c\A@
+\Y@c\z@
+#1}
+\newcommand*\xP@alwaysconttrue[1]{\xP@splineconttrue}
+\xP@hook{frame}{frm2{-e}}
+\expandafter\newcommand\expandafter*\csname xP@frm2{-e}\endcsname{\xP@framedrop\xP@dsdashellframe
+}
+\newcommand*\xP@dsdashellframe[1]{\xP@getradii{#1}\xP@frameifnotzero\xP@dsdashellipse
+}
+\newcommand*\xP@dsdashellipse{\hskip\dimexpr(\R@c-\L@c)/2\relax
+\lower\dimexpr(\D@c-\U@c)/2\relax
+\hbox{\advance\A@-\xydashh@
+\advance\B@-\xydashh@
+\ifdim\A@<\z@\A@\z@\fi
+\ifdim\B@<\z@\B@\z@\fi
+\xP@specialellipse{\xP@splinemultdashed\xP@elldoublestroke}}}
+\newcommand*\xP@elldoublestroke{\z@,\xydashh@}
+\newcommand*\xP@fill[1]{\xP@literal{#1 f}}
+\newcommand*\xP@fillstroke[1]{\xP@literal{\xP@dim{\xP@preclw/2}w 1 j 0 G #1 b}}
+\newcommand*\xP@fillorstroke{}
+\xP@hook{frame}{frm{*}}
+\expandafter\newcommand\expandafter*\csname xP@frm{*}\endcsname{\xP@framedrop{\let\xP@fillorstroke\xP@fill\xP@framefill}}
+\xP@hook{frame}{frm{**}}
+\expandafter\newcommand\expandafter*\csname xP@frm{**}\endcsname{\xP@framedrop{\let\xP@fillorstroke\xP@fillstroke\xP@framefill}}
+\newcommand*\xP@framefill[1]{\R@#1\relax
+\xP@setsolidpat
+\setboxz@h{\hskip\X@c\raise\Y@c\hbox{\DN@{\rectangleEdge}\ifx\next@\prevEdge@@
+\DN@{\xP@oval}\else
+\DN@{\circleEdge}\ifx\next@\prevEdge@@
+\ifdim\R@=\z@
+\DN@{\xP@filledellipse}\else
+\DN@{\restR@max\xP@circle}\fi
+\else
+\ifdim\R@=\z@
+\DN@{\xP@oval}\else
+\DN@{\xP@circle}\fi
+\fi
+\fi
+\next@
+}}\wd\z@\z@\ht\z@\z@\dp\z@\z@
+\boxz@
+}
+\newcommand*\xP@circle{\xP@ellipse\R@\R@
+}
+\newcommand*\xP@filledellipse{\xP@ellipse{\dimexpr(\L@c+\R@c)/2\relax}{\dimexpr(\U@c+\D@c)/2\relax}}
+\newcommand*\xP@framedellipse{\xP@ellipse\A@\B@
+}
+\newcommand*\xP@ellipse[2]{\hskip\dimexpr(\R@c-\L@c)/2\relax
+\lower\dimexpr(\D@c-\U@c)/2\relax
+\hbox{\A@#1\relax
+\B@#2\relax
+\xP@ellipse@
+}}
+\newcommand*\xP@ellipse@{\X@p\dimexpr\A@*543339720/768398401\relax
+\Y@p\dimexpr\B@*543339720/768398401\relax
+\L@c\dimexpr\A@*34221476/65864945\relax
+\U@c\dimexpr\B@*554561898/619869377\relax
+\R@c\dimexpr\A@*173517671/654249180\relax
+\D@c\B@
+\X@c\z@
+\Y@c\B@
+\xP@bezierlength
+\@tempdima\@tempdimb
+\X@p\A@
+\Y@p\z@
+\L@c\A@
+\U@c\dimexpr\B@*173517671/654249180\relax
+\R@c\dimexpr\A@*554561898/619869377\relax
+\D@c\dimexpr\B@*34221476/65864945\relax
+\X@c\dimexpr\A@*543339720/768398401\relax
+\Y@c\dimexpr\B@*543339720/768398401\relax
+\xP@bezierlength
+\@tempdimb4\dimexpr\@tempdima+\@tempdimb\relax
+\edef\@tempa{\xP@dim\A@0 m
+\xP@coor\L@c\U@c
+\xP@coor\R@c\D@c
+\xP@coor\X@c\Y@c c \xP@coor{\A@*34221476/65864945}{\B@*554561898/619869377}\xP@coor{\A@*173517671/654249180}\B@
+0 \xP@dim\B@ c }\@temptokena\expandafter{\@tempa}\xP@mirrorpath
+\xP@fillorstroke{\the\@temptokena}}
+\xyendinput
+
+
+
+
+
+%%
+%% End of file `xypdf-fr.tex'.
diff --git a/macros/generic/diagrams/xypic/texinputs/xypdf-li.tex b/macros/generic/diagrams/xypic/texinputs/xypdf-li.tex
new file mode 100644
index 0000000000..5fc4de376b
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xypdf-li.tex
@@ -0,0 +1,69 @@
+%%
+%% This is file `xypdf-li.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xypdf.dtx (with options: `line')
+%%
+%% The xypdf package for TeX and LaTeX
+%% Copyright (c) 2010 by Daniel Müllner (M\"ullner)
+%% <http://math.stanford.edu/~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/>.
+%%
+%% --------------------------------------------------------------------------
+%%
+%% This file is part of the xypdf package for TeX and LaTeX2e. 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 distribution consists of the following files:
+%%
+%% xypdf.dtx - Documented source code
+%% xypdf.ins - Installation script
+%% xypdf.pdf - Documentation (generated from xypdf.dtx)
+%%
+%% The files with the TeX code are generated by the following command:
+%%
+%% latex xypdf.ins
+%%
+%% This generates the files xypdf.tex, xypdf-co.tex, xypdf-cu.tex,
+%% xypdf-fr.tex, xypdf-li.tex and xypdf-ro.tex.
+%%
+%% --------------------------------------------------------------------------
+%%
+%% 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. It is being
+%% integrated and distributed together with Xy-pic, starting with Xy-pic
+%% version 3.8.
+%%
+%% The copyright for the xypdf package is by its author, Daniel Müllner
+%% (Muellner, M\"ullner).
+%%
+\xycatcodes
+\expandafter\let\csname xypdf-li@loaded\endcsname\@empty
+\xyendinput
+
+
+
+
+
+%%
+%% End of file `xypdf-li.tex'.
diff --git a/macros/generic/diagrams/xypic/texinputs/xypdf-ro.tex b/macros/generic/diagrams/xypic/texinputs/xypdf-ro.tex
new file mode 100644
index 0000000000..d0bcf79638
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xypdf-ro.tex
@@ -0,0 +1,133 @@
+%%
+%% This is file `xypdf-ro.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xypdf.dtx (with options: `rotate')
+%%
+%% The xypdf package for TeX and LaTeX
+%% Copyright (c) 2010 by Daniel Müllner (M\"ullner)
+%% <http://math.stanford.edu/~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/>.
+%%
+%% --------------------------------------------------------------------------
+%%
+%% This file is part of the xypdf package for TeX and LaTeX2e. 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 distribution consists of the following files:
+%%
+%% xypdf.dtx - Documented source code
+%% xypdf.ins - Installation script
+%% xypdf.pdf - Documentation (generated from xypdf.dtx)
+%%
+%% The files with the TeX code are generated by the following command:
+%%
+%% latex xypdf.ins
+%%
+%% This generates the files xypdf.tex, xypdf-co.tex, xypdf-cu.tex,
+%% xypdf-fr.tex, xypdf-li.tex and xypdf-ro.tex.
+%%
+%% --------------------------------------------------------------------------
+%%
+%% 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. It is being
+%% integrated and distributed together with Xy-pic, starting with Xy-pic
+%% version 3.8.
+%%
+%% The copyright for the xypdf package is by its author, Daniel Müllner
+%% (Muellner, M\"ullner).
+%%
+\xycatcodes
+\expandafter\let\csname xypdf-ro@loaded\endcsname\@empty
+\xP@hook{rotate}{xyscale@@}
+\newcommand*\xP@xyscale@@[2]{\setboxz@h{\hskip\L@c
+\hskip-\R@p
+\lower\U@p\hbox{\xP@cm{#1}00{#2}{\raise\U@p\hb@xt@\z@{\hskip-\L@c\hskip\R@p\boxz@\hss}}}}\global\let\xP@lastpattern\@empty
+}
+\xP@hook{rotate}{xyRotate@@}
+\newcommand\xP@xyRotate@@{\xP@rotate@\xP@trigfromdir}
+\xP@hook{rotate}{doSpecialRotate@@}
+\@ifdefinable\xP@doSpecialRotate@@\relax
+\def\xP@doSpecialRotate@@#1@@{\xP@rotate@\xP@trig{#1}}
+\newcommand*\xP@rotate@[2]{\setboxz@h{#1{#2}\hskip\L@c
+\hskip-\R@p
+\lower\U@p\hbox{\xP@cm\cosDirection\sinDirection
+{\if-\sinDirection\else-\sinDirection\fi}\cosDirection
+{\raise\U@p\hb@xt@\z@{\hskip-\L@c\hskip\R@p\boxz@\hss}}}}\global\let\xP@lastpattern\@empty
+}
+\newcommand*\xP@trig[1]{\@tempdima\dimexpr#1pt\relax
+\@tempdimb\@tempdima
+\divide\@tempdimb23592960
+\advance\@tempdima-23592960\@tempdimb
+\ifdim\@tempdima<\z@\advance\@tempdima360pt\fi
+\@tempdimb\@tempdima
+\divide\@tempdimb5898240
+\ifcase\@tempdimb
+\xP@sinpoly
+\edef\sinDirection{\xP@EARPT\@tempdimb}\@tempdima\dimexpr90pt-\@tempdima\relax
+\xP@sinpoly
+\edef\cosDirection{\xP@EARPT\@tempdimb}\or
+\@tempdima\dimexpr180pt-\@tempdima\relax
+\xP@sinpoly
+\edef\sinDirection{\xP@EARPT\@tempdimb}\@tempdima\dimexpr90pt-\@tempdima\relax
+\xP@sinpoly
+\edef\cosDirection{\xP@EARPT\dimexpr-\@tempdimb\relax}\or
+\@tempdima\dimexpr\@tempdima-180pt\relax
+\xP@sinpoly
+\edef\sinDirection{\xP@EARPT\dimexpr-\@tempdimb\relax}\@tempdima\dimexpr90pt-\@tempdima\relax
+\xP@sinpoly
+\edef\cosDirection{\xP@EARPT\dimexpr-\@tempdimb\relax}\or
+\@tempdima\dimexpr360pt-\@tempdima\relax
+\xP@sinpoly
+\edef\sinDirection{\xP@EARPT\dimexpr-\@tempdimb\relax}\@tempdima\dimexpr90pt-\@tempdima\relax
+\xP@sinpoly
+\edef\cosDirection{\xP@EARPT\@tempdimb}\else
+\PackageError{xypdf}{Unexpected case in sin/cos calculation}{Feel free to contact the author of the xypdf package with a minimal example.}\fi
+}
+\newcommand*\xP@sinpoly{{\ifdim\@tempdima<49pt
+\ifdim\@tempdima<27pt
+\@tempdimb\dimexpr((\@tempdima*-529771058/16039085-1384933sp)*\@tempdima/268756075+10714164sp)*\@tempdima/613777813\relax
+\else
+\advance\@tempdima-27pt
+\@tempdimb\dimexpr(((\@tempdima*-743101305/20672414-238989613sp)*\@tempdima/80975565+42661556sp)*\@tempdima/622461739+2\p@)*157520747/693945047\relax
+\fi
+\else
+\ifdim\@tempdima<70pt
+\advance\@tempdima-49pt
+\@tempdimb\dimexpr(((\@tempdima*-348406699/107952940-55079229sp)*\@tempdima/866635628+408805sp)*\@tempdima/26926757+\p@)*135751711/179873976\relax
+\else
+\advance\@tempdima-70pt
+\@tempdimb\dimexpr(((\@tempdima*-1015850353/137849442-460519207sp)*\@tempdima/8742349+142263941sp)*\@tempdima/972432199+23\p@)*31253604/764969669\relax
+\fi
+\fi
+\global\dimen@i\@tempdimb
+}\@tempdimb\dimen@i
+}
+\xyendinput
+
+
+
+
+
+%%
+%% End of file `xypdf-ro.tex'.
diff --git a/macros/generic/diagrams/xypic/texinputs/xypdf.tex b/macros/generic/diagrams/xypic/texinputs/xypdf.tex
new file mode 100644
index 0000000000..176128f515
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xypdf.tex
@@ -0,0 +1,522 @@
+%%
+%% This is file `xypdf.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xypdf.dtx (with options: `basic')
+%%
+%% The xypdf package for TeX and LaTeX
+%% Copyright (c) 2010 by Daniel Müllner (M\"ullner)
+%% <http://math.stanford.edu/~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/>.
+%%
+%% --------------------------------------------------------------------------
+%%
+%% This file is part of the xypdf package for TeX and LaTeX2e. 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 distribution consists of the following files:
+%%
+%% xypdf.dtx - Documented source code
+%% xypdf.ins - Installation script
+%% xypdf.pdf - Documentation (generated from xypdf.dtx)
+%%
+%% The files with the TeX code are generated by the following command:
+%%
+%% latex xypdf.ins
+%%
+%% This generates the files xypdf.tex, xypdf-co.tex, xypdf-cu.tex,
+%% xypdf-fr.tex, xypdf-li.tex and xypdf-ro.tex.
+%%
+%% --------------------------------------------------------------------------
+%%
+%% 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. It is being
+%% integrated and distributed together with Xy-pic, starting with Xy-pic
+%% version 3.8.
+%%
+%% The copyright for the xypdf package is by its author, Daniel Müllner
+%% (Muellner, M\"ullner).
+%%
+\ifx\xyloaded\undefined\input xy \fi
+\xyprovide{pdf}{PDF driver}{1.7}{Daniel M\"ullner\newline}{\url{http://math.stanford.edu/~muellner}}{}
+\ifx\makeatletter\undefined\input miniltx \fi
+\newcommand*\xypdfdate{2011/03/20}
+\newdriver{\xyaddsupport{pdf}\xP@pdf@on
+\xyaddsupport{color}\xP@color@on
+\xyaddsupport{curve}\xP@curve@on
+\xyaddsupport{frame}\xP@frame@on
+\xyaddsupport{rotate}\xP@rotate@on
+}
+\xyaddunsupport{pdf}\xP@pdf@off
+\xyaddunsupport{color}\xP@color@off
+\xyaddunsupport{curve}\xP@curve@off
+\xyaddunsupport{frame}\xP@frame@off
+\xyaddunsupport{rotate}\xP@rotate@off
+\newcommand*\xypdfon{\xP@pdf@on
+\xP@color@on
+\xP@curve@on
+\xP@frame@on
+\xP@line@on
+\xP@rotate@on
+}
+\newcommand*\xypdfoff{\xP@pdf@off
+\xP@color@off
+\xP@curve@off
+\xP@frame@off
+\xP@line@off
+\xP@rotate@off
+}
+\ifx\unexpanded\@undefined
+\PackageError{xypdf}{eTeX is needed for the xypdf package}{}
+\fi
+\newcommand*\xP@testpdfsave{\ifpdf
+\ifx\pdfsave\@undefined
+\PackageError{xypdf}{pdfTeX version 1.40.0 or higher is needed for the xypdf^^Jpackage with PDF output}{}\fi
+\fi
+\let\xP@testpdfsave\@undefined
+}
+\ifx\PackageWarning\@undefined
+\newcommand*\xP@warning[2]{{\newlinechar`\^^J\@warning{Package #1 Warning: #2\@empty.}}}
+\else
+\newcommand*\xP@warning{\PackageWarning}
+\fi
+\newcommand*\xP@pdf@on{}
+\newcommand*\xP@pdf@off{}
+\newcommand*\xP@color@on{}
+\newcommand*\xP@color@off{}
+\newcommand*\xP@curve@on{}
+\newcommand*\xP@curve@off{}
+\newcommand*\xP@frame@on{}
+\newcommand*\xP@frame@off{}
+\newcommand*\xP@line@on{}
+\newcommand*\xP@line@off{}
+\newcommand*\xP@rotate@on{}
+\newcommand*\xP@rotate@off{}
+\newcommand*\xP@hook[2]{\edef\next@{\let\expandafter\noexpand\csname xP@old@#2\endcsname
+\expandafter\noexpand\csname#2\endcsname}\next@
+\expandafter\edef\csname xP@#1@on\endcsname{\unexpanded\expandafter\expandafter\expandafter{\csname xP@#1@on\endcsname}\let\expandafter\noexpand\csname#2\endcsname
+\expandafter\noexpand\csname xP@#2\endcsname
+}\expandafter\edef\csname xP@#1@off\endcsname{\unexpanded\expandafter\expandafter\expandafter{\csname xP@#1@off\endcsname}\let\expandafter\noexpand\csname#2\endcsname
+\expandafter\noexpand\csname xP@old@#2\endcsname
+}}
+\newcommand*\xP@defpdfliteral{\ifpdf
+\newcommand*\xP@literal[1]{\pdfsave\pdfliteral{##1}\pdfrestore}
+\newcommand*\xP@cm[5]{\pdfsave
+\pdfsetmatrix{##1 ##2 ##3 ##4}##5\pdfrestore
+}
+\@ifundefined{@pdfcolorstack}{\def\@pdfcolorstack{\z@}}{}\newcommand*\xP@setcolor[3]{\pdfcolorstack\@pdfcolorstack push{##1 ##2 ##1 ##3}}
+\newcommand*\xP@resetcolor{\pdfcolorstack\@pdfcolorstack pop\relax}\else
+\newcommand*\xP@literal{\xP@warning{xypdf}{The produced DVI file is NOT PORTABLE. Convert it with^^Jdvipdfm(x) to the PDF format but do not expect the DVI file itself to be^^Jdisplayed correctly\@gobble}\global\let\xP@literal\xP@literal@
+\xP@literal
+}
+\newcommand*\xP@literal@[1]{\special{pdf:content ##1}}
+\newcommand*\xP@cm[5]{\special{pdf:btrans matrix ##1 ##2 ##3 ##4 0 0}##5\special{pdf:etrans}}
+\newcommand*\xP@setcolor[3]{\special{pdf:bcolor[##1]}}
+\newcommand*\xP@resetcolor{\special{pdf:ecolor}}\fi
+\let\xP@defpdfliteral\@undefined
+}
+\DN@{\@firstofone}
+\DNii@{xy}
+\ifx\@currname\nextii@
+\ifx\AtEndOfPackage\@undefined
+\else
+\DN@{\AtEndOfPackage}\fi
+\fi
+\next@
+{\RequirePackage{ifpdf}\xP@testpdfsave
+\xP@defpdfliteral}
+\ifx\pdfdecimaldigits\@undefined
+\newcommand*\xP@digits{2}
+\else
+\@ifdefinable\xP@digits\relax
+\xdef\xP@digits{\the\pdfdecimaldigits}
+\ifnum\pdfdecimaldigits<2
+\xP@warning{xypdf}{The precision in \string\pdfdecimaldigits\space is only \xP@digits\space
+decimals.^^JIt is recommended to set \string\pdfdecimaldigits\space to 2 or 3 for best output quality\@gobble}
+\fi
+\fi
+\newcommand*\xP@dim[1]{\expandafter\xP@removePT\the\dimexpr(#1)*800/803\relax\space}
+\newcommand*\xP@precdim[1]{\xP@EARPT\dimexpr(#1)*800/803\relax\space}
+\newcommand*\xP@EARPT{\expandafter\removePT@\the}
+\newcommand*\xP@coor[1]{\xP@dim{#1}\xP@dim}
+\@ifdefinable\xP@removePT\relax
+{\@makeother\p\@makeother\t\gdef\xP@removePT#1pt{\xP@removePT@#10000@}}
+\@ifdefinable\xP@removePT@\relax
+\ifcase\xP@digits
+\def\xP@removePT@#1.#2#3@{\ifnum#2<5
+#1\else
+\the\numexpr-\if-#1-\else-#1+\fi\@ne\relax
+\fi
+}
+\or
+\def\xP@removePT@#1#2.#3#4#5@{\ifnum#4<5
+#1#2\if#30\else
+.#3\fi
+\else
+\expandafter\xP@removePT
+\the\dimexpr#1#2.#3pt+\if#1--\fi.12pt\relax
+\fi
+}
+\or
+\def\xP@removePT@#1#2.#3#4#5#6@{\ifnum#5<5
+#1#2\if#40\if#30\else
+.#3\fi
+\else
+.#3#4\fi
+\else
+\expandafter\xP@removePT
+\the\dimexpr#1#2.#3#4pt+\if#1--\fi786sp\relax
+\fi
+}
+\or
+\def\xP@removePT@#1#2.#3#4#5#6#7@{\ifnum#6<5
+#1#2\if#50\if#40\if#30\else
+.#3\fi
+\else
+.#3#4\fi
+\else
+.#3#4#5\fi
+\else
+\expandafter\xP@removePT
+\the\dimexpr#1#2.#3#4#5pt+\if#1--\fi79sp\relax
+\fi
+}
+\or
+\def\xP@removePT@#1#2.#3#4#5#6#7#8@{\ifnum#7<5
+#1#2\if#60\if#50\if#40\if#30\else
+.#3\fi
+\else
+.#3#4\fi
+\else
+.#3#4#5\fi
+\else
+.#3#4#5#6\fi
+\else
+\expandafter\xP@removePT
+\the\dimexpr#1#2.#3#4#5#6pt+\if#1--\fi8sp\relax
+\fi
+}
+\else
+\let\xP@dim\xP@precdim
+\fi
+\AtBeginDocument{{\setboxz@h{$ $}}\@ifdefinable\xP@lw\relax
+\@ifdefinable\xP@preclw\relax
+\edef\xP@preclw{\the\fontdimen8\textfont3}\edef\xP@lw{\xP@dim\xP@preclw}\PackageInfo{xypdf}{Line width: \xP@preclw}}
+\xP@hook{pdf}{line@}
+\newcommand*\xP@line@{\setboxz@h{\xP@setsolidpat
+\xP@stroke{0 0 m \xP@coor{\cosDirection\xydashl@}{\sinDirection\xydashl@}l}}\U@c\sinDirection\xydashl@
+\D@c\z@
+\ifdim\U@c<\z@
+\multiply\U@c\m@ne
+\xP@swapdim\U@c\D@c
+\fi
+\ht\z@\U@c
+\dp\z@\D@c
+\R@c\cosDirection\xydashl@
+\L@c\z@
+\ifdim\R@c<\z@
+\multiply\R@c\m@ne
+\xP@swapdim\L@c\R@c
+\fi
+\hskip\L@c\boxz@\hskip\R@c
+\edef\tmp@{\egroup\U@c\the\U@c\D@c\the\D@c\L@c\the\L@c\R@c\the\R@c}\tmp@
+\Edge@c={\rectangleEdge}\edef\Upness@{\ifdim\z@<\U@c1\else0\fi}\edef\Leftness@{\ifdim\z@<\L@c1\else0\fi}\def\Drop@@{\styledboxz@}\def\Connect@@{\solid@}}
+\xP@hook{pdf}{solid@}
+\newcommand*\xP@solid@{\straight@\xP@solidSpread}
+\@ifdefinable\xP@solidSpread\relax
+\def\xP@solidSpread#1\repeat@{{\@tempswatrue
+\ifdim\X@p=\X@c
+\ifdim\Y@p=\Y@c
+\@tempswafalse
+\fi
+\fi
+\if@tempswa
+\xP@setsolidpat
+\xP@stroke{\xP@coor\X@p\Y@p m \xP@coor\X@c\Y@c l}\fi
+}}
+\newcommand*\xP@pattern{}
+\newcommand*\xP@setsolidpat{\def\xP@pattern{1 J 1 j []0 d}\global\let\xP@lastpattern\xP@solidmacro
+}
+\newcommand*\xP@stroke[1]{\xP@literal{\xP@lw w \xP@pattern\space#1 S}}
+\xP@hook{pdf}{dash@}
+\newcommand\xP@dash@{\line@\def\Connect@@{\straight@\xP@dashedSpread}}
+\@ifdefinable\xP@dashedSpread\relax
+\def\xP@dashedSpread#1\repeat@{{\xP@veclen
+\ifdim\@tempdimb>\z@
+\xP@setdashpat
+\xP@savec
+\xP@stroke{\xP@coor\X@p\Y@p m \xP@coor\X@c\Y@c l}\fi
+}}
+\newcommand*\xP@setdashpat{\xP@testcont\xP@dashmacro
+\ifxP@splinecont
+{\count@\numexpr2*((\@tempdimb-\xydashl@/3)/(2*\xydashl@))\relax
+\global\dimen@i
+\ifnum\count@>\z@
+\dimexpr\@tempdimb/\count@\relax
+\else
+\z@
+\fi
+}\@tempdima\dimen@i
+\edef\xP@pattern{1 J 1 j [\ifdim\@tempdima>\z@
+\xP@precdim\@tempdima]\xP@precdim\@tempdima
+\else
+]0 \fi
+d}\else
+\@tempdima
+\ifdim\@tempdimb>\xydashl@
+\dimexpr\@tempdimb/(2*((\@tempdimb+\xydashl@)/(2*\xydashl@))-1)\relax
+\else
+\z@
+\fi
+\edef\xP@pattern{1 J 1 j [\ifdim\@tempdima>\z@\xP@precdim\@tempdima\fi
+]0 d}\fi
+\global\let\xP@lastpattern\xP@dashmacro
+}
+\newcommand*\xP@setcldashpat{{\count@\numexpr2*((\@tempdimb-\xydashl@/3)/(2*\xydashl@))\relax
+\xdef\@gtempa{1 J 1 j [\ifnum\count@>\z@\xP@precdim{\@tempdimb/\count@}\fi]\ifnum\count@>\z@\xP@precdim{\@tempdimb*3/2/\count@}\else0 \fi d}}\edef\xP@pattern{\@gtempa}}
+\xP@hook{pdf}{point@}
+\newcommand*\xP@point@{\xP@zerodot\egroup\Invisible@false
+\Hidden@false\def\Leftness@{.5}\def\U@pness@{.5}\ctipEdge@
+\def\Drop@@{\styledboxz@}\def\Connect@@{\straight@\xP@dottedSpread}}
+\newcommand*\xP@zerodot{\hb@xt@\z@{\hss
+\vbox to\z@{\vss\hrule\@width\xP@preclw\@height\xP@preclw\vss}\hss}}
+\@ifdefinable\xP@dottedSpread\relax
+\def\xP@dottedSpread#1\repeat@{{\xP@veclen
+\ifdim\@tempdimb>\z@
+\xP@setdottedpat
+\xP@savec
+\xP@stroke{\xP@coor\X@p\Y@p m \xP@coor\X@c\Y@c l}\fi
+}}
+\newcommand*\xP@setdottedpat{\xP@testcont\xP@dotmacro
+\ifxP@splinecont
+\@tempdima\dimexpr\@tempdimb/(\@tempdimb/131072+1)-\xP@preclw\relax
+\edef\xP@pattern{0 J [\ifdim\@tempdima>\z@
+\xP@precdim\xP@preclw\xP@precdim\@tempdima
+\fi
+]\xP@precdim{\xP@preclw+1sp}d}\else
+\advance\@tempdimb-\xP@preclw
+\ifdim\@tempdimb<\z@\@tempdimb\z@\fi
+\@tempdima\dimexpr\@tempdimb/(\@tempdimb/131072+1)-\xP@preclw\relax
+\edef\xP@pattern{0 J [\ifdim\@tempdima>\z@
+\xP@precdim\xP@preclw\xP@precdim\@tempdima
+\fi
+]0 d}\fi
+\global\let\xP@lastpattern\xP@dotmacro
+}
+\newcommand*\xP@setcldottedpat{\@tempdima\dimexpr\@tempdimb/(\@tempdimb/131072+1)-\xP@preclw\relax
+\edef\xP@pattern{0 J [\ifdim\@tempdima>\z@
+\xP@precdim\xP@preclw\xP@precdim\@tempdima
+\fi
+]\xP@precdim{\dimexpr\xP@preclw+\@tempdima/2\relax}d}}
+\newcommand*\xP@abs[1]{\ifdim#1<\z@\multiply#1\m@ne\fi}
+\newcommand*\xP@ifabsless[2]{\ifpdfabsdim#1<#2}
+\ifx\ifpdfabsdim\@undefined
+\renewcommand*\xP@ifabsless[2]{\ifdim\ifdim#1<\z@-\fi#1<\ifdim#2<\z@-\fi#2}
+\@gobble\fi
+\fi
+\newcommand*\xP@swapdim[2]{\@tempdima#1#1#2#2\@tempdima}
+\newcommand*\xP@swapnum[2]{\@tempcnta#1#1#2#2\@tempcnta}
+\newcommand*\xP@min[2]{\ifdim#1<#2#1\else#2\fi}
+\newcommand*\xP@max[2]{\ifdim#1>#2#1\else#2\fi}
+\newcommand*\xP@Max[2]{#1\ifdim#2<\z@\xP@max#1{-#2}\else\xP@max#1#2\fi}
+\newcommand*\xP@sqrt{\loop
+\@tempdimb\dimexpr(\@tempdimc+(\@tempdima*\p@/\@tempdimc))/2\relax
+\unless\ifdim\@tempdimc=\@tempdimb
+\@tempdimc\@tempdimb\relax
+\repeat
+}
+\newcommand*\xP@veclen{{\xP@veclen@
+\global\dimen@i\@tempdimb
+}\@tempdimb\dimen@i
+}
+\newcommand*\xP@veclen@{\xP@abs\d@Y
+\ifdim\d@X=\z@
+\@tempdimb\d@Y
+\else
+\xP@abs\d@X
+\ifdim\d@Y=\z@
+\@tempdimb\d@X
+\else
+\@tempswatrue
+\ifdim\d@X>5931641sp\relax\@tempswafalse\fi
+\ifdim\d@Y>5931641sp\relax\@tempswafalse\fi
+\if@tempswa
+\count@\@ne
+\loop
+\@tempdima\dimexpr\d@X*\d@X/\p@+\d@Y*\d@Y/\p@\relax
+\ifdim\@tempdima<4096pt
+\@tempcnta\ifdim\@tempdima<1024pt\ifdim\@tempdima<256pt8\else4\fi\else\tw@\fi
+\multiply\d@X\@tempcnta
+\multiply\d@Y\@tempcnta
+\multiply\count@\@tempcnta
+\repeat
+\@tempdimc\dimexpr(\d@X+\d@Y)*3/4\relax
+\xP@sqrt
+\@tempdimb\dimexpr\@tempdimb/\count@\relax
+\else
+\ifdim\d@X>83042982sp\relax\@tempswatrue\fi
+\ifdim\d@Y>83042982sp\relax\@tempswatrue\fi
+\if@tempswa
+\@tempdima\dimexpr\d@X/182*\d@X/11927552+\d@Y/182*\d@Y/11927552\relax
+\@tempdimc\dimexpr(\d@X+\d@Y)*3/728\relax
+\xP@sqrt
+\multiply\@tempdimb182\relax
+\else
+\@tempdima\dimexpr\d@X*\d@X/12845056+\d@Y*\d@Y/12845056\relax
+\@tempdimc\dimexpr(\d@X+\d@Y)*3/56\relax
+\xP@sqrt
+\multiply\@tempdimb14\relax
+\fi
+\fi
+\fi
+\fi
+}
+\xP@hook{pdf}{squiggledSpread@}
+\@ifdefinable\xP@squiggledSpread@\relax
+\def\xP@squiggledSpread@#1\repeat@{{\xP@veclen
+\ifdim\@tempdimb>\z@
+\edef\@tempa{\xP@coor\X@p\Y@p m }\toks@\expandafter{\@tempa}\@tempcnta\numexpr\@tempdimb/\xybsqll@\relax
+\ifnum\@tempcnta<\tw@\@tempcnta\tw@\fi
+\@tempdima\dimexpr\d@X/\@tempcnta\relax
+\@tempdimc\dimexpr\d@Y/\@tempcnta\relax
+\xP@testcont\xP@oddsquigglemacro
+\ifxP@splinecont
+\def\xP@squigsign{-}\else
+\let\xP@squigsign\@empty
+\fi
+\count@\z@
+\loop
+\xP@append\toks@{\xP@coor{\X@p+\d@X*\count@/\@tempcnta+(\@tempdima
+-\xP@squigsign\ifodd\count@-\fi\@tempdimc)*147546029/534618434}{\Y@p+\d@Y*\count@/\@tempcnta+(\@tempdimc
++\xP@squigsign\ifodd\count@-\fi\@tempdima)*147546029/534618434}}\advance\count@\@ne
+\xP@append\toks@{\xP@coor{\X@p+\d@X*\count@/\@tempcnta-(\@tempdima
+-\xP@squigsign\ifodd\count@-\fi\@tempdimc)*147546029/534618434}{\Y@p+\d@Y*\count@/\@tempcnta-(\@tempdimc
++\xP@squigsign\ifodd\count@-\fi\@tempdima)*147546029/534618434}\xP@coor{\X@p+\d@X*\count@/\@tempcnta}{\Y@p+\d@Y*\count@/\@tempcnta}c }\ifnum\count@<\@tempcnta
+\repeat
+\xP@setsolidpat
+\global\expandafter\let\expandafter\xP@lastpattern
+\ifodd\numexpr\count@\if\xP@squigsign-+1\fi\relax
+\xP@oddsquigglemacro
+\else
+\xP@evensquigglemacro
+\fi
+\xP@savec
+\xP@stroke{\the\toks@}\fi
+}}
+\newcommand*\xP@squigsign{}
+\newcommand*\xP@append[2]{{\edef\@tempa{#1{\the#1#2}}\expandafter}\@tempa
+}
+\xP@hook{pdf}{circhar@@}
+\newcommand*\xP@circhar@@[1]{\expandafter\xP@circhar@@@\ifcase#1 000{-173517671/654249180}{65307479/619869377}{-34221476/65864945}{225058681/768398401}{-543339720/768398401}\or
+0{-543339720/768398401}{181455824/967576667}{-554561898/619869377}{826676217/1870772527}{-1}{543339720/768398401}{-1}\or
+0{-1}{173517671/654249180}{-1}{34221476/65864945}{-554561898/619869377}{543339720/768398401}{-543339720/768398401}\or
+0{-543339720/768398401}{181455824/967576667}{-34221476/65864945}{225058681/768398401}{-173517671/654249180}{225058681/768398401}0\or
+0{543339720/768398401}{181455824/967576667}{34221476/65864945}{225058681/768398401}{173517671/654249180}{225058681/768398401}0\or
+01{173517671/654249180}1{34221476/65864945}{554561898/619869377}{543339720/768398401}{543339720/768398401}\or
+0{543339720/768398401}{181455824/967576667}{554561898/619869377}{826676217/1870772527}1{543339720/768398401}1\or
+000{173517671/654249180}{65307479/619869377}{34221476/65864945}{225058681/768398401}{543339720/768398401}\fi}
+\newcommand\xP@circhar@@@[8]{\xP@setsolidpat
+\xP@stroke{\xP@coor{\R@*#1}{\R@*#2}m
+\xP@coor{\R@*#3}{\R@*#4}\xP@coor{\R@*#5}{\R@*#6}\xP@coor{\R@*#7}{\R@*#8}c}\vrule width\z@ height\R@ depth\R@
+\kern\dimexpr\R@*#7\relax
+}
+\xP@hook{pdf}{cirrestrict@@}
+\newcommand*\xP@cirrestrict@@{\count@\z@\relax}
+\newcommand*\xP@trigfromdir[1]{{\Direction#1\relax
+\count@-\Direction
+\advance\count@4096
+\divide\count@2048
+\ifcase\count@
+\d@X\K@\p@
+\d@Y\numexpr\Direction-3*\K@\relax\p@
+\or
+\d@X\numexpr\Direction-\K@\relax\p@
+\d@Y-\K@\p@
+\or
+\d@X-\K@\p@
+\d@Y\numexpr-\Direction-\K@\relax\p@
+\or
+\d@X\numexpr-\Direction-3*\K@\relax\p@
+\d@Y\K@\p@
+\else
+\PackageError{xypdf}{Unexpected case in direction calculation}{Feel free to contact the author of the xypdf package with a minimal example.}\fi
+\xP@veclen
+\xdef\@gtempa{\def\noexpand\cosDirection{\xP@EARPT\dimexpr\d@X*\p@/\@tempdimb\relax}\def\noexpand\sinDirection{\xP@EARPT\dimexpr\d@Y*\p@/\@tempdimb\relax}}}\@gtempa
+}
+\outer\def\@tempa{\alloc@1\dimen\dimendef\insc@unt}
+\let\xP@newdimen\newdimen
+\ifx\newdimen\@tempa
+\def\xP@newdimen{\alloc@1\dimen\dimendef\insc@unt}
+\fi
+\outer\def\@tempa#1{\count@=\escapechar\escapechar=-1
+\expandafter\expandafter\expandafter
+\def\@if#1{true}{\let#1=\iftrue}\expandafter\expandafter\expandafter
+\def\@if#1{false}{\let#1=\iffalse}\@if#1{false}\escapechar=\count@}
+\let\@tempa\relax
+\newcommand*\xP@lastX{}
+\newcommand*\xP@lastY{}
+\newcommand*\xP@lastpattern{}
+\newcommand*\xP@solidmacro{solid}
+\newcommand*\xP@dotmacro{dot}
+\newcommand*\xP@dashmacro{dash}
+\newcommand*\xP@evensquigglemacro{evensquiggle}
+\newcommand*\xP@oddsquigglemacro{oddsquiggle}
+\newcommand*\xP@brokensquigglemacro{brokensquiggle}
+\renewcommand*\xyinside@{\global\let\xP@lastpattern\@empty
+\saveXyStyle@ \aftergroup\xycheck@end
+\setboxz@h\bgroup
+\plainxy@
+\X@c=\z@\Y@c=\z@\czeroEdge@
+\X@p=\z@\Y@p=\z@\U@p=\z@\D@p=\z@\L@p=\z@\R@p=\z@\Edge@p={\zeroEdge}\X@min=\hsize\X@max=-\hsize\Y@min=\hsize\Y@max=-\hsize
+\mathsurround=\z@
+\expandafter\POS\everyxy@@
+}
+\newcommand*\xP@savec{\xdef\xP@lastX{\the\X@c}\xdef\xP@lastY{\the\Y@c}}
+\@ifdefinable\ifxP@splinecont\relax
+\@ifdefinable\xP@splineconttrue\relax
+\@ifdefinable\xP@splinecontfalse\relax
+\newif\ifxP@splinecont
+\newcommand*\xP@testcont[1]{\xP@splinecontfalse
+\ifxP@cont
+\ifx\xP@lastpattern#1\ifdim\xP@lastX=\X@p
+\ifdim\xP@lastY=\Y@p
+\xP@splineconttrue
+\fi
+\fi
+\fi
+\fi
+}
+\@ifdefinable\ifxP@cont\relax
+\@ifdefinable\xP@conttrue\relax
+\@ifdefinable\xP@contfalse\relax
+\newif\ifxP@cont
+\newcommand*\xypdfcontpatternon{\xP@conttrue}
+\newcommand*\xypdfcontpatternoff{\xP@contfalse}
+\xP@conttrue
+\let\@tempa\@undefined
+\let\nextii@\@undefined
+\DN@{\xywithoption{color}{\message{Xy-pic pdf driver: `color' extension support}\@ifundefined{xypdf-co@loaded}{\input xypdf-co\relax}{\message{not reloaded}}}\xywithoption{curve}{\message{Xy-pic pdf driver: `curve' extension support}\@ifundefined{xypdf-cu@loaded}{\input xypdf-cu\relax}{\message{not reloaded}}}\xywithoption{frame}{\message{Xy-pic pdf driver: `frame' extension support}\@ifundefined{xypdf-fr@loaded}{\input xypdf-fr\relax}{\message{not reloaded}}}\xywithoption{line}{\message{Xy-pic pdf driver: `line' extension support}\@ifundefined{xypdf-li@loaded}{\input xypdf-li\relax}{\message{not reloaded}}}\xywithoption{rotate}{\message{Xy-pic pdf driver: `rotate' extension support}\@ifundefined{xypdf-ro@loaded}{\input xypdf-ro\relax}{\message{not reloaded}}}}
+\next@
+\xyendinput
+%%
+%% End of file `xypdf.tex'.
diff --git a/macros/generic/diagrams/xypic/texinputs/xypic.sty b/macros/generic/diagrams/xypic/texinputs/xypic.sty
new file mode 100644
index 0000000000..befdb653b4
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xypic.sty
@@ -0,0 +1,32 @@
+%% $Id: xypic.sty,v 3.4 2010/04/16 06:06:52 krisrose Exp $ -*-tex-*-
+%%
+%% LaTeX style option to load Xy-pic in version 2 compatibility mode.
+%% by Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% This file is in the public domain. It 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.
+%%
+\input{xy.sty}
+\xyoption{v2}
+\catcode`\@=\xystycatcode
+\endinput
+
+% $Log: xypic.sty,v $
+% Revision 3.4 2010/04/16 06:06:52 krisrose
+% Preparing for a new release...
+%
+% Revision 3.3 1996/12/19 03:31:56 krisrose
+% Maintenance release
+%
+% Revision 3.0 1995/07/07 20:14:21 kris
+% Major release w/new User's Guide!
+%
+% Revision 2.13 1995/07/04 15:11:17 kris
+% Ready to release v3?
+%
+% Revision 2.8 1994/04/08 04:30:00 kris
+% Second (bug fix) 3alpha release.
+%
+% Revision 2.7 1994/03/08 02:06:01 kris
+% Release 3alpha.
diff --git a/macros/generic/diagrams/xypic/texinputs/xypic.tex b/macros/generic/diagrams/xypic/texinputs/xypic.tex
new file mode 100644
index 0000000000..db0839b363
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xypic.tex
@@ -0,0 +1,24 @@
+%% xypic.tex from $Id: xypic.doc,v 3.6 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic v2 compatibility loading.
+%% Copyright (c) 1993-1996 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\input xyv2
+\endinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xypicture.tex b/macros/generic/diagrams/xypic/texinputs/xypicture.tex
new file mode 100644
index 0000000000..d1d44c3f2d
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xypicture.tex
@@ -0,0 +1,55 @@
+%% xypicture.tex from $Id: xypicture.doc,v 3.6 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``LaTeX Picture Mode'' option.
+%% Copyright (c) 199802011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-1998 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{picture}{LaTeX Picture extension}{\stripRCS$Revision: 3.6 $}%
+ {Kristoffer H.~Rose}{krisrose@tug.org}%
+ {IBM T.J.Watson Research Center, P.O.Box 704, Yorktown Heights, NY 10598, USA}
+\xynew@{dimen}\xyp@xsize
+\xynew@{dimen}\xyp@ysize
+\xylet@\xyp@arrow=\relax
+{\xyuncatcodes\makeatletter
+ \gdef\xyp@tail{}
+ \gdef\xyp@mid{-}
+ \gdef\xyp@head{>}
+}
+\xydef@\xyvector(#1,#2)#3{%
+ \xyp@xsize#3\relax
+ \ifnum#1<\z@\multiply\xyp@xsize\m@ne\fi
+ \xyp@ysize\xyp@xsize\relax
+ \ifnum#1=\z@
+ \xyp@xsize\z@
+ \ifnum#2<\z@\multiply\xyp@ysize\m@ne\fi
+ \else
+ \multiply\xyp@ysize#2\relax\divide\xyp@ysize#1\relax
+ \fi
+ \edef\xyp@arrow{\noexpand\arAT{\xyp@tail\xyp@mid\xyp@head}}%
+ \ifnum#1<\z@
+ \makebox(\xyp@xsize,\xyp@ysize){%
+ \begin{xy} 0;<\unitlength,\z@>:%
+ \xyp@arrow(\xyp@xsize,\xyp@ysize)
+ \end{xy}}%
+ \else
+ \xyp@arrow(\xyp@xsize,\xyp@ysize)\relax
+ \fi
+}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xypoly.tex b/macros/generic/diagrams/xypic/texinputs/xypoly.tex
new file mode 100644
index 0000000000..48c01fe501
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xypoly.tex
@@ -0,0 +1,609 @@
+%% xypoly.tex from $Id: xypoly.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Polygon'' feature.
+%% Copyright (c) 1994-1997 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this macro package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{poly}{Polygon feature}{\stripRCS$Revision: 3.11 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xyrequire{arrow}\xycatcodes
+\message{polygons,}
+\xynew@{count}\xypolynode@\xypolynode@=\m@ne
+\xydef@\xypolynode{\the\xypolynode@}
+\xydef@\xypolyNUMSIDES@{}
+\xydef@\xypolynum{\xypolyNUMSIDES@}
+\xydef@\xypolygon{\xypoly@}%
+\xydef@\xypoly@{%
+ \if\inxy@
+ \if\inxypoly@
+ \edef\next@{\noexpand\xy@@{\noexpand\nter@{\xypolynode@=\the\xypolynode@
+ \noexpand\def\noexpand\xypolyNUMSIDES@{\xypolyNUMSIDES@}}}}%
+ \else
+ \DN@{\xy@@{\def\inxypoly@{TT}%
+ \nter@{\def\inxypoly@{TF}\xypolynode@=\m@ne}}}%
+ \fi
+ \else
+ \if\inxypoly@
+ \edef\next@{\noexpand\xy
+ \noexpand\xy@@{\noexpand\nter@{\xypolyside=\the\xypolyside
+ \noexpand\def\noexpand\xypolyNUMSIDES@{\xypolyNUMSIDES@}\endxy}}}%
+ \else
+ \DN@{\xy \xy@@{\def\inxypoly@{TT}%
+ \nter@{\def\inxypoly@{TF}\xypolynode@=\m@ne \endxy}}}%
+ \fi
+ \fi
+ \next@ \count@=\z@ \xyFN@\xypoly@n}
+\xydef@\inxypoly@{TF}%
+\xydef@\xypoly@x{\xy@@{\leave@\leave@}}
+\xydef@\xypoly@n{%
+ \DN@##1{\multiply\count@10\relax \advance\count@##1\relax \xyFN@\xypoly@n}%
+ \ifx \space@\next
+ \ifnum\count@>\z@ \expandafter\DN@\space@{\xyFN@\xypoly@i}%
+ \else \expandafter\DN@\space@{\xyFN@\xypoly@n}\fi
+ \else\ifx 0\next \else\ifx 1\next \else\ifx 2\next \else\ifx 3\next
+ \else\ifx 4\next \else\ifx 5\next \else\ifx 6\next \else\ifx 7\next
+ \else\ifx 8\next \else\ifx 9\next
+ \else \let\next@=\xypoly@i \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@}
+\xydef@\xypoly@i{\edef\xypolyNUMSIDES@{\the\count@}\xyFN@\xygetpolyprefix@}
+\xydef@\xypolyPREFIX@{}%
+\xydef@\xypolyPREFIX@@{}%
+\xydef@\xypolyname{\xypolyPREFIX@}%
+\xydef@\xygetpolyprefix@{%
+ \ifx\next"\DN@"##1"{\def\xypolyPREFIX@@{##1}\expandafter
+ \edef\csname\xypolyPREFIX@@ NUMSIDES\endcsname{\xypolyNUMSIDES@}%
+ \xypolyprefix@@ }%
+ \else
+ \ifnum\xypolynode@<\z@\def\xypolyPREFIX@@{}%
+ \else
+ \edef\xypolyPREFIX@@{\xypolyPREFIX@\the\xypolynode@,}%
+ \fi \DN@{\xypolyprefix@@}%
+ \fi \next@ }
+\xydef@\xypolyprefix@@{%
+ \expandafter\toks@\expandafter{\addEQ@\POS"}%
+ \expandafter\addtotoks@\expandafter{\xypolyPREFIX@@0"\relax}%
+ \the\toks@
+ \ifnum\xypolynode@<\z@
+ \expandafter\def\expandafter\xypolyPREFIX@\expandafter{\xypolyPREFIX@@}%
+ \xy@@{\enter@{\xypolynode@=\the\xypolynode@
+ \noexpand\def\noexpand\xypolyPREFIX@{\xypolyPREFIX@}}\xypolynode@=\z@ }%
+ \else
+ \xy@@{\enter@{\xypolynode@=\the\xypolynode@
+ \noexpand\def\noexpand\xypolyPREFIX@{\xypolyPREFIX@}}\xypolynode@=\z@ }%
+ \expandafter\def\expandafter\xypolyPREFIX@\expandafter{\xypolyPREFIX@@}%
+ \fi
+ \xypoly@@i }
+\xydef@\xypoly@@i#1#{\begingroup
+ \DN@{#1}\ifx\next@\empty\else
+ \xywarning@{discarding unused tokens: #1}\fi \xypoly@@ }
+\xydef@\xypoly@@#1{\xypolydefaults@
+ \DN@{#1}\ifx\next@\empty\DN@{\xypoly@@@}%
+ \else \DN@{\xyFN@\xypolyparams@#1~!}\fi \next@}
+\xydef@\xypolydefaults@{\def\xypolySCALE@{}%
+ \def\xypolySPOKES@{{}}\def\xypostSPOKES@{}\let\xypreSPOKES@\relax
+ \def\xypolySIDES@{{-}}\def\xypostSIDES@{}\let\xypreSIDES@\relax
+ \def\xypolyVERTEX@{}\def\xypolyALIGN@{}}
+{\xyuncatcodes \gdef\next{*=0}}
+\xylet@\xypolynullvertex@=\next
+{\xyuncatcodes \gdef\next{*[o]}}
+\xylet@\xypolyvertex@=\next
+{\xyuncatcodes \gdef\next{*+[o]}}
+\xylet@\xypolywidevertex@=\next
+\xydef@\xypolyparams@{%
+ \ifx\space@\next \expandafter\DN@\space{\xyFN@\xypolyparams@}%
+ \else\ifx\next~\DN@~{\xyFN@\xypolywhich@}%
+ \else\ifx\next\bgroup\DN@##1~!{%
+ \ifx\empty\xypolyVERTEX@\expandafter
+ \def\expandafter\xypolyVERTEX@\expandafter{\xypolyvertex@{##1}}%
+ \else\xypolyVERTEXerror@{##1}\fi \xypoly@@@}%
+ \else\DN@##1~!{\DN@{##1}\ifx\next@\empty\else
+ \ifx\empty\xypolyVERTEX@\def\xypolyVERTEX@{*##1}%
+ \expandafter\checkpolytok@\expandafter\xypolyVERTEX@
+ \expandafter{\xypolynullvertex@}##1@@!\relax
+ \else\xypolyVERTEXerror@{##1}\fi\fi \xypoly@@@}%
+ \fi\fi\fi \next@ }
+\xydef@\xypolyVERTEXerror@#1{\xywarning@{%
+ vertex already specified, discarding unused tokens:#1}}
+\xydef@\xypolywhich@{%
+ \ifx\next!\DN@!{\xypoly@@@}%
+ \else \addLT@\ifx\next \addLT@\DN@{\xyFN@\xypoly@SPOKES@}%
+ \else \addGT@\ifx\next \addGT@\DN@{\xyFN@\xypoly@SIDES@}%
+ \else \addEQ@\ifx\next \addEQ@\DN@##1{%
+ \def\xypolyALIGN@{##1}\xyFN@\xypolyparams@ }%
+ \else \ifx :\next \DN@:##1{%
+ \def\xypolySCALE@{##1}\xyFN@\xypolyparams@ }%
+ \else\ifx\next*\DN@*##1{\expandafter
+ \def\expandafter\xypolyVERTEX@\expandafter{\xypolywidevertex@{##1}}%
+ \xyFN@\xypolyparams@}%
+ \fi\fi\fi\fi\fi\fi \next@ }
+\xydef@\xypoly@SPOKES@{%
+ \addLT@\ifx\next \addLT@\DN@##1{%
+ \def\xypreSPOKES@{##1}\def\xypolySPOKES@{}\xyFN@\xypolyparams@ }%
+ \else \addGT@\ifx\next \addGT@\DN@##1{%
+ \def\xypostSPOKES@{##1}\xyFN@\xypolyparams@ }%
+ \else \ifx\next\bgroup \DN@##1{%
+ \def\xypolySPOKES@{##1}\let\xypreSPOKES@\relax
+ \checkpolytok@\xypolySPOKES@{}##1@@!{\xyFN@\xypolyparams@}}%
+ \else \DN@##1{%
+ \let\xypreSPOKES@\relax \def\xypolySPOKES@{{##1}}\xyFN@\xypolyparams@}%
+ \fi\fi\fi \next@ }
+\xydef@\xypoly@SIDES@{%
+ \addLT@\ifx\next \addLT@\DN@##1{%
+ \def\xypreSIDES@{##1}\def\xypolySIDES@{}\xyFN@\xypolyparams@ }%
+ \else \addGT@\ifx\next \addGT@\DN@ ##1{%
+ \def\xypostSIDES@{##1}\xyFN@\xypolyparams@ }%
+ \else \ifx\next\bgroup \DN@##1{%
+ \def\xypolySIDES@{##1}\let\xypreSIDES@\relax
+ \checkpolytok@\xypolySIDES@{}##1@@!{\xyFN@\xypolyparams@}}%
+ \else \DN@##1{%
+ \let\xypreSIDES@\relax \def\xypolySIDES@{{##1}}\xyFN@\xypolyparams@}%
+ \fi\fi\fi \next@ }
+\xydef@\checkpolytok@#1#2#3#4@!#5{\DNii@{#1}\DN@{#4}%
+ \ifx\next@\empty\expandafter\def\nextii@{{}}%
+ \else\ifx#4@\expandafter\def\nextii@{#2{#3}}\fi\fi #5}
+\xydef@\xytrigerror@#1#2{\string#1 only works from 0 to 12}
+\xydef@\cosPIon#1{\ifcase#1 1\or-1\or0\or.5\or\halfroottwo\or
+ .809017\or\halfrootthree\or.900969\or.92388\or.939693\or.951057\or
+ .959493\or.965926\else1\xytrigerror@\cosPIon{#1}\fi}
+\xydef@\sinPIon#1{\ifcase#1 0\or0\or1\or\halfrootthree\or\halfroottwo\or
+ .587785\or.5\or.433884\or.382683\or.34202\or.309017\or
+ .281733\or.258819\else0\xytrigerror@\sinPIon{#1}\fi}
+\xydef@\cosTwoPIon#1{\ifcase#1 1\or1\or-1\or-\cosPIon3\or\cosPIon2\or
+ \sinPIon{10}\or\cosPIon3\or.62349\or\cosPIon4\or
+ .766044\or\cosPIon5\or.841254\or\cosPIon6%
+ \else1\xytrigerror@\cosTwoPIon{#1}\fi}
+\xydef@\sinTwoPIon#1{\ifcase#1 0\or0\or0\or-\sinPIon3\or\sinPIon2\or
+ \cosPIon{10}\or\sinPIon3\or.781831\or\sinPIon4\or
+ .642788\or\sinPIon5\or.540641\or\sinPIon6%
+ \else0\xytrigerror@\sinTwoPIon{#1}\fi}
+\xydef@\cosThreePIon#1{\ifcase#1 1\or-1\or0\or-1\or-\cosPIon4\or
+ -\cosPIon5\or\cosPIon2\or.222521\or\sinPIon8\or\cosPIon3\or
+ \sinTwoPIon5\or.654861\or\cosPIon4%
+ \else1\xytrigerror@\cosThreePIon{#1}\fi}
+\xydef@\sinThreePIon#1{\ifcase#1 0\or0\or1\or0\or\sinPIon4\or
+ \sinTwoPIon5\or\sinPIon2\or.974928\or\cosPIon8\or\sinPIon3\or
+ \cosTwoPIon5\or.75575\or\sinPIon4%
+ \else0\xytrigerror@\sinThreePIon{#1}\fi}
+\xydef@\cosFourPIon#1{\ifcase#1 1\or1\or1\or-\cosPIon3\or-1\or-\cosPIon5\or
+ \cosTwoPIon3\or-\cosThreePIon7\or0\or.173648\or\cosTwoPIon5\or
+ .415415\or\cosPIon3%
+ \else1\xytrigerror@\cosFourPIon{#1}\fi}
+\xydef@\sinFourPIon#1{\ifcase#1 0\or0\or0\or-\sinPIon3\or0\or\sinPIon5\or
+ \sinTwoPIon3\or\sinThreePIon7\or1\or.984808\or\sinTwoPIon5\or
+ .909632\or\sinPIon3%
+ \else0\xytrigerror@\sinFourPIon{#1}\fi}
+\xydef@\cosFivePIon#1{\ifcase#1 1\or-1\or0\or\cosPIon3\or-\cosPIon4\or
+ -1\or-\cosPIon6\or-\cosTwoPIon7\or-\cosThreePIon8\or-\cosFourPIon9\or
+ 0\or.142315\or\sinPIon{12}%
+ \else1\xytrigerror@\cosFivePIon{#1}\fi}
+\xydef@\sinFivePIon#1{\ifcase#1 0\or0\or1\or-\sinPIon3\or-\sinPIon4\or
+ 0\or\sinPIon6\or\sinTwoPIon7\or\sinThreePIon8\or\sinFourPIon9\or1\or
+ .989821\or\cosPIon{12}%
+ \else0\xytrigerror@\sinFivePIon{#1}\fi}
+\xydef@\xypoly@@@{\count@=\xypolyNUMSIDES@\relax
+ \ifx\xypolyALIGN@\empty
+ \ifnum\count@<\thr@@\relax\DN@{\xypolytoosmall@{\the\count@}}%
+ \else \advance\count@-\thr@@
+ \ifcase\count@ \DN@{\xyPolygon@@@\xytriangle@@}%
+ \or \DN@{\xyPolygon@@@\xysquare@@}%
+ \or \DN@{\xyPolygon@@@\xypentagon@@}%
+ \or \DN@{\xyPolygon@@@\xyhexagon@@}%
+ \or \DN@{\xyPolygon@@@\xyheptagon@@}%
+ \or \DN@{\xyPolygon@@@\xyoctagon@@}%
+ \or \DN@{\xyPolygon@@@\xynonagon@@}%
+ \or \DN@{\xyPolygon@@@\xydecagon@@}%
+ \or \DN@{\xyPolygon@@@\xyundecagon@@}%
+ \or \DN@{\xyPolygon@@@\xydodecagon@@}%
+ \else \DN@{\xylargePolygon@{0}{\xypolyNUMSIDES@}}%
+ \fi\fi
+ \else
+ \DN@{\xylargePolygon@{\xypolyALIGN@}{\xypolyNUMSIDES@}}%
+ \fi \next@ \xypoly@@@x}
+\xydef@\xypoly@@@x{\restore\xypoly@x}
+\xydef@\xypolytoosmall@#1{\xyerror@{#1 sides is too few for a polygon}}
+\xydef@\xyPolygon@@@#1{%
+ \toks@={\def\xypolyNUMSIDES@}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\xypolyNUMSIDES@}\save}%
+ \ifx\empty\xypolySCALE@ \addtotoks@{\POS"}%
+ \else \addtotoks@{\POS;0;}%
+ \expandafter\addtotoks@\expandafter{\xypolySCALE@\relax\POS"}%
+ \fi
+ \expandafter\addtotoks@\expandafter{\xypolyPREFIX@0"\relax}%
+ \ifx\xypreSPOKES@\relax
+ \addtotoks@{#1{;}}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\xypolyVERTEX@}}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\xypolyPREFIX@}}%
+ \DN@##1\next@{\def\tmp@{**\dir##1}}%
+ \expandafter\next@\expandafter{\xypolySPOKES@}\next@
+ \expandafter\addtotoks@\expandafter{\expandafter{\tmp@}}%
+ \else
+ \expandafter\DN@\expandafter{\expandafter\ar\xypreSPOKES@}%
+ \addtotoks@{#1}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\next@}}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\xypolyVERTEX@}}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\xypolyPREFIX@}{}}%
+ \fi
+ \expandafter\addtotoks@\expandafter{\expandafter{\xypostSPOKES@}}%
+ \ifx\xypreSIDES@\relax
+ \addtotoks@{{;}}%
+ \DN@##1\next@{\def\tmp@{**\dir##1}}%
+ \expandafter\next@\expandafter{\xypolySIDES@}\next@
+ \expandafter\addtotoks@\expandafter{\expandafter{\tmp@}}%
+ \else
+ \expandafter\DN@\expandafter{\expandafter\ar\xypreSIDES@}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\next@}{}}%
+ \fi
+ \expandafter\addtotoks@\expandafter{\expandafter{\xypostSIDES@}}%
+ \ifx\xypolyALIGN@\empty
+ \ifnum\xypolyNUMSIDES@>12\addtotoks@{{0}}\fi
+ \else
+ \expandafter\addtotoks@\expandafter{\expandafter{\xypolyALIGN@}}%
+ \fi
+ \expandafter\DN@\expandafter{\expandafter\endgroup\the\toks@ }%
+ \next@}
+\xydef@\xytriangle@@#1#2#3#4#5#6#7#8{%
+ \xy@@{\xypolynode@=\@ne}%
+ \POS#1"#30"+(0,1)#2="#31"#4#5\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#30"#1"#30"+(-\cosPIon6, -.5)#2="#32"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#31"#6"#32"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\cosPIon6,-.5)#2="#33"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#32"#6"#33"#7#8\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#33"#6"#31"#7#8\relax }
+\xydef@\xysquare@@#1#2#3#4#5#6#7#8{%
+ \xy@@{\xypolynode@=\@ne}%
+ \POS#1"#30"+(\halfroottwo,\halfroottwo)#2="#31"#4#5\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#30"#1"#30"+(-\halfroottwo,\halfroottwo)#2="#32"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#31"#6"#32"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\halfroottwo,\halfroottwo)#2="#33"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#32"#6"#33"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(-\halfroottwo,\halfroottwo)#2="#34"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#33"#6"#34"#7#8\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#34"#6"#31"#7#8\relax }
+\xydef@\xypentagon@@#1#2#3#4#5#6#7#8{%
+ \xy@@{\xypolynode@=\@ne}%
+ \POS#1"#30"+(\cosPIon{10},\sinPIon{10})#2="#31"#4#5\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#30"#1"#30"+(0,1)#2="#32"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#31"#6"#32"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(-\cosPIon{10},\sinPIon{10})#2="#33"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#32"#6"#33"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\sinPIon5,\cosPIon5)#2="#34"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#33"#6"#34"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\sinPIon5,-\cosPIon5)#2="#35"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#34"#6"#35"#7#8\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#35"#6"#31"#7#8\relax }
+\xydef@\xyhexagon@@#1#2#3#4#5#6#7#8{%
+ \xy@@{\xypolynode@=\@ne}%
+ \POS#1"#30"+(1,0)#2="#31"#4#5\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#30"#1"#30"+(.5,\halfrootthree)#2="#32"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#31"#6"#32"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(-.5,\halfrootthree)#2="#33"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#32"#6"#33"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(1,0)#2="#34"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#33"#6"#34"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(.5,\halfrootthree)#2="#35"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#34"#6"#35"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(-.5,\halfrootthree)#2="#36"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#35"#6"#36"#7#8\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#36"#6"#31"#7#8\relax }
+\xydef@\xyheptagon@@#1#2#3#4#5#6#7#8{%
+ \xy@@{\xypolynode@=\@ne}%
+ \POS#1"#30"+(\sinTwoPIon7,\cosTwoPIon7)#2="#31"#4#5\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#30"#1"#30"+(0,1)#2="#32"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#31"#6"#32"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(-\sinTwoPIon7,\cosTwoPIon7)#2="#33"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#32"#6"#33"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\sinThreePIon7,\cosThreePIon7)#2="#34"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#33"#6"#34"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\sinPIon7,\cosPIon7)#2="#35"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#34"#6"#35"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\sinPIon7,-\cosPIon7)#2="#36"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#35"#6"#36"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\sinThreePIon7,-\cosThreePIon7)#2="#37"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#36"#6"#37"#7#8\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#37"#6"#31"#7#8\relax }
+\xydef@\xyoctagon@@#1#2#3#4#5#6#7#8{%
+ \xy@@{\xypolynode@=\@ne}%
+ \POS#1"#30"+(\cosPIon8,\sinPIon8)#2="#31"#4#5\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#30"#1"#30"+(\sinPIon8,\cosPIon8)#2="#32"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#31"#6"#32"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\sinPIon8,-\cosPIon8)#2="#33"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#32"#6"#33"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\cosPIon8,-\sinPIon8)#2="#34"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#33"#6"#34"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\cosPIon8,\sinPIon8)#2="#35"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#34"#6"#35"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\sinPIon8,\cosPIon8)#2="#36"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#35"#6"#36"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\sinPIon8,-\cosPIon8)#2="#37"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#36"#6"#37"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\cosPIon8,-\sinPIon8)#2="#38"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#37"#6"#38"#7#8\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#38"#6"#31"#7#8\relax }
+\xydef@\xynonagon@@#1#2#3#4#5#6#7#8{%
+ \xy@@{\xypolynode@=\@ne}%
+ \POS#1"#30"+(\sinFourPIon9,\cosFourPIon9)#2="#31"#4#5\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#30"#1"#30"+(\sinTwoPIon9,\cosTwoPIon9)#2="#32"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#31"#6"#32"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(0,1)#2="#33"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#32"#6"#33"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(-\sinTwoPIon9,\cosTwoPIon9)#2="#34"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#33"#6"#34"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(-\sinFourPIon9,\cosFourPIon9)#2="#35"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#34"#6"#35"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\cosPIon6,\sinPIon6)#2="#36"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#35"#6"#36"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\sinPIon9,\cosPIon9)#2="#37"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#36"#6"#37"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\sinPIon9,-\cosPIon9)#2="#38"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#37"#6"#38"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\cosPIon6,-\sinPIon6)#2="#39"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#38"#6"#39"#7#8\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#39"#6"#31"#7#8\relax }
+\xydef@\xydecagon@@#1#2#3#4#5#6#7#8{%
+ \xy@@{\xypolynode@=\@ne}%
+ \POS#1"#30"+(1,0)#2="#31"#4#5\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#30"#1"#30"+(\cosPIon5,\sinPIon5)#2="#32"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#31"#6"#32"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\sinPIon{10},\cosPIon{10})#2="#33"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#32"#6"#33"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\sinPIon{10},-\cosPIon{10})#2="#34"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#33"#6"#34"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\cosPIon5,-\sinPIon5)#2="#35"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#34"#6"#35"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(1,0)#2="#36"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#35"#6"#36"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\cosPIon5,\sinPIon5)#2="#37"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#36"#6"#37"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\sinPIon{10},\cosPIon{10})#2="#38"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#37"#6"#38"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\sinPIon{10},-\cosPIon{10})#2="#39"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#38"#6"#39"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\cosPIon5,-\sinPIon5)#2="#310"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#39"#6"#310"#7#8\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#310"#6"#31"#7#8\relax }
+\xydef@\xyundecagon@@#1#2#3#4#5#6#7#8{%
+ \xy@@{\xypolynode@=\@ne}%
+ \POS#1"#30"+(\sinFourPIon{11},\cosFourPIon{11})#2="#31"#4#5\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#30"#1"#30"+(\sinTwoPIon{11},\cosTwoPIon{11})#2="#32"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#31"#6"#32"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(0,1)#2="#33"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#32"#6"#33"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(-\sinTwoPIon{11},\cosTwoPIon{11})#2="#34"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#33"#6"#34"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(-\sinFourPIon{11},\cosFourPIon{11})#2="#35"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#34"#6"#35"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\sinFivePIon{11},\cosFivePIon{11})#2="#36"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#35"#6"#36"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\sinThreePIon{11},\cosThreePIon{11})#2="#37"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#36"#6"#37"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\sinPIon{11},\cosPIon{11})#2="#38"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#37"#6"#38"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\sinPIon{11},-\cosPIon{11})#2="#39"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#38"#6"#39"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\sinThreePIon{11},-\cosThreePIon{11})#2="#310"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#39"#6"#310"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\sinFivePIon{11},-\cosFivePIon{11})#2="#311"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#310"#6"#311"#7#8\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#311"#6"#31"#7#8\relax }
+\xydef@\xydodecagon@@#1#2#3#4#5#6#7#8{%
+ \xy@@{\xypolynode@=\@ne}%
+ \POS#1"#30"+(\cosPIon{12},\sinPIon{12})#2="#31"#4#5\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#30"#1"#30"+(\halfroottwo,\halfroottwo)#2="#32"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#31"#6"#32"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\sinPIon{12},\cosPIon{12})#2="#33"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#32"#6"#33"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\sinPIon{12},-\cosPIon{12})#2="#34"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#33"#6"#34"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\halfroottwo,-\halfroottwo)#2="#35"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#34"#6"#35"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\cosPIon{12},-\sinPIon{12})#2="#36"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#35"#6"#36"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\cosPIon{12},\sinPIon{12})#2="#37"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#36"#6"#37"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\halfroottwo,\halfroottwo)#2="#38"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#37"#6"#38"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"-(\sinPIon{12},\cosPIon{12})#2="#39"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#38"#6"#39"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\sinPIon{12},-\cosPIon{12})#2="#310"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#39"#6"#310"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\halfroottwo,-\halfroottwo)#2="#311"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#310"#6"#311"#7#8\relax
+ \xy@@{\advance\xypolynode@\tw@}%
+ \POS"#30"#1"#30"+(\cosPIon{12},-\sinPIon{12})#2="#312"#4#5\relax
+ \xy@@{\advance\xypolynode@\m@ne}%
+ \POS"#311"#6"#312"#7#8\relax
+ \xy@@{\advance\xypolynode@\@ne}%
+ \POS"#312"#6"#31"#7#8\relax }
+\xydef@\xylargePolygon@#1#2{%
+ \dimen@=#1\p@
+ \xyPolygon@@@\xypolygon@@}
+\xydef@\xypolyrepeat@{\fi}
+\xydef@\xypolybody@{}
+\xydef@\xypolyiterate@{\xypolybody@\expandafter\xypolyiterate@\else\fi}
+\xydef@\xypolyloop@#1\xypolyrepeat@{\def\xypolybody@{#1}\xypolyiterate@}
+\xydef@\xypolygon@@#1#2#3#4#5#6#7#8#9{\save
+ \vfromcartesianangle@{#9}\edef\next@{\the\X@c,\the\Y@c\addGT@\empty}%
+ \xy@@{\xypolynode@=\@ne}%
+ \toks@={\POS#1"#30"+}%
+ \expandafter\expandafter\expandafter\addtotoks@\expandafter
+ \expandafter\expandafter{\addLT@\empty}%
+ \expandafter\addtotoks@\expandafter{\next@#2="#31"#4#5\relax}%
+ \xy@@\dontleave@ \the\toks@
+ \xypolyloop@
+ \dimen@=360\p@ \count@@=\xypolyNUMSIDES@\relax \advance\dimen@ .5\count@@
+ \divide\dimen@ \xypolyNUMSIDES@ \relax
+ \multiply\dimen@\xypolynode@ \relax \advance\dimen@ #9\p@
+ \edef\tmp@{%
+ \noexpand\vfromcartesianangle@{\expandafter\removePT@\the\dimen@}}%
+ \tmp@ \edef\next@{\the\X@c,\the\Y@c\addGT@\empty}%
+ \xy@@{\advance\xypolynode@\@ne}\count@=\xypolynode@
+ \toks@={\POS"#30"#1"#30"+}\edef\nextii@{\the\count@}%
+ \expandafter\expandafter\expandafter\addtotoks@\expandafter
+ \expandafter\expandafter{\addLT@\space}%
+ \expandafter\addtotoks@\expandafter{\next@#2="#3}%
+ \expandafter\addtotoks@\expandafter{\nextii@"#4#5\relax}%
+ \the\toks@
+ \count@=\xypolynode@ \xy@@{\advance\xypolynode@\m@ne}%
+ \toks@={\POS"#3}\expandafter\addtotoks@\expandafter{\the\xypolynode@"#6"#3}%
+ \expandafter\addtotoks@\expandafter{\the\count@"#7#8\relax}%
+ \the\toks@
+ \xy@@{\advance\xypolynode@\@ne}\count@=\xypolyNUMSIDES@ \relax
+ \ifnum\xypolynode@<\count@ \relax \xypolyrepeat@
+ \toks@={\POS"#3}%
+ \expandafter\addtotoks@\expandafter{\xypolyNUMSIDES@"#6"#31"#7#8\relax}%
+ \the\toks@ \restore }
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyps-c.tex b/macros/generic/diagrams/xypic/texinputs/xyps-c.tex
new file mode 100644
index 0000000000..e471ede76d
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyps-c.tex
@@ -0,0 +1,69 @@
+%% xyps-c.tex from $Id: xyps-c.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Colour extension'' PostScript backend support.
+%% Copyright (c) 1993-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+%% As a special exception, you may use this file and all files derived
+%% from it without restrictions. This special exception was added with
+%% version 3.7 of Xy-pic.
+%%
+\expandafter\ifx\csname xyps-cloaded\endcsname\empty
+ \message{not reloaded}\endinput \fi
+\expandafter\let\csname xyps-cloaded\endcsname=\empty \xycatcodes
+\expandafter\ifx \csname xyps-sloaded\endcsname\empty\else
+ \xyinputorelse@{xyps-s}{\xyerror@{Could not load xyps-s}{}}%
+ \xycatcodes\fi
+\xydef@\UsePScolor{\installPScolor@}
+\xydef@\NoPScolor{\UnloadColor@}
+\xydef@\installPScolor@{\installPSstyle@
+ \let\xymath@=\xyPSmath@ \let\xynomath@=\xyPSnomath@
+ \let\checkxyPScolor@=\checkxyPScolor@@
+ \let\xycolor@@=\xyPScolor@@
+ \xystandardcolors@
+ \xyuncatcodes }
+\xydef@\xyPSmath@{\hbox\bgroup\dimen@=.55ex \checkxyPScolor@ \xyinside@}
+\xydef@\xyPSnomath@{\hbox\bgroup\dimen@=\z@ \checkxyPScolor@ \xyinside@}
+\xydef@\checkxyPScolor@@{\xycolor@raw@@{}\let\checkxyPScolor@=\relax}
+\xylet@\checkxyPScolor@=\relax
+\xydef@\xyPSnewcolor@#1#2#3#4#5{%
+ \expandafter\DN@\expandafter{\csname shape [#1]\endcsname}%
+ \DNii@{\relax}\ifx\next@\nextii@\newxycolor{#1}{}\relax\fi
+ \DNii@{#4}\ifx\nextii@\empty
+ \expandafter\DNii@\expandafter{\csname xyPSshape@#1@\endcsname}%
+ \expandafter\def\nextii@{\xyPScolor@{#2 #3}}\else
+ \expandafter\DNii@\expandafter{\csname xyPSshape@#1@\endcsname}%
+ \expandafter\def\nextii@{\xyPScolor@{#4}}\fi
+ \ifx\nextii@\empty\expandafter\def\next@{\xyPSnotimplemented@@`#1'@@}%
+ \else
+ \edef\tmp@{\noexpand\let\expandafter\noexpand\next@
+ \expandafter\noexpand\nextii@}\expandafter\tmp@\fi }
+\xydef@\xyPScolor@{\ifPSspecials@\expandafter\xyPScolor@@
+ \else\expandafter\eat@\fi}
+\xydef@\xyPScolor@@#1{\bgroup \checkXyStyle@
+ \def\preStyle@@{\expandafter\addtostyletoks@\expandafter{\xyPSpre@}}%
+ \def\postStyle@@{\expandafter\addtostyletoks@\expandafter{\xyPSpost@}}%
+ \let\modPSboxz@=\modXYstyle@ \xyPS@color@@{#1}%
+ \toks@={\egroup\let\xy@style@=\relax \def\Drop@@}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\Drop@@}\def\Connect@@}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\Connect@@}}%
+ \the\toks@ }
+\xydef@\xyPS@color@@#1{\xyPSsplitPS@{{#1}cc}{}}
+\xydef@\xycolor@raw@@#1{\PSraw@@{xyc}}
+\endinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyps-col.tex b/macros/generic/diagrams/xypic/texinputs/xyps-col.tex
new file mode 100644
index 0000000000..83413ae77e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyps-col.tex
@@ -0,0 +1,97 @@
+%% xyps-col.tex from $Id: xyps-col.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Crayola colour names'' PostScript colour support.
+%% Copyright (c) 1995-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+%% As a special exception, you may use this file and all files derived
+%% from it without restrictions. This special exception was added with
+%% version 3.7 of Xy-pic.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyrequire{color}\xycatcodes
+\newxycolor@{GreenYellow}{0.15 0 0.69 0}{cmyk}{}{}%
+\newxycolor@{Yellow}{0 0 1. 0}{cmyk}{}{}%
+\newxycolor@{Goldenrod}{0 0.10 0.84 0}{cmyk}{}{}%
+\newxycolor@{Dandelion}{0 0.29 0.84 0}{cmyk}{}{}%
+\newxycolor@{Apricot}{0 0.32 0.52 0}{cmyk}{}{}%
+\newxycolor@{Peach}{0 0.50 0.70 0}{cmyk}{}{}%
+\newxycolor@{Melon}{0 0.46 0.50 0}{cmyk}{}{}%
+\newxycolor@{YellowOrange}{0 0.42 1. 0}{cmyk}{}{}%
+\newxycolor@{Orange}{0 0.61. 0.87 0}{cmyk}{}{}%
+\newxycolor@{BurntOrange}{0 0.51 1. 0}{cmyk}{}{}%
+\newxycolor@{Bittersweet}{0 0.75 1. 0.24}{cmyk}{}{}%
+\newxycolor@{RedOrange}{0 0.77 0.87 0}{cmyk}{}{}%
+\newxycolor@{Mahogany}{0 0.85 0.87 0.35}{cmyk}{}{}%
+\newxycolor@{Maroon}{0 0.87 0.68 0.32}{cmyk}{}{}%
+\newxycolor@{BrickRed}{0 0.89 0.94 0.28}{cmyk}{}{}%
+\newxycolor@{Red}{0 1. 1. 0}{cmyk}{}{}%
+\newxycolor@{OrangeRed}{0 1. 0.50 0}{cmyk}{}{}%
+\newxycolor@{RubineRed}{0 1. 0.13 0}{cmyk}{}{}%
+\newxycolor@{WildStrawberry}{0 0.96 0.39 0}{cmyk}{}{}%
+\newxycolor@{Salmon}{0 0.53 0.38 0}{cmyk}{}{}%
+\newxycolor@{CarnationPink}{0 0.63 0 0}{cmyk}{}{}%
+\newxycolor@{Magenta}{0 1. 0 0}{cmyk}{}{}%
+\newxycolor@{VioletRed}{0 0.81 0 0}{cmyk}{}{}%
+\newxycolor@{Rhodamine}{0 0.82 0 0}{cmyk}{}{}%
+\newxycolor@{Mulberry}{0.34 0.90 0 0.02}{cmyk}{}{}%
+\newxycolor@{RedViolet}{0.07 0.90 0 0.34}{cmyk}{}{}%
+\newxycolor@{Fuchsia}{0.47 0.91 0 0.08}{cmyk}{}{}%
+\newxycolor@{Lavender}{0 0.48 0 0}{cmyk}{}{}%
+\newxycolor@{Thistle}{0.12 0.59 0 0}{cmyk}{}{}%
+\newxycolor@{Orchid}{0.32 0.64 0 0}{cmyk}{}{}%
+\newxycolor@{DarkOrchid}{0.40 0.80 0.20 0}{cmyk}{}{}%
+\newxycolor@{Purple}{0.45 0.86 0 0}{cmyk}{}{}%
+\newxycolor@{Plum}{0.50 1. 0 0}{cmyk}{}{}%
+\newxycolor@{Violet}{0.79 0.88 0 0}{cmyk}{}{}%
+\newxycolor@{RoyalPurple}{0.75 0.90 0 0}{cmyk}{}{}%
+\newxycolor@{BlueViolet}{0.86 0.91 0 0.04}{cmyk}{}{}%
+\newxycolor@{Periwinkle}{0.57 0.55 0 0}{cmyk}{}{}%
+\newxycolor@{CadetBlue}{0.62 0.57 0.23 0}{cmyk}{}{}%
+\newxycolor@{CornflowerBlue}{0.65 0.13 0 0}{cmyk}{}{}%
+\newxycolor@{MidnightBlue}{0.98 0.13 0 0.43}{cmyk}{}{}%
+\newxycolor@{NavyBlue}{0.94 0.54 0 0}{cmyk}{}{}%
+\newxycolor@{RoyalBlue}{1. 0.50 0 0}{cmyk}{}{}%
+\newxycolor@{Blue}{1. 1. 0 0}{cmyk}{}{}%
+\newxycolor@{Cerulean}{0.94 0.11 0 0}{cmyk}{}{}%
+\newxycolor@{Cyan}{1. 0 0 0}{cmyk}{}{}%
+\newxycolor@{ProcessBlue}{0.96 0 0 0}{cmyk}{}{}%
+\newxycolor@{SkyBlue}{0.62 0 0.12 0}{cmyk}{}{}%
+\newxycolor@{Turquoise}{0.85 0 0.20 0}{cmyk}{}{}%
+\newxycolor@{TealBlue}{0.86 0 0.34 0.02}{cmyk}{}{}%
+\newxycolor@{Aquamarine}{0.82 0 0.30 0}{cmyk}{}{}%
+\newxycolor@{BlueGreen}{0.85 0 0.33 0}{cmyk}{}{}%
+\newxycolor@{Emerald}{1. 0 0.50 0}{cmyk}{}{}%
+\newxycolor@{JungleGreen}{0.99 0 0.52 0}{cmyk}{}{}%
+\newxycolor@{SeaGreen}{0.69 0 0.50 0}{cmyk}{}{}%
+\newxycolor@{Green}{1. 0 1. 0}{cmyk}{}{}%
+\newxycolor@{ForestGreen}{0.91 0 0.88 0.12}{cmyk}{}{}%
+\newxycolor@{PineGreen}{0.92 0 0.59 0.25}{cmyk}{}{}%
+\newxycolor@{LimeGreen}{0.50 0 1. 0}{cmyk}{}{}%
+\newxycolor@{YellowGreen}{0.44 0 0.74 0}{cmyk}{}{}%
+\newxycolor@{SpringGreen}{0.26 0 0.76 0}{cmyk}{}{}%
+\newxycolor@{OliveGreen}{0.64 0 0.95 0.40}{cmyk}{}{}%
+\newxycolor@{RawSienna}{0 0.72 1. 0.45}{cmyk}{}{}%
+\newxycolor@{Sepia}{0 0.83 1. 0.70}{cmyk}{}{}%
+\newxycolor@{Brown}{0 0.81 1. 0.60}{cmyk}{}{}%
+\newxycolor@{Tan}{0.14 0.42 0.56 0}{cmyk}{}{}%
+\newxycolor@{Gray}{0 0 0 0.50}{cmyk}{}{}%
+\newxycolor@{Black}{0 0 0 1.}{cmyk}{}{}%
+\newxycolor@{White}{0 0 0 0}{cmyk}{}{}%
+\endinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyps-f.tex b/macros/generic/diagrams/xypic/texinputs/xyps-f.tex
new file mode 100644
index 0000000000..83b5766591
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyps-f.tex
@@ -0,0 +1,127 @@
+%% xyps-f.tex from $Id: xyps-f.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Frame extension'' PostScript backend support.
+%% Copyright (c) 1995-1997 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+%% As a special exception, you may use this file and all files derived
+%% from it without restrictions. This special exception was added with
+%% version 3.7 of Xy-pic.
+%%
+\expandafter\ifx\csname xyps-floaded\endcsname\empty
+ \message{not reloaded}\endinput \fi
+\expandafter\let\csname xyps-floaded\endcsname=\empty \xycatcodes
+\xydef@\installPSframes@{%
+ \let\framed@body@@=\xyPSframed@body@
+ \let\circled@x@@=\xyPScircled@x@
+ \let\ellipsed@x@@=\xyPSellipsed@x@
+ \installPSfills@
+ \xyuncatcodes}
+\xydef@\UsePSframes{\installPSframes@}
+\xydef@\NoPSframes{\UnloadFrames@}
+\xydef@\xyPSframed@body@{\DN@{\framed@body@}%
+ \ifx\framehfill\frm@solidh@@
+ \DN@{\xyPSframed@oval@\xyPSoval@Special}%
+ \else\ifdim\R@=\z@\else
+ \ifx\framehfill\frm@dashh@@
+ \DN@{\xyPSframed@oval@\xyPSdashoval@Special}%
+ \else\ifx\framehfill\frm@doth@@
+ \DN@{\xyPSframed@oval@\xyPSdotoval@Special}%
+ \fi\fi
+ \fi\fi \next@ }
+\xydef@\xyPSframed@oval@#1{\vglue\U@c
+ \hbox{\hglue\L@c\xypsoval@#1\hglue\R@c}\vglue\D@c}
+\xydef@\xyPScircled@x@{\DN@{\xyPScircled@x@@\xyPScirc@Special}%
+ \ifx\framehfill\frm@doth@@
+ \DN@{\xyPScircled@x@@\xyPSdotcirc@Special}%
+ \else\ifx\framehfill\frm@dashh@@
+ \DN@{\xyPScircled@x@@\xyPSdashcirc@Special}%
+ \fi\fi \next@ }
+\xydef@\xyPScircled@x@@#1{\vglue2\R@
+ \hbox{\hglue2\R@\xypscircle@#1\hglue2\R@}%
+ \vglue2\R@}
+\xydef@\xyPSellipsed@x@#1#2{%
+ \DN@{\xyPSellipsed@x@@\xyPScirc@Special}%
+ \ifx\framehfill\frm@doth@@
+ \DN@{\xyPSellipsed@x@@\xyPSdotcirc@Special}%
+ \else\ifx\framehfill\frm@dashh@@
+ \DN@{\xyPSellipsed@x@@\xyPSdashcirc@Special}%
+ \fi\fi \next@{#1}{#2}}
+\xydef@\xyPSellipsed@x@@#1#2#3{\vglue #3\vglue #3\relax
+ \hbox{\L@c = #2\relax \R@c=\L@c \D@c = #3\relax \U@c=\D@c
+ \hglue#2\hglue#2\relax\xypsellipse@#1\hglue#2\hglue#2\relax}%
+ \vglue #3\vglue #3\relax}
+\xydef@\xyPSdashhfill@{{\SemiDirectionChar=95 \Direction=3072 \xyPSdash@}}
+\xydef@\xyPSdashvfill@{{\SemiDirection=31 \Direction=1023 \xyPSdash@}}
+\xydef@\xypsoval@#1{%
+ \dimen@=\L@c \advance\dimen@\R@c
+ \dimen@ii=\U@c \advance\dimen@ii\D@c
+ \ifdim\dimen@ii<\dimen@ \relax \dimen@=\dimen@ii\fi \divide\dimen@\tw@
+ \ifdim\R@>\dimen@ \relax \R@=\dimen@ \fi
+ \D@c=-\D@c \L@c=-\L@c
+ \edef\tmp@{\expandafter\removePT@\the\R@
+ \space\expandafter\removePT@\the\R@c
+ \space\expandafter\removePT@\the\D@c
+ \space\expandafter\removePT@\the\L@c
+ \space\expandafter\removePT@\the\U@c }%
+ \expandafter#1\expandafter{\tmp@}}
+\xydef@\xypscircle@#1{\dimen@=\R@
+ \edef\tmp@{\expandafter\removePT@\the\dimen@}%
+ \expandafter#1\expandafter{\tmp@}}
+\xydef@\xypsellipse@#1{\edef\tmp@{%
+ \expandafter\removePT@\the\U@c \space
+ \expandafter\removePT@\the\D@c \space
+ \expandafter\removePT@\the\L@c \space
+ \expandafter\removePT@\the\R@c }%
+ \expandafter#1\expandafter{\tmp@}}
+\xydef@\xyPSoval@Special#1{\PSmacro@{#1 ov}}
+\xydef@\xyPScirc@Special#1{\PSmacro@{#1 ox}}
+\xydef@\xyPSdotcirc@Special#1{\PSmacro@{#1 ot}}
+\xydef@\xyPSdashcirc@Special#1{\PSmacro@{#1 od}}
+\xydef@\xyPSdotoval@Special#1{\PSmacro@{#1 vt}}
+\xydef@\xyPSdashoval@Special#1{\PSmacro@{#1 vd}}
+\xydef@\xyPSfilledRegion#1#2{\setboxz@h{\lower\D@c\vbox{%
+ \vglue\U@c\hbox{#1#2\empty\hglue\L@c\hglue\R@c}\vglue\D@c}}%
+ \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ \boxz@}
+\xydef@\filledRectangle@PS{%
+ \xyPSfilledRegion{\xypsoval@\xyPSfilloval@Special}}
+\xydef@\filledCircle@PS#1{{\R@c=\R@ \L@c=\R@ \U@c=\R@ \D@c=\R@
+ \xyPSfilledRegion{\xypscircle@\xyPSfillcirc@Special}#1}}
+\xydef@\filledEllipse@PS{%
+ \xyPSfilledRegion{\xypsellipse@\xyPSfillellipse@Special}}
+\xydef@\filledOval@PS{%
+ \xyPSfilledRegion{\xypsoval@\xyPSfilloval@Special}}
+\xydef@\frame@emph@PS#1{\filled@{#1}\relax}
+\xydef@\installPSfills@{%
+ \let\frame@emph@@=\frame@emph@PS
+ \let\filledRectangle@@=\filledRectangle@PS
+ \let\filledOval@@=\filledOval@PS
+ \let\filledCircle@@=\filledCircle@PS
+ \let\filledEllipse@@=\filledEllipse@PS
+}
+\xydef@\xyPSfilloval@Special#1#2{%
+ \ifx#2\relax\PSmacro@{#1 sfo}%
+ \else\PSmacro@{#1 fo}\fi}
+\xydef@\xyPSfillcirc@Special#1#2{%
+ \ifx#2\relax\PSmacro@{#1 sfc}%
+ \else\PSmacro@{#1 fc}\fi}
+\xydef@\xyPSfillellipse@Special#1#2{%
+ \ifx#2\relax\PSmacro@{#1 sfe}%
+ \else\PSmacro@{#1 fe}\fi}
+\endinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyps-l.tex b/macros/generic/diagrams/xypic/texinputs/xyps-l.tex
new file mode 100644
index 0000000000..4220082f6d
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyps-l.tex
@@ -0,0 +1,68 @@
+%% xyps-l.tex from $Id: xyps-l.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Line extension'' PostScript backend support.
+%% Copyright (c) 1993-1997 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+%% As a special exception, you may use this file and all files derived
+%% from it without restrictions. This special exception was added with
+%% version 3.7 of Xy-pic.
+%%
+\expandafter\ifx\csname xyps-lloaded\endcsname\empty
+ \message{not reloaded}\endinput \fi
+\expandafter\let\csname xyps-lloaded\endcsname=\empty \xycatcodes
+\expandafter\ifx\csname xyps-sloaded\endcsname\empty\else
+ \xyinputorelse@{xyps-s}{\xyerror@{Could not load xyps-s}{}}%
+ \xycatcodes\fi
+\xydef@\installPSline@{\installPSstyle@
+ \installPSlinestyles@ \installPSpolylines@ }
+\xydef@\UsePSlines{\installPSline@}
+\xydef@\NoPSlines{\UnloadLine@\relax}
+\xydef@\xyPSlineSpecial@#1{\addtostyletoks@{ #1 lw}}
+\xydef@\xyPScapSpecial@#1{\addtostyletoks@{ #1 lc}}
+\xydef@\xyPSjoinSpecial@#1{\addtostyletoks@{ #1 lj}}
+\xydef@\xyPSmiterSpecial@#1{\addtostyletoks@{ #1 ml}}
+\xydef@\installPSlinestyles@{%
+ \let\xylinewidth@@=\xylinewidth@
+ \let\transxyline@@=\transxyline@
+ \let\xylineSpecial@@=\xyPSlineSpecial@
+ \let\resetxyline@@=\resetxyline@i
+ \let\xy@linecap@@=\xy@linecap@
+ \let\xycapSpecial@@=\xyPScapSpecial@
+ \let\resetxylinecap@@=\resetxylinecap@i
+ \let\xy@linejoin@@=\xy@linejoin@
+ \let\xyjoinSpecial@@=\xyPSjoinSpecial@
+ \let\resetxylinejoin@@=\resetxylinejoin@i
+ \let\xy@linemiter@@=\xy@linemiter@
+ \let\xymiterSpecial@@=\xyPSmiterSpecial@
+ \let\resetxylinemiter@@=\resetxylinemiter@i
+}
+\xydef@\xypolylinePS@Special#1{\PSmacro@{#1 pl}}
+\xydef@\xypolydotPS@Special#1{\PSmacro@{#1 pt}}
+\xydef@\xypolydashPS@Special#1{\PSmacro@{#1 pd}}
+\xydef@\xypolyfillPS@Special#1{\PSmacro@{#1 pf}}
+\xydef@\xypolyeofillPS@Special#1{\PSmacro@{#1 pe}}
+\xydef@\installPSpolylines@{%
+ \let\xypolyline@Special=\xypolylinePS@Special
+ \let\xypolydot@Special=\xypolydotPS@Special
+ \let\xypolydash@Special=\xypolydashPS@Special
+ \let\xypolyfill@Special=\xypolyfillPS@Special
+ \let\xypolyeofill@Special=\xypolyeofillPS@Special
+ \let\xy@polystyle@@=\xy@polystyle@ }
+\endinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyps-pro.tex b/macros/generic/diagrams/xypic/texinputs/xyps-pro.tex
new file mode 100644
index 0000000000..17aa385d2f
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyps-pro.tex
@@ -0,0 +1,173 @@
+%% xyps-pro.tex from $Id: xyps-pro.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``PostScript Prolog'' for PostScript support.
+%% Copyright (c) 1993-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+%% As a special exception, you may use this file and all files derived
+%% from it without restrictions. This special exception was added with
+%% version 3.7 of Xy-pic.
+\begingroup \xycatcodes%
+ \count@=\xydashl@\relax \count@@=\xydashw@\relax%
+ \let\firstPS@@=\relax%
+ \xyPSobeylines@@%
+\PSspecialdict@@{%
+/XYdict where not{250 dict /XYdict exch def
+ /xy{mark exch XYdict begin countdictstack /xylevel exch def
+ xyopen xycolor mark xypatt xypattern stopped xyclose end
+ cleartomark}def /xyg{gsave xy}def
+ /xyf{currentfont exch xy grestore setfont}def
+ /xycc{{xychgcol}xy}def /xyc{XYdict begin xycolstore end}def
+ /xyx{/xyYpos exch def /xyXpos exch def}def
+ /xyp{currentpoint xyx}def
+ /xyd{setupDirection XYdirection 2 mul}def
+ /xyct{currentpoint xyt 2 copy 6 2 roll}def
+ /xyt{xyXpos xyYpos 2 copy translate}def /xyr{neg rotate xynt}def
+ /xyrs{neg rotate 3 -1 roll sub neg 3 1 roll sub exch moveto xynt}def
+ /xynt{neg exch neg exch translate}def /xys{scale xynt}def
+ /xyss{scale 3 -1 roll sub neg 3 1 roll sub exch moveto xynt}def
+ /xyi{0 0 transform grestore gsave itransform}def
+ }if}%
+\tmp@false\def\do#1{\DN@{#1}\ifx\next@\nextii@\tmp@true\fi}%
+\DNii@{17oztex}\xydriversselected@@\iftmp@\PSspecialdict@@{%
+ /@boxy{prespecialVM restore grestore}def
+ /@eoxy{gsave /prespecialVM save def}def
+ }%
+\else \DNii@{oztex}\xydriversselected@@\iftmp@\PSspecialdict@@{%
+ /@oxy{prespecialVM restore grestore}def
+ /@oxy{gsave /prespecialVM save def}def
+ }\fi\fi%
+\PSdict@@{/XYdict where pop begin XYdict begin}%
+\PSdict@@{%
+ /xyopen{currentdict /XYddict known{XYddict null eq{}
+ {XYddict begin xyopen}ifelse}if}def
+ /xyclose{countdictstack -1 xylevel 1 add{pop end}for}def
+ /xychgcol{/xycolor exch def}def /xysetcol{xypush xychgcol}def
+}%
+\PSdict@@{%
+ /xypush{16 dict /XYddict exch def XYddict begin}def
+ /undef where
+ {pop /xypop{countdictstack xylevel eq{}{end}ifelse
+ currentdict /XYddict undef}def}
+ {/xypop{countdictstack xylevel eq{}{end}ifelse
+ /XYddict null def}def}ifelse
+ /pu /xypush load def /pp /xypop load def}%
+\PSdict@@{%
+ /xypspt{72 72.27 div dup scale}bind def /pscorrect{.85 mul}bind def
+ /gstartxy{gsave xypspt xywidth xycap xyjoin xymiter newpath 0 0 moveto}def
+ /xypath{gstartxy rmoveto counttomark 2 idiv -1 1{pop lineto}for}def
+ /xystroke{stroke grestore}bind def
+ /xyfill{closepath fill grestore}bind def
+ /xystfil{closepath gsave fill grestore 0 setgray
+ 0 setlinewidth xystroke}bind def
+ /xyeofill{closepath eofill grestore}bind def
+}%
+\PSdict@@{%
+ /xypolyline{xypath xystroke}def /xypolyfill{xypath xyfill}def
+ /xydotsep{/@ currentlinewidth 2 mul def}def
+ /xypolydot{xypath xydotsep [xydt @] 0 setdash xystroke}def
+ /xypolydash{xypath xydotsep [@ @] 0 setdash xystroke}def
+ /xypolyeofill{xypath xyeofill}def /pe /xypolyeofill load def
+ /pl /xypolyline load def /pf /xypolyfill load def
+ /pt /xypolydot load def /pd /xypolydash load def }%
+\PSdict@@{%
+ /arc4pop{arcto 4{pop}repeat}bind def
+ /xyoval{gstartxy oval closepath xystroke}def
+ /xycircle{gstartxy circle xystroke}def
+ /circle{dup 0 moveto 0 0 3 -1 roll 0 360 arc}def
+ /oval{newpath 2 copy exch 5 index add 2 div exch 3 copy 10 3 roll
+ moveto 1 index dup 5 1 roll 3 index 7 index arc4pop
+ dup dup 4 1 roll 4 index exch 6 index arc4pop
+ 1 index dup 8 1 roll 4 index 4 index arc4pop
+ arc4pop closepath}def
+ /xyellipse{gstartxy counttomark 1 gt{squarify pop pop 1}if
+ circle xystroke}def
+ /ov /xyoval load def /ox /xyellipse load def }%
+\PSdict@@{%
+ /dotit{dup currentlinewidth 6 mul div round div
+ /@ exch def [xydt @] 0 setdash}def
+ /elldash{dup 4 -1 roll 10 exch div dashit}def
+ /ovdash{dup 10 dashit}def
+ /dashit{div round 2 mul div /@ exch def [@ @] 0 setdash}def
+ /dotcirc{gstartxy cirlen dotit circle xystroke}def
+ /dashcirc{gstartxy cirlen dashit circle xystroke}def
+ /dotoval{gstartxy 5 copy ovlen dotit oval xystroke}def
+ /dashoval{gstartxy 5 copy ovlen ovdash oval xystroke}def
+ /cirlen{dup 6.283185 mul}bind def
+ /ovlen{3 -1 roll sub 3 1 roll sub add exch 1.716815 mul sub}def
+ /dotellipse{gstartxy counttomark 1 gt{squarify pop pop 1}if
+ cirlen dotit circle closepath xystroke}def
+ /dashellipse{gstartxy counttomark 1 gt{squarify add 2 div 1}
+ {1 exch 1 exch}ifelse cirlen elldash circle xystroke}def
+ /ot /dotellipse load def /od /dashellipse load def
+ /vt /dotoval load def /vd /dashoval load def }%
+\PSdict@@{%
+ /filloval{gstartxy oval xyfill}def
+ /stfiloval{gstartxy oval xystfil}def
+ /fillcircle{gstartxy circle xyfill}def
+ /stfilcircle{gstartxy circle xystfil}def
+ /fillellipse{gstartxy squarify pop pop 1 circle xyfill}def
+ /stfilellipse{gstartxy squarify pop pop 1 circle xystfil}def
+ /squarify{4 copy sub 2 div 3 1 roll sub 2 div translate
+ add 2 div 3 1 roll add 2 div 2 copy scale
+ 2 copy add 2 div currentlinewidth exch div setlinewidth
+ newpath}def
+ /fe /fillellipse load def /sfe /stfilellipse load def
+ /fo /filloval load def /sfo /stfiloval load def
+ /fc /fillcircle load def /sfc /stfilcircle load def }%
+\PSdict@@{%
+ /xywidth{.4 pscorrect setlinewidth}bind def
+ /xydash{[] 0 setdash}bind def /xycap{1 setlinecap}bind def
+ /xyjoin{1 setlinejoin}bind def /xymiter{10 setmiterlimit}bind def
+}%
+\PSdict@@{%
+ /cc{dup exec xychgcol}def
+ /lw{dup setlinewidth /@l exch def
+ /xywidth{@l setlinewidth}bind def}def
+ /lc{dup setlinecap /@c exch def
+ /xycap{@c setlinecap}bind def}def
+ /lj{dup setlinejoin /@j exch def
+ /xyjoin{@j setlinejoin}bind def}def
+ /ml{dup setmitrelimit /@m exch def
+ /xymiter{@m setmitrelimit}bind def}def
+}%
+\PSdict@@{%
+ /setupDirection{dup -2048 lt{3072 add neg 1024 exch}
+ {dup 0 lt{1024 add neg -1024}{dup 2048 lt{1024 sub -1024 exch}
+ {3072 sub 1024}ifelse}ifelse}ifelse atan
+ dup 180 gt{360 sub}if dup /XYdirection exch def rotate}def
+ }%
+\PSdict@@{%
+ userdict begin
+ /gray{setgray}bind def /gray@{setgray}bind def
+ /rgb{setrgbcolor}bind def /rgb@{setrgbcolor}bind def
+ /hsb{sethsbcolor}bind def /hsb@{sethsbcolor}bind def
+ /setcmykcolor where{pop}{/setcmykcolor{dup 3 1 roll dup 5 1 roll
+ exch sub 1 add 5 1 roll exch sub 1 add 4 1 roll
+ exch sub 1 add 3 1 roll setrgbcolor}bind def}ifelse
+ /cmyk{setcmykcolor}bind def /cmyk@{setcmykcolor}bind def
+ /sethalftone where{/sethalftone load /tone exch def}if
+ /xycolarray 3 array def /xycolstore{currentrgbcolor 2 -1 0
+ {exch xycolarray 3 1 roll put}for}def xycolstore
+ /xycolor{0 1 2{xycolarray exch get}for setrgbcolor}def
+ /xypatt{}def /xypattern{cleartomark}bind def
+ end}%
+\PSdict@@{end end}%
+\endgroup%
+\endinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyps-ps.tex b/macros/generic/diagrams/xypic/texinputs/xyps-ps.tex
new file mode 100644
index 0000000000..5fa607c10e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyps-ps.tex
@@ -0,0 +1,280 @@
+%% xyps-ps.tex from $Id: xyps-ps.doc,v 3.12 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``PS-PS'' PostScript support.
+%% Copyright (c) 1993-1997 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+%% As a special exception, you may use this file and all files derived
+%% from it without restrictions. This special exception was added with
+%% version 3.7 of Xy-pic.
+%%
+\expandafter\ifx\csname xyps-psloaded\endcsname\empty
+ \message{not reloaded}\endinput \fi
+\expandafter\let\csname xyps-psloaded\endcsname=\empty \xycatcodes
+\xylet@\PSmacro@@=\eat@
+\xylet@\PSdict@@=\eat@
+\xylet@\PSspecial@@=\eat@
+\xylet@\PSread@@=\eat@
+\xylet@\PSinclude@@=\eat@
+\xylet@\PSraw@@=\eat@
+\xylet@\xyPSobeylines@@=\relax
+\xylet@\PSspecialdict@@=\eat@
+\xydef@\UnloadPSps@{%
+ \let\PSmacro@@=\eat@
+ \let\PSdict@@=\eat@
+ \let\PSspecial@@=\eat@
+ \let\PSread@@=\eat@
+ \let\PSinclude@@=\eat@
+ \let\PSraw@@=\eat@
+ \let\xyPSobeylines@@=\relax
+ \let\PSspecialdict@@=\eat@
+}
+\xydef@\UnloadPS@{\UnloadPSps@
+ \expandafter\ifx\csname xypsloaded\endcsname\unknown\PSspecials@false
+ \else\expandafter\NoPSspecials\fi}
+\xylet@\UnloadPS@@=\UnloadPS@
+\ifx\undefined\dvitype@\xydef@\dvitype@{null}\fi
+\xylet@\xyrealshipout@=\shipout
+\xydef@\xyPSshipout@{\setbox9=\copy\voidb@x
+ \afterassignment\xyPSshipout@i\setbox9=}
+\xydef@\xyPSshipout@i{\ifvoid9 \expandafter\aftergroup\fi\xyPSshipout@ii}
+\xydef@\xyPSshipout@ii{\xyrealshipout@\vbox{\XYpredict@@\box9}}
+\xydef@\@PSshipout{\global\let\shipout=\xyPSshipout@ }
+\xydef@\xyPSshipout@PSii{%
+ \ifUsePSdict@@\let\XYshipdict@=\includeXYPSdict@@
+ \else\def\XYshipdict@{\XYpredict@@\XYdict@@}\fi
+ \xyrealshipout@\vbox{\XYshipdict@\box9}}
+\xydef@\firstPS@{%
+ \global\let\firstPS@@=\relax \global\let\firstPS@=\relax}
+\xylet@\firstPS@@=\firstPS@
+\ifx\undefined\dumpPSdict@@ \xylet@\dumpPSdict@@=\relax \fi
+\xydef@\installxyps@{%
+ \xyinputorelse@{xyps-ps}{\xydrivernoload@{ps-ps}}\xycatcodes
+ \installxyps@@ \installxyps@x }
+\xylet@\installxyps@@=\relax
+\xylet@\setupxyPS@@=\relax
+\xywithoption{ps}{\let\setupxyPS@@=\setupxyPS@}
+\xydef@\installxyps@x{\dumpPSdict@@
+ \ifx\xyrealshipout@\undefined \let\xyrealshipout@=\shipout\fi
+ \ifx \shipout \xyrealshipout@
+ \ifUsePSdict@@ \DN@{\includePSmessage@\includeXYPSdict@\message{>}}%
+ \else \DN@{\XYdict@\endXYdict@}\fi
+ \else \DN@{\let\xyPSshipout@ii=\xyPSshipout@PSii \@PSshipout}\fi
+ \let\firstPS@=\relax \next@
+ \let\XYpredict@=\relax
+ \setupxyPS@@ }
+\let\realinstallxyps@x=\installxyps@x
+\ifx\undefined\AfterBeginDocument
+ \def\installxyps@x{\xysetup@@{\realinstallxyps@x}}%
+\else
+ \def\installxyps@x{\AfterBeginDocument{\realinstallxyps@x}}%
+\fi
+\xydef@\xydefaultdriver@{dvips}
+\xydef@\xyPSdriver#1{\def\xydefaultdriver@{#1}}
+\xydef@\installxyps@orig{\DN@{}%
+ \ifx\xydriversselected@@\empty
+ \DN@{\expandafter\defaultinstallps@\expandafter{\xydefaultdriver@}}%
+ \else \def\do##1{%
+ \expandafter\ifx\csname##1@xy@ps\endcsname\relax
+ \DN@{\defaultinstallps@{##1}}}%
+ \xydriversselected@@
+ \else \DN@##1{}\fi\fi \next@ }
+\xydef@\defaultinstallps@#1#2{%
+ \xywarning@{no driver specified, using #1 }%
+ \xyrequire{#1}\csname #1@xy@ps\endcsname{}}
+\xydef@\null@xy@ps{\installxyps@}
+\xydefcsname@{shape [!...]}#1{%
+ \expandafter\ifx\csname xyps-sloaded\endcsname\empty \DN@{\xyPSescapestyle@{#1}@@}%
+ \else\ifxyPSshapes@\DN@{\xyPSshapechar@{#1}@@}%
+ \else \DN@{\xyPScharwarning@}\fi\fi \next@ }
+\xydefcsname@{shape [psxy]}{\ifxyPSshapes@\DN@{\xyPSpsxy@}%
+ \else \DN@{\xyPScharwarning@}\fi \next@ }
+\xydef@\xyPSpsxy@{%
+ \setboxz@h{\dimen@=\L@p \advance\dimen@-\R@p
+ \dimen@ii=-\U@p \raise\dimen@ii\hbox to\z@{%
+ \kern\dimen@\xyPScurrpt@\kern-\dimen@}\boxz@}}%
+\xydef@\xyPScurrpt@{\ifxyPSshapes@\expandafter\xyPScurrpt@@\fi}
+\xydef@\xyPScurrpt@@@{\PSspecial@@{xyi}\PSraw@@{userdict begin xyx end}}
+\ifx\undefined\xyPScurrpt@@ \xylet@\xyPScurrpt@@=\xyPScurrpt@@@ \fi
+\xywarnifdefined\xyPSshapechar@
+\xywarnifdefined\xyPSsplitshape@
+{\xyuncatcodes \catcode`@=11
+ \gdef\xyPSshapechar@#1@@{\xyPSsplitshape@#1<><>@@}%
+ \gdef\xyPSsplitshape@#1<>#2<>#3@@{\xyPSsplitPS@{#1}{#2}}}
+\xydef@\xyPSrawA@#1{\expandafter\xyPSrawAA@ #1{}}%
+\xydef@\xyPSrawAA@#1#2{\PSraw@@{{pu #1}xyg #2}%
+ \PSmessage{{pu #1}xyg #2}}%
+\xydef@\xyPSrawZ@#1{\PSraw@@{{#1 pp}xyf}\PSmessage{{#1 pp}xyf}}%
+\xydef@\modPSboxz@{%
+ \expandafter\DN@\expandafter{\xyPSpre@{}}\ifx\next@\empty\else
+ \setboxz@h{\expandafter\xyPSrawA@\expandafter{\xyPSpre@{}}\boxz@
+ \expandafter\xyPSrawZ@\expandafter{\xyPSpost@}}\DN@{}\fi}%
+\xydef@\modPSdrop@{%
+ \expandafter\DNii@\expandafter{%
+ \expandafter\xyPSrawA@\expandafter{\xyPSpre@{}}}%
+ \DN@##1{\expandafter\def\expandafter\tmp@\expandafter{\nextii@ ##1}}%
+ \expandafter\next@\expandafter{\Drop@@}%
+ \expandafter\DNii@\expandafter{%
+ \expandafter\xyPSrawZ@\expandafter{\xyPSpost@}}%
+ \DN@##1{\expandafter\def\expandafter\Drop@@\expandafter{\tmp@ ##1}}%
+ \expandafter\next@\expandafter{\nextii@}}%
+\xydef@\modPSconnect@{%
+ \expandafter\DNii@\expandafter{%
+ \expandafter\xyPSrawA@\expandafter{\xyPSpre@{}}}%
+ \DN@##1{\expandafter\def\expandafter\tmp@\expandafter{\nextii@ ##1}}%
+ \expandafter\next@\expandafter{\Connect@@}%
+ \expandafter\DNii@\expandafter{%
+ \expandafter\xyPSrawZ@\expandafter{\xyPSpost@}}%
+ \DN@##1{\expandafter\def\expandafter\Connect@@\expandafter{\tmp@ ##1}}%
+ \expandafter\next@\expandafter{\nextii@}}%
+\xydef@\xyPSpre@{{}{}}
+\xydef@\xyPSpost@{}
+\xydef@\PSmessage@#1{\W@{PS: #1, direction=\the\Direction}}
+\xydef@\PSignore@#1{}%
+\xydef@\showPSmessages{\let\PSmessage=\PSmessage@}
+\xydef@\hidePSmessages{\let\PSmessage=\PSignore@}
+\xylet@\PStracing=\showPSmessages
+\hidePSmessages
+\xydef@\PSmacro@#1{\PSmacro@@{#1}\PSmessage{#1}}
+\xydef@\includeXYPSdict@@{%
+ \expandafter\PSinclude@@\expandafter{\xyPSdictname}}
+\xydef@\includeXYPSdict@r{\message{PS: includeXYPSdict}\includeXYPSdict@@
+ \let\includeXYPSdict@=\relax}
+\xylet@\includeXYPSdict@\includeXYPSdict@r
+\xydef@\endXYdict@{}
+\xydef@\includePSmessage@@{\message{<xyps: including \xyPSdictname}}
+\xylet@\includePSmessage@=\includePSmessage@@
+\xydef@\xyPSdictknown@{%
+ \immediate\closein\xyread@
+ \xywarning@{File \xyPSdictname\space already exists}
+ \message{ Do you wish to overwrite it \string? y/n }%
+ \read16 to \next
+ \DNii@{\xywarning@{You did not type Y or N -- try again please}%
+ \xyPSdictknown@}%
+ \DN@{Y }\ifx\next@\next \DNii@{\writePSdict@@}%
+ \else\DN@{y }\ifx\next@\next \DNii@{\writePSdict@@}%
+ \else\DN@{n }\ifx\next@\next \DNii@{\cancelPSdict@}%
+ \else\DN@{N }\ifx\next@\next \DNii@{\cancelPSdict@}%
+ \fi\fi\fi\fi \nextii@ }
+\xydef@\cancelPSdict@{%
+ \xywarning@{cancelling dump of PostScript dictionary}}
+\xydef@\noDictmessage@{%
+ \xywarning@{\dvitype@\space does not support the use of a header file}}
+\DN@{\csname newif\endcsname\ifUsePSdict@@\DN@{}}
+ \ifx\undefined\UsePSdict@@true\else\DN@{}\fi \next@
+\ifx\undefined\xyPSdefaultdict
+ \xydef@\xyPSdefaultdict{%
+ \DN@##1.##2.##3@{\gdef\xyPSdictname{xy##1##2dict.pro}}%
+ \expandafter\next@\xyversion.@}%
+\fi
+\ifx\undefined\UsePSheader@
+ \xydef@\UsePSheader@#1{%
+ \DN@{#1}\ifx\next@\empty
+ \else \gdef\xyPSdictname{#1}\fi
+ \ifx\xyPSdictname\undefined\xyPSdefaultdict\fi
+ \gdef\xyHeaderMessage@{%
+ It includes a reference to the PostScript file \xyPSdictname.^^J}%
+ \UsePSdict@@true}%
+ \let\UsePSheader=\UsePSheader@
+\fi
+\xywarnifdefined\xyPS@@
+\xywarnifdefined\xyPS@@@
+{\catcode`|=14 \catcode`\%=12 \catcode`\<=1 \catcode`\>=2 |
+ \gdef\xyPS@@<%%>\gdef\xyPS@@@<%!>}
+\xydef@\writePSdict@@{\message{PS: writePSdict@@}\writePSdict@
+ \def\writePSdict@@{\message{write PS relaxed}}}
+{\catcode`|=14 \catcode`\%=12
+ \gdef\writePSdict@{{\begingroup|
+ \immediate\openout\xywrite@=\xyPSdictname \relax
+ \message{<xyps: dumping \xyPSdictname}|
+ \def\PSdict@@@##1{\immediate\write\xywrite@{##1}}|
+ \let\xyPSobeylines@@=\obeyoutlines@
+ \let\firstPS@@=\relax
+ \let\endXYdict@=\relax
+ \PSdict@@@{\xyPS@@@ PS-Adobe-3.0 Resource-procset}|
+ \PSdict@@@{\xyPS@@ Title: \xyPSdictname}|
+ \PSdict@@@{\xyPS@@ Version: 3.8.9}|
+ \PSdict@@@{\xyPS@@ Creator: Xy-ps backend to Xy-pic}|
+ \PSdict@@@{\xyPS@@ DocumentSuppliedProcSets: XYdict}|
+ \ifx\dvitype@\undefined
+ \PSdict@@@{\xyPS@@ For: use with Xy-pic}\else
+ \PSdict@@@{\xyPS@@ For: \dvitype@ use of Xy-pic}\fi
+ \PSdict@@@{\xyPS@@ BeginResource: procset XYdict}|
+ \def\PSspecialdict@@##1{\PSdict@@@{##1^^J}}|
+ \let\PSdict@@=\PSdict@@@ \let\xy@begindvi=\literal@|
+ \UsePSdict@@false\XYpredict@@|
+ \XYdict@@|
+ \PSdict@@@{\xyPS@@ EndResource}|
+ \immediate\closeout\xywrite@
+ \message{>}|
+ \endgroup}}}
+\xywarnifdefined\obeyoutlines@
+{\catcode`\^^M=\active%
+ \gdef\obeyoutlines@{\catcode`\^^M=\active \def^^M{^^J}%
+ \newlinechar=`\^^J\obeyspaces}}
+\xydef@\XYpredict@@{\ifUsePSdict@@\DN@{}\else
+ \DN@{\xy@begindvi{\xyinputorelse@{xyps-pro}%
+ {\xyerror@{Could not load xyps-pro}{}}\xyuncatcodes}}%
+ \next@
+ \DN@{\xy@begindvi{\xyinputorelse@{xypspatt}%
+ {\xyerror@{Could not load xypspatt}{}}\xyuncatcodes}}\fi
+ \next@ }
+\xydef@\XYpredict@r{\XYpredict@@ \let\XYpredict@=\relax \installxyps@}
+\xylet@\XYpredict@\XYpredict@r
+\xydef@\XYdict@{\XYdict@@\def\XYdict@{\message{PS relaxed}}}%
+\xydef@\XYdict@@{\DN@{\xyinputorelse@{xypsdict}%
+ {\xyerror@{Could not load xypsdict}{}}\xyuncatcodes}%
+ \expandafter\xy@begindvi\expandafter{\next@}}
+\xydef@\forceload@XYdict{%
+ \let\includeXYPSdict@=\includeXYPSdict@r
+ \let\XYpredict@=\XYpredict@r
+ \let\XYdict@=\XYdict@@ \expandafter\installxyps@ }
+\xynew@{if}\ifxyPSshapes@ \xyPSshapes@true
+\xydef@\xyPScharwarning@@{\xyPScharmessage@
+ \gdef\xyPScharwarning@@{\xyPScharmessage@
+ \xywarning@{...no further PostScript warnings will be given}%
+ \global\let\xyPScharwarning@@=\relax }}
+\xydef@\xyPScharmessage@{\xywarning@{%
+ the current <driver> does not fully support PostScript effects}}%
+\xydef@\newxyshape#1#2#3{%
+ \DN@{#3}\ifx\next@\empty
+ \xydefcsname@{shape [#1]}{\csname xyshape@#1@\endcsname}%
+ \else \expandafter\def\csname shape [#1]\endcsname{%
+ \csname xyshape@#1@\endcsname}\fi
+ \DN@{#2}\ifx\next@\empty
+ \expandafter\def\csname xyshape@#1@\endcsname{%
+ \xyundefinedEffect@{#1}{}@@}%
+ \else \expandafter\def\csname xyshape@#1@\endcsname{#2}\fi }
+\xydef@\xyundefinedEffect@#1#2@@{%
+ \xywarning@{The #1 #2 effect is not implemented with the current driver}}%
+\xydef@\newxyPSshape#1#2{%
+ \expandafter\DN@\expandafter{\csname shape [#1]\endcsname}%
+ \DNii@{\relax}\ifx\next@\nextii@ \newxyshape{#1}{}\relax\fi
+ \expandafter\DNii@\expandafter{\csname xyPSshape@#1@\endcsname}%
+ \expandafter\def\nextii@{#2}%
+ \ifx\nextii@\empty\expandafter\def\next@{\xyPSnotimplemented@@`#1'@@}%
+ \else
+ \edef\tmp@{\noexpand\let\expandafter\noexpand\next@
+ \expandafter\noexpand\nextii@}%
+ \expandafter\tmp@\fi }
+\xydef@\xyPSnotimplemented@@#1@@{%
+ \xywarning@{This PostScript effect is not implemented yet}}%
+\xydef@\xyPSnotfinished@@{%
+ \xywarning@{This effect is not reliable yet; box sizes may be wrong}}%
+\endinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyps-r.tex b/macros/generic/diagrams/xypic/texinputs/xyps-r.tex
new file mode 100644
index 0000000000..c862790063
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyps-r.tex
@@ -0,0 +1,61 @@
+%% xyps-r.tex from $Id: xyps-r.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``PostScript Rotations and Scaling''.
+%% Copyright (c) 1993-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+%% As a special exception, you may use this file and all files derived
+%% from it without restrictions. This special exception was added with
+%% version 3.7 of Xy-pic.
+%%
+\expandafter\ifx\csname xyps-rloaded\endcsname\empty
+ \message{not reloaded}\endinput \fi
+\expandafter\let\csname xyps-rloaded\endcsname=\empty \xycatcodes
+\expandafter\ifx\csname xyps-sloaded\endcsname\empty\else
+ \xyinputorelse@{xyps-s}{\xyerror@{Could not load xyps-s}{}}%
+ \xycatcodes\fi
+\xydef@\installPSrotscale@{\installPSstyle@
+ \let\xyRotate@@=\xyPSrotate@@
+ \let\doSpecialRotate@@=\doPSspecialRotate@@
+ \let\xyscale@@=\xyPSscale@@
+ \xyPSshapes@true
+ \xyuncatcodes }
+\xydef@\UsePSrotate{\installPSrotscale@}
+\xydef@\NoPSrotate{\UnloadRotate@\relax}
+\xydef@\xyPSpretransform@{\xyPSrawA@{\preXYtransform@@}}
+\xydef@\xyPSposttransform@{\xyPSrawZ@{\postXYtransform@@}}
+\let\preXYtransform@=\xyPSpretransform@
+\let\postXYtransform@=\xyPSposttransform@
+\xydef@\xyPSrotSplit@{%
+ \expandafter\def\expandafter\preShape@@\expandafter{\xyPSpre@}%
+ \expandafter\def\expandafter\postShape@@\expandafter{\xyPSpost@}}
+\xydef@\xyPSscale@@#1#2{%
+ \xyPSsplitPS@{\xyscale@start(#1,#2)}{\xyscale@end}%
+ \xyPSrotSplit@\xyPSpsxy@ }
+\xydef@\xyPSrotate@@#1{%
+ \xyPSsplitPS@{\xyrot@start(#1 xyd)}{\xyrot@end}%
+ \xyPSrotSplit@\xyPSpsxy@ }
+\xydef@\xyPSspecialRotate@#1{%
+ \xyPSsplitPS@{\xyrot@start(#1)}{\xyrot@end}\xyPSrotSplit@\xyPSpsxy@ }
+\xydef@\doPSspecialRotate@@#1@@{\xyPSspecialRotate@{#1}}
+\xydef@\xyRotScale@@{%
+ \def\xyrot@start(##1){{xyt ##1\space xyr}}%
+ \def\xyscale@start(##1,##2){{xyt ##1\space##2\space xys}}%
+ \def\xyrot@end{}\def\xyscale@end{}}
+\endinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyps-s.tex b/macros/generic/diagrams/xypic/texinputs/xyps-s.tex
new file mode 100644
index 0000000000..45f2299a8e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyps-s.tex
@@ -0,0 +1,51 @@
+%% xyps-s.tex from $Id: xyps-s.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Style extension'' PostScript support.
+%% Copyright (c) 1995-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+%% As a special exception, you may use this file and all files derived
+%% from it without restrictions. This special exception was added with
+%% version 3.7 of Xy-pic.
+%%
+\expandafter\ifx\csname xyps-sloaded\endcsname\empty
+ \message{not reloaded}\endinput \fi
+\expandafter\let\csname xyps-sloaded\endcsname=\empty \xycatcodes
+\xydef@\xykillstyles@@{\Unloadstyle@}%
+\xywarnifdefined\xyPSescapestyle@
+\xywarnifdefined\xyPSsplitescape@
+{\xyuncatcodes \catcode`@=11
+ \gdef\xyPSescapestyle@#1@@{\xyPSsplitescape@#1<><>@@}%
+ \gdef\xyPSsplitescape@#1<>#2<>#3@@{\xyescape@@{#1}{#2}}}
+\xydef@\xyPSsplitPS@#1#2{%
+ \def\xyPSpre@{#1}\def\xyPSpost@{#2}\modPSboxz@ }
+\xydef@\xyescape@@#1#2{\checkXyStyle@
+ \applyFIFOstyle@\prexyescape@{#1}\postxyescape@{#2}}
+\xydef@\prexyescape@{\xyescapeSpecial@}
+\xydef@\postxyescape@{\xyescapeSpecial@}
+\xylet@\xyescapeSpecial@=\eat@
+\let\xyescapeSpecial@=\addtostyletoks@
+\xydef@\installPSstyle@{%
+ \def\preXYstyle@@{\xyPSpre@}%
+ \let\xydoprestyles@=\xyPSrawstyleA@
+ \let\xydopoststyles@=\xyPSrawZ@
+ \let\xykillstyles@=\xykillstyles@@
+ }
+\xydef@\xyPSrawstyleA@#1{\xyPSrawA@{{#1}{}}}
+\endinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyps-t.tex b/macros/generic/diagrams/xypic/texinputs/xyps-t.tex
new file mode 100644
index 0000000000..cfb7cce2d7
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyps-t.tex
@@ -0,0 +1,64 @@
+%% xyps-t.tex from $Id: xyps-t.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Pattern and Tile extension'' PostScript support.
+%% Copyright (c) 1993-1997 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+%% As a special exception, you may use this file and all files derived
+%% from it without restrictions. This special exception was added with
+%% version 3.7 of Xy-pic.
+%%
+\expandafter\ifx\csname xyps-tloaded\endcsname\empty
+ \message{not reloaded}\endinput \fi
+\expandafter\let\csname xyps-tloaded\endcsname=\empty \xycatcodes
+\expandafter\ifx\csname xyps-sloaded\endcsname\empty\else
+ \xyinputorelse@{xyps-s}{\xyerror@{Could not load xyps-s}{}}%
+ \xycatcodes\fi
+\xydef@\installPSpatterns@{\installPSstyle@
+ \let\xypattern@=\xyPSpattern@@
+ \let\xypatternwarning@=\relax
+ \xystandardpatterns@
+ \xyuncatcodes }
+\xylet@\UnloadPSpatterns@=\Unloadpattern@
+\xydef@\UsePStiles{\installPSpatterns@}
+\xydef@\NoPStiles{\UnloadPSpatterns@\relax}
+\xydef@\xyPSnewpattern@#1#2#3#4#5{%
+ \expandafter\DN@\expandafter{\csname shape [#1]\endcsname}%
+ \DNii@{\relax}\ifx\next@\nextii@\newxypattern{#1}{}\relax\fi
+ \DNii@{#4}\ifx\nextii@\empty
+ \expandafter\DNii@\expandafter{\csname xyPSshape@#1@\endcsname}%
+ \expandafter\def\nextii@{\xyPSpattern@{#2 #3}}\else
+ \expandafter\DNii@\expandafter{\csname xyPSshape@#1@\endcsname}%
+ \expandafter\def\nextii@{\xyPSpattern@{#4}}\fi
+ \ifx\nextii@\empty\expandafter\def\next@{\xyPSnotimplemented@@`#1'@@}%
+ \else
+ \edef\tmp@{\noexpand\let\expandafter\noexpand\next@
+ \expandafter\noexpand\nextii@}\expandafter\tmp@\fi }
+\xydef@\xyPSpattern@{\ifPSspecials@\expandafter\xyPSpattern@@
+ \else\expandafter\eat@\fi}%
+\xydef@\xyPSpattern@@#1{\bgroup \checkXyStyle@
+ \def\preStyle@@{\expandafter\addtostyletoks@\expandafter{\xyPSpre@}}%
+ \def\postStyle@@{\expandafter\addtostyletoks@\expandafter{\xyPSpost@}}%
+ \let\modPSboxz@=\modXYstyle@ \xyPS@pattern@@{#1}%
+ \toks@={\egroup\let\xy@style@=\relax \def\Drop@@}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\Drop@@}\def\Connect@@}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\Connect@@}}%
+ \the\toks@ }
+\xydef@\xyPS@pattern@@#1{\xyPSsplitPS@{{#1}sp}{}}
+\endinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyps.tex b/macros/generic/diagrams/xypic/texinputs/xyps.tex
new file mode 100644
index 0000000000..09a3536924
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyps.tex
@@ -0,0 +1,367 @@
+%% xyps.tex from $Id: xyps.doc,v 3.12 2011/05/27 04:51:17 krisrose Exp $
+%%
+%% Xy-pic ``PostScript backend''.
+%% Copyright (c) 1993-1997 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+%% As a special exception, you may use this file and all files derived
+%% from it without restrictions. This special exception was added with
+%% version 3.7 of Xy-pic.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{ps}{PostScript backend}{\stripRCS$Revision: 3.12 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xydef@\UsePSspecials{\DNii@{{[4]}}\xyFN@\UsePSspecials@i}
+\xydef@\UsePSspecials@i{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\UsePSspecials@i}%
+ \else\ifx [\next \DN@[##1]{\DNii@{{[##1]}}\xyFN@\UsePSspecials@i}%
+ \else\ifcat 5\noexpand\next \DN@##1{\DNii@{{[##1]}}\xyFN@\UsePSspecials@i}%
+ \else\ifx\bgroup\next \DN@{\expandafter\UsePS@specials\nextii@}%
+ \else \DN@{\UsePS@specials{[4]}}%
+ \fi\fi\fi\fi \next@ }
+\xydef@\UsePS@specials#1#2{%
+ \ifx\empty\whichPSspecials@
+ \DN@{#2}\ifx\next@\empty
+ \else
+ \expandafter\let\expandafter\next\csname#2@\endcsname
+ \ifx\next\relax \DN@{\UsePSspecials@{#2}{}}%
+ \else \DN@{\UsePSspecials@{#2}{#1}}\fi
+ \fi
+ \else
+ \DN@{#2}\ifx\next@\empty \DN@{\PSspecials@true}%
+ \else
+ \DN@{#2}%
+ \edef\nextii@{\expandafter\string\whichPSspecials@}%
+ \ifx\next@\nextii@\DN@{\PSspecials@true}%
+ \else
+ \ifx\firstPS@@\relax
+ \DN@{\xyerror@{Only one PS <driver> allowed: \dvitype@ already loaded}{}}%
+ \else
+ \expandafter\let\expandafter\next\csname#2@\endcsname
+ \ifx\next\relax
+ \DN@{\xyerror@{PostScript specials for `#2' not supported}{}}%
+ \else
+ \xywarning@{Changing PS <driver> to #2 }%
+ \DN@{\UsePSspecials@{#2}{#1}}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi \next@}
+\xydef@\UseDVIPSspecials{\UsePSspecials@\dvips@}
+\xydef@\UseTexturesPSspecials{\UsePSspecials@\Textures@}
+\xydef@\UseTexturesSpecials{\UsePSspecials@\Textures@}
+\xydef@\UsePostScriptSpecials{\UsePSspecials@\dvips@}
+\xydef@\UseOzTeXspecials{\UsePSspecials@\OzTeX@}
+\xydef@\UseDVITOPSspecials{\UsePSspecials@\dvitops@}
+\message{drivers,}
+\xydef@\loadPSdriver@#1#2{\xyinputorelse@{xy#1}%
+ {\xyrequire{#2}\expandafter\ifx\csname xy#2loaded\else
+ {\xyerror@{Unable to load xy#1.tex for #2 driver}{}}\fi}}
+\xydef@\dvips@{\loadPSdriver@{ps-dvi}{dvips}}
+\xydef@\Textures@{\loadPSdriver@{ps-txt}{Textures}}
+\xydef@\OzTeX@{\loadPSdriver@{ps-oz}{OzTeX}}
+\xydef@\dvitops@{\loadPSdriver@{ps-dto}{dvitops}}
+\xydef@\dvipsone@{\loadPSdriver@{ps-one}{dvipsone}}
+\global\newif\ifPSspecials@
+\xydef@\UsePSspecials@#1{\def\whichPSspecials@{#1}%
+ \DN@{\Textures@}\ifx\next@\whichPSspecials@
+ \DN@##1{\xyrequire{textures}%
+ \def\whichPSspecials@{textures}\xyps@options}%
+ \else\DN@{\dvips@}\ifx\next@\whichPSspecials@
+ \DN@##1{\xyrequire{dvips}%
+ \def\whichPSspecials@{dvips}\xyps@options}%
+ \else\DN@{\OzTeX@}\ifx\next@\whichPSspecials@
+ \DN@##1{\xyrequire{oztex}%
+ \def\whichPSspecials@{oztex}\xyps@options}%
+ \else\DN@{\dvitops@}\ifx\next@\whichPSspecials@
+ \DN@##1{\xyrequire{dvitops}%
+ \def\whichPSspecials@{dvitops}\xyps@options}%
+ \else
+ \DN@##1{\xyrequire{ps}\xyrequire{#1}\xyps@options}%
+ \fi\fi\fi\fi \next@ }
+\xydef@\xyps@options{%
+ \xyrequire{ps}\xyrequire{line}\xyrequire{color}\xyrequire{crayon}%
+ \xyrequire{rotate}\xyrequire{tile}\xyrequire{frame}\xyuncatcodes }
+\xydef@\whichPSspecials@{}
+\xydef@\NoPSspecials{\xyPSwarning@{off}%
+ \PSspecials@false\aftergroup\resetPS@}
+\xydef@\resetPS@{\ifPSspecials@\xyPSwarning@{back on}\fi}
+\xydef@\UsePSspecials@x{\PSspecials@true\resetPS@}
+\xydef@\xyPSwarning@#1{\xywarning@{PostScript switched #1}}
+\xyaddunsupport{ps}{\csname UnloadPS@@\endcsname}
+\xydef@\PSspecials@{%
+ \ifx\next[\DN@[##1]{\setxyPSlevel@{##1}\xyFN@\PSspecials@}%
+ \else\DN@{\whichPSspecials@\PSspecials@@}%
+ \fi \next@ }%
+\xydef@\PSspecials@@{%
+ \ifx\und@fined\PSmessage\hidePSmessages\fi \setupxyPS@}
+\xydef@\setupxyPSlevelO@{\relax}
+\xydef@\setxyPSlevel@#1{\ifcase#1%
+ \gdef\setupxyPS@{\setupxyPSlevelO@}%
+ \or\gdef\setupxyPS@{\setupxyPSlevelA@}%
+ \or\gdef\setupxyPS@{\setupxyPSlevelB@}%
+ \or\gdef\setupxyPS@{\setupxyPSlevelC@}%
+ \or\gdef\setupxyPS@{\setupxyPSlevelD@}%
+ \else\gdef\setupxyPS@{\setupxyPSlevelD@}\fi }
+\xywarnifdefined\setupxyPS@
+ \gdef\setupxyPS@{\setupxyPSlevelD@ \gdef\setupxyPS@{\PSspecials@true}}
+\xydef@\PSincrease@#1{%
+ \xywarning@{The PS level may only increase: #1 is already active}}
+\DN@{\csname newif\endcsname\ifUsePSdict@@\DN@{}}
+ \ifx\undefined\UsePSdict@@true\else\DN@{}\fi \next@
+\ifx\undefined\xyPSdefaultdict
+ \xydef@\xyPSdefaultdict{%
+ \DN@##1.##2.##3@{\gdef\xyPSdictname{xy##1##2dict.pro}}%
+ \expandafter\next@\xyversion.@}%
+\fi
+\ifx\undefined\UsePSheader@
+ \xydef@\UsePSheader@#1{%
+ \DN@{#1}\ifx\next@\empty
+ \else \gdef\xyPSdictname{#1}\fi
+ \ifx\xyPSdictname\undefined\xyPSdefaultdict\fi
+ \gdef\xyHeaderMessage@{%
+ It includes a reference to the PostScript file \xyPSdictname.^^J}%
+ \UsePSdict@@true}%
+ \let\UsePSheader=\UsePSheader@
+\fi
+\xydef@\dumpPSdict#1{\DN@{#1}\ifx\next@\empty
+ \ifx\undefined\xyPSdictname\xyPSdefaultdict\fi
+ \else\gdef\xyPSdictname{#1}\fi
+ \def\dumpPSdict@@{\writePSdict@@}%
+ \ifx\xydriversselected@@\empty\DN@{\xysetup@@\null@xy@ps}%
+ \else \DN@{\installxyps@x}\fi \next@}
+\message{hooks,}
+\gdef\xyPSalternative@#1#2{%
+\expandafter\global\expandafter\let\csname origxy#2@\endcsname=#1%
+ \xdef#1{\noexpand\ifPSspecials@
+ \noexpand\expandafter\expandafter\noexpand\csname xyPS#2@\endcsname
+ \noexpand\else
+ \noexpand\expandafter\expandafter\noexpand\csname origxy#2@\endcsname
+ \noexpand\fi}}%
+\xydef@\setupxyPSlevelA@{\xyPStips@%
+ \xyPSalternative@{\Tip@@}{Tip}%
+ \xyPSalternative@{\Ttip@@}{Ttip}%
+ \xyPSalternative@{\Tip@@eu}{Tip@eu}%
+ \xyPSalternative@{\Ttip@@eu}{Ttip@eu}%
+ \xyPSalternative@{\hook@@}{hook}%
+ \xyPSalternative@{\ahook@@}{ahook}%
+ \xyPSalternative@{\bhook@@}{bhook}%
+ \xyPSalternative@{\aturn@@}{aturn}%
+ \xyPSalternative@{\bturn@@}{bturn}%
+ \xyPSalternative@{\squiggle@@}{squiggle}%
+ \xyPSalternative@{\stopper@@}{stopper}%
+ \xyPSalternative@{\line@@}{dash}%
+ \xyPSalternative@{\circhar@@}{circhar@}%
+ \gdef\setupxyPSlevelA@{\PSincrease@{1}}%
+ \global\let\UsePSspecials=\UsePSspecials@x \PSspecials@true}
+\xydef@\setupxyPSlevelB@{%
+ \let\xyPSfont@=\empty \let\xyPSsemifont@=\empty
+ \xyPSalternative@{\cirrestrict@@}{cirrest}%
+ \gdef\setupxyPSlevelB@{\PSincrease@{2}}%
+ \setupxyPSlevelA@ }
+\xydef@\setupxyPSlevelC@{%
+ \xyPSalternative@{\cirbuild@}{cirbuild}%
+ \xyPSalternative@{\CIRfull@}{CIRfull}%
+ \xyPSalternative@{\solid@}{solid}%
+ \xyPSalternative@{\point@}{point}%
+ \xywithoption{curve}{%
+ \xyPSalternative@{\splinesolid@}{splinesolid}}%
+ \gdef\setupxyPSlevelC@{\PSincrease@{3}}%
+ \setupxyPSlevelB@ }%
+\xydef@\setupxyPSlevelD@{%
+ \xyPSalternative@{\dash@}{dashed}%
+ \xywithoption{curve}{%
+ \xyPSalternative@{\splinedashed@}{splinedashed}%
+ \xyPSalternative@{\splinedotted@}{splinedotted}}%
+ \gdef\setupxyPSlevelD@{}%
+ \setupxyPSlevelC@ }
+\xydef@\xyPSchar@#1{%
+ \PSmacro@{\the\Direction\space \xyPSfont@ #1}}
+\xydef@\xyPSsemichar@#1{%
+ \PSmacro@{\the\Direction\space \xyPSsemifont@ #1}}
+\xydef@\xyPSfont@{f }%
+\xydef@\xyPSsemifont@{fs }%
+\xydef@\xyPStip@{\xyPSchar@{t}}%
+\xydef@\xyPSTip@{\xyPSchar@{/XT tt}}%
+\xydef@\xyPSTtip@{\setboxz@h\bgroup
+ \reverseDirection@\line@ \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@
+ \kern-\L@c \boxz@ \kern\L@c \xyPSchar@{/Xt tT}}%
+\xydef@\xyPSTip@eu@{\xyPSchar@{/ET tt}}%
+\xydef@\xyPSTtip@eu@{\setboxz@h\bgroup
+ \reverseDirection@\line@ \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@
+ \kern-\L@c \boxz@ \kern\L@c \xyPSchar@{/ET tT}}%
+\xydef@\xyPScm@\tip@x{\xyFN@\xyPScm@@}%
+\xydef@\xyPScm@@{%
+ \ifx\next\tip@@ \DN@\tip@@{\tip@x\xyPScmtip@}%
+ \else\ifx\next\atip@@ \DN@\atip@@{\tip@x\xyPScmatip@}%
+ \else\ifx\next\btip@@ \DN@\btip@@{\tip@x\xyPScmbtip@}%
+ \else\DN@{}%
+ \fi\fi\fi \next@}%
+\xydef@\xyPScmtip@{\xyPSchar@{ct}}%
+\xydef@\xyPScmatip@{\xyPSchar@{ca}}%
+\xydef@\xyPScmbtip@{\xyPSchar@{cb}}%
+\xydef@\xyPStips@{%
+ \xyPSalternative@{\atip@@}{atip}%
+ \xyPSalternative@{\btip@@}{btip}%
+ \xyPSalternative@{\tip@@}{abtip}%
+}%
+\xydef@\xyPSatip@{\xyPSwhichatip@
+ \expandafter\xyPSchar@\expandafter{\xyPSfont@@}}%
+\xydef@\xyPSbtip@{\xyPSwhichbtip@
+ \expandafter\xyPSchar@\expandafter{\xyPSfont@@}}%
+\xydef@\xyPSabtip@{\xyPSwhichabtip@
+ \expandafter\xyPSchar@\expandafter{\xyPSfont@@}}%
+\xydef@\xyPSwhichatip@{\ifx\xyatipfont\xy@@atfont
+ \expandafter\xyPSatip@i \else\def\xyPSfont@@{10 /xy A}\fi }%
+\xydef@\xyPSwhichbtip@{\ifx\xybtipfont\xy@@btfont
+ \expandafter\xyPSbtip@i \else\def\xyPSfont@@{10 /xy B}\fi }%
+\xydef@\xyPSwhichabtip@{\ifx\xyatipfont\xy@@atfont
+ \expandafter\xyPSabtip@i \else\def\xyPSfont@@{10 /xy AB}\fi }%
+\xydef@\xyPSatip@i{%
+ \edef\xyPSfont@@{\tipsize@@\space/\tipfamily@@\space A}}
+\xydef@\xyPSbtip@i{%
+ \edef\xyPSfont@@{\tipsize@@\space/\tipfamily@@\space B}}
+\xydef@\xyPSabtip@i{%
+ \edef\xyPSfont@@{\tipsize@@\space/\tipfamily@@\space AB}}
+\xydef@\xyPSTtips@{%
+ \let\Ttip@xy=\Ttip@
+ \let\Ttip@cm=\Ttip@
+ \let\Ttip@eu=\Ttip@ }
+\xydef@\xyPShook@{\xyPSchar@{h}}%
+\xydef@\xyPSahook@{\xyPSchar@{ha}}%
+\xydef@\xyPSbhook@{\xyPSchar@{hb}}%
+\xydef@\xyPSaturn@{\xyPSchar@{ta}}%
+\xydef@\xyPSbturn@{\xyPSchar@{tb}}%
+\xydef@\xyPSsquiggle@{\xyPSchar@{g}}%
+\xydef@\xyPSstopper@{\xyPSchar@{st}}%
+\xydef@\xyPSfliptrue@{\DN@{\xyPSsemichar@{T d}}}
+\xydef@\xyPSdash@{%
+ \DN@{\xyPSsemichar@{F d}}%
+ \ifnum\SemiDirectionChar=31
+ \ifdim\d@Y<\z@
+ \ifdim\d@X<\z@ \ifx\xyPSsemifont@\empty\xyPSfliptrue@\fi\fi
+ \else
+ \ifdim\z@>\d@X
+ \ifx\xyPSsemifont@\empty\else\xyPSfliptrue@\fi
+ \else\xyPSfliptrue@\fi
+ \fi\fi
+ \next@ \setboxz@h{\origxydash@}\kern\wdz@
+ \setbox\z@=\box\voidb@x }
+\xydef@\xyPScirchar@#1{\count@=#1\edef\tmp@{\the\count@}%
+ \ifcase#1%
+ \xyPScirchar@@@{-180}{-135}{\tmp@}\dimen@=\partroottwo\R@
+ \or\xyPScirchar@@@{-135}{-90}{\tmp@}\dimen@=\halfroottwo\R@
+ \or\xyPScirchar@@@{-90}{-45}{\tmp@}\dimen@=\halfroottwo\R@
+ \or\xyPScirchar@@@{-45}0{\tmp@}\dimen@=\partroottwo\R@
+ \or\xyPScirchar@@@0{45}{\tmp@}\dimen@=\partroottwo\R@
+ \or\xyPScirchar@@@{45}{90}{\tmp@}\dimen@=\halfroottwo\R@
+ \or\xyPScirchar@@@{90}{135}{\tmp@}\dimen@=\halfroottwo\R@
+ \or\xyPScirchar@@@{135}{180}{\tmp@}\dimen@=\partroottwo\R@
+ \fi}
+\xydef@\xyPScirrest@{\relax}%
+\xydef@\xyPScirchar@@#1{\relax\count@=#1\edef\tmp@{\the\count@}%
+ \expandafter\xyPScirchar@@@\ifcase#1%
+ {-180}{-135}{\tmp@}\kern\partroottwo\R@
+ \or{-135}{-90}{\tmp@}\kern\halfroottwo\R@
+ \or{-90}{-45}{\tmp@}\kern\halfroottwo\R@
+ \or{-45}0{\tmp@}\kern\partroottwo\R@
+ \or 0{45}{\tmp@}\kern\partroottwo\R@
+ \or{45}{90}{\tmp@}\kern\halfroottwo\R@
+ \or{90}{135}{\tmp@}\kern\halfroottwo\R@
+ \or{135}{180}{\tmp@}\kern\partroottwo\R@
+ \fi}
+\xydef@\xyPScirchar@@@#1#2#3{\edef\tmp@{#1\space#2\space
+ \expandafter\removePT@\the\R@\space #3\space c}%
+ \PSmacro@{\tmp@}}
+\xydef@\xyPScirc@#1#2{\edef\tmp@{\expandafter\removePT@\the\R@}%
+ \PSmacro@{\tmp@\space #1 #2 o}}
+\xydef@\xyPSCIRfull@{\setboxz@h{\kern\R@\xyPScirc@0{360}\kern\R@}%
+ \wd\z@=\z@ \ht\z@=\R@ \dp\z@=\R@ \boxz@}%
+\xydef@\xyPScirbuild@{{%
+ \count@=\CIRlo@@ \count@@=\CIRhi@@
+ \multiply\count@ by45 \advance\count@-180 \relax
+ \multiply\count@@ by45 \advance\count@@-180 \relax
+ \def\tmp@{}%
+ \ifx\CIRtest@@\CIRtest@inside
+ \ifnum\count@@>\count@
+ \edef\tmp@{\noexpand\xyPScirc@{\the\count@}{\the\count@@}}\fi
+ \else\ifx\CIRtest@@\CIRtest@outside
+ \ifnum\count@>-180 \advance\count@ by360 \relax
+ \edef\tmp@{\noexpand\xyPScirc@{\the\count@@}{\the\count@}}%
+ \else
+ \ifnum\count@@<180 \relax
+ \edef\tmp@{\noexpand\xyPScirc@{\the\count@@}{180}}%
+ \fi\fi
+ \fi\fi
+ \kern\R@\tmp@\kern\R@}}
+\xydef@\xyPSstraight@#1{\setupDirection@
+ \edef\Creset@@{\cfromthec@ \pfromthep@ \DirectionfromtheDirection@}%
+ \DN@##1##2{\def\checkoverlap@@{%
+ \ifdim##1\X@p>##1\X@c \let\next@=\relax \fi
+ \ifdim##2\Y@p>##2\Y@c \let\next@=\relax \fi}}%
+ \edef\nextii@{{\sd@X}{\sd@Y}}\expandafter\next@\nextii@
+ \noCshavep@@
+ \edef\Cshavep@@{\pfromthep@ \noexpand\resetDirection@}%
+ \noCshavec@@
+ \edef\Cshavec@@{\cfromthec@ \noexpand\resetDirection@}%
+ \ifHidden@\else
+ \ifdim\Y@c>\Y@max \Y@max=\Y@c \fi \ifdim\Y@p>\Y@max \Y@max=\Y@p \fi
+ \ifdim\Y@c<\Y@min \Y@min=\Y@c \fi \ifdim\Y@p<\Y@min \Y@min=\Y@p \fi
+ \ifdim\X@c>\X@max \X@max=\X@c \fi \ifdim\X@p>\X@max \X@max=\X@p \fi
+ \ifdim\X@c<\X@min \X@min=\X@c \fi \ifdim\X@p<\X@min \X@min=\X@p \fi \fi
+ \ifInvisible@\let\next@=\relax \else
+ \DN@{\setboxz@h{\kern\X@c \raise\Y@c\hbox{#1}}%
+ \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@ {\xykillstyles@\Drop@@}}%
+ \fi
+ \checkoverlap@@
+ \ifdim\d@X=\z@ \ifdim\d@Y=\z@ \DN@{\relax}\fi\fi \next@
+ \def\Cslidep@@{\noCslidep@@}\def\Cslidec@@{\noCslidec@@}%
+ \def\Calong@@{\noCalong@@}\Creset@@ }
+\xylet@\xykillstyles@=\relax
+\xydef@\xyPSsolid@{\straight@\xyPSsolidSpread@}%
+\xydef@\xyPSsolidSpread@{\xyPSspread@{solid}{l}@@}%
+\xydef@\xyPSdottedSpread@{\xyPSspread@{dotted}{dt}@@}%
+\xydef@\xyPSdashed@{\line@ \def\Connect@@{\straight@\xyPSdashedSpread@}}
+\xydef@\xyPSdashedSpread@{\xyPSspread@{dashed}{dd}@@}%
+\xydef@\xyPSspread@#1#2@@#3\repeat@{\edef\tmp@{%
+ \expandafter\removePT@\the\d@X\space\expandafter\removePT@\the\d@Y}%
+ \setboxz@h{\kern\X@c \raise\Y@c\hbox{%
+ \PSmessage{#1 line:}\PSmacro@{\tmp@\space #2}}}%
+ \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@ \boxz@}
+\xydef@\xyPSpoint@{\xyPSzerodot@\egroup
+ \Invisible@false \Hidden@false \def\Leftness@{.5}\def\U@pness@{.5}\ctipEdge@
+ \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@\xyPSdottedSpread@}}
+\xydef@\xyPSzerodot@{\PSmessage{dot:}\PSmacro@{p}}
+\xydef@\xyPScubic@#1{\readsplineparams@
+ \PSmessage{CUBIC:}%
+ \DN@{#1}\ifx\next@\empty\PSmacro@{mark \cubicinfo@\space bz}%
+ \else\PSmacro@{mark \cubicinfo@\space b#1}\fi}
+\xydef@\xyPSsquine@#1{\readsplineparams@
+ \PSmessage{SQUINE:}%
+ \DN@{#1}\ifx\next@\empty\PSmacro@{mark \squineinfo@\space q#1}%
+ \else\PSmacro@{mark \squineinfo@\space q#1}\fi}
+\xydef@\xyPSsplinesolid@{\ifx\splineinfo@\squineinfo@
+ \expandafter\xyPSsquine@\else\expandafter\xyPScubic@\fi{}}
+\xydef@\xyPSsplinedashed@{\ifx\splineinfo@\squineinfo@
+ \expandafter\xyPSsquine@\else\expandafter\xyPScubic@\fi{d}}
+\xydef@\xyPSsplinedotted@{\ifx\splineinfo@\squineinfo@
+ \expandafter\xyPSsquine@\else\expandafter\xyPScubic@\fi{t}}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xypsdict.tex b/macros/generic/diagrams/xypic/texinputs/xypsdict.tex
new file mode 100644
index 0000000000..0d949b0cdf
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xypsdict.tex
@@ -0,0 +1,241 @@
+%% xypsdict.tex from $Id: xypsdict.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``PostScript backend prolog''.
+%% Copyright (c) 1995-1997 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+%% As a special exception, you may use this file and all files derived
+%% from it without restrictions. This special exception was added with
+%% version 3.7 of Xy-pic.
+\begingroup \xycatcodes%
+ \count@=\xydashl@\relax \count@@=\xydashw@\relax%
+ \XYpredict@\relax \xycatcodes \xyPSobeylines@@%
+\PSdict@@{/XYdict where pop begin XYdict begin}%
+\PSdict@@{%
+ /xysize 10 def /T true def /F false def
+ /dimendiv{65536 div}bind def
+ /xysegl \number\count@\space dimendiv def
+ /xyopp{1 -1 scale}bind def
+ /xynormwidth{\number\count@@\space dimendiv pscorrect}bind def
+ /xywidth{xynormwidth setlinewidth}bind def
+}%
+\PSdict@@{%
+ /xyfont{4096 add 64 div round 64 mul 4096 sub}def /xydt 0.01 def
+ /xysdfont{4096 add 32 div round 32 mul 4096 sub}def
+ /xydots{xywidth 1 setlinecap [xydt 2] 0 setdash}bind def
+ /f /xyfont load def /fs /xysdfont load def}%
+\PSdict@@{%
+ /xyCheckDir{dup 8 div 3 mul 3 -1 roll sub neg exch div 360 mul
+ dup dup XYdirection sub 180 div round 180 mul XYdirection add
+ dup 3 -1 roll sub abs 10 gt not{exch}if pop}def
+}%
+\ifdim\xydashw@=0pt\xydashw@=.4pt\fi\count@@=\xydashw@\relax%
+\PSdict@@{%
+ /xyrulth{\number\count@@\space dimendiv pscorrect setlinewidth
+ 0 setlinecap}bind def
+}%
+\PSdict@@{%
+ /gsavexy{gsave xypspt XYdirection rotate xywidth newpath 0 0 moveto}def
+ /gchksavexy{gsave xypspt setupDirection xywidth newpath 0 0 moveto}def
+}%
+\PSdict@@{%
+ /xyswap{XYdirection 180 add /XYdirection exch def}def
+ /xyline{gstartxy setupDirection rlineto xystroke}def
+}%
+\PSdict@@{%
+ /dash{exch gchksavexy xysegl XYdirection dup
+ -90 lt{pop neg}{90 gt{neg}if}ifelse exch{neg}if
+ 0 rlineto xystroke}def
+ /stopper{gstartxy setupDirection 0 xysegl 2 div rmoveto
+ 0 xysegl neg rlineto xystroke }def
+ /d /dash load def /st /stopper load def}%
+\PSdict@@{%
+ /solid{gstartxy xydash neg exch neg exch rlineto xystroke}def
+ /dashed{gstartxy 2 copy dup mul exch dup mul add sqrt dup
+ xysegl add xysegl 2 mul div round 2 mul 1 sub div [ exch dup ] 0 setdash
+ neg exch neg exch rlineto xystroke}def
+ /l /solid load def /dd /dashed load def}%
+\PSdict@@{%
+ /dot{gstartxy 2 setlinecap [xydt 2] 0 setdash
+ 1 0 rlineto xystroke}def
+ /dotted{gstartxy 2 copy dup mul exch dup mul add sqrt dup
+ 2 div round 1 add div 2 setlinecap [xydt 3 -1 roll] 0 setdash
+ neg exch neg exch rlineto 0 0 rlineto xystroke}def
+ /p /dot load def /dt /dotted load def}%
+\PSdict@@{%
+ /cubic{gstartxy docubic} def
+ /docubic{chkvalid
+ {chkcubedge 8 -2 roll moveto curveto xystroke pop}
+ {cleartomark grestore}ifelse}def
+ /chkcubedge{2 copy 1.0 eq{0.0 eq{pop pop}{cubicedge}ifelse}
+ {pop cubicedge}ifelse}def
+ /bz /cubic load def}%
+\PSdict@@{%
+ /dotcubic{gstartxy 1 setlinecap [xydt 2] 0 setdash docubic}def
+ /dashcubic{gstartxy [5 5] 0 setdash docubic}def
+ /bt /dotcubic load def /bd /dashcubic load def}%
+\PSdict@@{%
+ /squine{gstartxy dosquine}def
+ /dosquine{chkvalid
+ {chksquedge 2 copy moveto xysq2cub curveto xystroke pop}
+ {cleartomark grestore}ifelse}def
+ /q /squine load def}%
+\PSdict@@{%
+ /chkvalid{2 copy lt{dup 1 gt{false}{true}ifelse}{false}ifelse}def
+}%
+\PSdict@@{%
+ /chksquedge{2 copy 1.0 eq{0.0 eq{pop pop}{squineedge}ifelse}
+ {pop squineedge}ifelse}def
+ /xysq2cub{xysq2cubit 6 1 roll xysq2cubit 6 1 roll 3 index 3 index
+ xysq2cubit 6 1 roll xysq2cubit 6 1 roll pop pop}def
+ /xysq2cubit{2 index 2 mul add 3 div}def
+}%
+\PSdict@@{%
+ /dotsquine{gstartxy 1 setlinecap [xydt 2] 0 setdash dosquine}def
+ /dashsquine{gstartxy [5 5] 0 setdash dosquine}def
+ /qt /dotsquine load def /qd /dashsquine load def}%
+\PSdict@@{%
+/xy4mul{8 copy
+ 5 -1 roll mul 5 1 roll 6 -1 roll mul 6 1 roll
+ 3 -1 roll mul exch 4 -1 roll mul 3 1 roll
+ add 3 1 roll add exch 10 2 roll
+ 7 -1 roll mul 7 1 roll 4 -1 roll mul 5 1 roll
+ 4 -1 roll mul 4 1 roll mul add 3 1 roll add
+ exch 3 -1 roll }def
+}%
+\PSdict@@{%
+ /xy44mul{4 copy 16 4 roll exch 3 1 roll 4 copy 12 4 roll
+ xy4mul 12 4 roll xy4mul 12 -4 roll 4 copy 16 4 roll
+ 8 4 roll xy4mul 12 4 roll xy4mul}def
+}%
+\PSdict@@{%
+ /cubicedge{10 2 roll exch 8 1 roll 3 -1 roll dup dup 9 2 roll
+ 5 -1 roll dup dup 9 1 roll 8 3 roll
+ 4 1 roll dup dup 5 3 roll dup dup 5 1 roll 3 -1 roll
+ 18 -2 roll 2 copy 1 sub neg 4 1 roll 1 sub neg exch 4 1 roll
+ xy444mul
+ pop pop pop 13 1 roll pop pop pop 9 1 roll 10 1 roll
+ pop 8 1 roll 7 1 roll 8 1 roll pop 5 1 roll 3 1 roll}def
+}%
+\PSdict@@{%
+ /xy444mul{4 copy 24 4 roll 12 -4 roll 16 4 roll 4 copy 16 4 roll
+ xy44mul 20 8 roll xy44mul
+ 12 -4 roll 4 -1 roll 7 1 roll exch 4 1 roll exch 6 -1 roll exch
+ 4 2 roll 16 8 roll 8 4 roll
+ 4 -1 roll 7 1 roll exch 4 1 roll exch 6 -1 roll exch 4 2 roll
+ 8 4 roll 16 4 roll 8 4 roll 20 -4 roll exch 3 1 roll
+ 4 copy 20 4 roll 4 copy 16 4 roll 4 copy 12 4 roll
+ xy4mul 28 4 roll xy4mul 20 4 roll xy4mul 12 4 roll xy4mul}def
+}%
+\PSdict@@{%
+ /squineedge{8 2 roll
+ exch 5 1 roll 3 -1 roll dup 6 2 roll 1 index exch
+ 10 -2 roll 2 copy 1 sub neg 4 1 roll 1 sub neg exch 4 1 roll
+ xy44mul 4 1 roll pop 5 1 roll 6 1 roll 3 -1 roll pop}def
+}%
+\PSdict@@{%
+ /xyshort{2 copy abs exch abs add xysegl .5 mul lt
+ {pop pop grestore}{rlineto xystroke}ifelse}def
+}%
+\PSdict@@{%
+ /tipwidth{xywidth xynormwidth dup currentlinewidth exch div
+ sqrt dup dup scale mul setlinewidth 1 setlinecap}def
+}%
+\PSdict@@{%
+ /halftip{tipwidth xysize 10 div 0 0 moveto
+ -.25 0 3 -1 roll -2.5 mul 0 xysize 2 div neg
+ dup .62 mul 2 div neg curveto}bind def
+}%
+\PSdict@@{/atip{gchksavexy halftip xystroke}def
+ /btip{gchksavexy xyopp halftip xystroke}def
+ /tip{gchksavexy gsave halftip stroke grestore
+ xyopp halftip xystroke}def
+ /t /tip load def /a /atip load def /b /btip load def}%
+\PSdict@@{/cmatip{gchksavexy halfcmtip xystroke}def
+ /cmbtip{gchksavexy xyopp halfcmtip xystroke}def
+ /cmtip{gchksavexy gsave halfcmtip stroke grestore
+ xyopp halfcmtip xystroke}def
+ /halfcmtip{tipwidth 0 0 moveto
+ -.1333 0 .25 neg dup .125 3 -1 roll .25 curveto}bind def
+ /ct /cmtip load def /ca /cmatip load def /cb /cmbtip load def}%
+\PSdict@@{%
+ /xyfscale{/xyfsize exch def}def /xyfsize{10}def
+ /eu{-0.0551 0.0643 -0.0976 0.1386 -0.125 0.2188}def
+ /cm{-0.105 0.0437 -0.1804 0.1380 -0.2 0.25}def
+ /XY{-0.1753 0.0181 -0.3452 0.0708 -0.5 0.155}def
+ /tipstart{3 -1 roll gchksavexy exch xyfscale tipwidth dup XYdict exch
+ known{dup /xy eq{pop /XY}if}{pop /XY}ifelse XYdict exch get}def
+ /tipend{halfxytip xystroke}def
+ /halfxytip{1 1 6{pop xyfsize mul 6 1 roll}for 0 0 moveto curveto}def
+ /A{tipstart D}def /B{tipstart C}def /C{xyopp D}def /D{exec tipend}def
+ /AB{tipstart dup gsave exec halfxytip stroke grestore C}def
+}%
+\PSdict@@{%
+ /Tip{exch gchksavexy /xyfsize{10}def tipwidth gsave
+ dup XYdict exch known{dup /xy eq{pop /XT}if}{pop /XT}ifelse
+ XYdict exch get dup
+ halfTip stroke grestore xyopp halfTip xystroke}def
+ /XT{360 32 div neg}def /Xt{-1 .31 mul 1 atan}def
+ /ET{360 64 div 5 mul neg}def /Et{-1 .31 mul 1 atan}def
+ /halfTip{exec rotate XY halfxytip}def /halfTtip{halfTip}def
+ /Ttip{exch gchksavexy /xyfsize{10}def tipwidth gsave
+ dup XYdict exch known{dup /xy eq{pop /Xt}if}{pop /Xt}ifelse
+ XYdict exch get dup
+ halfTtip stroke grestore xyopp halfTtip xystroke}def
+ /tt /Tip load def /tT /Ttip load def}%
+\PSdict@@{/halfturn{xysegl 2 div dup dup neg exch rmoveto
+ 0 exch dup exch -180 -90 arc}bind def
+ /aturn{gchksavexy halfturn xystroke}def
+ /bturn{gchksavexy xyopp halfturn xystroke}def
+ /ta /aturn load def /tb /bturn load def}%
+\dimen@=\xybsqll@\relax\count@=\dimen@%
+\PSdict@@{%
+ /xysqll \the\count@\space dimendiv def
+ /squigl{gchksavexy xysqll dup neg 0 rmoveto
+ 2 div dup dup neg dup 3 -1 roll
+ 2 sqrt mul dup 5 1 roll
+ 135 45 arcn dup 3 -1 roll -135 -45 arc
+ xystroke}def
+ /g /squigl load def}%
+\PSdict@@{/fullhook{0 xysegl 2 div dup -90 90 arcn}bind def
+ /halfhook{xysegl 2 div dup 0 exch 180 90 arcn}bind def
+}%
+\PSdict@@{/ahook{gchksavexy fullhook xystroke}def
+ /bhook{gchksavexy xyopp fullhook xystroke}def
+ /hook{gchksavexy gsave halfhook stroke grestore
+ xyopp halfhook xystroke}def
+ /h /hook load def /ha /ahook load def /hb /bhook load def}%
+\PSdict@@{%
+ /xyqcirc{dup dup neg exch translate newpath
+ dup neg 0 exch moveto 0 0 3 -1 roll -90 0 arc}bind def
+}%
+\PSdict@@{%
+ /circ{gstartxy
+ 3 copy pop 2 copy cos mul 3 1 roll sin mul
+ rmoveto 0 0 5 2 roll arc xystroke}bind def
+ /o /circ load def}%
+\PSdict@@{%
+ /circhar{gsave dup 3 gt{7 sub neg}if dup
+ 3 eq{pop dup 2 sqrt -2 div mul}{dup 1 eq{pop dup 2 sqrt 2 div mul}
+ {0 eq{dup}{0}ifelse}ifelse}ifelse
+ 0 translate 3 1 roll circ grestore}bind def
+ /c /circhar load def}%
+\PSdict@@{end end}%
+\endgroup%
+\endinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xypspatt.tex b/macros/generic/diagrams/xypic/texinputs/xypspatt.tex
new file mode 100644
index 0000000000..927ad08c11
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xypspatt.tex
@@ -0,0 +1,104 @@
+%% xypspatt.tex from $Id: xypspatt.doc,v 3.11 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``PostScript pattern prolog''.
+%% Copyright (c) 1995-1998 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+%% As a special exception, you may use this file and all files derived
+%% from it without restrictions. This special exception was added with
+%% version 3.7 of Xy-pic.
+%%
+\begingroup \xycatcodes \xyPSobeylines@@%
+\PSdict@@{/XYdict where pop begin XYdict begin}%
+\PSdict@@{/:patt
+{XYddict begin
+14 dict begin
+/BGnd exch def
+/FGnd exch def
+/PaintData exch def
+/PatternType 1 def
+/PaintType 1 def
+/BBox[0 0 1 1]def
+/TilingType 1 def
+/XStep 1 def
+/YStep 1 def
+/PatternMtx[24 0 0 24 0 0]def
+/PaintProc BGnd null ne
+ {{begin BGnd aload pop setrgbcolor 0 0 1 1 rF
+ FGnd aload pop setrgbcolor
+ 24 24 true PatternMtx PaintData imagemask end}}
+ {{begin FGnd aload pop setrgbcolor
+ 24 24 true PatternMtx PaintData imagemask end}}
+ ifelse def
+ currentdict PatternMtx end
+ gsave patangle xyland{180 add}if
+ rotate macfreq patfreq div dup neg exch scale matrix currentmatrix
+ grestore gsave setmatrix /DeviceRGB setcolorspace makepattern grestore
+ end}def}%
+\PSdict@@{%
+/rF{gsave
+ newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto
+ fill grestore}bind def }%
+\PSdict@@{%
+ /setpatscreen{/pattstring exch store patfreq
+ patangle xyport not{90 add}if
+ {1 add 4 mul cvi pattstring exch get exch 1 add 4 mul cvi 7 sub
+ bitshift 1 and}setscreen}bind def
+ /setcolpattern{setpatscreen 64 div 1 exch sub currentrgbcolor
+ 1 1 3{pop 1 exch sub 3 index mul 1 exch sub 3 1 roll}for
+ setrgbcolor pop}def
+ /setgraypattern{setpatscreen 64 div setgray}def
+ /macfreq 9.375 def /patangle 0 def /patfreq 12.5 def}%
+\PSdict@@{/checkland{%
+ /normland where{pop normland not}{false}ifelse
+ /xyland exch def
+ /por where{pop por}{/isls where{pop isls not /xyland true def}
+ {/land where{pop land not}{true}
+ ifelse}ifelse}ifelse /xyport exch def}def }%
+\PSdict@@{%
+ /setpatfreq{/patfreq exch def}def
+ /setpatangle{/patangle exch def}def
+ /setbackcolor{/backcolor exch def}def
+ /setforecolor{/forecolor exch def}def
+ [1 1 1] setbackcolor xycolarray setforecolor
+ /bg /setbackcolor load def /fg /setforecolor load def
+ /pa /setpatangle load def /pq /setpatfreq load def }%
+\PSdict@@{%
+ /xypattern{checkland counttomark dup 0 eq{pop}
+ {dup 1 eq{pop setpatscreen}
+ {dup 2 eq{pop setcolpattern}
+ {dup 3 eq{pop
+ /setcolorspace where {
+ /.setcolorspace where{pop pop pop setcolpattern}
+ {/.buildpattern where {pop
+ forecolor backcolor :patt setpattern
+ }{pop pop setcolpattern}ifelse}ifelse}
+ {pop setcolpattern}ifelse}
+ {5 eq{/setcolorspace where{
+ /.setcolorspace where{pop pop pop pop pop setcolpattern}
+ {/.buildpattern where {pop
+ :patt setpattern
+ }{pop pop pop pop setcolpattern}ifelse}ifelse}
+ {pop pop pop setcolpattern}ifelse
+ }{}ifelse}ifelse}ifelse}ifelse}ifelse cleartomark }def
+ /xysetpattern{/xypatt exch def}def
+ /sp /xysetpattern load def }%
+\PSdict@@{end end}%
+\endgroup%
+\endinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyrecat.tex b/macros/generic/diagrams/xypic/texinputs/xyrecat.tex
new file mode 100644
index 0000000000..a70f24e5c4
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyrecat.tex
@@ -0,0 +1,36 @@
+%% xyrecat.tex from $Id: xyrecat.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Reset Category Codes'' utility.
+%% Copyright (c) 1994-1996 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\xyuncatcodes
+\xyrecat @ 64 \catcode 64 11
+\xymakeADD@\addHASH@ # 35
+\xymakeADD@\addDOLL@ $ 36
+\xymakeADD@\addAND@ & 38
+\xymakeADD@\addRQ@ ' 39
+\xymakeADD@\addPLUS@ + 43
+\xymakeADD@\addDASH@ - 45
+\xymakeADD@\addDOT@ . 46
+\xymakeADD@\addLT@ < 60
+\xymakeADD@\addEQ@ = 61
+\xymakeADD@\addGT@ > 62
+\xymakeADD@\addLQ@ ` 96
+\endinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyrotate.tex b/macros/generic/diagrams/xypic/texinputs/xyrotate.tex
new file mode 100644
index 0000000000..302e8819d0
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyrotate.tex
@@ -0,0 +1,161 @@
+%% xyrotate.tex from $Id: xyrotate.doc,v 3.8 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Rotate and Scale extension'' option.
+%% Copyright (c) 1993-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{rotate}{Rotate and Scale extension}{\stripRCS$Revision: 3.8 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xydef@\xyundefinedRotate@#1#2@@{%
+ \xywarning@{The #1 #2 effect is not implemented with the current driver.}}%
+\xydef@\NoResizing{\xyNoResizing@}
+\xydef@\UseResizing{\xyUseResizing@}
+\xydef@\xyNoResizing@{%
+ \global\let\origxyrescale@=\xyrescale@
+ \global\let\origxyrotSizeMod@=\xyrotateSizeMod@
+ \global\let\xyNoResizing@=\xyNoResizing@@
+ \global\let\xyUseResizing@=\xyUseResizing@@
+ \xyNoResizing@@ }
+\xydef@\xyNoResizing@@{%
+ \global\let\xyrescale@=\xyignorescale@
+ \global\let\xyrotateSizeMod@=\xyignoreSizeMod@
+ }
+\xylet@\xyUseResizing@=\relax
+\xydef@\xyUseResizing@@{%
+ \global\let\xyrescale@=\origxyrescale@
+ \global\let\xyrotateSizeMod@=\origxyrotSizeMod@
+ }
+\xydefcsname@{shape [@...]}#1{\xyrotatechar@#1@@}%
+\xydefcsname@{shape [<...]}#1{\xyshearchar@{#1}@@}%
+\xydefcsname@{shape [*...]}#1{\xyscalechar@{#1}@@}%
+\xydefcsname@{shape [left]}{\xyshape@left@}
+\xydefcsname@{shape [right]}{\xyshape@right@}
+\xydefcsname@{shape [flip]}{\xyshape@flip@}
+\xydefcsname@{shape [halfsize]}{\xyshape@halfsize@}
+\xydefcsname@{shape [dblsize]}{\xyshape@dblsize@}
+\xydefcsname@{shape [vflip]}{\xyshape@vflip@}
+\xydefcsname@{shape [hflip]}{\xyshape@hflip@}
+\xydef@\preXYtransform@{}
+\xydef@\postXYtransform@{}
+\xywarnifdefined\preXYtransform@@
+\xywarnifdefined\postXYtransform@@
+ \gdef\preXYtransform@@{}
+ \gdef\postXYtransform@@{}
+\xydef@\xy@transform@{}
+\xydef@\preShape@@{}
+\xydef@\postShape@@{}
+\xydef@\modXYtransform@{%
+ \ifx\xy@transform@\empty
+ \transformDrop@\transformConnect@\resetTransform@\fi
+ \DN@##1{\expandafter\def\expandafter\tmp@\expandafter{##1}}%
+ \expandafter\next@\expandafter{\preShape@@}%
+ \DN@##1{\expandafter\gdef\expandafter\preXYtransform@@\expandafter{%
+ \tmp@ ##1}}\expandafter\next@\expandafter{\preXYtransform@@}%
+ \DN@##1{\expandafter\def\expandafter\tmp@\expandafter{##1}}%
+ \expandafter\next@\expandafter{\postShape@@}%
+ \DN@##1{\expandafter\gdef\expandafter\postXYtransform@@\expandafter{%
+ \postXYtransform@@ ##1}}\expandafter\next@\expandafter{\tmp@}}%
+\xydef@\transformDrop@{\let\xy@transform@=\relax
+ \expandafter\def\expandafter\Drop@@\expandafter{%
+ \expandafter\preXYtransform@\Drop@@\postXYtransform@}}
+\xydef@\transformConnect@{\let\xy@transform@=\relax
+ \expandafter\def\expandafter\Connect@@\expandafter{%
+ \expandafter\preXYtransform@\Connect@@\postXYtransform@}}
+\xydef@\resetTransform@{\gdef\preXYtransform@@{}\gdef\postXYtransform@@{}}
+\xydef@\xynametransform@#1{%
+ \DN@{\expandafter\gdef\expandafter#1\expandafter{\the\toks@}}\next@ }
+\xydef@\xyscalechar@#1@@{\xyscalechars@#1,#1,@@}
+\xydef@\xyscalechars@#1,#2,#3@@{%
+ \DN@{\xyrescale@(#1,#2)}%
+ \dimen@=#1\p@
+ \ifdim\dimen@>\z@ \else \ifdim\dimen@<\z@ \else
+ \DN@{\xywarning@{invalid scaling factors #1, #2}}%
+ \fi\fi \dimen@=#2\p@
+ \ifdim\dimen@>\z@ \else \ifdim\dimen@<\z@ \else
+ \DN@{\xywarning@{invalid scaling factors #1, #2 }}%
+ \fi\fi \next@ }
+\xydef@\xyrescale@(#1,#2){%
+ \setboxz@h{\xyscale@@{#1}{#2}%
+ \dimen@=\ifx-#1\R@c\advance\dimen@-\R@c \dimen@=-\dimen@
+ \else#1\L@c \advance\dimen@-\L@c\fi
+ \kern\dimen@\boxz@\kern-\dimen@}%
+ \R@c=\if-#1\L@c\else#1\R@c\fi
+ \L@c=\if-#1\R@c\else#1\L@c\fi
+ \U@c=\if-#2\D@c\else#2\U@c\fi
+ \D@c=\if-#2\U@c\else#2\D@c\fi }
+\xydef@\xyignorescale@(#1,#2){\xywarning@{Ignoring rescale: #1,#2}%
+ \setboxz@h{\xyscale@@{#1}{#2}\boxz@}}%
+\xydef@\xyshape@halfsize@{\xyrescale@(.5,.5)}
+\xydef@\xyshape@dblsize@{\xyrescale@(2,2)}
+\xydef@\xyshape@flip@{\xyrescale@(-1,-1)}
+\xydef@\xyshape@vflip@{\xyrescale@(1,-1)}
+\xydef@\xyshape@hflip@{\xyrescale@(-1,1)}
+\xydef@\xyrotatechar@{\bgroup
+ \afterDIRECTIONorEMPTY{\xyrotateSizeMod@}{\xyFN@\xySpecialRotate@i}}
+\xydef@\xySpecialRotate@i{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\xySpecialRotate@i}%
+ \else\ifx @\next \let\next@=\xyrotateSizeMod@
+ \else\addEQ@\ifx \next
+ \addEQ@\DN@##1@@{%
+ \expandafter\xynametransform@\csname shape [##1]\endcsname\egroup}%
+ \else\ifx !\next \DN@!{\egroup\getSpecialRotate@}%
+ \else\ifx *\next \DN@*@@{\egroup\transformDrop@}%
+ \else \DN@{\xySpecialRotate@@}%
+ \fi\fi\fi\fi\fi \next@ }
+\xydef@\getSpecialRotate@{\doSpecialRotate@@}
+\xydef@\xyRotate@#1{\xyundefinedRotate@{rotate}{#1}@@}
+\xydef@\xySpecialRotate@#1@@{\xyundefinedRotate@{rotate}{#1}@@\egroup}
+\xydef@\doSpecialRotate@#1@@{\xyundefinedRotate@{special rotate}{#1}@@}
+\xydef@\xyscale@#1#2{\xyundefinedRotate@{scale}{#1,#2}@@}
+\xydef@\UnloadRotate@#1{%
+ \ifx#1\relax\else\xyunload@{rotation extension}\fi
+ \let\xyRotate@@=\xyRotate@
+ \let\xySpecialRotate@@=\xySpecialRotate@
+ \let\doSpecialRotate@@=\doSpecialRotate@
+ \let\xyscale@@=\xyscale@ }
+\UnloadRotate@\relax
+\xyaddunsupport{rotate}{\UnloadRotate@\relax}
+\xydef@\xyrotateSizeMod@ @@{%
+ \L@p=\L@c \R@p=\R@c \U@p=\U@c \D@p=\D@c
+ \ifdim\cosDirection\p@>\z@
+ \R@c=\cosDirection\R@p \L@c=\cosDirection\L@p
+ \U@c=\cosDirection\U@p \D@c=\cosDirection\D@p
+ \else
+ \R@c=\cosDirection\L@p \L@c=\cosDirection\R@p
+ \U@c=\cosDirection\D@p \D@c=\cosDirection\U@p
+ \fi
+ \advance\L@c \if-\sinDirection\D@p\else\sinDirection\U@p\fi
+ \advance\R@c \if-\sinDirection\U@p\else\sinDirection\D@p\fi
+ \advance\U@c \if-\sinDirection\L@p\else\sinDirection\R@p\fi
+ \advance\D@c \if-\sinDirection\R@p\else\sinDirection\L@p\fi
+ \dimen@ii=\L@c \advance\dimen@ii-\L@p
+ \edef\tmp@{\egroup \L@c=\the\L@c \R@c=\the\R@c \U@c=\the\U@c \D@c=\the\D@c
+ \dimen@ii=\the\dimen@ii \noexpand\setboxz@h\bgroup
+ \noexpand\xyRotate@@{\the\Direction}}\tmp@
+ \xydropRotated@ }
+\xydef@\xydropRotated@@{%
+ \kern\dimen@ii \boxz@ \kern-\dimen@ii \modXYtransform@ \egroup }
+\xylet@\xydropRotated@=\xydropRotated@@
+\xydef@\xyignoreSizeMod@ @@{\xywarning@{Ignoring rotation}}
+\xydef@\xyshape@left@{\xyrotatechar@ v(0,1)@@}
+\xydef@\xyshape@right@{\xyrotatechar@ v(0,-1)@@}
+\xydef@\xyshearchar@{\xyundefinedRotate@{shearing}}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xysmart.tex b/macros/generic/diagrams/xypic/texinputs/xysmart.tex
new file mode 100644
index 0000000000..e98c281f4e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xysmart.tex
@@ -0,0 +1,320 @@
+%% xysmart.tex from $Id: xysmart.doc,v 3.6 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Smart Path feature'' option.
+%% Copyright (c) 1998 George C. Necula <necula@cs.cmu.edu>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{smart}{Smart Path option}{\stripRCS$Revision: 3.6 $}%
+ {George C. Necula}{necula@cs.cmu.edu}%
+ {School of Computer Science,
+ Carnegie Mellon University,
+ 5000 Forbes Avenue,
+ Pittsburgh, PA 15213-3891, USA}
+\xyrequire{arrow}\xycatcodes
+\let\origPATHturn@=\PATHturn@
+\def\PATHturn@{%
+ \ifx \space@\next \expandafter\DN@\space{\xyFN@\PATHturn@}%
+ \else\ifx s\next
+ \let\origPATHturn@i=\PATHturn@i\let\PATHturn@i=\PATHsmartturn@i
+ \let\origPATHturn@cir=\PATHturn@cir\let\PATHturn@cir=\PATHsmartturn@cir
+ \DN@ s{\xyFN@\origPATHturn@}%
+ \else
+ \DN@{\origPATHturn@}%
+ \fi\fi
+ \next@}
+\xydef@\PATHsmartturn@cir{%
+ \edef\next@{{\CIRin@@}{\expandafter\noexpand\CIRorient@@}{\CIRout@@}}%
+ \expandafter\PATHturn@i\next@}
+\xydef@\PATHsmartturn@i#1#2#3{%
+ \DN@##1{%
+ \def\PATHinit@@{%
+ \xy@@{%
+ \def\sm@CIRin{#1}\def\sm@CIRout{#3}%
+ \ifx\sm@CIRout\empty
+ \let\sm@CIRout=\sm@CIRin
+ \let\sm@CIRin=\PATHlastout@@
+ \fi
+ ##1\relax}%
+ \xy@@{\enter@{\basefromthebase@}}%
+ \xy@@{\sm@conn}%
+ \xy@@{\X@p=\X@c \Y@p=\Y@c \czeroEdge@% Save the start of the segment
+ \count@=\sm@CIRout\count@=\the\count@% Move forward a dash to
+ \dimen@=\xydashl@ \ABfromdiag@ \advance\X@c\A@ \advance\Y@c\B@
+ \edef\PATHpostpos@@{\X@c=\the\X@c \Y@c=\the\Y@c \noexpand\czeroEdge@
+ \noexpand\PATHomitslide@@true}}%
+ \xy@@{\leave@
+ \edef\PATHlastout@@{\sm@CIRout}%
+ \count@=\sm@CIRout \dimen@=\xydashl@ \Directionfromdiag@}}}%
+ \expandafter\next@\expandafter{\the\toks@}\toks@={}%
+ \let\PATHextra@@=\empty
+ \def\PATHpost@@{\xy@@\PATHpostpos@@}%
+ \let\PATHlabelsextra@@=\relax
+ \let\PATHturn@i=\origPATHturn@i
+ \let\PATHturn@cir=\origPATHturn@cir
+ \xyFN@\PATHturn@ii}
+\xydef@\sm@nil{}
+\xydef@\sm@nnil{\sm@nil}
+\xydef@\sm@maxcost{1000mm}%
+\xydef@\sm@conn{
+ \enter@{\cfromthec@ \DirectionfromtheDirection@}\cfromp@% Adjust p
+ \count@=\sm@CIRin\count@=\the\count@
+ \dimen@=\xydashl@ \ABfromdiag@ \advance\X@p\A@\advance\Y@p\B@
+ \setupDirection@ \the\Edge@c\z@ \czeroEdge@
+ \pfromc@
+ \reverseDirection@
+ \count@=\sm@CIRin\count@=\the\count@
+ \dimen@=\xydashl@ \ABfromdiag@
+ \edef\tmp@{\noexpand\dir\artail@@}\expandafter\sm@drop@\tmp@
+ \X@c=\X@p\advance\X@c\A@ \Y@c=\Y@p\advance\Y@c\B@ \czeroEdge@
+ \sm@stri
+ \X@p=\X@c \Y@p=\Y@c
+ \leave@
+ \enter@{\pfromthep@ \DirectionfromtheDirection@}\pfromc@% Adjust c
+ \count@=\sm@CIRout\count@=\the\count@
+ \dimen@=\xydashl@ \ABfromdiag@ \advance\X@p-\A@\advance\Y@p-\B@
+ \setupDirection@ \the\Edge@c\z@
+ \advance\X@c-\A@\advance\Y@c-\B@% Leave room for a dash to terminate the seg
+ \czeroEdge@
+ \def\PATHlabelsnext@@{}%
+ \leave@
+ \R@=\turnradius@
+ \cirrestrict@@%Adjust the radius to fit the circles
+ \let\sm@circles=\sm@nil
+ \edef\sm@bestcost{\sm@maxcost}%
+ \sm@trycircles 1%Try counter clockwise first
+ \sm@trycircles{-1}%
+ \ifdim\sm@bestcost<\sm@maxcost
+ \cfromp@
+ \expandafter\sm@conndraw\sm@bestconn
+ \else
+ \xyerror@{Cannot draw the smart connector}{}%
+ \fi
+}
+\xydef@\sm@trycircles#1{%
+ \ifnum #1>0% Compute the opposite orientation
+ \def\sm@CIRorienti{-1}%
+ \else
+ \def\sm@CIRorienti{1}%
+ \fi
+ \edef\tmp@{{{\sm@CIRin}{#1}{\sm@CIRout}}}%
+ \expandafter\sm@trycirclelist\expandafter{\tmp@\sm@nil}%
+ \count@@=\sm@CIRin\count@@=\the\count@@\count@=\count@@
+ \sm@roundcount@{#1}%
+ \edef\sm@savecount@{\the\count@}%
+ \ifnum\the\count@=\the\count@@ \else
+ \edef\tmp@{{{\sm@CIRin}{#1}{\the\count@}}%
+ {{\the\count@}{\sm@CIRorienti}{\sm@CIRout}}}%
+ \expandafter\sm@trycirclelist\expandafter{\tmp@\sm@nil}%
+ \fi
+ \count@=\sm@savecount@\count@=\the\count@
+ \sm@advancecount@ 2{#1}\edef\sm@savecount@{\the\count@}%
+ \edef\tmp@{{{\sm@CIRin}{#1}{\the\count@}}%
+ {{\the\count@}{\sm@CIRorienti}{\sm@CIRout}}}%
+ \expandafter\sm@trycirclelist\expandafter{\tmp@\sm@nil}%
+ \count@=\sm@savecount@\count@=\the\count@
+ \sm@advancecount@ 2{#1}\edef\sm@savecount@{\the\count@}%
+ \edef\tmp@{{{\sm@CIRin}{#1}{\the\count@}}%
+ {{\the\count@}{\sm@CIRorienti}{\sm@CIRout}}}%
+ \expandafter\sm@trycirclelist\expandafter{\tmp@\sm@nil}%
+ \count@=\sm@savecount@\count@=\the\count@
+ \sm@advancecount@ 2{#1}\edef\sm@savecount@{\the\count@}%
+ \edef\tmp@{{{\sm@CIRin}{#1}{\the\count@}}%
+ {{\the\count@}{\sm@CIRorienti}{\sm@CIRout}}}%
+ \expandafter\sm@trycirclelist\expandafter{\tmp@\sm@nil}%
+}
+\xydef@\sm@advancecount@#1#2{%
+ \ifnum #2>0
+ \edef\tmp@{#1}%
+ \else
+ \edef\tmp@{-#1}%
+ \fi
+ \advance\count@\tmp@\count@=\the\count@
+ \ifnum\the\count@<0 \advance\count@ 8\fi
+ \ifnum\the\count@>7 \advance\count@ -8\fi
+ \count@=\the\count@
+}
+\xydef@\sm@roundcount@#1{%
+ \ifcase\the\count@
+ \advance\count@ #1\or
+ \or \advance\count@ #1\or
+ \or \advance\count@ #1\or
+ \or \advance\count@ #1\fi
+ \count@=\the\count@
+ \ifnum\the\count@<0 \advance\count@ 8\fi
+ \ifnum\the\count@>7 \advance\count@ -7\fi
+ \count@=\the\count@
+}
+\newif\ifsm@firstseg
+\newif\ifsm@acceptable
+\xydef@\sm@trycirclelist#1{%
+ \R@p=\z@\U@p=\R@p% Clear the deltas
+ \def\sm@exthp{0}\def\sm@exthm{0}%
+ \def\sm@extvp{0}\def\sm@extvm{0}%
+ \def\sm@dxp{0pt}\def\sm@dxm{0pt}%
+ \def\sm@dyp{0pt}\def\sm@dym{0pt}%
+ \def\sm@segs{}%
+ \sm@firstsegtrue
+ \def\sm@connlen{0pt}%
+ \let\sm@tryclcont=\sm@trycirclelist@i
+ \sm@trycirclelist@i #1%Strip {} to expose the list elements
+ \count@@=\sm@CIRout\count@@=\the\count@\count@=\the\count@
+ \sm@roundcount@{1}%
+ \ifnum\count@=\count@@
+ \edef\sm@segs{\sm@segs{{\the\count@}{1}{\the\count@}}}%
+ \fi
+ \A@=\X@p\advance\A@\R@p\advance\A@ -\X@c\A@=-\A@
+ \B@=\Y@p\advance\B@\U@p\advance\B@ -\Y@c\B@=-\B@
+ \sm@acceptabletrue
+ \ifdim\A@>0pt
+ \ifnum\sm@exthp>0 \dimen@=\A@ \divide\dimen@\sm@exthp
+ \edef\sm@dxp{\the\dimen@}%
+ \else \sm@acceptablefalse\fi\fi
+ \ifdim\A@<0pt
+ \ifnum\sm@exthm>0 \dimen@=\A@ \divide\dimen@\sm@exthm
+ \edef\sm@dxm{\the\dimen@}%
+ \else \sm@acceptablefalse\fi
+ \A@=-\A@%Make it positive
+ \fi
+ \ifdim\B@>0pt
+ \ifnum\sm@extvp>0 \dimen@=\B@ \divide\dimen@\sm@extvp
+ \edef\sm@dyp{\the\dimen@}%
+ \else \sm@acceptablefalse\fi\fi
+ \ifdim\B@<0pt
+ \ifnum\sm@extvm>0 \dimen@=\B@ \divide\dimen@\sm@extvm
+ \edef\sm@dym{\the\dimen@}%
+ \else \sm@acceptablefalse\fi
+ \B@=-\B@
+ \fi
+ \ifsm@acceptable
+ \dimen@=\sm@connlen\advance\dimen@\A@\advance\dimen@\B@
+ \ifdim\dimen@<\sm@bestcost
+ \edef\sm@bestcost{\the\dimen@}%
+ \edef\sm@bestconn{{\sm@dxp}{\sm@dxm}{\sm@dyp}{\sm@dym}{\sm@segs}}%
+ \fi
+ \fi
+}
+\xydef@\sm@showext#1{%
+ \W@{#1\space hp=\sm@exthp,hm=\sm@exthm,vp=\sm@extvp
+ ,vm=\sm@extvm,len=\sm@connlen}}
+\xydef@\sm@trycirclelist@i#1{%
+ \def\@tmp{#1}%
+ \ifx \@tmp\sm@nnil \let\sm@tryclcont=\relax\else
+ \expandafter\sm@tryclcar\@tmp \fi
+ \sm@tryclcont}
+\xydef@\sm@tryclcar#1#2#3{%
+ \dimen@=\ifnum #2<0 -\fi\R@
+ \count@=#1\count@=\the\count@ \ABfromdiag@
+ \advance\R@p -\B@ \advance\U@p \A@
+ \count@=#3\count@=\the\count@ \ABfromdiag@
+ \advance\R@p \B@ \advance\U@p -\A@
+ \sm@computeext{#1}{#2}{#3}%
+}
+\xydef@\sm@computeext#1#2#3{%
+ \ifsm@firstseg
+ \sm@accumext#1%
+ \sm@firstsegfalse
+ \fi
+ \count@@=#1\count@@=\the\count@@\count@=\count@@
+ \dimen@=\sm@connlen
+ \sm@roundcount@{#2}%
+ \ifnum \count@=\count@@
+ \sm@advancecount@ 1{#2}%
+ \advance\dimen@ 0.7854\R@% It was incremented with 1/8 circle
+ \ifnum \count@=#3% Check if done
+ \else
+ \sm@advancecount@ 1{#2}%
+ \advance\dimen@ 0.7854\R@% It was incremented with 1/8 circle
+ \fi
+ \else
+ \advance\dimen@ 0.7854\R@% It was incremented with 1/8 circle
+ \fi
+ \edef\sm@connlen{\the\dimen@}%
+ \sm@accumext{\the\count@}%
+ \edef\sm@segs{\sm@segs{{#1}{#2}{\the\count@}}}%
+ \ifnum\the\count@=#3 \else
+ \edef\tmp@{{\the\count@}{#2}{#3}}%
+ \expandafter\sm@computeext\tmp@
+ \fi
+}
+\xydef@\sm@accumext#1{%
+ \ifcase #1%
+ \or \count@@=\sm@extvm\advance\count@@ by1%
+ \edef\sm@extvm{\the\count@@}%
+ \or\or \count@@=\sm@exthp\advance\count@@ by1%
+ \edef\sm@exthp{\the\count@@}%
+ \or\or \count@@=\sm@extvp\advance\count@@ by1%
+ \edef\sm@extvp{\the\count@@}%
+ \or\or \count@@=\sm@exthm\advance\count@@ by1%
+ \edef\sm@exthm{\the\count@@}%
+ \fi
+}
+\xydef@\sm@conndraw#1#2#3#4#5{%
+ \def\sm@contlist{\sm@drawseglist}%
+ \edef\sm@dxp{#1}%
+ \edef\sm@dxm{#2}%
+ \edef\sm@dyp{#3}%
+ \edef\sm@dym{#4}%
+ \sm@drawseglist #5\sm@nil}
+\xydef@\sm@drawseglist#1{%
+ \ifx #1\sm@nil \def\sm@contlist{}\else
+ \sm@drawseg #1\fi
+ \sm@contlist}
+\xydef@\sm@drawseg#1#2#3{%
+ \def\CIRin@@{#1}\def\CIRout@@{#3}%
+ \sm@straight%See if a straight line is needed here. Insert it and
+ \ifnum\CIRin@@=\CIRout@@ \else
+ \count@=\CIRin@@
+ \dimen@=\ifnum #2<0 -\fi\R@
+ \ABfromdiag@
+ \advance\X@c -\B@ \advance\Y@c \A@
+ \ifnum #2>0 \def\CIRorient@@{\CIRacw@}%
+ \else \def\CIRorient@@{\CIRcw@}\fi
+ \drop@\literal@{\hbox\bgroup\cir@i}%
+ \dimen@=\ifnum #2<0 -\fi\R@
+ \count@=\CIRout@@\count@=\count@%Wierd. If I remove this last assignm
+ \ABfromdiag@
+ \advance\X@c\B@ \advance\Y@c-\A@
+ \fi
+}
+\xydef@\sm@straight{%
+ \U@c=\z@\D@c=\U@c\L@c=\U@c\R@c=\U@c
+ \pfromc@
+ \ifcase \CIRin@@ \or% 1 is V-
+ \A@=\sm@dym\advance \Y@c\A@
+ \or\or
+ \A@=\sm@dxp\advance \X@c\A@
+ \or\or
+ \A@=\sm@dyp\advance \Y@c\A@
+ \or\or
+ \A@=\sm@dxm\advance \X@c\A@ \fi
+ \ifdim\X@c=\X@p\ifdim\Y@c=\Y@p\else \sm@stri \fi\else \sm@stri \fi
+}
+\xydef@\sm@stri{%
+ \edef\tmp@{\expandafter\noexpand\arstemprefix@@\arstem@@}%
+ \expandafter\sm@connect@\tmp@}
+\xydef@\sm@connect@#1#{%
+ \DN@##1{\connect@{#1}{##1}}\next@}
+\xydef@\sm@drop@#1#{%
+ \DN@##1{\drop@{#1}{##1}}\next@}
+\xydef@\smconn#1#2#3{%
+ \edef\sm@CIRin{#1}\edef\sm@CIRout{#2}%
+ \R@=#3\R@=\the\R@
+ \sm@conn}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xytextures.tex b/macros/generic/diagrams/xypic/texinputs/xytextures.tex
new file mode 100644
index 0000000000..e69f1de5f2
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xytextures.tex
@@ -0,0 +1,123 @@
+%% xytextures.tex from $Id: xytextures.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Textures'' driver interface option.
+%% Copyright (c) 1995-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{textures}{Textures driver}{\stripRCS$Revision: 3.7 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xydef@\Textures@@#1{\dvimessage@{Textures}{#1}}
+\newdriver{%
+ \xyaddsupport{color}\texturesColor@@
+ \xyaddsupport{crayon}\texturesCrayon@@
+ \xyaddsupport{ps}\texturesPS@@
+ \xyaddsupport{rotate}\texturesRotate@@
+ \xyaddsupport{line}\texturesLine@@
+ \xyaddsupport{frame}\texturesFrames@@
+ \xyaddsupport{tile}\texturesTiles@@
+ \xyaddsupport{cmtip}\relax
+}
+\xydef@\TexturesColor@push#1{\special{color push}\special{color #1}}
+\xydef@\TexturesColours@{\texturesPStypes@
+ \let\xylocalColor@=\xystackcolor@
+ \let\xycolor@push=\TexturesColor@push
+ \def\xycolor@{\xycolor@@}%
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-c}{\xydrivernoload@{ps-c}}%
+ \installPScolor@ }\else\DN@{}\fi \next@
+ \ifx\xycolor@@\xyNoColor@ \let\xycolor@@=\xycolor@raw@@\fi
+ \ifx\xycrayolaloaded\empty \DN@{\xystandardcolors@\texturesCrayon@@{}}%
+ \else\let\next@=\xystandardcolors@ \fi \next@
+ \let\xycolorwarning@=\relax \Textures@@{color}%
+ \let\texturesColor@@=\relax
+ \let\UnloadColor@@=\NoTexturesColor@
+ }
+\xydef@\texturesColor@@{\TexturesColours@}
+\xydef@\NoTexturesColor@{%
+ \let\xylocalColor@=\xyNoColor@@
+ \let\xycolor@=\xyNoColor@
+ \let\xycolorwarning@=\xycolorwarning@@
+ \let\texturesColor@@=\TexturesColours@
+ \let\UnloadColor@@=\UnloadColor@
+ }
+\xydef@\texturesCrayon@@{\texturesColor@@\texturesCrayon@}
+\xydef@\texturesCrayon@{\installCrayolaColors@}%
+\xydef@\texturesPS@@{\texturesPS@}
+\xydef@\texturesPSunload@{\UnloadPS@
+ \let\UnloadPS@@=\UnloadPS@
+ \let\texturesPS@@=\texturesPS@ }
+\xydef@\texturesPStypes@{%
+ \xyinputorelse@{xyps-ps}{\xydrivernoload@{ps-ps}}%
+ \ifx\PSspecial@@\TexturesSpecial@\else
+ \let\PSspecial@@=\TexturesSpecial@
+ \let\PSmacro@@=\TexturesMacro@
+ \let\PSdict@@=\TexturesDict@
+ \let\PSraw@@=\TexturesRaw@
+ \let\PSinclude@@=\TexturesInclude@
+ \let\PSspecialdict@@=\TexturesSpecialDict@
+ \let\xyPSobeylines@@=\obeyTextureslines@
+ \Textures@@{PostScript}%
+ \fi \texturesCurrpt@ \XYpredict@ }
+\xydef@\TexturesSpecial@#1{\firstPS@@\special{postscript #1}}
+\xydef@\TexturesMacro@#1{\special{postscript {#1}xy}}
+\xydef@\TexturesDict@#1{\special{prePostScript #1}}
+\xydef@\TexturesSpecialDict@#1{\special{prePostScript #1}}
+\xydef@\TexturesInclude@#1{\firstPS@@\special{prePostScriptfile #1}}
+\xydef@\TexturesRaw@#1{\firstPS@@\special{rawpostscript #1}}%
+{\catcode`\^^M=\active%
+ \gdef\next{\catcode`\^^M=\active \let^^M=\par%
+ \let\PSspecial@@=\TexturesDict@ \obeyspaces}}
+\xylet@\obeyTextureslines@=\next
+\xydef@\texturesCurrpt@{\let\xyPScurrpt@@=\texturesCurrpt@@}%
+\xydef@\texturesCurrpt@@{\PSspecial@@{xyi}\PSraw@@{userdict begin xyx end}}
+\xydef@\texturesPS@{\texturesPStypes@
+ \let\texturesPS@@=\relax
+ \let\UnloadPS@@=\texturesPSunload@
+ \let\installxyps@@=\relax \installxyps@ }
+\xydef@\texturesRotate@@{\texturesRotate@}
+\xydef@\texturesRotate@{\texturesPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-r}{\xydrivernoload@{ps-r}}%
+ \xyRotScale@@ \installPSrotscale@ }%
+ \else\DN@{\xydriverfail@{rotations are}\UnloadRotate@\relax}\fi
+ \next@}
+\xydef@\texturesLine@@{\texturesLine@}
+\xydef@\texturesLine@{\texturesPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-l}{\xydrivernoload@{ps-l}}%
+ \installPSline@ }%
+ \else\DN@{\xydriverfail@{line-widths are}\UnloadLine@\relax}\fi
+ \next@ }
+\xydef@\texturesFrames@@{\texturesFrames@}
+\xydef@\texturesFrames@{\texturesPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-f}{\xydrivernoload@{ps-f}}%
+ \installPSframes@ }%
+ \else\DN@{\xydriverfail@{frames are}\UnloadPSFrames@\relax}\fi
+ \next@ }
+\xydef@\texturesTiles@@{\texturesTiles@}
+\xydef@\texturesTiles@{\texturesPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-t}{\xydrivernoload@{ps-t}}%
+ \installPSpatterns@ \xystandardpatterns@}%
+ \else\DN@{\xydriverfail@{Patterns are}\UnloadPSpatterns@\relax}\fi
+ \next@ }
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xytile.tex b/macros/generic/diagrams/xypic/texinputs/xytile.tex
new file mode 100644
index 0000000000..fb411fca66
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xytile.tex
@@ -0,0 +1,125 @@
+%% xytile.tex from $Id: xytile.doc,v 3.8 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Pattern and Tile extension'' option.
+%% Copyright (c) 1993-1997 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{tile}{Pattern and Tile extension}{\stripRCS$Revision: 3.8 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xydef@\xypatternwarning@@{\xypatternmessage@
+ \gdef\xypatternwarning@{\xypatternmessage@
+ \xywarning@{...no further pattern warnings will be given.}%
+ \global\let\xypatternwarning@=\relax }}
+\xylet@\xypatternwarning@=\xypatternwarning@@
+\xydef@\xypatternmessage@{%
+ \xywarning@{Current driver does not support patterns.}}%
+\xydef@\newxypattern{\begingroup\xycatcodes\newxypattern@i}
+\xydef@\newxypattern@i#1#2{\edef\next@{\endgroup
+ \noexpand\newxyPattern{#1}{}{#2}{}}\next@}
+\xydef@\newxyPattern#1#2#3#4{\newxypattern@{#1}{#2}{#3}{#4}{}}
+\xydef@\newxypattern@#1#2#3#4#5{%
+ \expandafter\let\expandafter\next@\csname shape [#1]\endcsname
+ \ifx\next@\relax
+ \DN@{#4}\ifx\next@\empty
+ \DN@{#2}\ifx\next@\empty
+ \DN@{\newxystyle{#1}{\xylocalpattern@{}{#3}\xypattern@{#3}}}%
+ \else
+ \DN@{\newxystyle{#1}{\xylocalpattern@{#2}{#3}\xypattern@{#2 #3}}}%
+ \fi
+ \else\DN@{#2#3}\ifx\next@\empty
+ \DN@{\newxystyle{#1}{\xylocalpattern@{#4}{}\xypattern@{#4}}}%
+ \else
+ \DN@{\newxystyle{#1}{\xylocalpattern@{#2}{#3}\xypattern@{#4}}}%
+ \fi\fi
+ \else \def\tmp@{\relax}\DNii@{#5}%
+ \ifx\nextii@\tmp@
+ \DN@{#4}\ifx\next@\empty
+ \DN@{#2}\ifx\next@\empty
+ \DN@{\newxystyle{#1}{\xylocalpattern@{}{#3}\xypattern@{#3}}}%
+ \else
+ \DN@{\newxystyle{#1}{\xylocalpattern@{#2}{#3}\xypattern@{#2 #3}}}%
+ \fi
+ \else
+ \DN@{#2#3}\ifx\next@\empty
+ \DN@{\newxystyle{#1}{\xylocalpattern@{#4}{}\xypattern@{#4}}}%
+ \else
+ \DN@{\newxystyle{#1}{\xylocalpattern@{#2}{#3}\xypattern@{#4}}}%
+ \fi\fi
+ \else\DN@{}\fi\fi \next@\relax }
+\xydef@\xyNopattern@#1{}
+\xylet@\xypattern@@=\xyNopattern@
+\xydef@\xyNopattern@@#1#2{\xypatternwarning@}
+\xylet@\xypattern@=\xypattern@@
+\xylet@\xylocalpattern@=\xyNopattern@@
+\xydef@\Unloadpattern@{%
+ \let\xylocalpattern@=\xyNopattern@@
+ \let\xypattern@=\xyNopattern@
+ \let\xypatternwarning@=\xypatternwarning@@ }
+\Unloadpattern@
+\xydef@\xystandardpatterns@{}%
+\xynew@{read}{\xypatread@}
+\xydef@\defaultpattfile@{}
+\xydef@\xygetfilepatterns@#1{\DN@{#1}%
+ \ifx\next@\empty
+ \ifx\defaultpattfile@\empty \xywarning@{No pattern file specified.}%
+ \else \DN@{\expandafter\openpattfile@\expandafter{\defaultpattfile@}}\fi
+ \else \DN@{\openpattfile@{#1}}\fi \next@ }
+\xydef@\openpattfile@#1{\openin\xypatread@=#1.xyp
+ \ifeof\xypatread@\xywarning@{No patterns in file: #1.xyp}%
+ \closein\xypatread@
+ \else \expandafter \xyreadpatfile@ \fi }%
+\xydef@\UsePatternFile#1{\def\defaultpattfile@{#1}}
+\xydef@\LoadAllPatterns{\let\parsepattern@=\parsepattern@@
+ \xygetfilepatterns@ }
+\xydef@\LoadPattern#1{\let\parsepattern@=\filepattern@@
+ \def\pattname@{#1}\xygetfilepatterns@}
+\xydef@\AliasPattern#1#2{\let\parsepattern@=\aliaspattern@@
+ \def\aliasname@{#1}\def\pattname@{#2}\xygetfilepatterns@}
+\xydef@\xyreadpatfile@{%
+ \loop@ \bgroup\xycatcodes
+ \global\read\xypatread@ to\xypatline@
+ \ifeof\xypatread@ \aftergroup\endpatread@
+ \else\aftergroup\morepatread@\fi \edef\next@{%
+ \egroup\noexpand\getxypattern@{\xypatline@!!!}\relax}\next@
+ \repeat@ }
+\xydef@\endpatread@{\closein\xypatread@\iffalse}
+\xydef@\morepatread@{\iftrue}
+\xydef@\getxypattern@#1{\def\next{#1}\getxypattern@@}
+\xydef@\getxypattern@@{\DN@{!!!}\ifx\next\next@\DN@{}%
+ \else\DN@{\expandafter\parsepattern@\next}\fi \next@ }
+\xydef@\parsepattern@@#1 #2!#3\relax{\newxypattern{#1}{#2}}
+\xydef@\filepattern@@#1 #2!#3\relax{\DN@{#1}%
+ \ifx\next@\pattname@
+ \DN@{\expandafter\foundpattern@\expandafter{\pattname@}{#2}}%
+ \else\DN@{}\fi \next@ }
+\xydef@\foundpattern@#1#2{\newxypattern{#1}{#2}\endpatread@\fi
+ \expandafter\eat@}
+\xydef@\aliaspattern@@#1 #2!#3\relax{\DN@{#1}%
+ \ifx\next@\pattname@
+ \DN@{\expandafter\foundpattern@\expandafter{\aliasname@}{#2}}%
+ \else\DN@{}\fi \next@ }
+\DN@{\xyaddunsupport{tile}\Unloadpattern@}%
+\ifx\xyeverywithoption@tile@\undefined
+\else\ifx\xyeverywithoption@tile@\empty
+\else
+ \DN@{\xysetup@@{\xywithoption{tile}{\xyeverywithoption@tile@\xydriversloaded@@}}}%
+\fi\fi \next@
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xytips.tex b/macros/generic/diagrams/xypic/texinputs/xytips.tex
new file mode 100644
index 0000000000..55a61b25e4
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xytips.tex
@@ -0,0 +1,81 @@
+%% xytips.tex from $Id: xytips.doc,v 3.11 2013/10/06 01:12:08 krisrose Exp $
+%%
+%% Xy-pic ``More Tips'' extension.
+%% Copyright (c) 1992-1996 Kristoffer H. Rose <kris@diku.dk>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <kris@diku.dk>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{tips}{More Tips extension}{\stripRCS$Revision: 3.11 $}%
+ {Kristoffer H.~Rose}{kris@diku.dk}%
+ {IBM T.~ J.\ Watson Research Center, P.O.~Box 704, Yorktown Heights, NY 10598 (USA)}
+\xylet@\tip@xy=\tip@
+\xylet@\atip@xy=\atip@
+\xylet@\btip@xy=\btip@
+\xylet@\Tip@xy=\Tip@
+\xylet@\Ttip@xy=\Ttip@
+\xylet@\tipjot@xy=\tipjot@
+\xyfont@\xy@@atfont=xycmat10
+\xyfont@\xy@@btfont=xycmbt10
+\xyfont@\xy@@alfont=xyluat10
+\xyfont@\xy@@blfont=xylubt10
+\xydef@\tipfamily@@{cm}
+\xydef@\tipsize@@{10}
+\xydef@\SelectTips#1#2{%
+ \DN@{#1}\ifx\next@\empty\else \def\tipfamily@@{#1}\fi
+ \DN@{#2}\ifx\next@\empty\else \def\tipsize@@{#2}\fi
+ \csname tipfamily \tipfamily@@\endcsname \ignorespaces}
+\xydefcsname@{tipfamily cm}{\loadtipfonts@
+ \let\tip@=\tip@cm \let\atip@=\atip@cm \let\btip@=\btip@cm
+ \let\Tip@=\Tip@xy \let\Ttip@=\Ttip@xy \def\tipjot@{.2em}}
+\xydef@\loadtipfonts@{\edef\next##1##2{##1=xy\tipfamily@@##2\tipsize@@}%
+ \next{\font\xy@@atfont}{at}
+ \next{\font\xy@@btfont}{bt}
+}
+\xydef@\tip@cm{\activatetips@ \tip@x\tip@@}
+\xydef@\atip@cm{\activatetips@ \tip@x\atip@@}
+\xydef@\btip@cm{\activatetips@ \tip@x\btip@@}
+\xydef@\activatetips@{\let\xyatipfont=\xy@@atfont \let\xybtipfont=\xy@@btfont}
+\xydefcsname@{tipfamily eu}{\loadtipfonts@
+ \let\tip@=\tip@cm \let\atip@=\atip@cm \let\btip@=\btip@cm
+ \let\Tip@=\Tip@eu \let\Ttip@=\Ttip@eu \def\tipjot@{.15em}}
+\xydef@\Tip@eu{\kern1.5pt \vrule height1.5pt depth1.5pt width\z@
+ \Tip@@eu \kern1.5pt \egroup
+ \U@c=1.5pt \D@c=1.5pt \L@c=1.5pt \R@c=1.5pt \Edge@c={\circleEdge}%
+ \Invisible@false \Hidden@false \def\Leftness@{.5}\def\Upness@{.5}%
+ \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@{\dottedSpread@\jot}}}
+\xydef@\Tip@@eu{\count@=\DirectionChar
+ \advance\count@-10 \ifnum\count@<\z@ \advance\count@128 \fi
+ \xyatipfont\char\count@
+ \advance\count@ 20 \ifnum127<\count@ \advance\count@-128 \fi
+ \xybtipfont\char\count@}
+\xydef@\Ttip@eu{\kern2.4pt \vrule height2.4pt depth2.4pt width\z@
+ \Ttip@@eu \kern2.4pt \egroup
+ \U@c=2.4pt \D@c=2.4pt \L@c=2.4pt \R@c=2.4pt \Edge@c={\circleEdge}%
+ \Invisible@false \Hidden@false
+ \def\Leftness@{.5}\def\Upness@{.5}%
+ \def\Drop@@{\styledboxz@}\def\Connect@@{\straight@{\dottedSpread@\jot}}}
+\xydef@\Ttip@@eu{%
+ \setboxz@h\bgroup\reverseDirection@\line@ \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@
+ \kern-\L@c \boxz@ \kern\L@c \Tip@@eu}
+\xydefcsname@{tipfamily lu}{\loadtipfonts@
+ \let\tip@=\tip@cm \let\atip@=\atip@cm \let\btip@=\btip@cm
+ \let\Tip@=\Tip@xy \let\Ttip@=\Ttip@xy \def\tipjot@{.2em}}
+\xydef@\UseTips{\csname tipfamily \tipfamily@@\endcsname}
+\xydef@\NoTips{\let\tip@=\tip@xy \let\atip@=\atip@xy \let\btip@=\btip@xy
+ \let\Tip@=\Tip@xy \let\Ttip@=\Ttip@xy \let\tipjot@=\tipjot@xy}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xytp-f.tex b/macros/generic/diagrams/xypic/texinputs/xytp-f.tex
new file mode 100644
index 0000000000..68243fe9c4
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xytp-f.tex
@@ -0,0 +1,174 @@
+%% xytp-f.tex from $Id: xytp-f.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Frame extension'' TPIC backend support.
+%% Copyright (c) 1995-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xytpfloaded\empty \message{not reloaded}\endinput \fi
+\let\xytpfloaded=\empty \xycatcodes
+\xydef@\installTPICframes@{%
+ \let\framed@body@@=\xyTPICframed@body@
+ \let\circled@x@@=\xyTPICcircled@x@
+ \let\ellipsed@x@@=\xyTPICellipsed@x@
+ \installTPICfills@
+ \xyuncatcodes}
+\xydef@\UseTPICframes{\installTPICframes@}
+\xydef@\NoTPICframes{\UnloadFrames@}
+\xydef@\xyTPICframed@body@{\DN@{\framed@body@}%
+ \ifdim\R@=\z@
+ \ifx\framehfill\frm@solidh@@
+ \DN@{\xyTPICframed@rect@i\xytpic@solid@@}%
+ \else\ifx\framehfill\frm@dashh@@
+ \DN@{\xyTPICframed@rect@i\xytpic@dashed@@}%
+ \else\ifx\framehfill\frm@doth@@
+ \DN@{\xyTPICframed@rect@i\xytpic@dotted@@}%
+ \fi\fi\fi\fi \next@ }
+\xydef@\xyTPICframed@rect@i#1{\vglue\U@c
+ \hbox{\hglue\L@c\xyTPICrect@{#1}\hglue\R@c}\vglue\D@c}
+\xydef@\xyTPICcircled@x@{\DN@{\xyTPICcircled@xx{}}%
+ \ifx\framehfill\frm@doth@@ \DN@{\xyTPICdotcirc@}%
+ \else\ifx\framehfill\frm@dashh@@\DN@{\xyTPICdashcirc@}%
+ \fi\fi \next@ }
+\xydef@\xyTPICcircled@xx#1{\vglue2\R@
+ \hbox{\hglue2\R@\xyTPICfullcircle@#1\hglue2\R@}\vglue2\R@}
+\xydef@\xyTPICdotcirc@{\let\zerodot=\framezerodot@@
+ \L@=\R@ \circled@x@@ }
+\xydef@\xyTPICdashcirc@{\L@=\R@ \circled@x@@ }
+\xydef@\xyTPICdotellip@{\ellipsed@x@@ }
+\xydef@\xyTPICdashellip@{\ellipsed@x@@ }
+\xydef@\xyTPICellipsed@x@#1#2{\DN@{\xyTPICellipsed@xx{}}%
+ \ifx\framehfill\frm@doth@@\DN@{\xyTPICdotellip@}%
+ \else\ifx\framehfill\frm@dashh@@\DN@{\xyTPICdashellip@}%
+ \fi\fi \next@{#1}{#2}}
+\xydef@\xyTPICellipsed@xx#1#2#3{\vglue #3\vglue #3\relax
+ \hbox{\L@c = #2\relax \R@c=\L@c \D@c = #3\relax \U@c=\D@c
+ \hglue#2\hglue#2\relax \R@=#2\relax \L@=#3\relax
+ \xyTPICfullcircle@#1\hglue#2\hglue#2\relax}%
+ \vglue #3\vglue #3\relax}
+\xydef@\xyTPICrect@#1{\DNii@{\relax}\DN@{#1}\toks@={}%
+ \ifx\next@\nextii@ \xytpic@pn0\relax\xytpic@bk
+ \def\xytpic@style@@{\xytpic@fp}%
+ \else\DNii@{\empty}%
+ \ifx\next@\nextii@\def\xytpic@style@@{\xytpic@ip}\xytpic@bk
+ \else\ifx\next@\empty\def\xytpic@style@@{\xytpic@ip}\xytpic@bk
+ \else#1\fi\fi\fi
+ \xytpic@pt\R@c
+ \expandafter\addtotoks@\expandafter{\expandafter{\the\count@}}%
+ \xytpic@pt\D@c
+ \expandafter\addtotoks@\expandafter{\expandafter{\the\count@}}%
+ \xytpic@pt{\L@c}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\the\count@}}%
+ \xytpic@pt{\U@c}%
+ \expandafter\addtotoks@\expandafter{\expandafter{\the\count@}}%
+ \expandafter\xyTPICrect@x\the\toks@
+ \DNii@{\relax}\DN@{#1}\ifx\next@\nextii@
+ \def\xytpic@style@@{\xytpic@fp}\expandafter\xyTPICrect@x\the\toks@\fi }
+\xydef@\xyTPICrect@x#1#2#3#4{\xyTPIC@special{pa -#3 -#4}%
+ \xyTPIC@special{pa -#3 #2}\xyTPIC@special{pa #1 #2}%
+ \xyTPIC@special{pa #1 -#4}\xyTPIC@special{pa -#3 -#4}%
+ \xytpic@style@@ }
+\xydef@\xyTPICoval@#1{\DN@{#1}\DNii@{\relax}%
+ \ifx\next@\nextii@ \DN@{\xyTPICfilledoval@\relax}%
+ \else\DNii@{\empty}\ifx\next@\nextii@ \DN@{\xyTPICfilledoval@\empty}%
+ \else\DN@{\xyTPICoval@i{#1}}\fi\fi \next@ }
+\xylet@\xyTPICoval@i=\eat@
+\xydef@\xyTPICfilledoval@#1{%
+ {\advance\L@c-\R@ \advance\R@c-\R@ \xyTPICrect@{\empty}}%
+ {\advance\U@c-\R@ \advance\D@c-\R@ \xyTPICrect@{\empty}}%
+ \L@=\R@ \bgroup
+ \dimen@=-\U@c \advance\dimen@\R@ \xytpic@pt\dimen@
+ \edef\tmp@{\the\count@}%
+ \dimen@=-\L@c \advance\dimen@\R@ \xytpic@pt\dimen@
+ \edef\tmp@{\noexpand\toks@={{\the\count@}{\tmp@}}}%
+ \setTPICcircstyle@ \xyTPICcircle@{\tmp@}\egroup
+ \bgroup
+ \dimen@=-\U@c \advance\dimen@\R@ \xytpic@pt\dimen@
+ \edef\tmp@{\the\count@}%
+ \dimen@=\R@c \advance\dimen@-\R@ \xytpic@pt\dimen@
+ \edef\tmp@{\noexpand\toks@={{\the\count@}{\tmp@}}}%
+ \setTPICcircstyle@ \xyTPICcircle@{\tmp@}\egroup
+ \bgroup
+ \dimen@=\D@c \advance\dimen@-\R@ \xytpic@pt\dimen@
+ \edef\tmp@{\the\count@}%
+ \dimen@=-\L@c \advance\dimen@\R@ \xytpic@pt\dimen@
+ \edef\tmp@{\noexpand\toks@={{\the\count@}{\tmp@}}}%
+ \setTPICcircstyle@ \xyTPICcircle@{\tmp@}\egroup
+ \bgroup
+ \dimen@=\D@c \advance\dimen@-\R@ \xytpic@pt\dimen@
+ \edef\tmp@{\the\count@}%
+ \dimen@=\R@c \advance\dimen@-\R@ \xytpic@pt\dimen@
+ \edef\tmp@{\noexpand\toks@={{\the\count@}{\tmp@}}}%
+ \setTPICcircstyle@ \xyTPICcircle@{\tmp@}\egroup
+ \DN@{#1}\DNii@{\relax}\ifx\next@\nextii@
+ \def\tmp@{{\xytpic@pn0\def\xytpic@style@@{\xytpic@fp}}}%
+ \DN@{\expandafter\xyTPICoval@i\tmp@}%
+ \else\DN@{}\fi \next@ }
+\xydef@\setTPICcircstyle@{%
+ \def\xytpic@circstyle@@{\xytpic@ia}\xytpic@bk}
+\xydef@\xyTPICcircle@#1{\DNii@{\relax}%
+ \DN@{#1}\toks@={00}\ifx\next@\nextii@
+ \xytpic@pn0\relax\xytpic@bk \def\xytpic@circstyle@@{\xytpic@ar}%
+ \else\DNii@{\empty}%
+ \ifx\next@\nextii@ \setTPICcircstyle@
+ \else\ifx\next@\empty \setTPICcircstyle@
+ \else#1\fi\fi\fi
+ \xytpic@pt\R@
+ \expandafter\addtotoks@\expandafter{\expandafter{\the\count@}}%
+ \xytpic@pt\L@
+ \expandafter\addtotoks@\expandafter{\expandafter{\the\count@}}%
+ \expandafter\xytpic@circstyle@@\the\toks@ 0\twoPi@}
+\xydef@\xyTPICellipse@{%
+ \X@p=\R@c \advance\X@p-\L@c \divide\X@p\tw@ \R@=\R@c \advance\R@-\X@p
+ \Y@p=\D@c \advance\Y@p-\U@c \divide\Y@p\tw@ \L@=\D@c \advance\L@-\Y@p
+ \xyTPICcircle@}
+\xydef@\xyTPICrect@Special#1#2#3#4{\TPICmacro@@{#1 fp}}
+\xydef@\xyTPICdotrect@Special#1{\TPICmacro@@{#1 fp}}
+\xydef@\xyTPICdashrect@Special#1{\TPICmacro@@{#1 fp}}
+\xydef@\xyTPICcirc@Special#1{\TPICmacro@@{#1 ar}}
+\xydef@\xyTPICdotcirc@Special#1{\TPICmacro@@{#1 ar}}
+\xydef@\xyTPICdashcirc@Special#1{\TPICmacro@@{#1 ar}}
+\xydef@\xyTPICfilledRegion#1#2{\vglue\U@c
+ \hbox{\hglue\L@c#1#2\empty\hglue\R@c}\vglue\D@c}
+\xydef@\filledRectangle@TPIC@@{%
+ \ifdim\R@=\z@ \DN@{\xyTPICfilledRegion\xyTPICrect@}%
+ \else \DN@{\xyTPICfilledRegion\xyTPICoval@}%
+ \fi \next@ }
+\xydef@\filledCircle@TPIC@@#1{{\R@c=\R@ \L@c=\R@ \U@c=\R@ \D@c=\R@
+ \xyTPICfilledRegion\xyTPICcircle@#1{}}}
+\xydef@\filledEllipse@TPIC@@{\xyTPICfilledRegion\xyTPICellipse@}
+\xydef@\filledOval@TPIC@@{\xyTPICfilledRegion\xyTPICoval@}
+\xydef@\installTPICfills@{%
+ \let\filledRectangle@@=\filledRectangle@TPIC@@
+ \let\filledOval@@=\filledOval@TPIC@@
+ \let\filledCircle@@=\filledCircle@TPIC@@
+ \let\filledEllipse@@=\filledEllipse@TPIC@@
+}
+\xydef@\xyTPICfillrect@Special#1#2{%
+ \ifx#2\relax\TPICmacro@@{#1 fp}%
+ \else\TPICmacro@@{#1 ip}\fi}
+\xydef@\xyTPICfilloval@Special#1#2{%
+ \ifx#2\relax\TPICmacro@@{#1 fp}%
+ \else\TPICmacro@@{#1 ip}\fi}
+\xydef@\xyTPICfillcirc@Special#1#2{%
+ \ifx#2\relax\TPICmacro@@{#1 ar}%
+ \else\TPICmacro@@{#1 ai}\fi}
+\xydef@\xyTPICfillellipse@Special#1#2{%
+ \ifx#2\relax\TPICmacro@@{#1 ar}%
+ \else\TPICmacro@@{#1 ai}\fi}
+\endinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xytpic.tex b/macros/generic/diagrams/xypic/texinputs/xytpic.tex
new file mode 100644
index 0000000000..a58ca347e8
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xytpic.tex
@@ -0,0 +1,228 @@
+%% xytpic.tex from $Id: xytpic.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``tpic'' TPIC backend, for lines, curves and fills.
+%% Copyright (c) 1995-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{tpic}{TPIC backend}{\stripRCS$Revision: 3.7 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xynew@{if}\ifTPICspecials@
+\xydef@\UseTPICspecials{\TPICspecials@true}
+\xydef@\NoTPICspecials{\TPICspecials@false}
+\xynew@{count}\xytpic@cnt
+\xydef@\xytpic@max{300}
+\xydef@\maxTPICpoints#1{\count@=#1 \relax
+ \ifnum\count@>\tw@ \edef\xytpic@max{\the\count@}%
+ \else\expandafter\xyTPICmaxwarning@\expandafter{\the\count@}\fi}
+\xydef@\xyTPICmaxwarning@#1{max points must be at least 2, #1 invalid}
+\xydef@\xytpic@style@@{\xytpic@fp}
+\xydef@\xytpic@reset@{\gdef\xytpic@style@@{\xytpic@fp}%
+ \global\xytpic@cnt=\z@ }
+\xydef@\xytpic@set@#1{\xdef\xytpic@style@@{\noexpand#1}}
+\xydef@\xytpic@pn#1{\xyTPIC@special{pn #1}}
+\xydef@\xytpic@pa#1#2{\global\advance\xytpic@cnt\@ne\relax
+ \ifnum\xytpic@cnt=\xytpic@max\relax \xyTPIC@special{pa #1 #2}%
+ \kern-\X@c\raise-\Y@c\hbox{\xytpic@style@@}\kern\X@c
+ \global\xytpic@cnt=\@ne \relax\fi \xyTPIC@special{pa #1 #2}}
+\xydef@\xytpic@fp{\xyTPIC@special{fp}}
+\xydef@\xytpic@ip{\xyTPIC@special{ip}}
+\xydef@\xytpic@da#1{\xyTPIC@special{da #1}}
+\xydef@\xytpic@dt#1{\xyTPIC@special{dt #1}}
+\xydef@\xytpic@sp#1{\xyTPIC@special{sp #1}}
+\xydef@\xytpic@ar#1#2#3#4#5#6{\xyTPIC@special{ar #1 #2 #3 #4 #5 #6}}
+\xydef@\xytpic@ia#1#2#3#4#5#6{\xyTPIC@special{ia #1 #2 #3 #4 #5 #6}}
+\xydef@\xytpic@sh#1{\xyTPIC@special{sh #1}}
+\xydef@\xytpic@wh{\xyTPIC@special{sh 0}}
+\xydef@\xytpic@bk{\xyTPIC@special{sh 1}}
+\xydef@\xyTPIC@special#1{\special{#1}}
+\xydef@\xyTPIC@noisy#1{\W@{TPIC: #1}\special{#1}}
+\xydef@\NoisyTPIC{\let\xyTPIC@special=\xyTPIC@noisy}
+\xydef@\xyTPICsplit@#1#2{\setboxz@h{#1\boxz@#2}}%
+\xydef@\xytpic@pt#1{\dimen@=#1\divide\dimen@ by72
+ \multiply\dimen@ by 1000 \advance\dimen@.5\p@
+ \count@=\dimen@ \divide\count@\p@ }
+\xydef@\xytpic@in#1{\dimen@=#1\divide\dimen@ by72
+ \edef\next@{\expandafter\removePT@\the\dimen@}}%
+\xydef@\xytpic@dot@@{\xytpic@pa00}
+\xydef@\xytpic@width@{\xytpic@pt{\xylinethick@}%
+ \expandafter\xytpic@pn\expandafter{\the\count@}}
+\xydef@\xytpic@line{%
+ \xytpic@dot@@ \xytpic@pt{-\d@X}\count@@=\count@
+ \xytpic@pt\d@Y \edef\next@{{\the\count@@}{\the\count@}}%
+ \expandafter\xytpic@pa\next@ \xytpic@style@@ \xytpic@reset@ }
+\xydef@\xytpic@solid@@{\xytpic@set@\xytpic@fp}
+\xydef@\xytpic@dashed@@{\xytpic@in\xydashl@ \xytpic@dad}
+\xydef@\xytpic@dotted@@{\dimen@=.5\xydashl@ \xytpic@in\dimen@ \xytpic@dtd}
+\xydef@\xytpic@dad{\expandafter\xytpic@set@\expandafter{%
+ \expandafter\xytpic@da\expandafter{\next@}}}
+\xydef@\xytpic@dtd{\expandafter\xytpic@set@\expandafter{%
+ \expandafter\xytpic@dt\expandafter{\next@}}}
+\xydef@\xytpic@polysolid@{\xytpic@set@\xytpic@fp}
+\xydef@\xytpic@polydashed@#1{\count@=#1 \xytpic@dad}
+\xydef@\xytpic@polydotted@#1{\count@=#1 \xytpic@dtd}
+\xydef@\xytpic@postpoly@{\xytpic@style@@ \xytpic@reset@}
+\xydef@\TPICalternative@#1#2{%
+\expandafter\global\expandafter\let\csname origxy#2@\endcsname=#1%
+ \xdef#1{\noexpand\ifTPICspecials@
+ \noexpand\expandafter\expandafter\noexpand\csname xytpic@#2@\endcsname
+ \noexpand\else
+ \noexpand\expandafter\expandafter\noexpand\csname origxy#2@\endcsname
+ \noexpand\fi}}%
+\xydef@\setupxyTPIC@{\xywarning@{using TPIC specials}%
+ \TPICalternative@{\solid@}{solid}%
+ \TPICalternative@{\dash@}{dashed}%
+ \TPICalternative@{\point@}{point}%
+ \TPICalternative@{\circhar@@}{circhar}%
+ \TPICalternative@{\splinesolid@}{splinesolid}%
+ \xywithoption{frame}{\xyinputorelse@{xytp-f}{}\xyuncatcodes}%
+ \let\setupxyTPIC@=\reloadxyTPIC@
+ \activateTPIC@ }
+\xydef@\xyunloadTPIC@{\xywarning@{TPIC specials turned off}%
+ \xywithoption{curve}{\xysetup@@\uninstallTPICcurves@ }%
+ \xywithoption{line}{\xysetup@@\uninstallTPICline@ }%
+ \xywithoption{frame}{\xysetup@@\uninstallTPICframes@ }%
+ \TPICspecials@false
+ \let\setupxyTPIC@=\reloadxyTPIC@ }
+\xydef@\activateTPIC@{%
+ \xywithoption{line}{\xysetup@@\installTPICline@}%
+ \xywithoption{curve}{\xysetup@@\installTPICcurves@}%
+ \xywithoption{frame}{\xysetup@@\installTPICframes@}%
+ \TPICspecials@true }
+\xydef@\reloadxyTPIC@{\xywarning@{TPIC specials back on}\activateTPIC@ }
+\xydef@\xytpic@solid@{%
+ \ifInvisible@ \let\next@=\no@@
+ \else \DN@{\xyTPICstraight@{\xytpic@solid@@ \xytpic@line}}\fi
+ \next@ }
+\xydef@\xytpic@dashed@{\line@
+ \def\Connect@@{\xyTPICstraight@{\xytpic@dashed@@ \xytpic@line}}}
+\xydef@\xytpic@point@{\xytpic@dot@@\xytpic@fp\egroup
+ \Invisible@false \Hidden@false \def\Leftness@{.5}\def\Upness@{.5}\ctipEdge@
+ \def\Drop@@{\styledboxz@}%
+ \def\Connect@@{\xyTPICstraight@{\xytpic@dotted@@ \xytpic@line}}}
+\xydef@\xyTPICstraight@#1{\setupDirection@
+ \edef\Creset@@{\cfromthec@ \pfromthep@ \DirectionfromtheDirection@}%
+ \DN@##1##2{\def\checkoverlap@@{%
+ \ifdim##1\X@p>##1\X@c \let\next@=\relax \fi
+ \ifdim##2\Y@p>##2\Y@c \let\next@=\relax \fi}}%
+ \edef\nextii@{{\sd@X}{\sd@Y}}\expandafter\next@\nextii@
+ \noCshavep@@ \edef\Cshavep@@{\pfromthep@ \noexpand\resetDirection@}%
+ \noCshavec@@ \edef\Cshavec@@{\cfromthec@ \noexpand\resetDirection@}%
+ \ifHidden@\else
+ \ifdim\Y@c>\Y@max \Y@max=\Y@c \fi \ifdim\Y@p>\Y@max \Y@max=\Y@p \fi
+ \ifdim\Y@c<\Y@min \Y@min=\Y@c \fi \ifdim\Y@p<\Y@min \Y@min=\Y@p \fi
+ \ifdim\X@c>\X@max \X@max=\X@c \fi \ifdim\X@p>\X@max \X@max=\X@p \fi
+ \ifdim\X@c<\X@min \X@min=\X@c \fi \ifdim\X@p<\X@min \X@min=\X@p \fi \fi
+ \ifInvisible@\let\next@=\relax \else
+ \DN@{\setboxz@h{\kern\X@c \raise\Y@c\hbox{#1}}%
+ \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@ {\Drop@@}}%
+ \fi
+ \checkoverlap@@
+ \ifdim\d@X=\z@ \ifdim\d@Y=\z@ \DN@{\relax}\fi\fi \next@
+ \def\Cslidep@@{\noCslidep@@}\def\Cslidec@@{\noCslidec@@}%
+ \def\Calong@@{\noCalong@@}\Creset@@ }
+\xydef@\xytpic@splinesolid@{\xyTPICspline@\xytpic@fp }
+\xydef@\xytpic@splinedashed@{\xytpic@in\xydashl@\expandafter\xyTPICspline@
+ \expandafter{\expandafter\xytpic@da\expandafter{\next@}}}
+\xydef@\xytpic@splinedotted@{\xytpic@in{.5\xydashl@}\expandafter\xyTPICspline@
+ \expandafter{\expandafter\xytpic@dt\expandafter{\next@}}}
+\xydef@\xyTPICspline@#1{\setbox\splinebox@=\copy\voidb@x
+ \SloppyCurves
+ \global\xytpic@cnt=\@ne \xytpic@set@{#1}%
+ \def\splineextra@@{\xyTPICspline@dot}%
+ \def\xycrvdrop@{ }\def\xycrvconn@{}\splineset@@ \xytpic@style@@}
+\xydef@\xyTPICspline@dot{\xytpic@pt{\X@c}\count@@=\count@
+ \xytpic@pt{-\Y@c}\edef\next@{{\the\count@@}{\the\count@}}%
+ \expandafter\xytpic@pa\next@ }
+\xydef@\xyTPIClinewidth@#1{\xytpic@pt{#1}\edef\next@{\the\count@}}
+\xydef@\installTPICline@{%
+ \let\xylinewidth@@=\xylinewidth@
+ \let\xylineSpecial@@=\xytpic@pn
+ \let\transxyline@@=\xyTPIClinewidth@ }
+\xydef@\uninstallTPICline@{\UnloadLine@}%
+\xydef@\xydoTPICcircle@#1{\DN@{#1}%
+ \ifx\next@\empty\DN@{\xyTPICfullcircle@}%
+ \else\expandafter\DNii@\expandafter{\addDASH@{}}%
+ \ifx\next@\nextii@\DN@{\L@=\R@ \xyTPICfullcircle@}%
+ \else\DN@{\dosolidcircle@{#1}}\fi\fi \next@ }
+\xydef@\xyTPICfullcircle@{\xyTPICpartcircle@{00}0\twoPi@}%
+\xydef@\xyTPICpartcircle@#1#2#3{%
+ \xytpic@pt{\R@}\expandafter\DNii@\expandafter{\the\count@}%
+ \xytpic@pt{\L@}\edef\next@{#1{\nextii@}{\the\count@}{#2}{#3}}%
+ \expandafter\xytpic@ar\next@ }
+\xydef@\qartPi@{0.7853981}
+\xydef@\tartPi@{2.3561944}
+\xydef@\xytpic@circhar@#1{\xytpic@width@\ifcase#1%
+ \xytpic@pt{\R@}\edef\next@{{{\the\count@}0}}%
+ \expandafter\xyTPICcirchar@i\next@{\tartPi@}{\fullPi@}\kern\partroottwo\R@
+ \or
+ \xytpic@pt{\halfroottwo\R@}\edef\next@{{{\the\count@}0}}%
+ \expandafter\xyTPICcirchar@i\next@{\halfPi@}{\tartPi@}\kern\halfroottwo\R@
+ \or
+ \xytpic@pt{\z@}\edef\next@{{{\the\count@}0}}%
+ \expandafter\xyTPICcirchar@i\next@{\qartPi@}{\halfPi@}\kern\halfroottwo\R@
+ \or
+ \xytpic@pt{-\halfroottwo\R@}\edef\next@{{{\the\count@}0}}%
+ \expandafter\xyTPICcirchar@i\next@0{\qartPi@}\kern\partroottwo\R@
+ \or
+ \xytpic@pt{-\halfroottwo\R@}\edef\next@{{{\the\count@}0}}%
+ \expandafter\xyTPICcirchar@i\next@{-\qartPi@}0\kern\partroottwo\R@
+ \or
+ \xytpic@pt{\z@}\edef\next@{{{\the\count@}0}}%
+ \expandafter\xyTPICcirchar@i\next@{-\halfPi@}{-\qartPi@}\kern\halfroottwo\R@
+ \or
+ \xytpic@pt{\halfroottwo\R@}\edef\next@{{{\the\count@}0}}%
+ \expandafter\xyTPICcirchar@i\next@{-\tartPi@}{-\halfPi@}\kern\halfroottwo\R@
+ \or
+ \xytpic@pt{\R@}\edef\next@{{{\the\count@}0}}%
+ \expandafter\xyTPICcirchar@i\next@{-\fullPi@}{-\tartPi@}\kern\partroottwo\R@
+ \fi}
+\xydef@\xyTPICcirchar@i#1#2#3{\L@=\R@ \xyTPICpartcircle@{#1}{#2}{#3}}
+\xydef@\xyTPIC@spline@ii@{\DN@{\xy@spline@ii}%
+ \ifx\splineSTYLE@\empty\DN@{\xyTPICqspline@{0}}%
+ \else\expandafter\DNii@\expandafter{\addDASH@{}}%
+ \ifx\splineSTYLE@\nextii@\DN@{\xyTPICqspline@{0}}%
+ \else\expandafter\DNii@\expandafter{\addDOT@{}}%
+ \ifx\splineSTYLE@\nextii@\DN@{\xyTPICqspline@{-.5}}%
+ \else\expandafter\expandafter\expandafter\DNii@\expandafter\expandafter
+ \expandafter{\expandafter\addDASH@\addDASH@{}}%
+ \ifx\splineSTYLE@\nextii@\DN@{\xyTPICqspline@{}}%
+ \fi\fi\fi\fi
+ \next@ }%
+\xydef@\xyTPIC@accumulate{\xytpic@pt\X@c \count@@=\count@
+ \xytpic@pt{-\Y@c}\edef\next@{{\the\count@@}{\the\count@}}%
+ \expandafter\xytpic@pa\next@ }
+\xydef@\xyTPICqspline@#1{\xytpic@width@
+ \xytpic@in{#1\xydashl@}\expandafter\gdef\expandafter\xytpic@style@@
+ \expandafter{\expandafter\xytpic@sp\expandafter{\next@}}%
+ \save@ \cfromp@ \xyTPIC@accumulate
+ \edef\smapp@@{\s@bot}\smapxy@i{\xyTPIC@accumulate}%
+ \leave@ \xyTPIC@accumulate \xytpic@style@@ \xytpic@reset@
+ \enter@{}\xy@spline@x }
+\xydef@\installTPICcurves@{%
+ \let\dosolidcircle@@=\xydoTPICcircle@
+ \let\xy@spline@ii@@=\xyTPIC@spline@ii@
+ }
+\xydef@\uninstallTPICcurves@{%
+ \let\dosolidcircle@@=\dosolidcircle@
+ \let\xy@spline@ii@@=\xy@spline@ii }
+ \xywithoption{frame}{\xyinputorelse@{xytp-f}{}}
+\xydef@\uninstallTPICframes@{\UnloadFrames@}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyv2.tex b/macros/generic/diagrams/xypic/texinputs/xyv2.tex
new file mode 100644
index 0000000000..4d92bd01cf
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyv2.tex
@@ -0,0 +1,277 @@
+%% xyv2.tex from $Id: xyv2.doc,v 3.8 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Version 2 compatibility'' feature.
+%% Copyright (c) 1993-1995 Kristoffer H. Rose <kris@diku.dk>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <kris@diku.dk>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{v2}{Version 2 Compatibility}{\stripRCS$Revision: 3.8 $}%
+ {Kristoffer H.~Rose}{krisrose@tug.org}%
+ {IBM T.~ J.\ Watson Research Center, P.O.~Box 704, Yorktown Heights, NY 10598 (USA)}
+\xylet@\XY=\Xy
+\ifx\redefine\undefined \let\redefine=\def \fi
+\ifx\define\undefined \let\define=\xydef@ \fi
+\ifx\dsize\undefined \let\dsize=\displaystyle \fi
+\ifx\tsize\undefined \let\dsize=\textstyle \fi
+\ifx\ssize\undefined \let\ssize=\scriptstyle \fi
+\ifx\sssize\undefined \let\sssize=\scriptscriptstyle \fi
+\ifx\text\undefined
+ \def\text{\relax\textC}%
+ \xydef@\textC#1{\relax
+ \ifmmode\mathchoice
+ {\hbox{\the\textfont0\relax#1}}%
+ {\hbox{\the\textfont0\relax#1}}%
+ {\hbox{\the\scriptfont0\relax#1}}%
+ {\hbox{\the\scriptscriptfont0\relax#1}}%
+ \else{\relax#1}\fi}
+\fi
+\xydef@\Text{\relax\xyFN@\Text@}
+\xydef@\TextC{\relax\textC}%
+\xydef@\Text@{%
+ \addLT@\ifx\next \addGT@{\addLT@\DN@##1}{\A@=##1\Text@i}%
+ \else \DN@{\A@=\maxdimen \Text@i}\fi \next@}
+\xydef@\Text@i#1{%
+ \ifmmode \mathchoice
+ {\expandafter\Text@ii\the\textfont0{#1}}%
+ {\expandafter\Text@ii\the\textfont0{#1}}%
+ {\expandafter\Text@ii\the\scriptfont0{#1}}%
+ {\expandafter\Text@ii\the\scriptscriptfont0{#1}}%
+ \else
+ \leavevmode \expandafter\Text@ii\the\textfont0{#1}%
+ \fi\ignorespaces}
+\xydef@\Text@ii{\hbox\bgroup \txt@i}
+\xylet@\cL=\L@c
+\xylet@\cR=\R@c
+\xylet@\cD=\D@c
+\xylet@\cH=\U@c
+\xylet@\Xc=\X@c
+\xylet@\Yc=\Y@c
+\xylet@\Uc=\U@c
+\xylet@\Dc=\D@c
+\xylet@\Lc=\L@c
+\xylet@\Rc=\R@c
+\xylet@\Xp=\X@p
+\xylet@\Yp=\Y@p
+\xylet@\Up=\U@p
+\xylet@\Dp=\D@p
+\xylet@\Lp=\L@p
+\xylet@\Rp=\R@p
+\xylet@\dX=\d@X
+\xylet@\dY=\d@Y
+\xylet@\Xorigin=\X@origin
+\xylet@\Yorigin=\Y@origin
+\xylet@\Xxbase =\X@xbase
+\xylet@\Yxbase =\Y@xbase
+\xylet@\Xybase =\X@ybase
+\xylet@\Yybase =\Y@ybase
+\xylet@\Xmin=\X@min
+\xylet@\Ymin=\Y@min
+\xylet@\Xmax=\X@max
+\xylet@\Ymax=\Y@max
+\xydef@\go{\aftergo{}}
+\xydef@\aftergo#1{\xy@\aftergo{\enter@\pfromthec@}\afterPOS{\xy@@\leave@#1}}
+\xydef@\merge{\POS.p\relax}
+\xydef@\swap{\xy@\swap\swap@}
+\xydef@\Drop{\expandafter\drop\entrymodifiers@}
+\xydef@\none{\xy@\none{}\ignorespaces}
+\xydef@\solid{\connect h\dir{-}}
+\xydef@\Solid{\connect h\dir2{-}}
+\xydef@\Ssolid{\connect h\dir3{-}}
+\xydef@\dashed{\connect h\dir{--}}
+\xydef@\Dashed{\connect h\dir2{--}}
+\xydef@\Ddashed{\connect h\dir3{--}}
+\xydef@\dotted{\connect h\dir{.}}
+\xydef@\Dotted{\connect h\dir2{.}}
+\xydef@\Ddotted{\connect h\dir3{.}}
+\xydef@\dottedwith#1{\connect h{#1}}
+\xydef@\notip{\dir{}}
+\xydef@\stop{\dir{|}}
+\xydef@\astop{\dir^{|}}
+\xydef@\bstop{\dir_{|}}
+\xydef@\tip{\dir{>}}
+\xydef@\atip{\dir^{>}}
+\xydef@\btip{\dir_{>}}
+\xydef@\Tip{\dir2{>}}
+\xywarnifdefined\aTip
+\xywarnifdefined\bTip
+{\xyuncatcodes
+ \gdef\aTip{\object=<5pt>:(32,-1)\dir^{>}}
+ \gdef\bTip{\object=<5pt>:(32,+1)\dir_{>}}}
+\xydef@\Ttip{\dir3{>}}
+\xydef@\ahook{\dir^{(}}
+\xydef@\bhook{\dir_{(}}
+\xydef@\aturn{\dir^{'}}
+\xydef@\bturn{\dir_{'}}
+\xydef@\rotate{\hbox\bgroup
+ \DN@{\ifx (\next
+ \DN@(####1){\rotate@ii{####1}}%
+ \else \DN@{\rotate@i}\fi\next@}\xyFN@\next@}
+\xydef@\rotate@i#1{\reverseDirection@ #1\OBJECT@x}
+\xydef@\rotate@ii#1#2{\dimen@=#1\p@
+ \ifdim \dimen@=-\p@ \aboveDirection@\xydashl@
+ \else\ifdim\dimen@= \p@ \belowDirection@\xydashl@
+ \else\ifdim\dimen@<-1.5\p@ \advance\dimen@-2\p@
+ \edef\next@{\expandafter\removePT@\the\dimen@}\vDirection@(-1,\next@){1pc}%
+ \else\ifdim\dimen@<-.5\p@ \vDirection@(#1,-1){1pc}%
+ \else\ifdim\dimen@< .5\p@ \vDirection@( 1,#1){1pc}%
+ \else\ifdim\dimen@<1.5\p@ \vDirection@(#1, 1){1pc}%
+ \else \dimen@=-\dimen@ \advance\dimen@2\p@
+ \edef\next@{\expandafter\removePT@\the\dimen@}\vDirection@(-1,\next@){1pc}%
+ \fi\fi\fi\fi\fi\fi
+ #2\OBJECT@x}
+\xydef@\squash#1{%
+ \ifmmode\setboxz@h{\m@th${\mathstrut}#1{\mathstrut}$}\else\setboxz@h{#1}\fi
+ \setboxz@h{\kern-.5\wdz@ \dimen@=.5\ht\z@ \advance\dimen@-.5\dp\z@
+ \lower\dimen@\boxz@}%
+ \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@}
+\xydef@\grow{%
+ \DN@{\ifx <\next \DN@<####1>{\dimen@=####1\grow@\empty}%
+ \else \DN@{\dimen@=2\p@ \grow@\empty}\fi\next@}\xyFN@\next@}
+\xydef@\grow@#1#{\grow@@{#1}}
+\xydef@\grow@@#1#2{\relax
+ \ifmmode \setboxz@h{\kern\dimen@ \m@th$#2$\kern\dimen@}%
+ \else \setboxz@h{\kern\dimen@ {#2}\kern\dimen@}\fi
+ \dimen@ii=\ht\z@ \advance\dimen@ii\dimen@ \ht\z@=\dimen@ii
+ \dimen@ii=\dp\z@ \advance\dimen@ii\dimen@ \dp\z@=\dimen@ii \boxz@}
+\xydef@\squarify{\addEQ@{\addPLUS@\object}}
+\xydef@\qc{\corn@@}
+\xyrequire{frame}\xycatcodes
+\xydef@\framed{\relax\convertframed{-}}
+\xydef@\Framed{\relax\convertframed{=}}
+\xydef@\circled{\relax\convertframed{o}}
+\xydef@\Circled{\relax\convertframed{oo}}
+\xydef@\convertframed#1{\DNii@##1@{\drop\frm##1{#1}}\xyFN@\convertframed@i}
+\xydef@\convertframed@i{%
+ \addLT@\ifx \next
+ \addGT@{\addLT@\DN@##1}{\addGT@{\addLT@{\nextii@}##1}@}%
+ \else \DN@{\nextii@ @}\fi \next@}
+\xydef@\dotframed{\relax\drop\frm{.}}
+\xydef@\dashframed{\relax\drop\frm{--}}
+\xydef@\rounddashframed{\relax\drop\frm{o-}}
+\xydef@\filled{\DN@{%
+ \addLT@\ifx \next
+ \addGT@{\addLT@\DN@####1}{\xy@@{\frame@fill@@{####1}}}%
+ \else \DN@{\xy@@{\frame@fill@@\z@}}%
+ \fi\next@}\xyFN@\next@}
+\xydef@\Filled{\DN@{%
+ \addLT@\ifx \next
+ \addGT@{\addLT@\DN@####1}{\xy@@{\frame@emph@@{####1}}}%
+ \else \DN@{\xy@@{\frame@emph@@\z@}}%
+ \fi\next@}\xyFN@\next@}
+\xyrequire{matrix}\xycatcodes
+\xydef@\diagram#1\enddiagram{\relax\diagram@\diagram@@{#1}}
+\xydef@\diagram@{\relax
+ \ifmmode \DN@##1##2{\vcenter{\oldxymatrix@true \xy##1{\xymatrix{##2}}\endxy}}%
+ \else\DN@##1##2{{\oldxymatrix@true \xy/u.8ex/##1{\xymatrix{##2}}\endxy}}%
+ \fi \next@}
+\xydef@\LaTeXdiagrams{\def\diagram{\ltxdiagram@\diagram@@}%
+ \def\diagramnocompile{\ltxdiagram@\literal@}%
+ \def\diagramcompileto##1{\ltxdiagram@{\NoCompileMatrices\xycompileto{##1}}}}
+\xydef@\ltxdiagram@#1#2\end#3{\relax
+ \DN@{#3}\DNii@{diagram}\ifx\next@\nextii@\diagram@{#1}{#2}\end{diagram}%
+ \else\xyerr@{Put \string{\string} around \string\begin...\string\end\space
+ within diagrams}\fi}
+\xylet@\diagram@@=\literal@
+\xydef@\NoisyDiagrams{}
+\xydef@\spreaddiagramrows#1{\addPLUS@\xymatrixrowsep{#1}}
+\xydef@\spreaddiagramcolumns#1{\addPLUS@\xymatrixcolsep{#1}}
+\xyrequire{arrow}\xycatcodes
+\xylet@\arrow=\ar
+{\xyuncatcodes
+ \gdef\morPHISM#1#2#3{\PATH~={\oldconnect{#1}}~<{|<*{#3}}~>{|>*{#2}}}}
+\xydef@\morphism{\relax\morPHISM}
+\xylet@\connect@iii=\connect
+\xydef@\oldconnect#1{%
+ \let\PATHlabelabove@@=\PATHlabelabove@
+ \let\PATHlabelbelow@@=\PATHlabelbelow@
+ \let\connect=\preconnect#1\let\connect=\connect@iii}
+\xydef@\definemorphism#1#2#3#4{%
+ \xydefcsname@{x#1}{\morphism{#2}{#3}{#4}}%
+ \xydefcsname@{u#1}{\morphism{#2}{#3}{#4}[u]}%
+ \xydefcsname@{d#1}{\morphism{#2}{#3}{#4}[d]}%
+ \xydefcsname@{l#1}{\morphism{#2}{#3}{#4}[l]}%
+ \xydefcsname@{r#1}{\morphism{#2}{#3}{#4}[r]}%
+ \xydefcsname@{uu#1}{\morphism{#2}{#3}{#4}[uu]}%
+ \xydefcsname@{dd#1}{\morphism{#2}{#3}{#4}[dd]}%
+ \xydefcsname@{ll#1}{\morphism{#2}{#3}{#4}[ll]}%
+ \xydefcsname@{rr#1}{\morphism{#2}{#3}{#4}[rr]}%
+ \xydefcsname@{ur#1}{\morphism{#2}{#3}{#4}[ur]}%
+ \xydefcsname@{ul#1}{\morphism{#2}{#3}{#4}[ul]}%
+ \xydefcsname@{dr#1}{\morphism{#2}{#3}{#4}[dr]}%
+ \xydefcsname@{dl#1}{\morphism{#2}{#3}{#4}[dl]}%
+ \xydefcsname@{uul#1}{\morphism{#2}{#3}{#4}[uul]}%
+ \xydefcsname@{uur#1}{\morphism{#2}{#3}{#4}[uur]}%
+ \xydefcsname@{ull#1}{\morphism{#2}{#3}{#4}[ull]}%
+ \xydefcsname@{urr#1}{\morphism{#2}{#3}{#4}[urr]}%
+ \xydefcsname@{ddl#1}{\morphism{#2}{#3}{#4}[ddl]}%
+ \xydefcsname@{ddr#1}{\morphism{#2}{#3}{#4}[ddr]}%
+ \xydefcsname@{dll#1}{\morphism{#2}{#3}{#4}[dll]}%
+ \xydefcsname@{drr#1}{\morphism{#2}{#3}{#4}[drr]}%
+ \xydefcsname@{uull#1}{\morphism{#2}{#3}{#4}[uull]}%
+ \xydefcsname@{uurr#1}{\morphism{#2}{#3}{#4}[uurr]}%
+ \xydefcsname@{ddll#1}{\morphism{#2}{#3}{#4}[ddll]}%
+ \xydefcsname@{ddrr#1}{\morphism{#2}{#3}{#4}[ddrr]}}
+\definemorphism{to}\solid\tip\notip
+\definemorphism{line}\solid\notip\notip
+\definemorphism{dashed}\dashed\notip\notip
+\definemorphism{dotted}\dotted\notip\notip
+\definemorphism{double}\Solid\notip\notip
+\xywarnifdefined\xyviitoi
+\xywarnifdefined\xyviitoii
+\xydef@\XXtoY@#1#2#3#4#5{\save;[#3]\relax
+ \xy@@{%
+ \dimen@=\turnradius@ \ifdim#1<#2\relax \dimen@ii=#2\else\dimen@ii=#1\fi
+ \advance\dimen@\ifdim\dimen@>\dimen@ii +\dimen@\else +\dimen@ii\fi
+ \edef\xyviitoi{\the\dimen@}\leave@}%
+ \xto ~{[#3]} `#4[#3]#5/#4\xyviitoi/ `[#3]}
+\xydef@\toXY@#1#2#3#4#5{\xy@@{\idfromc@{@}%
+ \dimen@=\turnradius@ \dimen@ii=#1\relax
+ \advance\dimen@\ifdim\dimen@>\dimen@ii +\dimen@\else +\dimen@ii\fi
+ \edef\xyviitoi{\the\dimen@}%
+ \dimen@=\turnradius@ \dimen@ii=#2\relax
+ \advance\dimen@\ifdim\dimen@>\dimen@ii +\dimen@\else +\dimen@ii\fi
+ \edef\xyviitoii{\the\dimen@}}%
+ \morphism\solid{\object #4:(-1,0)\dir{>}}\notip
+ ~{`"@" "@"} `#3"@"#5/#3\xyviitoi/#5/#4\p@/ `"@"#5/#4\xyviitoii/}
+\xyuncatcodes \catcode64=11
+\xydef@\lltod{\XXtoY@\D@c\D@p{ll}{d}+}
+\xydef@\lltou{\XXtoY@\U@c\U@p{ll}{u}+}
+\xydef@\rrtod{\XXtoY@\D@c\D@p{rr}{d}+}
+\xydef@\rrtou{\XXtoY@\U@c\U@p{rr}{u}+}
+\xydef@\ddtol{\XXtoY@\L@c\L@p{dd}{l}+}
+\xydef@\ddtor{\XXtoY@\R@c\R@p{dd}{r}+}
+\xydef@\uutol{\XXtoY@\L@c\L@p{uu}{l}+}
+\xydef@\uutor{\XXtoY@\R@c\R@p{uu}{r}+}
+\xydef@\told{\toXY@\L@c\D@c{l}{d}+}
+\xydef@\tolu{\toXY@\L@c\U@c{l}{u}+}
+\xydef@\tord{\toXY@\R@c\D@c{r}{d}+}
+\xydef@\toru{\toXY@\R@c\U@c{r}{u}+}
+\xydef@\todl{\toXY@\D@c\L@c{d}{l}+}
+\xydef@\todr{\toXY@\D@c\R@c{d}{r}+}
+\xydef@\toul{\toXY@\U@c\L@c{u}{l}+}
+\xydef@\tour{\toXY@\U@c\R@c{u}{r}+}
+\xycatcodes
+\xydef@\TurnRadius{\addEQ@\turnradius}
+\xydef@\diagramcompileto#1#2\enddiagram{\relax
+ \diagram@{\NoCompileMatrices\xycompileto{#1}}{#2}}
+\xydef@\diagramnocompile#1\enddiagram{\relax\diagram@\literal@{#1}}
+\xydef@\CompileAllDiagrams#1{\CompilePrefix{#1}\CompileMatrices}
+\xydef@\NoCompileAllDiagrams{\NoCompileMatrices}
+\xydef@\ReCompileAllDiagrams{\CompileMatrices}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyweb.tex b/macros/generic/diagrams/xypic/texinputs/xyweb.tex
new file mode 100644
index 0000000000..290612e5de
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyweb.tex
@@ -0,0 +1,94 @@
+%% xyweb.tex from $Id: xyweb.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``Lattice and web'' feature.
+%% Copyright (c) 1994-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{web}{Lattice and web feature}{\stripRCS$Revision: 3.7 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\message{lattices,}
+\xynew@{count}\lattice@A
+\xynew@{count}\lattice@B
+\xydef@\latticeA{\lattice@A}
+\xydef@\latticeB{\lattice@B}
+\xydef@\xylattice#1#2#3#4{\xy@{LATTICE}{\xylattice@{#1}{#2}{#3}{#4}}}%
+\xydef@\xylattice@#1#2#3#4{%
+ \lattice@A=#1\relax
+ \loop \bgroup\lattice@B=#3\relax
+ \innerlatticeloop@{#4}%
+ \edef\tmp@{\egroup
+ \X@min=\the\X@min \X@max=\the\X@max
+ \Y@min=\the\Y@min \Y@max=\the\Y@max
+ }\tmp@ \ifnum\lattice@A<#2\relax \advance\lattice@A\@ne
+ \repeat }
+\xydef@\innerlatticeloop@#1{%
+ \loop \enter@{\cfromthec@}\enter@{\cplusthec@}%
+ \vfromcartesian@@ \the\lattice@A,\the\lattice@B @%
+ \edef\latticeX{\expandafter\removePT@\the\X@c}%
+ \edef\latticeY{\expandafter\removePT@\the\Y@c}%
+ \leave@ \latticebody \leave@
+ \ifnum\lattice@B<#1\relax \advance\lattice@B\@ne
+ \repeat }
+\xydef@\croplattice#1#2#3#4#5#6#7#8{\xy@{LATTICE}%
+ {\xycroplattice@{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}}}%
+\xydef@\xycroplattice@#1#2#3#4#5#6#7#8{%
+ \enter@{\X@min=\the\X@min \X@max=\the\X@max
+ \Y@min=\the\Y@min \Y@max=\the\Y@max}%
+ \enter@{\cfromthec@}\enter@{\cplusthec@}%
+ \vfromcartesian@@ #5,0 @\leave@ \X@min=\X@c \leave@
+ \enter@{\cfromthec@}\enter@{\cplusthec@}%
+ \vfromcartesian@@ #6,0 @\leave@ \X@max=\X@c \leave@
+ \enter@{\cfromthec@}\enter@{\cplusthec@}%
+ \vfromcartesian@@ 0,#7 @\leave@ \Y@min=\Y@c \leave@
+ \enter@{\cfromthec@}\enter@{\cplusthec@}%
+ \vfromcartesian@@ 0,#8 @\leave@ \Y@max=\Y@c \leave@
+ \lattice@A=#1\relax
+ \loop
+ \bgroup\lattice@B=#3\relax
+ \enter@{\cfromthec@}\innercroplatticeloop@{#4}\leave@
+ \egroup
+ \ifnum\lattice@A<#2\relax \advance\lattice@A\@ne
+ \repeat \mergecropextents@ }
+\xydef@\innercroplatticeloop@#1{%
+ \loop
+ \enter@{\cfromthec@}\enter@{\cplusthec@}%
+ \vfromcartesian@@ \the\lattice@A,\the\lattice@B @%
+ \edef\latticeX{\expandafter\removePT@\the\X@c}%
+ \edef\latticeY{\expandafter\removePT@\the\Y@c}%
+ \leave@ \DN@{\latticebody}%
+ \ifdim\X@c<\X@min\DN@{}%
+ \else\ifdim\X@c>\X@max\DN@{}%
+ \else\ifdim\Y@c<\Y@min\DN@{}%
+ \else\ifdim\Y@c>\Y@max\DN@{}%
+ \fi\fi\fi\fi \next@ \leave@
+ \ifnum\lattice@B<#1\relax \advance\lattice@B\@ne
+ \repeat }
+\xydef@\mergecropextents@{%
+ \edef\tmp@{%
+ \noexpand\ifdim\X@min>\the\X@min \X@min=\the\X@min\noexpand\fi
+ \noexpand\ifdim\X@max<\the\X@max \X@max=\the\X@max\noexpand\fi
+ \noexpand\ifdim\Y@min>\the\Y@min \Y@min=\the\Y@min\noexpand\fi
+ \noexpand\ifdim\Y@max<\the\Y@max \Y@max=\the\Y@max\noexpand\fi}%
+ \leave@ \tmp@ }
+\xydef@\deflatticebody@{\def\latticebody{\drop{\bullet}}}
+\xydef@\defaultlatticebody{\deflatticebody@}
+\deflatticebody@
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/texinputs/xyxdvi.tex b/macros/generic/diagrams/xypic/texinputs/xyxdvi.tex
new file mode 100644
index 0000000000..7da34d1d1d
--- /dev/null
+++ b/macros/generic/diagrams/xypic/texinputs/xyxdvi.tex
@@ -0,0 +1,138 @@
+%% xyxdvi.tex from $Id: xyxdvi.doc,v 3.7 2011/03/14 20:14:00 krisrose Exp $
+%%
+%% Xy-pic ``xdvi-driver'' option.
+%% Copyright (c) 1995-1996 Ross Moore <ross.moore@mq.edu.au>
+%%
+%% This file is part of the Xy-pic package for graphs and diagrams in TeX.
+%% See the companion README and INSTALL files for further information.
+%% Copyright (c) 1991-2011 Kristoffer H. Rose <krisrose@tug.org>
+%%
+%% The Xy-pic package 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.
+%%
+%% The Xy-pic 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 GNU General Public License
+%% for more details.
+%%
+%% You should have received a copy of the GNU General Public License along
+%% with this package; if not, see http://www.gnu.org/licenses/.
+%%
+\ifx\xyloaded\undefined \input xy \fi
+\xyprovide{xdvi}{XDVI driver}{\stripRCS$Revision: 3.7 $}%
+ {Ross Moore}{ross.moore@mq.edu.au}%
+ {Mathematics Department, Macquarie University, NSW~2109, Australia}
+\xydef@\xdvi@@#1{\dvimessage@{xdvi}{#1}}
+\newdriver{%
+ \xyaddsupport{color}\xdviColor@@
+ \xyaddsupport{crayon}\xdviCrayola@@
+ \xyaddsupport{ps}\xdviPS@@
+ \xyaddsupport{rotate}\xdviRotate@@
+ \xyaddsupport{line}\xdviLine@@
+ \xyaddsupport{frame}\xdviFrames@@
+ \xyaddsupport{tile}\xdviTiles@@
+ \xyaddsupport{tpic}\xdviTPIC@
+}
+\xydef@\xdvi@Color@{\xdviPStypes@
+ \let\xylocalColor@=\xyNoColor@@
+ \def\xycolor@{\xycolor@@}\let\xycolorwarning@=\relax
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-c}{\xydrivernoload@{ps-c}}\installPScolor@ }%
+ \else\DN@{}\fi \next@
+ \ifx\xycolor@@\xyNoColor@ \let\xycolor@@=\xycolor@raw@@\fi
+ \ifx\xycrayolaloaded\empty \DN@{\xystandardcolors@\xdviCrayola@{}}%
+ \else \DN@{\xystandardcolors@}\fi \next@
+ \let\xdviColor@@=\relax
+ \let\UnloadColor@@=\NoXDVIcolor@
+ }%
+\xydef@\xdviColor@@{\xdvi@Color@}
+\xydef@\NoXDVIcolor@{%
+ \def\xycolor@{\xycolor@@}%
+ \let\xycolor@@=\xyNoColor@
+ \let\xylocalColor@=\xyNoColor@@
+ \let\xycolorwarning@=\xycolorwarning@@
+ \let\xdviColor@@=\xdvi@Color@
+ \let\UnloadColor@@=\UnloadColor@
+ }
+\xydef@\NoXDVIcolordvi@{\xywarning@{%
+ Neither colordvi.tex nor colordvi.sty could be found.}%
+ \xyBEcolorcheck@}%
+\xydef@\xdviCrayola@@{\xdviColor@@\xdviCrayola@}
+\xydef@\xdviCrayola@{%
+ \let\prevxycolor@=\newxycolor@
+ \def\newxyXDVIcolor@##1##2##3{\prevxycolor@{##1}{}{##1}}%
+ \let\newxycolor@=\newxyXDVIcolor@
+ \installCrayolaColors@
+ \let\newxycolor@=\prevxycolor@ }%
+\xydef@\xdviPS@@{\xdviPS@}
+\xydef@\xdviPS@unload{\UnloadPS@
+ \let\UnloadPS@@=\UnloadPS@
+ \let\xdviPS@@=\xdviPS@ }
+\xydef@\xdviPStypes@{%
+ \xyinputorelse@{xyps-ps}{\xydrivernoload@{ps-ps}}%
+ \ifx\PSspecial@@\xdviSpecial@\else
+ \let\PSspecial@@=\xdviSpecial@
+ \let\PSmacro@@=\xdviMacro@
+ \let\PSdict@@=\xdviDict@
+ \let\PSspecialdict@@=\xdviDict@
+ \let\PSraw@@=\xdviRaw@
+ \let\PSinclude@@=\xdviInclude@
+ \let\xyPSobeylines@@=\obeyXDVIlines@
+ \let\xyPScurrpt@@=\xdviCurrpt@@
+ \xdvi@@{PostScript}%
+ \fi \XYpredict@ }
+\xywarnifdefined\xdviSpecial@
+\xywarnifdefined\xdviMacro@
+\xywarnifdefined\xdviDict@
+\xywarnifdefined\xdviInclude@
+\xywarnifdefined\xdviRaw@
+{\catcode`\"=11 \catcode`\!=11 \catcode`\:=11
+ \gdef\xdviSpecial@#1{\special{ps:: SDict begin #1 end}}
+ \gdef\xdviMacro@#1{\firstPS@@\special{" {#1}xy}}
+ \gdef\xdviDict@#1{\special{! #1}}
+ \gdef\xdviInclude@#1{\special{header=#1}}
+ \gdef\xdviRaw@#1{\special{ps: SDict begin #1 end}}
+\catcode`\^^M=\active
+ \gdef\next{\catcode`\^^M=\active \let^^M=\space }}%
+\xylet@\obeyXDVIlines@=\next
+\xydef@\xdviCurrpt@{\let\xyPScurrpt@@=\xdviCurrpt@@}%
+\xydef@\xdviCurrpt@@{\PSraw@@{xyp}}
+\xydef@\xdviPS@{\xdviPStypes@
+ \let\xdviPS@@=\PSspecials@true
+ \let\UnloadPS@@=\xdviPS@unload
+ \let\installxyps@@=\relax \installxyps@ }
+\xydef@\xdviRotate@@{\xdviRotate@}
+\xydef@\xdviRotate@{\xdviPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-r}{\xydrivernoload@{ps-r}}%
+ \xdviCurrpt@ \xdviRotScale@ \installPSrotscale@ }%
+ \else\DN@{\xydriverfail@{rotations are}UnloadRotate@\relax}\fi
+ \next@ }
+\xydef@\xdviRotScale@{%
+ \def\xyrot@start(##1){{xyct ##1\space xyrs }}%
+ \def\xyrot@end{}%
+ \def\xyscale@start(##1,##2){{xyct ##1\space##2\space xyss }}%
+ \def\xyscale@end{}}
+\xydef@\xdviLine@@{\xdviLine@}
+\xydef@\xdviLine@{\xdviPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-l}{\xydrivernoload@{ps-l}}\installPSline@ }%
+ \else\DN@{\xydriverfail@{line-widths are}\UnloadLine@\relax}\fi
+ \next@ }
+\xydef@\xdviFrames@@{\xdviFrames@}
+\xydef@\xdviFrames@{\xdviPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-f}{\xydrivernoload@{ps-f}}\installPSframes@ }%
+ \else\DN@{\xydriverfail@{frames are}\UnloadFrames@\relax}\fi
+ \next@ }
+\xydef@\xdviTiles@@{\xdviTiles@}
+\xydef@\xdviTiles@{\xdviPStypes@
+ \expandafter\ifx\csname xyps-psloaded\endcsname\empty\DN@{%
+ \xyinputorelse@{xyps-t}{\xydrivernoload@{ps-t}}\installPSpatterns@ }%
+ \else\DN@{\xydriverfail@{Patterns are}\UnloadPSpatterns@\relax}\fi
+ \next@ }
+\xydef@\xdviTPIC@@{\xdviTPIC@}
+\xydef@\xdviTPIC@{\setupxyTPIC@}
+\xyendinput
diff --git a/macros/generic/diagrams/xypic/type1/xyatip10.pfb b/macros/generic/diagrams/xypic/type1/xyatip10.pfb
new file mode 100644
index 0000000000..0d33c7264e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xyatip10.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xybsql10.pfb b/macros/generic/diagrams/xypic/type1/xybsql10.pfb
new file mode 100644
index 0000000000..93416c6d4c
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xybsql10.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xybtip10.pfb b/macros/generic/diagrams/xypic/type1/xybtip10.pfb
new file mode 100644
index 0000000000..031666e33c
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xybtip10.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xycirc10.pfb b/macros/generic/diagrams/xypic/type1/xycirc10.pfb
new file mode 100644
index 0000000000..e46354d2fa
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xycirc10.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xycmat10.pfb b/macros/generic/diagrams/xypic/type1/xycmat10.pfb
new file mode 100644
index 0000000000..0ed9d2da2d
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xycmat10.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xycmat11.pfb b/macros/generic/diagrams/xypic/type1/xycmat11.pfb
new file mode 100644
index 0000000000..483736a424
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xycmat11.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xycmat12.pfb b/macros/generic/diagrams/xypic/type1/xycmat12.pfb
new file mode 100644
index 0000000000..20635afdb0
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xycmat12.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xycmbt10.pfb b/macros/generic/diagrams/xypic/type1/xycmbt10.pfb
new file mode 100644
index 0000000000..938ed78e11
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xycmbt10.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xycmbt11.pfb b/macros/generic/diagrams/xypic/type1/xycmbt11.pfb
new file mode 100644
index 0000000000..8afdb36d8e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xycmbt11.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xycmbt12.pfb b/macros/generic/diagrams/xypic/type1/xycmbt12.pfb
new file mode 100644
index 0000000000..8d8cc46e62
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xycmbt12.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xydash10.pfb b/macros/generic/diagrams/xypic/type1/xydash10.pfb
new file mode 100644
index 0000000000..1e98c8dcc1
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xydash10.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xyeuat10.pfb b/macros/generic/diagrams/xypic/type1/xyeuat10.pfb
new file mode 100644
index 0000000000..521c9c6f44
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xyeuat10.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xyeuat11.pfb b/macros/generic/diagrams/xypic/type1/xyeuat11.pfb
new file mode 100644
index 0000000000..f27052055e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xyeuat11.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xyeuat12.pfb b/macros/generic/diagrams/xypic/type1/xyeuat12.pfb
new file mode 100644
index 0000000000..5c08a947e8
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xyeuat12.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xyeubt10.pfb b/macros/generic/diagrams/xypic/type1/xyeubt10.pfb
new file mode 100644
index 0000000000..0ca4aa8456
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xyeubt10.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xyeubt11.pfb b/macros/generic/diagrams/xypic/type1/xyeubt11.pfb
new file mode 100644
index 0000000000..e24d02fcdc
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xyeubt11.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xyeubt12.pfb b/macros/generic/diagrams/xypic/type1/xyeubt12.pfb
new file mode 100644
index 0000000000..310265f588
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xyeubt12.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xyluat10.pfb b/macros/generic/diagrams/xypic/type1/xyluat10.pfb
new file mode 100644
index 0000000000..97695589f9
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xyluat10.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xyluat11.pfb b/macros/generic/diagrams/xypic/type1/xyluat11.pfb
new file mode 100644
index 0000000000..b127decc3b
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xyluat11.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xyluat12.pfb b/macros/generic/diagrams/xypic/type1/xyluat12.pfb
new file mode 100644
index 0000000000..dc4b81befb
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xyluat12.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xylubt10.pfb b/macros/generic/diagrams/xypic/type1/xylubt10.pfb
new file mode 100644
index 0000000000..ff8ae8110e
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xylubt10.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xylubt11.pfb b/macros/generic/diagrams/xypic/type1/xylubt11.pfb
new file mode 100644
index 0000000000..9154c0055c
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xylubt11.pfb
Binary files differ
diff --git a/macros/generic/diagrams/xypic/type1/xylubt12.pfb b/macros/generic/diagrams/xypic/type1/xylubt12.pfb
new file mode 100644
index 0000000000..db87a5206b
--- /dev/null
+++ b/macros/generic/diagrams/xypic/type1/xylubt12.pfb
Binary files differ