From 2ba8875a0b268d572ef2a27584d3f845ec1391b0 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Wed, 26 Apr 2000 18:02:26 +0000 Subject: Patch rtemsdoc-4.5.0-rc-0.diff from Ralf Corsepius which contains the bulk of converting the documentation tree to automake and GNU conventions. Comments follow: This is the automake port of rtemsdoc. To apply: cvs co rtemsdoc cd rtemsdoc sh cvs-rm.sh patch -p0 < rtemsdoc-4.5.0-rc-0.diff sh cvs-add.sh [Attention: cvs-rm.sh and cvs-add.sh directly modify cvs] Known bugs: 1) src2html is not supported (yet? - Is this supposed to work?) 2) all *.pdf images now are generated on-the-fly, but not yet deleted during "make distclean" 3) All supplements, including the templated ones, get build and installed. 4) Building outside of the source tree is completely untested and very likely does not work. 5) Make [ps|pdf] are not (yet) supported, make [dvi|info] are supported by automake's default texinfo rules. Fixing 2, 3 and 5 is almost trivial and needs to be done. 4) is a matter of testing and tool-properties, for now it is simply untested. General issues: * gif vs jpg vs png. I would recommend to replace all images with pngs to avoid potential copyright issues (gif) or lack in quality (jpg, jpg is good for real world photographs, but extremely poor on artificial images, graphs). * pdf images do net get placed correctly in pdf-documents. * texinfo: We now use a local copy of texinfo-4.0's texinfo.tex in texinfo/texinfo.tex for generating infos. However pdftex's system-wide texinfo.tex and pdftexinfo.tex are used for generating *.dvi, *.ps, *.pdf. * .cvsignore files still missing. * I have renamed the supplements filename not to use c_, because automake seems to have problems with it. Notes: * Again, I recommend not to put any generated files into CVS. Here, this comprises some *texi, all *.pdf and many *.html pages. Ie. I recommend to run make maintainer-clean before checking in any files. * To get building started, this should be sufficient: ./bootstrap ./configure cd tools; make; cd .. make info * To make a public tarball: [cvs co ; ./bootstrap] ./configure cd tools; make; cd .. make info [make clean] make dist => This generates a rtems-.tar.gz in the toplevel directory. => Building the tools only is required after a "cvs co", but not in a distribution tarball. --- doc/FAQ/Makefile | 117 - doc/FAQ/Makefile.am | 81 + doc/Make.config | 64 - doc/Makefile | 57 - doc/Makefile.am | 45 + doc/VERSION | 5 - doc/ada_user/Makefile | 73 - doc/ada_user/Makefile.am | 52 + doc/archgrey.gif | Bin 12160 -> 0 bytes doc/bootstrap | 128 + doc/bsp_howto/Makefile | 152 - doc/bsp_howto/Makefile.am | 118 + doc/bsp_howto/network.t | 342 + doc/common/Makefile.am | 8 + doc/common/cpright.texi | 2 +- doc/common/dvi.gif | Bin 156 -> 0 bytes doc/common/oaronly.jpg | Bin 1584 -> 0 bytes doc/common/pdf.gif | Bin 249 -> 0 bytes doc/common/pdf1.gif | Bin 173 -> 0 bytes doc/common/ps.gif | Bin 244 -> 0 bytes doc/common/setup.texi | 75 - doc/common/setup.texi.in | 75 + doc/common/up-arrow.gif | Bin 264 -> 0 bytes doc/configure.in | 152 + doc/develenv/Makefile | 54 - doc/develenv/Makefile.am | 22 + doc/do_docs | 53 - doc/filesystem/Makefile | 120 - doc/filesystem/Makefile.am | 68 + doc/gnu_docs/Makefile.am | 13 + doc/index.html | 275 - doc/index.html.in | 275 + doc/itron3.0/Makefile | 133 - doc/itron3.0/Makefile.am | 100 + doc/networking/Makefile | 109 - doc/networking/Makefile.am | 71 + doc/networking/PCIreg.pdf | Bin 1906 -> 0 bytes doc/networking/decdriver.t | 2 +- doc/networking/networkflow.pdf | Bin 19170 -> 0 bytes doc/networking/networktasks.t | 9 +- doc/networking/recvbd.pdf | Bin 1101 -> 0 bytes doc/new_chapters/Makefile | 107 - doc/new_chapters/Makefile.am | 75 + doc/oaronly.jpg | Bin 1584 -> 0 bytes doc/porting/Makefile | 111 - doc/porting/Makefile.am | 78 + doc/posix1003.1/Makefile | 163 - doc/posix1003.1/Makefile.am | 129 + doc/posix_users/Makefile | 177 - doc/posix_users/Makefile.am | 142 + doc/project.am | 72 + doc/relnotes/Makefile | 53 - doc/relnotes/Makefile.am | 21 + doc/rgdb_specs/Makefile | 114 - doc/rgdb_specs/Makefile.am | 83 + doc/rgdb_specs/garde.eps | 8168 ------------------------ doc/rgdb_specs/garde.pdf | Bin 272042 -> 0 bytes doc/rgdb_specs/layers.pdf | Bin 4594 -> 0 bytes doc/rgdb_specs/process.pdf | Bin 7144 -> 0 bytes doc/rgdb_specs/seqbreak.pdf | Bin 2033 -> 0 bytes doc/rgdb_specs/seqdetach.pdf | Bin 1293 -> 0 bytes doc/rgdb_specs/seqinit.pdf | Bin 1511 -> 0 bytes doc/rtems_footer.html | 1 - doc/rtems_footer.html.in | 1 + doc/rtems_gdb/Makefile | 94 - doc/rtems_gdb/Makefile.am | 59 + doc/rtems_header.html | 5 - doc/rtems_header.html.in | 5 + doc/rtems_support.html | 59 - doc/rtems_support.html.in | 59 + doc/src2html/Makefile | 40 - doc/src2html/Makefile.am | 37 + doc/started/Makefile | 102 - doc/started/Makefile.am | 67 + doc/started/pictures/Makefile.am | 13 + doc/started/started.texi | 2 +- doc/started/tversions.texi | 92 + doc/started/versions.texi | 92 - doc/started_ada/Makefile | 92 - doc/started_ada/Makefile.am | 55 + doc/started_ada/started_ada.texi | 2 +- doc/started_ada/tversions.texi | 96 + doc/started_ada/versions.texi | 96 - doc/supplements/Makefile.am | 7 + doc/supplements/hppa1_1/Makefile | 152 - doc/supplements/hppa1_1/Makefile.am | 106 + doc/supplements/hppa1_1/hppa1_1.texi | 4 +- doc/supplements/i386/Makefile | 170 - doc/supplements/i386/Makefile.am | 115 + doc/supplements/i386/i386.texi | 4 +- doc/supplements/i386/timeFORCE386_.t | 1435 +++++ doc/supplements/i960/Makefile | 161 - doc/supplements/i960/Makefile.am | 116 + doc/supplements/i960/i960.texi | 4 +- doc/supplements/i960/timeCVME961_.t | 1422 +++++ doc/supplements/m68k/Makefile | 170 - doc/supplements/m68k/Makefile.am | 116 + doc/supplements/m68k/m68k.texi | 4 +- doc/supplements/m68k/timeMVME136_.t | 1442 +++++ doc/supplements/mips64orion/Makefile | 161 - doc/supplements/mips64orion/Makefile.am | 114 + doc/supplements/mips64orion/mips64orion.texi | 4 +- doc/supplements/mips64orion/timeBSP_.t | 1442 +++++ doc/supplements/powerpc/Makefile | 183 - doc/supplements/powerpc/Makefile.am | 134 + doc/supplements/powerpc/powerpc.texi | 4 +- doc/supplements/powerpc/timeDMV177_.t | 1447 +++++ doc/supplements/powerpc/timePSIM_.t | 1431 +++++ doc/supplements/sh/Makefile | 161 - doc/supplements/sh/Makefile.am | 114 + doc/supplements/sh/sh.texi | 4 +- doc/supplements/sh/timeBSP_.t | 1442 +++++ doc/supplements/sparc/Makefile | 163 - doc/supplements/sparc/Makefile.am | 116 + doc/supplements/sparc/sparc.texi | 4 +- doc/supplements/sparc/timeERC32_.t | 1454 +++++ doc/supplements/supplement.am | 11 + doc/supplements/template/BSP_TIMES | 4 +- doc/supplements/template/Makefile | 159 - doc/supplements/template/Makefile.am | 115 + doc/supplements/template/template.texi | 8 +- doc/supplements/template/timeBSP.t | 10 +- doc/texinfo/texinfo.tex | 5028 ++++++++++----- doc/tools/Makefile.am | 13 + doc/tools/bmenu/Makefile | 45 - doc/tools/bmenu/Makefile.am | 16 + doc/tools/configure.in | 32 + doc/tools/pdl2texi/Makefile | 85 - doc/tools/pdl2texi/Makefile.am | 59 + doc/tools/src2html/Makefile | 38 - doc/tools/src2html/Makefile.am | 25 + doc/tools/src2html1.4a/Ctags/Makefile | 15 - doc/tools/src2html1.4a/Ctags/Makefile.am | 10 + doc/tools/src2html1.4a/FreeBSD/Makefile.am | 21 + doc/tools/src2html1.4a/Makefile.am | 8 + doc/tools/src2html1.4a/ctags-emacs/Makefile.am | 5 + doc/tools/texi2www/Makefile | 50 - doc/tools/texi2www/Makefile.am | 24 + doc/tools/word-replace2 | 101 + doc/user/Makefile | 194 - doc/user/Makefile.am | 157 + doc/user/rtemspie.pdf | Bin 5715766 -> 0 bytes doc/user/states.pdf | Bin 488333 -> 0 bytes 143 files changed, 19013 insertions(+), 14438 deletions(-) delete mode 100644 doc/FAQ/Makefile create mode 100644 doc/FAQ/Makefile.am delete mode 100644 doc/Make.config delete mode 100644 doc/Makefile create mode 100644 doc/Makefile.am delete mode 100644 doc/VERSION delete mode 100644 doc/ada_user/Makefile create mode 100644 doc/ada_user/Makefile.am delete mode 100644 doc/archgrey.gif create mode 100755 doc/bootstrap delete mode 100644 doc/bsp_howto/Makefile create mode 100644 doc/bsp_howto/Makefile.am create mode 100644 doc/bsp_howto/network.t create mode 100644 doc/common/Makefile.am delete mode 100644 doc/common/dvi.gif delete mode 100644 doc/common/oaronly.jpg delete mode 100644 doc/common/pdf.gif delete mode 100644 doc/common/pdf1.gif delete mode 100644 doc/common/ps.gif delete mode 100644 doc/common/setup.texi create mode 100644 doc/common/setup.texi.in delete mode 100644 doc/common/up-arrow.gif create mode 100644 doc/configure.in delete mode 100644 doc/develenv/Makefile create mode 100644 doc/develenv/Makefile.am delete mode 100755 doc/do_docs delete mode 100644 doc/filesystem/Makefile create mode 100644 doc/filesystem/Makefile.am create mode 100644 doc/gnu_docs/Makefile.am delete mode 100644 doc/index.html create mode 100644 doc/index.html.in delete mode 100644 doc/itron3.0/Makefile create mode 100644 doc/itron3.0/Makefile.am delete mode 100644 doc/networking/Makefile create mode 100644 doc/networking/Makefile.am delete mode 100644 doc/networking/PCIreg.pdf delete mode 100644 doc/networking/networkflow.pdf delete mode 100644 doc/networking/recvbd.pdf delete mode 100644 doc/new_chapters/Makefile create mode 100644 doc/new_chapters/Makefile.am delete mode 100644 doc/oaronly.jpg delete mode 100644 doc/porting/Makefile create mode 100644 doc/porting/Makefile.am delete mode 100644 doc/posix1003.1/Makefile create mode 100644 doc/posix1003.1/Makefile.am delete mode 100644 doc/posix_users/Makefile create mode 100644 doc/posix_users/Makefile.am create mode 100644 doc/project.am delete mode 100644 doc/relnotes/Makefile create mode 100644 doc/relnotes/Makefile.am delete mode 100644 doc/rgdb_specs/Makefile create mode 100644 doc/rgdb_specs/Makefile.am delete mode 100644 doc/rgdb_specs/garde.eps delete mode 100644 doc/rgdb_specs/garde.pdf delete mode 100644 doc/rgdb_specs/layers.pdf delete mode 100644 doc/rgdb_specs/process.pdf delete mode 100644 doc/rgdb_specs/seqbreak.pdf delete mode 100644 doc/rgdb_specs/seqdetach.pdf delete mode 100644 doc/rgdb_specs/seqinit.pdf delete mode 100644 doc/rtems_footer.html create mode 100644 doc/rtems_footer.html.in delete mode 100644 doc/rtems_gdb/Makefile create mode 100644 doc/rtems_gdb/Makefile.am delete mode 100644 doc/rtems_header.html create mode 100644 doc/rtems_header.html.in delete mode 100644 doc/rtems_support.html create mode 100644 doc/rtems_support.html.in delete mode 100644 doc/src2html/Makefile create mode 100644 doc/src2html/Makefile.am delete mode 100644 doc/started/Makefile create mode 100644 doc/started/Makefile.am create mode 100644 doc/started/pictures/Makefile.am create mode 100644 doc/started/tversions.texi delete mode 100644 doc/started/versions.texi delete mode 100644 doc/started_ada/Makefile create mode 100644 doc/started_ada/Makefile.am create mode 100644 doc/started_ada/tversions.texi delete mode 100644 doc/started_ada/versions.texi create mode 100644 doc/supplements/Makefile.am delete mode 100644 doc/supplements/hppa1_1/Makefile create mode 100644 doc/supplements/hppa1_1/Makefile.am delete mode 100644 doc/supplements/i386/Makefile create mode 100644 doc/supplements/i386/Makefile.am create mode 100644 doc/supplements/i386/timeFORCE386_.t delete mode 100644 doc/supplements/i960/Makefile create mode 100644 doc/supplements/i960/Makefile.am create mode 100644 doc/supplements/i960/timeCVME961_.t delete mode 100644 doc/supplements/m68k/Makefile create mode 100644 doc/supplements/m68k/Makefile.am create mode 100644 doc/supplements/m68k/timeMVME136_.t delete mode 100644 doc/supplements/mips64orion/Makefile create mode 100644 doc/supplements/mips64orion/Makefile.am create mode 100644 doc/supplements/mips64orion/timeBSP_.t delete mode 100644 doc/supplements/powerpc/Makefile create mode 100644 doc/supplements/powerpc/Makefile.am create mode 100644 doc/supplements/powerpc/timeDMV177_.t create mode 100644 doc/supplements/powerpc/timePSIM_.t delete mode 100644 doc/supplements/sh/Makefile create mode 100644 doc/supplements/sh/Makefile.am create mode 100644 doc/supplements/sh/timeBSP_.t delete mode 100644 doc/supplements/sparc/Makefile create mode 100644 doc/supplements/sparc/Makefile.am create mode 100644 doc/supplements/sparc/timeERC32_.t create mode 100644 doc/supplements/supplement.am delete mode 100644 doc/supplements/template/Makefile create mode 100644 doc/supplements/template/Makefile.am create mode 100644 doc/tools/Makefile.am delete mode 100644 doc/tools/bmenu/Makefile create mode 100644 doc/tools/bmenu/Makefile.am create mode 100644 doc/tools/configure.in delete mode 100644 doc/tools/pdl2texi/Makefile create mode 100644 doc/tools/pdl2texi/Makefile.am delete mode 100644 doc/tools/src2html/Makefile create mode 100644 doc/tools/src2html/Makefile.am delete mode 100644 doc/tools/src2html1.4a/Ctags/Makefile create mode 100644 doc/tools/src2html1.4a/Ctags/Makefile.am create mode 100644 doc/tools/src2html1.4a/FreeBSD/Makefile.am create mode 100644 doc/tools/src2html1.4a/Makefile.am create mode 100644 doc/tools/src2html1.4a/ctags-emacs/Makefile.am delete mode 100644 doc/tools/texi2www/Makefile create mode 100644 doc/tools/texi2www/Makefile.am create mode 100644 doc/tools/word-replace2 delete mode 100644 doc/user/Makefile create mode 100644 doc/user/Makefile.am delete mode 100644 doc/user/rtemspie.pdf delete mode 100644 doc/user/states.pdf diff --git a/doc/FAQ/Makefile b/doc/FAQ/Makefile deleted file mode 100644 index 4ddee5e6f1..0000000000 --- a/doc/FAQ/Makefile +++ /dev/null @@ -1,117 +0,0 @@ -# -# COPYRIGHT (c) 1988-1999. -# On-Line Applications Research Corporation (OAR). -# All rights reserved. -# -# $Id$ -# - -PROJECT=FAQ - -include ../Make.config - -all: html info ps pdf - -dirs: - $(make-dirs) - -COMMON_FILES=../common/cpright.texi ../common/setup.texi - -GENERATED_FILES= \ - basic.texi tools.texi concepts.texi bsp.texi debug.texi freesw.texi \ - embeddedinfo.texi hwdebugaids.texi projects.texi endoftime.texi - -FILES=$(PROJECT).texi $(GENERATED_FILES) - -INFOFILES=$(wildcard $(PROJECT) $(PROJECT)-*) - -info: dirs $(PROJECT) - #cp $(wildcard $(PROJECT) $(PROJECT)-*) $(INFO_INSTALL) - # cp $(PROJECT) $(INFO_INSTALL) - -$(PROJECT): $(FILES) - $(MAKEINFO) $(PROJECT).texi - -dvi: dirs $(PROJECT).dvi -ps: dirs $(PROJECT).ps -pdf: dirs $(PROJECT).pdf - -$(PROJECT).pdf: $(FILES) - $(TEXI2PDF) $(PROJECT).texi - cp $(PROJECT).pdf $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).ps: $(PROJECT).dvi - dvips -o $(PROJECT).ps $(PROJECT).dvi - cp $(PROJECT).ps $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).dvi: $(FILES) - $(TEXI2DVI) $(PROJECT).texi - cp $(PROJECT).dvi $(WWW_INSTALL)/$(PROJECT) - -html: dirs $(FILES) - -mkdir -p $(WWW_INSTALL)/$(PROJECT) - $(TEXI2WWW) $(TEXI2WWW_ARGS) -dir $(WWW_INSTALL)/$(PROJECT) \ - $(PROJECT).texi - -clean: - rm -f *.o $(PROG) *.txt core $(PROJECT).pdf - rm -f *.dvi *.ps *.log *.aux *.cp *.fn *.ky *.pg *.toc *.tp *.vr $(BASE) - rm -f $(PROJECT) $(PROJECT)-* $(GENERATED_FILES) - rm -f *.fixed _* - - -# -# Process Automatically Generated Files -# - -basic.texi: basic.t Makefile - $(BMENU) -c -p "Top" \ - -u "Top" \ - -n "" ${*}.t - -tools.texi: tools.t Makefile - $(BMENU) -c -p "Top" \ - -u "Top" \ - -n "" ${*}.t - -concepts.texi: concepts.t Makefile - $(BMENU) -c -p "" \ - -u "Top" \ - -n "" ${*}.t - -bsp.texi: bsp.t Makefile - $(BMENU) -c -p "" \ - -u "Top" \ - -n "" ${*}.t - -debug.texi: debug.t Makefile - $(BMENU) -c -p "" \ - -u "Top" \ - -n "" ${*}.t - -freesw.texi: freesw.t Makefile - $(BMENU) -c -p "" \ - -u "Top" \ - -n "" ${*}.t - -embeddedinfo.texi: embeddedinfo.t Makefile - $(BMENU) -c -p "" \ - -u "Top" \ - -n "" ${*}.t - -hwdebugaids.texi: hwdebugaids.t Makefile - $(BMENU) -c -p "" \ - -u "Top" \ - -n "" ${*}.t - -projects.texi: projects.t Makefile - $(BMENU) -c -p "" \ - -u "Top" \ - -n "" ${*}.t - - -endoftime.texi: endoftime.t Makefile - $(BMENU) -c -p "" \ - -u "Top" \ - -n "" ${*}.t - diff --git a/doc/FAQ/Makefile.am b/doc/FAQ/Makefile.am new file mode 100644 index 0000000000..5aefbf236a --- /dev/null +++ b/doc/FAQ/Makefile.am @@ -0,0 +1,81 @@ +# +# COPYRIGHT (c) 1988-1999. +# On-Line Applications Research Corporation (OAR). +# All rights reserved. +# +# $Id$ +# + +AUTOMAKE_OPTIONS = foreign + +PROJECT=FAQ + +include $(top_srcdir)/project.am + +COMMON_FILES=$(top_srcdir)/common/cpright.texi $(top_builddir)/common/setup.texi + +GENERATED_FILES= \ + basic.texi tools.texi concepts.texi bsp.texi debug.texi freesw.texi \ + embeddedinfo.texi hwdebugaids.texi projects.texi endoftime.texi + +FILES= + +info_TEXINFOS = FAQ.texi +FAQ_TEXINFOS = $(FILES) $(COMMON_FILES) $(GENERATED_FILES) + +# +# Process Automatically Generated Files +# + +basic.texi: basic.t + $(BMENU) -c -p "Top" \ + -u "Top" \ + -n "" $< + +tools.texi: tools.t + $(BMENU) -c -p "Top" \ + -u "Top" \ + -n "" $< + +concepts.texi: concepts.t + $(BMENU) -c -p "" \ + -u "Top" \ + -n "" $< + +bsp.texi: bsp.t + $(BMENU) -c -p "" \ + -u "Top" \ + -n "" $< + +debug.texi: debug.t + $(BMENU) -c -p "" \ + -u "Top" \ + -n "" $< + +freesw.texi: freesw.t + $(BMENU) -c -p "" \ + -u "Top" \ + -n "" $< + +embeddedinfo.texi: embeddedinfo.t + $(BMENU) -c -p "" \ + -u "Top" \ + -n "" $< + +hwdebugaids.texi: hwdebugaids.t + $(BMENU) -c -p "" \ + -u "Top" \ + -n "" $< + +projects.texi: projects.t + $(BMENU) -c -p "" \ + -u "Top" \ + -n "" $< + + +endoftime.texi: endoftime.t + $(BMENU) -c -p "" \ + -u "Top" \ + -n "" $< + +EXTRA_DIST = entry *.t diff --git a/doc/Make.config b/doc/Make.config deleted file mode 100644 index 1b6d54068b..0000000000 --- a/doc/Make.config +++ /dev/null @@ -1,64 +0,0 @@ -# -# Build information which may change -# -# $Id$ -# - -RTEMS_VERSION=4.5-beta2 -#DOC_INSTALL_BASE=/usr1/rtems/tmp/rtemsdoc-$(RTEMS_VERSION) -DOC_INSTALL_BASE=/home/httpd/html/rtems/rtemsdoc-$(RTEMS_VERSION) -# DOC_INSTALL_BASE=/home/httpd/html/rtems/doc/rtems - -SRCDIR=/usr1/rtems/4.5-work/rtems-doc - -BMENU=$(SRCDIR)/tools/bmenu/bmenu -PDL2TEXI=$(SRCDIR)/tools/pdl2texi/pdl2texi - -SRC2HTML=$(SRCDIR)/tools/src2html/src2html -#TEXI2DVI=$(SRCDIR)/tools/texi2www/texi2dvi -TEXI2DVI=texi2dvi -TEXI2PDF=texi2pdf -TEXI2WWW=$(SRCDIR)/tools/texi2www/texi2www -MAKEINFO=makeinfo -INFO=info -XDVI=xdvi -s 4 -GHOSTVIEW=ghostview -magstep -1 - -# Account for tree organization which restricts visibility -#ifeq ($(DISTRIBUTION_LEVEL),public) -RLEVEL= -WWW_INSTALL=$(DOC_INSTALL_BASE)/html -INFO_INSTALL=$(DOC_INSTALL_BASE)/info -INDEX_FILE=../$(RLEVEL)index.html -#else -#RLEVEL=../ -#WWW_INSTALL=$(DOC_INSTALL_BASE)/html/$(DISTRIBUTION_LEVEL) -#INFO_INSTALL=$(DOC_INSTALL_BASE)/info/$(DISTRIBUTION_LEVEL) -#INDEX_FILE=../$(RLEVEL)rtems_full.html -#endif - -#TEXI2WWW_ARGS=-dirfile $(WWW_INSTALL)/index.html \ -# -header $(WWW_INSTALL)/rtems_header.html \ -# -footer $(WWW_INSTALL)/rtems_footer.html -TEXI2WWW_ARGS=-dirfile $(INDEX_FILE) \ - -header $(WWW_INSTALL)/$(RLEVEL)rtems_header.html \ - -footer $(WWW_INSTALL)/$(RLEVEL)rtems_footer.html \ - -icons $(RLEVEL).. - - -define make-dirs - @ if [ ! -d $(WWW_INSTALL) ] ; then \ - mkdir -p $(WWW_INSTALL); \ - fi - @ if [ ! -d $(INFO_INSTALL) ] ; then \ - mkdir -p $(INFO_INSTALL); \ - fi - @ - cp $(SRCDIR)/oaronly.jpg $(WWW_INSTALL) - @ - sed -e 's/RTEMS_VERSION/$(RTEMS_VERSION)/' \ - <$(SRCDIR)/rtems_footer.html >$(DOC_INSTALL_BASE)/html/rtems_footer.html - @ - cp $(SRCDIR)/HELP.html $(DOC_INSTALL_BASE)/html - @ - cp $(SRCDIR)/common/*.gif $(DOC_INSTALL_BASE)/html - @ - cp $(SRCDIR)/tools/texi2www/*.gif $(DOC_INSTALL_BASE)/html - @ - cp $(SRCDIR)/common/*.jpg $(DOC_INSTALL_BASE)/html -endef - diff --git a/doc/Makefile b/doc/Makefile deleted file mode 100644 index 39ca6a35f4..0000000000 --- a/doc/Makefile +++ /dev/null @@ -1,57 +0,0 @@ -# -# $Id$ -# - -include Make.config - -BASEDIR=$(shell pwd) - -all: env info html ps pdf -# find $(WWW_INSTALL) -type f | xargs -e chmod 444 -# find $(WWW_INSTALL) -type d | xargs -e chmod 555 - -env: tools dirs headers - -dirs: - $(make-dirs) - -headers: - sed -e 's/RTEMS_VERSION/$(RTEMS_VERSION)/' \ - <$(SRCDIR)/index.html >$(WWW_INSTALL)/index.html - sed -e 's/RTEMS_VERSION/$(RTEMS_VERSION)/' \ - <$(SRCDIR)/rtems_support.html >$(WWW_INSTALL)/rtems_support.html - sed -e 's/RTEMS_VERSION/$(RTEMS_VERSION)/' \ - <$(SRCDIR)/rtems_header.html >$(WWW_INSTALL)/rtems_header.html - sed -e 's/RTEMS_VERSION/$(RTEMS_VERSION)/' \ - <$(SRCDIR)/rtems_footer.html >$(WWW_INSTALL)/rtems_footer.html - cp common/*.gif $(WWW_INSTALL) - cp BAD.html $(WWW_INSTALL) - -info: env - ./do_docs $(BASEDIR) info - -html: env - ./do_docs $(BASEDIR) html - -dvi: dirs env - ./do_docs $(BASEDIR) dvi - -ps: dirs env - ./do_docs $(BASEDIR) ps - -pdf: dirs env - ./do_docs $(BASEDIR) pdf - -clean: - ./do_docs $(BASEDIR) clean - cd tools/bmenu ; gmake clean - cd tools/pdl2texi ; gmake clean - cd tools/src2html ; gmake clean - - -.PHONY: tools - -tools: - cd tools/bmenu ; gmake - cd tools/pdl2texi ; gmake - cd tools/src2html ; gmake diff --git a/doc/Makefile.am b/doc/Makefile.am new file mode 100644 index 0000000000..af6790ff4b --- /dev/null +++ b/doc/Makefile.am @@ -0,0 +1,45 @@ +# +# $Id$ +# + +AUTOMAKE_OPTIONS = foreign 1.4 + +# NOTE: The order of the directories is essential +SUBDIRS = \ +tools \ +common \ +images \ +FAQ \ +started \ +user \ +bsp_howto \ +porting \ +develenv \ +posix_users \ +posix1003.1 \ +filesystem \ +itron3.0 \ +networking \ +ada_user \ +started_ada \ +rtems_gdb \ +rgdb_specs \ +new_chapters \ +relnotes \ +supplements \ +gnu_docs \ +src2html + +if USE_HTML +html_DATA = index.html HELP.html BAD.html +endif + +AUTOMAKE_FILES = project.am + +noinst_SCRIPTS = bootstrap + +EXTRA_DIST = \ +$(AUTOMAKE_FILES) \ +HELP.html BAD.html \ +texinfo/texinfo.tex \ +$(noinst_SCRIPTS) diff --git a/doc/VERSION b/doc/VERSION deleted file mode 100644 index 824201fb48..0000000000 --- a/doc/VERSION +++ /dev/null @@ -1,5 +0,0 @@ -# -# $Id$ -# - -RTEMS Version 19991117 diff --git a/doc/ada_user/Makefile b/doc/ada_user/Makefile deleted file mode 100644 index fedd0ea011..0000000000 --- a/doc/ada_user/Makefile +++ /dev/null @@ -1,73 +0,0 @@ -# -# COPYRIGHT (c) 1988-1999. -# On-Line Applications Research Corporation (OAR). -# All rights reserved. -# -# $Id$ -# - -PROJECT=ada_user - -include ../Make.config - -all: html info ps pdf - -COMMON_FILES=../common/cpright.texi ../user/bsp.texi ../user/clock.texi \ - ../user/concepts.texi ../user/conf.texi ../user/dirstat.texi \ - ../user/dpmem.texi ../user/event.texi \ - ../user/fatal.texi ../user/glossary.texi ../user/init.texi \ - ../user/intr.texi ../user/io.texi ../user/mp.texi ../user/msg.texi \ - ../user/overview.texi ../user/part.texi ../user/preface.texi \ - ../user/region.texi ../user/rtmon.texi ../user/schedule.texi \ - ../user/sem.texi ../user/signal.texi ../user/task.texi \ - ../user/timer.texi ../user/userext.texi -FILES= ada_user.texi example.texi $(COMMON_FILES) - -LINKFILES=../user/rtemspie.eps ../user/rtemspie.pdf \ - ../user/states.eps ../user/states.pdf - -dirs: links - $(make-dirs) - -links: - cp $(LINKFILES) . - -INFOFILES=$(wildcard $(PROJECT) $(PROJECT)-*) - -info: dirs $(PROJECT) - cp $(shell ls -1 $(PROJECT) $(PROJECT)-* 2>/dev/null) $(INFO_INSTALL) - -$(PROJECT): $(FILES) - $(MAKEINFO) $(PROJECT).texi - -dvi: dirs $(PROJECT).dvi -ps: dirs $(PROJECT).ps -pdf: dirs $(PROJECT).pdf - -$(PROJECT).pdf: $(FILES) - $(TEXI2PDF) $(PROJECT).texi - cp $(PROJECT).pdf $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).ps: dirs $(PROJECT).dvi - dvips -o $(PROJECT).ps $(PROJECT).dvi - cp $(PROJECT).ps $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).dvi: $(FILES) - $(TEXI2DVI) $(PROJECT).texi - cp $(PROJECT).dvi $(WWW_INSTALL)/$(PROJECT) - -html: dirs $(FILES) - -mkdir -p $(WWW_INSTALL)/$(PROJECT) - cp ../user/rtemsarc.gif ../user/rtemspie.gif ../user/states.gif \ - $(WWW_INSTALL)/$(PROJECT) - $(TEXI2WWW) $(TEXI2WWW_ARGS) -dir $(WWW_INSTALL)/$(PROJECT) \ - $(PROJECT).texi - -# This is one of the few document directories without its own eps and pdf -# files. Thus it can safely remove *.pdf and *.eps. -clean: - rm -f *.o $(PROG) *.txt core *.html *.pdf *.eps - rm -f *.dvi *.ps *.log *.aux *.cp *.fn *.ky *.pg *.toc *.tp *.vr $(BASE) - rm -f $(PROJECT) $(PROJECT)-* _* - rm -f *.cps *.cpss *.fns *.jkys *.pgs *.tps *.vrs - diff --git a/doc/ada_user/Makefile.am b/doc/ada_user/Makefile.am new file mode 100644 index 0000000000..5548c9d193 --- /dev/null +++ b/doc/ada_user/Makefile.am @@ -0,0 +1,52 @@ +# +# COPYRIGHT (c) 1988-1999. +# On-Line Applications Research Corporation (OAR). +# All rights reserved. +# +# $Id$ +# + +AUTOMAKE_OPTIONS = foreign + +PROJECT=ada_user + +include $(top_srcdir)/project.am + +COMMON_FILES= $(top_srcdir)/common/cpright.texi \ + $(top_srcdir)/user/bsp.texi $(top_srcdir)/user/clock.texi \ + $(top_srcdir)/user/concepts.texi $(top_srcdir)/user/conf.texi \ + $(top_srcdir)/user/dirstat.texi \ + $(top_srcdir)/user/dpmem.texi $(top_srcdir)/user/event.texi \ + $(top_srcdir)/user/fatal.texi $(top_srcdir)/user/glossary.texi $(top_srcdir)/user/init.texi \ + $(top_srcdir)/user/intr.texi $(top_srcdir)/user/io.texi $(top_srcdir)/user/mp.texi $(top_srcdir)/user/msg.texi \ + $(top_srcdir)/user/overview.texi $(top_srcdir)/user/part.texi $(top_srcdir)/user/preface.texi \ + $(top_srcdir)/user/region.texi $(top_srcdir)/user/rtmon.texi $(top_srcdir)/user/schedule.texi \ + $(top_srcdir)/user/sem.texi $(top_srcdir)/user/signal.texi $(top_srcdir)/user/task.texi \ + $(top_srcdir)/user/timer.texi $(top_srcdir)/user/userext.texi + +FILES= example.texi + +rtemspie.eps: $(top_srcdir)/user/rtemspie.eps + $(LN_S) $< +states.eps: $(top_srcdir)/user/states.eps + $(LN_S) $< +CLEANFILES += rtemspie.eps states.eps + +rtemsarc.png: $(top_srcdir)/user/rtemsarc.png + $(LN_S) $< +rtemspie.png: $(top_srcdir)/user/rtemspie.png + $(LN_S) $< +states.png: $(top_srcdir)/user/states.png + $(LN_S) $< +CLEANFILES += rtemsarc.png rtemspie.png states.png + +info_TEXINFOS = ada_user.texi +ada_user_TEXINFOS = $(FILES) $(COMMON_FILES) $(GENERATED_FILES) + +if USE_HTML +html_project_DATA += rtemsarc.png rtemspie.png states.png +endif + +$(PROJECT).dvi: rtemspie.eps states.eps +$(PROJECT).pdf: rtemspie.pdf states.pdf + diff --git a/doc/archgrey.gif b/doc/archgrey.gif deleted file mode 100644 index d315b028f2..0000000000 Binary files a/doc/archgrey.gif and /dev/null differ diff --git a/doc/bootstrap b/doc/bootstrap new file mode 100755 index 0000000000..b852ce1c12 --- /dev/null +++ b/doc/bootstrap @@ -0,0 +1,128 @@ +#!/bin/sh +# +# helps bootstrapping, when checked out from CVS +# requires GNU autoconf and GNU automake +# +# $Id$ + +progname=`basename $0` +top_srcdir=`dirname $0` + +verbose=""; +quiet="false" +mode="generate" + +usage() +{ + echo + echo "usage: ${progname} [-h|-q|-v]" + echo + echo "options:" + echo " -h .. display this message and exit"; + echo " -q .. quiet, don't display directories"; + echo " -v .. verbose, pass -v to automake when invoking automake" + echo " -c .. clean, remove all aclocal/autoconf/automake generated files" + echo + exit 1; +} + +generate() +{ + dir=$1 + amopts=$2 + aclocal_amflags=$3 + + ( test "$quiet" = "true" || echo "$dir"; + cd $dir; + aclocal $aclocal_amflags + autoconf + test -n "`grep CONFIG_HEADER configure.in`" && autoheader ; + test -f Makefile.am && automake $amopts ; + test -f Makefile.am && test -n "`grep 'stamp-h\.in' Makefile.in`" \ + && echo timestamp > stamp-h.in + ) +} + +while test $# -gt 0; do +case $1 in +-h|--he|--hel|--help) + usage ;; +-q|--qu|--qui|--quie|--quiet) + quiet="true"; + shift;; +-v|--ve|--ver|--verb|--verbo|--verbos|--verbose) + verbose="-v"; + shift;; +-c|--cl|--cle|--clea|--clean) + mode="clean"; + shift;; +-*) echo "unknown option $1" ; + usage ;; +*) echo "invalid parameter $1" ; + usage ;; +esac +done + +case $mode in +generate) + + case $top_srcdir in + /* ) aclocal_dir=$top_srcdir/aclocal + ;; + *) aclocal_dir=`pwd`/$top_srcdir/aclocal + ;; + esac + if test -d $aclocal_dir; then + aclocal_amflags="-I $aclocal_dir" + fi + + confs=`find . -name 'configure.in' -print | sort` + for i in $confs; do + dir=`dirname $i`; + generate $dir "-a $verbose" "$aclocal_amflags"; + done + ;; + +clean) + test "$quiet" = "$true" || echo "removing automake support files" + find . -name 'config.guess' -print | xargs rm -f + find . -name 'config.sub' -print | xargs rm -f + find . -name 'install-sh' -print | xargs rm -f + find . -name 'missing' -print | xargs rm -f + find . -name 'mkinstalldirs' -print | xargs rm -f + + test "$quiet" = "true" || echo "removing automake generated Makefile.in files" + files=`find . -name 'Makefile.am' -print | sed -e 's%\.am%\.in%g'` ; + for i in $files; do if test -f $i; then + rm -f $i + test "$verbose" = "-v" && echo "$i" + fi; done + + test "$quiet" = "true" || echo "removing configure files" + files=`find . -name 'configure' -print` ; + test "$verbose" = "-v" && test -n "$files" && echo "$files" ; + for i in $files; do if test -f $i; then + rm -f $i + test "$verbose" = "-v" && echo "$i" + fi; done + + test "$quiet" = "true" || echo "removing aclocal.m4 files" + files=`find . -name 'aclocal.m4' -print` ; + test "$verbose" = "-v" && test -n "$files" && echo "$files" ; + for i in $files; do if test -f $i; then + rm -f $i + test "$verbose" = "-v" && echo "$i" + fi; done + + find . -name '*~' -print | xargs rm -f + find . -name '*.orig' -print | xargs rm -f + find . -name '*.rej' -print | xargs rm -f + find . -name 'config.status' -print | xargs rm -f + find . -name 'config.log' -print | xargs rm -f + find . -name 'config.cache' -print | xargs rm -f + find . -name 'Makefile' -print | xargs rm -f + find . -name '.deps' -print | xargs rm -rf + find . -name '.libs' -print | xargs rm -rf + find . -name 'stamp-h.in' | xargs rm -rf + ;; +esac diff --git a/doc/bsp_howto/Makefile b/doc/bsp_howto/Makefile deleted file mode 100644 index 0e12e674b3..0000000000 --- a/doc/bsp_howto/Makefile +++ /dev/null @@ -1,152 +0,0 @@ -# -# COPYRIGHT (c) 1988-1999. -# On-Line Applications Research Corporation (OAR). -# All rights reserved. -# -# $Id$ -# - -PROJECT=bsp_howto - -include ../Make.config - -all: html info ps pdf - -dirs: - $(make-dirs) - -COMMON_FILES=../common/cpright.texi ../common/setup.texi - -GENERATED_FILES= \ - intro.texi target.texi makefiles.texi linkcmds.texi support.texi \ - adaintr.texi init.texi console.texi clock.texi timer.texi rtc.texi \ - nvmem.texi network.texi shmsupp.texi analog.texi discrete.texi - -FILES=$(PROJECT).texi $(GENERATED_FILES) - -INFOFILES=$(wildcard $(PROJECT) $(PROJECT)-*) - -info: dirs $(PROJECT) - #cp $(wildcard $(PROJECT) $(PROJECT)-*) $(INFO_INSTALL) - # cp $(PROJECT) $(INFO_INSTALL) - -$(PROJECT): $(FILES) - $(MAKEINFO) $(PROJECT).texi - -dvi: dirs $(PROJECT).dvi -ps: dirs $(PROJECT).ps -pdf: dirs $(PROJECT).pdf - -$(PROJECT).pdf: $(FILES) - $(TEXI2PDF) $(PROJECT).texi - cp $(PROJECT).pdf $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).ps: $(PROJECT).dvi - dvips -o $(PROJECT).ps $(PROJECT).dvi - cp $(PROJECT).ps $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).dvi: $(FILES) - $(TEXI2DVI) $(PROJECT).texi - cp $(PROJECT).dvi $(WWW_INSTALL)/$(PROJECT) - -html: dirs $(FILES) - -mkdir -p $(WWW_INSTALL)/$(PROJECT) - $(TEXI2WWW) $(TEXI2WWW_ARGS) -dir $(WWW_INSTALL)/$(PROJECT) \ - $(PROJECT).texi - -clean: - rm -f *.o $(PROG) *.txt core $(PROJECT).pdf - rm -f *.dvi *.ps *.log *.aux *.cp *.fn *.ky *.pg *.toc *.tp *.vr $(BASE) - rm -f $(PROJECT) $(PROJECT)-* $(GENERATED_FILES) - rm -f *.fixed _* network.t - -# -# Grab the chapter on writing a network device driver. -# -network.t: - ln -s ../networking/driver.t network.t - - -# -# Process Automatically Generated Files -# - -intro.texi: intro.t Makefile - $(BMENU) -p "Top" \ - -u "Top" \ - -n "Target Dependent Files" ${*}.t - -target.texi: target.t Makefile - $(BMENU) -p "Introduction" \ - -u "Top" \ - -n "Makefiles" ${*}.t - -makefiles.texi: makefiles.t Makefile - $(BMENU) -p "Target Dependent Files Board Support Package Structure" \ - -u "Top" \ - -n "Linker Script" ${*}.t - -linkcmds.texi: linkcmds.t Makefile - $(BMENU) -p "Makefiles Creating a New BSP Make Customization File" \ - -u "Top" \ - -n "Ada95 Interrupt Support" ${*}.t - -adaintr.texi: adaintr.t Makefile - $(BMENU) -p "Linker Script Initialized Data" \ - -u "Top" \ - -n "Miscellaneous Support Files" ${*}.t - -support.texi: support.t Makefile - $(BMENU) -p "Ada95 Interrupt Support Version Requirements" \ - -u "Top" \ - -n "" ${*}.t - -init.texi: init.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -console.texi: console.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -clock.texi: clock.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -timer.texi: timer.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -rtc.texi: rtc.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -nvmem.texi: nvmem.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -network.texi: network.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -shmsupp.texi: shmsupp.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -analog.texi: analog.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -discrete.texi: discrete.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t diff --git a/doc/bsp_howto/Makefile.am b/doc/bsp_howto/Makefile.am new file mode 100644 index 0000000000..4657bbe873 --- /dev/null +++ b/doc/bsp_howto/Makefile.am @@ -0,0 +1,118 @@ +# +# COPYRIGHT (c) 1988-1999. +# On-Line Applications Research Corporation (OAR). +# All rights reserved. +# +# $Id$ +# + +AUTOMAKE_OPTIONS = foreign + +PROJECT=bsp_howto + +include $(top_srcdir)/project.am + +COMMON_FILES=$(top_srcdir)/common/cpright.texi $(top_builddir)/common/setup.texi + +GENERATED_FILES= \ + intro.texi target.texi makefiles.texi linkcmds.texi support.texi \ + adaintr.texi init.texi console.texi clock.texi timer.texi rtc.texi \ + nvmem.texi network.texi shmsupp.texi analog.texi discrete.texi + +FILES= + +info_TEXINFOS = bsp_howto.texi +bsp_howto_TEXINFOS = $(FILES) $(COMMON_FILES) $(GENERATED_FILES) + +# +# Grab the chapter on writing a network device driver. +# +network.t: + ln -s ../networking/driver.t network.t + + +# +# Process Automatically Generated Files +# + +intro.texi: intro.t + $(BMENU) -p "Top" \ + -u "Top" \ + -n "Target Dependent Files" $< + +target.texi: target.t + $(BMENU) -p "Introduction" \ + -u "Top" \ + -n "Makefiles" $< + +makefiles.texi: makefiles.t + $(BMENU) -p "Target Dependent Files Board Support Package Structure" \ + -u "Top" \ + -n "Linker Script" $< + +linkcmds.texi: linkcmds.t + $(BMENU) -p "Makefiles Creating a New BSP Make Customization File" \ + -u "Top" \ + -n "Ada95 Interrupt Support" $< + +adaintr.texi: adaintr.t + $(BMENU) -p "Linker Script Initialized Data" \ + -u "Top" \ + -n "Miscellaneous Support Files" $< + +support.texi: support.t + $(BMENU) -p "Ada95 Interrupt Support Version Requirements" \ + -u "Top" \ + -n "" $< + +init.texi: init.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +console.texi: console.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +clock.texi: clock.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +timer.texi: timer.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +rtc.texi: rtc.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +nvmem.texi: nvmem.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +network.texi: network.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +shmsupp.texi: shmsupp.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +analog.texi: analog.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +discrete.texi: discrete.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +EXTRA_DIST = *.t diff --git a/doc/bsp_howto/network.t b/doc/bsp_howto/network.t new file mode 100644 index 0000000000..c2fa4866f6 --- /dev/null +++ b/doc/bsp_howto/network.t @@ -0,0 +1,342 @@ +@c +@c Written by Eric Norum +@c +@c COPYRIGHT (c) 1988-1999. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@chapter Networking Driver + +@section Introduction + +This chapter is intended to provide an introduction to the +procedure for writing RTEMS network device drivers. +The example code is taken from the `Generic 68360' network device +driver. The source code for this driver is located in the +@code{c/src/lib/libbsp/m68k/gen68360/network} directory in the RTEMS +source code distribution. Having a copy of this driver at +hand when reading the following notes will help significantly. + +@section Learn about the network device + +Before starting to write the network driver become completely +familiar with the programmer's view of the device. +The following points list some of the details of the +device that must be understood before a driver can be written. + +@itemize @bullet + +@item Does the device use DMA to transfer packets to and from +memory or does the processor have to +copy packets to and from memory on the device? + +@item If the device uses DMA, is it capable of forming a single +outgoing packet from multiple fragments scattered in separate +memory buffers? + +@item If the device uses DMA, is it capable of chaining multiple +outgoing packets, or does each outgoing packet require +intervention by the driver? + +@item Does the device automatically pad short frames to the minimum +64 bytes or does the driver have to supply the padding? + +@item Does the device automatically retry a transmission on detection +of a collision? + +@item If the device uses DMA, is it capable of buffering multiple +packets to memory, or does the receiver have to be restarted +after the arrival of each packet? + +@item How are packets that are too short, too long, or received with +CRC errors handled? Does the device automatically continue +reception or does the driver have to intervene? + +@item How is the device Ethernet address set? How is the device +programmed to accept or reject broadcast and multicast packets? + +@item What interrupts does the device generate? Does it generate an +interrupt for each incoming packet, or only for packets received +without error? Does it generate an interrupt for each packet +transmitted, or only when the transmit queue is empty? What +happens when a transmit error is detected? + +@end itemize + +In addition, some controllers have specific questions regarding +board specific configuration. For example, the SONIC Ethernet +controller has a very configurable data bus interface. It can +even be configured for sixteen and thirty-two bit data buses. This +type of information should be obtained from the board vendor. + +@section Understand the network scheduling conventions + +When writing code for the driver transmit and receive tasks, +take care to follow the network scheduling conventions. All tasks +which are associated with networking share various +data structures and resources. To ensure the consistency +of these structures the tasks +execute only when they hold the network semaphore (@code{rtems_bsdnet_semaphore}). +The transmit and receive tasks must abide by this protocol. Be very +careful to avoid `deadly embraces' with the other network tasks. +A number of routines are provided to make it easier for the network +driver code to conform to the network task scheduling conventions. + +@itemize @bullet + +@item @code{void rtems_bsdnet_semaphore_release(void)} + +This function releases the network semaphore. +The network driver tasks must call this function immediately before +making any blocking RTEMS request. + +@item @code{void rtems_bsdnet_semaphore_obtain(void)} + +This function obtains the network semaphore. +If a network driver task has released the network semaphore to allow other +network-related tasks to run while the task blocks, then this function must +be called to reobtain the semaphore immediately after the return from the +blocking RTEMS request. + +@item @code{rtems_bsdnet_event_receive(rtems_event_set, rtems_option, rtems_interval, rtems_event_set *)} +The network driver task should call this function when it wishes to wait +for an event. This function releases the network semaphore, +calls @code{rtems_event_receive} to wait for the specified event +or events and reobtains the semaphore. +The value returned is the value returned by the @code{rtems_event_receive}. + +@end itemize + +@section Network Driver Makefile + +Network drivers are considered part of the BSD network package and as such +are to be compiled with the appropriate flags. This can be accomplished by +adding @code{-D__INSIDE_RTEMS_BSD_TCPIP_STACK__} to the @code{command line}. +If the driver is inside the RTEMS source tree or is built using the +RTEMS application Makefiles, then adding the following line accomplishes +this: + +@example +DEFINES += -D__INSIDE_RTEMS_BSD_TCPIP_STACK__ +@end example + +This is equivalent to the following list of definitions. Early versions +of the RTEMS BSD network stack required that all of these be defined. + +@example +-D_COMPILING_BSD_KERNEL_ -DKERNEL -DINET -DNFS \ + -DDIAGNOSTIC -DBOOTP_COMPAT +@end example + +Defining these macros tells the network header files that the driver +is to be compiled with extended visibility into the network stack. This +is in sharp contrast to applications that simply use the network stack. +Applications do not require this level of visibility and should stick +to the portable application level API. + +As a direct result of being logically internal to the network stack, +network drivers use the BSD memory allocation routines This means, +for example, that malloc takes three arguments. See the SONIC +device driver (@code{c/src/lib/libchip/network/sonic.c}) for an example +of this. Because of this, network drivers should not include +@code{}. Doing so will result in conflicting definitions +of @code{malloc()}. + +@b{Application level} code including network servers such as the FTP +daemon are @b{not} part of the BSD kernel network code and should not be +compiled with the BSD network flags. They should include +@code{} and not define the network stack visibility +macros. + +@section Write the Driver Attach Function + +The driver attach function is responsible for configuring the driver +and making the connection between the network stack +and the driver. + +Driver attach functions take a pointer to an +@code{rtems_bsdnet_ifconfig} structure as their only argument. +and set the driver parameters based on the +values in this structure. If an entry in the configuration +structure is zero the attach function chooses an +appropriate default value for that parameter. + + +The driver should then set up several fields in the ifnet structure +in the device-dependent data structure supplied and maintained by the driver: + +@table @code +@item ifp->if_softc +Pointer to the device-dependent data. The first entry +in the device-dependent data structure must be an @code{arpcom} +structure. + +@item ifp->if_name +The name of the device. The network stack uses this string +and the device number for device name lookups. The device name should +be obtained from the @code{name} entry in the configuration structure. + +@item ifp->if_unit +The device number. The network stack uses this number and the +device name for device name lookups. For example, if +@code{ifp->if_name} is @samp{scc} and @code{ifp->if_unit} is @samp{1}, +the full device name would be @samp{scc1}. The unit number should be +obtained from the `name' entry in the configuration structure. + +@item ifp->if_mtu +The maximum transmission unit for the device. For Ethernet +devices this value should almost always be 1500. + +@item ifp->if_flags +The device flags. Ethernet devices should set the flags +to @code{IFF_BROADCAST|IFF_SIMPLEX}, indicating that the +device can broadcast packets to multiple destinations +and does not receive and transmit at the same time. + +@item ifp->if_snd.ifq_maxlen +The maximum length of the queue of packets waiting to be +sent to the driver. This is normally set to @code{ifqmaxlen}. + +@item ifp->if_init +The address of the driver initialization function. + +@item ifp->if_start +The address of the driver start function. + +@item ifp->if_ioctl +The address of the driver ioctl function. + +@item ifp->if_output +The address of the output function. Ethernet devices +should set this to @code{ether_output}. +@end table + +RTEMS provides a function to parse the driver name in the +configuration structure into a device name and unit number. + +@example +int rtems_bsdnet_parse_driver_name ( + const struct rtems_bsdnet_ifconfig *config, + char **namep +); +@end example + +The function takes two arguments; a pointer to the configuration +structure and a pointer to a pointer to a character. The function +parses the configuration name entry, allocates memory for the driver +name, places the driver name in this memory, sets the second argument +to point to the name and returns the unit number. +On error, a message is printed and -1 is returned. + +Once the attach function has set up the above entries it must link the +driver data structure onto the list of devices by +calling @code{if_attach}. Ethernet devices should then +call @code{ether_ifattach}. Both functions take a pointer to the +device's @code{ifnet} structure as their only argument. + +The attach function should return a non-zero value to indicate that +the driver has been successfully configured and attached. + +@section Write the Driver Start Function. +This function is called each time the network stack wants to start the +transmitter. This occures whenever the network stack adds a packet +to a device's send queue and the @code{IFF_OACTIVE} bit in the +device's @code{if_flags} is not set. + +For many devices this function need only set the @code{IFF_OACTIVE} bit in the +@code{if_flags} and send an event to the transmit task +indicating that a packet is in the driver transmit queue. + + +@section Write the Driver Initialization Function. + +This function should initialize the device, attach to interrupt handler, +and start the driver transmit and receive tasks. The function + +@example +rtems_id +rtems_bsdnet_newproc (char *name, + int stacksize, + void(*entry)(void *), + void *arg); +@end example + +should be used to start the driver tasks. + +Note that the network stack may call the driver initialization function more +than once. +Make sure multiple versions of the receive and transmit tasks are not accidentally +started. + + + +@section Write the Driver Transmit Task + +This task is reponsible for removing packets from the driver send queue and sending them to the device. The task should block waiting for an event from the +driver start function indicating that packets are waiting to be transmitted. +When the transmit task has drained the driver send queue the task should clear +the @code{IFF_OACTIVE} bit in @code{if_flags} and block until another outgoing +packet is queued. + + +@section Write the Driver Receive Task +This task should block until a packet arrives from the device. If the +device is an Ethernet interface the function @code{ether_input} should be called +to forward the packet to the network stack. The arguments to @code{ether_input} +are a pointer to the interface data structure, a pointer to the ethernet +header and a pointer to an mbuf containing the packet itself. + + + + +@section Write the Driver Interrupt Handler +A typical interrupt handler will do nothing more than the hardware +manipulation required to acknowledge the interrupt and send an RTEMS event +to wake up the driver receive or transmit task waiting for the event. +Network interface interrupt handlers must not make any calls to other +network routines. + + + +@section Write the Driver IOCTL Function +This function handles ioctl requests directed at the device. The ioctl +commands which must be handled are: + +@table @code +@item SIOCGIFADDR +@item SIOCSIFADDR +If the device is an Ethernet interface these +commands should be passed on to @code{ether_ioctl}. + +@item SIOCSIFFLAGS +This command should be used to start or stop the device, +depending on the state of the interface @code{IFF_UP} and +@code{IFF_RUNNING} bits in @code{if_flags}: +@table @code +@item IFF_RUNNING +Stop the device. + +@item IFF_UP +Start the device. + +@item IFF_UP|IFF_RUNNING +Stop then start the device. + +@item 0 +Do nothing. + +@end table +@end table + + + +@section Write the Driver Statistic-Printing Function +This function should print the values of any statistic/diagnostic +counters the network driver may use. The driver ioctl function should call +the statistic-printing function when the ioctl command is +@code{SIO_RTEMS_SHOW_STATS}. + + diff --git a/doc/common/Makefile.am b/doc/common/Makefile.am new file mode 100644 index 0000000000..bbcef958c8 --- /dev/null +++ b/doc/common/Makefile.am @@ -0,0 +1,8 @@ +## $Id$ + +AUTOMAKE_OPTIONS = foreign + +EXTRA_DIST = \ +cpright.texi timemac.texi \ +timetbl.t treedef.tex wksheets.t timing.t + diff --git a/doc/common/cpright.texi b/doc/common/cpright.texi index 2d188d2394..0768c55db1 100644 --- a/doc/common/cpright.texi +++ b/doc/common/cpright.texi @@ -17,7 +17,7 @@ @end tex @vskip 0pt plus 1filll -COPYRIGHT @copyright{} 1988 - 1999.@* +COPYRIGHT @copyright{} 1988 - 2000.@* On-Line Applications Research Corporation (OAR).@* The authors have used their best efforts in preparing diff --git a/doc/common/dvi.gif b/doc/common/dvi.gif deleted file mode 100644 index 163a5d52b5..0000000000 Binary files a/doc/common/dvi.gif and /dev/null differ diff --git a/doc/common/oaronly.jpg b/doc/common/oaronly.jpg deleted file mode 100644 index c87c151404..0000000000 Binary files a/doc/common/oaronly.jpg and /dev/null differ diff --git a/doc/common/pdf.gif b/doc/common/pdf.gif deleted file mode 100644 index c88fd777c4..0000000000 Binary files a/doc/common/pdf.gif and /dev/null differ diff --git a/doc/common/pdf1.gif b/doc/common/pdf1.gif deleted file mode 100644 index 784fe2ac8c..0000000000 Binary files a/doc/common/pdf1.gif and /dev/null differ diff --git a/doc/common/ps.gif b/doc/common/ps.gif deleted file mode 100644 index 0f565bc1db..0000000000 Binary files a/doc/common/ps.gif and /dev/null differ diff --git a/doc/common/setup.texi b/doc/common/setup.texi deleted file mode 100644 index 27bb5ce266..0000000000 --- a/doc/common/setup.texi +++ /dev/null @@ -1,75 +0,0 @@ -@c -@c COPYRIGHT (c) 1988-1999. -@c On-Line Applications Research Corporation (OAR). -@c All rights reserved. -@c -@c $Id$ -@c - -@c -@c Set Variables -@c - -@set RTEMS-RELEASE 4.5-beta2 -@set RTEMS-EDITION 1 -@set RTEMS-VERSION 4.5-beta2 -@set RTEMS-UPDATE-DATE April 13 2000 -@set RTEMS-UPDATE-MONTH April 2000 - -@c -@c The following determines which set of the tables and figures we will use. -@c We default to ASCII but if available TeX or HTML versions will -@c be used instead. -@c - -@set use-ascii -@clear use-html -@clear use-tex - -@iftex -@clear use-ascii -@clear use-html -@set use-tex -@end iftex - -@ifhtml -@clear use-ascii -@clear use-tex -@set use-html -@end ifhtml - -@c -@c The following variable says to use texinfo or html for the two column -@c texinfo tables. For somethings the format does not look good in html. -@c With our adjustment to the left column in TeX, it nearly always looks -@c good printed. -@c -@ifset use-ascii -@set use-texinfo-tables -@end ifset -@ifset use-tex -@set use-texinfo-tables -@end ifset -@ifset use-html -@clear use-texinfo-tables -@end ifset - -@c -@c Custom whitespace adjustments. We could fiddle a bit more. -@c -@tex -\global\parindent 0in -\global\chapheadingskip = 15pt plus 4pt minus 2pt -\global\secheadingskip = 12pt plus 4pt minus 2pt -\global\subsecheadingskip = 9pt plus 4pt minus 2pt -\global\hbadness = 10000 -\global\tolerance = 6000 -\global\tableindent = 1.5in -\global\itemindent = 0.5in - -@ifclear smallbook -\global\parskip 6pt plus 1pt -@end ifclear -@end tex - - diff --git a/doc/common/setup.texi.in b/doc/common/setup.texi.in new file mode 100644 index 0000000000..0aacbe4ffb --- /dev/null +++ b/doc/common/setup.texi.in @@ -0,0 +1,75 @@ +@c +@c COPYRIGHT (c) 1988-1999. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@c +@c Set Variables +@c + +@set RTEMS-RELEASE @RTEMS_RELEASE@ +@set RTEMS-EDITION 1 +@set RTEMS-VERSION @RTEMS_VERSION@ +@set RTEMS-UPDATE-DATE February 23 2000 +@set RTEMS-UPDATE-MONTH February 2000 + +@c +@c The following determines which set of the tables and figures we will use. +@c We default to ASCII but if available TeX or HTML versions will +@c be used instead. +@c + +@set use-ascii +@clear use-html +@clear use-tex + +@iftex +@clear use-ascii +@clear use-html +@set use-tex +@end iftex + +@ifhtml +@clear use-ascii +@clear use-tex +@set use-html +@end ifhtml + +@c +@c The following variable says to use texinfo or html for the two column +@c texinfo tables. For somethings the format does not look good in html. +@c With our adjustment to the left column in TeX, it nearly always looks +@c good printed. +@c +@ifset use-ascii +@set use-texinfo-tables +@end ifset +@ifset use-tex +@set use-texinfo-tables +@end ifset +@ifset use-html +@clear use-texinfo-tables +@end ifset + +@c +@c Custom whitespace adjustments. We could fiddle a bit more. +@c +@tex +\global\parindent 0in +\global\chapheadingskip = 15pt plus 4pt minus 2pt +\global\secheadingskip = 12pt plus 4pt minus 2pt +\global\subsecheadingskip = 9pt plus 4pt minus 2pt +\global\hbadness = 10000 +\global\tolerance = 6000 +\global\tableindent = 1.5in +\global\itemindent = 0.5in + +@ifclear smallbook +\global\parskip 6pt plus 1pt +@end ifclear +@end tex + + diff --git a/doc/common/up-arrow.gif b/doc/common/up-arrow.gif deleted file mode 100644 index 82aa8ccc68..0000000000 Binary files a/doc/common/up-arrow.gif and /dev/null differ diff --git a/doc/configure.in b/doc/configure.in new file mode 100644 index 0000000000..adc4f15c81 --- /dev/null +++ b/doc/configure.in @@ -0,0 +1,152 @@ +dnl Process this file with autoconf to produce a configure script. + +AC_PREREQ(2.13) + +AC_INIT(project.am) + +AM_INIT_AUTOMAKE(rtemsdoc,4.5.0-beta2,no) + +RTEMS_VERSION="$VERSION" +AC_SUBST(RTEMS_VERSION) + +RTEMS_RELEASE="4.5.0" +AC_SUBST(RTEMS_RELEASE) + +AC_ARG_ENABLE(html, +[ --disable-html disable html support ], +[case $enableval in +yes) ;; +no) ;; +*) AC_MSG_ERROR("invalid value");; +esac], +[enable_html="yes"] +) + +AC_ARG_ENABLE(dvi, +[ --disable-dvi disable dvi support ], +[case $enableval in +yes) ;; +no) ;; +*) AC_MSG_ERROR("invalid value");; +esac], +[enable_dvi="yes"] +) + +AC_ARG_ENABLE(pdf, +[ --disable-pdf disable pdf support ], +[case $enableval in +yes) ;; +no) ;; +*) AC_MSG_ERROR("invalid value");; +esac], +[enable_pdf="yes"] +) + +AC_ARG_ENABLE(ps, +[ --disable-ps disable ps support ], +[case $enableval in +yes) ;; +no) ;; +*) AC_MSG_ERROR("invalid value");; +esac], +[enable_ps="yes"] +) + +htmldir='$(pkgdatadir)/html' +AC_SUBST(htmldir) + +dnl Checks for programs. +AC_PROG_LN_S + +AC_CHECK_PROGS(PERL,perl) + +TEXI2WWW='$(PERL) $(top_srcdir)/tools/texi2www/texi2www' +AC_SUBST(TEXI2WWW) + +AC_CHECK_PROGS(GS,gs) +AM_CONDITIONAL(GS,test x"$GS" != x"") + +# TEXI2DVI='$(PERL) $(top_srcdir)/tools/texi2www/texi2dvi' +AC_CHECK_PROGS(TEXI2DVI,texi2dvi) +AM_CONDITIONAL(TEXI2DVI,test x"$TEXI2DVI" != x"") + +if test "$enable_pdf" = "yes"; then + AC_CHECK_PROGS(EPSTOPDF,epstopdf) + AM_CONDITIONAL(EPSTOPDF,test x"$EPSTOPDF" != x"") + + AC_CHECK_PROGS(TEXI2PDF,texi2pdf) + AM_CONDITIONAL(TEXI2PDF,test x"$TEXI2PDF" != x"") +fi + +AM_CONDITIONAL(USE_HTML, + test "$enable_html" = "yes" \ + && test x"PERL" != x"" ) + +AM_CONDITIONAL(USE_DVI, + test "$enable_dvi" = "yes" \ + && test x"$TEXI2DVI" != x"" ) + +AM_CONDITIONAL(USE_PS, + test "$enable_ps" = "yes" \ + && test x"$TEXI2DVI" != x"" ) + +AM_CONDITIONAL(USE_PDF, + test "$enable_pdf" = "yes" \ + && test x"$TEXI2DVI" != x"" \ + && test x"$TEXI2PDF" != x"" ) + +AM_CONDITIONAL(USE_EXP, test x=y ) + +BMENU='$(top_builddir)/tools/bmenu/bmenu' +AC_SUBST(BMENU) + +dnl Checks for libraries. + +dnl Checks for header files. + +dnl Checks for typedefs, structures, and compiler characteristics. + +dnl Checks for library functions. + +AC_CONFIG_SUBDIRS(tools) + +AC_OUTPUT( +Makefile +rtems_header.html +rtems_footer.html +rtems_support.html +index.html +images/Makefile +common/Makefile +common/setup.texi +FAQ/Makefile +develenv/Makefile +user/Makefile +bsp_howto/Makefile +started/Makefile +started/pictures/Makefile +porting/Makefile +networking/Makefile +posix_users/Makefile +posix1003.1/Makefile +filesystem/Makefile +itron3.0/Makefile +ada_user/Makefile +started_ada/Makefile +rtems_gdb/Makefile +rgdb_specs/Makefile +relnotes/Makefile +new_chapters/Makefile +supplements/Makefile +supplements/hppa1_1/Makefile +supplements/i386/Makefile +supplements/i960/Makefile +supplements/m68k/Makefile +supplements/mips64orion/Makefile +supplements/powerpc/Makefile +supplements/sh/Makefile +supplements/sparc/Makefile +supplements/template/Makefile +gnu_docs/Makefile +src2html/Makefile +) diff --git a/doc/develenv/Makefile b/doc/develenv/Makefile deleted file mode 100644 index 2214554ae6..0000000000 --- a/doc/develenv/Makefile +++ /dev/null @@ -1,54 +0,0 @@ -# -# COPYRIGHT (c) 1988-1999. -# On-Line Applications Research Corporation (OAR). -# All rights reserved. -# -# $Id$ -# - -PROJECT=develenv - -include ../Make.config - -all: html info ps pdf - -dirs: - $(make-dirs) - -COMMON_FILES=../common/cpright.texi - -FILES=compile.texi $(PROJECT).texi direct.texi intro.texi sample.texi utils.texi - -info: dirs $(PROJECT) - cp $(PROJECT) $(INFO_INSTALL) - -$(PROJECT): $(FILES) - $(MAKEINFO) $(PROJECT).texi - -dvi: dirs $(PROJECT).dvi -ps: dirs $(PROJECT).ps -pdf: dirs $(PROJECT).pdf - -$(PROJECT).pdf: $(FILES) - $(TEXI2PDF) $(PROJECT).texi - cp $(PROJECT).pdf $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).ps: $(PROJECT).dvi - dvips -o $(PROJECT).ps $(PROJECT).dvi - cp $(PROJECT).ps $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).dvi: $(FILES) - $(TEXI2DVI) $(PROJECT).texi - cp $(PROJECT).dvi $(WWW_INSTALL)/$(PROJECT) - -html: dirs - -mkdir -p $(WWW_INSTALL)/$(PROJECT) - -cd .. ; gmake headers - $(TEXI2WWW) $(TEXI2WWW_ARGS) -dir $(WWW_INSTALL)/$(PROJECT) \ - $(PROJECT).texi - -clean: - rm -f *.o $(PROG) *.txt core *.html $(PROJECT).pdf - rm -f *.dvi *.ps *.log *.aux *.cp *.fn *.ky *.pg *.toc *.tp *.vr $(BASE) - rm -f $(PROJECT) $(PROJECT)-* _* - diff --git a/doc/develenv/Makefile.am b/doc/develenv/Makefile.am new file mode 100644 index 0000000000..29c4c0e31e --- /dev/null +++ b/doc/develenv/Makefile.am @@ -0,0 +1,22 @@ +# +# COPYRIGHT (c) 1988-1999. +# On-Line Applications Research Corporation (OAR). +# All rights reserved. +# +# $Id$ +# + +AUTOMAKE_OPTIONS = foreign + +PROJECT=develenv + +include $(top_srcdir)/project.am + +COMMON_FILES = $(top_srcdir)/common/cpright.texi + +FILES = compile.texi direct.texi intro.texi sample.texi utils.texi + +GENERATED_FILES = + +info_TEXINFOS = develenv.texi +develenv_TEXINFOS = $(FILES) $(COMMON_FILES) $(GENERATED_FILES) diff --git a/doc/do_docs b/doc/do_docs deleted file mode 100755 index ef3771a6f4..0000000000 --- a/doc/do_docs +++ /dev/null @@ -1,53 +0,0 @@ -#! /bin/sh -# -# $Id$ -# - -basedir=$1 -shift - -# classes of documents -supplements="supplements/hppa1_1 supplements/i386 \ - supplements/i960 supplements/m68k supplements/sparc supplements/powerpc" - -# relnotes is obsolete - -# Division by access level -public_docs="FAQ user develenv networking posix_users itron3.0 \ - started started_ada rtems_gdb rgdb_specs" -support_docs="${supplements} bsp_howto filesystem porting ada_user posix1003.1" - -if [ x${MANUAL_SET} = x ] ; then - MANUAL_SET=public -fi - -case ${MANUAL_SET} in - public) - # manuals="$public_docs" - # ;; - #support) - manuals="$public_docs $support_docs" - ;; - *) - echo "ERROR: Unknown manual set ${MANUAL_SET}" - exit 1 - ;; -esac - -for action in $* -do - for manual in $manuals - do - if [ x${TEST} = xyes ] ; then - echo "TEST *** make $action on ${basedir}/${manual} ***" - else - echo - echo "*** make $action on ${basedir}/${manual} ***" - echo - cd ${basedir}/${manual} - gmake $action || exit $? - fi - done -done - -exit 0 diff --git a/doc/filesystem/Makefile b/doc/filesystem/Makefile deleted file mode 100644 index 868ab9b40c..0000000000 --- a/doc/filesystem/Makefile +++ /dev/null @@ -1,120 +0,0 @@ -# -# COPYRIGHT (c) 1988-1999. -# On-Line Applications Research Corporation (OAR). -# All rights reserved. -# -# $Id$ -# - -PROJECT=filesystem - -include ../Make.config - -REPLACE=../tools/word-replace - -BMENU+= -c - -all: html info ps pdf - -dirs: - $(make-dirs) - -COMMON_FILES=../common/cpright.texi ../common/setup.texi - -GENERATED_FILES=patheval.texi \ - init.texi mounting.texi syscalls.texi fsrequirements.texi imfs.texi \ - miniimfs.texi tftp.texi - -FILES= $(PROJECT).texi \ - preface.texi $(GENERATED_FILES) - -INFOFILES=$(wildcard $(PROJECT) $(PROJECT)-*) - -info: dirs $(PROJECT) - #cp $(wildcard $(PROJECT) $(PROJECT)-*) $(INFO_INSTALL) - cp $(PROJECT) $(INFO_INSTALL) - -$(PROJECT): $(FILES) - $(MAKEINFO) $(PROJECT).texi - -dvi: dirs $(PROJECT).dvi -ps: dirs $(PROJECT).ps -pdf: dirs $(PROJECT).pdf - -$(PROJECT).pdf: $(FILES) - $(TEXI2PDF) $(PROJECT).texi - cp $(PROJECT).pdf $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).ps: $(PROJECT).dvi - dvips -o $(PROJECT).ps $(PROJECT).dvi - cp $(PROJECT).ps $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).dvi: $(FILES) - $(TEXI2DVI) $(PROJECT).texi - cp $(PROJECT).dvi $(WWW_INSTALL)/$(PROJECT) - -patheval.texi: patheval.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -init.texi: init.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -mounting.texi: mounting.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -syscalls.texi: syscalls.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -fsrequirements.texi: fsrequirements.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -imfs.texi: imfs.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -miniimfs.texi: miniimfs.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -tftp.texi: tftp.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -html: dirs $(FILES) - -mkdir -p $(WWW_INSTALL)/$(PROJECT) - # rm -f $(WWW_INSTALL)/$(PROJECT)/networkflow.jpg - # rm -f $(WWW_INSTALL)/$(PROJECT)/networkflow.png - # rm -f $(WWW_INSTALL)/$(PROJECT)/PCIreg.jpg - # cp recvbd.jpg $(WWW_INSTALL)/$(PROJECT)/recvbd.jpg - # cp networkflow.jpg $(WWW_INSTALL)/$(PROJECT)/networkflow.jpg - # cp networkflow.png $(WWW_INSTALL)/$(PROJECT)/networkflow.png - # cp PCIreg.jpg $(WWW_INSTALL)/$(PROJECT)/PCIreg.jpg - $(TEXI2WWW) $(TEXI2WWW_ARGS) -dir $(WWW_INSTALL)/$(PROJECT) \ - $(PROJECT).texi - -clean: - rm -f *.o $(PROG) *.txt core $(PROJECT).pdf - rm -f *.dvi *.ps *.log *.aux *.cp *.fn *.ky *.pg *.toc *.tp *.vr $(BASE) - rm -f $(PROJECT) $(PROJECT)-* $(GENERATED_FILES) - rm -f networking networking-* - rm -f timedata.texi timetbl.texi intr.texi wksheets.texi - rm -f timetbl.t wksheets.t - rm -f *.fixed _* - -convert: -# /usr/bin/gs -dMaxBitmap=300000000 -g5500x7500 -sDEVICE=pdfwrite -q -dNOPAUSE -dSAFER -sOutputFile=networkflow.pdf -- networkflow.eps -c -quit -# /usr/bin/gs -dMaxBitmap=300000000 -g4500x5500 -sDEVICE=pdfwrite -q -dNOPAUSE -dSAFER -sOutputFile=PCIreg.pdf -- PCIreg.eps -c -quit -# /usr/bin/gs -dMaxBitmap=300000000 -g4500x5500 -sDEVICE=pdfwrite -q -dNOPAUSE -dSAFER -sOutputFile=recvbd.pdf -- recvbd.eps -c -quit diff --git a/doc/filesystem/Makefile.am b/doc/filesystem/Makefile.am new file mode 100644 index 0000000000..5b02ed1d39 --- /dev/null +++ b/doc/filesystem/Makefile.am @@ -0,0 +1,68 @@ +# +# COPYRIGHT (c) 1988-1999. +# On-Line Applications Research Corporation (OAR). +# All rights reserved. +# +# $Id$ +# + +AUTOMAKE_OPTIONS = foreign + +PROJECT=filesystem + +include $(top_srcdir)/project.am + +BMENU+= -c + +COMMON_FILES=$(top_srcdir)/common/cpright.texi $(top_builddir)/common/setup.texi + +GENERATED_FILES=patheval.texi \ + init.texi mounting.texi syscalls.texi fsrequirements.texi imfs.texi \ + miniimfs.texi tftp.texi + +FILES= preface.texi + +info_TEXINFOS = filesystem.texi +filesystem_TEXINFOS = $(FILES) $(COMMON_FILES) $(GENERATED_FILES) + +patheval.texi: patheval.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +init.texi: init.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +mounting.texi: mounting.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +syscalls.texi: syscalls.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +fsrequirements.texi: fsrequirements.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +imfs.texi: imfs.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +miniimfs.texi: miniimfs.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +tftp.texi: tftp.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +EXTRA_DIST = *.t diff --git a/doc/gnu_docs/Makefile.am b/doc/gnu_docs/Makefile.am new file mode 100644 index 0000000000..ce8101cf01 --- /dev/null +++ b/doc/gnu_docs/Makefile.am @@ -0,0 +1,13 @@ +## $Id$ + +AUTOMAKE_OPTIONS = foreign + +EXTRA_DIST = \ +gnu_footer.html \ +mk_install_dir \ +Tool_Doc_Instructions \ +gnu_header.html \ +refcard.html \ +gen_docs \ +index.html \ +rtems_tools_index.html \ No newline at end of file diff --git a/doc/index.html b/doc/index.html deleted file mode 100644 index 4ad742870f..0000000000 --- a/doc/index.html +++ /dev/null @@ -1,275 +0,0 @@ - -RTEMS RTEMS_VERSION On-Line Library - - - OAR -

RTEMS RTEMS_VERSION On-Line Library

-
- - -
  • - - - - - - - RTEMS FAQ -
  • -
  • C/C++ Manuals
  • - -
  • - - - - - - - Getting Started with RTEMS for C/C++ Users -
  • - -
  • - - - - - - - RTEMS Applications C User's Guide -
  • - -
  • - - - - - - - RTEMS POSIX API User's Guide -
  • - -
  • - - - - - - - RTEMS ITRON 3.0 API User's Guide -
  • - -
  • - - - - - - - RTEMS Network Supplement -
  • -
    -
  • Ada Manuals
  • - -
  • - - - - - - - Getting Started with GNAT/RTEMS -
  • -
  • - - - - - - - RTEMS Applications Ada User's Guide -
  • -
    -
  • Miscellaneous Manuals
  • - -
  • - - - - - - - RTEMS Development Environment Guide -
  • - -
  • - - - - - - - RTEMS/GDB User's Guide -
  • - -
  • - - - - - - - RTEMS Remote Debugger Server Specifications -
  • - -
  • - - - - - - - RTEMS BSP and Device Driver Development Guide -
  • - -
  • - - - - - - - RTEMS Porting Guide -
  • - -
  • - - - - - - - RTEMS Filesystem Design Guide -
  • - -
  • - - - - - - - RTEMS POSIX 1003.1 Compliance Guide -
  • -
    - - -
  • CPU Supplements - - -
  • - - - - - - - RTEMS AMD 29K Applications Supplement -
  • - -
  • - - - - - - - RTEMS Hitachi SH Applications Supplement -
  • - -
  • - - - - - - - RTEMS Intel i386 Applications Supplement -
  • - -
  • - - - - - - - RTEMS Intel i960 Applications Supplement -
  • - -
  • - - - - - - - RTEMS MIPS64 ORION Applications Supplement -
  • - -
  • - - - - - - - RTEMS Motorola MC68xxx Applications Supplement -
  • - -
  • - - - - - - - RTEMS PowerPC Applications Supplement -
  • - -
  • - - - - - - - RTEMS SPARC Applications Supplement -
  • - -
  • - - - - - - - RTEMS Hewlett Packard PA-RISC Applications Supplement -
  • - -
  • - - - - - - - RTEMS UNIX Port Applications Supplement -
  • - -
    -
  • - -
    -
    -Copyright © 1988-2000 OAR Corporation - diff --git a/doc/index.html.in b/doc/index.html.in new file mode 100644 index 0000000000..65d9edb58e --- /dev/null +++ b/doc/index.html.in @@ -0,0 +1,275 @@ + +RTEMS @RTEMS_VERSION@ On-Line Library + + + OAR +

    RTEMS @RTEMS_VERSION@ On-Line Library

    +
    + + +
  • + + + + + + + RTEMS FAQ +
  • +
  • C/C++ Manuals
  • + +
  • + + + + + + + Getting Started with RTEMS for C/C++ Users +
  • + +
  • + + + + + + + RTEMS Applications C User's Guide +
  • + +
  • + + + + + + + RTEMS POSIX API User's Guide +
  • + +
  • + + + + + + + RTEMS ITRON 3.0 API User's Guide +
  • + +
  • + + + + + + + RTEMS Network Supplement +
  • +
    +
  • Ada Manuals
  • + +
  • + + + + + + + Getting Started with GNAT/RTEMS +
  • +
  • + + + + + + + RTEMS Applications Ada User's Guide +
  • +
    +
  • Miscellaneous Manuals
  • + +
  • + + + + + + + RTEMS Development Environment Guide +
  • + +
  • + + + + + + + RTEMS/GDB User's Guide +
  • + +
  • + + + + + + + RTEMS Remote Debugger Server Specifications +
  • + +
  • + + + + + + + RTEMS BSP and Device Driver Development Guide +
  • + +
  • + + + + + + + RTEMS Porting Guide +
  • + +
  • + + + + + + + RTEMS Filesystem Design Guide +
  • + +
  • + + + + + + + RTEMS POSIX 1003.1 Compliance Guide +
  • +
    + + +
  • CPU Supplements + + +
  • + + + + + + + RTEMS AMD 29K Applications Supplement +
  • + +
  • + + + + + + + RTEMS Hitachi SH Applications Supplement +
  • + +
  • + + + + + + + RTEMS Intel i386 Applications Supplement +
  • + +
  • + + + + + + + RTEMS Intel i960 Applications Supplement +
  • + +
  • + + + + + + + RTEMS MIPS64 ORION Applications Supplement +
  • + +
  • + + + + + + + RTEMS Motorola MC68xxx Applications Supplement +
  • + +
  • + + + + + + + RTEMS PowerPC Applications Supplement +
  • + +
  • + + + + + + + RTEMS SPARC Applications Supplement +
  • + +
  • + + + + + + + RTEMS Hewlett Packard PA-RISC Applications Supplement +
  • + +
  • + + + + + + + RTEMS UNIX Port Applications Supplement +
  • + +
    +
  • + +
    +
    +Copyright © 1988-2000 OAR Corporation + diff --git a/doc/itron3.0/Makefile b/doc/itron3.0/Makefile deleted file mode 100644 index d3defd1fb8..0000000000 --- a/doc/itron3.0/Makefile +++ /dev/null @@ -1,133 +0,0 @@ -# -# COPYRIGHT (c) 1988-1999. -# On-Line Applications Research Corporation (OAR). -# All rights reserved. -# -# $Id$ -# - -PROJECT=itron - -include ../Make.config - -all: html info ps pdf - -dirs: - $(make-dirs) - -COMMON_FILES= - -GENERATED_FILES= \ - status.texi \ - task.texi tasksync.texi semaphore.texi eventflags.texi mailbox.texi \ - msgbuffer.texi rendezvous.texi interrupt.texi memorypool.texi \ - fixedblock.texi time.texi config.texi network.texi - -FILES= $(PROJECT).texi \ - $(COMMON_FILES) preface.texi $(GENERATED_FILES) - -INFOFILES=$(wildcard $(PROJECT) $(PROJECT)-*) - -info: $(FILES) $(PROJECT) - -$(PROJECT): $(FILES) - $(MAKEINFO) $(PROJECT).texi - -dvi: $(PROJECT).dvi -ps: $(PROJECT).ps -pdf: $(PROJECT).pdf - -$(PROJECT).pdf: $(FILES) - $(TEXI2PDF) $(PROJECT).texi - cp $(PROJECT).pdf $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).ps: $(PROJECT).dvi - dvips -o $(PROJECT).ps $(PROJECT).dvi - cp $(PROJECT).ps $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).dvi: $(FILES) - $(TEXI2DVI) $(PROJECT).texi - cp $(PROJECT).dvi $(WWW_INSTALL)/$(PROJECT) - -html: $(FILES) - -mkdir -p html - -mkdir -p $(WWW_INSTALL)/$(PROJECT) - $(TEXI2WWW) $(TEXI2WWW_ARGS) -dir $(WWW_INSTALL)/$(PROJECT) \ - $(PROJECT).texi - -clean: - rm -f *.o $(PROG) *.txt core *.html - rm -f *.dvi *.ps *.log *.aux *.cp *.fn *.ky *.pg *.toc *.tp *.vr $(BASE) - rm -f $(PROJECT) $(PROJECT)-* _* $(GENERATED_FILES) $(PROJECT).pdf - rm -rf html - -status.texi: status.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -task.texi: task.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -tasksync.texi: tasksync.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -semaphore.texi: semaphore.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -eventflags.texi: eventflags.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -mailbox.texi: mailbox.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -msgbuffer.texi: msgbuffer.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -rendezvous.texi: rendezvous.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -interrupt.texi: interrupt.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -memorypool.texi: memorypool.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -fixedblock.texi: fixedblock.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -time.texi: time.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -config.texi: config.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -network.texi: network.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - diff --git a/doc/itron3.0/Makefile.am b/doc/itron3.0/Makefile.am new file mode 100644 index 0000000000..b13c762da4 --- /dev/null +++ b/doc/itron3.0/Makefile.am @@ -0,0 +1,100 @@ +# +# COPYRIGHT (c) 1988-1999. +# On-Line Applications Research Corporation (OAR). +# All rights reserved. +# +# $Id$ +# + +AUTOMAKE_OPTIONS = foreign + +PROJECT=itron + +include $(top_srcdir)/project.am + +COMMON_FILES= + +GENERATED_FILES= \ + status.texi \ + task.texi tasksync.texi semaphore.texi eventflags.texi mailbox.texi \ + msgbuffer.texi rendezvous.texi interrupt.texi memorypool.texi \ + fixedblock.texi time.texi config.texi network.texi + +FILES= preface.texi + +info_TEXINFOS = itron.texi +itron_TEXINFOS = $(FILES) $(COMMON_FILES) $(GENERATED_FILES) + +status.texi: status.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +task.texi: task.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +tasksync.texi: tasksync.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +semaphore.texi: semaphore.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +eventflags.texi: eventflags.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +mailbox.texi: mailbox.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +msgbuffer.texi: msgbuffer.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +rendezvous.texi: rendezvous.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +interrupt.texi: interrupt.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +memorypool.texi: memorypool.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +fixedblock.texi: fixedblock.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +time.texi: time.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +config.texi: config.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +network.texi: network.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +noinst_SCRIPTS = gen_all gen_section gen_status_shell + +EXTRA_DIST = *.t $(noinst_SCRIPTS) diff --git a/doc/networking/Makefile b/doc/networking/Makefile deleted file mode 100644 index a87d6fdf11..0000000000 --- a/doc/networking/Makefile +++ /dev/null @@ -1,109 +0,0 @@ -# -# COPYRIGHT (c) 1988-1999. -# On-Line Applications Research Corporation (OAR). -# All rights reserved. -# -# $Id$ -# - -PROJECT=networking - -include ../Make.config - -REPLACE=../tools/word-replace - -BMENU+= -c - -all: html info ps pdf - -dirs: - $(make-dirs) - -COMMON_FILES=../common/cpright.texi ../common/setup.texi - -GENERATED_FILES=networkapp.texi driver.texi networktasks.texi testing.texi \ - servers.texi decdriver.texi - -FILES= $(PROJECT).texi \ - networktasks.texi preface.texi $(GENERATED_FILES) - -INFOFILES=$(wildcard $(PROJECT) $(PROJECT)-*) - -info: dirs $(PROJECT) - #cp $(wildcard $(PROJECT) $(PROJECT)-*) $(INFO_INSTALL) - cp $(PROJECT) $(INFO_INSTALL) - -$(PROJECT): $(FILES) - $(MAKEINFO) $(PROJECT).texi - -dvi: dirs $(PROJECT).dvi -ps: dirs $(PROJECT).ps -pdf: dirs $(PROJECT).pdf - -$(PROJECT).pdf: $(FILES) - $(TEXI2PDF) $(PROJECT).texi - cp $(PROJECT).pdf $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).ps: $(PROJECT).dvi - dvips -o $(PROJECT).ps $(PROJECT).dvi - cp $(PROJECT).ps $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).dvi: $(FILES) - $(TEXI2DVI) $(PROJECT).texi - cp $(PROJECT).dvi $(WWW_INSTALL)/$(PROJECT) - -networktasks.texi: networktasks.t Makefile - $(BMENU) -p "Preface" \ - -u "Top" \ - -n "Networking Driver" ${*}.t - -driver.texi: driver.t Makefile - $(BMENU) -p "Network Task Structure and Data Flow" \ - -u "Top" \ - -n "Using Networking in an RTEMS Application" ${*}.t - -networkapp.texi: networkapp.t Makefile - $(BMENU) -p "Write the Driver Statistic-Printing Function" \ - -u "Top" \ - -n "Testing the Driver" ${*}.t - -testing.texi: testing.t Makefile - $(BMENU) -p "Time Synchronization Using NTP" \ - -u "Top" \ - -n "Network Servers" ${*}.t - -servers.texi: servers.t Makefile - $(BMENU) -p "Throughput" \ - -u "Top" \ - -n "DEC 21140 Driver" ${*}.t - -decdriver.texi: decdriver.t Makefile - $(BMENU) -p "Using Hooks" \ - -u "Top" \ - -n "Command and Variable Index" ${*}.t - -html: dirs $(FILES) - -mkdir -p $(WWW_INSTALL)/$(PROJECT) - rm -f $(WWW_INSTALL)/$(PROJECT)/networkflow.jpg - rm -f $(WWW_INSTALL)/$(PROJECT)/networkflow.png - rm -f $(WWW_INSTALL)/$(PROJECT)/PCIreg.jpg - cp recvbd.jpg $(WWW_INSTALL)/$(PROJECT)/recvbd.jpg - cp networkflow.jpg $(WWW_INSTALL)/$(PROJECT)/networkflow.jpg - cp networkflow.png $(WWW_INSTALL)/$(PROJECT)/networkflow.png - cp PCIreg.jpg $(WWW_INSTALL)/$(PROJECT)/PCIreg.jpg - $(TEXI2WWW) $(TEXI2WWW_ARGS) -dir $(WWW_INSTALL)/$(PROJECT) \ - $(PROJECT).texi - -clean: - rm -f *.o $(PROG) *.txt core $(PROJECT).pdf - rm -f *.dvi *.ps *.log *.aux *.cp *.fn *.ky *.pg *.toc *.tp *.vr $(BASE) - rm -f $(PROJECT) $(PROJECT)-* $(GENERATED_FILES) - rm -f $(PROJECT) $(PROJECT)-* - rm -f timedata.texi timetbl.texi intr.texi wksheets.texi - rm -f timetbl.t wksheets.t - rm -f *.fixed _* - -convert: - /usr/bin/gs -dMaxBitmap=300000000 -g5500x7500 -sDEVICE=pdfwrite -q -dNOPAUSE -dSAFER -sOutputFile=networkflow.pdf -- networkflow.eps -c -quit - /usr/bin/gs -dMaxBitmap=300000000 -g4500x5500 -sDEVICE=pdfwrite -q -dNOPAUSE -dSAFER -sOutputFile=PCIreg.pdf -- PCIreg.eps -c -quit - /usr/bin/gs -dMaxBitmap=300000000 -g4500x5500 -sDEVICE=pdfwrite -q -dNOPAUSE -dSAFER -sOutputFile=recvbd.pdf -- recvbd.eps -c -quit diff --git a/doc/networking/Makefile.am b/doc/networking/Makefile.am new file mode 100644 index 0000000000..42c499b219 --- /dev/null +++ b/doc/networking/Makefile.am @@ -0,0 +1,71 @@ +# +# COPYRIGHT (c) 1988-1999. +# On-Line Applications Research Corporation (OAR). +# All rights reserved. +# +# $Id$ +# + +AUTOMAKE_OPTIONS = foreign + +PROJECT=networking + +include $(top_srcdir)/project.am + +# FIXME: Why -c ? +BMENU+= -c + +COMMON_FILES=$(top_srcdir)/common/cpright.texi $(top_builddir)/common/setup.texi + +GENERATED_FILES=networkapp.texi driver.texi networktasks.texi testing.texi \ + servers.texi decdriver.texi + +FILES= networktasks.texi preface.texi + +info_TEXINFOS = networking.texi +networking_TEXINFOS = $(FILES) $(COMMON_FILES) $(GENERATED_FILES) + +$(PROJECT).dvi: networkflow.eps PCIreg.eps recvbd.eps + +$(PROJECT).pdf: networkflow.pdf PCIreg.pdf recvbd.pdf + +if USE_HTML +html_project_DATA += networkflow.jpg networkflow.png PCIreg.jpg recvbd.jpg +endif + +networktasks.texi: networktasks.t + $(BMENU) -p "Preface" \ + -u "Top" \ + -n "Networking Driver" $< + +driver.texi: driver.t + $(BMENU) -p "Network Task Structure and Data Flow" \ + -u "Top" \ + -n "Using Networking in an RTEMS Application" $< + +networkapp.texi: networkapp.t + $(BMENU) -p "Write the Driver Statistic-Printing Function" \ + -u "Top" \ + -n "Testing the Driver" $< + +testing.texi: testing.t + $(BMENU) -p "Time Synchronization Using NTP" \ + -u "Top" \ + -n "Network Servers" $< + +servers.texi: servers.t + $(BMENU) -p "Throughput" \ + -u "Top" \ + -n "DEC 21140 Driver" $< + +decdriver.texi: decdriver.t + $(BMENU) -p "Using Hooks" \ + -u "Top" \ + -n "Command and Variable Index" $< + +PICTURE_FILES = \ +PCIreg.eps PCIreg.jpg \ +networkflow.eps networkflow.jpg networkflow.png \ +recvbd.eps recvbd.jpg + +EXTRA_DIST = *.t $(PICTURE_FILES) diff --git a/doc/networking/PCIreg.pdf b/doc/networking/PCIreg.pdf deleted file mode 100644 index 5fbb991e26..0000000000 Binary files a/doc/networking/PCIreg.pdf and /dev/null differ diff --git a/doc/networking/decdriver.t b/doc/networking/decdriver.t index 7a0fd0c4a3..f9fdbd778e 100644 --- a/doc/networking/decdriver.t +++ b/doc/networking/decdriver.t @@ -80,7 +80,7 @@ There is no ASCII version of the PCI Device's Configuration Header Space Format @end ifset @ifset use-tex -@image{PCIreg,,} +@image{PCIreg} @end ifset @c @image{PCIreg} diff --git a/doc/networking/networkflow.pdf b/doc/networking/networkflow.pdf deleted file mode 100644 index b8c6cf9ab9..0000000000 Binary files a/doc/networking/networkflow.pdf and /dev/null differ diff --git a/doc/networking/networktasks.t b/doc/networking/networktasks.t index b9760301e1..a6cf9a0683 100644 --- a/doc/networking/networktasks.t +++ b/doc/networking/networktasks.t @@ -23,14 +23,7 @@ NO ASCII VERSION OF THE TASKING FIGURE IS AVAILABLE @end ifset @ifset use-tex -@c for now use the ascii version -@example -@group -@c why does this not work for pdf? -@c @image{networkflow,5in,6in} -NO TEX VERSION OF THE TASKING FIGURE IS AVAILABLE -@end group -@end example +@image{networkflow,5in,6in} @end ifset @ifset use-html diff --git a/doc/networking/recvbd.pdf b/doc/networking/recvbd.pdf deleted file mode 100644 index 1825846f79..0000000000 Binary files a/doc/networking/recvbd.pdf and /dev/null differ diff --git a/doc/new_chapters/Makefile b/doc/new_chapters/Makefile deleted file mode 100644 index 8636e20436..0000000000 --- a/doc/new_chapters/Makefile +++ /dev/null @@ -1,107 +0,0 @@ -# -# COPYRIGHT (c) 1988-1999. -# On-Line Applications Research Corporation (OAR). -# All rights reserved. -# -# $Id$ -# - -PROJECT=new_chapters - -include ../Make.config - -all: html info ps pdf - -dirs: - $(make-dirs) - -COMMON_FILES=../common/cpright.texi - -GENERATED_FILES= \ - adminiface.texi confspace.texi \ - dumpcontrol.texi eventlog.texi \ - stackchk.texi rtmonuse.texi cpuuse.texi error.texi monitor.texi - -FILES= $(PROJECT).texi \ - $(COMMON_FILES) $(GENERATED_FILES) - -INFOFILES=$(wildcard $(PROJECT) $(PROJECT)-*) - -info: dirs $(FILES) $(PROJECT) -# cp $(PROJECT) $(PROJECT)-* $(INFO_INSTALL) - cp $(PROJECT) $(INFO_INSTALL) - -$(PROJECT): $(FILES) - $(MAKEINFO) $(PROJECT).texi - -dvi: dirs $(PROJECT).dvi -ps: dirs $(PROJECT).ps -pdf: dirs $(PROJECT).pdf - -$(PROJECT).pdf: $(FILES) - $(TEXI2PDF) $(PROJECT).texi - cp $(PROJECT).pdf $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).ps: $(PROJECT).dvi - dvips -o $(PROJECT).ps $(PROJECT).dvi - cp $(PROJECT).ps $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).dvi: $(FILES) - $(TEXI2DVI) $(PROJECT).texi - cp $(PROJECT).dvi $(WWW_INSTALL)/$(PROJECT) - -html: dirs $(FILES) - -mkdir -p $(WWW_INSTALL)/$(PROJECT) - -cd .. ; gmake headers - $(TEXI2WWW) $(TEXI2WWW_ARGS) -dir $(WWW_INSTALL)/$(PROJECT) \ - $(PROJECT).texi - -clean: - rm -f *.o $(PROG) *.txt core *.html $(PROJECT).pdf - rm -f *.dvi *.ps *.log *.aux *.cp *.fn *.ky *.pg *.toc *.tp *.vr $(BASE) - rm -f $(PROJECT) $(PROJECT)-* _* $(GENERATED_FILES) - -eventlog.texi: eventlog.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -dumpcontrol.texi: dumpcontrol.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -confspace.texi: confspace.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -adminiface.texi: adminiface.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -stackchk.texi: stackchk.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -rtmonuse.texi: rtmonuse.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -cpuuse.texi: cpuuse.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -error.texi: error.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -monitor.texi: monitor.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t diff --git a/doc/new_chapters/Makefile.am b/doc/new_chapters/Makefile.am new file mode 100644 index 0000000000..faeb5e5a21 --- /dev/null +++ b/doc/new_chapters/Makefile.am @@ -0,0 +1,75 @@ +# +# COPYRIGHT (c) 1988-1999. +# On-Line Applications Research Corporation (OAR). +# All rights reserved. +# +# $Id$ +# + +AUTOMAKE_OPTIONS = foreign + +PROJECT=new_chapters + +include $(top_srcdir)/project.am + +COMMON_FILES=$(top_srcdir)/common/cpright.texi + +GENERATED_FILES= \ + adminiface.texi confspace.texi \ + dumpcontrol.texi eventlog.texi \ + stackchk.texi rtmonuse.texi cpuuse.texi error.texi monitor.texi + +FILES= + +info_TEXINFOS = new_chapters.texi +new_chapters_TEXINFOS = $(FILES) $(COMMON_FILES) $(GENERATED_FILES) + +eventlog.texi: eventlog.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +dumpcontrol.texi: dumpcontrol.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +confspace.texi: confspace.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +adminiface.texi: adminiface.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +stackchk.texi: stackchk.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +rtmonuse.texi: rtmonuse.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +cpuuse.texi: cpuuse.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +error.texi: error.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +monitor.texi: monitor.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +noinst_SCRIPTS = gen_section + +EXTRA_DIST = *.t STATUS TODO $(noinst_SCRIPTS) + \ No newline at end of file diff --git a/doc/oaronly.jpg b/doc/oaronly.jpg deleted file mode 100644 index c87c151404..0000000000 Binary files a/doc/oaronly.jpg and /dev/null differ diff --git a/doc/porting/Makefile b/doc/porting/Makefile deleted file mode 100644 index b612e6e095..0000000000 --- a/doc/porting/Makefile +++ /dev/null @@ -1,111 +0,0 @@ -# -# COPYRIGHT (c) 1988-1999. -# On-Line Applications Research Corporation (OAR). -# All rights reserved. -# -# $Id$ -# - -PROJECT=porting - -include ../Make.config - -all: html info ps pdf - -dirs: - $(make-dirs) - -COMMON_FILES=../common/cpright.texi -FILES=preface.texi developtools.texi sourcecode.texi cpumodels.texi \ - cpuinit.texi interrupts.texi taskcontext.texi idlethread.texi \ - prioritybitmap.texi codetuning.texi miscellaneous.texi $(COMMON_FILES) - -GENERATED_FILES=developtools.texi sourcecode.texi cpumodels.texi \ - cpuinit.texi interrupts.texi taskcontext.texi idlethread.texi \ - prioritybitmap.texi codetuning.texi miscellaneous.texi - - -INFOFILES=$(wildcard $(PROJECT) $(PROJECT)-*) - -info: dirs $(PROJECT) - cp $(PROJECT) $(PROJECT)-* $(INFO_INSTALL) - -$(PROJECT): $(FILES) - $(MAKEINFO) $(PROJECT).texi - -dvi: dirs $(PROJECT).dvi -ps: dirs $(PROJECT).ps -pdf: dirs $(PROJECT).pdf - -$(PROJECT).pdf: $(FILES) - $(TEXI2PDF) $(PROJECT).texi - cp $(PROJECT).pdf $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).ps: $(PROJECT).dvi - dvips -o $(PROJECT).ps $(PROJECT).dvi - cp $(PROJECT).ps $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).dvi: $(FILES) - $(TEXI2DVI) $(PROJECT).texi - cp $(PROJECT).dvi $(WWW_INSTALL)/$(PROJECT) - -html: dirs $(FILES) - -mkdir -p $(WWW_INSTALL)/$(PROJECT) - $(TEXI2WWW) $(TEXI2WWW_ARGS) -dir $(WWW_INSTALL)/$(PROJECT) \ - $(PROJECT).texi - -clean: - rm -f *.o $(PROG) *.txt core *.html $(PROJECT).pdf - rm -f *.dvi *.ps *.log *.aux *.cp *.fn *.ky *.pg *.toc *.tp *.vr $(BASE) - rm -f $(PROJECT) $(PROJECT)-* _* $(GENERATED_FILES) - -developtools.texi: developtools.t - $(BMENU) -p "Preface" \ - -u "Top" \ - -n "Source Code Organization" ${*}.t - -sourcecode.texi: sourcecode.t - $(BMENU) -p "Development Tools" \ - -u "Top" \ - -n "CPU Model Variations" ${*}.t - -cpumodels.texi: cpumodels.t - $(BMENU) -p "Source Code Organization Introduction" \ - -u "Top" \ - -n "CPU Initialization" ${*}.t - -cpuinit.texi: cpuinit.t - $(BMENU) -p "CPU Model Variations Coding Issues" \ - -u "Top" \ - -n "Interrupts" ${*}.t - -interrupts.texi: interrupts.t - $(BMENU) -p "CPU Initialization Initializing the CPU" \ - -u "Top" \ - -n "Task Context Management" ${*}.t - -taskcontext.texi: taskcontext.t - $(BMENU) -p "Interrupts Pointer to _Thread_Dispatch Routine" \ - -u "Top" \ - -n "IDLE Thread" ${*}.t - -idlethread.texi: idlethread.t - $(BMENU) -p "Task Context Management Restoring a Floating Point Context" \ - -u "Top" \ - -n "Priority Bitmap Manipulation" ${*}.t - -prioritybitmap.texi: prioritybitmap.t - $(BMENU) -p "IDLE Thread Idle Thread Body" \ - -u "Top" \ - -n "Code Tuning Parameters" ${*}.t - -codetuning.texi: codetuning.t - $(BMENU) -p "Priority Bitmap Manipulation Bit Scan Support" \ - -u "Top" \ - -n "Miscellaneous" ${*}.t - -miscellaneous.texi: miscellaneous.t - $(BMENU) -p "Code Tuning Parameters Partition Element Alignment" \ - -u "Top" \ - -n "Command and Variable Index" ${*}.t - diff --git a/doc/porting/Makefile.am b/doc/porting/Makefile.am new file mode 100644 index 0000000000..7e1cd643e1 --- /dev/null +++ b/doc/porting/Makefile.am @@ -0,0 +1,78 @@ +# +# COPYRIGHT (c) 1988-1999. +# On-Line Applications Research Corporation (OAR). +# All rights reserved. +# +# $Id$ +# + +AUTOMAKE_OPTIONS = foreign + +PROJECT=porting + +include $(top_srcdir)/project.am + +COMMON_FILES=$(top_srcdir)/common/cpright.texi + +FILES=preface.texi developtools.texi sourcecode.texi cpumodels.texi \ + cpuinit.texi interrupts.texi taskcontext.texi idlethread.texi \ + prioritybitmap.texi codetuning.texi miscellaneous.texi $(COMMON_FILES) + +GENERATED_FILES=developtools.texi sourcecode.texi cpumodels.texi \ + cpuinit.texi interrupts.texi taskcontext.texi idlethread.texi \ + prioritybitmap.texi codetuning.texi miscellaneous.texi + +info_TEXINFOS = porting.texi +porting_TEXINFOS = $(FILES) $(COMMON_FILES) $(GENERATED_FILES) + +developtools.texi: developtools.t + $(BMENU) -p "Preface" \ + -u "Top" \ + -n "Source Code Organization" $< + +sourcecode.texi: sourcecode.t + $(BMENU) -p "Development Tools" \ + -u "Top" \ + -n "CPU Model Variations" $< + +cpumodels.texi: cpumodels.t + $(BMENU) -p "Source Code Organization Introduction" \ + -u "Top" \ + -n "CPU Initialization" $< + +cpuinit.texi: cpuinit.t + $(BMENU) -p "CPU Model Variations Coding Issues" \ + -u "Top" \ + -n "Interrupts" $< + +interrupts.texi: interrupts.t + $(BMENU) -p "CPU Initialization Initializing the CPU" \ + -u "Top" \ + -n "Task Context Management" $< + +taskcontext.texi: taskcontext.t + $(BMENU) -p "Interrupts Pointer to _Thread_Dispatch Routine" \ + -u "Top" \ + -n "IDLE Thread" $< + +idlethread.texi: idlethread.t + $(BMENU) -p "Task Context Management Restoring a Floating Point Context" \ + -u "Top" \ + -n "Priority Bitmap Manipulation" $< + +prioritybitmap.texi: prioritybitmap.t + $(BMENU) -p "IDLE Thread Idle Thread Body" \ + -u "Top" \ + -n "Code Tuning Parameters" $< + +codetuning.texi: codetuning.t + $(BMENU) -p "Priority Bitmap Manipulation Bit Scan Support" \ + -u "Top" \ + -n "Miscellaneous" $< + +miscellaneous.texi: miscellaneous.t + $(BMENU) -p "Code Tuning Parameters Partition Element Alignment" \ + -u "Top" \ + -n "Command and Variable Index" $< + +EXTRA_DIST = *.t diff --git a/doc/posix1003.1/Makefile b/doc/posix1003.1/Makefile deleted file mode 100644 index 2a3a6c3761..0000000000 --- a/doc/posix1003.1/Makefile +++ /dev/null @@ -1,163 +0,0 @@ -# -# COPYRIGHT (c) 1988-1999. -# On-Line Applications Research Corporation (OAR). -# All rights reserved. -# -# $Id$ -# - -PROJECT=posix1003_1 - -include ../Make.config - -all: html info ps pdf - -dirs: - $(make-dirs) - -COMMON_FILES=../common/cpright.texi ../common/setup.texi - -GENERATED_FILES=ch01.texi ch02.texi ch03.texi ch04.texi ch05.texi \ - ch06.texi ch07.texi ch08.texi ch09.texi ch10.texi \ - ch11.texi ch12.texi ch13.texi ch14.texi ch15.texi \ - ch16.texi ch17.texi ch18.texi ch19.t ch19.texi - -FILES= $(PROJECT).texi \ - preface.texi $(GENERATED_FILES) - -INFOFILES=$(wildcard $(PROJECT) $(PROJECT)-*) - -info: dirs $(PROJECT) - #cp $(wildcard $(PROJECT) $(PROJECT)-*) $(INFO_INSTALL) - cp $(PROJECT) $(INFO_INSTALL) - -$(PROJECT): $(FILES) - $(MAKEINFO) $(PROJECT).texi - -dvi: dirs $(PROJECT).dvi -ps: dirs $(PROJECT).ps -pdf: dirs $(PROJECT).pdf - -$(PROJECT).pdf: $(FILES) - $(TEXI2PDF) $(PROJECT).texi - cp $(PROJECT).pdf $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).ps: $(PROJECT).dvi - dvips -o $(PROJECT).ps $(PROJECT).dvi - cp $(PROJECT).ps $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).dvi: $(FILES) - $(TEXI2DVI) $(PROJECT).texi - cp $(PROJECT).dvi $(WWW_INSTALL)/$(PROJECT) - -ch01.texi: ch01.t - $(BMENU) -c -p "Preface" \ - -u "Top" \ - -n "Terminology and General Requirements" ${*}.t - -ch02.texi: ch02.t - $(BMENU) -c -p "Conformance" \ - -u "Top" \ - -n "Process Primitives" ${*}.t - -ch03.texi: ch03.t - $(BMENU) -c -p "Execution-Time Symbolic Constants for Portability Specifications" \ - -u "Top" \ - -n "Process Environment" ${*}.t - -ch04.texi: ch04.t - $(BMENU) -c -p "Delay Process Execution" \ - -u "Top" \ - -n "Files and Directories" ${*}.t - -ch05.texi: ch05.t - $(BMENU) -c -p "Get Configurable System Variables" \ - -u "Top" \ - -n "Input and Output Primitives" ${*}.t - -ch06.texi: ch06.t - $(BMENU) -c -p "Get Configurable Pathname Variables" \ - -u "Top" \ - -n "Device- and Class-Specific Functions" ${*}.t - -ch07.texi: ch07.t - $(BMENU) -c -p " Asynchronous File Synchronization" \ - -u "Top" \ - -n "Language-Specific Services for the C Programming Language" ${*}.t - -ch08.texi: ch08.t - $(BMENU) -c -p "Set Foreground Process Group ID" \ - -u "Top" \ - -n "System Databases" ${*}.t - -ch09.texi: ch09.t - $(BMENU) -c -p "Pseudo-Random Sequence Generation Functions" \ - -u "Top" \ - -n "Data Interchange Format" ${*}.t - -ch10.texi: ch10.t - $(BMENU) -c -p "User Database Access" \ - -u "Top" \ - -n "Synchronization" ${*}.t - -ch11.texi: ch11.t - $(BMENU) -c -p "Multiple Volumes" \ - -u "Top" \ - -n "Memory Management" ${*}.t - -ch12.texi: ch12.t - $(BMENU) -c -p "Waiting on a Condition" \ - -u "Top" \ - -n "Execution Scheduling" ${*}.t - -ch13.texi: ch13.t - $(BMENU) -c -p "Remove a Shared Memory Object" \ - -u "Top" \ - -n "Clocks and Timers" ${*}.t - -ch14.texi: ch14.t - $(BMENU) -c -p "Change the Priority Ceiling of a Mutex" \ - -u "Top" \ - -n "Message Passing" ${*}.t - -ch15.texi: ch15.t - $(BMENU) -c -p "High Resolution Sleep" \ - -u "Top" \ - -n "Thread Management" ${*}.t - -ch16.texi: ch16.t - $(BMENU) -c -p "Get Message Queue Attributes" \ - -u "Top" \ - -n "Thread-Specific Data" ${*}.t - -ch17.texi: ch17.t - $(BMENU) -c -p "Dynamic Package Initialization" \ - -u "Top" \ - -n "Thread Cancellation" ${*}.t - -ch18.texi: ch18.t - $(BMENU) -c -p "Thread-Specific Data Key Deletion" \ - -u "Top" \ - -n "Compliance Summary" ${*}.t - -ch19.t: ch01.t ch02.t ch03.t ch04.t ch05.t ch06.t ch07.t ch08.t ch09.t \ - ch10.t ch11.t ch12.t ch13.t ch14.t ch15.t ch16.t ch17.t ch18.t \ - summarize - ./summarize >ch19.t - -ch19.texi: ch19.t - $(BMENU) -c -p "List of Cancellation Points" \ - -u "Top" \ - -n "Command and Variable Index" ${*}.t - -html: dirs $(FILES) - -mkdir -p $(WWW_INSTALL)/$(PROJECT) - $(TEXI2WWW) $(TEXI2WWW_ARGS) -dir $(WWW_INSTALL)/$(PROJECT) \ - $(PROJECT).texi - -clean: - rm -f *.o $(PROG) *.txt core $(PROJECT).pdf - rm -f *.dvi *.ps *.log *.aux *.cp *.fn *.ky *.pg *.toc *.tp *.vr $(BASE) - rm -f $(PROJECT) $(PROJECT)-* $(GENERATED_FILES) - rm -f *.fixed _* - diff --git a/doc/posix1003.1/Makefile.am b/doc/posix1003.1/Makefile.am new file mode 100644 index 0000000000..6f94255d78 --- /dev/null +++ b/doc/posix1003.1/Makefile.am @@ -0,0 +1,129 @@ +# +# COPYRIGHT (c) 1988-1999. +# On-Line Applications Research Corporation (OAR). +# All rights reserved. +# +# $Id$ +# + +AUTOMAKE_OPTIONS = foreign + +PROJECT=posix1003_1 + +include $(top_srcdir)/project.am + +COMMON_FILES=$(top_srcdir)/common/cpright.texi $(top_builddir)/common/setup.texi + +GENERATED_FILES=ch01.texi ch02.texi ch03.texi ch04.texi ch05.texi \ + ch06.texi ch07.texi ch08.texi ch09.texi ch10.texi \ + ch11.texi ch12.texi ch13.texi ch14.texi ch15.texi \ + ch16.texi ch17.texi ch18.texi ch19.t ch19.texi + +FILES= preface.texi + +info_TEXINFOS = posix1003_1.texi +posix1003_1_TEXINFOS = $(FILES) $(COMMON_FILES) $(GENERATED_FILES) + +ch01.texi: ch01.t + $(BMENU) -c -p "Preface" \ + -u "Top" \ + -n "Terminology and General Requirements" $< + +ch02.texi: ch02.t + $(BMENU) -c -p "Conformance" \ + -u "Top" \ + -n "Process Primitives" $< + +ch03.texi: ch03.t + $(BMENU) -c -p "Execution-Time Symbolic Constants for Portability Specifications" \ + -u "Top" \ + -n "Process Environment" $< + +ch04.texi: ch04.t + $(BMENU) -c -p "Delay Process Execution" \ + -u "Top" \ + -n "Files and Directories" $< + +ch05.texi: ch05.t + $(BMENU) -c -p "Get Configurable System Variables" \ + -u "Top" \ + -n "Input and Output Primitives" $< + +ch06.texi: ch06.t + $(BMENU) -c -p "Get Configurable Pathname Variables" \ + -u "Top" \ + -n "Device- and Class-Specific Functions" $< + +ch07.texi: ch07.t + $(BMENU) -c -p " Asynchronous File Synchronization" \ + -u "Top" \ + -n "Language-Specific Services for the C Programming Language" $< + +ch08.texi: ch08.t + $(BMENU) -c -p "Set Foreground Process Group ID" \ + -u "Top" \ + -n "System Databases" $< + +ch09.texi: ch09.t + $(BMENU) -c -p "Pseudo-Random Sequence Generation Functions" \ + -u "Top" \ + -n "Data Interchange Format" $< + +ch10.texi: ch10.t + $(BMENU) -c -p "User Database Access" \ + -u "Top" \ + -n "Synchronization" $< + +ch11.texi: ch11.t + $(BMENU) -c -p "Multiple Volumes" \ + -u "Top" \ + -n "Memory Management" $< + +ch12.texi: ch12.t + $(BMENU) -c -p "Waiting on a Condition" \ + -u "Top" \ + -n "Execution Scheduling" $< + +ch13.texi: ch13.t + $(BMENU) -c -p "Remove a Shared Memory Object" \ + -u "Top" \ + -n "Clocks and Timers" $< + +ch14.texi: ch14.t + $(BMENU) -c -p "Change the Priority Ceiling of a Mutex" \ + -u "Top" \ + -n "Message Passing" $< + +ch15.texi: ch15.t + $(BMENU) -c -p "High Resolution Sleep" \ + -u "Top" \ + -n "Thread Management" $< + +ch16.texi: ch16.t + $(BMENU) -c -p "Get Message Queue Attributes" \ + -u "Top" \ + -n "Thread-Specific Data" $< + +ch17.texi: ch17.t + $(BMENU) -c -p "Dynamic Package Initialization" \ + -u "Top" \ + -n "Thread Cancellation" $< + +ch18.texi: ch18.t + $(BMENU) -c -p "Thread-Specific Data Key Deletion" \ + -u "Top" \ + -n "Compliance Summary" $< + +ch19.t: ch01.t ch02.t ch03.t ch04.t ch05.t ch06.t ch07.t ch08.t ch09.t \ + ch10.t ch11.t ch12.t ch13.t ch14.t ch15.t ch16.t ch17.t ch18.t \ + summarize + ./summarize >ch19.t + +ch19.texi: ch19.t + $(BMENU) -c -p "List of Cancellation Points" \ + -u "Top" \ + -n "Command and Variable Index" $< + +noinst_SCRIPTS = summarize + +EXTRA_DIST = *.t compliance_list summarize diff --git a/doc/posix_users/Makefile b/doc/posix_users/Makefile deleted file mode 100644 index 8c862ebd29..0000000000 --- a/doc/posix_users/Makefile +++ /dev/null @@ -1,177 +0,0 @@ -# -# COPYRIGHT (c) 1988-1999. -# On-Line Applications Research Corporation (OAR). -# All rights reserved. -# -# $Id$ -# - -PROJECT=posix_users - -include ../Make.config - -all: html info ps pdf - -dirs: - $(make-dirs) - -COMMON_FILES=../common/cpright.texi - -GENERATED_FILES= \ - cancel.texi clock.texi cond.texi \ - cspecific.texi device.texi files.texi \ - io.texi key.texi memorymgmt.texi message.texi mutex.texi procenv.texi \ - process.texi sched.texi semaphores.texi signal.texi status.texi \ - systemdb.texi thread.texi timer.texi libc.texi libm.texi - -FILES= posix_users.texi preface.texi \ - $(COMMON_FILES) $(GENERATED_FILES) - -INFOFILES=$(wildcard $(PROJECT) $(PROJECT)-*) - -info: dirs $(FILES) $(PROJECT) -# cp $(PROJECT) $(PROJECT)-* $(INFO_INSTALL) - cp $(PROJECT) $(INFO_INSTALL) - -$(PROJECT): $(FILES) - $(MAKEINFO) posix_users.texi - -dvi: dirs $(PROJECT).dvi -ps: dirs $(PROJECT).ps -pdf: dirs $(PROJECT).pdf - -$(PROJECT).pdf: $(FILES) - $(TEXI2PDF) $(PROJECT).texi - cp $(PROJECT).pdf $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).ps: $(PROJECT).dvi - dvips -o $(PROJECT).ps $(PROJECT).dvi - cp $(PROJECT).ps $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).dvi: $(FILES) - $(TEXI2DVI) posix_users.texi - cp $(PROJECT).dvi $(WWW_INSTALL)/$(PROJECT) - -html: dirs $(FILES) - -mkdir -p $(WWW_INSTALL)/$(PROJECT) - -cd .. ; gmake headers - $(TEXI2WWW) $(TEXI2WWW_ARGS) -dir $(WWW_INSTALL)/$(PROJECT) \ - posix_users.texi - -clean: - rm -f *.o $(PROG) *.txt core *.html $(PROJECT).pdf - rm -f *.dvi *.ps *.log *.aux *.cp *.fn *.ky *.pg *.toc *.tp *.vr $(BASE) - rm -f $(PROJECT) $(PROJECT)-* _* $(GENERATED_FILES) - rm -f *.cps *.cpss *.fns *.jkys *.pgs *.tps *.vrs - -process.texi: process.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -procenv.texi: procenv.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -files.texi: files.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -thread.texi: thread.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -signal.texi: signal.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -mutex.texi: mutex.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -cond.texi: cond.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -key.texi: key.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -clock.texi: clock.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -timer.texi: timer.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -sched.texi: sched.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -io.texi: io.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -device.texi: device.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -cspecific.texi: cspecific.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -semaphores.texi: semaphores.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -memorymgmt.texi: memorymgmt.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -message.texi: message.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -cancel.texi: cancel.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -systemdb.texi: systemdb.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -status.texi: status.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - -libc.texi: libc.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - - -libm.texi: libm.t Makefile - $(BMENU) -p "" \ - -u "Top" \ - -n "" ${*}.t - diff --git a/doc/posix_users/Makefile.am b/doc/posix_users/Makefile.am new file mode 100644 index 0000000000..c20c8bbbdf --- /dev/null +++ b/doc/posix_users/Makefile.am @@ -0,0 +1,142 @@ +# +# COPYRIGHT (c) 1988-1999. +# On-Line Applications Research Corporation (OAR). +# All rights reserved. +# +# $Id$ +# + +AUTOMAKE_OPTIONS = foreign + +PROJECT=posix_users + +include $(top_srcdir)/project.am + +COMMON_FILES=$(top_srcdir)/common/cpright.texi + +GENERATED_FILES= \ + cancel.texi clock.texi cond.texi \ + cspecific.texi device.texi files.texi \ + io.texi key.texi memorymgmt.texi message.texi mutex.texi procenv.texi \ + process.texi sched.texi semaphores.texi signal.texi status.texi \ + systemdb.texi thread.texi timer.texi libc.texi libm.texi + +FILES= preface.texi + +info_TEXINFOS = posix_users.texi +posix_users_TEXINFOS = $(FILES) $(GENERATED_FILES) + +process.texi: process.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +procenv.texi: procenv.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +files.texi: files.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +thread.texi: thread.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +signal.texi: signal.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +mutex.texi: mutex.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +cond.texi: cond.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +key.texi: key.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +clock.texi: clock.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +timer.texi: timer.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +sched.texi: sched.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +io.texi: io.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +device.texi: device.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +cspecific.texi: cspecific.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +semaphores.texi: semaphores.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +memorymgmt.texi: memorymgmt.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +message.texi: message.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +cancel.texi: cancel.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +systemdb.texi: systemdb.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +status.texi: status.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +libc.texi: libc.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + + +libm.texi: libm.t + $(BMENU) -p "" \ + -u "Top" \ + -n "" $< + +noinst_SCRIPTS = gen_size_report +EXTRA_DIST = *.t gen_size_report + diff --git a/doc/project.am b/doc/project.am new file mode 100644 index 0000000000..0d1e03c6c6 --- /dev/null +++ b/doc/project.am @@ -0,0 +1,72 @@ +## $Id$ + +SUFFIXES += .t + +## Texinfo support +TEXINFO_TEX = $(top_srcdir)/texinfo/texinfo.tex + +MAINTAINERCLEANFILES += $(PROJECT) $(PROJECT)-[0-9] $(PROJECT)-[0-9][0-9] +MAINTAINERCLEANFILES += $(GENERATED_FILES) + +## DVI support +dvidir = $(pkgdatadir)/dvi +## dvi_projectdir = $(dvidir)/$(PROJECT) + +## PS support +psdir = $(pkgdatadir)/ps +## ps_projectdir = $(psdir)/$(PROJECT) + +## PDF support +SUFFIXES += .pdf + +pdfdir = $(pkgdatadir)/pdf +## pdf_projectdir = $(pdfdir)/$(PROJECT) + +SUFFIXES += .eps + +if EPSTOPDF +.eps.pdf: + $(EPSTOPDF) $< > $@ +endif + +if TEXI2PDF +.texi.pdf: + TEXINPUTS=$(srcdir)/$(top_srcdir)/texinfo:$$TEXINPUTS \ + MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2PDF) $< +endif + +CLEANFILES += $(PROJECT).pdf + +## HTML +SUFFIXES += .html + +html_projectdir = $(htmldir)/$(PROJECT) + +TEXI2WWW_ARGS=\ +-dirfile ../index.html \ +-header $(top_builddir)/rtems_header.html \ +-footer $(top_builddir)/rtems_footer.html \ +-icons ../images + +index.html $(PROJECT)*.html: $(PROJECT).texi \ + $(top_builddir)/rtems_header.html $(top_builddir)/rtems_footer.html + $(TEXI2WWW) $(TEXI2WWW_ARGS) -base $(PROJECT) $< + +MOSTLYCLEANFILES += index.html $(PROJECT)*.html + +## Common installation points +if USE_HTML +html_project_DATA += index.html $(PROJECT)*.html +endif + +if USE_DVI +dvi_DATA += $(PROJECT).dvi +endif + +if USE_PS +ps_DATA += $(PROJECT).ps +endif + +if USE_PDF +pdf_DATA += $(PROJECT).pdf +endif diff --git a/doc/relnotes/Makefile b/doc/relnotes/Makefile deleted file mode 100644 index a82a25fb54..0000000000 --- a/doc/relnotes/Makefile +++ /dev/null @@ -1,53 +0,0 @@ -# -# COPYRIGHT (c) 1988-1999. -# On-Line Applications Research Corporation (OAR). -# All rights reserved. -# -# $Id$ -# - -PROJECT=relnotes - -include ../Make.config - -all: html info ps pdf - -dirs: - $(make-dirs) - -COMMON_FILES=../common/cpright.texi - -FILES=install.texi intro.texi probrep.texi relnotes.texi status.texi - -info: dirs relnotes - cp $(PROJECT) $(wildcard $(PROJECT)-*) $(INFO_INSTALL) - -relnotes: $(FILES) - $(MAKEINFO) $(PROJECT).texi - -dvi: dirs $(PROJECT).dvi -ps: dirs $(PROJECT).ps -pdf: dirs $(PROJECT).pdf - -$(PROJECT).pdf: $(FILES) - $(TEXI2PDF) $(PROJECT).texi - cp $(PROJECT).pdf $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).ps: $(PROJECT).dvi - dvips -o $(PROJECT).ps $(PROJECT).dvi - cp $(PROJECT).ps $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).dvi: $(FILES) - $(TEXI2DVI) $(PROJECT).texi - cp $(PROJECT).dvi $(WWW_INSTALL)/$(PROJECT) - -html: dirs - -mkdir -p $(WWW_INSTALL)/relnotes - $(TEXI2WWW) $(TEXI2WWW_ARGS) -dir $(WWW_INSTALL)/$(PROJECT) \ - $(PROJECT).texi - -clean: - rm -f *.o $(PROG) *.txt core *.html $(PROJECT).pdf - rm -f *.dvi *.ps *.log *.aux *.cp *.fn *.ky *.pg *.toc *.tp *.vr $(BASE) - rm -f relnotes relnotes-* _* - diff --git a/doc/relnotes/Makefile.am b/doc/relnotes/Makefile.am new file mode 100644 index 0000000000..1f9c55b5bc --- /dev/null +++ b/doc/relnotes/Makefile.am @@ -0,0 +1,21 @@ +# +# COPYRIGHT (c) 1988-1999. +# On-Line Applications Research Corporation (OAR). +# All rights reserved. +# +# $Id$ +# + +AUTOMAKE_OPTIONS = foreign + +PROJECT=relnotes + +include $(top_srcdir)/project.am + +COMMON_FILES=$(top_srcdir)/common/cpright.texi + +FILES=install.texi intro.texi probrep.texi relnotes.texi status.texi + +info_TEXINFOS = relnotes.texi +relnotes_TEXINFOS = $(FILES) $(COMMON_FILES) $(GENERATED_FILES) + diff --git a/doc/rgdb_specs/Makefile b/doc/rgdb_specs/Makefile deleted file mode 100644 index ddd3f70146..0000000000 --- a/doc/rgdb_specs/Makefile +++ /dev/null @@ -1,114 +0,0 @@ -# -# COPYRIGHT (c) 1988-1999. -# On-Line Applications Research Corporation (OAR). -# All rights reserved. -# -# $Id$ -# - -PROJECT=rgdb_specs - -include ../Make.config - -all: html info ps pdf - -dirs: - $(make-dirs) - -COMMON_FILES=../common/cpright.texi ../common/setup.texi - -GENERATED_FILES= \ - intro.texi revision.texi objectives.texi gdbinternals.texi \ - interfacing.texi comm.texi daemon.texi conclusion.texi - -FILES=$(PROJECT).texi $(GENERATED_FILES) - -INFOFILES=$(wildcard $(PROJECT) $(PROJECT)-*) - -info: dirs $(PROJECT) - #cp $(wildcard $(PROJECT) $(PROJECT)-*) $(INFO_INSTALL) - # cp $(PROJECT) $(INFO_INSTALL) - -$(PROJECT): $(FILES) - $(MAKEINFO) $(PROJECT).texi - -dvi: dirs $(PROJECT).dvi -ps: dirs $(PROJECT).ps -pdf: dirs $(PROJECT).pdf - -$(PROJECT).pdf: $(FILES) - $(TEXI2PDF) $(PROJECT).texi - cp $(PROJECT).pdf $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).ps: $(PROJECT).dvi - dvips -o $(PROJECT).ps $(PROJECT).dvi - cp $(PROJECT).ps $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).dvi: $(FILES) - $(TEXI2DVI) $(PROJECT).texi - cp $(PROJECT).dvi $(WWW_INSTALL)/$(PROJECT) - -html: dirs $(FILES) - -mkdir -p $(WWW_INSTALL)/$(PROJECT) - cp $(wildcard *.jpg) $(WWW_INSTALL)/$(PROJECT) - $(TEXI2WWW) $(TEXI2WWW_ARGS) -dir $(WWW_INSTALL)/$(PROJECT) \ - $(PROJECT).texi - -clean: - rm -f *.o $(PROG) *.txt core $(PROJECT).pdf - rm -f *.dvi *.ps *.log *.aux *.cp *.fn *.ky *.pg *.toc *.tp *.vr $(BASE) - rm -f $(PROJECT) $(PROJECT)-* $(GENERATED_FILES) - rm -f *.fixed _* - -# -# Process Automatically Generated Files -# - -intro.texi: intro.t Makefile - $(BMENU) -c -p "Top" \ - -u "Top" \ - -n "Document Revision History" ${*}.t - -revision.texi: revision.t Makefile - $(BMENU) -c -p "Introduction" \ - -u "Top" \ - -n "Objectives" ${*}.t - -objectives.texi: objectives.t Makefile - $(BMENU) -c -p "Document Revision History" \ - -u "Top" \ - -n "A Rapid Tour of GDB Internals" ${*}.t - -gdbinternals.texi: gdbinternals.t Makefile - $(BMENU) -c -p "Implied Restrictions" \ - -u "Top" \ - -n "Interfacing GDB with RTEMS as a Target" ${*}.t - -interfacing.texi: interfacing.t Makefile - $(BMENU) -c -p "A Rapid Tour of GDB Internals" \ - -u "Top" \ - -n "Communication with GDB" ${*}.t - -comm.texi: comm.t Makefile - $(BMENU) -c -p "Interfacing GDB with RTEMS as a Target" \ - -u "Top" \ - -n "RTEMS Debugger Server Daemon" ${*}.t - -daemon.texi: daemon.t Makefile - $(BMENU) -c -p "Communication with GDB" \ - -u "Top" \ - -n "Conclusion" ${*}.t - -conclusion.texi: conclusion.t Makefile - $(BMENU) -c -p "Output of a Debug Session with the Prototype" \ - -u "Top" \ - -n "" ${*}.t - -convert: - /usr/bin/gs -dMaxBitmap=300000000 -g4500x5500 -sDEVICE=pdfwrite -q -dNOPAUSE -dSAFER -sOutputFile=garde.pdf -- garde.eps -c -quit - /usr/bin/gs -dMaxBitmap=300000000 -g4500x5500 -sDEVICE=pdfwrite -q -dNOPAUSE -dSAFER -sOutputFile=layers.pdf -- layers.eps -c -quit - /usr/bin/gs -dMaxBitmap=300000000 -g4500x5500 -sDEVICE=pdfwrite -q -dNOPAUSE -dSAFER -sOutputFile=process.pdf -- process.eps -c -quit - /usr/bin/gs -dMaxBitmap=300000000 -g4500x5500 -sDEVICE=pdfwrite -q -dNOPAUSE -dSAFER -sOutputFile=seqinit.pdf -- seqinit.eps -c -quit - /usr/bin/gs -dMaxBitmap=300000000 -g4500x5500 -sDEVICE=pdfwrite -q -dNOPAUSE -dSAFER -sOutputFile=seqbreak.pdf -- seqbreak.eps -c -quit - /usr/bin/gs -dMaxBitmap=300000000 -g4500x5500 -sDEVICE=pdfwrite -q -dNOPAUSE -dSAFER -sOutputFile=seqdetach.pdf -- seqdetach.eps -c -quit - diff --git a/doc/rgdb_specs/Makefile.am b/doc/rgdb_specs/Makefile.am new file mode 100644 index 0000000000..af58592c16 --- /dev/null +++ b/doc/rgdb_specs/Makefile.am @@ -0,0 +1,83 @@ +# +# COPYRIGHT (c) 1988-1999. +# On-Line Applications Research Corporation (OAR). +# All rights reserved. +# +# $Id$ +# + +AUTOMAKE_OPTIONS = foreign + +PROJECT=rgdb_specs + +include $(top_srcdir)/project.am + +COMMON_FILES=$(top_srcdir)/common/cpright.texi $(top_builddir)/common/setup.texi + +GENERATED_FILES= \ + intro.texi revision.texi objectives.texi gdbinternals.texi \ + interfacing.texi comm.texi daemon.texi conclusion.texi + +FILES= + +info_TEXINFOS = rgdb_specs.texi +rgdb_specs_TEXINFOS = $(FILES) $(COMMON_FILES) $(GENERATED_FILES) + +JPEG_FILES = layers.jpg process.jpg seqinit.jpg seqbreak.jpg seqdetach.jpg + +if USE_HTML +html_project_DATA += $(JPEG_FILES) +endif + +# +# Process Automatically Generated Files +# + +intro.texi: intro.t + $(BMENU) -c -p "Top" \ + -u "Top" \ + -n "Document Revision History" $< + +revision.texi: revision.t + $(BMENU) -c -p "Introduction" \ + -u "Top" \ + -n "Objectives" $< + +objectives.texi: objectives.t + $(BMENU) -c -p "Document Revision History" \ + -u "Top" \ + -n "A Rapid Tour of GDB Internals" $< + +gdbinternals.texi: gdbinternals.t + $(BMENU) -c -p "Implied Restrictions" \ + -u "Top" \ + -n "Interfacing GDB with RTEMS as a Target" $< + +interfacing.texi: interfacing.t + $(BMENU) -c -p "A Rapid Tour of GDB Internals" \ + -u "Top" \ + -n "Communication with GDB" $< + +comm.texi: comm.t + $(BMENU) -c -p "Interfacing GDB with RTEMS as a Target" \ + -u "Top" \ + -n "RTEMS Debugger Server Daemon" $< + +daemon.texi: daemon.t + $(BMENU) -c -p "Communication with GDB" \ + -u "Top" \ + -n "Conclusion" $< + +conclusion.texi: conclusion.t + $(BMENU) -c -p "Output of a Debug Session with the Prototype" \ + -u "Top" \ + -n "" $< + +noinst_DATA = \ +layers.eps layers.pdf \ +process.eps process.pdf \ +seqdetach.eps seqdetach.pdf \ +seqbreak.eps seqbreak.pdf \ +seqinit.eps seqinit.pdf + +EXTRA_DIST = *.t $(noinst_DATA) $(JPEG_FILES) diff --git a/doc/rgdb_specs/garde.eps b/doc/rgdb_specs/garde.eps deleted file mode 100644 index 6d31db2f92..0000000000 --- a/doc/rgdb_specs/garde.eps +++ /dev/null @@ -1,8168 +0,0 @@ -%!PS-Adobe-2.0 EPSF-2.0 -%%Title: garde.eps -%%Creator: fig2dev Version 3.2 Patchlevel 1 -%%CreationDate: Fri Oct 30 13:27:47 1998 -%%For: valette@tri-yann (Eric Valette,,6891,) -%%Orientation: Portrait -%%BoundingBox: 0 0 521 694 -%%Pages: 0 -%%BeginSetup -%%EndSetup -%%Magnification: 1.0000 -%%EndComments -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {0 setgray} bind def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def - -end -save --27.0 696.0 translate -1 -1 scale - -/cp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/sa {save} bind def -/rs {restore} bind def -/l {lineto} bind def -/m {moveto} bind def -/rm {rmoveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/sh {show} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/sd {setdash} bind def -/ff {findfont} bind def -/sf {setfont} bind def -/scf {scalefont} bind def -/sw {stringwidth} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def -%%EndProlog - -$F2psBegin -10 setmiterlimit -n -1000 12037 m -1000 -1000 l 9697 -1000 l 9697 12037 l cp clip - 0.06299 0.06299 sc -/Times-Roman ff 210.00 scf sf -2115 8595 m -gs 1 -1 sc (CRF) col0 sh gr -/Times-Roman ff 210.00 scf sf -2115 8280 m -gs 1 -1 sc (CRF) col0 sh gr -/Times-Roman ff 210.00 scf sf -2115 7965 m -gs 1 -1 sc (CRF) col0 sh gr -/Times-Bold ff 210.00 scf sf -3600 5445 m -gs 1 -1 sc (Validated By :) col0 sh gr -/Times-Bold ff 210.00 scf sf -540 5850 m -gs 1 -1 sc (Name :) col0 sh gr -/Times-Bold ff 210.00 scf sf -495 6210 m -gs 1 -1 sc (Company : ) col0 sh gr -/Times-Bold ff 210.00 scf sf -495 6570 m -gs 1 -1 sc (Received on :) col0 sh gr -/Times-Bold ff 210.00 scf sf -5985 6210 m -gs 1 -1 sc (Sign : ) col0 sh gr -/Times-Bold ff 210.00 scf sf -3420 6210 m -gs 1 -1 sc (Department :) col0 sh gr -/Times-Bold ff 210.00 scf sf -3420 6615 m -gs 1 -1 sc (Deadline : ) col0 sh gr -/Times-Bold ff 210.00 scf sf -3420 5850 m -gs 1 -1 sc (Position : ) col0 sh gr -/Times-Bold ff 210.00 scf sf -585 4275 m -gs 1 -1 sc (Name :) col0 sh gr -/Times-Bold ff 210.00 scf sf -540 4635 m -gs 1 -1 sc (Company : ) col0 sh gr -/Times-Bold ff 210.00 scf sf -540 4995 m -gs 1 -1 sc (Received on :) col0 sh gr -/Times-Bold ff 210.00 scf sf -6030 4635 m -gs 1 -1 sc (Sign : ) col0 sh gr -/Times-Bold ff 210.00 scf sf -3465 4635 m -gs 1 -1 sc (Department :) col0 sh gr -/Times-Bold ff 210.00 scf sf -3465 5040 m -gs 1 -1 sc (Deadline : ) col0 sh gr -/Times-Bold ff 210.00 scf sf -3465 4275 m -gs 1 -1 sc (Position : ) col0 sh gr -/Times-Bold ff 210.00 scf sf -3645 3870 m -gs 1 -1 sc (Verified By :) col0 sh gr -/Times-Bold ff 210.00 scf sf -3060 2340 m -gs 1 -1 sc (Last Modified on :) col0 sh gr -/Times-Bold ff 210.00 scf sf -6570 2340 m -gs 1 -1 sc (Version : ) col0 sh gr -/Times-Bold ff 210.00 scf sf -540 2340 m -gs 1 -1 sc (Created on : ) col0 sh gr -% Polyline -7.500 slw -n 2970 2025 m 2970 2520 l gs col0 s gr -% Polyline -n 6390 2025 m 6390 2520 l gs col0 s gr -% Polyline -n 450 2520 m 8685 2520 l 8685 2565 l gs col0 s gr -% Polyline -n 450 3555 m 8685 3555 l 8685 3600 l gs col0 s gr -% Polyline -n 450 3015 m 8685 3015 l 8685 3060 l gs col0 s gr -% Polyline -n 450 6750 m 8685 6750 l 8685 6795 l gs col0 s gr -% Polyline -n 450 7200 m 8685 7200 l 8685 7245 l gs col0 s gr -% Polyline -n 450 5490 m 8685 5490 l 8685 5535 l gs col0 s gr -% Polyline -n 450 3915 m 8685 3915 l 8685 3960 l gs col0 s gr -% Polyline -n 450 5175 m 8685 5175 l 8685 5220 l gs col0 s gr -/Times-Bold ff 210.00 scf sf -540 3375 m -gs 1 -1 sc (Document Internal Reference : ) col0 sh gr -/Times-Bold ff 210.00 scf sf -585 2835 m -gs 1 -1 sc (Author : ) col0 sh gr -/Times-Bold ff 270.00 scf sf -3420 7065 m -gs 1 -1 sc (DISTRIBUTION LIST) col0 sh gr -% Polyline -n 1980 7200 m 1980 10305 l gs col0 s gr -% Polyline -n 5895 7200 m 5895 10305 l gs col0 s gr -% Polyline -n 4500 7200 m 4500 10305 l gs col0 s gr -% Polyline -n 3105 7200 m 3105 10305 l gs col0 s gr -% Polyline -n 7515 7200 m 7515 10305 l gs col0 s gr -/Times-Bold ff 210.00 scf sf -495 7515 m -gs 1 -1 sc (Name) col0 sh gr -/Times-Bold ff 210.00 scf sf -5985 7515 m -gs 1 -1 sc (Reason) col0 sh gr -/Times-Bold ff 210.00 scf sf -4590 7515 m -gs 1 -1 sc (Position) col0 sh gr -/Times-Bold ff 210.00 scf sf -2025 7515 m -gs 1 -1 sc (Company) col0 sh gr -/Times-Bold ff 210.00 scf sf -3150 7515 m -gs 1 -1 sc (Department) col0 sh gr -/Times-Bold ff 210.00 scf sf -7560 7515 m -gs 1 -1 sc (Has Copy) col0 sh gr -% Polyline -n 450 7650 m 8685 7650 l 8685 7695 l gs col0 s gr -/Times-Bold ff 270.00 scf sf -4320 450 m -gs 1 -1 sc (Canon Research Centre France S.A) col0 sh gr -/Times-Roman ff 240.00 scf sf -4725 765 m -gs 1 -1 sc (Rue de la touche Lambert) col0 sh gr -/Times-Roman ff 240.00 scf sf -4725 1125 m -gs 1 -1 sc (35515 CESSON SEVIGNE Cedex) col0 sh gr -/Times-Roman ff 240.00 scf sf -4725 1440 m -gs 1 -1 sc (FRANCE) col0 sh gr -% Polyline -% -% Begin Imported EPS File: /home/valette/ev-perso-doc/canon.eps -%%BeginDocument: /home/valette/ev-perso-doc/canon.eps -% -n gs -540 180 tr -5.220486 -5.126582 sc -0 -158 tr --18 -18 tr -sa -n 18 18 m 594 18 l 594 176 l 18 176 l cp clip n -countdictstack -mark -/showpage {} def -% EPS file follows: -%!PS-Adobe-2.0 EPSF-1.2 -%%Creator: tops on IRIS workstation -%%BoundingBox: 18 18 594 176 -%% $Header$ -%%EndComments -%%BeginPreview: 250 68 1 68 -% 0000000000000000000000000000000000000000000000000000000000000019 -% 0000000000000000000000000000000000000000000000000000000000000019 -% 0000000000000000000000000000000000000000000000000000000000000019 -% 0000000000000000000000000000000000000000000000000000000000000019 -% 0000000000000000000000000000000000000000000000000000000000000019 -% 0000000000000000000000000000000000000000000000000000000000000019 -% 0000000000000000000000000000000000000000000000000000000000000019 -% 0000000000000000000000000000000000000000000000000000000000000019 -% 0000000000000000000000000000000000000000000000000000000000000019 -% 0000000000000000000000000000000000000000000000000000000000000019 -% 0000001fffc00000000000000000000000000000000000000000000000000019 -% 000001fffffc0000000000000000000000000000000000000000000000000019 -% 00000fffffff8000000000000000000000000000000000000000000000000019 -% 00003fffffffe000000000000000000000000000000000000000000000000019 -% 0000fffff800780000000000000000000000000003ffc0000000700007c00019 -% 0003ffffe0001c000000018000000f80007e00001ffff8000003fc001ff00019 -% 0007ffff80003e0000003ff000003fe003ff00003ffffe00000ffe007ff80019 -% 000ffffe00003f800001fffc0000fff00fff8000fc0fff80003fff03fffc0019 -% 001ffffc00007fc00003fffe0003fff81fffc001fc0fffc0007fff87fffc0019 -% 003ffff800007fe0001fffff000ffff87fffe007f80fffe001ffff9ffffc0019 -% 007ffff00000fff0007fffff001ffffdffffe007f807fff007ffffe3fffe0019 -% 00ffffe00000ffe003ffffff007ffffe1fffe00ffc07fff81fffffc1fffe0019 -% 00ffffe00001ffc00fffffff80fffffc1fffe01ffc07fff83fffffc1fffe0019 -% 01ffffc00001ff003fffffff8003fffc1fffe03ffc03fffc003fffc1fffe0019 -% 01ffffc00003fe0000003fff8003fffc1fffe03ffc03fffc003fffc1fffe0019 -% 03ffff800003f00000001fffc003fffc1fffe07ffe03fffe003fffc1fffe0019 -% 03ffff800007e00000001fffc003fffc1fffe07ffe01fffe003fffc1fffe0019 -% 03ffff800007c00000000fffc003fffc1fffe07ffe01ffff003fffc1fffe0019 -% 03ffff00000f000000000fffe003fffc1fffe0ffff01ffff003fffc1fffe0019 -% 03ffff00000e000000000fffe003fffc1fffe0ffff01ffff003fffc1fffe0019 -% 07ffff000010000000000fffe003fffc1fffe0ffff00ffff003fffc1fffe0019 -% 07ffff0000000000000007ffe003fffc1fffe0ffff80ffff803fffc1fffe0019 -% 07ffff000000000001ff07fff003fffc1fffe0ffff80ffff803fffc1fffe0019 -% 03ffff000000000007ffc7fff003fffc1ffff0ffff807fff803fffc1fffe0019 -% 03ffff00000000001ffffffff003fffc1fffe0ffffc07fff803fffc1fffe0019 -% 03ffff00000000003ffffffff803fffc1ffff0ffffc07fff803fffc1fffe0019 -% 03ffff00000000007ffffffff803fffc1ffff0ffffc07fff003fffc1fffe0019 -% 03ffff0000000000fffc1ffff803fffc1ffff0ffffe03fff003fffc1fffe0019 -% 03ffff8000000001fff007fffc03fffc1ffff0ffffe03fff003fffc1fffe0019 -% 01ffff8000000001ffe003fffc03fffe1ffff0ffffe03fff003fffc1fffe0019 -% 01ffffc000000001ffe001fffc03fffe1ffff07fffe01fff003fffc1fffe0019 -% 00ffffc000000003ffc001fffc03fffe1ffff07ffff01ffe003fffc1fffe0019 -% 00ffffe000000003ffc000fffe01fffe0ffff03ffff01ffe003fffc1fffe0019 -% 007fffe000000013ff8000fffe01fffe0ffff03ffff00ffc003fffc1fffe0019 -% 007ffff000000033ff8000fffe03fffe0ffff01ffff80ffc003fffc1fffe0019 -% 003ffff800000023ffc000ffff03fffe1ffff01ffff80ff8003fffc1fffe0019 -% 001ffffc00000063ffc000ffff01fffe0ffff00ffff80ff0003fffc1fffe0019 -% 000ffffe00000181ffc001ffff01fffe0ffff007fffc07e0003fffc1fffe0019 -% 0007ffff80000301ffe0013fff81fffe0ffff003fffc0fc0003fffc1fffe0019 -% 0003ffffc0000601fff0033fff81fffe0ffff001fffc0fc0003fffc1fffe0019 -% 0001fffff0001c00fff80e3fff81fffe0ffff000fffe1f00003fffc1fffe0019 -% 00007fffff87f0007ffffc3fffc1fffe0ffff0003ffffe00003fffc1fffe0019 -% 00003fffffffc0001ffff81fffc1fffe0ffff0000ffff800003fffc1fffe0019 -% 00000fffffff00000fffe01fffc1fffe0ffff00003ffe0000000000000000019 -% 000001fffff8000001ff80000000000000000000000000000000000000000019 -% 00000007fc000000000000000000000000000000000000000000000000000019 -% 0000000000000000000000000000000000000000000000000000000000000019 -% 0000000000000000000000000000000000000000000000000000000000000019 -% 0000000000000000000000000000000000000000000000000000000000000019 -% 0000000000000000000000000000000000000000000000000000000000000019 -% 0000000000000000000000000000000000000000000000000000000000000019 -% 0000000000000000000000000000000000000000000000000000000000000019 -% 0000000000000000000000000000000000000000000000000000000000000019 -% 0000000000000000000000000000000000000000000000000000000000000019 -% 0000000000000000000000000000000000000000000000000000000000000019 -% 0000000000000000000000000000000000000000000000000000000000000019 -% 0000000000000000000000000000000000000000000000000000000000000019 -% 0000000000000000000000000000000000000000000000000000000000000019 -%%EndPreview -gsave -18.000000 176.000000 translate -/bwproc { - rgbproc - dup length 3 idiv string 0 3 0 - 5 -1 roll { - add 2 1 roll 1 sub dup 0 eq - { pop 3 idiv 3 -1 roll dup 4 -1 roll dup - 3 1 roll 5 -1 roll put 1 add 3 0 } - { 2 1 roll } ifelse - } forall - pop pop pop -} def -systemdict /colorimage known not { - /colorimage { - pop - pop - /rgbproc exch def - { bwproc } image - } def -} if -576.000000 -158.000000 scale -/picstr 991 string def -991 272 8 -[991 0 0 -272 0 272] -{currentfile picstr readhexstring pop} -image -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffff3f3ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffd7950000000000000000000000 -00000000000000000000000000000000000000000057a5dcfbffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffe10000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000b3ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000002fbaffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffbdce6d7dcefffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffb3000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000057ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffba0000000000000000000000000000 -0000000000000000a5efffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffd70000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000020efffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffff4a0000000000000000 -00000000000000000000000000000000000000000000000000fbffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffcc000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00e1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4a00 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000083ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffff7d7efe1ebffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffcc00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000002fffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff0400000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000079ffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000e1ffffffffffffffffffffffffffffffffffc0634a206e95 -9d959db3acbaccc0c6ebe6f3f7f7e1ebfff7ffe6ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffc02f000000000000000000000000000000000000 -00000000baffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -e100000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000efffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffff6e0000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000008cffffffffffffffffffffffff -ffffffffff000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000ffff -ffffffffffffffffffffffffffffffffffff3d00000000000000000000000000000000 -000000000000040000042000000020202f572f4a795795a579a5c6d2e1effbf7fffbff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff7900000000000000000000000000 -0000000000000000000000000000000000000000008cffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff0400000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000efffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000c6ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffff00000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000ffff -ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000ffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffff2f000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00e1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffba0000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000efffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffffff0000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000ffffffffffffffffffffffffffffff -ffffffffff000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000ffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -a500000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000006effffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffff8c0000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00a5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff0000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00ffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000ffffffffffffffffffffffffffffff -ffffff0000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000ffffffff -ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffd20000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000baffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffffffffff630004003d2f -3d123d63838c956363836e04639db3953dacd2d2d7d7bab3d7e1d2dce6ebefeff7e6ef -fff3ebffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -3d00000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000004ffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff9d00000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000063ffffffffffffffffffffffffffffffffffffffffff -ffffffff00000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000ffffffffff -ffffffffffffffffffffffffffff000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000ffffffffffffffffffffffffffffffffffffffff0000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffff7000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000004ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000ffffffffffffffffffffffffffffff -ffffffffff000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000baff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff1200000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000f3ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000ffffffffffffffffff -ffffffffffffffffffffffffffffff0000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000ffffffffffffffffffffffffffffffffffffff00000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000ffffffffffffffffffffffffffffffffff -ffffff0000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000ffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffe1000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000ffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffff0000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000ffffffff -ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000004affffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff6e00000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000c6ffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2f -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000e6ffffffffffffffffffffffffffffffffffffffffffeb000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000ffffffffffffffffffffffffffffffffffff -ff00000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000ffffffffffff -ffffffffffffffffffffffffffff000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffba -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000020 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffff000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000ffffffffffffffffffffffffffffffffffffffff0000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000004affffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff7900000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000c0ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff0000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000057ffffffffffffffffffffffffffffffffffffff -ff00000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000dcffffffffffffff -ffffffffffffffffffffffff0000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000ffffffffffffffffffffffffffffffffffffffff00000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000ffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffc00000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000002fffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000ffffffffffffffffffffffffffffffffff -ffffff0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000083ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffc0000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000efffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000ffffffffffffff -ffffffffffffffffffffffff0000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000ffffffffffffffffffffffffffffffffffffff -ff00000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffdc0000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ff00000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000ffffffffffff -ffffffffffffffffffffffffffff000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000c0ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffff000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000579dffffffffffffffffffffffffffffffefac9520000000000000000000000000 -00000000000000000000fbffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000ffffffffffffffffffffffffffffffffffff000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000ffffffffffffffff -ffffffffffffffffffffffff0000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffff30000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000004affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff0000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000ffffffffffffffffffffffffffffffffffffffff00000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000acffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffff8c0000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000004baefffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffefb320000000000000000000000000000000000000ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffcc00000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000200420000000 -0000000000000000000000000000000000ffffffffffffffffffffffffffffffffac00 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000a5ffffffffffffffffffff -ffffffffffffffffffff00000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000ffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ff00000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000dcffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000ffffffffffffffffffffffffffffffffffffff -ff00000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000b3ffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000baffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffc000000000000000000000000000000000 -4affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffdc000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000002f -ccffffffffffffffffffffffffd2000000000000000000000000000000ffffffffffff -ffffffffffffffffff0000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -ffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000ffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffb3000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000ffffffffffffffff -ffffffffffffffffffffffff0000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000acffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffff79000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000003dffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7900 -00000000000000000000000000e1ffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffff30000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000083ffffffffffffffffffffffffffffffffffffffff12000000000000 -000000000000ffffffffffffffffffffffffffff000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000ffffffffffffffffffff -ffffffffffffffffffff00000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000063efffffffffffba00000000000000000000000000000000 -0000000000008cffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffff00000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000009dffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffff000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000003dffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff0400000000000000000000000000ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000006effffffffffffffffffffffffffffffffffff -ffffffffffff57000000000000000000004affffffffffffffffffffffffff00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000ffffffffffffffffffffffffff -ffffffffffffffff000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00ffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000ffffffffffffffffffffffff630000 -00000000000000000000000000000000000000ffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000a5ffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffff70000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000d7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffdc000000000000000000 -000000acffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff0000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000057ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffff4a0000000000000000009dffffffffff -ffffffffffff0400000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000ffffff -ffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000ffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffff00000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000f3ffffffffff -ffffffffffffffffffff000000000000000000000000000000000000000000ffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000ffffffffffffffffffff -ffffffffffffffffffff00000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000acffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6300 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000020ffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffff000000000000000000000000ffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7000000 -000000000000ffffffffffffffffffffff000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000ffffffffffffffffffffffffffffffffffffffffffff0000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000ffffffffffffffffffffffff -ffffffffffffffff000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffff000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000ffffffffffffffffffffffffffffffffffff2f000000000000000000000000 -00000000000000009dffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffff000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00ffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000d7ffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffff000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000002fffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffff0400000000000000000000baffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd20000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000b3ffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffac0000000000000000ffffffffffffffffffff00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000ffffffffffffffffffffffffffffffff -ffffffffffff0000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000ff -ffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffd70000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000fbffffffffffffffffffffffffffffffffffffff57 -000000000000000000000000000000000000000000ffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000e6ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000063ffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 -00000000002fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffff000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000efffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffff0000000000000000ffffffffff -ffffffc000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000fbffffffffff -ffffffffffffffffffffffffffffffffff000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000ffffffffffffffffffffffffffffffffffffffff0000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6e00 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000ffffffffffffffffffffff -ffffffffffffffffffffff00000000000000000000000000000000000000000000ffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000ffffffffffffffffffffffff -ffffffffffffffff000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00dcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000002fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffb00000000000000000000ffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff0000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 -000000000000e1ffffffffffffff000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000ffffffffffffffffffffffffffffffffffffffffffffff00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000ffffffffffffffffffffffffffff -ffffffffffff0000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000ff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffff000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000d2 -ffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 -00000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff0000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000ff -ffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000d2ffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffdc0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffd2000000000000000000ffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffff00000000000000ffffffffffffff00000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000ffffffffffffffffffffffffffffffffffffff -ffffffff00000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000ffffff -ffffffffffffffffffffffffffffffffff000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff3d -00000000000000000000000000000000000000000000ffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffff000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000ffffffffffffffffffffffffffffffffffffffff0000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000e1ffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffac00000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000acffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2f00 -00000000000000c0ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ff00000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000d2ffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffff0000000000003dffffffffff -ff00000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000d2ffffffffffffffff -ffffffffffffffffffffffffffffff0000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000ffffffffffffffffffffffffffffffffffffffff00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000ffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000f7ffffffffffffffffffffffffffff -ffffffffffffffffffffff0000000000000000000000000000000000000000000000ff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000ffffffffffffffffffffffffffff -ffffffffffff0000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000f3 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffff95000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffff00000000000000002fffffffffffffffffffffffffffffff -fffffffffffffffffffffffb0000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000063ffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -000000000000ffffffffff200000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000ffffffffffffffffffffffffffffffff -ffffffff00000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffff0000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000ffffffff -ffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000 -0000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffff00000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000ffffff -ffffffffffffffffffffffffffffffffff000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000efffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6e0000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000d2ffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffff2f0000000000000000ffffff -ffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffe6000000000000ffffffff00000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffff -ffff000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000ffffffffff -ffffffffffffffffffffffffffffff0000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffff00000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffa500 -0000000000000000000000000000000000000000000000ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff0000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000ffffffffffffffffffffffffffffffffffffffff00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000ffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffff63000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000ffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -f70000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff0000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffff040000000000ffffffff0000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000004affffffffffffffffffffff -ffffffffffffffffffffffffff00000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000ffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000e1ffffffffffffffffffffffffffffffffff -ffffffffffffffffffff00000000000000000000000000000000000000000000000000 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000ffffffffffffffffffffffffffffffff -ffffffff00000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffff4a0000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000004affffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffffffff -ffffffffffffffff830000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000c6ffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -000000000000ffff950000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000ff -ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000ffffffffffffffffffffffffffffffffffff -ffff000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000ffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000ffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000 -000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffff000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000ffffffffff -ffffffffffffffffffffffffffffff0000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffac00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -ebffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffff0400000000000000ffff -ffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000ffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffd20000000000ffff00000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffff -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000ffffffffffffff -ffffffffffffffffffffffffff00000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffff000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000000000000000000000000000000000000000000000ffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffff00000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000ffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffac0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffc600000000000000ffffffffffffffffffffffffffffffffffffffff0000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000e1ffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffff000000000000e10000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000ffffffffffffffffffffffffffff -ffffffffffffffffffffff000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000ffffffffffffffffffffffffffffffffffffffff0000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000e6ffffffffffffffffffffffffffffffffffffffff -ffffffffffffffff000000000000000000000000000000000000000000000000000000 -00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000ffffffffffffffffffffffffffffffffffff -ffeb000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000efffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffd200000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000020ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff00000000000000ffffffffffffffffffffffffff -ffffffffff570000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000ffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000f3ffffff -fffffffffffffffffffffffffffffffffffffffffff700000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000fffffffffffffffffffffffffffffffffffffff7 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000ffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffff04000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000ffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000 -00000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000ffffffffffffff -ffffffffffffffffffffffffe600000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000006effffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffef00000000000000ff -ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000d7ffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffff000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffeb0000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000ffffffffffffffffff -ffffffffffffffffffffff000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffc600000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 -00000000000000000000000000000000000000000000000000ffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffff000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000ffffffffffffffffffffffffffffffffffffffef0000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000acffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffff6e00000000000000ffffffffffffffffffffffffffffffff0000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffd7000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000ffffffffffffffffffffffffffffffffff -fffffffffffffffff30000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000ffffffffffffffffffffffffffffffffffffffff00000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffff000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000acffffffffffffffffffffffffffffffffffffffffffffff -ffffffffff9d0000000000000000000000000000000000000000000000000000000000 -008cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffb -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000ffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffff000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000d2ffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff00000000000000ffffffffffffffffffffffff -ffffd20000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000dcffffffffffff -ffffffffffffffffffffffffffffffffffffffeb000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000fffffffffffffffffffffffffffffffffffffffb0000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000ffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000 -00000000000000000000000000f3ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000ffffffffffffffffff -ffffffffffffffffffffe6000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000acffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000 -ffffffffffffffffffffffffff00000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000efffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffff00000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffdc00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000ffffffffffffffffffffff -ffffffffffffffffd20000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000ffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000 -00000000000000000000000000000000000000000000000000ffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff0000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000ffffffffffffffffffffffffffffffffffffffd700000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffac000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000079 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffff00000000000000ffffffffffffffffffffffff0000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffc600000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff -ffffffffffffd200000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -ffffffffffffffffffffffffffffffffffffffd7000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffba00000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000083ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffd20000000000000000000000000000000000000000000000000000000000000000 -0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000ffffffffffffffffffffffffffffffffffffffb30000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffff00000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000063ffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffff00000000000057ffffffffffffffffffffff -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000acffffffffffffffffff -ffffffffffffffffffffffffffffffffffc60000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000ffffffffffffffffffffffffffffffffffffffe100000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000ffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000ffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffff00000000000000000000000000000000000000000000 -000000000000000000000000008cffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000ffffffffffffffffffffff -ffffffffffffffffc60000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffff000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000003dffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb000000000000 -e1ffffffffffffffffffff000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000ffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff0000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00ffffffffffffffffffffffffffffffffffffffffffffffffffffffcc000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000ffffffffffffffffffffffffff -ffffffffffffc600000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000ffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000 -00000000000000000000000000000000000000000000000000ffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffff00000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -ffffffffffffffffffffffffffffffffffffffd7000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000ffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffa5000000000000ffffffffffffffffffff00000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000003dffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffff -ffffffffd2000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000ffff -ffffffffffffffffffffffffffffffffffc00000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffff9d0000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000057ffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000ffffffffffffffffffffffffffffffffffffffeb00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000ffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffff3d000000000000fffffffffffffffff30000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000f7ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000003dffffffffffffffffffffffff -ffffffffffffffffffffffffffffffc000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffffffffcc000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000ffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000ffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffff00000000000000000000000000000000000000000000000000 -0000000000000000000000000095ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000ffffffffffffffffffffffffff -ffffffffffffdc00000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffff00000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 -ffffffffffffffffd20000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000ffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffff12000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000ffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffac0000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000ffffffffffffffffffffffffffffff -ffffffffd2000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000ffff -ffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000ffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000 -00000000000000000000000000000000000000000000000000ffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffff000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000ffff -ffffffffffffffffffffffffffffffffffc60000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000f7ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff0000000000ffffffffffffffff95000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000ffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff2000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffac0000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000ffffffff -ffffffffffffffffffffffffffffffc000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffac000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000012ffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffffffffc0000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000ffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -6effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff4a00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffff9d000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000ffffffffffffffffffffffffffffffffffffff9d0000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000ffffffffffffffffffffffffffffff -ffffffffffffffffffffffff0000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000f3ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffff00000000000000000000000000000000000000000000000000000000 -00000000000000000000000000f3ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000ffffffffffffffffffffffffffffff -ffffffffac000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000ffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff0000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57000000ffff -ffffffffffff0000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffff000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000efffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff9d00000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000ffffffffffffffffffffffffffffffffff -ffffac0000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000ffffffff -ffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000ffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000ffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffff0000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000ffffffff -ffffffffffffffffffffffffffffff9500000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffb3000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000ffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff000000ffffffffffffffff000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000ffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -9500000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000ffffffffffff -ffffffffffffffffffffffffffa5000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff0000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -008cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffef000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000ffffffffffffffffffffffffffffffffffffff8c0000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000ebffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff0000ffffffffffffffff12000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffff630000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffff950000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000ffffffffffffffffffffffffffffffffffffff8300000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000ffffffffffffffffffffffffffffffffff -ffffffffffffffff000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000095ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffff00000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffef00000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000ffffffffffffffffffffffffffffffffff -ffff950000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000ffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffff000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffac00ffffffff -ffffffffac000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000c0ffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffff000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000d2ffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffff79000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000ffffffffffffffffffffffffffffffffffffff -9d00000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000ffffffffffff -ffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000ffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff0000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000083ffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ef00000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000ffffffffffff -ffffffffffffffffffffffffff79000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffb00000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff00ffffffffffffffffff00000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000ffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffff00000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5700 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000ffffffffffffffff -ffffffffffffffffffffffa50000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffff70000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000ffffffffffffffffffffffffffffffffffffff4a00000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000ffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000acffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffd20000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff3d00000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000ffffffffffffffffffffffffffffffffffffff8c000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000ffffffffffffffffffffffffffffffffffffff -ffffffffff000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000012ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ff3d000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000d7ffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffeb000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000ffffffffffffffffffffffffffffffffffffff -5700000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb00 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffff0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000008cffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffff120000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000ffffffffffffffffffffffffffffffffffffff6e00 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000ffffffffffffffff -ffffffffffffffffffffffffffffff0000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000ffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff0000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000ffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe100 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000ffffffffffffffff -ffffffffffffffffffffff200000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff0000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffff000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000ffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffff00000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000ffffffffffffffffffff -ffffffffffffffffff2f00000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000ffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -e1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffdc00000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000ffffffffffffffffffffffffffffffffffffff12000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000ffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffd7000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000004ffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffa5000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffe60000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffff00000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00ffffffffffffffffffffffffffffffffffffff040000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff -ff57000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff6300 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffe10000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000ffffffffffffffffffffffffffffffffffffff2f00 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000ffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000ff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffff000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000020ffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000ffffffffffffffffffffffffffffffffffffff04000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000ffffffffffffffffffff -ffffffffffffffffffffffff0000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000083ffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff0000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd2000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000ffffffffffffffffffff -ffffffffffffffffff0000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffeb0000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000063ffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffff00000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000efffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffff00000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000ffffffffffffffffffffffff -ffffffffffffff04000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00fffffffffffffffffffffffffffffffffffffffffffb000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000020 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffba000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00ffffffffffffffffffffffffffffffffffffff000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffff8c0000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffff000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000ff -ffffffffffffffffffffffffffffffffffff1200000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff0000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffb300000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000ffffffffffffffffffffffffffffffffffffff00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000ffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000003dffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -d700000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000ffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000012ffffffffffffffffffffffffffffffffffffff000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000ffffffffffffffffffffffff -ffffffffffffffffff0000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000083ffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff0000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000ffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb30000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000ffffffffffffffffffffffff -ffffffffffffff00000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffff000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff0000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000ffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffff0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000f3ffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000003dffffffffffffffffffffffffffff -ffffffffff000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000ff -ffffffffffffffffffffffffffffffffffffffc6000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffff000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000012ff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffac0000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000ff -ffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffff00000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -b3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffff000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffff0000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000004affffff -ffffffffffffffffffffffffffffffff04000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000ffffffffffffffffffffffffffffffffffffffff0000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000ff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff9d000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000ffffffffffffffffffffffffffffffffffffff000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffba0000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000ffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffac -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000ffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffff000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000ffffffffffffffffffffffffffffffffffffff0000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000ffffffffffffffffffffffffffff -ffffffffffff0000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffff -ffffff4a00000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000ffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff6e00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000ffffffffffffffffffffffffffff -ffffffffff000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000ff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffff000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000ffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000008cffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000012ffffffffffffffffffffffffffffffff -ffffff0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000ffffff -ffffffffffffffffffffffffffffffffd2000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000d2ffffffffffffffffffffffffffff -ffffffffffffffffffffffffffff000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000ffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffff7900000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000ffffff -ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffff00000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000f3ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffff4a000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffe100000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ff00000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000063ffffffffff -ffffffffffffffffffffffffffff000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000ffffffffffffffffffffffffffffffffffffff0000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000ffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffff8c0000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000004ffffffffffffffffffffffffffffffffffffff0000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000ffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffff2f0000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000ffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000e1ffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff0000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000acffffffffffffffffffffffffffffffffffffff00000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000ffffffffffffffffffffffffffffffff -ffffff0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff -9d00000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffff6e000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000004ffffffffffffffffffffffffffffffff -ffffff0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000012 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffff00000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000f3ffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000063ffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000009dffffffffffffffffffffffffffffffffffff -ff00000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000ffffffffff -ffffffffffffffffffffffffffd7000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000083ffffffffffffffffffffffffffffffffff -ffffffffffffffffffffff000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000d2ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ff79000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000020ffffffffff -ffffffffffffffffffffffffffff000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffff00000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00ebffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffff000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000ff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000acffffffffffffff -ffffffffffffffffffffffff0000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000ffffffffffffffffffffffffffffffffffff0000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000ffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff6e00000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000063ffffffffffffffffffffffffffffffffffffff00000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000ffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffff200000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000ffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000095ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffff950000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffff00000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000e1ffffffffffffffffffffffffffffffffffffff000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000ffffffffffffffffffffffffffffffffffff -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000ffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffff120000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000004affffffffffffffffffffffffffffffffffff -ff00000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000ffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000057ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffff00000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff0400000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000003dffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000ffffffffffffff -ffffffffffffffffffffff000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff -ffffffffffffffff000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000ffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000003dffffffffffffff -ffffffffffffffffffffffff0000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffff00000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff2000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000e1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000ffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000ffffffffffffffffffff -ffffffffffffffffffff00000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000ffffffffffffffffffffffffffffffffffff00000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000ffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000d2ffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffff00000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000079ffffffffffffffffffffffffffffffffffffff000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffc00000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000ffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000ffffffffffffffffffffffffffffffffffffff -ffffffffffffffff000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffff000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00ffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000ffffffffffffffffffffffffffffffffff9d0000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000ffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000079ffffffffffffffffffffffffffffffffffffff00 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000ffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffc000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000002fffffffffffff -ffffffffffffffffffffffffffffffffff000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000ffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000ffffffffffffffffff -ffffffffffffffff000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffff -ffffffffff9d0000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000079ffffffffffffffffff -ffffffffffffffffffff00000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ff00000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000ccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000a5ffffffffffffffffffffffffffffffffff2f000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000d2ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000ffffffffffffffffffffffff -ffffffffffffffff000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000ffffffffffffffffffffffffffffffffff00000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000d7ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffff000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0063ffffffffffffffffffffffffffffffffffffff0000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff0000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000b3ffffffffffffffffff950000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff0000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000ff -ffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000ffffffffffffffffffffffffffffffffff0000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000ffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000ffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000079ffffffffffffffffffffffffffffffffffffff000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffc0000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffff00000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffff000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000ffffffffffffffffffffffffffffffffffffffff0000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000002fffffffffffffffffffffff -ffffffffffff0000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffef0000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000ffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000079ffffffffffffffffffffff -ffffffffffffffff000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1200 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -006effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff7900000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000d2ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000ffffffffffffffffffffffffffff -ffffffffffff0000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000004a -ffffffffffffffffffffffffffffffffff000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000006effffffffffffffffffffffffffffff -ffffffffffffffffffffffffff00000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000e6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff0000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000079 -ffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff0000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000fbffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffff00000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000ffffff -ffffffffffffffffffffffffffffffffff000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000004affffffffffffffffffffffffffffffffd200000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000ffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000006effffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffff000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000baffffffffffffffffffffffffffffffffffffff0000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000ffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffff00000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff0000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000ffffffffffffffffffffffffffffffffffffffff00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000004affffffffffffffffffffffffff -ffffff3d00000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000d7ffffffffffffffffffffffffff -ffffffffffff0000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000ff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000063ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000ffffffffffffffffffffffffffffffff -ffffffff00000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000002fffff -ffffffffffffffffffffffffffff000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffff63000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffff00000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000d2ffff -ffffffffffffffffffffffffffffffffff000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffff00000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000ffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffff000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000ffffffffff -ffffffffffffffffffffffffffffff0000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000004affffffffffffffffffffffffffffffff00000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000d7ffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff0000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000ccffffffffffffffffffffffffffffffffffffff00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000ffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffac0000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000ffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffff000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffff00000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000009dffffffffffffffffffffffffffffff -ff00000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000ffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000a5ffffffffffffffffffffffffffffff -ffffffff00000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000ffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000006effffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000006e0000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000ffffffffffffffffffffffffffffffffffff -ffff000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000c6ffffffff -ffffffffffffffffffffffff0000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffb3000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffff000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000083ffffffff -ffffffffffffffffffffffffffffff0000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffff00000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000f7ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000a5ffc60000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000ffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000ffffffffffffff -ffffffffffffffffffffffffff00000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000d7ffffffffffffffffffffffffffffffff000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000009dffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffff00000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000c0ffffffffffffffffffffffffffffffffffffff000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff0000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000ffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff6300000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000ffffff00000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffff000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000ffffffffffffffffffffffffffffffffffffffff0000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000009dffffffffffffffffffffffffffffffff00 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000ffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000ebffffffffffffffffffffffffffffffffff -ffff000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000ffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffff300000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000b3ffffffff0000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000006effffffffffff -ffffffffffffffffffff00000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff -fffffffff3000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000ffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000ebffffffffffff -ffffffffffffffffffffffffff00000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffff000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffff040000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000ffffff -ffffff0000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000d7ffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000ffffffffffffffffff -ffffffffffffffffffffff000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000009dffffffffffffffffffffffffffffffff0000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000004ffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff2f00000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffff000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000f3ffffffffffffffffffffffffffffffffffffff0000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000ffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffff00000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000ffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffdc0000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000f7ffffffffffffb3000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff0000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000ffffffffffffffffffffffffffffffffffffffff00000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000083ffffffffffffffffffffffffffffffff000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000f7ffffffffffffffffffffffffffffffffffffff -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffd20000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000ffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffba00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000efffffffffffffffff0000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000008cffffffffffffffff -ffffffffffffffff000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffff000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000ffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000fbffffffffffffffff -ffffffffffffffffffffff000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffdc0000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000efffffffffffffffffffff -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000009dffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000ffffffffffffffffffffff -ffffffffffffffffff0000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000c0ffffffffffffffffffffffffffffffff00000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000ffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff9d00000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff0000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000ffffffffffffffffffffffffffffffffffffffff00000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000ffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffff12000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffdc00000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000003dffff -ffffffffffffffffffffff000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffff00000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000c6ffffffffffffffffffffffffffffffff0000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000baffffffffff -ffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000ffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000ffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000ffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffba0000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000c6ffffffffffffffffffffffffffff9d00000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000ffffffffffffffffffffffffffffffffffffffff00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000d7ffffffffffffffffffff -ffffffffffff0000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000ffffffffffffffffffffff -ffffffffffffffffff0000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffff950000000000000000000000000000000000000000000000 -0000000000000000000000000063f3ffffffffffffffffffffffffffffffffff000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000008cffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000ffffffffffffffffffffffffff -ffffffffffffff00000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -dcffffffffffffffffffffffffffffffff000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000ffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffef00000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffff00000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffff000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffff6e0000000000000000 -00000000000000000000000000000000000000003debffffffffffffffffffffffffff -ffffffffffffffff000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffff000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000ffff -ffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000e6ffffffffffffffffffffffffffffffff00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000095ffffffffffffffff -ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000ffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000ffffffffffffffffffffffffffffffffffffffff00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000ffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffba63000000000000000000000000000000002fa5ebffffffffffffff -ffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000efffffffffffffffffffffffff -ffffffff00000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000ffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000ffffffffffffffffffffffffff -ffffffffffffff00000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -04ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000ff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff570000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000ffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000ffffffffffffffffffffffffffffff -ffffffffff000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000ffff -ffffffffffffffffffffffffffffff0000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffd200000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffff000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000ffff -ffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000057ffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff0000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffff000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000f3ffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffff0000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000ffffffff -ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffff3d0000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000a5ffffffffffffffffffffff -ffffffffffffffffffffffffffffffffff000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000020ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000006effffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffff000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000ffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffff20fbffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffff000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000ffffffffffffffffffffffffffffffffffffffff0000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000ffffffffffffffffffffffffffffff -ffffd20000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000ff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000b3ffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000ffffffffffffffffffffffffffffff -ffffffffff000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000009dff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffc60000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffeb0000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000ffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000ffffffffffffffffffffffffffffffffff -ffffff0000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000ffffffff -ffffffffffffffffffffffffffff000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffff00000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffff0000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000ffffffff -ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000009dffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffff00000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffff0000009dffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffff000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000d7ffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ff00000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000ffffffffffff -ffffffffffffffffffffffffffff000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000ffffffffffffffffffffffffffffffffffff00000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000006effffffffffffffffffffffffffff -ffffffffffffffffffffffffffff6e0000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffff000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000ffffffffffffffffffffffffffffffffffffffff0000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000095ffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff0000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000ffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffb300000000ffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffff00000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff0000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000ffffffffffffffffffffffffffffffffffffffff00000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000ffffffffffffffffffffffffffffffffff -ff00000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000ffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000ffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000ffffffffffffffffffffffffffffffffff -ffffff0000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000008cffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000ffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffff000000000012ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000ffffffffffffffffffffffffffffffffffffff -ff00000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000ffffffffffff -ffffffffffffffffffffffff0000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ff00000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000ffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ff00000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000ffffffffffff -ffffffffffffffffffffffffffff000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000012ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffff000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000a5ffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffc0000000000000baffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000012ffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000ffffffffffffffff -ffffffffffffffffffffffff0000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000ffffffffffffffffffffffffffffffffffff040000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000ffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffba0000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff0000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000ffffffffffffffffffffffffffffffffffffffff00000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000ffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffff00000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000ffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffff00000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000dc -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffff00000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000ffffffffffffffffffffffffffffffffffffba -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000ccffffffffffff -ffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000083ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000ffffffffffffffffffffffffffffffffffffff -ff00000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000008cffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff0400000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffac000000000000000057ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000ffffffffffffffff -ffffffffffffffffffffff000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000ffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000ffffffffffffffff -ffffffffffffffffffffffff0000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000ccffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -6e00000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffff00000000000000000000e6ffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000ffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000ffffffffffffffffffff -ffffffffffffffffffff00000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000ffffffffffffffffffffffffffffffffffffff00000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff0000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffff00000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000d2ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffef0000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000ffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffac00000000000000000000 -00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffff00000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000ffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffff000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00ffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000ffffffffffffffffffffffffffffffffffffff0000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000003dffffffffffffffffff -ffffffffffffffffffffffffffffffffffffff4a000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000d7ffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000ffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ff000000000000000000000000baffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000ffffffffffffffffffff -ffffffffffffffffffcc00000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000008cffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000ffffffffffffffffffff -ffffffffffffffffffff00000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000ccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000095ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff2f00000000000000000000000000ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000ffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000ffffffffffffffffffffffff -ffffffffffffffff000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00ffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff0000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffff000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00ffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000d2ffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffff00000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000 -0000003dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffb3000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000dcffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff0000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000ff -ffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffd2000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000ccffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -6e000000000000000000000000000000ebffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff0000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffff000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000ffffffffffffffffffffffffffffffffffffffff0000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000ffffffffffffffffffffffff -ffffffffffffffff120000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000008cff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000ffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000ffffffffffffffffffffffff -ffffffffffffffff000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00c6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff200000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff0000000000000000000000000000000000ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000ffffffffffffffffffffffffffff -ffffffffffff0000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000ff -ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffff0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -d2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff0000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000ff -ffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000f3ffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffcc0000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000002fffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffff830000000000000000000000 -0000000000008cffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffff000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000009dffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffff00000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000ffffff -ffffffffffffffffffffffffffffffffff000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000ffffffffffffffffffffffffffffffffffffffffff00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffff000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffff000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000ffffffffffffffffffffffffffffffffffffffff0000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000f3ffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000ffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -00000000000000000000000000000000000000ffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff8300000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff0000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000ffffffffffffffffffffffffffffffffffffffff00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000ffffffffffffffffffffffffffff -ffffffffffffff04000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000079ffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff6e00000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000ffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000ffffffffffffffffffffffffffff -ffffffffffff0000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000ef -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffff2f0000000000000000000000000000000000000000ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000ffffffffffffffffffffffffffffffff -ffffffff00000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000ffffff -ffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000c0ffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffff00000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000ffffff -ffffffffffffffffffffffffffffffffff000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffff00000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000ccffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 -000000000000000000c0ffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffff000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000ffffffffff -ffffffffffffffffffffffffffffff0000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000ffffffffffffffffffffffffffffffffffffffffffff0000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffff000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff0000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000ffffffffffffffffffffffffffffffffffffffff00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000ffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffdc00000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000ffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83 -00000000000000000000000000000000000000000000ffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffff00000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000ffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffff00000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000ffffffffffffffffffffffffffffffff -ffffffffffffb300000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000ffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffd200000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000ffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000ffffffffffffffffffffffffffffffff -ffffffff00000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000fbffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffff00000000000000000000000000000000000000000000006e -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffff040000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000ffffffffffffffffffffffffffffffffffff -ffff000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000ffffffffff -ffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000e1ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000ebffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffff000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000ffffffffff -ffffffffffffffffffffffffffffff0000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff0000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000e6ffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffff57000000000000000000000000 -000000000000000000000000e6ffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000ffffffffffffff -ffffffffffffffffffffffffff00000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000ffffffffffffffffffffffffffffffffffffffffffffff000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffff000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffff00000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000ffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffc00000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 -00000000000000000000000000000000000000000000000000ffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffff00000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000e1ffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffff000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000ffffffffffffffffffffffffffffffffffffffff0000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000ffffffffffffffffffffffffffffffffffff -ffffffffffff0000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000ffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000057ffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000ffffffffffffffffffffffffffffffffffff -ffff000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000ffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000ff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffff20000000000000000000000000000000000000000000000000 -0000acffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffcc0000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000ffffffffffffff -ffffffffffffffffffffffffffffffffff000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -6effffffffffffffffffffffffffffffffffffffffffffffffffffffff2f0000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000ffffffffffffff -ffffffffffffffffffffffffff00000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffff000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000057ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000 -000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000ffffffffffffffffff -ffffffffffffffffffffff000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000ffffffffffffffffffffffffffffffffffffffffffffffffe1000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffff000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffff000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000ffffffffffffffffffffffffffffffffffffffff0000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffc0000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000ffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2f00 -00000000000000000000000000000000000000000000000000000000ffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffff00000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000006effffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff0000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000ffffffffffffffffffffffffffffffffffffffff00000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff -ffffffffff000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000ffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000fffffffffffffffffffffffffffffffffffffff7 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000ffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000d7ff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffff00000000000000000000000000000000000000000000000000 -0000000000e1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff0000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000ffffffffffffffffff -ffffffffffffffffffffffffffffffff79000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000ffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffc00000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000ffffffffffffffffff -ffffffffffffffffffffff000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffff00000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff3d00000000000000000000000000 -000000000000000000000000000000000000ffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffff20000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000ffffffffffffffffffffff -ffffffffffffffffff0000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000ffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000f3ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffff000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000ffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff0000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000ffffffffffffffffffffffffffffffffffffffff00000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000c6ffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 -0000000000000000000000000000000000000000000000000000000000004affffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ff00000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000004ffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffef00000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffff -ffffffff57000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000ffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffff00000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000ffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff2000000000000000000000000000000000000000000000000000 -0000000000000000ebffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff0000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffe60000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000ffffffffffffffffffffffffffffffffffffffff00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000ffffffffffffffffffffff -ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000ffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000ffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000ffffffffffffffffffffff -ffffffffffffffffff0000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffff300000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000fbffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000 -000000000000000000000000000000000000000000ffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffff4a000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000ffffffffffffffffffffffffff -ffffffffffffff00000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffd200000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000095ffffffffffffffffffffffffffffffffffffffffffffffffffffffff2f -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000ffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffff00000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff0000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000ffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 -000000000000000000000000000000000000000000000000000000000000000000d2ff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffe11200000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000ffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffff04000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000ffff -ffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffff00000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000ffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffff00000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000ffffffffffffffffffffffffffffffffffffffff00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000ffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffd70000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000fbffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff0000000000000000000000000000000000000000000000000000 -0000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff5700000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000e1ffff -ffffffffffffffffffffffffffffffffff120000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000ffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000ffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000008cffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000ffffffffffffffffffffffffff -ffffffffffffff00000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffff0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffff200000000000000000000000000000 -000000000000000000000000000000000000000000000063ffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffa5000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000ffffffffffffffffffffffffffffffffffffffffff790000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000ffffffffffffffffffffffffffffff -fffffffff3000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000ffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff9d00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffff000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000ffff -fffffffffffffffffffffffffffffffffffb0000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffeb0000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000063ffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffb00000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000ffffffffffffffffffffffffffffffff -ffffffffffffff00000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000ffffffff -ffffffffffffffffffffffffffffff6e00000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffff00000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000e6ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffff00000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffffffffef000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000ffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffff000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffb200000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000a5ffffffffff -ffffffffffffffffffffffffffffffffffffffef000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000ffffffffffffffffffffffffffffffffffffff000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000ffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffff700000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000ffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000095ffffffffffffffffffffffffffffffff20000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000ffffffffffffffffffffffffffffff -ffffffffd2000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000ffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffff0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000c6ffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2f00 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffba0000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000c6ffffffffffffffffffffffffffffffff -ffff000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000063ffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff7900000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000ffffffffffffffffffffffffff -ffffffffff000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000ffffffff -ffffffffffffffffffffffffffffff4a00000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffff000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000ebffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffff9d0000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000ffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffff3d000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000ffffffffff -ffffffffffffffffffffffffff00000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffff00000000000000000000000000000000000000000000000000000000000000 -0000000000000000000057ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffff79000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000ffffff -ffffffffffffffffffffffffffffffffffe10000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000ffffffffffffffffffffffffffffffffffffff000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffff000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000079ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffdc00000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000063ffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000095ffffffffffffffffffffffffffffffff000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000 -000000000000000000000000000000000000000000ffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff0000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000a5ffffffffffffffffffffffffffffffffffffffffffff8c00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000ffffffffffffffffffffffffffffffffff -ffff000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000ffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffef0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffff0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -e600000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000dcffffffffffffffffffffffffffff9500 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000ffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffe100000000000000 -0000000000000000000000000000000000000000000000000000000000000000ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000ffffffffffffffffffffffffffffffffff -ffffffffffffffff000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000ffffffffffff -ffffffffffffffffffffffffff00000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffff000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000c6ffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000002fffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff3d000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffff4a000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000009dffffffff -ffffffffffffffff120000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffff00000000000000000000000000000000000000000000000000000000000000 -0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffa5000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000ffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000ffffffffffffffffffffffffffffffffffe60000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000ffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffff00000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000efffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9d0000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000009dffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000e6fffffffffffffff7630000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000020ffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000 -000000000000000000000000000000000000dcffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff0000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc00 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000ffffffffffffffffffffffffffffffff00 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000d7ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffff0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000ffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffff000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000ff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffff00000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000f3ff200000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000ffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000 -0000000000000000000000000000000000000000000000000000000000ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000acffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffff8c0000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000ffffffffffff -ffffffffffffffffff8c00000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffff570000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000ffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000004affffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffff4a00000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffac000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000ffffffff0000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffff000000000000000000000000000000000000000000000000000000000000 -0000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffb00 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000ffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff0400000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000ffffffffffffffffffffffffff3d000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000008cffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffff00000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000ffff -ffffffffff000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffe6000000000000000000000000000000000000 -00000000000000000000000000000000ffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff2f00000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000ff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffff000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000020ffffffffffffffffff4a000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffff0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000d2ffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000ffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffe100000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000ffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffff00000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffc60000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000d2ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c000000000000 -000000000000000000000000000000000000000000000000000000ffffffffffffffff -ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffac0000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000dc9d00000000000000002f12 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -004affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff0000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000ffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffff7000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffcc000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000004affffffffffffffffffff6e00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000ffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffff830000000000000000000000000000000000000000000000000000000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000ffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000ff -ffff3d0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffd70000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000ffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff0000000000000000000000000000000000000000000000000000000000 -000000000000000000000000c6ffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffff3d000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff630000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000ffffffffff -ffffffffffffffff200000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffa50000000000000000000000000000000000 -0000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffc000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffff000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000efffffffffff1200000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffff7900000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000 -00000000000000000000000000000000000000000000a5ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffba0000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000ffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffff00000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000ffffffffffffffffffffffffffffff0000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000ffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff790000000000 -00000000000000000000000000000000000000000000000000ffffffffffffffffffff -ffffffffffffffffffffffffffffffffff000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffd70000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000ffffffffffffffff00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000004ff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff0000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000ffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 -0000000000000000000000000000000000000000000000000000000000000000a5ffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd200000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000baffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffb000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000fbffffffffffffffffffffffffffffffffd700 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000ffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff7900000000000000000000000000000000000000000000000000000000 -00ffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9500000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000ffffffff -ffffffffffff0000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000ff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff0000000000000000000000000000000000000000000000000000000000 -000000000000004affffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff0000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -9d00000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000ffffffffffffffff -ffffffffffffffffffffffcc0000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff8300000000000000000000000000000000 -000000000000000000000000efffffffffffffffffffffffffffffffffffffffffffff -ffffffff00000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000ffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffff000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000ffffffffffffffffffffffffe100000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffff00000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffff000000000000000000000000000000000000 -00000000000000000000000000000000002fffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffff83000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffff00000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000f3ffffffffffffffffffffffffffffffffffffffffff6e00000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000ffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb300000000 -000000000000000000000000000000000000000000000000ffffffffffffffffffffff -ffffffffffffffffffffffffffff000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000ff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffe60000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000ffffffffffffffffffffffffffffc0000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000b3ffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 -00000000000000000000000000000000000000000000000000000020ffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -e100000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000e1ff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffcc000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffff -ffff000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000f7ffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffa5000000000000000000000000000000000000000000000000000000 -ffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000002fffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000dcffffffffffffff -ffffffffffffffffff9d00000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffff000000000000000000000000000000000000000000000000000000000000 -000057ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffff000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000004ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffff7900000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000ffffffffffffffffffffffff -ffffffffffffffffffffffffffffe60000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000 -000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffff -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000002fffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffff040000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000ffffffffffffffffffffffffffffffffffffff00000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffff000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000079ffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffff000000000000000000000000000000000000 -000000000000000000000000a5ffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff4a00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000ffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000ffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffff300000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 -0000000000000000000000000000000000000000000000ffffffffffffffffffffffff -ffffffffffffffffffffba000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000dcffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000e1ffffffffffffffffffffffffffffffffffffffffa5 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000ffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffff200000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000ffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000 -00000000000000000000000000000000000000000000efffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffff8c0000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffac0000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000ccffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffff9d00000000000000000000000000000000000000000000000000 -ffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffe6000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000ffffffffffffffffffffff -ffffffffffffffffffffffffe100000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000020ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6e0000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffff000000000000000000000000000000000000000000000000000000efffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffd700000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000004ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff9500000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000ffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff0400000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000ffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffff300000000000000000000000000 -000000000000000000000000ffffffffffffffffffffffffffffffffffffff00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000083ffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffff9d0000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000ff -ffffffffffffffffffffffffffffffffffffffffffffffffff8c000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffc000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000e6ffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000 -00000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff120000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000079ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffff12000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 -000000000000000000000000000000000000000000000000ffffffffffffffffffffff -ffffffffffd20000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000d7ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff2f00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000083ffffffffffffffffffffffffffffffffffffffffffffffffff -ffffff6e00000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000d7ffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffeb00000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000020ffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000 -0000000000000000000000000000000000ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffff3d000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000d2ffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffeb0000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000ffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffba0000000000000000000000000000000000000000000000 -002fffffffffffffffffffffffffff0000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000ffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffff000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000ff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffff0000000000000000000000000000000000000000000000ffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffcc0000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000ffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffdc00000000000000000000000000000000000000000000000000 -0000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffba00000000000000000000000000 -00000000000000000000000000000000000000000000000000000000f3ffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff1200000000000000000000 -000000000000000000000000000000ffffffffffffffffff0000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000e1ffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffe60000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000ffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffff000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000003dffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffeb00000000000000000000000000000000000000 -009dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffff120000000000000000000000000000000000000000000000000000000000000000 -00000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffff2f000000000000000000000000 -000000000000000000000000000000000000000000000000ffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffff000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000baffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3d00000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000baffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffd700000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000dcffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffff630000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000e6ffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000 -0000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffdc00000000000000000000000000000000000000 -00000000000000000000000000000000dcffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -00000000000000000000000000000000000000000000000000000000000000000000ff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffff0000000000000000000000000000000000000000000000 -00000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffff000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000ffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffff000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000008cffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffff9d000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000063ffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff30000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffb0000000000000000000000000000000000ffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe63d00000000 -00000000000000000000000000000000000000000000000063ffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffff63000000000000000000000000000000000000000000 -0000000000000000d2ffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffff700000000000000000000 -0000000000000000000000000000000000000000000000ffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffff1200000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000ff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffa50000000000000000000000000000 -000000000000000000000000000000000000000000000000008cffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff570000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000008cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffff00000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000020ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffff000000000000000000000000000000acffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffb6e00000000000000000000000000000000000000000083ffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffdc0000000000000000 -0000000000000000000000000000000000a5ffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffff2000000000000000000000000000000000000000000000000000000000a5ffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffff000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9500 -0000000000000000000000000000000000000000000000000000000000000000000000 -a5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffff00000000000000000000000000000000000000000000000000 -0000000000000000000000000000acffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffff6e000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000002fffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffb30000000000000000 -0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffe18c3d000000000000 -000457baffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffff78c00000000000000000000000000000000000020ffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffff790000000000000000000000000000000000 -000000000000ccffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffff000000000000000000000000000000000000000000000000 -00000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000 -000000000000000000000000000000000000000000000000e1ffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000003dffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffff8300000000000000000000006effffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffc62f00000000000000000004a5ff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0000000 -00000000000000000000000000006effffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff20000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000004affffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffff7900000000000000000000 -0000000000000000000000000000000000000012ffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -cc000000000000000000000000000000000000000000000000000000000000000000ff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffc000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000ffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffef000000000000000000000000ffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffb6e00000000000020638cebffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffc600000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000e6 -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffff70000000000000000000000000000000000000000000000000000f7ffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffff630000000000000000000000000000000000000000 -0000000000000000d2ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00008cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffff79000000000000000000000000c6ff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffff6e0000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000baffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffff790000000000000000000000000000000000 -00004affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffb57000000000000 -0000000000000000000000000000000000b3ffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffb0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000dcffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6000000000000 -0000000000000020ffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffff790000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000009dffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc04a00 -0000000000000000004ad2ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffeb57000000000000000000000000000000004affffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffb300000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000008cffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -dc00000000000000000000000000000000ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffff3200000000000000000000000000000000000 -000000000000000000000000000000000000000000004ae1ffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffba4a1200000000005795d7ff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000b3ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffff9d0000000000000000000000000000000000b3ffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0120000 -00000000000000000000000000000000000000000000000000000000008cdcffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff0000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000009dffffffffffffffff -ffffffffffffffffffffffffffeb200000000000000000000000000000000000000000 -4affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffb3200000000000000000000000000000000000001257 -a5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffeb00000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000002fa54a0412000000000000000000000000000000000000 -0000000000000000006effffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000057ffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffe600000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000083ffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffe1000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00d7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ff4a000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000e6ffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffa50000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000003dffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffe100000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000dcffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffff9500000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -ccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffff950000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000ccffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff74a -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000004d2ffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffffffffff3a5000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000063ffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0200000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000a5ffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffff76e000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -004accffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffefa5040000000000 -0000000000000000000000000000000000000000000000000000000000000000000000 -0000000000002095f3ffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffe6d2a56e0000000000000000000000000000000000000000 -000000000000004a799dc6e6fbffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -baffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffff -grestore - -cleartomark -countdictstack exch sub { end } repeat -restore grestore -% -% End Imported PIC File: /home/valette/ev-perso-doc/canon.eps -%%EndDocument -% -% Polyline -n 450 1530 m 8685 1530 l 8685 1575 l gs col0 s gr -% Polyline -n 450 2025 m 8685 2025 l 8685 2070 l gs col0 s gr -% Polyline -n 2970 1530 m 2970 2025 l gs col0 s gr -/Times-Bold ff 210.00 scf sf -585 1845 m -gs 1 -1 sc (Project : ) col0 sh gr -/Times-Bold ff 210.00 scf sf -3060 1845 m -gs 1 -1 sc (Document title : ) col0 sh gr -% Polyline -n 450 10305 m 8685 10305 l 8685 10350 l gs col0 s gr -% Polyline -n 450 45 m 8685 45 l 8685 11025 l 450 11025 l cp gs col0 s gr -/Times-Roman ff 210.00 scf sf -4500 4275 m -gs 1 -1 sc (Tools project Leader) col0 sh gr -/Times-Roman ff 210.00 scf sf -4770 4635 m -gs 1 -1 sc (TA) col0 sh gr -/Times-Roman ff 210.00 scf sf -1350 4275 m -gs 1 -1 sc (E. Valette) col0 sh gr -/Times-Roman ff 210.00 scf sf -4725 6210 m -gs 1 -1 sc (TA) col0 sh gr -/Times-Roman ff 210.00 scf sf -1620 6210 m -gs 1 -1 sc (CRF) col0 sh gr -/Times-Roman ff 210.00 scf sf -1305 5850 m -gs 1 -1 sc (E. Valette) col0 sh gr -/Times-Roman ff 210.00 scf sf -4410 5850 m -gs 1 -1 sc (Tools project Leader) col0 sh gr -/Times-Roman ff 210.00 scf sf -1620 4635 m -gs 1 -1 sc (CRF) col0 sh gr -/Times-Roman ff 210.00 scf sf -495 7965 m -gs 1 -1 sc (H. Dias) col0 sh gr -/Times-Roman ff 210.00 scf sf -495 8280 m -gs 1 -1 sc (E. Valette) col0 sh gr -/Times-Roman ff 210.00 scf sf -495 8595 m -gs 1 -1 sc (E. Raguet) col0 sh gr -/Times-Roman ff 210.00 scf sf -3240 7965 m -gs 1 -1 sc (TA) col0 sh gr -/Times-Roman ff 210.00 scf sf -3240 8595 m -gs 1 -1 sc (TA) col0 sh gr -/Times-Roman ff 210.00 scf sf -6030 8595 m -gs 1 -1 sc (Author) col0 sh gr -/Times-Roman ff 210.00 scf sf -3240 8280 m -gs 1 -1 sc (TA) col0 sh gr -/Times-Roman ff 210.00 scf sf -4590 8280 m -gs 1 -1 sc (Project Leader) col0 sh gr -/Times-Roman ff 210.00 scf sf -4590 7965 m -gs 1 -1 sc (Manager) col0 sh gr -/Times-Roman ff 210.00 scf sf -4590 8595 m -gs 1 -1 sc (Engineer) col0 sh gr -/Times-Roman ff 210.00 scf sf -6030 8280 m -gs 1 -1 sc (Approval) col0 sh gr -/Times-Roman ff 210.00 scf sf -7650 7965 m -gs 1 -1 sc (1 \(Paper\)) col0 sh gr -/Times-Roman ff 210.00 scf sf -7650 8280 m -gs 1 -1 sc (2 \(Paper\)) col0 sh gr -/Times-Roman ff 210.00 scf sf -7650 8595 m -gs 1 -1 sc (3 \(Paper\)) col0 sh gr -/Times-Roman ff 210.00 scf sf -3690 3375 m -gs 1 -1 sc (98.TA.0373.M.ER) col0 sh gr -/Times-Roman ff 210.00 scf sf -6030 7965 m -gs 1 -1 sc (Info) col0 sh gr -/Times-Roman ff 270.00 scf sf -1530 1845 m -gs 1 -1 sc (TOOLS ) col0 sh gr -/Times-Roman ff 210.00 scf sf -1800 2340 m -gs 1 -1 sc (29/09/98) col0 sh gr -/Times-Roman ff 210.00 scf sf -1665 2835 m -gs 1 -1 sc (Emmanuel RAGUET, Eric VALETTE CRF TA Dept. ) col0 sh gr -/Times-Roman ff 210.00 scf sf -7470 2340 m -gs 1 -1 sc (2.0) col0 sh gr -/Times-Roman ff 210.00 scf sf -4905 2340 m -gs 1 -1 sc (02/11/98) col0 sh gr -/Times-Roman ff 210.00 scf sf -4725 1845 m -gs 1 -1 sc (RTEMS Remote Debugger Server Specs) col0 sh gr -$F2psEnd -rs diff --git a/doc/rgdb_specs/garde.pdf b/doc/rgdb_specs/garde.pdf deleted file mode 100644 index 62df59d4e5..0000000000 Binary files a/doc/rgdb_specs/garde.pdf and /dev/null differ diff --git a/doc/rgdb_specs/layers.pdf b/doc/rgdb_specs/layers.pdf deleted file mode 100644 index 84a3cba9d8..0000000000 Binary files a/doc/rgdb_specs/layers.pdf and /dev/null differ diff --git a/doc/rgdb_specs/process.pdf b/doc/rgdb_specs/process.pdf deleted file mode 100644 index 7cba5dc3f9..0000000000 Binary files a/doc/rgdb_specs/process.pdf and /dev/null differ diff --git a/doc/rgdb_specs/seqbreak.pdf b/doc/rgdb_specs/seqbreak.pdf deleted file mode 100644 index 80e99eab5d..0000000000 Binary files a/doc/rgdb_specs/seqbreak.pdf and /dev/null differ diff --git a/doc/rgdb_specs/seqdetach.pdf b/doc/rgdb_specs/seqdetach.pdf deleted file mode 100644 index ed108a1913..0000000000 Binary files a/doc/rgdb_specs/seqdetach.pdf and /dev/null differ diff --git a/doc/rgdb_specs/seqinit.pdf b/doc/rgdb_specs/seqinit.pdf deleted file mode 100644 index 03604fce0b..0000000000 Binary files a/doc/rgdb_specs/seqinit.pdf and /dev/null differ diff --git a/doc/rtems_footer.html b/doc/rtems_footer.html deleted file mode 100644 index 07179683c9..0000000000 --- a/doc/rtems_footer.html +++ /dev/null @@ -1 +0,0 @@ -

    Copyright © 1988-2000 OAR Corporation diff --git a/doc/rtems_footer.html.in b/doc/rtems_footer.html.in new file mode 100644 index 0000000000..07179683c9 --- /dev/null +++ b/doc/rtems_footer.html.in @@ -0,0 +1 @@ +

    Copyright © 1988-2000 OAR Corporation diff --git a/doc/rtems_gdb/Makefile b/doc/rtems_gdb/Makefile deleted file mode 100644 index db911b4d86..0000000000 --- a/doc/rtems_gdb/Makefile +++ /dev/null @@ -1,94 +0,0 @@ -# -# COPYRIGHT (c) 1988-1999. -# On-Line Applications Research Corporation (OAR). -# All rights reserved. -# -# $Id$ -# - -PROJECT=rtems_gdb - -include ../Make.config - -all: html info ps pdf - -dirs: - $(make-dirs) - -COMMON_FILES=../common/cpright.texi ../common/setup.texi - -GENERATED_FILES= \ - intro.texi swarch.texi started.texi commands.texi trouble.texi example.texi - -FILES=$(PROJECT).texi $(GENERATED_FILES) - -INFOFILES=$(wildcard $(PROJECT) $(PROJECT)-*) - -info: dirs $(PROJECT) - #cp $(wildcard $(PROJECT) $(PROJECT)-*) $(INFO_INSTALL) - # cp $(PROJECT) $(INFO_INSTALL) - -$(PROJECT): $(FILES) - $(MAKEINFO) $(PROJECT).texi - -dvi: dirs $(PROJECT).dvi -ps: dirs $(PROJECT).ps -pdf: dirs $(PROJECT).pdf - -$(PROJECT).pdf: $(FILES) - $(TEXI2PDF) $(PROJECT).texi - cp $(PROJECT).pdf $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).ps: $(PROJECT).dvi - dvips -o $(PROJECT).ps $(PROJECT).dvi - cp $(PROJECT).ps $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).dvi: $(FILES) - $(TEXI2DVI) $(PROJECT).texi - cp $(PROJECT).dvi $(WWW_INSTALL)/$(PROJECT) - -html: dirs $(FILES) - -mkdir -p $(WWW_INSTALL)/$(PROJECT) - $(TEXI2WWW) $(TEXI2WWW_ARGS) -dir $(WWW_INSTALL)/$(PROJECT) \ - $(PROJECT).texi - -clean: - rm -f *.o $(PROG) *.txt core $(PROJECT).pdf - rm -f *.dvi *.ps *.log *.aux *.cp *.fn *.ky *.pg *.toc *.tp *.vr $(BASE) - rm -f $(PROJECT) $(PROJECT)-* $(GENERATED_FILES) - rm -f *.fixed _* network.t - -# -# Process Automatically Generated Files -# - -intro.texi: intro.t Makefile - $(BMENU) -p "Top" \ - -u "Top" \ - -n "Software Architecture" ${*}.t - -swarch.texi: swarch.t Makefile - $(BMENU) -p "Introduction" \ - -u "Top" \ - -n "Getting Started" ${*}.t - -started.texi: started.t Makefile - $(BMENU) -p "Software Architecture" \ - -u "Top" \ - -n "Commands" ${*}.t - -commands.texi: commands.t Makefile - $(BMENU) -p "Getting Started Attaching To The System" \ - -u "Top" \ - -n "Troubleshooting" ${*}.t - -trouble.texi: trouble.t Makefile - $(BMENU) -p "Commands Thread control" \ - -u "Top" \ - -n "Debug Session Example" ${*}.t - -example.texi: example.t Makefile - $(BMENU) -p "Troubleshooting Debug server not present" \ - -u "Top" \ - -n "" ${*}.t - diff --git a/doc/rtems_gdb/Makefile.am b/doc/rtems_gdb/Makefile.am new file mode 100644 index 0000000000..78c7c9feaf --- /dev/null +++ b/doc/rtems_gdb/Makefile.am @@ -0,0 +1,59 @@ +# +# COPYRIGHT (c) 1988-1999. +# On-Line Applications Research Corporation (OAR). +# All rights reserved. +# +# $Id$ +# + +AUTOMAKE_OPTIONS = foreign + +PROJECT=rtems_gdb + +include $(top_srcdir)/project.am + +COMMON_FILES=$(top_srcdir)/common/cpright.texi $(top_builddir)/common/setup.texi + +GENERATED_FILES= \ + intro.texi swarch.texi started.texi commands.texi trouble.texi example.texi + +FILES= + +info_TEXINFOS = rtems_gdb.texi +rtems_gdb_TEXINFOS = $(FILES) $(COMMON_FILES) $(GENERATED_FILES) + +# +# Process Automatically Generated Files +# + +intro.texi: intro.t + $(BMENU) -p "Top" \ + -u "Top" \ + -n "Software Architecture" $< + +swarch.texi: swarch.t + $(BMENU) -p "Introduction" \ + -u "Top" \ + -n "Getting Started" $< + +started.texi: started.t + $(BMENU) -p "Software Architecture" \ + -u "Top" \ + -n "Commands" $< + +commands.texi: commands.t + $(BMENU) -p "Getting Started Attaching To The System" \ + -u "Top" \ + -n "Troubleshooting" $< + +trouble.texi: trouble.t + $(BMENU) -p "Commands Thread control" \ + -u "Top" \ + -n "Debug Session Example" $< + +example.texi: example.t + $(BMENU) -p "Troubleshooting Debug server not present" \ + -u "Top" \ + -n "" $< + +EXTRA_DIST = *.t diff --git a/doc/rtems_header.html b/doc/rtems_header.html deleted file mode 100644 index f201073ba2..0000000000 --- a/doc/rtems_header.html +++ /dev/null @@ -1,5 +0,0 @@ - - - OAR -

    RTEMS RTEMS_VERSION On-Line Library

    -
    diff --git a/doc/rtems_header.html.in b/doc/rtems_header.html.in new file mode 100644 index 0000000000..4aadc8a996 --- /dev/null +++ b/doc/rtems_header.html.in @@ -0,0 +1,5 @@ + + + OAR +

    RTEMS @RTEMS_VERSION@ On-Line Library

    +
    diff --git a/doc/rtems_support.html b/doc/rtems_support.html deleted file mode 100644 index 3320bf3454..0000000000 --- a/doc/rtems_support.html +++ /dev/null @@ -1,59 +0,0 @@ - -RTEMS RTEMS_VERSION On-Line Library - - - OAR -

    RTEMS RTEMS_VERSION On-Line Library

    -
    - - -
  • - RTEMS FAQ -
  • - RTEMS Applications C User's Guide -
  • - Getting Started with RTEMS for C/C++ Users -
  • - Getting Started with GNAT/RTEMS -
  • - RTEMS Development Environment Guide -
  • - RTEMS POSIX API User's Guide -
  • - RTEMS Network Supplement -
  • - RTEMS/GDB User's Guide -
  • - RTEMS Remote Debugger Server Specifications -
  • - RTEMS BSP and Device Driver Development Guide - -
  • CPU Supplements - - -
  • - RTEMS AMD 29K Applications Supplement -
  • - RTEMS Hitachi SH Applications Supplement -
  • - RTEMS Intel i386 Applications Supplement -
  • - RTEMS Intel i960 Applications Supplement -
  • - RTEMS MIPS64 ORION Applications Supplement -
  • - RTEMS Motorola MC68xxx Applications Supplement -
  • - RTEMS PowerPC Applications Supplement -
  • - RTEMS SPARC Applications Supplement -
  • - RTEMS Hewlett Packard PA-RISC Applications Supplement -
  • RTEMS UNIX Port Applications Supplement -
  • -
  • - -
    -
    -Copyright © 1988-2000 OAR Corporation - diff --git a/doc/rtems_support.html.in b/doc/rtems_support.html.in new file mode 100644 index 0000000000..d1ef7f0c6a --- /dev/null +++ b/doc/rtems_support.html.in @@ -0,0 +1,59 @@ + +RTEMS @RTEMS_VERSION@ On-Line Library + + + OAR +

    RTEMS RTEMS_VERSION On-Line Library

    +
    + + +
  • + RTEMS FAQ +
  • + RTEMS Applications C User's Guide +
  • + Getting Started with RTEMS for C/C++ Users +
  • + Getting Started with GNAT/RTEMS +
  • + RTEMS Development Environment Guide +
  • + RTEMS POSIX API User's Guide +
  • + RTEMS Network Supplement +
  • + RTEMS/GDB User's Guide +
  • + RTEMS Remote Debugger Server Specifications +
  • + RTEMS BSP and Device Driver Development Guide + +
  • CPU Supplements + + +
  • + RTEMS AMD 29K Applications Supplement +
  • + RTEMS Hitachi SH Applications Supplement +
  • + RTEMS Intel i386 Applications Supplement +
  • + RTEMS Intel i960 Applications Supplement +
  • + RTEMS MIPS64 ORION Applications Supplement +
  • + RTEMS Motorola MC68xxx Applications Supplement +
  • + RTEMS PowerPC Applications Supplement +
  • + RTEMS SPARC Applications Supplement +
  • + RTEMS Hewlett Packard PA-RISC Applications Supplement +
  • RTEMS UNIX Port Applications Supplement +
  • +
  • + +
    +
    +Copyright © 1988-2000 OAR Corporation + diff --git a/doc/src2html/Makefile b/doc/src2html/Makefile deleted file mode 100644 index 3af68916f2..0000000000 --- a/doc/src2html/Makefile +++ /dev/null @@ -1,40 +0,0 @@ -# -# COPYRIGHT (c) 1988-1999. -# On-Line Applications Research Corporation (OAR). -# All rights reserved. -# -# $Id$ -# - -PROJECT=browseable_rtems - -include ../Make.config - -all: html info ps pdf - -dirs: - $(make-dirs) - -COMMON_FILES=../common/cpright.texi - -FILES= clock.texi cond.texi key.texi mutex.texi $(PROJECT).texi preface.texi \ - sched.texi signal.texi thread.texi $(COMMON_FILES) - -INFOFILES=$(wildcard $(PROJECT) $(PROJECT)-*) - -info: - -ps: - -pdf: - -html: dirs - -mkdir -p $(WWW_INSTALL)/$(PROJECT) - $(SRC2HTML) -d3 RTEMS.src - -RTEMS.src: - sed -e 's/WWW_INSTALL/$(WWW_INSTALL)/' \ - RTEMS.src - -clean: - rm -f RTEMS.src diff --git a/doc/src2html/Makefile.am b/doc/src2html/Makefile.am new file mode 100644 index 0000000000..8ca945fa35 --- /dev/null +++ b/doc/src2html/Makefile.am @@ -0,0 +1,37 @@ +# +# COPYRIGHT (c) 1988-1999. +# On-Line Applications Research Corporation (OAR). +# All rights reserved. +# +# $Id$ +# + +AUTOMAKE_OPTIONS = foreign + +PROJECT=browseable_rtems + +# FIXME: Yet unported +# +#if USE_EXP +# +# include $(top_srcdir)/project.am +# +# COMMON_FILES=../common/cpright.texi +# +#FILES= clock.texi cond.texi key.texi mutex.texi preface.texi \ +# sched.texi signal.texi thread.texi +# +#noinst_TEXINFOS = browseable_rtems.texi +#browsable_rtems_TEXINFOS = $(FILES) $(COMMON_FILES) +# +#html: dirs +# -mkdir -p $(WWW_INSTALL)/$(PROJECT) +# $(SRC2HTML) -d3 RTEMS.src +# +#RTEMS.src: +# sed -e 's/WWW_INSTALL/$(htmldir)/' \ +# RTEMS.src +#endif + +noinst_SCRIPTS = RTEMS.test +EXTRA_DIST = $(noinst_SCRIPTS) diff --git a/doc/started/Makefile b/doc/started/Makefile deleted file mode 100644 index fbe2f39ee3..0000000000 --- a/doc/started/Makefile +++ /dev/null @@ -1,102 +0,0 @@ -# -# COPYRIGHT (c) 1988-1999. -# On-Line Applications Research Corporation (OAR). -# All rights reserved. -# -# $Id$ -# - -PROJECT=started - -include ../Make.config - -all: html info ps pdf - -dirs: - $(make-dirs) - -COMMON_FILES=../common/cpright.texi ../common/setup.texi - -GENERATED_FILES= binaries.texi buildc.texi buildrt.texi gdb.texi intro.texi \ - nt.texi require.texi sample.texi - -FILES= $(PROJECT).texi versions.texi $(GENERATED_FILES) - -INFOFILES=$(wildcard $(PROJECT) $(PROJECT)-*) - -info: dirs $(PROJECT) - #cp $(wildcard $(PROJECT) $(PROJECT)-*) $(INFO_INSTALL) - cp $(PROJECT) $(INFO_INSTALL) - -$(PROJECT): $(FILES) - $(MAKEINFO) $(PROJECT).texi - -dvi: dirs $(PROJECT).dvi -ps: dirs $(PROJECT).ps -pdf: dirs $(PROJECT).pdf - -$(PROJECT).pdf: $(FILES) - #$(TEXI2PDF) $(PROJECT).texi - #cp $(PROJECT).pdf $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).ps: $(PROJECT).dvi - dvips -o $(PROJECT).ps $(PROJECT).dvi - cp $(PROJECT).ps $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).dvi: $(FILES) - $(TEXI2DVI) $(PROJECT).texi - cp $(PROJECT).dvi $(WWW_INSTALL)/$(PROJECT) - -intro.texi: intro.t versions.texi - $(BMENU) -c -p "Top" \ - -u "Top" \ - -n "Requirements" ${*}.t - -require.texi: require.t versions.texi - $(BMENU) -c -p "EGCS Mailing List" \ - -u "Top" \ - -n "Prebuilt Toolset Executables" ${*}.t - -binaries.texi: binaries.t versions.texi - $(BMENU) -c -p "GNU makeinfo Version Requirements" \ - -u "Top" \ - -n "Building the GNU C/C++ Cross Compiler Toolset" ${*}.t - -buildc.texi: buildc.t versions.texi - $(BMENU) -c -p "Removing RPMs" \ - -u "Top" \ - -n "Building RTEMS" ${*}.t - -buildrt.texi: buildrt.t versions.texi - $(BMENU) -c -p "Error Messages Indicating Configuration Problems" \ - -u "Top" \ - -n "Building the Sample Application" ${*}.t - -sample.texi: sample.t versions.texi - $(BMENU) -c -p "Using the RTEMS configure Script Directly" \ - -u "Top" \ - -n "Building the GNU Debugger" ${*}.t - -gdb.texi: gdb.t versions.texi - $(BMENU) -c -p "Application Executable" \ - -u "Top" \ - -n "Using MS-Windows as a Development Host" ${*}.t - -nt.texi: nt.t versions.texi - $(BMENU) -c -p "GDB for DINK32" \ - -u "Top" \ - -n "" ${*}.t - -html: dirs $(FILES) - -mkdir -p $(WWW_INSTALL)/$(PROJECT) - -cp pictures/sfile12c.jpg $(WWW_INSTALL)/$(PROJECT) - -cp pictures/bit_c.jpg $(WWW_INSTALL)/$(PROJECT) - $(TEXI2WWW) $(TEXI2WWW_ARGS) -dir $(WWW_INSTALL)/$(PROJECT) \ - $(PROJECT).texi - -clean: - rm -f *.o $(PROG) *.txt core $(PROJECT).pdf - rm -f *.dvi *.ps *.log *.aux *.cp *.fn *.ky *.pg *.toc *.tp *.vr $(BASE) - rm -f $(PROJECT) $(PROJECT)-* $(GENERATED_FILES) - rm -f *.fixed _* - diff --git a/doc/started/Makefile.am b/doc/started/Makefile.am new file mode 100644 index 0000000000..3fa305343d --- /dev/null +++ b/doc/started/Makefile.am @@ -0,0 +1,67 @@ +# +# COPYRIGHT (c) 1988-1999. +# On-Line Applications Research Corporation (OAR). +# All rights reserved. +# +# $Id$ +# + +AUTOMAKE_OPTIONS = foreign + +PROJECT=started + +SUBDIRS = pictures + +include $(top_srcdir)/project.am + +COMMON_FILES=$(top_srcdir)/common/cpright.texi $(top_builddir)/common/setup.texi + +GENERATED_FILES= binaries.texi buildc.texi buildrt.texi gdb.texi intro.texi \ + nt.texi require.texi sample.texi + +FILES= tversions.texi + +info_TEXINFOS = started.texi +started_TEXINFOS = $(FILES) $(COMMON_FILES) $(GENERATED_FILES) + +intro.texi: intro.t tversions.texi + $(BMENU) -c -p "Top" \ + -u "Top" \ + -n "Requirements" $< + +require.texi: require.t tversions.texi + $(BMENU) -c -p "EGCS Mailing List" \ + -u "Top" \ + -n "Prebuilt Toolset Executables" $< + +binaries.texi: binaries.t tversions.texi + $(BMENU) -c -p "GNU makeinfo Version Requirements" \ + -u "Top" \ + -n "Building the GNU C/C++ Cross Compiler Toolset" $< + +buildc.texi: buildc.t tversions.texi + $(BMENU) -c -p "Removing RPMs" \ + -u "Top" \ + -n "Building RTEMS" $< + +buildrt.texi: buildrt.t tversions.texi + $(BMENU) -c -p "Error Messages Indicating Configuration Problems" \ + -u "Top" \ + -n "Building the Sample Application" $< + +sample.texi: sample.t tversions.texi + $(BMENU) -c -p "Using the RTEMS configure Script Directly" \ + -u "Top" \ + -n "Building the GNU Debugger" $< + +gdb.texi: gdb.t tversions.texi + $(BMENU) -c -p "Application Executable" \ + -u "Top" \ + -n "Using MS-Windows as a Development Host" $< + +nt.texi: nt.t tversions.texi + $(BMENU) -c -p "GDB for DINK32" \ + -u "Top" \ + -n "" $< + +EXTRA_DIST = *.t diff --git a/doc/started/pictures/Makefile.am b/doc/started/pictures/Makefile.am new file mode 100644 index 0000000000..45e81830b1 --- /dev/null +++ b/doc/started/pictures/Makefile.am @@ -0,0 +1,13 @@ +## $Id$ + +AUTOMAKE_OPTIONS = foreign + +PROJECT = started + +html_projectdir = $(htmldir)/$(PROJECT) + +if USE_HTML +html_project_DATA += sfile12c.jpg bit_c.jpg +endif + +EXTRA_DIST = *.jpg *.vsd diff --git a/doc/started/started.texi b/doc/started/started.texi index b79d534752..9cfb33ee18 100644 --- a/doc/started/started.texi +++ b/doc/started/started.texi @@ -24,7 +24,7 @@ @c @c Now set all the tool version dependent information @c -@include versions.texi +@include tversions.texi @ignore @ifinfo diff --git a/doc/started/tversions.texi b/doc/started/tversions.texi new file mode 100644 index 0000000000..5b93d6a3b4 --- /dev/null +++ b/doc/started/tversions.texi @@ -0,0 +1,92 @@ +@c +@c COPYRIGHT (c) 1988-1999. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@c +@c This file contains all toolset version dependent information +@c + +@c +@c Comment out setting the "XYZ-RTEMSPATCH" variable if there is no +@c patch required. The documentation will detect this and print +@c an appropriate message in a short section. +@c + + +@c +@c GCC/EGCS Version +@c + +@set GCC-VERSION gcc 2.95.2 +@set GCC-TAR gcc-2.95.2.tar.gz +@set GCC-UNTAR gcc-2.95.2 +@set GCC-FTPSITE gcc.gnu.org +@set GCC-FTPDIR /pub/gcc/gcc-2.95.2 +@set GCC-HTTPDIR /pub/gcc/releases/index.html +@set GCC-RTEMSPATCH gcc-2.95.2-rtems-20000106.diff + +@c +@c BINUTILS Version +@c + +@c The "official" binutils +@c @set BINUTILS-VERSION binutils 2.9.1 +@c @set BINUTILS-TAR binutils-2.9.1.tar.gz +@c @set BINUTILS-UNTAR binutils-2.9.1 +@c @set BINUTILS-FTPSITE ftp.gnu.org +@c @set BINUTILS-FTPDIR /pub/gnu +@c @set BINUTILS-RTEMSPATCH binutils-2.9.1-rtems-diff-19981012.gz + +@c The "official" Linux binutils +@set BINUTILS-VERSION binutils 2.9.5.0.22 +@set BINUTILS-TAR binutils-2.9.5.0.22.tar.gz +@set BINUTILS-UNTAR binutils-2.9.5.0.22 +@set BINUTILS-FTPSITE ftp.varesearch.com +@set BINUTILS-FTPDIR /pub/support/hjl/binutils +@set BINUTILS-RTEMSPATCH binutils-2.9.5.0.22-rtems-20000114.diff + +@c When forced to use a snapshot +@c @set BINUTILS-VERSION gas 980314 +@c @set BINUTILS-TAR gas-980314.tgz +@c @set BINUTILS-UNTAR gas-980314 +@c @set BINUTILS-FTPSITE ftp.OARcorp.com +@c @set BINUTILS-FTPDIR /oarcorp/private/beta3/ada_tools +@c @set BINUTILS-RTEMSPATCH binutils-2.8.1-rtems-diff-1998xxxx.gz + +@c +@c NEWLIB Version +@c + +@set NEWLIB-VERSION newlib 1.8.2 +@set NEWLIB-TAR newlib-1.8.2.tar.gz +@set NEWLIB-UNTAR newlib-1.8.2 +@set NEWLIB-FTPSITE sourceware.cygnus.com +@set NEWLIB-FTPDIR /pub/newlib +@set NEWLIB-RTEMSPATCH newlib-1.8.2-rtems-20000104.diff + +@c +@c GDB Version +@c + +@set GDB-VERSION gdb 4.18 +@set GDB-TAR gdb-4.18.tar.gz +@set GDB-UNTAR gdb-4.18 +@set GDB-FTPSITE ftp.gnu.org +@set GDB-FTPDIR /pub/gnu/gdb +@set GDB-RTEMSPATCH gdb-4.18-rtems-20000107.diff + +@c +@c RTEMS Version +@c + +@set RTEMS-VERSION RTEMS 4.5.0-beta +@set RTEMS-TAR rtems-4.5.0-beta.tgz +@set RTEMS-UNTAR rtems-4.5.0-beta +@set RTEMS-FTPSITE ftp.OARcorp.com +@set RTEMS-FTPDIR /pub/rtems/releases/4.5.0-beta +@set BUILDTOOLS-TAR c_build_scripts-20000104.tgz + diff --git a/doc/started/versions.texi b/doc/started/versions.texi deleted file mode 100644 index 5b93d6a3b4..0000000000 --- a/doc/started/versions.texi +++ /dev/null @@ -1,92 +0,0 @@ -@c -@c COPYRIGHT (c) 1988-1999. -@c On-Line Applications Research Corporation (OAR). -@c All rights reserved. -@c -@c $Id$ -@c - -@c -@c This file contains all toolset version dependent information -@c - -@c -@c Comment out setting the "XYZ-RTEMSPATCH" variable if there is no -@c patch required. The documentation will detect this and print -@c an appropriate message in a short section. -@c - - -@c -@c GCC/EGCS Version -@c - -@set GCC-VERSION gcc 2.95.2 -@set GCC-TAR gcc-2.95.2.tar.gz -@set GCC-UNTAR gcc-2.95.2 -@set GCC-FTPSITE gcc.gnu.org -@set GCC-FTPDIR /pub/gcc/gcc-2.95.2 -@set GCC-HTTPDIR /pub/gcc/releases/index.html -@set GCC-RTEMSPATCH gcc-2.95.2-rtems-20000106.diff - -@c -@c BINUTILS Version -@c - -@c The "official" binutils -@c @set BINUTILS-VERSION binutils 2.9.1 -@c @set BINUTILS-TAR binutils-2.9.1.tar.gz -@c @set BINUTILS-UNTAR binutils-2.9.1 -@c @set BINUTILS-FTPSITE ftp.gnu.org -@c @set BINUTILS-FTPDIR /pub/gnu -@c @set BINUTILS-RTEMSPATCH binutils-2.9.1-rtems-diff-19981012.gz - -@c The "official" Linux binutils -@set BINUTILS-VERSION binutils 2.9.5.0.22 -@set BINUTILS-TAR binutils-2.9.5.0.22.tar.gz -@set BINUTILS-UNTAR binutils-2.9.5.0.22 -@set BINUTILS-FTPSITE ftp.varesearch.com -@set BINUTILS-FTPDIR /pub/support/hjl/binutils -@set BINUTILS-RTEMSPATCH binutils-2.9.5.0.22-rtems-20000114.diff - -@c When forced to use a snapshot -@c @set BINUTILS-VERSION gas 980314 -@c @set BINUTILS-TAR gas-980314.tgz -@c @set BINUTILS-UNTAR gas-980314 -@c @set BINUTILS-FTPSITE ftp.OARcorp.com -@c @set BINUTILS-FTPDIR /oarcorp/private/beta3/ada_tools -@c @set BINUTILS-RTEMSPATCH binutils-2.8.1-rtems-diff-1998xxxx.gz - -@c -@c NEWLIB Version -@c - -@set NEWLIB-VERSION newlib 1.8.2 -@set NEWLIB-TAR newlib-1.8.2.tar.gz -@set NEWLIB-UNTAR newlib-1.8.2 -@set NEWLIB-FTPSITE sourceware.cygnus.com -@set NEWLIB-FTPDIR /pub/newlib -@set NEWLIB-RTEMSPATCH newlib-1.8.2-rtems-20000104.diff - -@c -@c GDB Version -@c - -@set GDB-VERSION gdb 4.18 -@set GDB-TAR gdb-4.18.tar.gz -@set GDB-UNTAR gdb-4.18 -@set GDB-FTPSITE ftp.gnu.org -@set GDB-FTPDIR /pub/gnu/gdb -@set GDB-RTEMSPATCH gdb-4.18-rtems-20000107.diff - -@c -@c RTEMS Version -@c - -@set RTEMS-VERSION RTEMS 4.5.0-beta -@set RTEMS-TAR rtems-4.5.0-beta.tgz -@set RTEMS-UNTAR rtems-4.5.0-beta -@set RTEMS-FTPSITE ftp.OARcorp.com -@set RTEMS-FTPDIR /pub/rtems/releases/4.5.0-beta -@set BUILDTOOLS-TAR c_build_scripts-20000104.tgz - diff --git a/doc/started_ada/Makefile b/doc/started_ada/Makefile deleted file mode 100644 index 840aee0ed1..0000000000 --- a/doc/started_ada/Makefile +++ /dev/null @@ -1,92 +0,0 @@ -# -# COPYRIGHT (c) 1988-1999. -# On-Line Applications Research Corporation (OAR). -# All rights reserved. -# -# $Id$ -# - -PROJECT=started_ada - -include ../Make.config - -all: html info ps pdf - -dirs: - $(make-dirs) - -COMMON_FILES=../common/cpright.texi ../common/setup.texi - -GENERATED_FILES= buildada.texi buildrt.texi gdb.texi intro.texi \ - require.texi sample.texi - -FILES= $(PROJECT).texi versions.texi $(GENERATED_FILES) - -INFOFILES=$(wildcard $(PROJECT) $(PROJECT)-*) - -info: dirs $(PROJECT) - #cp $(wildcard $(PROJECT) $(PROJECT)-*) $(INFO_INSTALL) - cp $(PROJECT) $(INFO_INSTALL) - -$(PROJECT): $(FILES) - $(MAKEINFO) $(PROJECT).texi - -dvi: dirs $(PROJECT).dvi -ps: dirs $(PROJECT).ps -pdf: dirs $(PROJECT).pdf - -$(PROJECT).pdf: $(FILES) - #$(TEXI2PDF) $(PROJECT).texi - #cp $(PROJECT).pdf $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).ps: $(PROJECT).dvi - dvips -o $(PROJECT).ps $(PROJECT).dvi - cp $(PROJECT).ps $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).dvi: $(FILES) - $(TEXI2DVI) $(PROJECT).texi - cp $(PROJECT).dvi $(WWW_INSTALL)/$(PROJECT) - -intro.texi: intro.t versions.texi - $(BMENU) -c -p "Top" \ - -u "Top" \ - -n "Requirements" ${*}.t - -require.texi: require.t versions.texi - $(BMENU) -c -p "GNAT Chat Mailing List" \ - -u "Top" \ - -n "Building the GNAT Cross Compiler Toolset" ${*}.t - -buildada.texi: buildada.t versions.texi - $(BMENU) -c -p "Insure GCC and GNAT Environment Variables Are Not Set" \ - -u "Top" \ - -n "Building RTEMS" ${*}.t - -buildrt.texi: buildrt.t versions.texi - $(BMENU) -c -p "Running the bit_ada Script" \ - -u "Top" \ - -n "Building the Sample Application" ${*}.t - -sample.texi: sample.t versions.texi - $(BMENU) -c -p "Using the RTEMS configure Script Directly" \ - -u "Top" \ - -n "Building the GNU Debugger" ${*}.t - -gdb.texi: gdb.t versions.texi - $(BMENU) -c -p "Application Executable" \ - -u "Top" \ - -n "" ${*}.t - -html: dirs $(FILES) - -mkdir -p $(WWW_INSTALL)/$(PROJECT) - -cp ../started/pictures/sfile12c.jpg $(WWW_INSTALL)/$(PROJECT) - -cp ../started/pictures/bit_ada.jpg $(WWW_INSTALL)/$(PROJECT) - $(TEXI2WWW) $(TEXI2WWW_ARGS) -dir $(WWW_INSTALL)/$(PROJECT) \ - $(PROJECT).texi - -clean: - rm -f *.o $(PROG) *.txt core $(PROJECT).pdf - rm -f *.dvi *.ps *.log *.aux *.cp *.fn *.ky *.pg *.toc *.tp *.vr $(BASE) - rm -f $(PROJECT) $(PROJECT)-* $(GENERATED_FILES) - rm -f *.fixed _* - diff --git a/doc/started_ada/Makefile.am b/doc/started_ada/Makefile.am new file mode 100644 index 0000000000..e1d7fc37e9 --- /dev/null +++ b/doc/started_ada/Makefile.am @@ -0,0 +1,55 @@ +# +# COPYRIGHT (c) 1988-1999. +# On-Line Applications Research Corporation (OAR). +# All rights reserved. +# +# $Id$ +# + +AUTOMAKE_OPTIONS = foreign + +PROJECT=started_ada + +include $(top_srcdir)/project.am + +COMMON_FILES=$(top_srcdir)/common/cpright.texi $(top_builddir)/common/setup.texi + +GENERATED_FILES= buildada.texi buildrt.texi gdb.texi intro.texi \ + require.texi sample.texi + +FILES= tversions.texi + +info_TEXINFOS = started_ada.texi +started_ada_TEXINFOS = $(FILES) $(COMMON_FILES) $(GENERATED_FILES) + +intro.texi: intro.t tversions.texi + $(BMENU) -c -p "Top" \ + -u "Top" \ + -n "Requirements" $< + +require.texi: require.t tversions.texi + $(BMENU) -c -p "GNAT Chat Mailing List" \ + -u "Top" \ + -n "Building the GNAT Cross Compiler Toolset" $< + +buildada.texi: buildada.t tversions.texi + $(BMENU) -c -p "Insure GCC and GNAT Environment Variables Are Not Set" \ + -u "Top" \ + -n "Building RTEMS" $< + +buildrt.texi: buildrt.t tversions.texi + $(BMENU) -c -p "Running the bit_ada Script" \ + -u "Top" \ + -n "Building the Sample Application" $< + +sample.texi: sample.t tversions.texi + $(BMENU) -c -p "Using the RTEMS configure Script Directly" \ + -u "Top" \ + -n "Building the GNU Debugger" $< + +gdb.texi: gdb.t tversions.texi + $(BMENU) -c -p "Application Executable" \ + -u "Top" \ + -n "" $< + +EXTRA_DIST = *.t diff --git a/doc/started_ada/started_ada.texi b/doc/started_ada/started_ada.texi index 041eb3fab9..2036d45ffb 100644 --- a/doc/started_ada/started_ada.texi +++ b/doc/started_ada/started_ada.texi @@ -24,7 +24,7 @@ @c @c Now set all the tool version dependent information @c -@include versions.texi +@include tversions.texi @ignore @ifinfo diff --git a/doc/started_ada/tversions.texi b/doc/started_ada/tversions.texi new file mode 100644 index 0000000000..1396f76e03 --- /dev/null +++ b/doc/started_ada/tversions.texi @@ -0,0 +1,96 @@ +@c +@c COPYRIGHT (c) 1988-1999. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@c +@c This file contains all toolset version dependent information +@c + +@c +@c Comment out setting the "XYZ-RTEMSPATCH" variable if there is no +@c patch required. The documentation will detect this and print +@c an appropriate message in a short section. +@c + + +@c +@c GCC/EGCS Version +@c + +@set GCC-VERSION gcc 2.8.1 +@set GCC-TAR gcc-2.8.1.tar.gz +@set GCC-UNTAR gcc-2.8.1 +@set GCC-FTPSITE ftp.gnu.org +@set GCC-FTPDIR /pub/gnu +@set GCC-RTEMSPATCH gcc-2.8.1-rtems-diff-19980527.gz + +@c +@c GNAT Version +@c + +@set GNAT-VERSION gnat 3.11b +@set GNAT-TAR gnat-3.11b-src.tar.gz +@set GNAT-UNTAR gnat-3.11b-src +@set GNAT-FTPSITE NONE +@set GNAT-FTPDIR NO_DIRECTORY +@set GNAT-RTEMSPATCH gnat-3.11b-rtems-diff-19981105.gz + +@c +@c BINUTILS Version +@c + +@c The "official" binutils +@set BINUTILS-VERSION binutils 2.9.1 +@set BINUTILS-TAR binutils-2.9.1.tar.gz +@set BINUTILS-UNTAR binutils-2.9.1 +@set BINUTILS-FTPSITE ftp.gnu.org +@set BINUTILS-FTPDIR /pub/gnu +@set BINUTILS-RTEMSPATCH binutils-2.9.1-rtems-diff-19981027.gz + +@c When forced to use a snapshot +@c @set BINUTILS-VERSION gas 980314 +@c @set BINUTILS-TAR gas-980314.tgz +@c @set BINUTILS-UNTAR gas-980314 +@c @set BINUTILS-FTPSITE ftp.OARcorp.com +@c @set BINUTILS-FTPDIR /oarcorp/private/beta3/ada_tools +@c @set BINUTILS-RTEMSPATCH binutils-2.8.1-rtems-diff-980321.gz + +@c +@c NEWLIB Version +@c + +@set NEWLIB-VERSION newlib 1.8.1 +@set NEWLIB-TAR newlib-1.8.1.tar.gz +@set NEWLIB-UNTAR newlib-1.8.1 +@set NEWLIB-FTPSITE ftp.cygnus.com +@set NEWLIB-FTPDIR /pub/newlib +@set NEWLIB-RTEMSPATCH newlib-1.8.1-rtems-diff-19980121.gz + +@c +@c GDB Version +@c + +@set GDB-VERSION gdb 4.17 +@set GDB-TAR gdb-4.17.tar.gz +@set GDB-UNTAR gdb-4.17 +@set GDB-FTPSITE ftp.gnu.org +@set GDB-FTPDIR /pub/gnu +@set GDB-RTEMSPATCH gdb-4.17-rtems-diff-19981027.gz +@c @set GDB-GNATPATCH gdb-ada-patch-1.17.8.gz + +@c +@c RTEMS Version +@c + +@set RTEMS-VERSION RTEMS 4.0.0 +@set RTEMS-TAR rtems-4.0.0.tgz +@set RTEMS-UNTAR rtems-4.0.0 +@set RTEMS-FTPSITE ftp.OARcorp.com +@set RTEMS-FTPDIR /pub/rtems/4.0.0 +@set BUILDTOOLS-TAR ada_build_scripts-4.0.0.tgz + + diff --git a/doc/started_ada/versions.texi b/doc/started_ada/versions.texi deleted file mode 100644 index 1396f76e03..0000000000 --- a/doc/started_ada/versions.texi +++ /dev/null @@ -1,96 +0,0 @@ -@c -@c COPYRIGHT (c) 1988-1999. -@c On-Line Applications Research Corporation (OAR). -@c All rights reserved. -@c -@c $Id$ -@c - -@c -@c This file contains all toolset version dependent information -@c - -@c -@c Comment out setting the "XYZ-RTEMSPATCH" variable if there is no -@c patch required. The documentation will detect this and print -@c an appropriate message in a short section. -@c - - -@c -@c GCC/EGCS Version -@c - -@set GCC-VERSION gcc 2.8.1 -@set GCC-TAR gcc-2.8.1.tar.gz -@set GCC-UNTAR gcc-2.8.1 -@set GCC-FTPSITE ftp.gnu.org -@set GCC-FTPDIR /pub/gnu -@set GCC-RTEMSPATCH gcc-2.8.1-rtems-diff-19980527.gz - -@c -@c GNAT Version -@c - -@set GNAT-VERSION gnat 3.11b -@set GNAT-TAR gnat-3.11b-src.tar.gz -@set GNAT-UNTAR gnat-3.11b-src -@set GNAT-FTPSITE NONE -@set GNAT-FTPDIR NO_DIRECTORY -@set GNAT-RTEMSPATCH gnat-3.11b-rtems-diff-19981105.gz - -@c -@c BINUTILS Version -@c - -@c The "official" binutils -@set BINUTILS-VERSION binutils 2.9.1 -@set BINUTILS-TAR binutils-2.9.1.tar.gz -@set BINUTILS-UNTAR binutils-2.9.1 -@set BINUTILS-FTPSITE ftp.gnu.org -@set BINUTILS-FTPDIR /pub/gnu -@set BINUTILS-RTEMSPATCH binutils-2.9.1-rtems-diff-19981027.gz - -@c When forced to use a snapshot -@c @set BINUTILS-VERSION gas 980314 -@c @set BINUTILS-TAR gas-980314.tgz -@c @set BINUTILS-UNTAR gas-980314 -@c @set BINUTILS-FTPSITE ftp.OARcorp.com -@c @set BINUTILS-FTPDIR /oarcorp/private/beta3/ada_tools -@c @set BINUTILS-RTEMSPATCH binutils-2.8.1-rtems-diff-980321.gz - -@c -@c NEWLIB Version -@c - -@set NEWLIB-VERSION newlib 1.8.1 -@set NEWLIB-TAR newlib-1.8.1.tar.gz -@set NEWLIB-UNTAR newlib-1.8.1 -@set NEWLIB-FTPSITE ftp.cygnus.com -@set NEWLIB-FTPDIR /pub/newlib -@set NEWLIB-RTEMSPATCH newlib-1.8.1-rtems-diff-19980121.gz - -@c -@c GDB Version -@c - -@set GDB-VERSION gdb 4.17 -@set GDB-TAR gdb-4.17.tar.gz -@set GDB-UNTAR gdb-4.17 -@set GDB-FTPSITE ftp.gnu.org -@set GDB-FTPDIR /pub/gnu -@set GDB-RTEMSPATCH gdb-4.17-rtems-diff-19981027.gz -@c @set GDB-GNATPATCH gdb-ada-patch-1.17.8.gz - -@c -@c RTEMS Version -@c - -@set RTEMS-VERSION RTEMS 4.0.0 -@set RTEMS-TAR rtems-4.0.0.tgz -@set RTEMS-UNTAR rtems-4.0.0 -@set RTEMS-FTPSITE ftp.OARcorp.com -@set RTEMS-FTPDIR /pub/rtems/4.0.0 -@set BUILDTOOLS-TAR ada_build_scripts-4.0.0.tgz - - diff --git a/doc/supplements/Makefile.am b/doc/supplements/Makefile.am new file mode 100644 index 0000000000..15760f2138 --- /dev/null +++ b/doc/supplements/Makefile.am @@ -0,0 +1,7 @@ +## $Id$ + +AUTOMAKE_OPTIONS = foreign + +SUBDIRS = hppa1_1 i386 i960 m68k mips64orion powerpc sh sparc template + +EXTRA_DIST = supplement.am diff --git a/doc/supplements/hppa1_1/Makefile b/doc/supplements/hppa1_1/Makefile deleted file mode 100644 index 640eb3bbe2..0000000000 --- a/doc/supplements/hppa1_1/Makefile +++ /dev/null @@ -1,152 +0,0 @@ -# -# COPYRIGHT (c) 1988-1999. -# On-Line Applications Research Corporation (OAR). -# All rights reserved. -# -# $Id$ -# - -PROJECT=hppa1_1 - -include ../../Make.config - -REPLACE=../../tools/word-replace - -all: html info ps pdf - -dirs: - $(make-dirs) - -COMMON_FILES=../../common/cpright.texi ../../common/setup.texi - -GENERATED_FILES=\ - cpumodel.texi callconv.texi memmodel.texi intr.texi fatalerr.texi \ - bsp.texi cputable.texi wksheets.texi timing.texi timeSIMHPPA.texi - -FILES= $(PROJECT).texi \ - preface.texi \ - $(GENERATED_FILES) - -info: dirs c_hppa1_1 - cp c_$(PROJECT) $(INFO_INSTALL) - -c_hppa1_1: $(FILES) - $(MAKEINFO) $(PROJECT).texi - -dvi: dirs $(PROJECT).dvi -ps: dirs $(PROJECT).ps -pdf: dirs $(PROJECT).pdf - -$(PROJECT).pdf: $(FILES) - $(TEXI2PDF) $(PROJECT).texi - cp $(PROJECT).pdf $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).ps: $(PROJECT).dvi - dvips -o $(PROJECT).ps $(PROJECT).dvi - cp $(PROJECT).ps $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).dvi: $(FILES) - $(TEXI2DVI) $(PROJECT).texi - cp $(PROJECT).dvi $(WWW_INSTALL)/$(PROJECT) - -html: dirs $(FILES) - -mkdir -p $(WWW_INSTALL)/$(PROJECT) - $(TEXI2WWW) $(TEXI2WWW_ARGS) -dir $(WWW_INSTALL)/$(PROJECT) \ - $(PROJECT).texi - -clean: - rm -f *.o $(PROG) *.txt core $(PROJECT).pdf - rm -f *.dvi *.ps *.log *.aux *.cp *.fn *.ky *.pg *.toc *.tp *.vr $(BASE) - rm -f $(PROJECT) $(PROJECT)-* - rm -f c_hppa1_1 c_hppa1_1-* - rm -f intr.t - rm -f timing.t timing.texi - rm -f wksheets.t wksheets_NOTIMES.t $(GENERATED_FILES) - rm -f *.fixed _* - -# -# Chapters which get automatic processing -# - -cpumodel.texi: cpumodel.t Makefile - $(BMENU) -p "Preface" \ - -u "Top" \ - -n "Calling Conventions" ${*}.t - -callconv.texi: callconv.t Makefile - $(BMENU) -p "CPU Model Dependent Features CPU Model Name" \ - -u "Top" \ - -n "Memory Model" ${*}.t - -memmodel.texi: memmodel.t Makefile - $(BMENU) -p "Calling Conventions User-Provided Routines" \ - -u "Top" \ - -n "Interrupt Processing" ${*}.t - -# Interrupt Chapter: -# 1. Replace Times and Sizes -# 2. Build Node Structure - -intr.t: intr_NOTIMES.t SIMHPPA_TIMES - ${REPLACE} -p SIMHPPA_TIMES intr_NOTIMES.t - mv intr_NOTIMES.t.fixed intr.t - -intr.texi: intr.t Makefile - $(BMENU) -p "Memory Model Flat Memory Model" \ - -u "Top" \ - -n "Default Fatal Error Processing" ${*}.t - - -fatalerr.texi: fatalerr.t Makefile - $(BMENU) -p "Interrupt Processing Disabling of Interrupts by RTEMS" \ - -u "Top" \ - -n "Board Support Packages" ${*}.t - -bsp.texi: bsp.t Makefile - $(BMENU) -p "Default Fatal Error Processing Default Fatal Error Handler Operations" \ - -u "Top" \ - -n "Processor Dependent Information Table" ${*}.t - -cputable.texi: cputable.t Makefile - $(BMENU) -p "Board Support Packages Processor Initialization" \ - -u "Top" \ - -n "Memory Requirements" ${*}.t - -# Worksheets Chapter: -# 1. Obtain the Shared File -# 2. Replace Times and Sizes -# 3. Build Node Structure - -wksheets_NOTIMES.t: ../../common/wksheets.t - cp ../../common/wksheets.t wksheets_NOTIMES.t - -wksheets.t: wksheets_NOTIMES.t SIMHPPA_TIMES - ${REPLACE} -p SIMHPPA_TIMES wksheets_NOTIMES.t - mv wksheets_NOTIMES.t.fixed wksheets.t - -wksheets.texi: wksheets.t Makefile - $(BMENU) -p "Processor Dependent Information Table CPU Dependent Information Table" \ - -u "Top" \ - -n "Timing Specification" ${*}.t - -# Timing Specification Chapter: -# 1. Copy the Shared File -# 3. Build Node Structure - -timing.t: ../../common/timing.t - cp ../../common/timing.t timing.t - -timing.texi: timing.t Makefile - $(BMENU) -p "Memory Requirements RTEMS RAM Workspace Worksheet" \ - -u "Top" \ - -n "HP-7100 Timing Data" ${*}.t - -# Timing Data for BSP Chapter: -# 1. Copy the Shared File -# 2. Replace Times and Sizes -# 3. Build Node Structure - -timeSIMHPPA.texi: timeSIMHPPA.t Makefile - $(BMENU) -p "Timing Specification Terminology" \ - -u "Top" \ - -n "Command and Variable Index" ${*}.t diff --git a/doc/supplements/hppa1_1/Makefile.am b/doc/supplements/hppa1_1/Makefile.am new file mode 100644 index 0000000000..6ed271e564 --- /dev/null +++ b/doc/supplements/hppa1_1/Makefile.am @@ -0,0 +1,106 @@ +# +# COPYRIGHT (c) 1988-1999. +# On-Line Applications Research Corporation (OAR). +# All rights reserved. +# +# $Id$ +# + +AUTOMAKE_OPTIONS = foreign + +PROJECT=hppa1_1 + +include $(top_srcdir)/project.am +include $(top_srcdir)/supplements/supplement.am + +COMMON_FILES=$(top_srcdir)/common/cpright.texi $(top_builddir)/common/setup.texi + +GENERATED_FILES=\ + cpumodel.texi callconv.texi memmodel.texi intr.texi fatalerr.texi \ + bsp.texi cputable.texi wksheets.texi timing.texi timeSIMHPPA.texi + +FILES= preface.texi + +info_TEXINFOS = hppa1_1.texi +hppa1_1_TEXINFOS = $(FILES) $(COMMON_FILES) $(GENERATED_FILES) + +# +# Chapters which get automatic processing +# + +cpumodel.texi: cpumodel.t + $(BMENU) -p "Preface" \ + -u "Top" \ + -n "Calling Conventions" $< + +callconv.texi: callconv.t + $(BMENU) -p "CPU Model Dependent Features CPU Model Name" \ + -u "Top" \ + -n "Memory Model" $< + +memmodel.texi: memmodel.t + $(BMENU) -p "Calling Conventions User-Provided Routines" \ + -u "Top" \ + -n "Interrupt Processing" $< + +# Interrupt Chapter: +# 1. Replace Times and Sizes +# 2. Build Node Structure +intr.texi: intr_NOTIMES.t SIMHPPA_TIMES + ${REPLACE2} -p $(srcdir)/SIMHPPA_TIMES $(srcdir)/intr_NOTIMES.t intr.t + $(BMENU) -p "Memory Model Flat Memory Model" \ + -u "Top" \ + -n "Default Fatal Error Processing" intr.t +CLEANFILES += intr.t + +fatalerr.texi: fatalerr.t + $(BMENU) -p "Interrupt Processing Disabling of Interrupts by RTEMS" \ + -u "Top" \ + -n "Board Support Packages" $< + +bsp.texi: bsp.t + $(BMENU) -p "Default Fatal Error Processing Default Fatal Error Handler Operations" \ + -u "Top" \ + -n "Processor Dependent Information Table" $< + +cputable.texi: cputable.t + $(BMENU) -p "Board Support Packages Processor Initialization" \ + -u "Top" \ + -n "Memory Requirements" $< + +# Worksheets Chapter: +# 1. Obtain the Shared File +# 2. Replace Times and Sizes +# 3. Build Node Structure + +wksheets.texi: $(top_srcdir)/common/wksheets.t SIMHPPA_TIMES + ${REPLACE2} -p $(srcdir)/SIMHPPA_TIMES \ + $(top_srcdir)/common/wksheets.t wksheets.t + $(BMENU) -p "Processor Dependent Information Table CPU Dependent Information Table" \ + -u "Top" \ + -n "Timing Specification" wksheets.t +CLEANFILES += wksheets.t + + +# Timing Specification Chapter: +# 1. Copy the Shared File +# 3. Build Node Structure + +timing.texi: $(top_srcdir)/common/timing.t + cp $(top_srcdir)/common/timing.t timing.t + $(BMENU) -p "Memory Requirements RTEMS RAM Workspace Worksheet" \ + -u "Top" \ + -n "HP-7100 Timing Data" timing.t +CLEANFILES += timing.t + +# Timing Data for BSP Chapter: +# 1. Copy the Shared File +# 2. Replace Times and Sizes +# 3. Build Node Structure + +timeSIMHPPA.texi: timeSIMHPPA.t + $(BMENU) -p "Timing Specification Terminology" \ + -u "Top" \ + -n "Command and Variable Index" $< + +EXTRA_DIST = SIMHPPA_TIMES *.t diff --git a/doc/supplements/hppa1_1/hppa1_1.texi b/doc/supplements/hppa1_1/hppa1_1.texi index 3c3512a0d4..d3417013d6 100644 --- a/doc/supplements/hppa1_1/hppa1_1.texi +++ b/doc/supplements/hppa1_1/hppa1_1.texi @@ -1,6 +1,6 @@ \input texinfo @c -*-texinfo-*- @c %**start of header -@setfilename c_hppa1_1 +@setfilename hppa1_1 @syncodeindex vr fn @synindex ky cp @paragraphindent 0 @@ -75,7 +75,7 @@ END-INFO-DIR-ENTRY @include timeSIMHPPA.texi @ifinfo @node Top, Preface, (dir), (dir) -@top c_hppa1_1 +@top hppa1_1 This is the online version of the RTEMS Hewlett Packard PA-RISC Applications Supplement. diff --git a/doc/supplements/i386/Makefile b/doc/supplements/i386/Makefile deleted file mode 100644 index 9893c1a20c..0000000000 --- a/doc/supplements/i386/Makefile +++ /dev/null @@ -1,170 +0,0 @@ -# -# COPYRIGHT (c) 1988-1999. -# On-Line Applications Research Corporation (OAR). -# All rights reserved. -# -# $Id$ -# - -PROJECT=i386 - -include ../../Make.config - -REPLACE=../../tools/word-replace - -all: html info ps pdf - -COMMON_FILES=../../common/cpright.texi ../../common/setup.texi - -GENERATED_FILES=\ - cpumodel.texi callconv.texi memmodel.texi intr.texi fatalerr.texi \ - bsp.texi cputable.texi timing.texi wksheets.texi timeFORCE386.texi - -FILES= $(PROJECT).texi \ - preface.texi \ - $(GENERATED_FILES) - - -dirs: - $(make-dirs) - -info: dirs c_i386 - cp c_$(PROJECT) $(INFO_INSTALL) - #cp c_$(PROJECT) c_$(PROJECT)-* $(INFO_INSTALL) - -c_i386: $(FILES) - $(MAKEINFO) $(PROJECT).texi - -dvi: dirs $(PROJECT).dvi -ps: dirs $(PROJECT).ps -pdf: dirs $(PROJECT).pdf - -$(PROJECT).pdf: $(FILES) - $(TEXI2PDF) $(PROJECT).texi - cp $(PROJECT).pdf $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).ps: $(PROJECT).dvi - dvips -o $(PROJECT).ps $(PROJECT).dvi - cp $(PROJECT).ps $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).dvi: $(FILES) - $(TEXI2DVI) $(PROJECT).texi - cp $(PROJECT).dvi $(WWW_INSTALL)/$(PROJECT) - -html: dirs $(FILES) - -mkdir -p $(WWW_INSTALL)/$(PROJECT) - $(TEXI2WWW) $(TEXI2WWW_ARGS) -dir $(WWW_INSTALL)/$(PROJECT) \ - $(PROJECT).texi - -clean: - rm -f *.o $(PROG) *.txt core $(PROJECT).pdf - rm -f *.dvi *.ps *.log *.aux *.cp *.fn *.ky *.pg *.toc *.tp *.vr $(BASE) - rm -f $(PROJECT) $(PROJECT)-* - rm -f c_i386 c_i386-* - rm -f intr.t $(GENERATED_FILES) - rm -f wksheets.t wksheets_NOTIMES.t timing.t intr.t - rm -f timeFORCE386_.t timeFORCE386_.texi - rm -f *.fixed _* - -# -# Chapters which get automatic processing -# - -cpumodel.texi: cpumodel.t Makefile - $(BMENU) -p "Preface" \ - -u "Top" \ - -n "Calling Conventions" ${*}.t - -callconv.texi: callconv.t Makefile - $(BMENU) -p "CPU Model Dependent Features Floating Point Unit" \ - -u "Top" \ - -n "Memory Model" ${*}.t - -memmodel.texi: memmodel.t Makefile - $(BMENU) -p "Calling Conventions User-Provided Routines" \ - -u "Top" \ - -n "Interrupt Processing" ${*}.t - -# Interrupt Chapter: -# 1. Replace Times and Sizes -# 2. Build Node Structure - -#intr.texi: intr.t FORCE386_TIMES -# ${REPLACE} -p FORCE386_TIMES intr.t -# mv intr.t.fixed intr.texi - -# Interrupt Chapter: -# 1. Replace Times and Sizes -# 2. Build Node Structure -intr.t: intr_NOTIMES.t FORCE386_TIMES - ${REPLACE} -p FORCE386_TIMES intr_NOTIMES.t - mv intr_NOTIMES.t.fixed intr.t - -intr.texi: intr.t Makefile - $(BMENU) -p "Memory Model Flat Memory Model" \ - -u "Top" \ - -n "Default Fatal Error Processing" ${*}.t - -fatalerr.texi: fatalerr.t Makefile - $(BMENU) -p "Interrupt Processing Interrupt Stack" \ - -u "Top" \ - -n "Board Support Packages" ${*}.t - -bsp.texi: bsp.t Makefile - $(BMENU) -p "Default Fatal Error Processing Default Fatal Error Handler Operations" \ - -u "Top" \ - -n "Processor Dependent Information Table" ${*}.t - -cputable.texi: cputable.t Makefile - $(BMENU) -p "Board Support Packages Processor Initialization" \ - -u "Top" \ - -n "Memory Requirements" ${*}.t - -# Worksheets Chapter: -# 1. Obtain the Shared File -# 2. Replace Times and Sizes -# 3. Build Node Structure - -wksheets_NOTIMES.t: ../../common/wksheets.t - cp ../../common/wksheets.t wksheets_NOTIMES.t - -wksheets.t: wksheets_NOTIMES.t FORCE386_TIMES - ${REPLACE} -p FORCE386_TIMES wksheets_NOTIMES.t - mv wksheets_NOTIMES.t.fixed wksheets.t - -wksheets.texi: wksheets.t Makefile - $(BMENU) -p "Processor Dependent Information Table CPU Dependent Information Table" \ - -u "Top" \ - -n "Timing Specification" ${*}.t - -# Timing Specification Chapter: -# 1. Copy the Shared File -# 3. Build Node Structure - -timing.t: ../../common/timing.t - cp ../../common/timing.t timing.t - -timing.texi: timing.t Makefile - $(BMENU) -p "Memory Requirements RTEMS RAM Workspace Worksheet" \ - -u "Top" \ - -n "CPU386 Timing Data" ${*}.t - -# Timing Data for BSP Chapter: -# 1. Copy the Shared File -# 2. Replace Times and Sizes -# 3. Build Node Structure - -timeFORCE386_.t: ../../common/timetbl.t timeFORCE386.t - cat timeFORCE386.t ../../common/timetbl.t >timeFORCE386_.t - @echo >>timeFORCE386_.t - @echo "@tex" >>timeFORCE386_.t - @echo "\\global\\advance \\smallskipamount by 4pt" >>timeFORCE386_.t - @echo "@end tex" >>timeFORCE386_.t - ${REPLACE} -p FORCE386_TIMES timeFORCE386_.t - mv timeFORCE386_.t.fixed timeFORCE386_.t - -timeFORCE386.texi: timeFORCE386_.t Makefile - $(BMENU) -p "Timing Specification Terminology" \ - -u "Top" \ - -n "Command and Variable Index" timeFORCE386_.t - mv timeFORCE386_.texi timeFORCE386.texi diff --git a/doc/supplements/i386/Makefile.am b/doc/supplements/i386/Makefile.am new file mode 100644 index 0000000000..7b3d95a273 --- /dev/null +++ b/doc/supplements/i386/Makefile.am @@ -0,0 +1,115 @@ +# +# COPYRIGHT (c) 1988-1999. +# On-Line Applications Research Corporation (OAR). +# All rights reserved. +# +# $Id$ +# + +AUTOMAKE_OPTIONS = foreign + +PROJECT=i386 + +include $(top_srcdir)/project.am +include $(top_srcdir)/supplements/supplement.am + +COMMON_FILES=$(top_srcdir)/common/cpright.texi $(top_builddir)/common/setup.texi + +GENERATED_FILES=\ + cpumodel.texi callconv.texi memmodel.texi intr.texi fatalerr.texi \ + bsp.texi cputable.texi timing.texi wksheets.texi timeFORCE386.texi + +FILES= preface.texi + +info_TEXINFOS = i386.texi +i386_TEXINFOS = $(FILES) $(COMMON_FILES) $(GENERATED_FILES) + +# +# Chapters which get automatic processing +# + +cpumodel.texi: cpumodel.t + $(BMENU) -p "Preface" \ + -u "Top" \ + -n "Calling Conventions" $< + +callconv.texi: callconv.t + $(BMENU) -p "CPU Model Dependent Features Floating Point Unit" \ + -u "Top" \ + -n "Memory Model" $< + +memmodel.texi: memmodel.t + $(BMENU) -p "Calling Conventions User-Provided Routines" \ + -u "Top" \ + -n "Interrupt Processing" $< + +# Interrupt Chapter: +# 1. Replace Times and Sizes +# 2. Build Node Structure + +intr.texi: intr_NOTIMES.t FORCE386_TIMES + ${REPLACE2} -p $(srcdir)/FORCE386_TIMES $(srcdir)/intr_NOTIMES.t intr.t + $(BMENU) -p "Memory Model Flat Memory Model" \ + -u "Top" \ + -n "Default Fatal Error Processing" intr.t +CLEANFILES += intr.t + +fatalerr.texi: fatalerr.t + $(BMENU) -p "Interrupt Processing Interrupt Stack" \ + -u "Top" \ + -n "Board Support Packages" $< + +bsp.texi: bsp.t + $(BMENU) -p "Default Fatal Error Processing Default Fatal Error Handler Operations" \ + -u "Top" \ + -n "Processor Dependent Information Table" $< + +cputable.texi: cputable.t + $(BMENU) -p "Board Support Packages Processor Initialization" \ + -u "Top" \ + -n "Memory Requirements" $< + +# Worksheets Chapter: +# 1. Obtain the Shared File +# 2. Replace Times and Sizes +# 3. Build Node Structure + +wksheets.texi: $(top_srcdir)/common/wksheets.t FORCE386_TIMES + ${REPLACE2} -p $(srcdir)/FORCE386_TIMES \ + $(top_srcdir)/common/wksheets.t wksheets.t + $(BMENU) -p "Processor Dependent Information Table CPU Dependent Information Table" \ + -u "Top" \ + -n "Timing Specification" wksheets.t +CLEANFILES += wksheets.t + +# Timing Specification Chapter: +# 1. Copy the Shared File +# 3. Build Node Structure +timing.texi: $(top_srcdir)/common/timing.t + cp $(top_srcdir)/common/timing.t timing.t + $(BMENU) -p "Memory Requirements RTEMS RAM Workspace Worksheet" \ + -u "Top" \ + -n "CPU386 Timing Data" timing.t +CLEANFILES += timing.t + +# Timing Data for BSP Chapter: +# 1. Copy the Shared File +# 2. Replace Times and Sizes +# 3. Build Node Structure + +timeFORCE386_.t: $(top_srcdir)/common/timetbl.t timeFORCE386.t + cat timeFORCE386.t $(top_srcdir)/common/timetbl.t >timeFORCE386_.t + @echo >>timeFORCE386_.t + @echo "@tex" >>timeFORCE386_.t + @echo "\\global\\advance \\smallskipamount by 4pt" >>timeFORCE386_.t + @echo "@end tex" >>timeFORCE386_.t + ${REPLACE} -p FORCE386_TIMES timeFORCE386_.t + mv timeFORCE386_.t.fixed timeFORCE386_.t + +timeFORCE386.texi: timeFORCE386_.t + $(BMENU) -p "Timing Specification Terminology" \ + -u "Top" \ + -n "Command and Variable Index" timeFORCE386_.t + mv timeFORCE386_.texi timeFORCE386.texi + +EXTRA_DIST = FORCE386_TIMES *.t diff --git a/doc/supplements/i386/i386.texi b/doc/supplements/i386/i386.texi index 7f07ed014f..d319167587 100644 --- a/doc/supplements/i386/i386.texi +++ b/doc/supplements/i386/i386.texi @@ -1,6 +1,6 @@ \input texinfo @c -*-texinfo-*- @c %**start of header -@setfilename c_i386 +@setfilename i386 @syncodeindex vr fn @synindex ky cp @paragraphindent 0 @@ -75,7 +75,7 @@ END-INFO-DIR-ENTRY @include timeFORCE386.texi @ifinfo @node Top, Preface, (dir), (dir) -@top c_i386 +@top i386 This is the online version of the RTEMS Intel i386 Applications Supplement. diff --git a/doc/supplements/i386/timeFORCE386_.t b/doc/supplements/i386/timeFORCE386_.t new file mode 100644 index 0000000000..de008d23b2 --- /dev/null +++ b/doc/supplements/i386/timeFORCE386_.t @@ -0,0 +1,1435 @@ +@c +@c COPYRIGHT (c) 1988-1999. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@include ../../common/timemac.texi +@tex +\global\advance \smallskipamount by -4pt +@end tex + +@chapter CPU386 Timing Data + +@section Introduction + +The timing data for the i386 version of RTEMS is +provided along with the target dependent aspects concerning the +gathering of the timing data. The hardware platform used to +gather the times is described to give the reader a better +understanding of each directive time provided. Also, provided +is a description of the interrupt latency and the context +switch times as they pertain to the i386 version of RTEMS. + +@section Hardware Platform + +All times reported except for the maximum period +interrupts are disabled by RTEMS were measured using a Force +Computers CPU386 board. The CPU386 is a 16 Mhz board with zero +wait state dynamic memory and an i80387 numeric coprocessor. +One of the count-down timers provided by a Motorola MC68901 was +used to measure elapsed time with one microsecond resolution. +All sources of hardware interrupts are disabled, although the +interrupt level of the i386 allows all interrupts. + +The maximum period interrupts are disabled was +measured by summing the number of CPU cycles required by each +assembly language instruction executed while interrupts were +disabled. Zero wait state memory was assumed. The total CPU +cycles executed with interrupts disabled, including the +instructions to disable and enable interrupts, was divided by 16 +to simulate a i386 executing at 16 Mhz. + +@section Interrupt Latency + +The maximum period with interrupts disabled within +RTEMS is less than 13.0 microseconds +including the instructions +which disable and re-enable interrupts. The time required for +the i386 to generate an interrupt using the int instruction, +vectoring to an interrupt handler, and for the RTEMS entry +overhead before invoking the user's interrupt handler are a +total of 12 microseconds. These combine to yield a worst case +interrupt latency of less +13.0 + 12 +microseconds. [NOTE: The +maximum period with interrupts disabled within RTEMS was last +calculated for Release 3.1.0.] + +It should be noted again that the maximum period with +interrupts disabled within RTEMS is hand-timed. The interrupt +vector and entry overhead time was generated on the Force +Computers CPU386 benchmark platform using the int instruction as +the interrupt source. + +@section Context Switch + +The RTEMS processor context switch time is 34 +microseconds on the Force Computers CPU386 benchmark platform. +This time represents the raw context switch time with no user +extensions configured. Additional execution time is required +when a TASK_SWITCH user extension is configured. The use of the +TASK_SWITCH extension is application dependent. Thus, its +execution time is not considered part of the base context switch +time. + +Since RTEMS was designed specifically for embedded +missile applications which are floating point intensive, the +executive is optimized to avoid unnecessarily saving and +restoring the state of the numeric coprocessor. The state of +the numeric coprocessor is only saved when a FLOATING_POINT task +is dispatched and that task was not the last task to utilize the +coprocessor. In a system with only one FLOATING_POINT task, the +state of the numeric coprocessor will never be saved or +restored. When the first FLOATING_POINT task is dispatched, +RTEMS does not need to save the current state of the numeric +coprocessor. + +The exact amount of time required to save and restore +floating point context is dependent on the state of the numeric +coprocessor. RTEMS places the coprocessor in the initialized +state when a task is started or restarted. Once the task has +utilized the coprocessor, it is in the idle state when floating +point instructions are not executing and the busy state when +floating point instructions are executing. The state of the +coprocessor is task specific. + +The following table summarizes the context switch +times for the Force Computers CPU386 benchmark platform: + +@c ****** This comment is here to remind you not to edit the timetbl.t +@c ****** in any directory but common. +@c +@c Time Table Template +@c +@c COPYRIGHT (c) 1988-1999. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@ifset use-tex +@sp 1 +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{No Floating Point Contexts}{34} +\rtemsdirective{Floating Point Contexts} +\rtemscase{restore first FP task}{57} +\rtemscase{save initialized, restore initialized}{59} +\rtemscase{save idle, restore initialized}{59} +\rtemscase{save idle, restore idle}{83} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet +@item No Floating Point Contexts +@itemize - +@item only case: 34 +@end itemize +@item Floating Point Contexts +@itemize - +@item restore first FP task: 57 +@item save initialized, restore initialized: 59 +@item save idle, restore initialized: 59 +@item save idle, restore idle: 59 +@end itemize +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + +
    No Floating Point Contexts34
    Floating Point Contexts
    restore first FP task
    57
    save initialized, restore initialized
    59
    save idle, restore initialized
    59
    save idle, restore idle
    83
    +
    +@end html +@end ifset + +@section Directive Times + +This sections is divided into a number of +subsections, each of which contains a table listing the +execution times of that manager's directives. + +@page +@section Task Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{TASK\_CREATE}{157} +\rtemsonecase{TASK\_IDENT}{748} +\rtemsonecase{TASK\_START}{86} +\rtemsdirective{TASK\_RESTART} +\rtemscase{calling task}{118} +\rtemscase{suspended task -- returns to caller} + {45} +\rtemscase{blocked task -- returns to caller} + {138} +\rtemscase{ready task -- returns to caller} + {105} +\rtemscase{suspended task -- preempts caller} + {149} +\rtemscase{blocked task -- preempts caller} + {162} +\rtemscase{ready task -- preempts caller} + {156} +\rtemsdirective{TASK\_DELETE} +\rtemscase{calling task}{187} +\rtemscase{suspended task}{147} +\rtemscase{blocked task}{153} +\rtemscase{ready task}{157} +\rtemsdirective{TASK\_SUSPEND} +\rtemscase{calling task}{81} +\rtemscase{returns to caller}{45} +\rtemsdirective{TASK\_RESUME} +\rtemscase{task readied -- returns to caller} + {46} +\rtemscase{task readied -- preempts caller} + {71} +\rtemsdirective{TASK\_SET\_PRIORITY} +\rtemscase{obtain current priority} + {30} +\rtemscase{returns to caller}{67} +\rtemscase{preempts caller}{115} +\rtemsdirective{TASK\_MODE} +\rtemscase{obtain current mode}{19} +\rtemscase{no reschedule}{21} +\rtemscase{reschedule -- returns to caller} + {27} +\rtemscase{reschedule -- preempts caller} + {66} +\rtemsonecase{TASK\_GET\_NOTE}{32} +\rtemsonecase{TASK\_SET\_NOTE}{32} +\rtemsdirective{TASK\_WAKE\_AFTER} +\rtemscase{yield -- returns to caller} + {18} +\rtemscase{yield -- preempts caller} + {63} +\rtemsonecase{TASK\_WAKE\_WHEN}{128} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item TASK_CREATE +@itemize - +@item only case: 157 +@end itemize + +@item TASK_IDENT +@itemize - +@item only case: 748 +@end itemize + +@item TASK_START +@itemize - +@item only case: 86 +@end itemize + +@item TASK_RESTART +@itemize - +@item calling task: 118 +@item suspended task -- returns to caller: 45 +@item blocked task -- returns to caller: 138 +@item ready task -- returns to caller: 105 +@item suspended task -- preempts caller: 149 +@item blocked task -- preempts caller: 162 +@item ready task -- preempts caller: 156 +@end itemize + +@item TASK_DELETE +@itemize - +@item calling task: 187 +@item suspended task: 147 +@item blocked task: 153 +@item ready task: 157 +@end itemize + +@item TASK_SUSPEND +@itemize - +@item calling task: 81 +@item returns to caller: 45 +@end itemize + +@item TASK_RESUME +@itemize - +@item task readied -- returns to caller: 46 +@item task readied -- preempts caller: 71 +@end itemize + +@item TASK_SET_PRIORITY +@itemize - +@item obtain current priority: 30 +@item returns to caller: 67 +@item preempts caller: 115 +@end itemize + +@item TASK_MODE +@itemize - +@item obtain current mode: 19 +@item no reschedule: 21 +@item reschedule -- returns to caller: 27 +@item reschedule -- preempts caller: 66 +@end itemize + +@item TASK_GET_NOTE +@itemize - +@item only case: 32 +@end itemize + +@item TASK_SET_NOTE +@itemize - +@item only case: 32 +@end itemize + +@item TASK_WAKE_AFTER +@itemize - +@item yield -- returns to caller: 18 +@item yield -- preempts caller: 63 +@end itemize + +@item TASK_WAKE_WHEN +@itemize - +@item only case: 128 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TASK_CREATE157
    TASK_IDENT748
    TASK_START86
    TASK_RESTART
    calling task
    118
    suspended task -- returns to caller
    45
    blocked task -- returns to caller
    138
    ready task -- returns to caller
    105
    suspended task -- preempts caller
    149
    blocked task -- preempts caller
    162
    ready task -- preempts caller
    156
    TASK_DELETE
    calling task
    187
    suspended task
    147
    blocked task
    153
    ready task
    157
    TASK_SUSPEND
    calling task
    81
    returns to caller
    45
    TASK_RESUME
    task readied -- returns to caller
    46
    task readied -- preempts caller
    71
    TASK_SET_PRIORITY
    obtain current priority
    30
    returns to caller
    67
    preempts caller
    115
    TASK_MODE
    obtain current mode
    19
    no reschedule
    21
    reschedule -- returns to caller
    27
    reschedule -- preempts caller
    66
    TASK_GET_NOTE32
    TASK_SET_NOTE32
    TASK_WAKE_AFTER
    yield -- returns to caller
    18
    yield -- preempts caller
    63
    TASK_WAKE_WHEN128
    +
    +@end html +@end ifset + +@page +@section Interrupt Manager + +It should be noted that the interrupt entry times +include vectoring the interrupt handler. + +@ifset use-tex +@sp 1 +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsdirective{Interrupt Entry Overhead} +\rtemscase{returns to nested interrupt}{12} +\rtemscase{returns to interrupted task} + {13} +\rtemscase{returns to preempting task} + {12} +\rtemsdirective{Interrupt Exit Overhead} +\rtemscase{returns to nested interrupt}{10} +\rtemscase{returns to interrupted task} + {13} +\rtemscase{returns to preempting task} + {58} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item Interrupt Entry Overhead +@itemize - +@item returns to nested interrupt: 12 +@item returns to interrupted task: 13 +@item returns to preempting task: 12 +@end itemize + +@item Interrupt Exit Overhead +@itemize - +@item returns to nested interrupt: 10 +@item returns to interrupted task: 13 +@item returns to preempting task: 58 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + +
    Interrupt Entry Overhead
    returns to nested interrupt
    12
    returns to interrupted task
    13
    returns to preempting task
    12
    Interrupt Exit Overhead
    returns to nested interrupt
    10
    returns to interrupted task
    13
    returns to preempting task
    58
    +
    +@end html +@end ifset + + +@section Clock Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{CLOCK\_SET}{85} +\rtemsonecase{CLOCK\_GET}{2} +\rtemsonecase{CLOCK\_TICK}{16} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item CLOCK_SET +@itemize - +@item only case: 85 +@end itemize + +@item CLOCK_GET +@itemize - +@item only case: 2 +@end itemize + +@item CLOCK_TICK +@itemize - +@item only case: 16 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + +
    CLOCK_SET85
    CLOCK_GET2
    CLOCK_TICK16
    +
    +@end html +@end ifset + +@section Timer Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{TIMER\_CREATE}{34} +\rtemsonecase{TIMER\_IDENT}{729} +\rtemsdirective{TIMER\_DELETE} +\rtemscase{inactive}{48} +\rtemscase{active}{52} +\rtemsdirective{TIMER\_FIRE\_AFTER} +\rtemscase{inactive}{65} +\rtemscase{active}{69} +\rtemsdirective{TIMER\_FIRE\_WHEN} +\rtemscase{inactive}{92} +\rtemscase{active}{92} +\rtemsdirective{TIMER\_RESET} +\rtemscase{inactive}{58} +\rtemscase{active}{63} +\rtemsdirective{TIMER\_CANCEL} +\rtemscase{inactive}{32} +\rtemscase{active}{37} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item TIMER_CREATE +@itemize - +@item only case: 34 +@end itemize + +@item TIMER_IDENT +@itemize - +@item only case: 729 +@end itemize + +@item TIMER_DELETE +@itemize - +@item inactive: 48 +@item active: 52 +@end itemize + +@item TIMER_FIRE_AFTER +@itemize - +@item inactive: 65 +@item active: 69 +@end itemize + +@item TIMER_FIRE_WHEN +@itemize - +@item inactive: TIMER_FIRE_WHEN_INACTIVE +@item active: TIMER_FIRE_WHEN_ACTIVE +@end itemize + +@item TIMER_RESET +@itemize - +@item inactive: TIMER_RESET_INACTIVE +@item active: TIMER_RESET_ACTIVE +@end itemize + +@item TIMER_CANCEL +@itemize - +@item inactive: TIMER_CANCEL_INACTIVE +@item active: TIMER_CANCEL_ACTIVE +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TIMER_CREATE34
    TIMER_IDENT729
    TIMER_DELETE
    inactive
    48
    active
    52
    TIMER_FIRE_AFTER
    inactive
    65
    active
    69
    TIMER_FIRE_WHEN
    inactive
    92
    active
    92
    TIMER_RESET
    inactive
    58
    active
    63
    TIMER_CANCEL
    inactive
    32
    active
    37
    +
    +@end html +@end ifset + +@page +@section Semaphore Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{SEMAPHORE\_CREATE}{64} +\rtemsonecase{SEMAPHORE\_IDENT}{787} +\rtemsonecase{SEMAPHORE\_DELETE}{60} +\rtemsdirective{SEMAPHORE\_OBTAIN} +\rtemscase{available}{41} +\rtemscase{not available -- NO\_WAIT} + {40} +\rtemscase{not available -- caller blocks} + {123} +\rtemsdirective{SEMAPHORE\_RELEASE} +\rtemscase{no waiting tasks}{47} +\rtemscase{task readied -- returns to caller} + {70} +\rtemscase{task readied -- preempts caller} + {95} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item SEMAPHORE_CREATE +@itemize - +@item only case: 64 +@end itemize + +@item SEMAPHORE_IDENT +@itemize - +@item only case: 787 +@end itemize + +@item SEMAPHORE_DELETE +@itemize - +@item only case: 60 +@end itemize + +@item SEMAPHORE_OBTAIN +@itemize - +@item available: 41 +@item not available -- NO_WAIT: 40 +@item not available -- caller blocks: 123 +@end itemize + +@item SEMAPHORE_RELEASE +@itemize - +@item no waiting tasks: 47 +@item task readied -- returns to caller: 70 +@item task readied -- preempts caller: 95 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + +
    SEMAPHORE_CREATE64
    SEMAPHORE_IDENT787
    SEMAPHORE_DELETE60
    SEMAPHORE_OBTAIN
    available
    41
    not available -- NO_WAIT
    40
    not available -- caller blocks
    123
    SEMAPHORE_RELEASE
    no waiting tasks
    47
    task readied -- returns to caller
    70
    task readied -- preempts caller
    95
    +
    +@end html +@end ifset + +@section Message Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{MESSAGE\_QUEUE\_CREATE}{294} +\rtemsonecase{MESSAGE\_QUEUE\_IDENT}{730} +\rtemsonecase{MESSAGE\_QUEUE\_DELETE}{81} +\rtemsdirective{MESSAGE\_QUEUE\_SEND} +\rtemscase{no waiting tasks} + {117} +\rtemscase{task readied -- returns to caller} + {118} +\rtemscase{task readied -- preempts caller} + {144} +\rtemsdirective{MESSAGE\_QUEUE\_URGENT} +\rtemscase{no waiting tasks}{117} +\rtemscase{task readied -- returns to caller} + {116} +\rtemscase{task readied -- preempts caller} + {144} +\rtemsdirective{MESSAGE\_QUEUE\_BROADCAST} +\rtemscase{no waiting tasks}{53} +\rtemscase{task readied -- returns to caller} + {122} +\rtemscase{task readied -- preempts caller} + {146} +\rtemsdirective{MESSAGE\_QUEUE\_RECEIVE} +\rtemscase{available}{93} +\rtemscase{not available -- NO\_WAIT} + {45} +\rtemscase{not available -- caller blocks} + {127} +\rtemsdirective{MESSAGE\_QUEUE\_FLUSH} +\rtemscase{no messages flushed}{29} +\rtemscase{messages flushed}{41} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item MESSAGE_QUEUE_CREATE +@itemize - +@item only case: 294 +@end itemize + +@item MESSAGE_QUEUE_IDENT +@itemize - +@item only case: 730 +@end itemize + +@item MESSAGE_QUEUE_DELETE +@itemize - +@item only case: 81 +@end itemize + +@item MESSAGE_QUEUE_SEND +@itemize - +@item no waiting tasks: 117 +@item task readied -- returns to caller: 118 +@item task readied -- preempts caller: 144 +@end itemize + +@item MESSAGE_QUEUE_URGENT +@itemize - +@item no waiting tasks: 117 +@item task readied -- returns to caller: 116 +@item task readied -- preempts caller: 144 +@end itemize + +@item MESSAGE_QUEUE_BROADCAST +@itemize - +@item no waiting tasks: 53 +@item task readied -- returns to caller: 122 +@item task readied -- preempts caller: 146 +@end itemize + +@item MESSAGE_QUEUE_RECEIVE +@itemize - +@item available: 93 +@item not available -- NO_WAIT: 45 +@item not available -- caller blocks: 127 +@end itemize + +@item MESSAGE_QUEUE_FLUSH +@itemize - +@item no messages flushed: 29 +@item messages flushed: 41 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    MESSAGE_QUEUE_CREATE294
    MESSAGE_QUEUE_IDENT730
    MESSAGE_QUEUE_DELETE81
    MESSAGE_QUEUE_SEND
    no waiting tasks
    117
    task readied -- returns to caller
    118
    task readied -- preempts caller
    144
    MESSAGE_QUEUE_URGENT
    no waiting tasks
    117
    task readied -- returns to caller
    116
    task readied -- preempts caller
    144
    MESSAGE_QUEUE_BROADCAST
    no waiting tasks
    53
    task readied -- returns to caller
    122
    task readied -- preempts caller
    146
    MESSAGE_QUEUE_RECEIVE
    available
    93
    not available -- NO_WAIT
    45
    not available -- caller blocks
    127
    MESSAGE_QUEUE_FLUSH
    no messages flushed
    29
    messages flushed
    41
    +
    +@end html +@end ifset + +@page +@section Event Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsdirective{EVENT\_SEND} +\rtemscase{no task readied}{26} +\rtemscase{task readied -- returns to caller} + {60} +\rtemscase{task readied -- preempts caller} + {89} +\rtemsdirective{EVENT\_RECEIVE} +\rtemscase{obtain current events}{<1} +\rtemscase{available}{27} +\rtemscase{not available -- NO\_WAIT}{25} +\rtemscase{not available -- caller blocks} + {94} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item EVENT_SEND +@itemize - +@item no task readied: 26 +@item task readied -- returns to caller: 60 +@item task readied -- preempts caller: 89 +@end itemize + +@item EVENT_RECEIVE +@itemize - +@item obtain current events: <1 +@item available: 27 +@item not available -- NO_WAIT: 25 +@item not available -- caller blocks: 94 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + +
    EVENT_SEND
    no task readied
    26
    task readied -- returns to caller
    60
    task readied -- preempts caller
    89
    EVENT_RECEIVE
    obtain current events
    <1
    available
    27
    not available -- NO_WAIT
    25
    not available -- caller blocks
    94
    +
    +@end html +@end ifset +@section Signal Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{SIGNAL\_CATCH}{13} +\rtemsdirective{SIGNAL\_SEND} +\rtemscase{returns to caller}{34} +\rtemscase{signal to self}{59} +\rtemsdirective{EXIT ASR OVERHEAD} +\rtemscase{returns to calling task} + {39} +\rtemscase{returns to preempting task} + {60} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet +@item SIGNAL_CATCH +@itemize - +@item only case: 13 +@end itemize + +@item SIGNAL_SEND +@itemize - +@item returns to caller: 34 +@item signal to self: 59 +@end itemize + +@item EXIT ASR OVERHEAD +@itemize - +@item returns to calling task: 39 +@item returns to preempting task: 60 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + +
    SIGNAL_CATCH13
    SIGNAL_SEND
    returns to caller
    34
    signal to self
    59
    EXIT ASR OVERHEAD
    returns to calling task
    + 39
    returns to preempting task
    + 60
    +
    +@end html +@end ifset + +@section Partition Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{PARTITION\_CREATE}{83} +\rtemsonecase{PARTITION\_IDENT}{730} +\rtemsonecase{PARTITION\_DELETE}{40} +\rtemsdirective{PARTITION\_GET\_BUFFER} +\rtemscase{available}{34} +\rtemscase{not available}{33} +\rtemsonecase{PARTITION\_RETURN\_BUFFER} + {33} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item PARTITION_CREATE +@itemize - +@item only case: 83 +@end itemize + +@item PARTITION_IDENT +@itemize - +@item only case: 730 +@end itemize + +@item PARTITION_DELETE +@itemize - +@item only case: 40 +@end itemize + +@item PARTITION_GET_BUFFER +@itemize - +@item available: 34 +@item not available: 33 +@end itemize + +@item PARTITION_RETURN_BUFFER +@itemize - +@item only case: 40 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + +
    PARTITION_CREATE83
    PARTITION_IDENT730
    PARTITION_DELETE40
    PARTITION_GET_BUFFER
    available
    34
    not available
    33
    PARTITION_RETURN_BUFFER33
    +
    +@end html +@end ifset + +@page +@section Region Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{REGION\_CREATE}{68} +\rtemsonecase{REGION\_IDENT}{739} +\rtemsonecase{REGION\_DELETE}{39} +\rtemsdirective{REGION\_GET\_SEGMENT} +\rtemscase{available}{49} +\rtemscase{not available -- NO\_WAIT} + {45} +\rtemscase{not available -- caller blocks} + {127} +\rtemsdirective{REGION\_RETURN\_SEGMENT} +\rtemscase{no waiting tasks}{52} +\rtemscase{task readied -- returns to caller} + {113} +\rtemscase{task readied -- preempts caller} + {138} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item REGION_CREATE +@itemize - +@item only case: 68 +@end itemize + +@item REGION_IDENT +@itemize - +@item only case: 739 +@end itemize + +@item REGION_DELETE +@itemize - +@item only case: 39 +@end itemize + +@item REGION_GET_SEGMENT +@itemize - +@item available: 49 +@item not available -- NO_WAIT: 45 +@item not available -- caller blocks: 127 +@end itemize + +@item REGION_RETURN_SEGMENT +@itemize - +@item no waiting tasks: 52 +@item task readied -- returns to caller: 113 +@item task readied -- preempts caller: 138 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + +
    REGION_CREATE68
    REGION_IDENT739
    REGION_DELETE39
    REGION_GET_SEGMENT
    available
    49
    not available -- NO_WAIT
    + 45
    not available -- caller blocks
    + 127
    REGION_RETURN_SEGMENT
    no waiting tasks
    52
    task readied -- returns to caller
    + 113
    task readied -- preempts caller
    + 138
    +
    +@end html +@end ifset + +@section Dual-Ported Memory Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{PORT\_CREATE}{39} +\rtemsonecase{PORT\_IDENT}{728} +\rtemsonecase{PORT\_DELETE}{39} +\rtemsonecase{PORT\_INTERNAL\_TO\_EXTERNAL} + {26} +\rtemsonecase{PORT\_EXTERNAL\_TO\_INTERNAL} + {26} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item PORT_CREATE +@itemize - +@item only case: 39 +@end itemize + +@item PORT_IDENT +@itemize - +@item only case: 728 +@end itemize + +@item PORT_DELETE +@itemize - +@item only case: 39 +@end itemize + +@item PORT_INTERNAL_TO_EXTERNAL +@itemize - +@item only case: 26 +@end itemize + +@item PORT_EXTERNAL_TO_INTERNAL +@itemize - +@item only case: 26 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + +
    PORT_CREATE39
    PORT_IDENT728
    PORT_DELETE39
    PORT_INTERNAL_TO_EXTERNAL26
    PORT_EXTERNAL_TO_INTERNAL26
    +
    +@end html +@end ifset + +@section I/O Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{IO\_INITIALIZE}{4} +\rtemsonecase{IO\_OPEN}{1} +\rtemsonecase{IO\_CLOSE}{1} +\rtemsonecase{IO\_READ}{<1} +\rtemsonecase{IO\_WRITE}{1} +\rtemsonecase{IO\_CONTROL}{1} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item IO_INITIALIZE +@itemize - +@item only case: 4 +@end itemize + +@item IO_OPEN +@itemize - +@item only case: 1 +@end itemize + +@item IO_CLOSE +@itemize - +@item only case: 1 +@end itemize + +@item IO_READ +@itemize - +@item only case: <1 +@end itemize + +@item IO_WRITE +@itemize - +@item only case: 1 +@end itemize + +@item IO_CONTROL +@itemize - +@item only case: 1 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + +
    IO_INITIALIZE4
    IO_OPEN1
    IO_CLOSE1
    IO_READ<1
    IO_WRITE1
    IO_CONTROL1
    +
    +@end html +@end ifset + +@section Rate Monotonic Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{RATE\_MONOTONIC\_CREATE}{36} +\rtemsonecase{RATE\_MONOTONIC\_IDENT}{725} +\rtemsonecase{RATE\_MONOTONIC\_CANCEL}{39} +\rtemsdirective{RATE\_MONOTONIC\_DELETE} +\rtemscase{active}{53} +\rtemscase{inactive}{49} +\rtemsdirective{RATE\_MONOTONIC\_PERIOD} +\rtemscase{initiate period -- returns to caller} + {53} +\rtemscase{conclude period -- caller blocks} + {82} +\rtemscase{obtain status}{30} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item RATE_MONOTONIC_CREATE +@itemize - +@item only case: 36 +@end itemize + +@item RATE_MONOTONIC_IDENT +@itemize - +@item only case: 725 +@end itemize + +@item RATE_MONOTONIC_CANCEL +@itemize - +@item only case: 39 +@end itemize + +@item RATE_MONOTONIC_DELETE +@itemize - +@item active: 53 +@item inactive: 49 +@end itemize + +@item RATE_MONOTONIC_PERIOD +@itemize - +@item initiate period -- returns to caller: 53 +@item conclude period -- caller blocks: 82 +@item obtain status: 30 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + +
    RATE_MONOTONIC_CREATE36
    RATE_MONOTONIC_IDENT725
    RATE_MONOTONIC_CANCEL39
    RATE_MONOTONIC_DELETE
    active
    53
    inactive
    49
    RATE_MONOTONIC_PERIOD
    initiate period -- returns to caller
    + 53
    conclude period -- caller blocks
    + 82
    obtain status
    30
    +
    +@end html +@end ifset + +@tex +\global\advance \smallskipamount by 4pt +@end tex + +@tex +\global\advance \smallskipamount by 4pt +@end tex diff --git a/doc/supplements/i960/Makefile b/doc/supplements/i960/Makefile deleted file mode 100644 index eac67b94d0..0000000000 --- a/doc/supplements/i960/Makefile +++ /dev/null @@ -1,161 +0,0 @@ -# -# COPYRIGHT (c) 1988-1999. -# On-Line Applications Research Corporation (OAR). -# All rights reserved. -# -# $Id$ -# - -PROJECT=i960 - -include ../../Make.config - -REPLACE=../../tools/word-replace - -all: html info ps pdf - -dirs: - $(make-dirs) - -COMMON_FILES=../../common/cpright.texi ../../common/setup.texi - -GENERATED_FILES=\ - cpumodel.texi callconv.texi memmodel.texi intr.texi fatalerr.texi \ - bsp.texi cputable.texi timing.texi wksheets.texi timeCVME961.texi - -FILES= $(PROJECT).texi \ - preface.texi \ - $(GENERATED_FILES) - -info: dirs c_i960 - cp c_$(PROJECT) $(INFO_INSTALL) - -c_i960: $(FILES) - $(MAKEINFO) $(PROJECT).texi - -dvi: dirs $(PROJECT).dvi -ps: dirs $(PROJECT).ps -pdf: dirs $(PROJECT).pdf - -$(PROJECT).pdf: $(FILES) - $(TEXI2PDF) $(PROJECT).texi - cp $(PROJECT).pdf $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).ps: $(PROJECT).dvi - dvips -o $(PROJECT).ps $(PROJECT).dvi - cp $(PROJECT).ps $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).dvi: $(FILES) - $(TEXI2DVI) $(PROJECT).texi - cp $(PROJECT).dvi $(WWW_INSTALL)/$(PROJECT) - -html: dirs $(FILES) - -mkdir -p $(WWW_INSTALL)/$(PROJECT) - $(TEXI2WWW) $(TEXI2WWW_ARGS) -dir $(WWW_INSTALL)/$(PROJECT) \ - $(PROJECT).texi - -clean: - rm -f *.o $(PROG) *.txt core $(PROJECT).pdf - rm -f *.dvi *.ps *.log *.aux *.cp *.fn *.ky *.pg *.toc *.tp *.vr $(BASE) - rm -f $(PROJECT) $(PROJECT)-* - rm -f c_i960 c_i960-* - rm -f intr.t $(GENERATED_FILES) - rm -f wksheets.t wksheets_NOTIMES.t - rm -f *.fixed _* timing.t timing.texi - rm -f timeCVME961_.t timeCVME961_.texi - -# -# Chapters which get automatic processing -# - -cpumodel.texi: cpumodel.t Makefile - $(BMENU) -p "Preface" \ - -u "Top" \ - -n "Calling Conventions" ${*}.t - -callconv.texi: callconv.t Makefile - $(BMENU) -p "CPU Model Dependent Features Floating Point Unit" \ - -u "Top" \ - -n "Memory Model" ${*}.t - -memmodel.texi: memmodel.t Makefile - $(BMENU) -p "Calling Conventions Leaf Procedures" \ - -u "Top" \ - -n "Interrupt Processing" ${*}.t - -# Interrupt Chapter: -# 1. Replace Times and Sizes -# 2. Build Node Structure -intr.t: intr_NOTIMES.t CVME961_TIMES - ${REPLACE} -p CVME961_TIMES intr_NOTIMES.t - mv intr_NOTIMES.t.fixed intr.t - -intr.texi: intr.t Makefile - $(BMENU) -p "Memory Model Flat Memory Model" \ - -u "Top" \ - -n "Default Fatal Error Processing" ${*}.t - -fatalerr.texi: fatalerr.t Makefile - $(BMENU) -p "Interrupt Processing Interrupt Stack" \ - -u "Top" \ - -n "Board Support Packages" ${*}.t - -bsp.texi: bsp.t Makefile - $(BMENU) -p "Default Fatal Error Processing Default Fatal Error Handler Operations" \ - -u "Top" \ - -n "Processor Dependent Information Table" ${*}.t - -cputable.texi: cputable.t Makefile - $(BMENU) -p "Board Support Packages Processor Initialization" \ - -u "Top" \ - -n "Memory Requirements" ${*}.t - - -# Worksheets Chapter: -# 1. Obtain the Shared File -# 2. Replace Times and Sizes -# 3. Build Node Structure - -wksheets_NOTIMES.t: ../../common/wksheets.t - cp ../../common/wksheets.t wksheets_NOTIMES.t - -wksheets.t: wksheets_NOTIMES.t CVME961_TIMES - ${REPLACE} -p CVME961_TIMES wksheets_NOTIMES.t - mv wksheets_NOTIMES.t.fixed wksheets.t - -wksheets.texi: wksheets.t Makefile - $(BMENU) -p "Processor Dependent Information Table CPU Dependent Information Table" \ - -u "Top" \ - -n "Timing Specification" ${*}.t - -# Timing Specification Chapter: -# 1. Copy the Shared File -# 3. Build Node Structure - -timing.t: ../../common/timing.t - cp ../../common/timing.t timing.t - -timing.texi: timing.t Makefile - $(BMENU) -p "Memory Requirements RTEMS RAM Workspace Worksheet" \ - -u "Top" \ - -n "CVME961 Timing Data" ${*}.t - -# Timing Data for BSP Chapter: -# 1. Copy the Shared File -# 2. Replace Times and Sizes -# 3. Build Node Structure - -timeCVME961_.t: ../../common/timetbl.t timeCVME961.t - cat timeCVME961.t ../../common/timetbl.t >timeCVME961_.t - @echo >>timeCVME961_.t - @echo "@tex" >>timeCVME961_.t - @echo "\\global\\advance \\smallskipamount by 4pt" >>timeCVME961_.t - @echo "@end tex" >>timeCVME961_.t - ${REPLACE} -p CVME961_TIMES timeCVME961_.t - mv timeCVME961_.t.fixed timeCVME961_.t - -timeCVME961.texi: timeCVME961_.t Makefile - $(BMENU) -p "Timing Specification Terminology" \ - -u "Top" \ - -n "Command and Variable Index" timeCVME961_.t - mv timeCVME961_.texi timeCVME961.texi diff --git a/doc/supplements/i960/Makefile.am b/doc/supplements/i960/Makefile.am new file mode 100644 index 0000000000..b78decbc92 --- /dev/null +++ b/doc/supplements/i960/Makefile.am @@ -0,0 +1,116 @@ +# +# COPYRIGHT (c) 1988-1999. +# On-Line Applications Research Corporation (OAR). +# All rights reserved. +# +# $Id$ +# + +AUTOMAKE_OPTIONS = foreign + +PROJECT=i960 + +include $(top_srcdir)/project.am +include $(top_srcdir)/supplements/supplement.am + +COMMON_FILES=$(top_srcdir)/common/cpright.texi $(top_builddir)/common/setup.texi + +GENERATED_FILES=\ + cpumodel.texi callconv.texi memmodel.texi intr.texi fatalerr.texi \ + bsp.texi cputable.texi timing.texi wksheets.texi timeCVME961.texi + +FILES= preface.texi + +info_TEXINFOS = i960.texi +i960_TEXINFOS = $(FILES) $(COMMON_FILES) $(GENERATED_FILES) + +# +# Chapters which get automatic processing +# + +cpumodel.texi: cpumodel.t + $(BMENU) -p "Preface" \ + -u "Top" \ + -n "Calling Conventions" $< + +callconv.texi: callconv.t + $(BMENU) -p "CPU Model Dependent Features Floating Point Unit" \ + -u "Top" \ + -n "Memory Model" $< + +memmodel.texi: memmodel.t + $(BMENU) -p "Calling Conventions Leaf Procedures" \ + -u "Top" \ + -n "Interrupt Processing" $< + +# Interrupt Chapter: +# 1. Replace Times and Sizes +# 2. Build Node Structure +intr.texi: intr_NOTIMES.t CVME961_TIMES + ${REPLACE2} -p $(srcdir)/CVME961_TIMES $(srcdir)/intr_NOTIMES.t intr.t + $(BMENU) -p "Memory Model Flat Memory Model" \ + -u "Top" \ + -n "Default Fatal Error Processing" intr.t +CLEANFILES += intr.t + +fatalerr.texi: fatalerr.t + $(BMENU) -p "Interrupt Processing Interrupt Stack" \ + -u "Top" \ + -n "Board Support Packages" $< + +bsp.texi: bsp.t + $(BMENU) -p "Default Fatal Error Processing Default Fatal Error Handler Operations" \ + -u "Top" \ + -n "Processor Dependent Information Table" $< + +cputable.texi: cputable.t + $(BMENU) -p "Board Support Packages Processor Initialization" \ + -u "Top" \ + -n "Memory Requirements" $< + + +# Worksheets Chapter: +# 1. Obtain the Shared File +# 2. Replace Times and Sizes +# 3. Build Node Structure + +wksheets.texi: $(top_srcdir)/common/wksheets.t CVME961_TIMES + ${REPLACE2} -p $(srcdir)/CVME961_TIMES \ + $(top_srcdir)/common/wksheets.t wksheets.t + $(BMENU) -p "Processor Dependent Information Table CPU Dependent Information Table" \ + -u "Top" \ + -n "Timing Specification" wksheets.t +CLEANFILES += wksheets.t + +# Timing Specification Chapter: +# 1. Copy the Shared File +# 3. Build Node Structure + +timing.texi: $(top_srcdir)/common/timing.t + cp $(top_srcdir)/common/timing.t timing.t + $(BMENU) -p "Memory Requirements RTEMS RAM Workspace Worksheet" \ + -u "Top" \ + -n "CVME961 Timing Data" timing.t +CLEANFILES += timing.t + +# Timing Data for BSP Chapter: +# 1. Copy the Shared File +# 2. Replace Times and Sizes +# 3. Build Node Structure + +timeCVME961_.t: $(top_srcdir)/common/timetbl.t timeCVME961.t + cat timeCVME961.t $(top_srcdir)/common/timetbl.t >timeCVME961_.t + @echo >>timeCVME961_.t + @echo "@tex" >>timeCVME961_.t + @echo "\\global\\advance \\smallskipamount by 4pt" >>timeCVME961_.t + @echo "@end tex" >>timeCVME961_.t + ${REPLACE} -p CVME961_TIMES timeCVME961_.t + mv timeCVME961_.t.fixed timeCVME961_.t + +timeCVME961.texi: timeCVME961_.t + $(BMENU) -p "Timing Specification Terminology" \ + -u "Top" \ + -n "Command and Variable Index" timeCVME961_.t + mv timeCVME961_.texi timeCVME961.texi + +EXTRA_DIST = CVME961_TIMES *.t diff --git a/doc/supplements/i960/i960.texi b/doc/supplements/i960/i960.texi index 68b7944afe..ccfc372a7b 100644 --- a/doc/supplements/i960/i960.texi +++ b/doc/supplements/i960/i960.texi @@ -1,6 +1,6 @@ \input texinfo @c -*-texinfo-*- @c %**start of header -@setfilename c_i960 +@setfilename i960 @syncodeindex vr fn @synindex ky cp @paragraphindent 0 @@ -75,7 +75,7 @@ END-INFO-DIR-ENTRY @include timeCVME961.texi @ifinfo @node Top, Preface, (dir), (dir) -@top c_i960 +@top i960 This is the online version of the RTEMS Intel i960 Applications Supplement. diff --git a/doc/supplements/i960/timeCVME961_.t b/doc/supplements/i960/timeCVME961_.t new file mode 100644 index 0000000000..22c0dafe7a --- /dev/null +++ b/doc/supplements/i960/timeCVME961_.t @@ -0,0 +1,1422 @@ +@c +@c COPYRIGHT (c) 1988-1999. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@include ../../common/timemac.texi +@tex +\global\advance \smallskipamount by -4pt +@end tex + +@chapter CVME961 Timing Data + +NOTE: The CVME961 board used by the RTEMS Project to +obtain i960CA times is currently broken. The information in +this chapter was obtained using Release 3.2.1. + +@section Introduction + +The timing data for the i960CA version of RTEMS is +provided along with the target dependent aspects concerning the +gathering of the timing data. The hardware platform used to +gather the times is described to give the reader a better +understanding of each directive time provided. Also, provided +is a description of the interrupt latency and the context +switch times as they pertain to the i960CA version of RTEMS. + +@section Hardware Platform + +All times reported except for the maximum period +interrupts are disabled by RTEMS were measured using a Cyclone +Microsystems CVME961 board. The CVME961 is a 33 Mhz board with +dynamic RAM which has two wait state dynamic memory (four CPU +cycles) for read accesses and one wait state (two CPU cycles) +for write accesses. The Z8536 on a SQUALL SQSIO4 mezzanine +board was used to measure elapsed time with one-half microsecond +resolution. All sources of hardware interrupts are disabled, +although the interrupt level of the i960CA allows all interrupts. + +The maximum interrupt disable period was measured by +summing the number of CPU cycles required by each assembly +language instruction executed while interrupts were disabled. +Zero wait state memory was assumed. The total CPU cycles +executed with interrupts disabled, including the instructions to +disable and enable interrupts, was divided by 33 to simulate a +i960CA executing at 33 Mhz with zero wait states. + +@section Interrupt Latency + +The maximum period with interrupts disabled within +RTEMS is less than +2.5 microseconds including the instructions +which disable and re-enable interrupts. The time required for +the i960CA to generate an interrupt using the sysctl +instruction, vectoring to an interrupt handler, and for the +RTEMS entry overhead before invoking the user's interrupt +handler are a total of 37 +microseconds. These combine to yield +a worst case interrupt latency of less than +2.5 + 37 +microseconds. [NOTE: The maximum period with interrupts +disabled within RTEMS was last calculated for Release +3.2.1.] + +It should be noted again that the maximum period with +interrupts disabled within RTEMS is hand-timed. The interrupt +vector and entry overhead time was generated on the Cyclone +CVME961 benchmark platform using the sysctl instruction as the +interrupt source. + +@section Context Switch + +The RTEMS processor context switch time is 1 +microseconds on the Cyclone CVME961 benchmark platform. This +time represents the raw context switch time with no user +extensions configured. Additional execution time is required +when a TSWITCH user extension is configured. The use of the +TSWITCH extension is application dependent. Thus, its execution +time is not considered part of the base context switch time. + +The CVME961 has no hardware floating point capability +and floating point tasks are not supported. + +The following table summarizes the context switch +times for the CVME961 benchmark platform: + +@c ****** This comment is here to remind you not to edit the timetbl.t +@c ****** in any directory but common. +@c +@c Time Table Template +@c +@c COPYRIGHT (c) 1988-1999. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@ifset use-tex +@sp 1 +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{No Floating Point Contexts}{1} +\rtemsdirective{Floating Point Contexts} +\rtemscase{restore first FP task}{2} +\rtemscase{save initialized, restore initialized}{3} +\rtemscase{save idle, restore initialized}{4} +\rtemscase{save idle, restore idle}{5} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet +@item No Floating Point Contexts +@itemize - +@item only case: 1 +@end itemize +@item Floating Point Contexts +@itemize - +@item restore first FP task: 2 +@item save initialized, restore initialized: 3 +@item save idle, restore initialized: 4 +@item save idle, restore idle: 4 +@end itemize +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + +
    No Floating Point Contexts1
    Floating Point Contexts
    restore first FP task
    2
    save initialized, restore initialized
    3
    save idle, restore initialized
    4
    save idle, restore idle
    5
    +
    +@end html +@end ifset + +@section Directive Times + +This sections is divided into a number of +subsections, each of which contains a table listing the +execution times of that manager's directives. + +@page +@section Task Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{TASK\_CREATE}{6} +\rtemsonecase{TASK\_IDENT}{7} +\rtemsonecase{TASK\_START}{8} +\rtemsdirective{TASK\_RESTART} +\rtemscase{calling task}{9} +\rtemscase{suspended task -- returns to caller} + {9} +\rtemscase{blocked task -- returns to caller} + {10} +\rtemscase{ready task -- returns to caller} + {11} +\rtemscase{suspended task -- preempts caller} + {12} +\rtemscase{blocked task -- preempts caller} + {13} +\rtemscase{ready task -- preempts caller} + {14} +\rtemsdirective{TASK\_DELETE} +\rtemscase{calling task}{15} +\rtemscase{suspended task}{16} +\rtemscase{blocked task}{17} +\rtemscase{ready task}{18} +\rtemsdirective{TASK\_SUSPEND} +\rtemscase{calling task}{19} +\rtemscase{returns to caller}{20} +\rtemsdirective{TASK\_RESUME} +\rtemscase{task readied -- returns to caller} + {21} +\rtemscase{task readied -- preempts caller} + {22} +\rtemsdirective{TASK\_SET\_PRIORITY} +\rtemscase{obtain current priority} + {23} +\rtemscase{returns to caller}{24} +\rtemscase{preempts caller}{25} +\rtemsdirective{TASK\_MODE} +\rtemscase{obtain current mode}{26} +\rtemscase{no reschedule}{27} +\rtemscase{reschedule -- returns to caller} + {28} +\rtemscase{reschedule -- preempts caller} + {29} +\rtemsonecase{TASK\_GET\_NOTE}{30} +\rtemsonecase{TASK\_SET\_NOTE}{31} +\rtemsdirective{TASK\_WAKE\_AFTER} +\rtemscase{yield -- returns to caller} + {32} +\rtemscase{yield -- preempts caller} + {33} +\rtemsonecase{TASK\_WAKE\_WHEN}{34} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item TASK_CREATE +@itemize - +@item only case: 6 +@end itemize + +@item TASK_IDENT +@itemize - +@item only case: 7 +@end itemize + +@item TASK_START +@itemize - +@item only case: 8 +@end itemize + +@item TASK_RESTART +@itemize - +@item calling task: 9 +@item suspended task -- returns to caller: 9 +@item blocked task -- returns to caller: 10 +@item ready task -- returns to caller: 11 +@item suspended task -- preempts caller: 12 +@item blocked task -- preempts caller: 13 +@item ready task -- preempts caller: 14 +@end itemize + +@item TASK_DELETE +@itemize - +@item calling task: 15 +@item suspended task: 16 +@item blocked task: 17 +@item ready task: 18 +@end itemize + +@item TASK_SUSPEND +@itemize - +@item calling task: 19 +@item returns to caller: 20 +@end itemize + +@item TASK_RESUME +@itemize - +@item task readied -- returns to caller: 21 +@item task readied -- preempts caller: 22 +@end itemize + +@item TASK_SET_PRIORITY +@itemize - +@item obtain current priority: 23 +@item returns to caller: 24 +@item preempts caller: 25 +@end itemize + +@item TASK_MODE +@itemize - +@item obtain current mode: 26 +@item no reschedule: 27 +@item reschedule -- returns to caller: 28 +@item reschedule -- preempts caller: 29 +@end itemize + +@item TASK_GET_NOTE +@itemize - +@item only case: 30 +@end itemize + +@item TASK_SET_NOTE +@itemize - +@item only case: 31 +@end itemize + +@item TASK_WAKE_AFTER +@itemize - +@item yield -- returns to caller: 32 +@item yield -- preempts caller: 33 +@end itemize + +@item TASK_WAKE_WHEN +@itemize - +@item only case: 34 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TASK_CREATE6
    TASK_IDENT7
    TASK_START8
    TASK_RESTART
    calling task
    9
    suspended task -- returns to caller
    9
    blocked task -- returns to caller
    10
    ready task -- returns to caller
    11
    suspended task -- preempts caller
    12
    blocked task -- preempts caller
    13
    ready task -- preempts caller
    14
    TASK_DELETE
    calling task
    15
    suspended task
    16
    blocked task
    17
    ready task
    18
    TASK_SUSPEND
    calling task
    19
    returns to caller
    20
    TASK_RESUME
    task readied -- returns to caller
    21
    task readied -- preempts caller
    22
    TASK_SET_PRIORITY
    obtain current priority
    23
    returns to caller
    24
    preempts caller
    25
    TASK_MODE
    obtain current mode
    26
    no reschedule
    27
    reschedule -- returns to caller
    28
    reschedule -- preempts caller
    29
    TASK_GET_NOTE30
    TASK_SET_NOTE31
    TASK_WAKE_AFTER
    yield -- returns to caller
    32
    yield -- preempts caller
    33
    TASK_WAKE_WHEN34
    +
    +@end html +@end ifset + +@page +@section Interrupt Manager + +It should be noted that the interrupt entry times +include vectoring the interrupt handler. + +@ifset use-tex +@sp 1 +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsdirective{Interrupt Entry Overhead} +\rtemscase{returns to nested interrupt}{35} +\rtemscase{returns to interrupted task} + {36} +\rtemscase{returns to preempting task} + {37} +\rtemsdirective{Interrupt Exit Overhead} +\rtemscase{returns to nested interrupt}{38} +\rtemscase{returns to interrupted task} + {39} +\rtemscase{returns to preempting task} + {40} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item Interrupt Entry Overhead +@itemize - +@item returns to nested interrupt: 35 +@item returns to interrupted task: 36 +@item returns to preempting task: 37 +@end itemize + +@item Interrupt Exit Overhead +@itemize - +@item returns to nested interrupt: 38 +@item returns to interrupted task: 39 +@item returns to preempting task: 40 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + +
    Interrupt Entry Overhead
    returns to nested interrupt
    35
    returns to interrupted task
    36
    returns to preempting task
    37
    Interrupt Exit Overhead
    returns to nested interrupt
    38
    returns to interrupted task
    39
    returns to preempting task
    40
    +
    +@end html +@end ifset + + +@section Clock Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{CLOCK\_SET}{41} +\rtemsonecase{CLOCK\_GET}{42} +\rtemsonecase{CLOCK\_TICK}{43} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item CLOCK_SET +@itemize - +@item only case: 41 +@end itemize + +@item CLOCK_GET +@itemize - +@item only case: 42 +@end itemize + +@item CLOCK_TICK +@itemize - +@item only case: 43 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + +
    CLOCK_SET41
    CLOCK_GET42
    CLOCK_TICK43
    +
    +@end html +@end ifset + +@section Timer Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{TIMER\_CREATE}{44} +\rtemsonecase{TIMER\_IDENT}{45} +\rtemsdirective{TIMER\_DELETE} +\rtemscase{inactive}{46} +\rtemscase{active}{47} +\rtemsdirective{TIMER\_FIRE\_AFTER} +\rtemscase{inactive}{48} +\rtemscase{active}{49} +\rtemsdirective{TIMER\_FIRE\_WHEN} +\rtemscase{inactive}{50} +\rtemscase{active}{51} +\rtemsdirective{TIMER\_RESET} +\rtemscase{inactive}{52} +\rtemscase{active}{53} +\rtemsdirective{TIMER\_CANCEL} +\rtemscase{inactive}{54} +\rtemscase{active}{55} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item TIMER_CREATE +@itemize - +@item only case: 44 +@end itemize + +@item TIMER_IDENT +@itemize - +@item only case: 45 +@end itemize + +@item TIMER_DELETE +@itemize - +@item inactive: 46 +@item active: 47 +@end itemize + +@item TIMER_FIRE_AFTER +@itemize - +@item inactive: 48 +@item active: 49 +@end itemize + +@item TIMER_FIRE_WHEN +@itemize - +@item inactive: TIMER_FIRE_WHEN_INACTIVE +@item active: TIMER_FIRE_WHEN_ACTIVE +@end itemize + +@item TIMER_RESET +@itemize - +@item inactive: TIMER_RESET_INACTIVE +@item active: TIMER_RESET_ACTIVE +@end itemize + +@item TIMER_CANCEL +@itemize - +@item inactive: TIMER_CANCEL_INACTIVE +@item active: TIMER_CANCEL_ACTIVE +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TIMER_CREATE44
    TIMER_IDENT45
    TIMER_DELETE
    inactive
    46
    active
    47
    TIMER_FIRE_AFTER
    inactive
    48
    active
    49
    TIMER_FIRE_WHEN
    inactive
    50
    active
    51
    TIMER_RESET
    inactive
    52
    active
    53
    TIMER_CANCEL
    inactive
    54
    active
    55
    +
    +@end html +@end ifset + +@page +@section Semaphore Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{SEMAPHORE\_CREATE}{56} +\rtemsonecase{SEMAPHORE\_IDENT}{57} +\rtemsonecase{SEMAPHORE\_DELETE}{58} +\rtemsdirective{SEMAPHORE\_OBTAIN} +\rtemscase{available}{59} +\rtemscase{not available -- NO\_WAIT} + {60} +\rtemscase{not available -- caller blocks} + {61} +\rtemsdirective{SEMAPHORE\_RELEASE} +\rtemscase{no waiting tasks}{62} +\rtemscase{task readied -- returns to caller} + {63} +\rtemscase{task readied -- preempts caller} + {64} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item SEMAPHORE_CREATE +@itemize - +@item only case: 56 +@end itemize + +@item SEMAPHORE_IDENT +@itemize - +@item only case: 57 +@end itemize + +@item SEMAPHORE_DELETE +@itemize - +@item only case: 58 +@end itemize + +@item SEMAPHORE_OBTAIN +@itemize - +@item available: 59 +@item not available -- NO_WAIT: 60 +@item not available -- caller blocks: 61 +@end itemize + +@item SEMAPHORE_RELEASE +@itemize - +@item no waiting tasks: 62 +@item task readied -- returns to caller: 63 +@item task readied -- preempts caller: 64 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + +
    SEMAPHORE_CREATE56
    SEMAPHORE_IDENT57
    SEMAPHORE_DELETE58
    SEMAPHORE_OBTAIN
    available
    59
    not available -- NO_WAIT
    60
    not available -- caller blocks
    61
    SEMAPHORE_RELEASE
    no waiting tasks
    62
    task readied -- returns to caller
    63
    task readied -- preempts caller
    64
    +
    +@end html +@end ifset + +@section Message Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{MESSAGE\_QUEUE\_CREATE}{65} +\rtemsonecase{MESSAGE\_QUEUE\_IDENT}{66} +\rtemsonecase{MESSAGE\_QUEUE\_DELETE}{67} +\rtemsdirective{MESSAGE\_QUEUE\_SEND} +\rtemscase{no waiting tasks} + {68} +\rtemscase{task readied -- returns to caller} + {69} +\rtemscase{task readied -- preempts caller} + {70} +\rtemsdirective{MESSAGE\_QUEUE\_URGENT} +\rtemscase{no waiting tasks}{71} +\rtemscase{task readied -- returns to caller} + {72} +\rtemscase{task readied -- preempts caller} + {73} +\rtemsdirective{MESSAGE\_QUEUE\_BROADCAST} +\rtemscase{no waiting tasks}{74} +\rtemscase{task readied -- returns to caller} + {75} +\rtemscase{task readied -- preempts caller} + {76} +\rtemsdirective{MESSAGE\_QUEUE\_RECEIVE} +\rtemscase{available}{77} +\rtemscase{not available -- NO\_WAIT} + {78} +\rtemscase{not available -- caller blocks} + {79} +\rtemsdirective{MESSAGE\_QUEUE\_FLUSH} +\rtemscase{no messages flushed}{80} +\rtemscase{messages flushed}{81} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item MESSAGE_QUEUE_CREATE +@itemize - +@item only case: 65 +@end itemize + +@item MESSAGE_QUEUE_IDENT +@itemize - +@item only case: 66 +@end itemize + +@item MESSAGE_QUEUE_DELETE +@itemize - +@item only case: 67 +@end itemize + +@item MESSAGE_QUEUE_SEND +@itemize - +@item no waiting tasks: 68 +@item task readied -- returns to caller: 69 +@item task readied -- preempts caller: 70 +@end itemize + +@item MESSAGE_QUEUE_URGENT +@itemize - +@item no waiting tasks: 71 +@item task readied -- returns to caller: 72 +@item task readied -- preempts caller: 73 +@end itemize + +@item MESSAGE_QUEUE_BROADCAST +@itemize - +@item no waiting tasks: 74 +@item task readied -- returns to caller: 75 +@item task readied -- preempts caller: 76 +@end itemize + +@item MESSAGE_QUEUE_RECEIVE +@itemize - +@item available: 77 +@item not available -- NO_WAIT: 78 +@item not available -- caller blocks: 79 +@end itemize + +@item MESSAGE_QUEUE_FLUSH +@itemize - +@item no messages flushed: 80 +@item messages flushed: 81 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    MESSAGE_QUEUE_CREATE65
    MESSAGE_QUEUE_IDENT66
    MESSAGE_QUEUE_DELETE67
    MESSAGE_QUEUE_SEND
    no waiting tasks
    68
    task readied -- returns to caller
    69
    task readied -- preempts caller
    70
    MESSAGE_QUEUE_URGENT
    no waiting tasks
    71
    task readied -- returns to caller
    72
    task readied -- preempts caller
    73
    MESSAGE_QUEUE_BROADCAST
    no waiting tasks
    74
    task readied -- returns to caller
    75
    task readied -- preempts caller
    76
    MESSAGE_QUEUE_RECEIVE
    available
    77
    not available -- NO_WAIT
    78
    not available -- caller blocks
    79
    MESSAGE_QUEUE_FLUSH
    no messages flushed
    80
    messages flushed
    81
    +
    +@end html +@end ifset + +@page +@section Event Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsdirective{EVENT\_SEND} +\rtemscase{no task readied}{82} +\rtemscase{task readied -- returns to caller} + {83} +\rtemscase{task readied -- preempts caller} + {84} +\rtemsdirective{EVENT\_RECEIVE} +\rtemscase{obtain current events}{85} +\rtemscase{available}{86} +\rtemscase{not available -- NO\_WAIT}{87} +\rtemscase{not available -- caller blocks} + {88} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item EVENT_SEND +@itemize - +@item no task readied: 82 +@item task readied -- returns to caller: 83 +@item task readied -- preempts caller: 84 +@end itemize + +@item EVENT_RECEIVE +@itemize - +@item obtain current events: 85 +@item available: 86 +@item not available -- NO_WAIT: 87 +@item not available -- caller blocks: 88 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + +
    EVENT_SEND
    no task readied
    82
    task readied -- returns to caller
    83
    task readied -- preempts caller
    84
    EVENT_RECEIVE
    obtain current events
    85
    available
    86
    not available -- NO_WAIT
    87
    not available -- caller blocks
    88
    +
    +@end html +@end ifset +@section Signal Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{SIGNAL\_CATCH}{89} +\rtemsdirective{SIGNAL\_SEND} +\rtemscase{returns to caller}{90} +\rtemscase{signal to self}{91} +\rtemsdirective{EXIT ASR OVERHEAD} +\rtemscase{returns to calling task} + {92} +\rtemscase{returns to preempting task} + {93} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet +@item SIGNAL_CATCH +@itemize - +@item only case: 89 +@end itemize + +@item SIGNAL_SEND +@itemize - +@item returns to caller: 90 +@item signal to self: 91 +@end itemize + +@item EXIT ASR OVERHEAD +@itemize - +@item returns to calling task: 92 +@item returns to preempting task: 93 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + +
    SIGNAL_CATCH89
    SIGNAL_SEND
    returns to caller
    90
    signal to self
    91
    EXIT ASR OVERHEAD
    returns to calling task
    + 92
    returns to preempting task
    + 93
    +
    +@end html +@end ifset + +@section Partition Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{PARTITION\_CREATE}{94} +\rtemsonecase{PARTITION\_IDENT}{95} +\rtemsonecase{PARTITION\_DELETE}{96} +\rtemsdirective{PARTITION\_GET\_BUFFER} +\rtemscase{available}{97} +\rtemscase{not available}{98} +\rtemsonecase{PARTITION\_RETURN\_BUFFER} + {98} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item PARTITION_CREATE +@itemize - +@item only case: 94 +@end itemize + +@item PARTITION_IDENT +@itemize - +@item only case: 95 +@end itemize + +@item PARTITION_DELETE +@itemize - +@item only case: 96 +@end itemize + +@item PARTITION_GET_BUFFER +@itemize - +@item available: 97 +@item not available: 98 +@end itemize + +@item PARTITION_RETURN_BUFFER +@itemize - +@item only case: 99 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + +
    PARTITION_CREATE94
    PARTITION_IDENT95
    PARTITION_DELETE96
    PARTITION_GET_BUFFER
    available
    97
    not available
    98
    PARTITION_RETURN_BUFFER98
    +
    +@end html +@end ifset + +@page +@section Region Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{REGION\_CREATE}{100} +\rtemsonecase{REGION\_IDENT}{101} +\rtemsonecase{REGION\_DELETE}{102} +\rtemsdirective{REGION\_GET\_SEGMENT} +\rtemscase{available}{103} +\rtemscase{not available -- NO\_WAIT} + {104} +\rtemscase{not available -- caller blocks} + {105} +\rtemsdirective{REGION\_RETURN\_SEGMENT} +\rtemscase{no waiting tasks}{106} +\rtemscase{task readied -- returns to caller} + {107} +\rtemscase{task readied -- preempts caller} + {108} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item REGION_CREATE +@itemize - +@item only case: 100 +@end itemize + +@item REGION_IDENT +@itemize - +@item only case: 101 +@end itemize + +@item REGION_DELETE +@itemize - +@item only case: 102 +@end itemize + +@item REGION_GET_SEGMENT +@itemize - +@item available: 103 +@item not available -- NO_WAIT: 104 +@item not available -- caller blocks: 105 +@end itemize + +@item REGION_RETURN_SEGMENT +@itemize - +@item no waiting tasks: 106 +@item task readied -- returns to caller: 107 +@item task readied -- preempts caller: 108 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + +
    REGION_CREATE100
    REGION_IDENT101
    REGION_DELETE102
    REGION_GET_SEGMENT
    available
    103
    not available -- NO_WAIT
    + 104
    not available -- caller blocks
    + 105
    REGION_RETURN_SEGMENT
    no waiting tasks
    106
    task readied -- returns to caller
    + 107
    task readied -- preempts caller
    + 108
    +
    +@end html +@end ifset + +@section Dual-Ported Memory Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{PORT\_CREATE}{109} +\rtemsonecase{PORT\_IDENT}{110} +\rtemsonecase{PORT\_DELETE}{111} +\rtemsonecase{PORT\_INTERNAL\_TO\_EXTERNAL} + {112} +\rtemsonecase{PORT\_EXTERNAL\_TO\_INTERNAL} + {113} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item PORT_CREATE +@itemize - +@item only case: 109 +@end itemize + +@item PORT_IDENT +@itemize - +@item only case: 110 +@end itemize + +@item PORT_DELETE +@itemize - +@item only case: 111 +@end itemize + +@item PORT_INTERNAL_TO_EXTERNAL +@itemize - +@item only case: 112 +@end itemize + +@item PORT_EXTERNAL_TO_INTERNAL +@itemize - +@item only case: 113 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + +
    PORT_CREATE109
    PORT_IDENT110
    PORT_DELETE111
    PORT_INTERNAL_TO_EXTERNAL112
    PORT_EXTERNAL_TO_INTERNAL113
    +
    +@end html +@end ifset + +@section I/O Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{IO\_INITIALIZE}{114} +\rtemsonecase{IO\_OPEN}{115} +\rtemsonecase{IO\_CLOSE}{116} +\rtemsonecase{IO\_READ}{117} +\rtemsonecase{IO\_WRITE}{118} +\rtemsonecase{IO\_CONTROL}{119} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item IO_INITIALIZE +@itemize - +@item only case: 114 +@end itemize + +@item IO_OPEN +@itemize - +@item only case: 115 +@end itemize + +@item IO_CLOSE +@itemize - +@item only case: 116 +@end itemize + +@item IO_READ +@itemize - +@item only case: 117 +@end itemize + +@item IO_WRITE +@itemize - +@item only case: 118 +@end itemize + +@item IO_CONTROL +@itemize - +@item only case: 119 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + +
    IO_INITIALIZE114
    IO_OPEN115
    IO_CLOSE116
    IO_READ117
    IO_WRITE118
    IO_CONTROL119
    +
    +@end html +@end ifset + +@section Rate Monotonic Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{RATE\_MONOTONIC\_CREATE}{120} +\rtemsonecase{RATE\_MONOTONIC\_IDENT}{121} +\rtemsonecase{RATE\_MONOTONIC\_CANCEL}{122} +\rtemsdirective{RATE\_MONOTONIC\_DELETE} +\rtemscase{active}{123} +\rtemscase{inactive}{124} +\rtemsdirective{RATE\_MONOTONIC\_PERIOD} +\rtemscase{initiate period -- returns to caller} + {125} +\rtemscase{conclude period -- caller blocks} + {126} +\rtemscase{obtain status}{127} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item RATE_MONOTONIC_CREATE +@itemize - +@item only case: 120 +@end itemize + +@item RATE_MONOTONIC_IDENT +@itemize - +@item only case: 121 +@end itemize + +@item RATE_MONOTONIC_CANCEL +@itemize - +@item only case: 122 +@end itemize + +@item RATE_MONOTONIC_DELETE +@itemize - +@item active: 123 +@item inactive: 124 +@end itemize + +@item RATE_MONOTONIC_PERIOD +@itemize - +@item initiate period -- returns to caller: 125 +@item conclude period -- caller blocks: 126 +@item obtain status: 127 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + +
    RATE_MONOTONIC_CREATE120
    RATE_MONOTONIC_IDENT121
    RATE_MONOTONIC_CANCEL122
    RATE_MONOTONIC_DELETE
    active
    123
    inactive
    124
    RATE_MONOTONIC_PERIOD
    initiate period -- returns to caller
    + 125
    conclude period -- caller blocks
    + 126
    obtain status
    127
    +
    +@end html +@end ifset + +@tex +\global\advance \smallskipamount by 4pt +@end tex + +@tex +\global\advance \smallskipamount by 4pt +@end tex diff --git a/doc/supplements/m68k/Makefile b/doc/supplements/m68k/Makefile deleted file mode 100644 index 2dd342c0f2..0000000000 --- a/doc/supplements/m68k/Makefile +++ /dev/null @@ -1,170 +0,0 @@ -# -# COPYRIGHT (c) 1988-1999. -# On-Line Applications Research Corporation (OAR). -# All rights reserved. -# -# $Id$ -# - -PROJECT=m68k - -include ../../Make.config - -REPLACE=../../tools/word-replace - -all: html info ps pdf - -dirs: - $(make-dirs) - -COMMON_FILES=../../common/cpright.texi ../../common/setup.texi - -GENERATED_FILES=\ - cpumodel.texi callconv.texi memmodel.texi intr.texi fatalerr.texi \ - bsp.texi cputable.texi timing.texi wksheets.texi timeMVME136.texi - -FILES= $(PROJECT).texi \ - preface.texi \ - $(GENERATED_FILES) - -info: dirs c_m68k - cp c_$(PROJECT) c_$(PROJECT)-* $(INFO_INSTALL) - -c_m68k: $(FILES) - $(MAKEINFO) $(PROJECT).texi - -dvi: dirs $(PROJECT).dvi -ps: dirs $(PROJECT).ps -pdf: dirs $(PROJECT).pdf - -$(PROJECT).pdf: $(FILES) - $(TEXI2PDF) $(PROJECT).texi - cp $(PROJECT).pdf $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).ps: $(PROJECT).dvi - dvips -o $(PROJECT).ps $(PROJECT).dvi - cp $(PROJECT).ps $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).dvi: $(FILES) - $(TEXI2DVI) $(PROJECT).texi - cp $(PROJECT).dvi $(WWW_INSTALL)/$(PROJECT) - -html: dirs $(FILES) - -mkdir -p $(WWW_INSTALL)/$(PROJECT) - $(TEXI2WWW) $(TEXI2WWW_ARGS) -dir $(WWW_INSTALL)/$(PROJECT) \ - $(PROJECT).texi - -clean: - rm -f *.o $(PROG) *.txt core $(PROJECT).pdf - rm -f *.dvi *.ps *.log *.aux *.cp *.fn *.ky *.pg *.toc *.tp *.vr $(BASE) - rm -f $(PROJECT) $(PROJECT)-* - rm -f c_m68k c_m68k-* - rm -f intr.t $(GENERATED_FILES) - rm -f wksheets.t wksheets_NOTIMES.t - rm -f timeMVME136_.t timeMVME136_.texi - rm -f *.fixed _* timing.t - -# -# Chapters which get automatic processing -# - -cpumodel.texi: cpumodel.t Makefile - $(BMENU) -p "Preface" \ - -u "Top" \ - -n "Calling Conventions" ${*}.t - -callconv.texi: callconv.t Makefile - $(BMENU) -p "CPU Model Dependent Features Extend Byte to Long Instruction" \ - -u "Top" \ - -n "Memory Model" ${*}.t - -memmodel.texi: memmodel.t Makefile - $(BMENU) -p "Calling Conventions User-Provided Routines" \ - -u "Top" \ - -n "Interrupt Processing" ${*}.t - - -## Interrupt Chapter: -## 1. Replace Times and Sizes -## 2. Build Node Structure -# -#intr.texi: intr.t MVME136_TIMES -# ${REPLACE} -p MVME136_TIMES intr.t -# mv intr.t.fixed intr.texi - -# Interrupt Chapter: -# 1. Replace Times and Sizes -# 2. Build Node Structure -intr.t: intr_NOTIMES.t MVME136_TIMES - ${REPLACE} -p MVME136_TIMES intr_NOTIMES.t - mv intr_NOTIMES.t.fixed intr.t - -intr.texi: intr.t Makefile - $(BMENU) -p "Memory Model Flat Memory Model" \ - -u "Top" \ - -n "Default Fatal Error Processing" ${*}.t - -fatalerr.texi: fatalerr.t Makefile - $(BMENU) -p "Interrupt Processing Interrupt Stack" \ - -u "Top" \ - -n "Board Support Packages" ${*}.t - -bsp.texi: bsp.t Makefile - $(BMENU) -p "Default Fatal Error Processing Default Fatal Error Handler Operations" \ - -u "Top" \ - -n "Processor Dependent Information Table" ${*}.t - -cputable.texi: cputable.t Makefile - $(BMENU) -p "Board Support Packages Processor Initialization" \ - -u "Top" \ - -n "Memory Requirements" ${*}.t - - -# Worksheets Chapter: -# 1. Obtain the Shared File -# 2. Replace Times and Sizes -# 3. Build Node Structure - -wksheets_NOTIMES.t: ../../common/wksheets.t - cp ../../common/wksheets.t wksheets_NOTIMES.t - -wksheets.t: wksheets_NOTIMES.t MVME136_TIMES - ${REPLACE} -p MVME136_TIMES wksheets_NOTIMES.t - mv wksheets_NOTIMES.t.fixed wksheets.t - -wksheets.texi: wksheets.t Makefile - $(BMENU) -p "Processor Dependent Information Table CPU Dependent Information Table" \ - -u "Top" \ - -n "Timing Specification" ${*}.t - -# Timing Specification Chapter: -# 1. Copy the Shared File -# 3. Build Node Structure - -timing.t: ../../common/timing.t - cp ../../common/timing.t timing.t - -timing.texi: timing.t Makefile - $(BMENU) -p "Memory Requirements RTEMS RAM Workspace Worksheet" \ - -u "Top" \ - -n "MVME136 Timing Data" ${*}.t - -# Timing Data for BSP Chapter: -# 1. Copy the Shared File -# 2. Replace Times and Sizes -# 3. Build Node Structure - -timeMVME136_.t: ../../common/timetbl.t timeMVME136.t - cat timeMVME136.t ../../common/timetbl.t >timeMVME136_.t - @echo >>timeMVME136_.t - @echo "@tex" >>timeMVME136_.t - @echo "\\global\\advance \\smallskipamount by 4pt" >>timeMVME136_.t - @echo "@end tex" >>timeMVME136_.t - ${REPLACE} -p MVME136_TIMES timeMVME136_.t - mv timeMVME136_.t.fixed timeMVME136_.t - -timeMVME136.texi: timeMVME136_.t Makefile - $(BMENU) -p "Timing Specification Terminology" \ - -u "Top" \ - -n "Command and Variable Index" timeMVME136_.t - mv timeMVME136_.texi timeMVME136.texi diff --git a/doc/supplements/m68k/Makefile.am b/doc/supplements/m68k/Makefile.am new file mode 100644 index 0000000000..447e44e6dd --- /dev/null +++ b/doc/supplements/m68k/Makefile.am @@ -0,0 +1,116 @@ +# +# COPYRIGHT (c) 1988-1999. +# On-Line Applications Research Corporation (OAR). +# All rights reserved. +# +# $Id$ +# + +AUTOMAKE_OPTIONS = foreign + +PROJECT=m68k + +include $(top_srcdir)/project.am +include $(top_srcdir)/supplements/supplement.am + +COMMON_FILES=$(top_srcdir)/common/cpright.texi $(top_builddir)/common/setup.texi + +GENERATED_FILES=\ + cpumodel.texi callconv.texi memmodel.texi intr.texi fatalerr.texi \ + bsp.texi cputable.texi timing.texi wksheets.texi timeMVME136.texi + +FILES= preface.texi + +info_TEXINFOS = m68k.texi +m68k_TEXINFOS = $(FILES) $(COMMON_FILES) $(GENERATED_FILES) + +# +# Chapters which get automatic processing +# + +cpumodel.texi: cpumodel.t + $(BMENU) -p "Preface" \ + -u "Top" \ + -n "Calling Conventions" ${*}.t + +callconv.texi: callconv.t + $(BMENU) -p "CPU Model Dependent Features Extend Byte to Long Instruction" \ + -u "Top" \ + -n "Memory Model" $< + +memmodel.texi: memmodel.t + $(BMENU) -p "Calling Conventions User-Provided Routines" \ + -u "Top" \ + -n "Interrupt Processing" $< + +# Interrupt Chapter: +# 1. Replace Times and Sizes +# 2. Build Node Structure +intr.texi: intr_NOTIMES.t MVME136_TIMES + ${REPLACE2} -p $(srcdir)/MVME136_TIMES $(srcdir)/intr_NOTIMES.t intr.t + $(BMENU) -p "Memory Model Flat Memory Model" \ + -u "Top" \ + -n "Default Fatal Error Processing" intr.t +CLEANFILES += intr.t + +fatalerr.texi: fatalerr.t + $(BMENU) -p "Interrupt Processing Interrupt Stack" \ + -u "Top" \ + -n "Board Support Packages" $< + +bsp.texi: bsp.t + $(BMENU) -p "Default Fatal Error Processing Default Fatal Error Handler Operations" \ + -u "Top" \ + -n "Processor Dependent Information Table" $< + +cputable.texi: cputable.t + $(BMENU) -p "Board Support Packages Processor Initialization" \ + -u "Top" \ + -n "Memory Requirements" $< + + +# Worksheets Chapter: +# 1. Obtain the Shared File +# 2. Replace Times and Sizes +# 3. Build Node Structure + +wksheets.texi: $(top_srcdir)/common/wksheets.t MVME136_TIMES + ${REPLACE2} -p $(srcdir)/MVME136_TIMES \ + $(top_srcdir)/common/wksheets.t wksheets.t + $(BMENU) -p "Processor Dependent Information Table CPU Dependent Information Table" \ + -u "Top" \ + -n "Timing Specification" wksheets.t +CLEANFILES += wksheets.t + +# Timing Specification Chapter: +# 1. Copy the Shared File +# 3. Build Node Structure + +timing.texi: $(top_srcdir)/common/timing.t + cp $(top_srcdir)/common/timing.t timing.t + $(BMENU) -p "Memory Requirements RTEMS RAM Workspace Worksheet" \ + -u "Top" \ + -n "MVME136 Timing Data" timing.t +CLEANFILES += timing.t + +# Timing Data for BSP Chapter: +# 1. Copy the Shared File +# 2. Replace Times and Sizes +# 3. Build Node Structure + +timeMVME136_.t: $(top_srcdir)/common/timetbl.t timeMVME136.t + cat timeMVME136.t $(top_srcdir)/common/timetbl.t >timeMVME136_.t + @echo >>timeMVME136_.t + @echo "@tex" >>timeMVME136_.t + @echo "\\global\\advance \\smallskipamount by 4pt" >>timeMVME136_.t + @echo "@end tex" >>timeMVME136_.t + ${REPLACE} -p MVME136_TIMES timeMVME136_.t + mv timeMVME136_.t.fixed timeMVME136_.t + +timeMVME136.texi: timeMVME136_.t + $(BMENU) -p "Timing Specification Terminology" \ + -u "Top" \ + -n "Command and Variable Index" timeMVME136_.t + mv timeMVME136_.texi timeMVME136.texi + +EXTRA_DIST = MVME136_TIMES *.t diff --git a/doc/supplements/m68k/m68k.texi b/doc/supplements/m68k/m68k.texi index 7930349a12..e2e7a833d7 100644 --- a/doc/supplements/m68k/m68k.texi +++ b/doc/supplements/m68k/m68k.texi @@ -1,6 +1,6 @@ \input texinfo @c -*-texinfo-*- @c %**start of header -@setfilename c_m68k +@setfilename m68k @syncodeindex vr fn @synindex ky cp @paragraphindent 0 @@ -76,7 +76,7 @@ END-INFO-DIR-ENTRY @include timeMVME136.texi @ifinfo @node Top, Preface, (dir), (dir) -@top c_m68k +@top m68k This is the online version of the RTEMS Motorola MC68xxx Applications Supplement. diff --git a/doc/supplements/m68k/timeMVME136_.t b/doc/supplements/m68k/timeMVME136_.t new file mode 100644 index 0000000000..ea68b5389f --- /dev/null +++ b/doc/supplements/m68k/timeMVME136_.t @@ -0,0 +1,1442 @@ +@c +@c COPYRIGHT (c) 1988-1999. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@include ../../common/timemac.texi +@tex +\global\advance \smallskipamount by -4pt +@end tex + +@chapter MVME136 Timing Data + +@section Introduction + +The timing data for the MC68020 version of RTEMS is +provided along with the target dependent aspects concerning the +gathering of the timing data. The hardware platform used to +gather the times is described to give the reader a better +understanding of each directive time provided. Also, provided +is a description of the interrupt latency and the context switch +times as they pertain to the MC68020 version of RTEMS. + +@section Hardware Platform + +All times reported except for the maximum period +interrupts are disabled by RTEMS were measured using a Motorola +MVME135 CPU board. The MVME135 is a 20Mhz board with one wait +state dynamic memory and a MC68881 numeric coprocessor. The +Zilog 8036 countdown timer on this board was used to measure +elapsed time with a one-half microsecond resolution. All +sources of hardware interrupts were disabled, although the +interrupt level of the MC68020 allows all interrupts. + +The maximum period interrupts are disabled was +measured by summing the number of CPU cycles required by each +assembly language instruction executed while interrupts were +disabled. The worst case times of the MC68020 microprocessor +were used for each instruction. Zero wait state memory was +assumed. The total CPU cycles executed with interrupts +disabled, including the instructions to disable and enable +interrupts, was divided by 20 to simulate a 20Mhz MC68020. It +should be noted that the worst case instruction times for the +MC68020 assume that the internal cache is disabled and that no +instructions overlap. + +@section Interrupt Latency + +The maximum period with interrupts disabled within +RTEMS is less than TBD +microseconds including the instructions +which disable and re-enable interrupts. The time required for +the MC68020 to vector an interrupt and for the RTEMS entry +overhead before invoking the user's interrupt handler are a +total of 9 +microseconds. These combine to yield a worst case +interrupt latency of less than +TBD + 9 +microseconds at 20Mhz. [NOTE: The maximum period with interrupts +disabled was last determined for Release +3.2.1.] + +It should be noted again that the maximum period with +interrupts disabled within RTEMS is hand-timed and based upon +worst case (i.e. CPU cache disabled and no instruction overlap) +times for a 20Mhz MC68020. The interrupt vector and entry +overhead time was generated on an MVME135 benchmark platform +using the Multiprocessing Communications registers to generate +as the interrupt source. + +@section Context Switch + +The RTEMS processor context switch time is 35 +microseconds on the MVME135 benchmark platform when no floating +point context is saved or restored. Additional execution time +is required when a TASK_SWITCH user extension is configured. +The use of the TASK_SWITCH extension is application dependent. +Thus, its execution time is not considered part of the raw +context switch time. + +Since RTEMS was designed specifically for embedded +missile applications which are floating point intensive, the +executive is optimized to avoid unnecessarily saving and +restoring the state of the numeric coprocessor. The state of +the numeric coprocessor is only saved when an FLOATING_POINT +task is dispatched and that task was not the last task to +utilize the coprocessor. In a system with only one +FLOATING_POINT task, the state of the numeric coprocessor will +never be saved or restored. When the first FLOATING_POINT task +is dispatched, RTEMS does not need to save the current state of +the numeric coprocessor. + +The exact amount of time required to save and restore +floating point context is dependent on whether an MC68881 or +MC68882 is being used as well as the state of the numeric +coprocessor. These numeric coprocessors define three operating +states: initialized, idle, and busy. RTEMS places the +coprocessor in the initialized state when a task is started or +restarted. Once the task has utilized the coprocessor, it is in +the idle state when floating point instructions are not +executing and the busy state when floating point instructions +are executing. The state of the coprocessor is task specific. + +The following table summarizes the context switch +times for the MVME135 benchmark platform: + +@c ****** This comment is here to remind you not to edit the timetbl.t +@c ****** in any directory but common. +@c +@c Time Table Template +@c +@c COPYRIGHT (c) 1988-1999. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@ifset use-tex +@sp 1 +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{No Floating Point Contexts}{35} +\rtemsdirective{Floating Point Contexts} +\rtemscase{restore first FP task}{39} +\rtemscase{save initialized, restore initialized}{66} +\rtemscase{save idle, restore initialized}{66} +\rtemscase{save idle, restore idle}{68} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet +@item No Floating Point Contexts +@itemize - +@item only case: 35 +@end itemize +@item Floating Point Contexts +@itemize - +@item restore first FP task: 39 +@item save initialized, restore initialized: 66 +@item save idle, restore initialized: 66 +@item save idle, restore idle: 66 +@end itemize +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + +
    No Floating Point Contexts35
    Floating Point Contexts
    restore first FP task
    39
    save initialized, restore initialized
    66
    save idle, restore initialized
    66
    save idle, restore idle
    68
    +
    +@end html +@end ifset + +@section Directive Times + +This sections is divided into a number of +subsections, each of which contains a table listing the +execution times of that manager's directives. + +@page +@section Task Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{TASK\_CREATE}{148} +\rtemsonecase{TASK\_IDENT}{350} +\rtemsonecase{TASK\_START}{76} +\rtemsdirective{TASK\_RESTART} +\rtemscase{calling task}{95} +\rtemscase{suspended task -- returns to caller} + {89} +\rtemscase{blocked task -- returns to caller} + {124} +\rtemscase{ready task -- returns to caller} + {92} +\rtemscase{suspended task -- preempts caller} + {125} +\rtemscase{blocked task -- preempts caller} + {149} +\rtemscase{ready task -- preempts caller} + {142} +\rtemsdirective{TASK\_DELETE} +\rtemscase{calling task}{170} +\rtemscase{suspended task}{138} +\rtemscase{blocked task}{143} +\rtemscase{ready task}{144} +\rtemsdirective{TASK\_SUSPEND} +\rtemscase{calling task}{71} +\rtemscase{returns to caller}{43} +\rtemsdirective{TASK\_RESUME} +\rtemscase{task readied -- returns to caller} + {45} +\rtemscase{task readied -- preempts caller} + {67} +\rtemsdirective{TASK\_SET\_PRIORITY} +\rtemscase{obtain current priority} + {31} +\rtemscase{returns to caller}{64} +\rtemscase{preempts caller}{106} +\rtemsdirective{TASK\_MODE} +\rtemscase{obtain current mode}{14} +\rtemscase{no reschedule}{16} +\rtemscase{reschedule -- returns to caller} + {23} +\rtemscase{reschedule -- preempts caller} + {60} +\rtemsonecase{TASK\_GET\_NOTE}{33} +\rtemsonecase{TASK\_SET\_NOTE}{33} +\rtemsdirective{TASK\_WAKE\_AFTER} +\rtemscase{yield -- returns to caller} + {16} +\rtemscase{yield -- preempts caller} + {56} +\rtemsonecase{TASK\_WAKE\_WHEN}{117} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item TASK_CREATE +@itemize - +@item only case: 148 +@end itemize + +@item TASK_IDENT +@itemize - +@item only case: 350 +@end itemize + +@item TASK_START +@itemize - +@item only case: 76 +@end itemize + +@item TASK_RESTART +@itemize - +@item calling task: 95 +@item suspended task -- returns to caller: 89 +@item blocked task -- returns to caller: 124 +@item ready task -- returns to caller: 92 +@item suspended task -- preempts caller: 125 +@item blocked task -- preempts caller: 149 +@item ready task -- preempts caller: 142 +@end itemize + +@item TASK_DELETE +@itemize - +@item calling task: 170 +@item suspended task: 138 +@item blocked task: 143 +@item ready task: 144 +@end itemize + +@item TASK_SUSPEND +@itemize - +@item calling task: 71 +@item returns to caller: 43 +@end itemize + +@item TASK_RESUME +@itemize - +@item task readied -- returns to caller: 45 +@item task readied -- preempts caller: 67 +@end itemize + +@item TASK_SET_PRIORITY +@itemize - +@item obtain current priority: 31 +@item returns to caller: 64 +@item preempts caller: 106 +@end itemize + +@item TASK_MODE +@itemize - +@item obtain current mode: 14 +@item no reschedule: 16 +@item reschedule -- returns to caller: 23 +@item reschedule -- preempts caller: 60 +@end itemize + +@item TASK_GET_NOTE +@itemize - +@item only case: 33 +@end itemize + +@item TASK_SET_NOTE +@itemize - +@item only case: 33 +@end itemize + +@item TASK_WAKE_AFTER +@itemize - +@item yield -- returns to caller: 16 +@item yield -- preempts caller: 56 +@end itemize + +@item TASK_WAKE_WHEN +@itemize - +@item only case: 117 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TASK_CREATE148
    TASK_IDENT350
    TASK_START76
    TASK_RESTART
    calling task
    95
    suspended task -- returns to caller
    89
    blocked task -- returns to caller
    124
    ready task -- returns to caller
    92
    suspended task -- preempts caller
    125
    blocked task -- preempts caller
    149
    ready task -- preempts caller
    142
    TASK_DELETE
    calling task
    170
    suspended task
    138
    blocked task
    143
    ready task
    144
    TASK_SUSPEND
    calling task
    71
    returns to caller
    43
    TASK_RESUME
    task readied -- returns to caller
    45
    task readied -- preempts caller
    67
    TASK_SET_PRIORITY
    obtain current priority
    31
    returns to caller
    64
    preempts caller
    106
    TASK_MODE
    obtain current mode
    14
    no reschedule
    16
    reschedule -- returns to caller
    23
    reschedule -- preempts caller
    60
    TASK_GET_NOTE33
    TASK_SET_NOTE33
    TASK_WAKE_AFTER
    yield -- returns to caller
    16
    yield -- preempts caller
    56
    TASK_WAKE_WHEN117
    +
    +@end html +@end ifset + +@page +@section Interrupt Manager + +It should be noted that the interrupt entry times +include vectoring the interrupt handler. + +@ifset use-tex +@sp 1 +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsdirective{Interrupt Entry Overhead} +\rtemscase{returns to nested interrupt}{12} +\rtemscase{returns to interrupted task} + {9} +\rtemscase{returns to preempting task} + {9} +\rtemsdirective{Interrupt Exit Overhead} +\rtemscase{returns to nested interrupt}{<1} +\rtemscase{returns to interrupted task} + {8} +\rtemscase{returns to preempting task} + {54} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item Interrupt Entry Overhead +@itemize - +@item returns to nested interrupt: 12 +@item returns to interrupted task: 9 +@item returns to preempting task: 9 +@end itemize + +@item Interrupt Exit Overhead +@itemize - +@item returns to nested interrupt: <1 +@item returns to interrupted task: 8 +@item returns to preempting task: 54 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + +
    Interrupt Entry Overhead
    returns to nested interrupt
    12
    returns to interrupted task
    9
    returns to preempting task
    9
    Interrupt Exit Overhead
    returns to nested interrupt
    <1
    returns to interrupted task
    8
    returns to preempting task
    54
    +
    +@end html +@end ifset + + +@section Clock Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{CLOCK\_SET}{86} +\rtemsonecase{CLOCK\_GET}{1} +\rtemsonecase{CLOCK\_TICK}{17} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item CLOCK_SET +@itemize - +@item only case: 86 +@end itemize + +@item CLOCK_GET +@itemize - +@item only case: 1 +@end itemize + +@item CLOCK_TICK +@itemize - +@item only case: 17 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + +
    CLOCK_SET86
    CLOCK_GET1
    CLOCK_TICK17
    +
    +@end html +@end ifset + +@section Timer Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{TIMER\_CREATE}{28} +\rtemsonecase{TIMER\_IDENT}{343} +\rtemsdirective{TIMER\_DELETE} +\rtemscase{inactive}{43} +\rtemscase{active}{47} +\rtemsdirective{TIMER\_FIRE\_AFTER} +\rtemscase{inactive}{58} +\rtemscase{active}{61} +\rtemsdirective{TIMER\_FIRE\_WHEN} +\rtemscase{inactive}{88} +\rtemscase{active}{88} +\rtemsdirective{TIMER\_RESET} +\rtemscase{inactive}{54} +\rtemscase{active}{58} +\rtemsdirective{TIMER\_CANCEL} +\rtemscase{inactive}{31} +\rtemscase{active}{34} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item TIMER_CREATE +@itemize - +@item only case: 28 +@end itemize + +@item TIMER_IDENT +@itemize - +@item only case: 343 +@end itemize + +@item TIMER_DELETE +@itemize - +@item inactive: 43 +@item active: 47 +@end itemize + +@item TIMER_FIRE_AFTER +@itemize - +@item inactive: 58 +@item active: 61 +@end itemize + +@item TIMER_FIRE_WHEN +@itemize - +@item inactive: TIMER_FIRE_WHEN_INACTIVE +@item active: TIMER_FIRE_WHEN_ACTIVE +@end itemize + +@item TIMER_RESET +@itemize - +@item inactive: TIMER_RESET_INACTIVE +@item active: TIMER_RESET_ACTIVE +@end itemize + +@item TIMER_CANCEL +@itemize - +@item inactive: TIMER_CANCEL_INACTIVE +@item active: TIMER_CANCEL_ACTIVE +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TIMER_CREATE28
    TIMER_IDENT343
    TIMER_DELETE
    inactive
    43
    active
    47
    TIMER_FIRE_AFTER
    inactive
    58
    active
    61
    TIMER_FIRE_WHEN
    inactive
    88
    active
    88
    TIMER_RESET
    inactive
    54
    active
    58
    TIMER_CANCEL
    inactive
    31
    active
    34
    +
    +@end html +@end ifset + +@page +@section Semaphore Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{SEMAPHORE\_CREATE}{60} +\rtemsonecase{SEMAPHORE\_IDENT}{367} +\rtemsonecase{SEMAPHORE\_DELETE}{58} +\rtemsdirective{SEMAPHORE\_OBTAIN} +\rtemscase{available}{38} +\rtemscase{not available -- NO\_WAIT} + {38} +\rtemscase{not available -- caller blocks} + {109} +\rtemsdirective{SEMAPHORE\_RELEASE} +\rtemscase{no waiting tasks}{44} +\rtemscase{task readied -- returns to caller} + {66} +\rtemscase{task readied -- preempts caller} + {87} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item SEMAPHORE_CREATE +@itemize - +@item only case: 60 +@end itemize + +@item SEMAPHORE_IDENT +@itemize - +@item only case: 367 +@end itemize + +@item SEMAPHORE_DELETE +@itemize - +@item only case: 58 +@end itemize + +@item SEMAPHORE_OBTAIN +@itemize - +@item available: 38 +@item not available -- NO_WAIT: 38 +@item not available -- caller blocks: 109 +@end itemize + +@item SEMAPHORE_RELEASE +@itemize - +@item no waiting tasks: 44 +@item task readied -- returns to caller: 66 +@item task readied -- preempts caller: 87 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + +
    SEMAPHORE_CREATE60
    SEMAPHORE_IDENT367
    SEMAPHORE_DELETE58
    SEMAPHORE_OBTAIN
    available
    38
    not available -- NO_WAIT
    38
    not available -- caller blocks
    109
    SEMAPHORE_RELEASE
    no waiting tasks
    44
    task readied -- returns to caller
    66
    task readied -- preempts caller
    87
    +
    +@end html +@end ifset + +@section Message Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{MESSAGE\_QUEUE\_CREATE}{200} +\rtemsonecase{MESSAGE\_QUEUE\_IDENT}{341} +\rtemsonecase{MESSAGE\_QUEUE\_DELETE}{80} +\rtemsdirective{MESSAGE\_QUEUE\_SEND} +\rtemscase{no waiting tasks} + {97} +\rtemscase{task readied -- returns to caller} + {101} +\rtemscase{task readied -- preempts caller} + {123} +\rtemsdirective{MESSAGE\_QUEUE\_URGENT} +\rtemscase{no waiting tasks}{96} +\rtemscase{task readied -- returns to caller} + {101} +\rtemscase{task readied -- preempts caller} + {123} +\rtemsdirective{MESSAGE\_QUEUE\_BROADCAST} +\rtemscase{no waiting tasks}{53} +\rtemscase{task readied -- returns to caller} + {111} +\rtemscase{task readied -- preempts caller} + {133} +\rtemsdirective{MESSAGE\_QUEUE\_RECEIVE} +\rtemscase{available}{79} +\rtemscase{not available -- NO\_WAIT} + {43} +\rtemscase{not available -- caller blocks} + {114} +\rtemsdirective{MESSAGE\_QUEUE\_FLUSH} +\rtemscase{no messages flushed}{29} +\rtemscase{messages flushed}{39} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item MESSAGE_QUEUE_CREATE +@itemize - +@item only case: 200 +@end itemize + +@item MESSAGE_QUEUE_IDENT +@itemize - +@item only case: 341 +@end itemize + +@item MESSAGE_QUEUE_DELETE +@itemize - +@item only case: 80 +@end itemize + +@item MESSAGE_QUEUE_SEND +@itemize - +@item no waiting tasks: 97 +@item task readied -- returns to caller: 101 +@item task readied -- preempts caller: 123 +@end itemize + +@item MESSAGE_QUEUE_URGENT +@itemize - +@item no waiting tasks: 96 +@item task readied -- returns to caller: 101 +@item task readied -- preempts caller: 123 +@end itemize + +@item MESSAGE_QUEUE_BROADCAST +@itemize - +@item no waiting tasks: 53 +@item task readied -- returns to caller: 111 +@item task readied -- preempts caller: 133 +@end itemize + +@item MESSAGE_QUEUE_RECEIVE +@itemize - +@item available: 79 +@item not available -- NO_WAIT: 43 +@item not available -- caller blocks: 114 +@end itemize + +@item MESSAGE_QUEUE_FLUSH +@itemize - +@item no messages flushed: 29 +@item messages flushed: 39 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    MESSAGE_QUEUE_CREATE200
    MESSAGE_QUEUE_IDENT341
    MESSAGE_QUEUE_DELETE80
    MESSAGE_QUEUE_SEND
    no waiting tasks
    97
    task readied -- returns to caller
    101
    task readied -- preempts caller
    123
    MESSAGE_QUEUE_URGENT
    no waiting tasks
    96
    task readied -- returns to caller
    101
    task readied -- preempts caller
    123
    MESSAGE_QUEUE_BROADCAST
    no waiting tasks
    53
    task readied -- returns to caller
    111
    task readied -- preempts caller
    133
    MESSAGE_QUEUE_RECEIVE
    available
    79
    not available -- NO_WAIT
    43
    not available -- caller blocks
    114
    MESSAGE_QUEUE_FLUSH
    no messages flushed
    29
    messages flushed
    39
    +
    +@end html +@end ifset + +@page +@section Event Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsdirective{EVENT\_SEND} +\rtemscase{no task readied}{24} +\rtemscase{task readied -- returns to caller} + {60} +\rtemscase{task readied -- preempts caller} + {84} +\rtemsdirective{EVENT\_RECEIVE} +\rtemscase{obtain current events}{1} +\rtemscase{available}{28} +\rtemscase{not available -- NO\_WAIT}{23} +\rtemscase{not available -- caller blocks} + {84} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item EVENT_SEND +@itemize - +@item no task readied: 24 +@item task readied -- returns to caller: 60 +@item task readied -- preempts caller: 84 +@end itemize + +@item EVENT_RECEIVE +@itemize - +@item obtain current events: 1 +@item available: 28 +@item not available -- NO_WAIT: 23 +@item not available -- caller blocks: 84 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + +
    EVENT_SEND
    no task readied
    24
    task readied -- returns to caller
    60
    task readied -- preempts caller
    84
    EVENT_RECEIVE
    obtain current events
    1
    available
    28
    not available -- NO_WAIT
    23
    not available -- caller blocks
    84
    +
    +@end html +@end ifset +@section Signal Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{SIGNAL\_CATCH}{15} +\rtemsdirective{SIGNAL\_SEND} +\rtemscase{returns to caller}{37} +\rtemscase{signal to self}{55} +\rtemsdirective{EXIT ASR OVERHEAD} +\rtemscase{returns to calling task} + {37} +\rtemscase{returns to preempting task} + {54} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet +@item SIGNAL_CATCH +@itemize - +@item only case: 15 +@end itemize + +@item SIGNAL_SEND +@itemize - +@item returns to caller: 37 +@item signal to self: 55 +@end itemize + +@item EXIT ASR OVERHEAD +@itemize - +@item returns to calling task: 37 +@item returns to preempting task: 54 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + +
    SIGNAL_CATCH15
    SIGNAL_SEND
    returns to caller
    37
    signal to self
    55
    EXIT ASR OVERHEAD
    returns to calling task
    + 37
    returns to preempting task
    + 54
    +
    +@end html +@end ifset + +@section Partition Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{PARTITION\_CREATE}{70} +\rtemsonecase{PARTITION\_IDENT}{341} +\rtemsonecase{PARTITION\_DELETE}{42} +\rtemsdirective{PARTITION\_GET\_BUFFER} +\rtemscase{available}{35} +\rtemscase{not available}{33} +\rtemsonecase{PARTITION\_RETURN\_BUFFER} + {33} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item PARTITION_CREATE +@itemize - +@item only case: 70 +@end itemize + +@item PARTITION_IDENT +@itemize - +@item only case: 341 +@end itemize + +@item PARTITION_DELETE +@itemize - +@item only case: 42 +@end itemize + +@item PARTITION_GET_BUFFER +@itemize - +@item available: 35 +@item not available: 33 +@end itemize + +@item PARTITION_RETURN_BUFFER +@itemize - +@item only case: 43 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + +
    PARTITION_CREATE70
    PARTITION_IDENT341
    PARTITION_DELETE42
    PARTITION_GET_BUFFER
    available
    35
    not available
    33
    PARTITION_RETURN_BUFFER33
    +
    +@end html +@end ifset + +@page +@section Region Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{REGION\_CREATE}{63} +\rtemsonecase{REGION\_IDENT}{348} +\rtemsonecase{REGION\_DELETE}{39} +\rtemsdirective{REGION\_GET\_SEGMENT} +\rtemscase{available}{52} +\rtemscase{not available -- NO\_WAIT} + {49} +\rtemscase{not available -- caller blocks} + {123} +\rtemsdirective{REGION\_RETURN\_SEGMENT} +\rtemscase{no waiting tasks}{54} +\rtemscase{task readied -- returns to caller} + {114} +\rtemscase{task readied -- preempts caller} + {136} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item REGION_CREATE +@itemize - +@item only case: 63 +@end itemize + +@item REGION_IDENT +@itemize - +@item only case: 348 +@end itemize + +@item REGION_DELETE +@itemize - +@item only case: 39 +@end itemize + +@item REGION_GET_SEGMENT +@itemize - +@item available: 52 +@item not available -- NO_WAIT: 49 +@item not available -- caller blocks: 123 +@end itemize + +@item REGION_RETURN_SEGMENT +@itemize - +@item no waiting tasks: 54 +@item task readied -- returns to caller: 114 +@item task readied -- preempts caller: 136 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + +
    REGION_CREATE63
    REGION_IDENT348
    REGION_DELETE39
    REGION_GET_SEGMENT
    available
    52
    not available -- NO_WAIT
    + 49
    not available -- caller blocks
    + 123
    REGION_RETURN_SEGMENT
    no waiting tasks
    54
    task readied -- returns to caller
    + 114
    task readied -- preempts caller
    + 136
    +
    +@end html +@end ifset + +@section Dual-Ported Memory Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{PORT\_CREATE}{35} +\rtemsonecase{PORT\_IDENT}{340} +\rtemsonecase{PORT\_DELETE}{39} +\rtemsonecase{PORT\_INTERNAL\_TO\_EXTERNAL} + {26} +\rtemsonecase{PORT\_EXTERNAL\_TO\_INTERNAL} + {27} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item PORT_CREATE +@itemize - +@item only case: 35 +@end itemize + +@item PORT_IDENT +@itemize - +@item only case: 340 +@end itemize + +@item PORT_DELETE +@itemize - +@item only case: 39 +@end itemize + +@item PORT_INTERNAL_TO_EXTERNAL +@itemize - +@item only case: 26 +@end itemize + +@item PORT_EXTERNAL_TO_INTERNAL +@itemize - +@item only case: 27 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + +
    PORT_CREATE35
    PORT_IDENT340
    PORT_DELETE39
    PORT_INTERNAL_TO_EXTERNAL26
    PORT_EXTERNAL_TO_INTERNAL27
    +
    +@end html +@end ifset + +@section I/O Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{IO\_INITIALIZE}{4} +\rtemsonecase{IO\_OPEN}{2} +\rtemsonecase{IO\_CLOSE}{1} +\rtemsonecase{IO\_READ}{2} +\rtemsonecase{IO\_WRITE}{3} +\rtemsonecase{IO\_CONTROL}{2} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item IO_INITIALIZE +@itemize - +@item only case: 4 +@end itemize + +@item IO_OPEN +@itemize - +@item only case: 2 +@end itemize + +@item IO_CLOSE +@itemize - +@item only case: 1 +@end itemize + +@item IO_READ +@itemize - +@item only case: 2 +@end itemize + +@item IO_WRITE +@itemize - +@item only case: 3 +@end itemize + +@item IO_CONTROL +@itemize - +@item only case: 2 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + +
    IO_INITIALIZE4
    IO_OPEN2
    IO_CLOSE1
    IO_READ2
    IO_WRITE3
    IO_CONTROL2
    +
    +@end html +@end ifset + +@section Rate Monotonic Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{RATE\_MONOTONIC\_CREATE}{32} +\rtemsonecase{RATE\_MONOTONIC\_IDENT}{341} +\rtemsonecase{RATE\_MONOTONIC\_CANCEL}{39} +\rtemsdirective{RATE\_MONOTONIC\_DELETE} +\rtemscase{active}{51} +\rtemscase{inactive}{48} +\rtemsdirective{RATE\_MONOTONIC\_PERIOD} +\rtemscase{initiate period -- returns to caller} + {54} +\rtemscase{conclude period -- caller blocks} + {74} +\rtemscase{obtain status}{31} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item RATE_MONOTONIC_CREATE +@itemize - +@item only case: 32 +@end itemize + +@item RATE_MONOTONIC_IDENT +@itemize - +@item only case: 341 +@end itemize + +@item RATE_MONOTONIC_CANCEL +@itemize - +@item only case: 39 +@end itemize + +@item RATE_MONOTONIC_DELETE +@itemize - +@item active: 51 +@item inactive: 48 +@end itemize + +@item RATE_MONOTONIC_PERIOD +@itemize - +@item initiate period -- returns to caller: 54 +@item conclude period -- caller blocks: 74 +@item obtain status: 31 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + +
    RATE_MONOTONIC_CREATE32
    RATE_MONOTONIC_IDENT341
    RATE_MONOTONIC_CANCEL39
    RATE_MONOTONIC_DELETE
    active
    51
    inactive
    48
    RATE_MONOTONIC_PERIOD
    initiate period -- returns to caller
    + 54
    conclude period -- caller blocks
    + 74
    obtain status
    31
    +
    +@end html +@end ifset + +@tex +\global\advance \smallskipamount by 4pt +@end tex + +@tex +\global\advance \smallskipamount by 4pt +@end tex diff --git a/doc/supplements/mips64orion/Makefile b/doc/supplements/mips64orion/Makefile deleted file mode 100644 index 0895106a7e..0000000000 --- a/doc/supplements/mips64orion/Makefile +++ /dev/null @@ -1,161 +0,0 @@ -# -# COPYRIGHT (c) 1988-1999. -# On-Line Applications Research Corporation (OAR). -# All rights reserved. -# -# $Id$ -# - -PROJECT=mips64orion - -include ../../Make.config - -REPLACE=../../tools/word-replace - -all: html info ps pdf - -dirs: - $(make-dirs) - -COMMON_FILES=../../common/cpright.texi ../../common/setup.texi - -GENERATED_FILES=\ - cpumodel.texi callconv.texi memmodel.texi intr.texi fatalerr.texi \ - bsp.texi cputable.texi wksheets.texi timing.texi timeBSP.texi - -FILES= $(PROJECT).texi preface.texi \ - $(COMMON_FILES) $(GENERATED_FILES) - -info: dirs c_$(PROJECT) - @echo NEED TO INSTALL THE INFO FILES - #cp c_$(PROJECT) c_$(PROJECT)-* $(INFO_INSTALL) - #cp c_$(PROJECT) c_$(PROJECT)-* $(INFO_INSTALL) - -c_$(PROJECT): $(FILES) - $(MAKEINFO) $(PROJECT).texi - -dvi: dirs $(PROJECT).dvi -ps: dirs $(PROJECT).ps -pdf: dirs $(PROJECT).pdf - -$(PROJECT).pdf: $(FILES) - $(TEXI2PDF) $(PROJECT).texi - cp $(PROJECT).pdf $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).ps: $(PROJECT).dvi - dvips -o $(PROJECT).ps $(PROJECT).dvi - cp $(PROJECT).ps $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).dvi: $(FILES) - $(TEXI2DVI) $(PROJECT).texi - cp $(PROJECT).dvi $(WWW_INSTALL)/$(PROJECT) - -html: dirs $(FILES) - -mkdir -p $(WWW_INSTALL)/$(PROJECT) - $(TEXI2WWW) $(TEXI2WWW_ARGS) -dir $(WWW_INSTALL)/$(PROJECT) \ - $(PROJECT).texi - -clean: - rm -f *.o $(PROG) *.txt core $(PROJECT).pdf - rm -f *.dvi *.ps *.log *.aux *.cp *.fn *.ky *.pg *.toc *.tp *.vr $(BASE) - rm -f $(PROJECT) $(PROJECT)-* - rm -f c_$(PROJECT) c_$(PROJECT)-* - rm -f wksheets.t wksheets_NOTIMES.t - rm -f intr.t - rm -f timeBSP_.t timing.t - rm -f *.fixed _* $(GENERATED_FILES) - rm -f timeBSP_.t timeBSP_.texi - -# -# Chapters which get automatic processing -# -cpumodel.texi: cpumodel.t Makefile - $(BMENU) -p "Preface" \ - -u "Top" \ - -n "Calling Conventions" ${*}.t - -callconv.texi: callconv.t Makefile - $(BMENU) -p "CPU Model Dependent Features Another Optional Feature" \ - -u "Top" \ - -n "Memory Model" ${*}.t - -memmodel.texi: memmodel.t Makefile - $(BMENU) -p "Calling Conventions User-Provided Routines" \ - -u "Top" \ - -n "Interrupt Processing" ${*}.t - -# Interrupt Chapter: -# 1. Replace Times and Sizes -# 2. Build Node Structure -intr.t: intr_NOTIMES.t BSP_TIMES - ${REPLACE} -p BSP_TIMES intr_NOTIMES.t - mv intr_NOTIMES.t.fixed intr.t - -intr.texi: intr.t Makefile - $(BMENU) -p "Memory Model Flat Memory Model" \ - -u "Top" \ - -n "Default Fatal Error Processing" ${*}.t - -fatalerr.texi: fatalerr.t Makefile - $(BMENU) -p "Interrupt Processing Interrupt Stack" \ - -u "Top" \ - -n "Board Support Packages" ${*}.t - -bsp.texi: bsp.t Makefile - $(BMENU) -p "Default Fatal Error Processing Default Fatal Error Handler Operations" \ - -u "Top" \ - -n "Processor Dependent Information Table" ${*}.t - -cputable.texi: cputable.t Makefile - $(BMENU) -p "Board Support Packages Processor Initialization" \ - -u "Top" \ - -n "Memory Requirements" ${*}.t - -# Worksheets Chapter: -# 1. Copy the Shared File -# 2. Replace Times and Sizes -# 3. Build Node Structure - -wksheets_NOTIMES.t: ../../common/wksheets.t - cp ../../common/wksheets.t wksheets_NOTIMES.t - -wksheets.t: wksheets_NOTIMES.t BSP_TIMES - ${REPLACE} -p BSP_TIMES wksheets_NOTIMES.t - mv wksheets_NOTIMES.t.fixed wksheets.t - -wksheets.texi: wksheets.t Makefile - $(BMENU) -p "Processor Dependent Information Table CPU Dependent Information Table" \ - -u "Top" \ - -n "Timing Specification" ${*}.t - -# Timing Specification Chapter: -# 1. Copy the Shared File -# 3. Build Node Structure - -timing.t: ../../common/timing.t - cp ../../common/timing.t timing.t - -timing.texi: timing.t Makefile - $(BMENU) -p "Memory Requirements RTEMS RAM Workspace Worksheet" \ - -u "Top" \ - -n "BSP_FOR_TIMES Timing Data" ${*}.t - -# Timing Data for BSP Chapter: -# 1. Copy the Shared File -# 2. Replace Times and Sizes -# 3. Build Node Structure - -timeBSP_.t: ../../common/timetbl.t timeBSP.t Makefile - cat timeBSP.t ../../common/timetbl.t >timeBSP_.t - @echo >>timeBSP_.t - @echo "@tex" >>timeBSP_.t - @echo "\\global\\advance \\smallskipamount by 4pt" >>timeBSP_.t - @echo "@end tex" >>timeBSP_.t - ${REPLACE} -p BSP_TIMES timeBSP_.t - mv timeBSP_.t.fixed timeBSP_.t - -timeBSP.texi: timeBSP_.t Makefile - $(BMENU) -p "Timing Specification Terminology" \ - -u "Top" \ - -n "Command and Variable Index" timeBSP_.t - mv timeBSP_.texi timeBSP.texi diff --git a/doc/supplements/mips64orion/Makefile.am b/doc/supplements/mips64orion/Makefile.am new file mode 100644 index 0000000000..cc30fbb2cc --- /dev/null +++ b/doc/supplements/mips64orion/Makefile.am @@ -0,0 +1,114 @@ +# +# COPYRIGHT (c) 1988-1999. +# On-Line Applications Research Corporation (OAR). +# All rights reserved. +# +# $Id$ +# + +AUTOMAKE_OPTIONS = foreign + +PROJECT=mips64orion + +include $(top_srcdir)/project.am +include $(top_srcdir)/supplements/supplement.am + +COMMON_FILES=$(top_srcdir)/common/cpright.texi $(top_builddir)/common/setup.texi + +GENERATED_FILES=\ + cpumodel.texi callconv.texi memmodel.texi intr.texi fatalerr.texi \ + bsp.texi cputable.texi wksheets.texi timing.texi timeBSP.texi + +FILES= preface.texi + +info_TEXINFOS = mips64orion.texi +mips64orion_TEXINFOS = $(FILES) $(COMMON_FILES) $(GENERATED_FILES) + +# +# Chapters which get automatic processing +# +cpumodel.texi: cpumodel.t + $(BMENU) -p "Preface" \ + -u "Top" \ + -n "Calling Conventions" $< + +callconv.texi: callconv.t + $(BMENU) -p "CPU Model Dependent Features Another Optional Feature" \ + -u "Top" \ + -n "Memory Model" $< + +memmodel.texi: memmodel.t + $(BMENU) -p "Calling Conventions User-Provided Routines" \ + -u "Top" \ + -n "Interrupt Processing" $< + +# Interrupt Chapter: +# 1. Replace Times and Sizes +# 2. Build Node Structure +intr.texi: intr_NOTIMES.t BSP_TIMES + ${REPLACE2} -p $(srcdir)/BSP_TIMES $(srcdir)/intr_NOTIMES.t intr.t + $(BMENU) -p "Memory Model Flat Memory Model" \ + -u "Top" \ + -n "Default Fatal Error Processing" intr.t +CLEANFILES += intr.t + +fatalerr.texi: fatalerr.t + $(BMENU) -p "Interrupt Processing Interrupt Stack" \ + -u "Top" \ + -n "Board Support Packages" $< + +bsp.texi: bsp.t + $(BMENU) -p "Default Fatal Error Processing Default Fatal Error Handler Operations" \ + -u "Top" \ + -n "Processor Dependent Information Table" $< + +cputable.texi: cputable.t + $(BMENU) -p "Board Support Packages Processor Initialization" \ + -u "Top" \ + -n "Memory Requirements" $< + +# Worksheets Chapter: +# 1. Copy the Shared File +# 2. Replace Times and Sizes +# 3. Build Node Structure + +wksheets.texi: $(top_srcdir)/common/wksheets.t BSP_TIMES + ${REPLACE2} -p $(srcdir)/BSP_TIMES \ + $(top_srcdir)/common/wksheets.t wksheets.t + $(BMENU) -p "Processor Dependent Information Table CPU Dependent Information Table" \ + -u "Top" \ + -n "Timing Specification" wksheets.t +CLEANFILES += wksheets.t + +# Timing Specification Chapter: +# 1. Copy the Shared File +# 3. Build Node Structure + +timing.texi: $(top_srcdir)/common/timing.t + cp $(top_srcdir)/common/timing.t timing.t + $(BMENU) -p "Memory Requirements RTEMS RAM Workspace Worksheet" \ + -u "Top" \ + -n "BSP_FOR_TIMES Timing Data" timing.t +CLEANFILES += timing.t + +# Timing Data for BSP Chapter: +# 1. Copy the Shared File +# 2. Replace Times and Sizes +# 3. Build Node Structure + +timeBSP_.t: $(top_srcdir)/common/timetbl.t timeBSP.t + cat timeBSP.t $(top_srcdir)/common/timetbl.t >timeBSP_.t + @echo >>timeBSP_.t + @echo "@tex" >>timeBSP_.t + @echo "\\global\\advance \\smallskipamount by 4pt" >>timeBSP_.t + @echo "@end tex" >>timeBSP_.t + ${REPLACE} -p BSP_TIMES timeBSP_.t + mv timeBSP_.t.fixed timeBSP_.t + +timeBSP.texi: timeBSP_.t + $(BMENU) -p "Timing Specification Terminology" \ + -u "Top" \ + -n "Command and Variable Index" timeBSP_.t + mv timeBSP_.texi timeBSP.texi + +EXTRA_DIST = BSP_TIMES *.t diff --git a/doc/supplements/mips64orion/mips64orion.texi b/doc/supplements/mips64orion/mips64orion.texi index e6d72a6e8f..acd974ce1a 100644 --- a/doc/supplements/mips64orion/mips64orion.texi +++ b/doc/supplements/mips64orion/mips64orion.texi @@ -1,6 +1,6 @@ \input texinfo @c -*-texinfo-*- @c %**start of header -@setfilename c_mips64orion +@setfilename mips64orion @syncodeindex vr fn @synindex ky cp @paragraphindent 0 @@ -76,7 +76,7 @@ END-INFO-DIR-ENTRY @include timeBSP.texi @ifinfo @node Top, Preface, (dir), (dir) -@top c_mips64orion +@top mips64orion This is the online version of the RTEMS MIPS64 Orion Applications Supplement. diff --git a/doc/supplements/mips64orion/timeBSP_.t b/doc/supplements/mips64orion/timeBSP_.t new file mode 100644 index 0000000000..3da8e44f40 --- /dev/null +++ b/doc/supplements/mips64orion/timeBSP_.t @@ -0,0 +1,1442 @@ +@c +@c COPYRIGHT (c) 1988-1999. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@include ../../common/timemac.texi +@tex +\global\advance \smallskipamount by -4pt +@end tex + +@chapter BSP_FOR_TIMES Timing Data + +@section Introduction + +The timing data for the XXX version of RTEMS is +provided along with the target dependent aspects concerning the +gathering of the timing data. The hardware platform used to +gather the times is described to give the reader a better +understanding of each directive time provided. Also, provided +is a description of the interrupt latency and the context switch +times as they pertain to the XXX version of RTEMS. + +@section Hardware Platform + +All times reported except for the maximum period +interrupts are disabled by RTEMS were measured using a Motorola +BSP_FOR_TIMES CPU board. The BSP_FOR_TIMES is a 20Mhz board with one wait +state dynamic memory and a XXX numeric coprocessor. The +Zilog 8036 countdown timer on this board was used to measure +elapsed time with a one-half microsecond resolution. All +sources of hardware interrupts were disabled, although the +interrupt level of the XXX allows all interrupts. + +The maximum period interrupts are disabled was +measured by summing the number of CPU cycles required by each +assembly language instruction executed while interrupts were +disabled. The worst case times of the XXX microprocessor +were used for each instruction. Zero wait state memory was +assumed. The total CPU cycles executed with interrupts +disabled, including the instructions to disable and enable +interrupts, was divided by 20 to simulate a 20Mhz XXX. It +should be noted that the worst case instruction times for the +XXX assume that the internal cache is disabled and that no +instructions overlap. + +@section Interrupt Latency + +The maximum period with interrupts disabled within +RTEMS is less than TBD +microseconds including the instructions +which disable and re-enable interrupts. The time required for +the XXX to vector an interrupt and for the RTEMS entry +overhead before invoking the user's interrupt handler are a +total of 9 +microseconds. These combine to yield a worst case +interrupt latency of less than +TBD + 9 +microseconds at 20Mhz. [NOTE: The maximum period with interrupts +disabled was last determined for Release +4.0.0.] + +It should be noted again that the maximum period with +interrupts disabled within RTEMS is hand-timed and based upon +worst case (i.e. CPU cache disabled and no instruction overlap) +times for a 20Mhz XXX. The interrupt vector and entry +overhead time was generated on an BSP_FOR_TIMES benchmark platform +using the Multiprocessing Communications registers to generate +as the interrupt source. + +@section Context Switch + +The RTEMS processor context switch time is 35 +microseconds on the BSP_FOR_TIMES benchmark platform when no floating +point context is saved or restored. Additional execution time +is required when a TASK_SWITCH user extension is configured. +The use of the TASK_SWITCH extension is application dependent. +Thus, its execution time is not considered part of the raw +context switch time. + +Since RTEMS was designed specifically for embedded +missile applications which are floating point intensive, the +executive is optimized to avoid unnecessarily saving and +restoring the state of the numeric coprocessor. The state of +the numeric coprocessor is only saved when an FLOATING_POINT +task is dispatched and that task was not the last task to +utilize the coprocessor. In a system with only one +FLOATING_POINT task, the state of the numeric coprocessor will +never be saved or restored. When the first FLOATING_POINT task +is dispatched, RTEMS does not need to save the current state of +the numeric coprocessor. + +The exact amount of time required to save and restore +floating point context is dependent on whether an XXX or +XXX is being used as well as the state of the numeric +coprocessor. These numeric coprocessors define three operating +states: initialized, idle, and busy. RTEMS places the +coprocessor in the initialized state when a task is started or +restarted. Once the task has utilized the coprocessor, it is in +the idle state when floating point instructions are not +executing and the busy state when floating point instructions +are executing. The state of the coprocessor is task specific. + +The following table summarizes the context switch +times for the BSP_FOR_TIMES benchmark platform: + +@c ****** This comment is here to remind you not to edit the timetbl.t +@c ****** in any directory but common. +@c +@c Time Table Template +@c +@c COPYRIGHT (c) 1988-1999. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@ifset use-tex +@sp 1 +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{No Floating Point Contexts}{35} +\rtemsdirective{Floating Point Contexts} +\rtemscase{restore first FP task}{39} +\rtemscase{save initialized, restore initialized}{66} +\rtemscase{save idle, restore initialized}{66} +\rtemscase{save idle, restore idle}{68} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet +@item No Floating Point Contexts +@itemize - +@item only case: 35 +@end itemize +@item Floating Point Contexts +@itemize - +@item restore first FP task: 39 +@item save initialized, restore initialized: 66 +@item save idle, restore initialized: 66 +@item save idle, restore idle: 66 +@end itemize +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + +
    No Floating Point Contexts35
    Floating Point Contexts
    restore first FP task
    39
    save initialized, restore initialized
    66
    save idle, restore initialized
    66
    save idle, restore idle
    68
    +
    +@end html +@end ifset + +@section Directive Times + +This sections is divided into a number of +subsections, each of which contains a table listing the +execution times of that manager's directives. + +@page +@section Task Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{TASK\_CREATE}{148} +\rtemsonecase{TASK\_IDENT}{350} +\rtemsonecase{TASK\_START}{76} +\rtemsdirective{TASK\_RESTART} +\rtemscase{calling task}{95} +\rtemscase{suspended task -- returns to caller} + {89} +\rtemscase{blocked task -- returns to caller} + {124} +\rtemscase{ready task -- returns to caller} + {92} +\rtemscase{suspended task -- preempts caller} + {125} +\rtemscase{blocked task -- preempts caller} + {149} +\rtemscase{ready task -- preempts caller} + {142} +\rtemsdirective{TASK\_DELETE} +\rtemscase{calling task}{170} +\rtemscase{suspended task}{138} +\rtemscase{blocked task}{143} +\rtemscase{ready task}{144} +\rtemsdirective{TASK\_SUSPEND} +\rtemscase{calling task}{71} +\rtemscase{returns to caller}{43} +\rtemsdirective{TASK\_RESUME} +\rtemscase{task readied -- returns to caller} + {45} +\rtemscase{task readied -- preempts caller} + {67} +\rtemsdirective{TASK\_SET\_PRIORITY} +\rtemscase{obtain current priority} + {31} +\rtemscase{returns to caller}{64} +\rtemscase{preempts caller}{106} +\rtemsdirective{TASK\_MODE} +\rtemscase{obtain current mode}{14} +\rtemscase{no reschedule}{16} +\rtemscase{reschedule -- returns to caller} + {23} +\rtemscase{reschedule -- preempts caller} + {60} +\rtemsonecase{TASK\_GET\_NOTE}{33} +\rtemsonecase{TASK\_SET\_NOTE}{33} +\rtemsdirective{TASK\_WAKE\_AFTER} +\rtemscase{yield -- returns to caller} + {16} +\rtemscase{yield -- preempts caller} + {56} +\rtemsonecase{TASK\_WAKE\_WHEN}{117} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item TASK_CREATE +@itemize - +@item only case: 148 +@end itemize + +@item TASK_IDENT +@itemize - +@item only case: 350 +@end itemize + +@item TASK_START +@itemize - +@item only case: 76 +@end itemize + +@item TASK_RESTART +@itemize - +@item calling task: 95 +@item suspended task -- returns to caller: 89 +@item blocked task -- returns to caller: 124 +@item ready task -- returns to caller: 92 +@item suspended task -- preempts caller: 125 +@item blocked task -- preempts caller: 149 +@item ready task -- preempts caller: 142 +@end itemize + +@item TASK_DELETE +@itemize - +@item calling task: 170 +@item suspended task: 138 +@item blocked task: 143 +@item ready task: 144 +@end itemize + +@item TASK_SUSPEND +@itemize - +@item calling task: 71 +@item returns to caller: 43 +@end itemize + +@item TASK_RESUME +@itemize - +@item task readied -- returns to caller: 45 +@item task readied -- preempts caller: 67 +@end itemize + +@item TASK_SET_PRIORITY +@itemize - +@item obtain current priority: 31 +@item returns to caller: 64 +@item preempts caller: 106 +@end itemize + +@item TASK_MODE +@itemize - +@item obtain current mode: 14 +@item no reschedule: 16 +@item reschedule -- returns to caller: 23 +@item reschedule -- preempts caller: 60 +@end itemize + +@item TASK_GET_NOTE +@itemize - +@item only case: 33 +@end itemize + +@item TASK_SET_NOTE +@itemize - +@item only case: 33 +@end itemize + +@item TASK_WAKE_AFTER +@itemize - +@item yield -- returns to caller: 16 +@item yield -- preempts caller: 56 +@end itemize + +@item TASK_WAKE_WHEN +@itemize - +@item only case: 117 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TASK_CREATE148
    TASK_IDENT350
    TASK_START76
    TASK_RESTART
    calling task
    95
    suspended task -- returns to caller
    89
    blocked task -- returns to caller
    124
    ready task -- returns to caller
    92
    suspended task -- preempts caller
    125
    blocked task -- preempts caller
    149
    ready task -- preempts caller
    142
    TASK_DELETE
    calling task
    170
    suspended task
    138
    blocked task
    143
    ready task
    144
    TASK_SUSPEND
    calling task
    71
    returns to caller
    43
    TASK_RESUME
    task readied -- returns to caller
    45
    task readied -- preempts caller
    67
    TASK_SET_PRIORITY
    obtain current priority
    31
    returns to caller
    64
    preempts caller
    106
    TASK_MODE
    obtain current mode
    14
    no reschedule
    16
    reschedule -- returns to caller
    23
    reschedule -- preempts caller
    60
    TASK_GET_NOTE33
    TASK_SET_NOTE33
    TASK_WAKE_AFTER
    yield -- returns to caller
    16
    yield -- preempts caller
    56
    TASK_WAKE_WHEN117
    +
    +@end html +@end ifset + +@page +@section Interrupt Manager + +It should be noted that the interrupt entry times +include vectoring the interrupt handler. + +@ifset use-tex +@sp 1 +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsdirective{Interrupt Entry Overhead} +\rtemscase{returns to nested interrupt}{12} +\rtemscase{returns to interrupted task} + {9} +\rtemscase{returns to preempting task} + {9} +\rtemsdirective{Interrupt Exit Overhead} +\rtemscase{returns to nested interrupt}{<1} +\rtemscase{returns to interrupted task} + {8} +\rtemscase{returns to preempting task} + {54} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item Interrupt Entry Overhead +@itemize - +@item returns to nested interrupt: 12 +@item returns to interrupted task: 9 +@item returns to preempting task: 9 +@end itemize + +@item Interrupt Exit Overhead +@itemize - +@item returns to nested interrupt: <1 +@item returns to interrupted task: 8 +@item returns to preempting task: 54 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + +
    Interrupt Entry Overhead
    returns to nested interrupt
    12
    returns to interrupted task
    9
    returns to preempting task
    9
    Interrupt Exit Overhead
    returns to nested interrupt
    <1
    returns to interrupted task
    8
    returns to preempting task
    54
    +
    +@end html +@end ifset + + +@section Clock Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{CLOCK\_SET}{86} +\rtemsonecase{CLOCK\_GET}{1} +\rtemsonecase{CLOCK\_TICK}{17} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item CLOCK_SET +@itemize - +@item only case: 86 +@end itemize + +@item CLOCK_GET +@itemize - +@item only case: 1 +@end itemize + +@item CLOCK_TICK +@itemize - +@item only case: 17 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + +
    CLOCK_SET86
    CLOCK_GET1
    CLOCK_TICK17
    +
    +@end html +@end ifset + +@section Timer Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{TIMER\_CREATE}{28} +\rtemsonecase{TIMER\_IDENT}{343} +\rtemsdirective{TIMER\_DELETE} +\rtemscase{inactive}{43} +\rtemscase{active}{47} +\rtemsdirective{TIMER\_FIRE\_AFTER} +\rtemscase{inactive}{58} +\rtemscase{active}{61} +\rtemsdirective{TIMER\_FIRE\_WHEN} +\rtemscase{inactive}{88} +\rtemscase{active}{88} +\rtemsdirective{TIMER\_RESET} +\rtemscase{inactive}{54} +\rtemscase{active}{58} +\rtemsdirective{TIMER\_CANCEL} +\rtemscase{inactive}{31} +\rtemscase{active}{34} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item TIMER_CREATE +@itemize - +@item only case: 28 +@end itemize + +@item TIMER_IDENT +@itemize - +@item only case: 343 +@end itemize + +@item TIMER_DELETE +@itemize - +@item inactive: 43 +@item active: 47 +@end itemize + +@item TIMER_FIRE_AFTER +@itemize - +@item inactive: 58 +@item active: 61 +@end itemize + +@item TIMER_FIRE_WHEN +@itemize - +@item inactive: TIMER_FIRE_WHEN_INACTIVE +@item active: TIMER_FIRE_WHEN_ACTIVE +@end itemize + +@item TIMER_RESET +@itemize - +@item inactive: TIMER_RESET_INACTIVE +@item active: TIMER_RESET_ACTIVE +@end itemize + +@item TIMER_CANCEL +@itemize - +@item inactive: TIMER_CANCEL_INACTIVE +@item active: TIMER_CANCEL_ACTIVE +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TIMER_CREATE28
    TIMER_IDENT343
    TIMER_DELETE
    inactive
    43
    active
    47
    TIMER_FIRE_AFTER
    inactive
    58
    active
    61
    TIMER_FIRE_WHEN
    inactive
    88
    active
    88
    TIMER_RESET
    inactive
    54
    active
    58
    TIMER_CANCEL
    inactive
    31
    active
    34
    +
    +@end html +@end ifset + +@page +@section Semaphore Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{SEMAPHORE\_CREATE}{60} +\rtemsonecase{SEMAPHORE\_IDENT}{367} +\rtemsonecase{SEMAPHORE\_DELETE}{58} +\rtemsdirective{SEMAPHORE\_OBTAIN} +\rtemscase{available}{38} +\rtemscase{not available -- NO\_WAIT} + {38} +\rtemscase{not available -- caller blocks} + {109} +\rtemsdirective{SEMAPHORE\_RELEASE} +\rtemscase{no waiting tasks}{44} +\rtemscase{task readied -- returns to caller} + {66} +\rtemscase{task readied -- preempts caller} + {87} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item SEMAPHORE_CREATE +@itemize - +@item only case: 60 +@end itemize + +@item SEMAPHORE_IDENT +@itemize - +@item only case: 367 +@end itemize + +@item SEMAPHORE_DELETE +@itemize - +@item only case: 58 +@end itemize + +@item SEMAPHORE_OBTAIN +@itemize - +@item available: 38 +@item not available -- NO_WAIT: 38 +@item not available -- caller blocks: 109 +@end itemize + +@item SEMAPHORE_RELEASE +@itemize - +@item no waiting tasks: 44 +@item task readied -- returns to caller: 66 +@item task readied -- preempts caller: 87 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + +
    SEMAPHORE_CREATE60
    SEMAPHORE_IDENT367
    SEMAPHORE_DELETE58
    SEMAPHORE_OBTAIN
    available
    38
    not available -- NO_WAIT
    38
    not available -- caller blocks
    109
    SEMAPHORE_RELEASE
    no waiting tasks
    44
    task readied -- returns to caller
    66
    task readied -- preempts caller
    87
    +
    +@end html +@end ifset + +@section Message Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{MESSAGE\_QUEUE\_CREATE}{200} +\rtemsonecase{MESSAGE\_QUEUE\_IDENT}{341} +\rtemsonecase{MESSAGE\_QUEUE\_DELETE}{80} +\rtemsdirective{MESSAGE\_QUEUE\_SEND} +\rtemscase{no waiting tasks} + {97} +\rtemscase{task readied -- returns to caller} + {101} +\rtemscase{task readied -- preempts caller} + {123} +\rtemsdirective{MESSAGE\_QUEUE\_URGENT} +\rtemscase{no waiting tasks}{96} +\rtemscase{task readied -- returns to caller} + {101} +\rtemscase{task readied -- preempts caller} + {123} +\rtemsdirective{MESSAGE\_QUEUE\_BROADCAST} +\rtemscase{no waiting tasks}{53} +\rtemscase{task readied -- returns to caller} + {111} +\rtemscase{task readied -- preempts caller} + {133} +\rtemsdirective{MESSAGE\_QUEUE\_RECEIVE} +\rtemscase{available}{79} +\rtemscase{not available -- NO\_WAIT} + {43} +\rtemscase{not available -- caller blocks} + {114} +\rtemsdirective{MESSAGE\_QUEUE\_FLUSH} +\rtemscase{no messages flushed}{29} +\rtemscase{messages flushed}{39} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item MESSAGE_QUEUE_CREATE +@itemize - +@item only case: 200 +@end itemize + +@item MESSAGE_QUEUE_IDENT +@itemize - +@item only case: 341 +@end itemize + +@item MESSAGE_QUEUE_DELETE +@itemize - +@item only case: 80 +@end itemize + +@item MESSAGE_QUEUE_SEND +@itemize - +@item no waiting tasks: 97 +@item task readied -- returns to caller: 101 +@item task readied -- preempts caller: 123 +@end itemize + +@item MESSAGE_QUEUE_URGENT +@itemize - +@item no waiting tasks: 96 +@item task readied -- returns to caller: 101 +@item task readied -- preempts caller: 123 +@end itemize + +@item MESSAGE_QUEUE_BROADCAST +@itemize - +@item no waiting tasks: 53 +@item task readied -- returns to caller: 111 +@item task readied -- preempts caller: 133 +@end itemize + +@item MESSAGE_QUEUE_RECEIVE +@itemize - +@item available: 79 +@item not available -- NO_WAIT: 43 +@item not available -- caller blocks: 114 +@end itemize + +@item MESSAGE_QUEUE_FLUSH +@itemize - +@item no messages flushed: 29 +@item messages flushed: 39 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    MESSAGE_QUEUE_CREATE200
    MESSAGE_QUEUE_IDENT341
    MESSAGE_QUEUE_DELETE80
    MESSAGE_QUEUE_SEND
    no waiting tasks
    97
    task readied -- returns to caller
    101
    task readied -- preempts caller
    123
    MESSAGE_QUEUE_URGENT
    no waiting tasks
    96
    task readied -- returns to caller
    101
    task readied -- preempts caller
    123
    MESSAGE_QUEUE_BROADCAST
    no waiting tasks
    53
    task readied -- returns to caller
    111
    task readied -- preempts caller
    133
    MESSAGE_QUEUE_RECEIVE
    available
    79
    not available -- NO_WAIT
    43
    not available -- caller blocks
    114
    MESSAGE_QUEUE_FLUSH
    no messages flushed
    29
    messages flushed
    39
    +
    +@end html +@end ifset + +@page +@section Event Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsdirective{EVENT\_SEND} +\rtemscase{no task readied}{24} +\rtemscase{task readied -- returns to caller} + {60} +\rtemscase{task readied -- preempts caller} + {84} +\rtemsdirective{EVENT\_RECEIVE} +\rtemscase{obtain current events}{1} +\rtemscase{available}{28} +\rtemscase{not available -- NO\_WAIT}{23} +\rtemscase{not available -- caller blocks} + {84} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item EVENT_SEND +@itemize - +@item no task readied: 24 +@item task readied -- returns to caller: 60 +@item task readied -- preempts caller: 84 +@end itemize + +@item EVENT_RECEIVE +@itemize - +@item obtain current events: 1 +@item available: 28 +@item not available -- NO_WAIT: 23 +@item not available -- caller blocks: 84 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + +
    EVENT_SEND
    no task readied
    24
    task readied -- returns to caller
    60
    task readied -- preempts caller
    84
    EVENT_RECEIVE
    obtain current events
    1
    available
    28
    not available -- NO_WAIT
    23
    not available -- caller blocks
    84
    +
    +@end html +@end ifset +@section Signal Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{SIGNAL\_CATCH}{15} +\rtemsdirective{SIGNAL\_SEND} +\rtemscase{returns to caller}{37} +\rtemscase{signal to self}{55} +\rtemsdirective{EXIT ASR OVERHEAD} +\rtemscase{returns to calling task} + {37} +\rtemscase{returns to preempting task} + {54} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet +@item SIGNAL_CATCH +@itemize - +@item only case: 15 +@end itemize + +@item SIGNAL_SEND +@itemize - +@item returns to caller: 37 +@item signal to self: 55 +@end itemize + +@item EXIT ASR OVERHEAD +@itemize - +@item returns to calling task: 37 +@item returns to preempting task: 54 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + +
    SIGNAL_CATCH15
    SIGNAL_SEND
    returns to caller
    37
    signal to self
    55
    EXIT ASR OVERHEAD
    returns to calling task
    + 37
    returns to preempting task
    + 54
    +
    +@end html +@end ifset + +@section Partition Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{PARTITION\_CREATE}{70} +\rtemsonecase{PARTITION\_IDENT}{341} +\rtemsonecase{PARTITION\_DELETE}{42} +\rtemsdirective{PARTITION\_GET\_BUFFER} +\rtemscase{available}{35} +\rtemscase{not available}{33} +\rtemsonecase{PARTITION\_RETURN\_BUFFER} + {33} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item PARTITION_CREATE +@itemize - +@item only case: 70 +@end itemize + +@item PARTITION_IDENT +@itemize - +@item only case: 341 +@end itemize + +@item PARTITION_DELETE +@itemize - +@item only case: 42 +@end itemize + +@item PARTITION_GET_BUFFER +@itemize - +@item available: 35 +@item not available: 33 +@end itemize + +@item PARTITION_RETURN_BUFFER +@itemize - +@item only case: 43 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + +
    PARTITION_CREATE70
    PARTITION_IDENT341
    PARTITION_DELETE42
    PARTITION_GET_BUFFER
    available
    35
    not available
    33
    PARTITION_RETURN_BUFFER33
    +
    +@end html +@end ifset + +@page +@section Region Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{REGION\_CREATE}{63} +\rtemsonecase{REGION\_IDENT}{348} +\rtemsonecase{REGION\_DELETE}{39} +\rtemsdirective{REGION\_GET\_SEGMENT} +\rtemscase{available}{52} +\rtemscase{not available -- NO\_WAIT} + {49} +\rtemscase{not available -- caller blocks} + {123} +\rtemsdirective{REGION\_RETURN\_SEGMENT} +\rtemscase{no waiting tasks}{54} +\rtemscase{task readied -- returns to caller} + {114} +\rtemscase{task readied -- preempts caller} + {136} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item REGION_CREATE +@itemize - +@item only case: 63 +@end itemize + +@item REGION_IDENT +@itemize - +@item only case: 348 +@end itemize + +@item REGION_DELETE +@itemize - +@item only case: 39 +@end itemize + +@item REGION_GET_SEGMENT +@itemize - +@item available: 52 +@item not available -- NO_WAIT: 49 +@item not available -- caller blocks: 123 +@end itemize + +@item REGION_RETURN_SEGMENT +@itemize - +@item no waiting tasks: 54 +@item task readied -- returns to caller: 114 +@item task readied -- preempts caller: 136 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + +
    REGION_CREATE63
    REGION_IDENT348
    REGION_DELETE39
    REGION_GET_SEGMENT
    available
    52
    not available -- NO_WAIT
    + 49
    not available -- caller blocks
    + 123
    REGION_RETURN_SEGMENT
    no waiting tasks
    54
    task readied -- returns to caller
    + 114
    task readied -- preempts caller
    + 136
    +
    +@end html +@end ifset + +@section Dual-Ported Memory Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{PORT\_CREATE}{35} +\rtemsonecase{PORT\_IDENT}{340} +\rtemsonecase{PORT\_DELETE}{39} +\rtemsonecase{PORT\_INTERNAL\_TO\_EXTERNAL} + {26} +\rtemsonecase{PORT\_EXTERNAL\_TO\_INTERNAL} + {27} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item PORT_CREATE +@itemize - +@item only case: 35 +@end itemize + +@item PORT_IDENT +@itemize - +@item only case: 340 +@end itemize + +@item PORT_DELETE +@itemize - +@item only case: 39 +@end itemize + +@item PORT_INTERNAL_TO_EXTERNAL +@itemize - +@item only case: 26 +@end itemize + +@item PORT_EXTERNAL_TO_INTERNAL +@itemize - +@item only case: 27 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + +
    PORT_CREATE35
    PORT_IDENT340
    PORT_DELETE39
    PORT_INTERNAL_TO_EXTERNAL26
    PORT_EXTERNAL_TO_INTERNAL27
    +
    +@end html +@end ifset + +@section I/O Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{IO\_INITIALIZE}{4} +\rtemsonecase{IO\_OPEN}{2} +\rtemsonecase{IO\_CLOSE}{1} +\rtemsonecase{IO\_READ}{2} +\rtemsonecase{IO\_WRITE}{3} +\rtemsonecase{IO\_CONTROL}{2} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item IO_INITIALIZE +@itemize - +@item only case: 4 +@end itemize + +@item IO_OPEN +@itemize - +@item only case: 2 +@end itemize + +@item IO_CLOSE +@itemize - +@item only case: 1 +@end itemize + +@item IO_READ +@itemize - +@item only case: 2 +@end itemize + +@item IO_WRITE +@itemize - +@item only case: 3 +@end itemize + +@item IO_CONTROL +@itemize - +@item only case: 2 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + +
    IO_INITIALIZE4
    IO_OPEN2
    IO_CLOSE1
    IO_READ2
    IO_WRITE3
    IO_CONTROL2
    +
    +@end html +@end ifset + +@section Rate Monotonic Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{RATE\_MONOTONIC\_CREATE}{32} +\rtemsonecase{RATE\_MONOTONIC\_IDENT}{341} +\rtemsonecase{RATE\_MONOTONIC\_CANCEL}{39} +\rtemsdirective{RATE\_MONOTONIC\_DELETE} +\rtemscase{active}{51} +\rtemscase{inactive}{48} +\rtemsdirective{RATE\_MONOTONIC\_PERIOD} +\rtemscase{initiate period -- returns to caller} + {54} +\rtemscase{conclude period -- caller blocks} + {74} +\rtemscase{obtain status}{31} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item RATE_MONOTONIC_CREATE +@itemize - +@item only case: 32 +@end itemize + +@item RATE_MONOTONIC_IDENT +@itemize - +@item only case: 341 +@end itemize + +@item RATE_MONOTONIC_CANCEL +@itemize - +@item only case: 39 +@end itemize + +@item RATE_MONOTONIC_DELETE +@itemize - +@item active: 51 +@item inactive: 48 +@end itemize + +@item RATE_MONOTONIC_PERIOD +@itemize - +@item initiate period -- returns to caller: 54 +@item conclude period -- caller blocks: 74 +@item obtain status: 31 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + +
    RATE_MONOTONIC_CREATE32
    RATE_MONOTONIC_IDENT341
    RATE_MONOTONIC_CANCEL39
    RATE_MONOTONIC_DELETE
    active
    51
    inactive
    48
    RATE_MONOTONIC_PERIOD
    initiate period -- returns to caller
    + 54
    conclude period -- caller blocks
    + 74
    obtain status
    31
    +
    +@end html +@end ifset + +@tex +\global\advance \smallskipamount by 4pt +@end tex + +@tex +\global\advance \smallskipamount by 4pt +@end tex diff --git a/doc/supplements/powerpc/Makefile b/doc/supplements/powerpc/Makefile deleted file mode 100644 index 585671c558..0000000000 --- a/doc/supplements/powerpc/Makefile +++ /dev/null @@ -1,183 +0,0 @@ -# -# COPYRIGHT (c) 1988-1999. -# On-Line Applications Research Corporation (OAR). -# All rights reserved. -# -# $Id$ -# - -PROJECT=powerpc - -include ../../Make.config - -REPLACE=../../tools/word-replace - -all: html info ps pdf - -dirs: - $(make-dirs) - -COMMON_FILES=../../common/cpright.texi ../../common/setup.texi - -GENERATED_FILES=\ - cpumodel.texi callconv.texi memmodel.texi intr.texi fatalerr.texi \ - bsp.texi cputable.texi timing.texi wksheets.texi timePSIM.texi timeDMV177.texi - -FILES= $(PROJECT).texi \ - preface.texi \ - $(GENERATED_FILES) - -INFOFILES=$(wildcard $(PROJECT) $(PROJECT)-*) - -info: dirs c_$(PROJECT) - cp c_$(PROJECT) c_$(PROJECT)-* $(INFO_INSTALL) - -c_$(PROJECT): $(FILES) - $(MAKEINFO) $(PROJECT).texi - -dvi: dirs $(PROJECT).dvi -ps: dirs $(PROJECT).ps -pdf: dirs $(PROJECT).pdf - -$(PROJECT).pdf: $(FILES) - $(TEXI2PDF) $(PROJECT).texi - cp $(PROJECT).pdf $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).ps: $(PROJECT).dvi - dvips -o $(PROJECT).ps $(PROJECT).dvi - cp $(PROJECT).ps $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).dvi: $(FILES) - $(TEXI2DVI) $(PROJECT).texi - cp $(PROJECT).dvi $(WWW_INSTALL)/$(PROJECT) - -html: dirs $(FILES) - -mkdir -p $(WWW_INSTALL)/$(PROJECT) - $(TEXI2WWW) $(TEXI2WWW_ARGS) -dir $(WWW_INSTALL)/$(PROJECT) \ - $(PROJECT).texi - -clean: - rm -f *.o $(PROG) *.txt core $(PROJECT).pdf - rm -f *.dvi *.ps *.log *.aux *.cp *.fn *.ky *.pg *.toc *.tp *.vr $(BASE) - rm -f $(PROJECT) $(PROJECT)-* - rm -f c_$(PROJECT) c_$(PROJECT)-* - rm -f intr.t $(GENERATED_FILES) - rm -f wksheets.t wksheets_NOTIMES.t timing.t - rm -f timePSIM_.t timePSIM_.texi - rm -f timeDMV177_.t timeDMV177_.texi - rm -f *.fixed _* - -# -# Chapters which get automatic processing -# - -cpumodel.texi: cpumodel.t Makefile - $(BMENU) -p "Preface" \ - -u "Top" \ - -n "Calling Conventions" ${*}.t - -callconv.texi: callconv.t Makefile - $(BMENU) -p "CPU Model Dependent Features Low Power Model" \ - -u "Top" \ - -n "Memory Model" ${*}.t - -memmodel.texi: memmodel.t Makefile - $(BMENU) -p "Calling Conventions User-Provided Routines" \ - -u "Top" \ - -n "Interrupt Processing" ${*}.t - -# Interrupt Chapter: -# 1. Replace Times and Sizes -# 2. Build Node Structure -intr.t: intr_NOTIMES.t PSIM_TIMES - ${REPLACE} -p PSIM_TIMES intr_NOTIMES.t - mv intr_NOTIMES.t.fixed intr.t - -intr.texi: intr.t Makefile - $(BMENU) -p "Memory Model Flat Memory Model" \ - -u "Top" \ - -n "Default Fatal Error Processing" ${*}.t - -fatalerr.texi: fatalerr.t Makefile - $(BMENU) -p "Interrupt Processing Interrupt Stack" \ - -u "Top" \ - -n "Board Support Packages" ${*}.t - -bsp.texi: bsp.t Makefile - $(BMENU) -p "Default Fatal Error Processing Default Fatal Error Handler Operations" \ - -u "Top" \ - -n "Processor Dependent Information Table" ${*}.t - -cputable.texi: cputable.t Makefile - $(BMENU) -p "Board Support Packages Processor Initialization" \ - -u "Top" \ - -n "Memory Requirements" ${*}.t - -# Worksheets Chapter: -# 1. Obtain the Shared File -# 2. Replace Times and Sizes -# 3. Build Node Structure - -wksheets_NOTIMES.t: ../../common/wksheets.t - cp ../../common/wksheets.t wksheets_NOTIMES.t - -wksheets.t: wksheets_NOTIMES.t PSIM_TIMES - ${REPLACE} -p PSIM_TIMES wksheets_NOTIMES.t - mv wksheets_NOTIMES.t.fixed wksheets.t - -wksheets.texi: wksheets.t Makefile - $(BMENU) -p "Processor Dependent Information Table CPU Dependent Information Table" \ - -u "Top" \ - -n "Timing Specification" ${*}.t - -# Timing Specification Chapter: -# 1. Copy the Shared File -# 3. Build Node Structure - -timing.t: ../../common/timing.t - cp ../../common/timing.t timing.t - -timing.texi: timing.t Makefile - $(BMENU) -p "Memory Requirements RTEMS RAM Workspace Worksheet" \ - -u "Top" \ - -n "PSIM Timing Data" ${*}.t - -# Timing Data for PSIM BSP Chapter: -# 1. Copy the Shared File -# 2. Replace Times and Sizes -# 3. Build Node Structure - -timePSIM_.t: ../../common/timetbl.t timePSIM.t - cat timePSIM.t ../../common/timetbl.t >timePSIM_.t - @echo >>timePSIM_.t - @echo "@tex" >>timePSIM_.t - @echo "\\global\\advance \\smallskipamount by 4pt" >>timePSIM_.t - @echo "@end tex" >>timePSIM_.t - ${REPLACE} -p PSIM_TIMES timePSIM_.t - mv timePSIM_.t.fixed timePSIM_.t - -timePSIM.texi: timePSIM_.t Makefile - $(BMENU) -p "Timing Specification Terminology" \ - -u "Top" \ - -n "DMV177 Timing Data" timePSIM_.t - mv timePSIM_.texi timePSIM.texi - -# Timing Data for DMV177 BSP Chapter: -# 1. Copy the Shared File -# 2. Replace Times and Sizes -# 3. Build Node Structure - -timeDMV177_.t: ../../common/timetbl.t timeDMV177.t - cat timeDMV177.t ../../common/timetbl.t >timeDMV177_.t - @echo >>timeDMV177_.t - @echo "@tex" >>timeDMV177_.t - @echo "\\global\\advance \\smallskipamount by 4pt" >>timeDMV177_.t - @echo "@end tex" >>timeDMV177_.t - ${REPLACE} -p DMV177_TIMES timeDMV177_.t - mv timeDMV177_.t.fixed timeDMV177_.t - -timeDMV177.texi: timeDMV177_.t Makefile - $(BMENU) -p "PSIM Timing Data Rate Monotonic Manager" \ - -u "Top" \ - -n "Command and Variable Index" timeDMV177_.t - mv timeDMV177_.texi timeDMV177.texi diff --git a/doc/supplements/powerpc/Makefile.am b/doc/supplements/powerpc/Makefile.am new file mode 100644 index 0000000000..40a4dc2d3c --- /dev/null +++ b/doc/supplements/powerpc/Makefile.am @@ -0,0 +1,134 @@ +# +# COPYRIGHT (c) 1988-1999. +# On-Line Applications Research Corporation (OAR). +# All rights reserved. +# +# $Id$ +# + +AUTOMAKE_OPTIONS = foreign + +PROJECT=powerpc + +include $(top_srcdir)/project.am +include $(top_srcdir)/supplements/supplement.am + +COMMON_FILES=$(top_srcdir)/common/cpright.texi $(top_builddir)/common/setup.texi + +GENERATED_FILES=\ + cpumodel.texi callconv.texi memmodel.texi intr.texi fatalerr.texi \ + bsp.texi cputable.texi timing.texi wksheets.texi timePSIM.texi timeDMV177.texi + +FILES= preface.texi + +info_TEXINFOS = powerpc.texi +powerpc_TEXINFOS = $(FILES) $(COMMON_FILES) $(GENERATED_FILES) + +# +# Chapters which get automatic processing +# + +cpumodel.texi: cpumodel.t + $(BMENU) -p "Preface" \ + -u "Top" \ + -n "Calling Conventions" $< + +callconv.texi: callconv.t + $(BMENU) -p "CPU Model Dependent Features Low Power Model" \ + -u "Top" \ + -n "Memory Model" $< + +memmodel.texi: memmodel.t + $(BMENU) -p "Calling Conventions User-Provided Routines" \ + -u "Top" \ + -n "Interrupt Processing" $< + +# Interrupt Chapter: +# 1. Replace Times and Sizes +# 2. Build Node Structure +intr.texi: intr_NOTIMES.t PSIM_TIMES + ${REPLACE2} -p $(srcdir)/PSIM_TIMES $(srcdir)/intr_NOTIMES.t intr.t + $(BMENU) -p "Memory Model Flat Memory Model" \ + -u "Top" \ + -n "Default Fatal Error Processing" intr.t +CLEANFILES += intr.t + +fatalerr.texi: fatalerr.t + $(BMENU) -p "Interrupt Processing Interrupt Stack" \ + -u "Top" \ + -n "Board Support Packages" $< + +bsp.texi: bsp.t + $(BMENU) -p "Default Fatal Error Processing Default Fatal Error Handler Operations" \ + -u "Top" \ + -n "Processor Dependent Information Table" $< + +cputable.texi: cputable.t + $(BMENU) -p "Board Support Packages Processor Initialization" \ + -u "Top" \ + -n "Memory Requirements" $< + +# Worksheets Chapter: +# 1. Obtain the Shared File +# 2. Replace Times and Sizes +# 3. Build Node Structure + +wksheets.texi: $(top_srcdir)/common/wksheets.t PSIM_TIMES + ${REPLACE2} -p $(srcdir)/PSIM_TIMES \ + $(top_srcdir)/common/wksheets.t wksheets.t + $(BMENU) -p "Processor Dependent Information Table CPU Dependent Information Table" \ + -u "Top" \ + -n "Timing Specification" wksheets.t +CLEANFILES += wksheets.t + +# Timing Specification Chapter: +# 1. Copy the Shared File +# 3. Build Node Structure +timing.texi: $(top_srcdir)/common/timing.t + cp $(top_srcdir)/common/timing.t timing.t + $(BMENU) -p "Memory Requirements RTEMS RAM Workspace Worksheet" \ + -u "Top" \ + -n "PSIM Timing Data" timing.t +CLEANFILES += timing.t + +# Timing Data for PSIM BSP Chapter: +# 1. Copy the Shared File +# 2. Replace Times and Sizes +# 3. Build Node Structure + +timePSIM_.t: $(top_srcdir)/common/timetbl.t timePSIM.t + cat timePSIM.t $(top_srcdir)/common/timetbl.t >timePSIM_.t + @echo >>timePSIM_.t + @echo "@tex" >>timePSIM_.t + @echo "\\global\\advance \\smallskipamount by 4pt" >>timePSIM_.t + @echo "@end tex" >>timePSIM_.t + ${REPLACE} -p PSIM_TIMES timePSIM_.t + mv timePSIM_.t.fixed timePSIM_.t + +timePSIM.texi: timePSIM_.t + $(BMENU) -p "Timing Specification Terminology" \ + -u "Top" \ + -n "DMV177 Timing Data" timePSIM_.t + mv timePSIM_.texi timePSIM.texi + +# Timing Data for DMV177 BSP Chapter: +# 1. Copy the Shared File +# 2. Replace Times and Sizes +# 3. Build Node Structure + +timeDMV177_.t: $(top_srcdir)/common/timetbl.t timeDMV177.t + cat timeDMV177.t $(top_srcdir)/common/timetbl.t >timeDMV177_.t + @echo >>timeDMV177_.t + @echo "@tex" >>timeDMV177_.t + @echo "\\global\\advance \\smallskipamount by 4pt" >>timeDMV177_.t + @echo "@end tex" >>timeDMV177_.t + ${REPLACE} -p DMV177_TIMES timeDMV177_.t + mv timeDMV177_.t.fixed timeDMV177_.t + +timeDMV177.texi: timeDMV177_.t + $(BMENU) -p "PSIM Timing Data Rate Monotonic Manager" \ + -u "Top" \ + -n "Command and Variable Index" timeDMV177_.t + mv timeDMV177_.texi timeDMV177.texi + +EXTRA_DIST = DMV177_TIMES PSIM_TIMES *.t diff --git a/doc/supplements/powerpc/powerpc.texi b/doc/supplements/powerpc/powerpc.texi index b9661ad02d..2047f421e8 100644 --- a/doc/supplements/powerpc/powerpc.texi +++ b/doc/supplements/powerpc/powerpc.texi @@ -1,6 +1,6 @@ \input texinfo @c -*-texinfo-*- @c %**start of header -@setfilename c_powerpc +@setfilename powerpc @syncodeindex vr fn @synindex ky cp @paragraphindent 0 @@ -76,7 +76,7 @@ END-INFO-DIR-ENTRY @include timeDMV177.texi @ifinfo @node Top, Preface, (dir), (dir) -@top c_powerpc +@top powerpc This is the online version of the RTEMS PowerPC Applications Supplement. diff --git a/doc/supplements/powerpc/timeDMV177_.t b/doc/supplements/powerpc/timeDMV177_.t new file mode 100644 index 0000000000..85bb6fb41b --- /dev/null +++ b/doc/supplements/powerpc/timeDMV177_.t @@ -0,0 +1,1447 @@ +@c +@c Timing information for the DMV177 +@c +@c COPYRIGHT (c) 1988-1999. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@include ../../common/timemac.texi +@tex +\global\advance \smallskipamount by -4pt +@end tex + +@chapter DMV177 Timing Data + +@section Introduction + +The timing data for RTEMS on the DY-4 DMV177 board +is provided along with the target +dependent aspects concerning the gathering of the timing data. +The hardware platform used to gather the times is described to +give the reader a better understanding of each directive time +provided. Also, provided is a description of the interrupt +latency and the context switch times as they pertain to the +PowerPC version of RTEMS. + +@section Hardware Platform + +All times reported in this chapter were measured using a DMV177 board. +All data and code caching was disabled. This results in very deterministic +times which represent the worst possible performance. Many embedded +applications disable caching to insure that execution times are +repeatable. Moreover, the JTAG port on certain revisions of the PowerPC +603e does not operate properly if caching is enabled. Thus during +development and debug, caching must be off. + +The PowerPC decrementer register was was used to gather +all timing information. In the PowerPC architecture, +this register typically counts +something like CPU cycles or is a function of the clock +speed. On the PPC603e decrements once for every four (4) bus cycles. +On the DMV177, the bus operates at a clock speed of +33 Mhz. This result in a very accurate number since it is a function of the +microprocessor itself. Thus all measurements in this +chapter are reported as the actual number of decrementer +clicks reported. + +To convert the numbers reported to microseconds, one should +divide the number reported by 8.650752. This number was derived as +shown below: + +@example +((33 * 1048576) / 1000000) / 4 = 8.650752 +@end example + +All sources of hardware interrupts were disabled, +although traps were enabled and the interrupt level of the +PowerPC allows all interrupts. + +@section Interrupt Latency + +The maximum period with traps disabled or the +processor interrupt level set to it's highest value inside RTEMS +is less than TBD +microseconds including the instructions which +disable and re-enable interrupts. The time required for the +PowerPC to vector an interrupt and for the RTEMS entry overhead +before invoking the user's trap handler are a total of +202 +microseconds. These combine to yield a worst case interrupt +latency of less than TBD + +202 microseconds at +100.0 Mhz. +[NOTE: The maximum period with interrupts disabled was last +determined for Release 4.0.0-lmco.] + +The maximum period with interrupts disabled within +RTEMS is hand-timed with some assistance from the PowerPC simulator. +The maximum period with interrupts disabled with RTEMS has not +been calculated on this target. + +The interrupt vector and entry overhead time was +generated on the PSIM benchmark platform using the PowerPC's +decrementer register. This register was programmed to generate +an interrupt after one countdown. + +@section Context Switch + +The RTEMS processor context switch time is 585 +bus cycle on the DMV177 benchmark platform when no floating +point context is saved or restored. Additional execution time +is required when a TASK_SWITCH user extension is configured. +The use of the TASK_SWITCH extension is application dependent. +Thus, its execution time is not considered part of the raw +context switch time. + +Since RTEMS was designed specifically for embedded +missile applications which are floating point intensive, the +executive is optimized to avoid unnecessarily saving and +restoring the state of the numeric coprocessor. The state of +the numeric coprocessor is only saved when an FLOATING_POINT +task is dispatched and that task was not the last task to +utilize the coprocessor. In a system with only one +FLOATING_POINT task, the state of the numeric coprocessor will +never be saved or restored. When the first FLOATING_POINT task +is dispatched, RTEMS does not need to save the current state of +the numeric coprocessor. + +The following table summarizes the context switch +times for the DMV177 benchmark platform: + +@c ****** This comment is here to remind you not to edit the timetbl.t +@c ****** in any directory but common. +@c +@c Time Table Template +@c +@c COPYRIGHT (c) 1988-1999. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@ifset use-tex +@sp 1 +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{No Floating Point Contexts}{585} +\rtemsdirective{Floating Point Contexts} +\rtemscase{restore first FP task}{730} +\rtemscase{save initialized, restore initialized}{478} +\rtemscase{save idle, restore initialized}{825} +\rtemscase{save idle, restore idle}{478} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet +@item No Floating Point Contexts +@itemize - +@item only case: 585 +@end itemize +@item Floating Point Contexts +@itemize - +@item restore first FP task: 730 +@item save initialized, restore initialized: 478 +@item save idle, restore initialized: 825 +@item save idle, restore idle: 825 +@end itemize +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + +
    No Floating Point Contexts585
    Floating Point Contexts
    restore first FP task
    730
    save initialized, restore initialized
    478
    save idle, restore initialized
    825
    save idle, restore idle
    478
    +
    +@end html +@end ifset + +@section Directive Times + +This sections is divided into a number of +subsections, each of which contains a table listing the +execution times of that manager's directives. + +@page +@section Task Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{TASK\_CREATE}{2301} +\rtemsonecase{TASK\_IDENT}{2900} +\rtemsonecase{TASK\_START}{794} +\rtemsdirective{TASK\_RESTART} +\rtemscase{calling task}{1137} +\rtemscase{suspended task -- returns to caller} + {906} +\rtemscase{blocked task -- returns to caller} + {1102} +\rtemscase{ready task -- returns to caller} + {928} +\rtemscase{suspended task -- preempts caller} + {1483} +\rtemscase{blocked task -- preempts caller} + {1640} +\rtemscase{ready task -- preempts caller} + {1601} +\rtemsdirective{TASK\_DELETE} +\rtemscase{calling task}{2117} +\rtemscase{suspended task}{1555} +\rtemscase{blocked task}{1609} +\rtemscase{ready task}{1620} +\rtemsdirective{TASK\_SUSPEND} +\rtemscase{calling task}{960} +\rtemscase{returns to caller}{433} +\rtemsdirective{TASK\_RESUME} +\rtemscase{task readied -- returns to caller} + {960} +\rtemscase{task readied -- preempts caller} + {803} +\rtemsdirective{TASK\_SET\_PRIORITY} +\rtemscase{obtain current priority} + {368} +\rtemscase{returns to caller}{633} +\rtemscase{preempts caller}{1211} +\rtemsdirective{TASK\_MODE} +\rtemscase{obtain current mode}{184} +\rtemscase{no reschedule}{213} +\rtemscase{reschedule -- returns to caller} + {247} +\rtemscase{reschedule -- preempts caller} + {919} +\rtemsonecase{TASK\_GET\_NOTE}{382} +\rtemsonecase{TASK\_SET\_NOTE}{383} +\rtemsdirective{TASK\_WAKE\_AFTER} +\rtemscase{yield -- returns to caller} + {245} +\rtemscase{yield -- preempts caller} + {851} +\rtemsonecase{TASK\_WAKE\_WHEN}{1275} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item TASK_CREATE +@itemize - +@item only case: 2301 +@end itemize + +@item TASK_IDENT +@itemize - +@item only case: 2900 +@end itemize + +@item TASK_START +@itemize - +@item only case: 794 +@end itemize + +@item TASK_RESTART +@itemize - +@item calling task: 1137 +@item suspended task -- returns to caller: 906 +@item blocked task -- returns to caller: 1102 +@item ready task -- returns to caller: 928 +@item suspended task -- preempts caller: 1483 +@item blocked task -- preempts caller: 1640 +@item ready task -- preempts caller: 1601 +@end itemize + +@item TASK_DELETE +@itemize - +@item calling task: 2117 +@item suspended task: 1555 +@item blocked task: 1609 +@item ready task: 1620 +@end itemize + +@item TASK_SUSPEND +@itemize - +@item calling task: 960 +@item returns to caller: 433 +@end itemize + +@item TASK_RESUME +@itemize - +@item task readied -- returns to caller: 960 +@item task readied -- preempts caller: 803 +@end itemize + +@item TASK_SET_PRIORITY +@itemize - +@item obtain current priority: 368 +@item returns to caller: 633 +@item preempts caller: 1211 +@end itemize + +@item TASK_MODE +@itemize - +@item obtain current mode: 184 +@item no reschedule: 213 +@item reschedule -- returns to caller: 247 +@item reschedule -- preempts caller: 919 +@end itemize + +@item TASK_GET_NOTE +@itemize - +@item only case: 382 +@end itemize + +@item TASK_SET_NOTE +@itemize - +@item only case: 383 +@end itemize + +@item TASK_WAKE_AFTER +@itemize - +@item yield -- returns to caller: 245 +@item yield -- preempts caller: 851 +@end itemize + +@item TASK_WAKE_WHEN +@itemize - +@item only case: 1275 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TASK_CREATE2301
    TASK_IDENT2900
    TASK_START794
    TASK_RESTART
    calling task
    1137
    suspended task -- returns to caller
    906
    blocked task -- returns to caller
    1102
    ready task -- returns to caller
    928
    suspended task -- preempts caller
    1483
    blocked task -- preempts caller
    1640
    ready task -- preempts caller
    1601
    TASK_DELETE
    calling task
    2117
    suspended task
    1555
    blocked task
    1609
    ready task
    1620
    TASK_SUSPEND
    calling task
    960
    returns to caller
    433
    TASK_RESUME
    task readied -- returns to caller
    960
    task readied -- preempts caller
    803
    TASK_SET_PRIORITY
    obtain current priority
    368
    returns to caller
    633
    preempts caller
    1211
    TASK_MODE
    obtain current mode
    184
    no reschedule
    213
    reschedule -- returns to caller
    247
    reschedule -- preempts caller
    919
    TASK_GET_NOTE382
    TASK_SET_NOTE383
    TASK_WAKE_AFTER
    yield -- returns to caller
    245
    yield -- preempts caller
    851
    TASK_WAKE_WHEN1275
    +
    +@end html +@end ifset + +@page +@section Interrupt Manager + +It should be noted that the interrupt entry times +include vectoring the interrupt handler. + +@ifset use-tex +@sp 1 +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsdirective{Interrupt Entry Overhead} +\rtemscase{returns to nested interrupt}{201} +\rtemscase{returns to interrupted task} + {206} +\rtemscase{returns to preempting task} + {202} +\rtemsdirective{Interrupt Exit Overhead} +\rtemscase{returns to nested interrupt}{201} +\rtemscase{returns to interrupted task} + {213} +\rtemscase{returns to preempting task} + {857} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item Interrupt Entry Overhead +@itemize - +@item returns to nested interrupt: 201 +@item returns to interrupted task: 206 +@item returns to preempting task: 202 +@end itemize + +@item Interrupt Exit Overhead +@itemize - +@item returns to nested interrupt: 201 +@item returns to interrupted task: 213 +@item returns to preempting task: 857 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + +
    Interrupt Entry Overhead
    returns to nested interrupt
    201
    returns to interrupted task
    206
    returns to preempting task
    202
    Interrupt Exit Overhead
    returns to nested interrupt
    201
    returns to interrupted task
    213
    returns to preempting task
    857
    +
    +@end html +@end ifset + + +@section Clock Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{CLOCK\_SET}{792} +\rtemsonecase{CLOCK\_GET}{78} +\rtemsonecase{CLOCK\_TICK}{214} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item CLOCK_SET +@itemize - +@item only case: 792 +@end itemize + +@item CLOCK_GET +@itemize - +@item only case: 78 +@end itemize + +@item CLOCK_TICK +@itemize - +@item only case: 214 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + +
    CLOCK_SET792
    CLOCK_GET78
    CLOCK_TICK214
    +
    +@end html +@end ifset + +@section Timer Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{TIMER\_CREATE}{357} +\rtemsonecase{TIMER\_IDENT}{2828} +\rtemsdirective{TIMER\_DELETE} +\rtemscase{inactive}{432} +\rtemscase{active}{471} +\rtemsdirective{TIMER\_FIRE\_AFTER} +\rtemscase{inactive}{607} +\rtemscase{active}{646} +\rtemsdirective{TIMER\_FIRE\_WHEN} +\rtemscase{inactive}{766} +\rtemscase{active}{764} +\rtemsdirective{TIMER\_RESET} +\rtemscase{inactive}{552} +\rtemscase{active}{766} +\rtemsdirective{TIMER\_CANCEL} +\rtemscase{inactive}{339} +\rtemscase{active}{378} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item TIMER_CREATE +@itemize - +@item only case: 357 +@end itemize + +@item TIMER_IDENT +@itemize - +@item only case: 2828 +@end itemize + +@item TIMER_DELETE +@itemize - +@item inactive: 432 +@item active: 471 +@end itemize + +@item TIMER_FIRE_AFTER +@itemize - +@item inactive: 607 +@item active: 646 +@end itemize + +@item TIMER_FIRE_WHEN +@itemize - +@item inactive: TIMER_FIRE_WHEN_INACTIVE +@item active: TIMER_FIRE_WHEN_ACTIVE +@end itemize + +@item TIMER_RESET +@itemize - +@item inactive: TIMER_RESET_INACTIVE +@item active: TIMER_RESET_ACTIVE +@end itemize + +@item TIMER_CANCEL +@itemize - +@item inactive: TIMER_CANCEL_INACTIVE +@item active: TIMER_CANCEL_ACTIVE +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TIMER_CREATE357
    TIMER_IDENT2828
    TIMER_DELETE
    inactive
    432
    active
    471
    TIMER_FIRE_AFTER
    inactive
    607
    active
    646
    TIMER_FIRE_WHEN
    inactive
    766
    active
    764
    TIMER_RESET
    inactive
    552
    active
    766
    TIMER_CANCEL
    inactive
    339
    active
    378
    +
    +@end html +@end ifset + +@page +@section Semaphore Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{SEMAPHORE\_CREATE}{571} +\rtemsonecase{SEMAPHORE\_IDENT}{3243} +\rtemsonecase{SEMAPHORE\_DELETE}{575} +\rtemsdirective{SEMAPHORE\_OBTAIN} +\rtemscase{available}{414} +\rtemscase{not available -- NO\_WAIT} + {414} +\rtemscase{not available -- caller blocks} + {1254} +\rtemsdirective{SEMAPHORE\_RELEASE} +\rtemscase{no waiting tasks}{501} +\rtemscase{task readied -- returns to caller} + {636} +\rtemscase{task readied -- preempts caller} + {982} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item SEMAPHORE_CREATE +@itemize - +@item only case: 571 +@end itemize + +@item SEMAPHORE_IDENT +@itemize - +@item only case: 3243 +@end itemize + +@item SEMAPHORE_DELETE +@itemize - +@item only case: 575 +@end itemize + +@item SEMAPHORE_OBTAIN +@itemize - +@item available: 414 +@item not available -- NO_WAIT: 414 +@item not available -- caller blocks: 1254 +@end itemize + +@item SEMAPHORE_RELEASE +@itemize - +@item no waiting tasks: 501 +@item task readied -- returns to caller: 636 +@item task readied -- preempts caller: 982 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + +
    SEMAPHORE_CREATE571
    SEMAPHORE_IDENT3243
    SEMAPHORE_DELETE575
    SEMAPHORE_OBTAIN
    available
    414
    not available -- NO_WAIT
    414
    not available -- caller blocks
    1254
    SEMAPHORE_RELEASE
    no waiting tasks
    501
    task readied -- returns to caller
    636
    task readied -- preempts caller
    982
    +
    +@end html +@end ifset + +@section Message Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{MESSAGE\_QUEUE\_CREATE}{2270} +\rtemsonecase{MESSAGE\_QUEUE\_IDENT}{2828} +\rtemsonecase{MESSAGE\_QUEUE\_DELETE}{708} +\rtemsdirective{MESSAGE\_QUEUE\_SEND} +\rtemscase{no waiting tasks} + {923} +\rtemscase{task readied -- returns to caller} + {955} +\rtemscase{task readied -- preempts caller} + {1322} +\rtemsdirective{MESSAGE\_QUEUE\_URGENT} +\rtemscase{no waiting tasks}{919} +\rtemscase{task readied -- returns to caller} + {955} +\rtemscase{task readied -- preempts caller} + {1322} +\rtemsdirective{MESSAGE\_QUEUE\_BROADCAST} +\rtemscase{no waiting tasks}{589} +\rtemscase{task readied -- returns to caller} + {1079} +\rtemscase{task readied -- preempts caller} + {1435} +\rtemsdirective{MESSAGE\_QUEUE\_RECEIVE} +\rtemscase{available}{755} +\rtemscase{not available -- NO\_WAIT} + {467} +\rtemscase{not available -- caller blocks} + {1283} +\rtemsdirective{MESSAGE\_QUEUE\_FLUSH} +\rtemscase{no messages flushed}{369} +\rtemscase{messages flushed}{431} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item MESSAGE_QUEUE_CREATE +@itemize - +@item only case: 2270 +@end itemize + +@item MESSAGE_QUEUE_IDENT +@itemize - +@item only case: 2828 +@end itemize + +@item MESSAGE_QUEUE_DELETE +@itemize - +@item only case: 708 +@end itemize + +@item MESSAGE_QUEUE_SEND +@itemize - +@item no waiting tasks: 923 +@item task readied -- returns to caller: 955 +@item task readied -- preempts caller: 1322 +@end itemize + +@item MESSAGE_QUEUE_URGENT +@itemize - +@item no waiting tasks: 919 +@item task readied -- returns to caller: 955 +@item task readied -- preempts caller: 1322 +@end itemize + +@item MESSAGE_QUEUE_BROADCAST +@itemize - +@item no waiting tasks: 589 +@item task readied -- returns to caller: 1079 +@item task readied -- preempts caller: 1435 +@end itemize + +@item MESSAGE_QUEUE_RECEIVE +@itemize - +@item available: 755 +@item not available -- NO_WAIT: 467 +@item not available -- caller blocks: 1283 +@end itemize + +@item MESSAGE_QUEUE_FLUSH +@itemize - +@item no messages flushed: 369 +@item messages flushed: 431 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    MESSAGE_QUEUE_CREATE2270
    MESSAGE_QUEUE_IDENT2828
    MESSAGE_QUEUE_DELETE708
    MESSAGE_QUEUE_SEND
    no waiting tasks
    923
    task readied -- returns to caller
    955
    task readied -- preempts caller
    1322
    MESSAGE_QUEUE_URGENT
    no waiting tasks
    919
    task readied -- returns to caller
    955
    task readied -- preempts caller
    1322
    MESSAGE_QUEUE_BROADCAST
    no waiting tasks
    589
    task readied -- returns to caller
    1079
    task readied -- preempts caller
    1435
    MESSAGE_QUEUE_RECEIVE
    available
    755
    not available -- NO_WAIT
    467
    not available -- caller blocks
    1283
    MESSAGE_QUEUE_FLUSH
    no messages flushed
    369
    messages flushed
    431
    +
    +@end html +@end ifset + +@page +@section Event Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsdirective{EVENT\_SEND} +\rtemscase{no task readied}{354} +\rtemscase{task readied -- returns to caller} + {571} +\rtemscase{task readied -- preempts caller} + {946} +\rtemsdirective{EVENT\_RECEIVE} +\rtemscase{obtain current events}{43} +\rtemscase{available}{357} +\rtemscase{not available -- NO\_WAIT}{331} +\rtemscase{not available -- caller blocks} + {1043} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item EVENT_SEND +@itemize - +@item no task readied: 354 +@item task readied -- returns to caller: 571 +@item task readied -- preempts caller: 946 +@end itemize + +@item EVENT_RECEIVE +@itemize - +@item obtain current events: 43 +@item available: 357 +@item not available -- NO_WAIT: 331 +@item not available -- caller blocks: 1043 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + +
    EVENT_SEND
    no task readied
    354
    task readied -- returns to caller
    571
    task readied -- preempts caller
    946
    EVENT_RECEIVE
    obtain current events
    43
    available
    357
    not available -- NO_WAIT
    331
    not available -- caller blocks
    1043
    +
    +@end html +@end ifset +@section Signal Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{SIGNAL\_CATCH}{267} +\rtemsdirective{SIGNAL\_SEND} +\rtemscase{returns to caller}{408} +\rtemscase{signal to self}{607} +\rtemsdirective{EXIT ASR OVERHEAD} +\rtemscase{returns to calling task} + {464} +\rtemscase{returns to preempting task} + {752} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet +@item SIGNAL_CATCH +@itemize - +@item only case: 267 +@end itemize + +@item SIGNAL_SEND +@itemize - +@item returns to caller: 408 +@item signal to self: 607 +@end itemize + +@item EXIT ASR OVERHEAD +@itemize - +@item returns to calling task: 464 +@item returns to preempting task: 752 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + +
    SIGNAL_CATCH267
    SIGNAL_SEND
    returns to caller
    408
    signal to self
    607
    EXIT ASR OVERHEAD
    returns to calling task
    + 464
    returns to preempting task
    + 752
    +
    +@end html +@end ifset + +@section Partition Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{PARTITION\_CREATE}{762} +\rtemsonecase{PARTITION\_IDENT}{2828} +\rtemsonecase{PARTITION\_DELETE}{426} +\rtemsdirective{PARTITION\_GET\_BUFFER} +\rtemscase{available}{394} +\rtemscase{not available}{376} +\rtemsonecase{PARTITION\_RETURN\_BUFFER} + {376} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item PARTITION_CREATE +@itemize - +@item only case: 762 +@end itemize + +@item PARTITION_IDENT +@itemize - +@item only case: 2828 +@end itemize + +@item PARTITION_DELETE +@itemize - +@item only case: 426 +@end itemize + +@item PARTITION_GET_BUFFER +@itemize - +@item available: 394 +@item not available: 376 +@end itemize + +@item PARTITION_RETURN_BUFFER +@itemize - +@item only case: 420 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + +
    PARTITION_CREATE762
    PARTITION_IDENT2828
    PARTITION_DELETE426
    PARTITION_GET_BUFFER
    available
    394
    not available
    376
    PARTITION_RETURN_BUFFER376
    +
    +@end html +@end ifset + +@page +@section Region Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{REGION\_CREATE}{614} +\rtemsonecase{REGION\_IDENT}{2878} +\rtemsonecase{REGION\_DELETE}{425} +\rtemsdirective{REGION\_GET\_SEGMENT} +\rtemscase{available}{515} +\rtemscase{not available -- NO\_WAIT} + {472} +\rtemscase{not available -- caller blocks} + {1345} +\rtemsdirective{REGION\_RETURN\_SEGMENT} +\rtemscase{no waiting tasks}{544} +\rtemscase{task readied -- returns to caller} + {935} +\rtemscase{task readied -- preempts caller} + {1296} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item REGION_CREATE +@itemize - +@item only case: 614 +@end itemize + +@item REGION_IDENT +@itemize - +@item only case: 2878 +@end itemize + +@item REGION_DELETE +@itemize - +@item only case: 425 +@end itemize + +@item REGION_GET_SEGMENT +@itemize - +@item available: 515 +@item not available -- NO_WAIT: 472 +@item not available -- caller blocks: 1345 +@end itemize + +@item REGION_RETURN_SEGMENT +@itemize - +@item no waiting tasks: 544 +@item task readied -- returns to caller: 935 +@item task readied -- preempts caller: 1296 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + +
    REGION_CREATE614
    REGION_IDENT2878
    REGION_DELETE425
    REGION_GET_SEGMENT
    available
    515
    not available -- NO_WAIT
    + 472
    not available -- caller blocks
    + 1345
    REGION_RETURN_SEGMENT
    no waiting tasks
    544
    task readied -- returns to caller
    + 935
    task readied -- preempts caller
    + 1296
    +
    +@end html +@end ifset + +@section Dual-Ported Memory Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{PORT\_CREATE}{428} +\rtemsonecase{PORT\_IDENT}{2828} +\rtemsonecase{PORT\_DELETE}{421} +\rtemsonecase{PORT\_INTERNAL\_TO\_EXTERNAL} + {339} +\rtemsonecase{PORT\_EXTERNAL\_TO\_INTERNAL} + {339} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item PORT_CREATE +@itemize - +@item only case: 428 +@end itemize + +@item PORT_IDENT +@itemize - +@item only case: 2828 +@end itemize + +@item PORT_DELETE +@itemize - +@item only case: 421 +@end itemize + +@item PORT_INTERNAL_TO_EXTERNAL +@itemize - +@item only case: 339 +@end itemize + +@item PORT_EXTERNAL_TO_INTERNAL +@itemize - +@item only case: 339 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + +
    PORT_CREATE428
    PORT_IDENT2828
    PORT_DELETE421
    PORT_INTERNAL_TO_EXTERNAL339
    PORT_EXTERNAL_TO_INTERNAL339
    +
    +@end html +@end ifset + +@section I/O Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{IO\_INITIALIZE}{52} +\rtemsonecase{IO\_OPEN}{42} +\rtemsonecase{IO\_CLOSE}{44} +\rtemsonecase{IO\_READ}{42} +\rtemsonecase{IO\_WRITE}{44} +\rtemsonecase{IO\_CONTROL}{42} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item IO_INITIALIZE +@itemize - +@item only case: 52 +@end itemize + +@item IO_OPEN +@itemize - +@item only case: 42 +@end itemize + +@item IO_CLOSE +@itemize - +@item only case: 44 +@end itemize + +@item IO_READ +@itemize - +@item only case: 42 +@end itemize + +@item IO_WRITE +@itemize - +@item only case: 44 +@end itemize + +@item IO_CONTROL +@itemize - +@item only case: 42 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + +
    IO_INITIALIZE52
    IO_OPEN42
    IO_CLOSE44
    IO_READ42
    IO_WRITE44
    IO_CONTROL42
    +
    +@end html +@end ifset + +@section Rate Monotonic Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{RATE\_MONOTONIC\_CREATE}{388} +\rtemsonecase{RATE\_MONOTONIC\_IDENT}{2826} +\rtemsonecase{RATE\_MONOTONIC\_CANCEL}{427} +\rtemsdirective{RATE\_MONOTONIC\_DELETE} +\rtemscase{active}{519} +\rtemscase{inactive}{465} +\rtemsdirective{RATE\_MONOTONIC\_PERIOD} +\rtemscase{initiate period -- returns to caller} + {556} +\rtemscase{conclude period -- caller blocks} + {842} +\rtemscase{obtain status}{377} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item RATE_MONOTONIC_CREATE +@itemize - +@item only case: 388 +@end itemize + +@item RATE_MONOTONIC_IDENT +@itemize - +@item only case: 2826 +@end itemize + +@item RATE_MONOTONIC_CANCEL +@itemize - +@item only case: 427 +@end itemize + +@item RATE_MONOTONIC_DELETE +@itemize - +@item active: 519 +@item inactive: 465 +@end itemize + +@item RATE_MONOTONIC_PERIOD +@itemize - +@item initiate period -- returns to caller: 556 +@item conclude period -- caller blocks: 842 +@item obtain status: 377 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + +
    RATE_MONOTONIC_CREATE388
    RATE_MONOTONIC_IDENT2826
    RATE_MONOTONIC_CANCEL427
    RATE_MONOTONIC_DELETE
    active
    519
    inactive
    465
    RATE_MONOTONIC_PERIOD
    initiate period -- returns to caller
    + 556
    conclude period -- caller blocks
    + 842
    obtain status
    377
    +
    +@end html +@end ifset + +@tex +\global\advance \smallskipamount by 4pt +@end tex + +@tex +\global\advance \smallskipamount by 4pt +@end tex diff --git a/doc/supplements/powerpc/timePSIM_.t b/doc/supplements/powerpc/timePSIM_.t new file mode 100644 index 0000000000..76239b0c39 --- /dev/null +++ b/doc/supplements/powerpc/timePSIM_.t @@ -0,0 +1,1431 @@ +@c +@c Timing information for PSIM +@c +@c COPYRIGHT (c) 1988-1999. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@include ../../common/timemac.texi +@tex +\global\advance \smallskipamount by -4pt +@end tex + +@chapter PSIM Timing Data + +@section Introduction + +The timing data for RTEMS on the PSIM target +is provided along with the target +dependent aspects concerning the gathering of the timing data. +The hardware platform used to gather the times is described to +give the reader a better understanding of each directive time +provided. Also, provided is a description of the interrupt +latency and the context switch times as they pertain to the +PowerPC version of RTEMS. + +@section Hardware Platform + +All times reported in this chapter were measured using the PowerPC +Instruction Simulator (PSIM). PSIM simulates a variety of PowerPC +6xx models with the PPC603e being used as the basis for the measurements +reported in this chapter. + +The PowerPC decrementer register was was used to gather +all timing information. In real hardware implementations +of the PowerPC architecture, this register would typically +count something like CPU cycles or be a function of the clock +speed. However, with PSIM each count of the decrementer register +represents an instruction. Thus all measurements in this +chapter are reported as the actual number of instructions +executed. All sources of hardware interrupts were disabled, +although traps were enabled and the interrupt level of the +PowerPC allows all interrupts. + +@section Interrupt Latency + +The maximum period with traps disabled or the +processor interrupt level set to it's highest value inside RTEMS +is less than TBD +microseconds including the instructions which +disable and re-enable interrupts. The time required for the +PowerPC to vector an interrupt and for the RTEMS entry overhead +before invoking the user's trap handler are a total of +61 +microseconds. These combine to yield a worst case interrupt +latency of less than TBD + +61 microseconds at +na Mhz. +[NOTE: The maximum period with interrupts disabled was last +determined for Release 4.0.0-lmco.] + +The maximum period with interrupts disabled within +RTEMS is hand-timed with some assistance from PSIM. The maximum +period with interrupts disabled with RTEMS occurs was not measured +on this target. + +The interrupt vector and entry overhead time was +generated on the PSIM benchmark platform using the PowerPC's +decrementer register. This register was programmed to generate +an interrupt after one countdown. + +@section Context Switch + +The RTEMS processor context switch time is 214 +instructions on the PSIM benchmark platform when no floating +point context is saved or restored. Additional execution time +is required when a TASK_SWITCH user extension is configured. +The use of the TASK_SWITCH extension is application dependent. +Thus, its execution time is not considered part of the raw +context switch time. + +Since RTEMS was designed specifically for embedded +missile applications which are floating point intensive, the +executive is optimized to avoid unnecessarily saving and +restoring the state of the numeric coprocessor. The state of +the numeric coprocessor is only saved when an FLOATING_POINT +task is dispatched and that task was not the last task to +utilize the coprocessor. In a system with only one +FLOATING_POINT task, the state of the numeric coprocessor will +never be saved or restored. When the first FLOATING_POINT task +is dispatched, RTEMS does not need to save the current state of +the numeric coprocessor. + +The following table summarizes the context switch +times for the PSIM benchmark platform: +@c ****** This comment is here to remind you not to edit the timetbl.t +@c ****** in any directory but common. +@c +@c Time Table Template +@c +@c COPYRIGHT (c) 1988-1999. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@ifset use-tex +@sp 1 +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{No Floating Point Contexts}{214} +\rtemsdirective{Floating Point Contexts} +\rtemscase{restore first FP task}{255} +\rtemscase{save initialized, restore initialized}{140} +\rtemscase{save idle, restore initialized}{140} +\rtemscase{save idle, restore idle}{290} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet +@item No Floating Point Contexts +@itemize - +@item only case: 214 +@end itemize +@item Floating Point Contexts +@itemize - +@item restore first FP task: 255 +@item save initialized, restore initialized: 140 +@item save idle, restore initialized: 140 +@item save idle, restore idle: 140 +@end itemize +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + +
    No Floating Point Contexts214
    Floating Point Contexts
    restore first FP task
    255
    save initialized, restore initialized
    140
    save idle, restore initialized
    140
    save idle, restore idle
    290
    +
    +@end html +@end ifset + +@section Directive Times + +This sections is divided into a number of +subsections, each of which contains a table listing the +execution times of that manager's directives. + +@page +@section Task Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{TASK\_CREATE}{1075} +\rtemsonecase{TASK\_IDENT}{1637} +\rtemsonecase{TASK\_START}{345} +\rtemsdirective{TASK\_RESTART} +\rtemscase{calling task}{483} +\rtemscase{suspended task -- returns to caller} + {396} +\rtemscase{blocked task -- returns to caller} + {491} +\rtemscase{ready task -- returns to caller} + {404} +\rtemscase{suspended task -- preempts caller} + {644} +\rtemscase{blocked task -- preempts caller} + {709} +\rtemscase{ready task -- preempts caller} + {686} +\rtemsdirective{TASK\_DELETE} +\rtemscase{calling task}{941} +\rtemscase{suspended task}{703} +\rtemscase{blocked task}{723} +\rtemscase{ready task}{729} +\rtemsdirective{TASK\_SUSPEND} +\rtemscase{calling task}{403} +\rtemscase{returns to caller}{181} +\rtemsdirective{TASK\_RESUME} +\rtemscase{task readied -- returns to caller} + {191} +\rtemscase{task readied -- preempts caller} + {803} +\rtemsdirective{TASK\_SET\_PRIORITY} +\rtemscase{obtain current priority} + {147} +\rtemscase{returns to caller}{264} +\rtemscase{preempts caller}{517} +\rtemsdirective{TASK\_MODE} +\rtemscase{obtain current mode}{88} +\rtemscase{no reschedule}{110} +\rtemscase{reschedule -- returns to caller} + {112} +\rtemscase{reschedule -- preempts caller} + {386} +\rtemsonecase{TASK\_GET\_NOTE}{156} +\rtemsonecase{TASK\_SET\_NOTE}{155} +\rtemsdirective{TASK\_WAKE\_AFTER} +\rtemscase{yield -- returns to caller} + {92} +\rtemscase{yield -- preempts caller} + {348} +\rtemsonecase{TASK\_WAKE\_WHEN}{546} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item TASK_CREATE +@itemize - +@item only case: 1075 +@end itemize + +@item TASK_IDENT +@itemize - +@item only case: 1637 +@end itemize + +@item TASK_START +@itemize - +@item only case: 345 +@end itemize + +@item TASK_RESTART +@itemize - +@item calling task: 483 +@item suspended task -- returns to caller: 396 +@item blocked task -- returns to caller: 491 +@item ready task -- returns to caller: 404 +@item suspended task -- preempts caller: 644 +@item blocked task -- preempts caller: 709 +@item ready task -- preempts caller: 686 +@end itemize + +@item TASK_DELETE +@itemize - +@item calling task: 941 +@item suspended task: 703 +@item blocked task: 723 +@item ready task: 729 +@end itemize + +@item TASK_SUSPEND +@itemize - +@item calling task: 403 +@item returns to caller: 181 +@end itemize + +@item TASK_RESUME +@itemize - +@item task readied -- returns to caller: 191 +@item task readied -- preempts caller: 803 +@end itemize + +@item TASK_SET_PRIORITY +@itemize - +@item obtain current priority: 147 +@item returns to caller: 264 +@item preempts caller: 517 +@end itemize + +@item TASK_MODE +@itemize - +@item obtain current mode: 88 +@item no reschedule: 110 +@item reschedule -- returns to caller: 112 +@item reschedule -- preempts caller: 386 +@end itemize + +@item TASK_GET_NOTE +@itemize - +@item only case: 156 +@end itemize + +@item TASK_SET_NOTE +@itemize - +@item only case: 155 +@end itemize + +@item TASK_WAKE_AFTER +@itemize - +@item yield -- returns to caller: 92 +@item yield -- preempts caller: 348 +@end itemize + +@item TASK_WAKE_WHEN +@itemize - +@item only case: 546 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TASK_CREATE1075
    TASK_IDENT1637
    TASK_START345
    TASK_RESTART
    calling task
    483
    suspended task -- returns to caller
    396
    blocked task -- returns to caller
    491
    ready task -- returns to caller
    404
    suspended task -- preempts caller
    644
    blocked task -- preempts caller
    709
    ready task -- preempts caller
    686
    TASK_DELETE
    calling task
    941
    suspended task
    703
    blocked task
    723
    ready task
    729
    TASK_SUSPEND
    calling task
    403
    returns to caller
    181
    TASK_RESUME
    task readied -- returns to caller
    191
    task readied -- preempts caller
    803
    TASK_SET_PRIORITY
    obtain current priority
    147
    returns to caller
    264
    preempts caller
    517
    TASK_MODE
    obtain current mode
    88
    no reschedule
    110
    reschedule -- returns to caller
    112
    reschedule -- preempts caller
    386
    TASK_GET_NOTE156
    TASK_SET_NOTE155
    TASK_WAKE_AFTER
    yield -- returns to caller
    92
    yield -- preempts caller
    348
    TASK_WAKE_WHEN546
    +
    +@end html +@end ifset + +@page +@section Interrupt Manager + +It should be noted that the interrupt entry times +include vectoring the interrupt handler. + +@ifset use-tex +@sp 1 +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsdirective{Interrupt Entry Overhead} +\rtemscase{returns to nested interrupt}{60} +\rtemscase{returns to interrupted task} + {62} +\rtemscase{returns to preempting task} + {61} +\rtemsdirective{Interrupt Exit Overhead} +\rtemscase{returns to nested interrupt}{55} +\rtemscase{returns to interrupted task} + {67} +\rtemscase{returns to preempting task} + {344} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item Interrupt Entry Overhead +@itemize - +@item returns to nested interrupt: 60 +@item returns to interrupted task: 62 +@item returns to preempting task: 61 +@end itemize + +@item Interrupt Exit Overhead +@itemize - +@item returns to nested interrupt: 55 +@item returns to interrupted task: 67 +@item returns to preempting task: 344 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + +
    Interrupt Entry Overhead
    returns to nested interrupt
    60
    returns to interrupted task
    62
    returns to preempting task
    61
    Interrupt Exit Overhead
    returns to nested interrupt
    55
    returns to interrupted task
    67
    returns to preempting task
    344
    +
    +@end html +@end ifset + + +@section Clock Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{CLOCK\_SET}{340} +\rtemsonecase{CLOCK\_GET}{29} +\rtemsonecase{CLOCK\_TICK}{81} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item CLOCK_SET +@itemize - +@item only case: 340 +@end itemize + +@item CLOCK_GET +@itemize - +@item only case: 29 +@end itemize + +@item CLOCK_TICK +@itemize - +@item only case: 81 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + +
    CLOCK_SET340
    CLOCK_GET29
    CLOCK_TICK81
    +
    +@end html +@end ifset + +@section Timer Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{TIMER\_CREATE}{144} +\rtemsonecase{TIMER\_IDENT}{1595} +\rtemsdirective{TIMER\_DELETE} +\rtemscase{inactive}{197} +\rtemscase{active}{181} +\rtemsdirective{TIMER\_FIRE\_AFTER} +\rtemscase{inactive}{252} +\rtemscase{active}{269} +\rtemsdirective{TIMER\_FIRE\_WHEN} +\rtemscase{inactive}{333} +\rtemscase{active}{334} +\rtemsdirective{TIMER\_RESET} +\rtemscase{inactive}{233} +\rtemscase{active}{250} +\rtemsdirective{TIMER\_CANCEL} +\rtemscase{inactive}{156} +\rtemscase{active}{140} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item TIMER_CREATE +@itemize - +@item only case: 144 +@end itemize + +@item TIMER_IDENT +@itemize - +@item only case: 1595 +@end itemize + +@item TIMER_DELETE +@itemize - +@item inactive: 197 +@item active: 181 +@end itemize + +@item TIMER_FIRE_AFTER +@itemize - +@item inactive: 252 +@item active: 269 +@end itemize + +@item TIMER_FIRE_WHEN +@itemize - +@item inactive: TIMER_FIRE_WHEN_INACTIVE +@item active: TIMER_FIRE_WHEN_ACTIVE +@end itemize + +@item TIMER_RESET +@itemize - +@item inactive: TIMER_RESET_INACTIVE +@item active: TIMER_RESET_ACTIVE +@end itemize + +@item TIMER_CANCEL +@itemize - +@item inactive: TIMER_CANCEL_INACTIVE +@item active: TIMER_CANCEL_ACTIVE +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TIMER_CREATE144
    TIMER_IDENT1595
    TIMER_DELETE
    inactive
    197
    active
    181
    TIMER_FIRE_AFTER
    inactive
    252
    active
    269
    TIMER_FIRE_WHEN
    inactive
    333
    active
    334
    TIMER_RESET
    inactive
    233
    active
    250
    TIMER_CANCEL
    inactive
    156
    active
    140
    +
    +@end html +@end ifset + +@page +@section Semaphore Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{SEMAPHORE\_CREATE}{223} +\rtemsonecase{SEMAPHORE\_IDENT}{1836} +\rtemsonecase{SEMAPHORE\_DELETE}{1836} +\rtemsdirective{SEMAPHORE\_OBTAIN} +\rtemscase{available}{175} +\rtemscase{not available -- NO\_WAIT} + {175} +\rtemscase{not available -- caller blocks} + {530} +\rtemsdirective{SEMAPHORE\_RELEASE} +\rtemscase{no waiting tasks}{206} +\rtemscase{task readied -- returns to caller} + {272} +\rtemscase{task readied -- preempts caller} + {415} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item SEMAPHORE_CREATE +@itemize - +@item only case: 223 +@end itemize + +@item SEMAPHORE_IDENT +@itemize - +@item only case: 1836 +@end itemize + +@item SEMAPHORE_DELETE +@itemize - +@item only case: 1836 +@end itemize + +@item SEMAPHORE_OBTAIN +@itemize - +@item available: 175 +@item not available -- NO_WAIT: 175 +@item not available -- caller blocks: 530 +@end itemize + +@item SEMAPHORE_RELEASE +@itemize - +@item no waiting tasks: 206 +@item task readied -- returns to caller: 272 +@item task readied -- preempts caller: 415 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + +
    SEMAPHORE_CREATE223
    SEMAPHORE_IDENT1836
    SEMAPHORE_DELETE1836
    SEMAPHORE_OBTAIN
    available
    175
    not available -- NO_WAIT
    175
    not available -- caller blocks
    530
    SEMAPHORE_RELEASE
    no waiting tasks
    206
    task readied -- returns to caller
    272
    task readied -- preempts caller
    415
    +
    +@end html +@end ifset + +@section Message Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{MESSAGE\_QUEUE\_CREATE}{1022} +\rtemsonecase{MESSAGE\_QUEUE\_IDENT}{1596} +\rtemsonecase{MESSAGE\_QUEUE\_DELETE}{308} +\rtemsdirective{MESSAGE\_QUEUE\_SEND} +\rtemscase{no waiting tasks} + {421} +\rtemscase{task readied -- returns to caller} + {434} +\rtemscase{task readied -- preempts caller} + {581} +\rtemsdirective{MESSAGE\_QUEUE\_URGENT} +\rtemscase{no waiting tasks}{422} +\rtemscase{task readied -- returns to caller} + {435} +\rtemscase{task readied -- preempts caller} + {582} +\rtemsdirective{MESSAGE\_QUEUE\_BROADCAST} +\rtemscase{no waiting tasks}{244} +\rtemscase{task readied -- returns to caller} + {482} +\rtemscase{task readied -- preempts caller} + {630} +\rtemsdirective{MESSAGE\_QUEUE\_RECEIVE} +\rtemscase{available}{345} +\rtemscase{not available -- NO\_WAIT} + {197} +\rtemscase{not available -- caller blocks} + {542} +\rtemsdirective{MESSAGE\_QUEUE\_FLUSH} +\rtemscase{no messages flushed}{142} +\rtemscase{messages flushed}{170} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item MESSAGE_QUEUE_CREATE +@itemize - +@item only case: 1022 +@end itemize + +@item MESSAGE_QUEUE_IDENT +@itemize - +@item only case: 1596 +@end itemize + +@item MESSAGE_QUEUE_DELETE +@itemize - +@item only case: 308 +@end itemize + +@item MESSAGE_QUEUE_SEND +@itemize - +@item no waiting tasks: 421 +@item task readied -- returns to caller: 434 +@item task readied -- preempts caller: 581 +@end itemize + +@item MESSAGE_QUEUE_URGENT +@itemize - +@item no waiting tasks: 422 +@item task readied -- returns to caller: 435 +@item task readied -- preempts caller: 582 +@end itemize + +@item MESSAGE_QUEUE_BROADCAST +@itemize - +@item no waiting tasks: 244 +@item task readied -- returns to caller: 482 +@item task readied -- preempts caller: 630 +@end itemize + +@item MESSAGE_QUEUE_RECEIVE +@itemize - +@item available: 345 +@item not available -- NO_WAIT: 197 +@item not available -- caller blocks: 542 +@end itemize + +@item MESSAGE_QUEUE_FLUSH +@itemize - +@item no messages flushed: 142 +@item messages flushed: 170 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    MESSAGE_QUEUE_CREATE1022
    MESSAGE_QUEUE_IDENT1596
    MESSAGE_QUEUE_DELETE308
    MESSAGE_QUEUE_SEND
    no waiting tasks
    421
    task readied -- returns to caller
    434
    task readied -- preempts caller
    581
    MESSAGE_QUEUE_URGENT
    no waiting tasks
    422
    task readied -- returns to caller
    435
    task readied -- preempts caller
    582
    MESSAGE_QUEUE_BROADCAST
    no waiting tasks
    244
    task readied -- returns to caller
    482
    task readied -- preempts caller
    630
    MESSAGE_QUEUE_RECEIVE
    available
    345
    not available -- NO_WAIT
    197
    not available -- caller blocks
    542
    MESSAGE_QUEUE_FLUSH
    no messages flushed
    142
    messages flushed
    170
    +
    +@end html +@end ifset + +@page +@section Event Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsdirective{EVENT\_SEND} +\rtemscase{no task readied}{145} +\rtemscase{task readied -- returns to caller} + {250} +\rtemscase{task readied -- preempts caller} + {407} +\rtemsdirective{EVENT\_RECEIVE} +\rtemscase{obtain current events}{17} +\rtemscase{available}{133} +\rtemscase{not available -- NO\_WAIT}{130} +\rtemscase{not available -- caller blocks} + {442} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item EVENT_SEND +@itemize - +@item no task readied: 145 +@item task readied -- returns to caller: 250 +@item task readied -- preempts caller: 407 +@end itemize + +@item EVENT_RECEIVE +@itemize - +@item obtain current events: 17 +@item available: 133 +@item not available -- NO_WAIT: 130 +@item not available -- caller blocks: 442 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + +
    EVENT_SEND
    no task readied
    145
    task readied -- returns to caller
    250
    task readied -- preempts caller
    407
    EVENT_RECEIVE
    obtain current events
    17
    available
    133
    not available -- NO_WAIT
    130
    not available -- caller blocks
    442
    +
    +@end html +@end ifset +@section Signal Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{SIGNAL\_CATCH}{95} +\rtemsdirective{SIGNAL\_SEND} +\rtemscase{returns to caller}{165} +\rtemscase{signal to self}{275} +\rtemsdirective{EXIT ASR OVERHEAD} +\rtemscase{returns to calling task} + {216} +\rtemscase{returns to preempting task} + {329} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet +@item SIGNAL_CATCH +@itemize - +@item only case: 95 +@end itemize + +@item SIGNAL_SEND +@itemize - +@item returns to caller: 165 +@item signal to self: 275 +@end itemize + +@item EXIT ASR OVERHEAD +@itemize - +@item returns to calling task: 216 +@item returns to preempting task: 329 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + +
    SIGNAL_CATCH95
    SIGNAL_SEND
    returns to caller
    165
    signal to self
    275
    EXIT ASR OVERHEAD
    returns to calling task
    + 216
    returns to preempting task
    + 329
    +
    +@end html +@end ifset + +@section Partition Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{PARTITION\_CREATE}{320} +\rtemsonecase{PARTITION\_IDENT}{1596} +\rtemsonecase{PARTITION\_DELETE}{168} +\rtemsdirective{PARTITION\_GET\_BUFFER} +\rtemscase{available}{157} +\rtemscase{not available}{149} +\rtemsonecase{PARTITION\_RETURN\_BUFFER} + {149} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item PARTITION_CREATE +@itemize - +@item only case: 320 +@end itemize + +@item PARTITION_IDENT +@itemize - +@item only case: 1596 +@end itemize + +@item PARTITION_DELETE +@itemize - +@item only case: 168 +@end itemize + +@item PARTITION_GET_BUFFER +@itemize - +@item available: 157 +@item not available: 149 +@end itemize + +@item PARTITION_RETURN_BUFFER +@itemize - +@item only case: 172 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + +
    PARTITION_CREATE320
    PARTITION_IDENT1596
    PARTITION_DELETE168
    PARTITION_GET_BUFFER
    available
    157
    not available
    149
    PARTITION_RETURN_BUFFER149
    +
    +@end html +@end ifset + +@page +@section Region Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{REGION\_CREATE}{239} +\rtemsonecase{REGION\_IDENT}{1625} +\rtemsonecase{REGION\_DELETE}{167} +\rtemsdirective{REGION\_GET\_SEGMENT} +\rtemscase{available}{206} +\rtemscase{not available -- NO\_WAIT} + {190} +\rtemscase{not available -- caller blocks} + {556} +\rtemsdirective{REGION\_RETURN\_SEGMENT} +\rtemscase{no waiting tasks}{230} +\rtemscase{task readied -- returns to caller} + {412} +\rtemscase{task readied -- preempts caller} + {562} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item REGION_CREATE +@itemize - +@item only case: 239 +@end itemize + +@item REGION_IDENT +@itemize - +@item only case: 1625 +@end itemize + +@item REGION_DELETE +@itemize - +@item only case: 167 +@end itemize + +@item REGION_GET_SEGMENT +@itemize - +@item available: 206 +@item not available -- NO_WAIT: 190 +@item not available -- caller blocks: 556 +@end itemize + +@item REGION_RETURN_SEGMENT +@itemize - +@item no waiting tasks: 230 +@item task readied -- returns to caller: 412 +@item task readied -- preempts caller: 562 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + +
    REGION_CREATE239
    REGION_IDENT1625
    REGION_DELETE167
    REGION_GET_SEGMENT
    available
    206
    not available -- NO_WAIT
    + 190
    not available -- caller blocks
    + 556
    REGION_RETURN_SEGMENT
    no waiting tasks
    230
    task readied -- returns to caller
    + 412
    task readied -- preempts caller
    + 562
    +
    +@end html +@end ifset + +@section Dual-Ported Memory Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{PORT\_CREATE}{167} +\rtemsonecase{PORT\_IDENT}{1594} +\rtemsonecase{PORT\_DELETE}{165} +\rtemsonecase{PORT\_INTERNAL\_TO\_EXTERNAL} + {133} +\rtemsonecase{PORT\_EXTERNAL\_TO\_INTERNAL} + {134} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item PORT_CREATE +@itemize - +@item only case: 167 +@end itemize + +@item PORT_IDENT +@itemize - +@item only case: 1594 +@end itemize + +@item PORT_DELETE +@itemize - +@item only case: 165 +@end itemize + +@item PORT_INTERNAL_TO_EXTERNAL +@itemize - +@item only case: 133 +@end itemize + +@item PORT_EXTERNAL_TO_INTERNAL +@itemize - +@item only case: 134 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + +
    PORT_CREATE167
    PORT_IDENT1594
    PORT_DELETE165
    PORT_INTERNAL_TO_EXTERNAL133
    PORT_EXTERNAL_TO_INTERNAL134
    +
    +@end html +@end ifset + +@section I/O Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{IO\_INITIALIZE}{23} +\rtemsonecase{IO\_OPEN}{18} +\rtemsonecase{IO\_CLOSE}{18} +\rtemsonecase{IO\_READ}{18} +\rtemsonecase{IO\_WRITE}{18} +\rtemsonecase{IO\_CONTROL}{18} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item IO_INITIALIZE +@itemize - +@item only case: 23 +@end itemize + +@item IO_OPEN +@itemize - +@item only case: 18 +@end itemize + +@item IO_CLOSE +@itemize - +@item only case: 18 +@end itemize + +@item IO_READ +@itemize - +@item only case: 18 +@end itemize + +@item IO_WRITE +@itemize - +@item only case: 18 +@end itemize + +@item IO_CONTROL +@itemize - +@item only case: 18 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + +
    IO_INITIALIZE23
    IO_OPEN18
    IO_CLOSE18
    IO_READ18
    IO_WRITE18
    IO_CONTROL18
    +
    +@end html +@end ifset + +@section Rate Monotonic Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{RATE\_MONOTONIC\_CREATE}{149} +\rtemsonecase{RATE\_MONOTONIC\_IDENT}{1595} +\rtemsonecase{RATE\_MONOTONIC\_CANCEL}{169} +\rtemsdirective{RATE\_MONOTONIC\_DELETE} +\rtemscase{active}{212} +\rtemscase{inactive}{186} +\rtemsdirective{RATE\_MONOTONIC\_PERIOD} +\rtemscase{initiate period -- returns to caller} + {226} +\rtemscase{conclude period -- caller blocks} + {362} +\rtemscase{obtain status}{142} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item RATE_MONOTONIC_CREATE +@itemize - +@item only case: 149 +@end itemize + +@item RATE_MONOTONIC_IDENT +@itemize - +@item only case: 1595 +@end itemize + +@item RATE_MONOTONIC_CANCEL +@itemize - +@item only case: 169 +@end itemize + +@item RATE_MONOTONIC_DELETE +@itemize - +@item active: 212 +@item inactive: 186 +@end itemize + +@item RATE_MONOTONIC_PERIOD +@itemize - +@item initiate period -- returns to caller: 226 +@item conclude period -- caller blocks: 362 +@item obtain status: 142 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + +
    RATE_MONOTONIC_CREATE149
    RATE_MONOTONIC_IDENT1595
    RATE_MONOTONIC_CANCEL169
    RATE_MONOTONIC_DELETE
    active
    212
    inactive
    186
    RATE_MONOTONIC_PERIOD
    initiate period -- returns to caller
    + 226
    conclude period -- caller blocks
    + 362
    obtain status
    142
    +
    +@end html +@end ifset + +@tex +\global\advance \smallskipamount by 4pt +@end tex + +@tex +\global\advance \smallskipamount by 4pt +@end tex diff --git a/doc/supplements/sh/Makefile b/doc/supplements/sh/Makefile deleted file mode 100644 index 387cbf8071..0000000000 --- a/doc/supplements/sh/Makefile +++ /dev/null @@ -1,161 +0,0 @@ -# -# COPYRIGHT (c) 1988-1999. -# On-Line Applications Research Corporation (OAR). -# All rights reserved. -# -# $Id$ -# - -PROJECT=sh - -include ../../Make.config - -REPLACE=../../tools/word-replace - -all: html info ps pdf - -dirs: - $(make-dirs) - -COMMON_FILES=../../common/cpright.texi ../../common/setup.texi - -GENERATED_FILES=\ - cpumodel.texi callconv.texi memmodel.texi intr.texi fatalerr.texi \ - bsp.texi cputable.texi wksheets.texi timing.texi timeBSP.texi - -FILES= $(PROJECT).texi preface.texi \ - $(COMMON_FILES) $(GENERATED_FILES) - -info: dirs c_$(PROJECT) - @echo NEED TO INSTALL THE INFO FILES - #cp c_$(PROJECT) c_$(PROJECT)-* $(INFO_INSTALL) - #cp c_$(PROJECT) c_$(PROJECT)-* $(INFO_INSTALL) - -c_$(PROJECT): $(FILES) - $(MAKEINFO) $(PROJECT).texi - -dvi: dirs $(PROJECT).dvi -ps: dirs $(PROJECT).ps -pdf: dirs $(PROJECT).pdf - -$(PROJECT).pdf: $(FILES) - $(TEXI2PDF) $(PROJECT).texi - cp $(PROJECT).pdf $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).ps: $(PROJECT).dvi - dvips -o $(PROJECT).ps $(PROJECT).dvi - cp $(PROJECT).ps $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).dvi: $(FILES) - $(TEXI2DVI) $(PROJECT).texi - cp $(PROJECT).dvi $(WWW_INSTALL)/$(PROJECT) - -html: dirs $(FILES) - -mkdir -p $(WWW_INSTALL)/$(PROJECT) - $(TEXI2WWW) $(TEXI2WWW_ARGS) -dir $(WWW_INSTALL)/$(PROJECT) \ - $(PROJECT).texi - -clean: - rm -f *.o $(PROG) *.txt core $(PROJECT).pdf - rm -f *.dvi *.ps *.log *.aux *.cp *.fn *.ky *.pg *.toc *.tp *.vr $(BASE) - rm -f $(PROJECT) $(PROJECT)-* - rm -f c_$(PROJECT) c_$(PROJECT)-* - rm -f wksheets.t wksheets_NOTIMES.t - rm -f intr.t - rm -f timeBSP_.t timing.t - rm -f *.fixed _* $(GENERATED_FILES) - rm -f timeBSP_.t timeBSP_.texi - -# -# Chapters which get automatic processing -# -cpumodel.texi: cpumodel.t Makefile - $(BMENU) -p "Preface" \ - -u "Top" \ - -n "Calling Conventions" ${*}.t - -callconv.texi: callconv.t Makefile - $(BMENU) -p "CPU Model Dependent Features Another Optional Feature" \ - -u "Top" \ - -n "Memory Model" ${*}.t - -memmodel.texi: memmodel.t Makefile - $(BMENU) -p "Calling Conventions User-Provided Routines" \ - -u "Top" \ - -n "Interrupt Processing" ${*}.t - -# Interrupt Chapter: -# 1. Replace Times and Sizes -# 2. Build Node Structure -intr.t: intr_NOTIMES.t BSP_TIMES - ${REPLACE} -p BSP_TIMES intr_NOTIMES.t - mv intr_NOTIMES.t.fixed intr.t - -intr.texi: intr.t Makefile - $(BMENU) -p "Memory Model Flat Memory Model" \ - -u "Top" \ - -n "Default Fatal Error Processing" ${*}.t - -fatalerr.texi: fatalerr.t Makefile - $(BMENU) -p "Interrupt Processing Interrupt Stack" \ - -u "Top" \ - -n "Board Support Packages" ${*}.t - -bsp.texi: bsp.t Makefile - $(BMENU) -p "Default Fatal Error Processing Default Fatal Error Handler Operations" \ - -u "Top" \ - -n "Processor Dependent Information Table" ${*}.t - -cputable.texi: cputable.t Makefile - $(BMENU) -p "Board Support Packages Processor Initialization" \ - -u "Top" \ - -n "Memory Requirements" ${*}.t - -# Worksheets Chapter: -# 1. Copy the Shared File -# 2. Replace Times and Sizes -# 3. Build Node Structure - -wksheets_NOTIMES.t: ../../common/wksheets.t - cp ../../common/wksheets.t wksheets_NOTIMES.t - -wksheets.t: wksheets_NOTIMES.t BSP_TIMES - ${REPLACE} -p BSP_TIMES wksheets_NOTIMES.t - mv wksheets_NOTIMES.t.fixed wksheets.t - -wksheets.texi: wksheets.t Makefile - $(BMENU) -p "Processor Dependent Information Table CPU Dependent Information Table" \ - -u "Top" \ - -n "Timing Specification" ${*}.t - -# Timing Specification Chapter: -# 1. Copy the Shared File -# 3. Build Node Structure - -timing.t: ../../common/timing.t - cp ../../common/timing.t timing.t - -timing.texi: timing.t Makefile - $(BMENU) -p "Memory Requirements RTEMS RAM Workspace Worksheet" \ - -u "Top" \ - -n "BSP_FOR_TIMES Timing Data" ${*}.t - -# Timing Data for BSP Chapter: -# 1. Copy the Shared File -# 2. Replace Times and Sizes -# 3. Build Node Structure - -timeBSP_.t: ../../common/timetbl.t timeBSP.t Makefile - cat timeBSP.t ../../common/timetbl.t >timeBSP_.t - @echo >>timeBSP_.t - @echo "@tex" >>timeBSP_.t - @echo "\\global\\advance \\smallskipamount by 4pt" >>timeBSP_.t - @echo "@end tex" >>timeBSP_.t - ${REPLACE} -p BSP_TIMES timeBSP_.t - mv timeBSP_.t.fixed timeBSP_.t - -timeBSP.texi: timeBSP_.t Makefile - $(BMENU) -p "Timing Specification Terminology" \ - -u "Top" \ - -n "Command and Variable Index" timeBSP_.t - mv timeBSP_.texi timeBSP.texi diff --git a/doc/supplements/sh/Makefile.am b/doc/supplements/sh/Makefile.am new file mode 100644 index 0000000000..f4c2226fb0 --- /dev/null +++ b/doc/supplements/sh/Makefile.am @@ -0,0 +1,114 @@ +# +# COPYRIGHT (c) 1988-1999. +# On-Line Applications Research Corporation (OAR). +# All rights reserved. +# +# $Id$ +# + +AUTOMAKE_OPTIONS = foreign + +PROJECT=sh + +include $(top_srcdir)/project.am +include $(top_srcdir)/supplements/supplement.am + +COMMON_FILES= $(top_srcdir)/common/cpright.texi $(top_builddir)/common/setup.texi + +GENERATED_FILES=\ + cpumodel.texi callconv.texi memmodel.texi intr.texi fatalerr.texi \ + bsp.texi cputable.texi wksheets.texi timing.texi timeBSP.texi + +FILES= preface.texi + +info_TEXINFOS = sh.texi +sh_TEXINFOS = $(FILES) $(COMMON_FILES) $(GENERATED_FILES) + +# +# Chapters which get automatic processing +# +cpumodel.texi: cpumodel.t + $(BMENU) -p "Preface" \ + -u "Top" \ + -n "Calling Conventions" $< + +callconv.texi: callconv.t + $(BMENU) -p "CPU Model Dependent Features Another Optional Feature" \ + -u "Top" \ + -n "Memory Model" $< + +memmodel.texi: memmodel.t + $(BMENU) -p "Calling Conventions User-Provided Routines" \ + -u "Top" \ + -n "Interrupt Processing" $< + +# Interrupt Chapter: +# 1. Replace Times and Sizes +# 2. Build Node Structure +intr.texi: intr_NOTIMES.t BSP_TIMES + ${REPLACE2} -p $(srcdir)/BSP_TIMES $(srcdir)/intr_NOTIMES.t intr.t + $(BMENU) -p "Memory Model Flat Memory Model" \ + -u "Top" \ + -n "Default Fatal Error Processing" intr.t +CLEANFILES += intr.t + +fatalerr.texi: fatalerr.t + $(BMENU) -p "Interrupt Processing Interrupt Stack" \ + -u "Top" \ + -n "Board Support Packages" $< + +bsp.texi: bsp.t + $(BMENU) -p "Default Fatal Error Processing Default Fatal Error Handler Operations" \ + -u "Top" \ + -n "Processor Dependent Information Table" $< + +cputable.texi: cputable.t + $(BMENU) -p "Board Support Packages Processor Initialization" \ + -u "Top" \ + -n "Memory Requirements" $< + +# Worksheets Chapter: +# 1. Copy the Shared File +# 2. Replace Times and Sizes +# 3. Build Node Structure + +wksheets.texi: $(top_srcdir)/common/wksheets.t BSP_TIMES + ${REPLACE2} -p $(srcdir)/BSP_TIMES \ + $(top_srcdir)/common/wksheets.t wksheets.t + $(BMENU) -p "Processor Dependent Information Table CPU Dependent Information Table" \ + -u "Top" \ + -n "Timing Specification" wksheets.t +CLEANFILES += wksheets.t + +# Timing Specification Chapter: +# 1. Copy the Shared File +# 3. Build Node Structure + +timing.texi: $(top_srcdir)/common/timing.t + cp $(top_srcdir)/common/timing.t timing.t + $(BMENU) -p "Memory Requirements RTEMS RAM Workspace Worksheet" \ + -u "Top" \ + -n "BSP_FOR_TIMES Timing Data" timing.t +CLEANFILES += timing.t + +# Timing Data for BSP Chapter: +# 1. Copy the Shared File +# 2. Replace Times and Sizes +# 3. Build Node Structure + +timeBSP_.t: $(top_srcdir)/common/timetbl.t timeBSP.t + cat timeBSP.t $(top_srcdir)/common/timetbl.t >timeBSP_.t + @echo >>timeBSP_.t + @echo "@tex" >>timeBSP_.t + @echo "\\global\\advance \\smallskipamount by 4pt" >>timeBSP_.t + @echo "@end tex" >>timeBSP_.t + ${REPLACE} -p BSP_TIMES timeBSP_.t + mv timeBSP_.t.fixed timeBSP_.t + +timeBSP.texi: timeBSP_.t + $(BMENU) -p "Timing Specification Terminology" \ + -u "Top" \ + -n "Command and Variable Index" timeBSP_.t + mv timeBSP_.texi timeBSP.texi + +EXTRA_DIST = BSP_TIMES *.t diff --git a/doc/supplements/sh/sh.texi b/doc/supplements/sh/sh.texi index 26a0b0347f..e49a434972 100644 --- a/doc/supplements/sh/sh.texi +++ b/doc/supplements/sh/sh.texi @@ -1,6 +1,6 @@ \input texinfo @c -*-texinfo-*- @c %**start of header -@setfilename c_sh +@setfilename sh @syncodeindex vr fn @synindex ky cp @paragraphindent 0 @@ -76,7 +76,7 @@ END-INFO-DIR-ENTRY @include timeBSP.texi @ifinfo @node Top, Preface, (dir), (dir) -@top c_sh +@top sh This is the online version of the RTEMS Hitachi SH Applications Supplement. diff --git a/doc/supplements/sh/timeBSP_.t b/doc/supplements/sh/timeBSP_.t new file mode 100644 index 0000000000..3da8e44f40 --- /dev/null +++ b/doc/supplements/sh/timeBSP_.t @@ -0,0 +1,1442 @@ +@c +@c COPYRIGHT (c) 1988-1999. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@include ../../common/timemac.texi +@tex +\global\advance \smallskipamount by -4pt +@end tex + +@chapter BSP_FOR_TIMES Timing Data + +@section Introduction + +The timing data for the XXX version of RTEMS is +provided along with the target dependent aspects concerning the +gathering of the timing data. The hardware platform used to +gather the times is described to give the reader a better +understanding of each directive time provided. Also, provided +is a description of the interrupt latency and the context switch +times as they pertain to the XXX version of RTEMS. + +@section Hardware Platform + +All times reported except for the maximum period +interrupts are disabled by RTEMS were measured using a Motorola +BSP_FOR_TIMES CPU board. The BSP_FOR_TIMES is a 20Mhz board with one wait +state dynamic memory and a XXX numeric coprocessor. The +Zilog 8036 countdown timer on this board was used to measure +elapsed time with a one-half microsecond resolution. All +sources of hardware interrupts were disabled, although the +interrupt level of the XXX allows all interrupts. + +The maximum period interrupts are disabled was +measured by summing the number of CPU cycles required by each +assembly language instruction executed while interrupts were +disabled. The worst case times of the XXX microprocessor +were used for each instruction. Zero wait state memory was +assumed. The total CPU cycles executed with interrupts +disabled, including the instructions to disable and enable +interrupts, was divided by 20 to simulate a 20Mhz XXX. It +should be noted that the worst case instruction times for the +XXX assume that the internal cache is disabled and that no +instructions overlap. + +@section Interrupt Latency + +The maximum period with interrupts disabled within +RTEMS is less than TBD +microseconds including the instructions +which disable and re-enable interrupts. The time required for +the XXX to vector an interrupt and for the RTEMS entry +overhead before invoking the user's interrupt handler are a +total of 9 +microseconds. These combine to yield a worst case +interrupt latency of less than +TBD + 9 +microseconds at 20Mhz. [NOTE: The maximum period with interrupts +disabled was last determined for Release +4.0.0.] + +It should be noted again that the maximum period with +interrupts disabled within RTEMS is hand-timed and based upon +worst case (i.e. CPU cache disabled and no instruction overlap) +times for a 20Mhz XXX. The interrupt vector and entry +overhead time was generated on an BSP_FOR_TIMES benchmark platform +using the Multiprocessing Communications registers to generate +as the interrupt source. + +@section Context Switch + +The RTEMS processor context switch time is 35 +microseconds on the BSP_FOR_TIMES benchmark platform when no floating +point context is saved or restored. Additional execution time +is required when a TASK_SWITCH user extension is configured. +The use of the TASK_SWITCH extension is application dependent. +Thus, its execution time is not considered part of the raw +context switch time. + +Since RTEMS was designed specifically for embedded +missile applications which are floating point intensive, the +executive is optimized to avoid unnecessarily saving and +restoring the state of the numeric coprocessor. The state of +the numeric coprocessor is only saved when an FLOATING_POINT +task is dispatched and that task was not the last task to +utilize the coprocessor. In a system with only one +FLOATING_POINT task, the state of the numeric coprocessor will +never be saved or restored. When the first FLOATING_POINT task +is dispatched, RTEMS does not need to save the current state of +the numeric coprocessor. + +The exact amount of time required to save and restore +floating point context is dependent on whether an XXX or +XXX is being used as well as the state of the numeric +coprocessor. These numeric coprocessors define three operating +states: initialized, idle, and busy. RTEMS places the +coprocessor in the initialized state when a task is started or +restarted. Once the task has utilized the coprocessor, it is in +the idle state when floating point instructions are not +executing and the busy state when floating point instructions +are executing. The state of the coprocessor is task specific. + +The following table summarizes the context switch +times for the BSP_FOR_TIMES benchmark platform: + +@c ****** This comment is here to remind you not to edit the timetbl.t +@c ****** in any directory but common. +@c +@c Time Table Template +@c +@c COPYRIGHT (c) 1988-1999. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@ifset use-tex +@sp 1 +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{No Floating Point Contexts}{35} +\rtemsdirective{Floating Point Contexts} +\rtemscase{restore first FP task}{39} +\rtemscase{save initialized, restore initialized}{66} +\rtemscase{save idle, restore initialized}{66} +\rtemscase{save idle, restore idle}{68} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet +@item No Floating Point Contexts +@itemize - +@item only case: 35 +@end itemize +@item Floating Point Contexts +@itemize - +@item restore first FP task: 39 +@item save initialized, restore initialized: 66 +@item save idle, restore initialized: 66 +@item save idle, restore idle: 66 +@end itemize +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + +
    No Floating Point Contexts35
    Floating Point Contexts
    restore first FP task
    39
    save initialized, restore initialized
    66
    save idle, restore initialized
    66
    save idle, restore idle
    68
    +
    +@end html +@end ifset + +@section Directive Times + +This sections is divided into a number of +subsections, each of which contains a table listing the +execution times of that manager's directives. + +@page +@section Task Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{TASK\_CREATE}{148} +\rtemsonecase{TASK\_IDENT}{350} +\rtemsonecase{TASK\_START}{76} +\rtemsdirective{TASK\_RESTART} +\rtemscase{calling task}{95} +\rtemscase{suspended task -- returns to caller} + {89} +\rtemscase{blocked task -- returns to caller} + {124} +\rtemscase{ready task -- returns to caller} + {92} +\rtemscase{suspended task -- preempts caller} + {125} +\rtemscase{blocked task -- preempts caller} + {149} +\rtemscase{ready task -- preempts caller} + {142} +\rtemsdirective{TASK\_DELETE} +\rtemscase{calling task}{170} +\rtemscase{suspended task}{138} +\rtemscase{blocked task}{143} +\rtemscase{ready task}{144} +\rtemsdirective{TASK\_SUSPEND} +\rtemscase{calling task}{71} +\rtemscase{returns to caller}{43} +\rtemsdirective{TASK\_RESUME} +\rtemscase{task readied -- returns to caller} + {45} +\rtemscase{task readied -- preempts caller} + {67} +\rtemsdirective{TASK\_SET\_PRIORITY} +\rtemscase{obtain current priority} + {31} +\rtemscase{returns to caller}{64} +\rtemscase{preempts caller}{106} +\rtemsdirective{TASK\_MODE} +\rtemscase{obtain current mode}{14} +\rtemscase{no reschedule}{16} +\rtemscase{reschedule -- returns to caller} + {23} +\rtemscase{reschedule -- preempts caller} + {60} +\rtemsonecase{TASK\_GET\_NOTE}{33} +\rtemsonecase{TASK\_SET\_NOTE}{33} +\rtemsdirective{TASK\_WAKE\_AFTER} +\rtemscase{yield -- returns to caller} + {16} +\rtemscase{yield -- preempts caller} + {56} +\rtemsonecase{TASK\_WAKE\_WHEN}{117} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item TASK_CREATE +@itemize - +@item only case: 148 +@end itemize + +@item TASK_IDENT +@itemize - +@item only case: 350 +@end itemize + +@item TASK_START +@itemize - +@item only case: 76 +@end itemize + +@item TASK_RESTART +@itemize - +@item calling task: 95 +@item suspended task -- returns to caller: 89 +@item blocked task -- returns to caller: 124 +@item ready task -- returns to caller: 92 +@item suspended task -- preempts caller: 125 +@item blocked task -- preempts caller: 149 +@item ready task -- preempts caller: 142 +@end itemize + +@item TASK_DELETE +@itemize - +@item calling task: 170 +@item suspended task: 138 +@item blocked task: 143 +@item ready task: 144 +@end itemize + +@item TASK_SUSPEND +@itemize - +@item calling task: 71 +@item returns to caller: 43 +@end itemize + +@item TASK_RESUME +@itemize - +@item task readied -- returns to caller: 45 +@item task readied -- preempts caller: 67 +@end itemize + +@item TASK_SET_PRIORITY +@itemize - +@item obtain current priority: 31 +@item returns to caller: 64 +@item preempts caller: 106 +@end itemize + +@item TASK_MODE +@itemize - +@item obtain current mode: 14 +@item no reschedule: 16 +@item reschedule -- returns to caller: 23 +@item reschedule -- preempts caller: 60 +@end itemize + +@item TASK_GET_NOTE +@itemize - +@item only case: 33 +@end itemize + +@item TASK_SET_NOTE +@itemize - +@item only case: 33 +@end itemize + +@item TASK_WAKE_AFTER +@itemize - +@item yield -- returns to caller: 16 +@item yield -- preempts caller: 56 +@end itemize + +@item TASK_WAKE_WHEN +@itemize - +@item only case: 117 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TASK_CREATE148
    TASK_IDENT350
    TASK_START76
    TASK_RESTART
    calling task
    95
    suspended task -- returns to caller
    89
    blocked task -- returns to caller
    124
    ready task -- returns to caller
    92
    suspended task -- preempts caller
    125
    blocked task -- preempts caller
    149
    ready task -- preempts caller
    142
    TASK_DELETE
    calling task
    170
    suspended task
    138
    blocked task
    143
    ready task
    144
    TASK_SUSPEND
    calling task
    71
    returns to caller
    43
    TASK_RESUME
    task readied -- returns to caller
    45
    task readied -- preempts caller
    67
    TASK_SET_PRIORITY
    obtain current priority
    31
    returns to caller
    64
    preempts caller
    106
    TASK_MODE
    obtain current mode
    14
    no reschedule
    16
    reschedule -- returns to caller
    23
    reschedule -- preempts caller
    60
    TASK_GET_NOTE33
    TASK_SET_NOTE33
    TASK_WAKE_AFTER
    yield -- returns to caller
    16
    yield -- preempts caller
    56
    TASK_WAKE_WHEN117
    +
    +@end html +@end ifset + +@page +@section Interrupt Manager + +It should be noted that the interrupt entry times +include vectoring the interrupt handler. + +@ifset use-tex +@sp 1 +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsdirective{Interrupt Entry Overhead} +\rtemscase{returns to nested interrupt}{12} +\rtemscase{returns to interrupted task} + {9} +\rtemscase{returns to preempting task} + {9} +\rtemsdirective{Interrupt Exit Overhead} +\rtemscase{returns to nested interrupt}{<1} +\rtemscase{returns to interrupted task} + {8} +\rtemscase{returns to preempting task} + {54} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item Interrupt Entry Overhead +@itemize - +@item returns to nested interrupt: 12 +@item returns to interrupted task: 9 +@item returns to preempting task: 9 +@end itemize + +@item Interrupt Exit Overhead +@itemize - +@item returns to nested interrupt: <1 +@item returns to interrupted task: 8 +@item returns to preempting task: 54 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + +
    Interrupt Entry Overhead
    returns to nested interrupt
    12
    returns to interrupted task
    9
    returns to preempting task
    9
    Interrupt Exit Overhead
    returns to nested interrupt
    <1
    returns to interrupted task
    8
    returns to preempting task
    54
    +
    +@end html +@end ifset + + +@section Clock Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{CLOCK\_SET}{86} +\rtemsonecase{CLOCK\_GET}{1} +\rtemsonecase{CLOCK\_TICK}{17} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item CLOCK_SET +@itemize - +@item only case: 86 +@end itemize + +@item CLOCK_GET +@itemize - +@item only case: 1 +@end itemize + +@item CLOCK_TICK +@itemize - +@item only case: 17 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + +
    CLOCK_SET86
    CLOCK_GET1
    CLOCK_TICK17
    +
    +@end html +@end ifset + +@section Timer Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{TIMER\_CREATE}{28} +\rtemsonecase{TIMER\_IDENT}{343} +\rtemsdirective{TIMER\_DELETE} +\rtemscase{inactive}{43} +\rtemscase{active}{47} +\rtemsdirective{TIMER\_FIRE\_AFTER} +\rtemscase{inactive}{58} +\rtemscase{active}{61} +\rtemsdirective{TIMER\_FIRE\_WHEN} +\rtemscase{inactive}{88} +\rtemscase{active}{88} +\rtemsdirective{TIMER\_RESET} +\rtemscase{inactive}{54} +\rtemscase{active}{58} +\rtemsdirective{TIMER\_CANCEL} +\rtemscase{inactive}{31} +\rtemscase{active}{34} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item TIMER_CREATE +@itemize - +@item only case: 28 +@end itemize + +@item TIMER_IDENT +@itemize - +@item only case: 343 +@end itemize + +@item TIMER_DELETE +@itemize - +@item inactive: 43 +@item active: 47 +@end itemize + +@item TIMER_FIRE_AFTER +@itemize - +@item inactive: 58 +@item active: 61 +@end itemize + +@item TIMER_FIRE_WHEN +@itemize - +@item inactive: TIMER_FIRE_WHEN_INACTIVE +@item active: TIMER_FIRE_WHEN_ACTIVE +@end itemize + +@item TIMER_RESET +@itemize - +@item inactive: TIMER_RESET_INACTIVE +@item active: TIMER_RESET_ACTIVE +@end itemize + +@item TIMER_CANCEL +@itemize - +@item inactive: TIMER_CANCEL_INACTIVE +@item active: TIMER_CANCEL_ACTIVE +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TIMER_CREATE28
    TIMER_IDENT343
    TIMER_DELETE
    inactive
    43
    active
    47
    TIMER_FIRE_AFTER
    inactive
    58
    active
    61
    TIMER_FIRE_WHEN
    inactive
    88
    active
    88
    TIMER_RESET
    inactive
    54
    active
    58
    TIMER_CANCEL
    inactive
    31
    active
    34
    +
    +@end html +@end ifset + +@page +@section Semaphore Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{SEMAPHORE\_CREATE}{60} +\rtemsonecase{SEMAPHORE\_IDENT}{367} +\rtemsonecase{SEMAPHORE\_DELETE}{58} +\rtemsdirective{SEMAPHORE\_OBTAIN} +\rtemscase{available}{38} +\rtemscase{not available -- NO\_WAIT} + {38} +\rtemscase{not available -- caller blocks} + {109} +\rtemsdirective{SEMAPHORE\_RELEASE} +\rtemscase{no waiting tasks}{44} +\rtemscase{task readied -- returns to caller} + {66} +\rtemscase{task readied -- preempts caller} + {87} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item SEMAPHORE_CREATE +@itemize - +@item only case: 60 +@end itemize + +@item SEMAPHORE_IDENT +@itemize - +@item only case: 367 +@end itemize + +@item SEMAPHORE_DELETE +@itemize - +@item only case: 58 +@end itemize + +@item SEMAPHORE_OBTAIN +@itemize - +@item available: 38 +@item not available -- NO_WAIT: 38 +@item not available -- caller blocks: 109 +@end itemize + +@item SEMAPHORE_RELEASE +@itemize - +@item no waiting tasks: 44 +@item task readied -- returns to caller: 66 +@item task readied -- preempts caller: 87 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + +
    SEMAPHORE_CREATE60
    SEMAPHORE_IDENT367
    SEMAPHORE_DELETE58
    SEMAPHORE_OBTAIN
    available
    38
    not available -- NO_WAIT
    38
    not available -- caller blocks
    109
    SEMAPHORE_RELEASE
    no waiting tasks
    44
    task readied -- returns to caller
    66
    task readied -- preempts caller
    87
    +
    +@end html +@end ifset + +@section Message Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{MESSAGE\_QUEUE\_CREATE}{200} +\rtemsonecase{MESSAGE\_QUEUE\_IDENT}{341} +\rtemsonecase{MESSAGE\_QUEUE\_DELETE}{80} +\rtemsdirective{MESSAGE\_QUEUE\_SEND} +\rtemscase{no waiting tasks} + {97} +\rtemscase{task readied -- returns to caller} + {101} +\rtemscase{task readied -- preempts caller} + {123} +\rtemsdirective{MESSAGE\_QUEUE\_URGENT} +\rtemscase{no waiting tasks}{96} +\rtemscase{task readied -- returns to caller} + {101} +\rtemscase{task readied -- preempts caller} + {123} +\rtemsdirective{MESSAGE\_QUEUE\_BROADCAST} +\rtemscase{no waiting tasks}{53} +\rtemscase{task readied -- returns to caller} + {111} +\rtemscase{task readied -- preempts caller} + {133} +\rtemsdirective{MESSAGE\_QUEUE\_RECEIVE} +\rtemscase{available}{79} +\rtemscase{not available -- NO\_WAIT} + {43} +\rtemscase{not available -- caller blocks} + {114} +\rtemsdirective{MESSAGE\_QUEUE\_FLUSH} +\rtemscase{no messages flushed}{29} +\rtemscase{messages flushed}{39} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item MESSAGE_QUEUE_CREATE +@itemize - +@item only case: 200 +@end itemize + +@item MESSAGE_QUEUE_IDENT +@itemize - +@item only case: 341 +@end itemize + +@item MESSAGE_QUEUE_DELETE +@itemize - +@item only case: 80 +@end itemize + +@item MESSAGE_QUEUE_SEND +@itemize - +@item no waiting tasks: 97 +@item task readied -- returns to caller: 101 +@item task readied -- preempts caller: 123 +@end itemize + +@item MESSAGE_QUEUE_URGENT +@itemize - +@item no waiting tasks: 96 +@item task readied -- returns to caller: 101 +@item task readied -- preempts caller: 123 +@end itemize + +@item MESSAGE_QUEUE_BROADCAST +@itemize - +@item no waiting tasks: 53 +@item task readied -- returns to caller: 111 +@item task readied -- preempts caller: 133 +@end itemize + +@item MESSAGE_QUEUE_RECEIVE +@itemize - +@item available: 79 +@item not available -- NO_WAIT: 43 +@item not available -- caller blocks: 114 +@end itemize + +@item MESSAGE_QUEUE_FLUSH +@itemize - +@item no messages flushed: 29 +@item messages flushed: 39 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    MESSAGE_QUEUE_CREATE200
    MESSAGE_QUEUE_IDENT341
    MESSAGE_QUEUE_DELETE80
    MESSAGE_QUEUE_SEND
    no waiting tasks
    97
    task readied -- returns to caller
    101
    task readied -- preempts caller
    123
    MESSAGE_QUEUE_URGENT
    no waiting tasks
    96
    task readied -- returns to caller
    101
    task readied -- preempts caller
    123
    MESSAGE_QUEUE_BROADCAST
    no waiting tasks
    53
    task readied -- returns to caller
    111
    task readied -- preempts caller
    133
    MESSAGE_QUEUE_RECEIVE
    available
    79
    not available -- NO_WAIT
    43
    not available -- caller blocks
    114
    MESSAGE_QUEUE_FLUSH
    no messages flushed
    29
    messages flushed
    39
    +
    +@end html +@end ifset + +@page +@section Event Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsdirective{EVENT\_SEND} +\rtemscase{no task readied}{24} +\rtemscase{task readied -- returns to caller} + {60} +\rtemscase{task readied -- preempts caller} + {84} +\rtemsdirective{EVENT\_RECEIVE} +\rtemscase{obtain current events}{1} +\rtemscase{available}{28} +\rtemscase{not available -- NO\_WAIT}{23} +\rtemscase{not available -- caller blocks} + {84} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item EVENT_SEND +@itemize - +@item no task readied: 24 +@item task readied -- returns to caller: 60 +@item task readied -- preempts caller: 84 +@end itemize + +@item EVENT_RECEIVE +@itemize - +@item obtain current events: 1 +@item available: 28 +@item not available -- NO_WAIT: 23 +@item not available -- caller blocks: 84 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + +
    EVENT_SEND
    no task readied
    24
    task readied -- returns to caller
    60
    task readied -- preempts caller
    84
    EVENT_RECEIVE
    obtain current events
    1
    available
    28
    not available -- NO_WAIT
    23
    not available -- caller blocks
    84
    +
    +@end html +@end ifset +@section Signal Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{SIGNAL\_CATCH}{15} +\rtemsdirective{SIGNAL\_SEND} +\rtemscase{returns to caller}{37} +\rtemscase{signal to self}{55} +\rtemsdirective{EXIT ASR OVERHEAD} +\rtemscase{returns to calling task} + {37} +\rtemscase{returns to preempting task} + {54} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet +@item SIGNAL_CATCH +@itemize - +@item only case: 15 +@end itemize + +@item SIGNAL_SEND +@itemize - +@item returns to caller: 37 +@item signal to self: 55 +@end itemize + +@item EXIT ASR OVERHEAD +@itemize - +@item returns to calling task: 37 +@item returns to preempting task: 54 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + +
    SIGNAL_CATCH15
    SIGNAL_SEND
    returns to caller
    37
    signal to self
    55
    EXIT ASR OVERHEAD
    returns to calling task
    + 37
    returns to preempting task
    + 54
    +
    +@end html +@end ifset + +@section Partition Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{PARTITION\_CREATE}{70} +\rtemsonecase{PARTITION\_IDENT}{341} +\rtemsonecase{PARTITION\_DELETE}{42} +\rtemsdirective{PARTITION\_GET\_BUFFER} +\rtemscase{available}{35} +\rtemscase{not available}{33} +\rtemsonecase{PARTITION\_RETURN\_BUFFER} + {33} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item PARTITION_CREATE +@itemize - +@item only case: 70 +@end itemize + +@item PARTITION_IDENT +@itemize - +@item only case: 341 +@end itemize + +@item PARTITION_DELETE +@itemize - +@item only case: 42 +@end itemize + +@item PARTITION_GET_BUFFER +@itemize - +@item available: 35 +@item not available: 33 +@end itemize + +@item PARTITION_RETURN_BUFFER +@itemize - +@item only case: 43 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + +
    PARTITION_CREATE70
    PARTITION_IDENT341
    PARTITION_DELETE42
    PARTITION_GET_BUFFER
    available
    35
    not available
    33
    PARTITION_RETURN_BUFFER33
    +
    +@end html +@end ifset + +@page +@section Region Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{REGION\_CREATE}{63} +\rtemsonecase{REGION\_IDENT}{348} +\rtemsonecase{REGION\_DELETE}{39} +\rtemsdirective{REGION\_GET\_SEGMENT} +\rtemscase{available}{52} +\rtemscase{not available -- NO\_WAIT} + {49} +\rtemscase{not available -- caller blocks} + {123} +\rtemsdirective{REGION\_RETURN\_SEGMENT} +\rtemscase{no waiting tasks}{54} +\rtemscase{task readied -- returns to caller} + {114} +\rtemscase{task readied -- preempts caller} + {136} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item REGION_CREATE +@itemize - +@item only case: 63 +@end itemize + +@item REGION_IDENT +@itemize - +@item only case: 348 +@end itemize + +@item REGION_DELETE +@itemize - +@item only case: 39 +@end itemize + +@item REGION_GET_SEGMENT +@itemize - +@item available: 52 +@item not available -- NO_WAIT: 49 +@item not available -- caller blocks: 123 +@end itemize + +@item REGION_RETURN_SEGMENT +@itemize - +@item no waiting tasks: 54 +@item task readied -- returns to caller: 114 +@item task readied -- preempts caller: 136 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + +
    REGION_CREATE63
    REGION_IDENT348
    REGION_DELETE39
    REGION_GET_SEGMENT
    available
    52
    not available -- NO_WAIT
    + 49
    not available -- caller blocks
    + 123
    REGION_RETURN_SEGMENT
    no waiting tasks
    54
    task readied -- returns to caller
    + 114
    task readied -- preempts caller
    + 136
    +
    +@end html +@end ifset + +@section Dual-Ported Memory Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{PORT\_CREATE}{35} +\rtemsonecase{PORT\_IDENT}{340} +\rtemsonecase{PORT\_DELETE}{39} +\rtemsonecase{PORT\_INTERNAL\_TO\_EXTERNAL} + {26} +\rtemsonecase{PORT\_EXTERNAL\_TO\_INTERNAL} + {27} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item PORT_CREATE +@itemize - +@item only case: 35 +@end itemize + +@item PORT_IDENT +@itemize - +@item only case: 340 +@end itemize + +@item PORT_DELETE +@itemize - +@item only case: 39 +@end itemize + +@item PORT_INTERNAL_TO_EXTERNAL +@itemize - +@item only case: 26 +@end itemize + +@item PORT_EXTERNAL_TO_INTERNAL +@itemize - +@item only case: 27 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + +
    PORT_CREATE35
    PORT_IDENT340
    PORT_DELETE39
    PORT_INTERNAL_TO_EXTERNAL26
    PORT_EXTERNAL_TO_INTERNAL27
    +
    +@end html +@end ifset + +@section I/O Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{IO\_INITIALIZE}{4} +\rtemsonecase{IO\_OPEN}{2} +\rtemsonecase{IO\_CLOSE}{1} +\rtemsonecase{IO\_READ}{2} +\rtemsonecase{IO\_WRITE}{3} +\rtemsonecase{IO\_CONTROL}{2} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item IO_INITIALIZE +@itemize - +@item only case: 4 +@end itemize + +@item IO_OPEN +@itemize - +@item only case: 2 +@end itemize + +@item IO_CLOSE +@itemize - +@item only case: 1 +@end itemize + +@item IO_READ +@itemize - +@item only case: 2 +@end itemize + +@item IO_WRITE +@itemize - +@item only case: 3 +@end itemize + +@item IO_CONTROL +@itemize - +@item only case: 2 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + +
    IO_INITIALIZE4
    IO_OPEN2
    IO_CLOSE1
    IO_READ2
    IO_WRITE3
    IO_CONTROL2
    +
    +@end html +@end ifset + +@section Rate Monotonic Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{RATE\_MONOTONIC\_CREATE}{32} +\rtemsonecase{RATE\_MONOTONIC\_IDENT}{341} +\rtemsonecase{RATE\_MONOTONIC\_CANCEL}{39} +\rtemsdirective{RATE\_MONOTONIC\_DELETE} +\rtemscase{active}{51} +\rtemscase{inactive}{48} +\rtemsdirective{RATE\_MONOTONIC\_PERIOD} +\rtemscase{initiate period -- returns to caller} + {54} +\rtemscase{conclude period -- caller blocks} + {74} +\rtemscase{obtain status}{31} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item RATE_MONOTONIC_CREATE +@itemize - +@item only case: 32 +@end itemize + +@item RATE_MONOTONIC_IDENT +@itemize - +@item only case: 341 +@end itemize + +@item RATE_MONOTONIC_CANCEL +@itemize - +@item only case: 39 +@end itemize + +@item RATE_MONOTONIC_DELETE +@itemize - +@item active: 51 +@item inactive: 48 +@end itemize + +@item RATE_MONOTONIC_PERIOD +@itemize - +@item initiate period -- returns to caller: 54 +@item conclude period -- caller blocks: 74 +@item obtain status: 31 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + +
    RATE_MONOTONIC_CREATE32
    RATE_MONOTONIC_IDENT341
    RATE_MONOTONIC_CANCEL39
    RATE_MONOTONIC_DELETE
    active
    51
    inactive
    48
    RATE_MONOTONIC_PERIOD
    initiate period -- returns to caller
    + 54
    conclude period -- caller blocks
    + 74
    obtain status
    31
    +
    +@end html +@end ifset + +@tex +\global\advance \smallskipamount by 4pt +@end tex + +@tex +\global\advance \smallskipamount by 4pt +@end tex diff --git a/doc/supplements/sparc/Makefile b/doc/supplements/sparc/Makefile deleted file mode 100644 index b390b92205..0000000000 --- a/doc/supplements/sparc/Makefile +++ /dev/null @@ -1,163 +0,0 @@ -# -# COPYRIGHT (c) 1988-1999. -# On-Line Applications Research Corporation (OAR). -# All rights reserved. -# -# $Id$ -# - -PROJECT=sparc - -include ../../Make.config - -REPLACE=../../tools/word-replace - -all: html info ps pdf - -dirs: - $(make-dirs) - -COMMON_FILES=../../common/cpright.texi ../../common/setup.texi - -GENERATED_FILES=\ - cpumodel.texi callconv.texi memmodel.texi intr.texi fatalerr.texi \ - bsp.texi cputable.texi timing.texi wksheets.texi timeERC32.texi - -FILES= $(PROJECT).texi \ - preface.texi \ - $(GENERATED_FILES) - -INFOFILES=$(wildcard $(PROJECT) $(PROJECT)-*) - -info: dirs c_sparc - cp c_$(PROJECT) c_$(PROJECT)-* $(INFO_INSTALL) - -c_sparc: $(FILES) - $(MAKEINFO) $(PROJECT).texi - -dvi: dirs $(PROJECT).dvi -ps: dirs $(PROJECT).ps -pdf: dirs $(PROJECT).pdf - -$(PROJECT).pdf: $(FILES) - $(TEXI2PDF) $(PROJECT).texi - cp $(PROJECT).pdf $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).ps: dirs $(PROJECT).dvi - dvips -o $(PROJECT).ps $(PROJECT).dvi - cp $(PROJECT).ps $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).dvi: $(FILES) - $(TEXI2DVI) $(PROJECT).texi - cp $(PROJECT).dvi $(WWW_INSTALL)/$(PROJECT) - -html: dirs $(FILES) - -mkdir -p $(WWW_INSTALL)/$(PROJECT) - $(TEXI2WWW) $(TEXI2WWW_ARGS) -dir $(WWW_INSTALL)/$(PROJECT) \ - $(PROJECT).texi - -clean: - rm -f *.o $(PROG) *.txt core $(PROJECT).pdf - rm -f *.dvi *.ps *.log *.aux *.cp *.fn *.ky *.pg *.toc *.tp *.vr $(BASE) - rm -f $(PROJECT) $(PROJECT)-* - rm -f c_$(PROJECT) c_$(PROJECT)-* - rm -f intr.t $(GENERATED_FILES) - rm -f wksheets.t wksheets_NOTIMES.t timing.t - rm -f timeERC32_.t timeERC32_.texi - rm -f *.fixed _* - -# -# Chapters which get automatic processing -# - -cpumodel.texi: cpumodel.t Makefile - $(BMENU) -p "Preface" \ - -u "Top" \ - -n "Calling Conventions" ${*}.t - -callconv.texi: callconv.t Makefile - $(BMENU) -p "CPU Model Dependent Features CPU Model Implementation Notes" \ - -u "Top" \ - -n "Memory Model" ${*}.t - -memmodel.texi: memmodel.t Makefile - $(BMENU) -p "Calling Conventions User-Provided Routines" \ - -u "Top" \ - -n "Interrupt Processing" ${*}.t - -# Interrupt Chapter: -# 1. Replace Times and Sizes -# 2. Build Node Structure -intr.t: intr_NOTIMES.t ERC32_TIMES - ${REPLACE} -p ERC32_TIMES intr_NOTIMES.t - mv intr_NOTIMES.t.fixed intr.t - -intr.texi: intr.t Makefile - $(BMENU) -p "Memory Model Flat Memory Model" \ - -u "Top" \ - -n "Default Fatal Error Processing" ${*}.t - -fatalerr.texi: fatalerr.t Makefile - $(BMENU) -p "Interrupt Processing Interrupt Stack" \ - -u "Top" \ - -n "Board Support Packages" ${*}.t - -bsp.texi: bsp.t Makefile - $(BMENU) -p "Default Fatal Error Processing Default Fatal Error Handler Operations" \ - -u "Top" \ - -n "Processor Dependent Information Table" ${*}.t - -cputable.texi: cputable.t Makefile - $(BMENU) -p "Board Support Packages Processor Initialization" \ - -u "Top" \ - -n "Memory Requirements" ${*}.t - - -# Worksheets Chapter: -# 1. Obtain the Shared File -# 2. Replace Times and Sizes -# 3. Build Node Structure - -wksheets_NOTIMES.t: ../../common/wksheets.t - cp ../../common/wksheets.t wksheets_NOTIMES.t - -wksheets.t: wksheets_NOTIMES.t ERC32_TIMES - ${REPLACE} -p ERC32_TIMES wksheets_NOTIMES.t - mv wksheets_NOTIMES.t.fixed wksheets.t - -wksheets.texi: wksheets.t Makefile - $(BMENU) -p "Processor Dependent Information Table CPU Dependent Information Table" \ - -u "Top" \ - -n "Timing Specification" ${*}.t - -# Timing Specification Chapter: -# 1. Copy the Shared File -# 3. Build Node Structure - -timing.t: ../../common/timing.t - cp ../../common/timing.t timing.t - -timing.texi: timing.t Makefile - $(BMENU) -p "Memory Requirements RTEMS RAM Workspace Worksheet" \ - -u "Top" \ - -n "ERC32 Timing Data" ${*}.t - -# Timing Data for ERC32 BSP Chapter: -# 1. Copy the Shared File -# 2. Replace Times and Sizes -# 3. Build Node Structure - -timeERC32_.t: ../../common/timetbl.t timeERC32.t - cat timeERC32.t ../../common/timetbl.t >timeERC32_.t - @echo >>timeERC32_.t - @echo "@tex" >>timeERC32_.t - @echo "\\global\\advance \\smallskipamount by 4pt" >>timeERC32_.t - @echo "@end tex" >>timeERC32_.t - ${REPLACE} -p ERC32_TIMES timeERC32_.t - mv timeERC32_.t.fixed timeERC32_.t - -timeERC32.texi: timeERC32_.t Makefile - $(BMENU) -p "Timing Specification Terminology" \ - -u "Top" \ - -n "Command and Variable Index" timeERC32_.t - mv timeERC32_.texi timeERC32.texi diff --git a/doc/supplements/sparc/Makefile.am b/doc/supplements/sparc/Makefile.am new file mode 100644 index 0000000000..2bfc18cff4 --- /dev/null +++ b/doc/supplements/sparc/Makefile.am @@ -0,0 +1,116 @@ +# +# COPYRIGHT (c) 1988-1999. +# On-Line Applications Research Corporation (OAR). +# All rights reserved. +# +# $Id$ +# + +AUTOMAKE_OPTIONS = foreign + +PROJECT=sparc + +include $(top_srcdir)/project.am +include $(top_srcdir)/supplements/supplement.am + +COMMON_FILES=$(top_srcdir)/common/cpright.texi $(top_builddir)/common/setup.texi + +GENERATED_FILES=\ + cpumodel.texi callconv.texi memmodel.texi intr.texi fatalerr.texi \ + bsp.texi cputable.texi timing.texi wksheets.texi timeERC32.texi + +FILES= preface.texi + +info_TEXINFOS = sparc.texi +sparc_TEXINFOS = $(FILES) $(COMMON_FILES) $(GENERATED_FILES) + +# +# Chapters which get automatic processing +# + +cpumodel.texi: cpumodel.t + $(BMENU) -p "Preface" \ + -u "Top" \ + -n "Calling Conventions" $< + +callconv.texi: callconv.t + $(BMENU) -p "CPU Model Dependent Features CPU Model Implementation Notes" \ + -u "Top" \ + -n "Memory Model" $< + +memmodel.texi: memmodel.t + $(BMENU) -p "Calling Conventions User-Provided Routines" \ + -u "Top" \ + -n "Interrupt Processing" $< + +# Interrupt Chapter: +# 1. Replace Times and Sizes +# 2. Build Node Structure +intr.texi: intr_NOTIMES.t ERC32_TIMES + ${REPLACE2} -p $(srcdir)/ERC32_TIMES $(srcdir)/intr_NOTIMES.t intr.t + $(BMENU) -p "Memory Model Flat Memory Model" \ + -u "Top" \ + -n "Default Fatal Error Processing" intr.t +CLEANFILES += intr.t + +fatalerr.texi: fatalerr.t + $(BMENU) -p "Interrupt Processing Interrupt Stack" \ + -u "Top" \ + -n "Board Support Packages" $< + +bsp.texi: bsp.t + $(BMENU) -p "Default Fatal Error Processing Default Fatal Error Handler Operations" \ + -u "Top" \ + -n "Processor Dependent Information Table" $< + +cputable.texi: cputable.t + $(BMENU) -p "Board Support Packages Processor Initialization" \ + -u "Top" \ + -n "Memory Requirements" $< + + +# Worksheets Chapter: +# 1. Obtain the Shared File +# 2. Replace Times and Sizes +# 3. Build Node Structure + +wksheets.texi: $(top_srcdir)/common/wksheets.t ERC32_TIMES + ${REPLACE2} -p $(srcdir)/ERC32_TIMES \ + $(top_srcdir)/common/wksheets.t wksheets.t + $(BMENU) -p "Processor Dependent Information Table CPU Dependent Information Table" \ + -u "Top" \ + -n "Timing Specification" wksheets.t +CLEANFILES += wksheets.t + +# Timing Specification Chapter: +# 1. Copy the Shared File +# 3. Build Node Structure +timing.texi: $(top_srcdir)/common/timing.t + cp $(top_srcdir)/common/timing.t timing.t + $(BMENU) -p "Memory Requirements RTEMS RAM Workspace Worksheet" \ + -u "Top" \ + -n "ERC32 Timing Data" timing.t +CLEANFILES += timing.t + + +# Timing Data for ERC32 BSP Chapter: +# 1. Copy the Shared File +# 2. Replace Times and Sizes +# 3. Build Node Structure + +timeERC32_.t: $(top_srcdir)/common/timetbl.t timeERC32.t + cat timeERC32.t $(top_srcdir)/common/timetbl.t >timeERC32_.t + @echo >>timeERC32_.t + @echo "@tex" >>timeERC32_.t + @echo "\\global\\advance \\smallskipamount by 4pt" >>timeERC32_.t + @echo "@end tex" >>timeERC32_.t + ${REPLACE} -p ERC32_TIMES timeERC32_.t + mv timeERC32_.t.fixed timeERC32_.t + +timeERC32.texi: timeERC32_.t + $(BMENU) -p "Timing Specification Terminology" \ + -u "Top" \ + -n "Command and Variable Index" timeERC32_.t + mv timeERC32_.texi timeERC32.texi + +EXTRA_DIST = ERC32_TIMES *.t diff --git a/doc/supplements/sparc/sparc.texi b/doc/supplements/sparc/sparc.texi index 98462acac4..0fece23906 100644 --- a/doc/supplements/sparc/sparc.texi +++ b/doc/supplements/sparc/sparc.texi @@ -1,6 +1,6 @@ \input texinfo @c -*-texinfo-*- @c %**start of header -@setfilename c_sparc +@setfilename sparc @syncodeindex vr fn @synindex ky cp @paragraphindent 0 @@ -75,7 +75,7 @@ END-INFO-DIR-ENTRY @include timeERC32.texi @ifinfo @node Top, Preface, (dir), (dir) -@top c_sparc +@top sparc This is the online version of the RTEMS SPARC Applications Supplement. diff --git a/doc/supplements/sparc/timeERC32_.t b/doc/supplements/sparc/timeERC32_.t new file mode 100644 index 0000000000..6fc2e1952f --- /dev/null +++ b/doc/supplements/sparc/timeERC32_.t @@ -0,0 +1,1454 @@ +@c +@c COPYRIGHT (c) 1988-1999. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@include ../../common/timemac.texi +@tex +\global\advance \smallskipamount by -4pt +@end tex + +@chapter ERC32 Timing Data + +@section Introduction + +The timing data for RTEMS on the ERC32 implementation +of the SPARC architecture is provided along with the target +dependent aspects concerning the gathering of the timing data. +The hardware platform used to gather the times is described to +give the reader a better understanding of each directive time +provided. Also, provided is a description of the interrupt +latency and the context switch times as they pertain to the +SPARC version of RTEMS. + +@section Hardware Platform + +All times reported in this chapter were measured +using the SPARC Instruction Simulator (SIS) developed by the +European Space Agency. SIS simulates the ERC32 -- a custom low +power implementation combining the Cypress 90C601 integer unit, +the Cypress 90C602 floating point unit, and a number of +peripherals such as counter timers, interrupt controller and a +memory controller. + +For the RTEMS tests, SIS is configured with the +following characteristics: + +@itemize @bullet +@item 15 Mhz clock speed + +@item 0 wait states for PROM accesses + +@item 0 wait states for RAM accesses +@end itemize + +The ERC32's General Purpose Timer was used to gather +all timing information. This timer was programmed to operate +with one microsecond accuracy. All sources of hardware +interrupts were disabled, although traps were enabled and the +interrupt level of the SPARC allows all interrupts. + +@section Interrupt Latency + +The maximum period with traps disabled or the +processor interrupt level set to it's highest value inside RTEMS +is less than TBD +microseconds including the instructions which +disable and re-enable interrupts. The time required for the +ERC32 to vector an interrupt and for the RTEMS entry overhead +before invoking the user's trap handler are a total of +8 +microseconds. These combine to yield a worst case interrupt +latency of less than TBD + +8 microseconds at +15.0 Mhz. +[NOTE: The maximum period with interrupts disabled was last +determined for Release 4.2.0-prerelease.] + +The maximum period with interrupts disabled within +RTEMS is hand-timed with some assistance from SIS. The maximum +period with interrupts disabled with RTEMS occurs during a +context switch when traps are disabled to flush all the register +windows to memory. The length of time spent flushing the +register windows varies based on the number of windows which +must be flushed. Based on the information reported by SIS, it +takes from 4.0 to 18.0 microseconds (37 to 122 instructions) to +flush the register windows. It takes approximately 41 CPU +cycles (2.73 microseconds) to flush each register window set to +memory. The register window flush operation is heavily memory +bound. + +[NOTE: All traps are disabled during the register +window flush thus disabling both software generate traps and +external interrupts. During a normal RTEMS critical section, +the processor interrupt level (pil) is raised to level 15 and +traps are left enabled. The longest path for a normal critical +section within RTEMS is less than 50 instructions.] + +The interrupt vector and entry overhead time was +generated on the SIS benchmark platform using the ERC32's +ability to forcibly generate an arbitrary interrupt as the +source of the "benchmark" interrupt. + +@section Context Switch + +The RTEMS processor context switch time is 10 +microseconds on the SIS benchmark platform when no floating +point context is saved or restored. Additional execution time +is required when a TASK_SWITCH user extension is configured. +The use of the TASK_SWITCH extension is application dependent. +Thus, its execution time is not considered part of the raw +context switch time. + +Since RTEMS was designed specifically for embedded +missile applications which are floating point intensive, the +executive is optimized to avoid unnecessarily saving and +restoring the state of the numeric coprocessor. The state of +the numeric coprocessor is only saved when an FLOATING_POINT +task is dispatched and that task was not the last task to +utilize the coprocessor. In a system with only one +FLOATING_POINT task, the state of the numeric coprocessor will +never be saved or restored. When the first FLOATING_POINT task +is dispatched, RTEMS does not need to save the current state of +the numeric coprocessor. + +The following table summarizes the context switch +times for the ERC32 benchmark platform: + +@c ****** This comment is here to remind you not to edit the timetbl.t +@c ****** in any directory but common. +@c +@c Time Table Template +@c +@c COPYRIGHT (c) 1988-1999. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c +@c $Id$ +@c + +@ifset use-tex +@sp 1 +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{No Floating Point Contexts}{21} +\rtemsdirective{Floating Point Contexts} +\rtemscase{restore first FP task}{26} +\rtemscase{save initialized, restore initialized}{24} +\rtemscase{save idle, restore initialized}{23} +\rtemscase{save idle, restore idle}{33} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet +@item No Floating Point Contexts +@itemize - +@item only case: 21 +@end itemize +@item Floating Point Contexts +@itemize - +@item restore first FP task: 26 +@item save initialized, restore initialized: 24 +@item save idle, restore initialized: 23 +@item save idle, restore idle: 23 +@end itemize +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + +
    No Floating Point Contexts21
    Floating Point Contexts
    restore first FP task
    26
    save initialized, restore initialized
    24
    save idle, restore initialized
    23
    save idle, restore idle
    33
    +
    +@end html +@end ifset + +@section Directive Times + +This sections is divided into a number of +subsections, each of which contains a table listing the +execution times of that manager's directives. + +@page +@section Task Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{TASK\_CREATE}{59} +\rtemsonecase{TASK\_IDENT}{163} +\rtemsonecase{TASK\_START}{30} +\rtemsdirective{TASK\_RESTART} +\rtemscase{calling task}{64} +\rtemscase{suspended task -- returns to caller} + {36} +\rtemscase{blocked task -- returns to caller} + {47} +\rtemscase{ready task -- returns to caller} + {37} +\rtemscase{suspended task -- preempts caller} + {77} +\rtemscase{blocked task -- preempts caller} + {84} +\rtemscase{ready task -- preempts caller} + {75} +\rtemsdirective{TASK\_DELETE} +\rtemscase{calling task}{91} +\rtemscase{suspended task}{47} +\rtemscase{blocked task}{50} +\rtemscase{ready task}{51} +\rtemsdirective{TASK\_SUSPEND} +\rtemscase{calling task}{56} +\rtemscase{returns to caller}{16} +\rtemsdirective{TASK\_RESUME} +\rtemscase{task readied -- returns to caller} + {17} +\rtemscase{task readied -- preempts caller} + {52} +\rtemsdirective{TASK\_SET\_PRIORITY} +\rtemscase{obtain current priority} + {10} +\rtemscase{returns to caller}{25} +\rtemscase{preempts caller}{67} +\rtemsdirective{TASK\_MODE} +\rtemscase{obtain current mode}{5} +\rtemscase{no reschedule}{6} +\rtemscase{reschedule -- returns to caller} + {9} +\rtemscase{reschedule -- preempts caller} + {42} +\rtemsonecase{TASK\_GET\_NOTE}{10} +\rtemsonecase{TASK\_SET\_NOTE}{10} +\rtemsdirective{TASK\_WAKE\_AFTER} +\rtemscase{yield -- returns to caller} + {6} +\rtemscase{yield -- preempts caller} + {49} +\rtemsonecase{TASK\_WAKE\_WHEN}{75} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item TASK_CREATE +@itemize - +@item only case: 59 +@end itemize + +@item TASK_IDENT +@itemize - +@item only case: 163 +@end itemize + +@item TASK_START +@itemize - +@item only case: 30 +@end itemize + +@item TASK_RESTART +@itemize - +@item calling task: 64 +@item suspended task -- returns to caller: 36 +@item blocked task -- returns to caller: 47 +@item ready task -- returns to caller: 37 +@item suspended task -- preempts caller: 77 +@item blocked task -- preempts caller: 84 +@item ready task -- preempts caller: 75 +@end itemize + +@item TASK_DELETE +@itemize - +@item calling task: 91 +@item suspended task: 47 +@item blocked task: 50 +@item ready task: 51 +@end itemize + +@item TASK_SUSPEND +@itemize - +@item calling task: 56 +@item returns to caller: 16 +@end itemize + +@item TASK_RESUME +@itemize - +@item task readied -- returns to caller: 17 +@item task readied -- preempts caller: 52 +@end itemize + +@item TASK_SET_PRIORITY +@itemize - +@item obtain current priority: 10 +@item returns to caller: 25 +@item preempts caller: 67 +@end itemize + +@item TASK_MODE +@itemize - +@item obtain current mode: 5 +@item no reschedule: 6 +@item reschedule -- returns to caller: 9 +@item reschedule -- preempts caller: 42 +@end itemize + +@item TASK_GET_NOTE +@itemize - +@item only case: 10 +@end itemize + +@item TASK_SET_NOTE +@itemize - +@item only case: 10 +@end itemize + +@item TASK_WAKE_AFTER +@itemize - +@item yield -- returns to caller: 6 +@item yield -- preempts caller: 49 +@end itemize + +@item TASK_WAKE_WHEN +@itemize - +@item only case: 75 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TASK_CREATE59
    TASK_IDENT163
    TASK_START30
    TASK_RESTART
    calling task
    64
    suspended task -- returns to caller
    36
    blocked task -- returns to caller
    47
    ready task -- returns to caller
    37
    suspended task -- preempts caller
    77
    blocked task -- preempts caller
    84
    ready task -- preempts caller
    75
    TASK_DELETE
    calling task
    91
    suspended task
    47
    blocked task
    50
    ready task
    51
    TASK_SUSPEND
    calling task
    56
    returns to caller
    16
    TASK_RESUME
    task readied -- returns to caller
    17
    task readied -- preempts caller
    52
    TASK_SET_PRIORITY
    obtain current priority
    10
    returns to caller
    25
    preempts caller
    67
    TASK_MODE
    obtain current mode
    5
    no reschedule
    6
    reschedule -- returns to caller
    9
    reschedule -- preempts caller
    42
    TASK_GET_NOTE10
    TASK_SET_NOTE10
    TASK_WAKE_AFTER
    yield -- returns to caller
    6
    yield -- preempts caller
    49
    TASK_WAKE_WHEN75
    +
    +@end html +@end ifset + +@page +@section Interrupt Manager + +It should be noted that the interrupt entry times +include vectoring the interrupt handler. + +@ifset use-tex +@sp 1 +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsdirective{Interrupt Entry Overhead} +\rtemscase{returns to nested interrupt}{7} +\rtemscase{returns to interrupted task} + {8} +\rtemscase{returns to preempting task} + {8} +\rtemsdirective{Interrupt Exit Overhead} +\rtemscase{returns to nested interrupt}{5} +\rtemscase{returns to interrupted task} + {7} +\rtemscase{returns to preempting task} + {14} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item Interrupt Entry Overhead +@itemize - +@item returns to nested interrupt: 7 +@item returns to interrupted task: 8 +@item returns to preempting task: 8 +@end itemize + +@item Interrupt Exit Overhead +@itemize - +@item returns to nested interrupt: 5 +@item returns to interrupted task: 7 +@item returns to preempting task: 14 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + +
    Interrupt Entry Overhead
    returns to nested interrupt
    7
    returns to interrupted task
    8
    returns to preempting task
    8
    Interrupt Exit Overhead
    returns to nested interrupt
    5
    returns to interrupted task
    7
    returns to preempting task
    14
    +
    +@end html +@end ifset + + +@section Clock Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{CLOCK\_SET}{33} +\rtemsonecase{CLOCK\_GET}{4} +\rtemsonecase{CLOCK\_TICK}{6} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item CLOCK_SET +@itemize - +@item only case: 33 +@end itemize + +@item CLOCK_GET +@itemize - +@item only case: 4 +@end itemize + +@item CLOCK_TICK +@itemize - +@item only case: 6 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + +
    CLOCK_SET33
    CLOCK_GET4
    CLOCK_TICK6
    +
    +@end html +@end ifset + +@section Timer Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{TIMER\_CREATE}{11} +\rtemsonecase{TIMER\_IDENT}{159} +\rtemsdirective{TIMER\_DELETE} +\rtemscase{inactive}{15} +\rtemscase{active}{17} +\rtemsdirective{TIMER\_FIRE\_AFTER} +\rtemscase{inactive}{21} +\rtemscase{active}{23} +\rtemsdirective{TIMER\_FIRE\_WHEN} +\rtemscase{inactive}{34} +\rtemscase{active}{34} +\rtemsdirective{TIMER\_RESET} +\rtemscase{inactive}{20} +\rtemscase{active}{22} +\rtemsdirective{TIMER\_CANCEL} +\rtemscase{inactive}{10} +\rtemscase{active}{13} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item TIMER_CREATE +@itemize - +@item only case: 11 +@end itemize + +@item TIMER_IDENT +@itemize - +@item only case: 159 +@end itemize + +@item TIMER_DELETE +@itemize - +@item inactive: 15 +@item active: 17 +@end itemize + +@item TIMER_FIRE_AFTER +@itemize - +@item inactive: 21 +@item active: 23 +@end itemize + +@item TIMER_FIRE_WHEN +@itemize - +@item inactive: TIMER_FIRE_WHEN_INACTIVE +@item active: TIMER_FIRE_WHEN_ACTIVE +@end itemize + +@item TIMER_RESET +@itemize - +@item inactive: TIMER_RESET_INACTIVE +@item active: TIMER_RESET_ACTIVE +@end itemize + +@item TIMER_CANCEL +@itemize - +@item inactive: TIMER_CANCEL_INACTIVE +@item active: TIMER_CANCEL_ACTIVE +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TIMER_CREATE11
    TIMER_IDENT159
    TIMER_DELETE
    inactive
    15
    active
    17
    TIMER_FIRE_AFTER
    inactive
    21
    active
    23
    TIMER_FIRE_WHEN
    inactive
    34
    active
    34
    TIMER_RESET
    inactive
    20
    active
    22
    TIMER_CANCEL
    inactive
    10
    active
    13
    +
    +@end html +@end ifset + +@page +@section Semaphore Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{SEMAPHORE\_CREATE}{19} +\rtemsonecase{SEMAPHORE\_IDENT}{171} +\rtemsonecase{SEMAPHORE\_DELETE}{19} +\rtemsdirective{SEMAPHORE\_OBTAIN} +\rtemscase{available}{12} +\rtemscase{not available -- NO\_WAIT} + {12} +\rtemscase{not available -- caller blocks} + {67} +\rtemsdirective{SEMAPHORE\_RELEASE} +\rtemscase{no waiting tasks}{14} +\rtemscase{task readied -- returns to caller} + {23} +\rtemscase{task readied -- preempts caller} + {57} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item SEMAPHORE_CREATE +@itemize - +@item only case: 19 +@end itemize + +@item SEMAPHORE_IDENT +@itemize - +@item only case: 171 +@end itemize + +@item SEMAPHORE_DELETE +@itemize - +@item only case: 19 +@end itemize + +@item SEMAPHORE_OBTAIN +@itemize - +@item available: 12 +@item not available -- NO_WAIT: 12 +@item not available -- caller blocks: 67 +@end itemize + +@item SEMAPHORE_RELEASE +@itemize - +@item no waiting tasks: 14 +@item task readied -- returns to caller: 23 +@item task readied -- preempts caller: 57 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + +
    SEMAPHORE_CREATE19
    SEMAPHORE_IDENT171
    SEMAPHORE_DELETE19
    SEMAPHORE_OBTAIN
    available
    12
    not available -- NO_WAIT
    12
    not available -- caller blocks
    67
    SEMAPHORE_RELEASE
    no waiting tasks
    14
    task readied -- returns to caller
    23
    task readied -- preempts caller
    57
    +
    +@end html +@end ifset + +@section Message Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{MESSAGE\_QUEUE\_CREATE}{114} +\rtemsonecase{MESSAGE\_QUEUE\_IDENT}{159} +\rtemsonecase{MESSAGE\_QUEUE\_DELETE}{25} +\rtemsdirective{MESSAGE\_QUEUE\_SEND} +\rtemscase{no waiting tasks} + {36} +\rtemscase{task readied -- returns to caller} + {38} +\rtemscase{task readied -- preempts caller} + {76} +\rtemsdirective{MESSAGE\_QUEUE\_URGENT} +\rtemscase{no waiting tasks}{36} +\rtemscase{task readied -- returns to caller} + {38} +\rtemscase{task readied -- preempts caller} + {76} +\rtemsdirective{MESSAGE\_QUEUE\_BROADCAST} +\rtemscase{no waiting tasks}{15} +\rtemscase{task readied -- returns to caller} + {42} +\rtemscase{task readied -- preempts caller} + {83} +\rtemsdirective{MESSAGE\_QUEUE\_RECEIVE} +\rtemscase{available}{30} +\rtemscase{not available -- NO\_WAIT} + {13} +\rtemscase{not available -- caller blocks} + {67} +\rtemsdirective{MESSAGE\_QUEUE\_FLUSH} +\rtemscase{no messages flushed}{9} +\rtemscase{messages flushed}{13} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item MESSAGE_QUEUE_CREATE +@itemize - +@item only case: 114 +@end itemize + +@item MESSAGE_QUEUE_IDENT +@itemize - +@item only case: 159 +@end itemize + +@item MESSAGE_QUEUE_DELETE +@itemize - +@item only case: 25 +@end itemize + +@item MESSAGE_QUEUE_SEND +@itemize - +@item no waiting tasks: 36 +@item task readied -- returns to caller: 38 +@item task readied -- preempts caller: 76 +@end itemize + +@item MESSAGE_QUEUE_URGENT +@itemize - +@item no waiting tasks: 36 +@item task readied -- returns to caller: 38 +@item task readied -- preempts caller: 76 +@end itemize + +@item MESSAGE_QUEUE_BROADCAST +@itemize - +@item no waiting tasks: 15 +@item task readied -- returns to caller: 42 +@item task readied -- preempts caller: 83 +@end itemize + +@item MESSAGE_QUEUE_RECEIVE +@itemize - +@item available: 30 +@item not available -- NO_WAIT: 13 +@item not available -- caller blocks: 67 +@end itemize + +@item MESSAGE_QUEUE_FLUSH +@itemize - +@item no messages flushed: 9 +@item messages flushed: 13 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    MESSAGE_QUEUE_CREATE114
    MESSAGE_QUEUE_IDENT159
    MESSAGE_QUEUE_DELETE25
    MESSAGE_QUEUE_SEND
    no waiting tasks
    36
    task readied -- returns to caller
    38
    task readied -- preempts caller
    76
    MESSAGE_QUEUE_URGENT
    no waiting tasks
    36
    task readied -- returns to caller
    38
    task readied -- preempts caller
    76
    MESSAGE_QUEUE_BROADCAST
    no waiting tasks
    15
    task readied -- returns to caller
    42
    task readied -- preempts caller
    83
    MESSAGE_QUEUE_RECEIVE
    available
    30
    not available -- NO_WAIT
    13
    not available -- caller blocks
    67
    MESSAGE_QUEUE_FLUSH
    no messages flushed
    9
    messages flushed
    13
    +
    +@end html +@end ifset + +@page +@section Event Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsdirective{EVENT\_SEND} +\rtemscase{no task readied}{9} +\rtemscase{task readied -- returns to caller} + {22} +\rtemscase{task readied -- preempts caller} + {58} +\rtemsdirective{EVENT\_RECEIVE} +\rtemscase{obtain current events}{1} +\rtemscase{available}{10} +\rtemscase{not available -- NO\_WAIT}{9} +\rtemscase{not available -- caller blocks} + {60} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item EVENT_SEND +@itemize - +@item no task readied: 9 +@item task readied -- returns to caller: 22 +@item task readied -- preempts caller: 58 +@end itemize + +@item EVENT_RECEIVE +@itemize - +@item obtain current events: 1 +@item available: 10 +@item not available -- NO_WAIT: 9 +@item not available -- caller blocks: 60 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + +
    EVENT_SEND
    no task readied
    9
    task readied -- returns to caller
    22
    task readied -- preempts caller
    58
    EVENT_RECEIVE
    obtain current events
    1
    available
    10
    not available -- NO_WAIT
    9
    not available -- caller blocks
    60
    +
    +@end html +@end ifset +@section Signal Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{SIGNAL\_CATCH}{6} +\rtemsdirective{SIGNAL\_SEND} +\rtemscase{returns to caller}{14} +\rtemscase{signal to self}{22} +\rtemsdirective{EXIT ASR OVERHEAD} +\rtemscase{returns to calling task} + {27} +\rtemscase{returns to preempting task} + {56} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet +@item SIGNAL_CATCH +@itemize - +@item only case: 6 +@end itemize + +@item SIGNAL_SEND +@itemize - +@item returns to caller: 14 +@item signal to self: 22 +@end itemize + +@item EXIT ASR OVERHEAD +@itemize - +@item returns to calling task: 27 +@item returns to preempting task: 56 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + +
    SIGNAL_CATCH6
    SIGNAL_SEND
    returns to caller
    14
    signal to self
    22
    EXIT ASR OVERHEAD
    returns to calling task
    + 27
    returns to preempting task
    + 56
    +
    +@end html +@end ifset + +@section Partition Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{PARTITION\_CREATE}{34} +\rtemsonecase{PARTITION\_IDENT}{159} +\rtemsonecase{PARTITION\_DELETE}{14} +\rtemsdirective{PARTITION\_GET\_BUFFER} +\rtemscase{available}{12} +\rtemscase{not available}{10} +\rtemsonecase{PARTITION\_RETURN\_BUFFER} + {10} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item PARTITION_CREATE +@itemize - +@item only case: 34 +@end itemize + +@item PARTITION_IDENT +@itemize - +@item only case: 159 +@end itemize + +@item PARTITION_DELETE +@itemize - +@item only case: 14 +@end itemize + +@item PARTITION_GET_BUFFER +@itemize - +@item available: 12 +@item not available: 10 +@end itemize + +@item PARTITION_RETURN_BUFFER +@itemize - +@item only case: 16 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + +
    PARTITION_CREATE34
    PARTITION_IDENT159
    PARTITION_DELETE14
    PARTITION_GET_BUFFER
    available
    12
    not available
    10
    PARTITION_RETURN_BUFFER10
    +
    +@end html +@end ifset + +@page +@section Region Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{REGION\_CREATE}{22} +\rtemsonecase{REGION\_IDENT}{162} +\rtemsonecase{REGION\_DELETE}{14} +\rtemsdirective{REGION\_GET\_SEGMENT} +\rtemscase{available}{19} +\rtemscase{not available -- NO\_WAIT} + {19} +\rtemscase{not available -- caller blocks} + {67} +\rtemsdirective{REGION\_RETURN\_SEGMENT} +\rtemscase{no waiting tasks}{17} +\rtemscase{task readied -- returns to caller} + {44} +\rtemscase{task readied -- preempts caller} + {77} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item REGION_CREATE +@itemize - +@item only case: 22 +@end itemize + +@item REGION_IDENT +@itemize - +@item only case: 162 +@end itemize + +@item REGION_DELETE +@itemize - +@item only case: 14 +@end itemize + +@item REGION_GET_SEGMENT +@itemize - +@item available: 19 +@item not available -- NO_WAIT: 19 +@item not available -- caller blocks: 67 +@end itemize + +@item REGION_RETURN_SEGMENT +@itemize - +@item no waiting tasks: 17 +@item task readied -- returns to caller: 44 +@item task readied -- preempts caller: 77 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + + + +
    REGION_CREATE22
    REGION_IDENT162
    REGION_DELETE14
    REGION_GET_SEGMENT
    available
    19
    not available -- NO_WAIT
    + 19
    not available -- caller blocks
    + 67
    REGION_RETURN_SEGMENT
    no waiting tasks
    17
    task readied -- returns to caller
    + 44
    task readied -- preempts caller
    + 77
    +
    +@end html +@end ifset + +@section Dual-Ported Memory Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{PORT\_CREATE}{14} +\rtemsonecase{PORT\_IDENT}{159} +\rtemsonecase{PORT\_DELETE}{13} +\rtemsonecase{PORT\_INTERNAL\_TO\_EXTERNAL} + {9} +\rtemsonecase{PORT\_EXTERNAL\_TO\_INTERNAL} + {9} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item PORT_CREATE +@itemize - +@item only case: 14 +@end itemize + +@item PORT_IDENT +@itemize - +@item only case: 159 +@end itemize + +@item PORT_DELETE +@itemize - +@item only case: 13 +@end itemize + +@item PORT_INTERNAL_TO_EXTERNAL +@itemize - +@item only case: 9 +@end itemize + +@item PORT_EXTERNAL_TO_INTERNAL +@itemize - +@item only case: 9 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + +
    PORT_CREATE14
    PORT_IDENT159
    PORT_DELETE13
    PORT_INTERNAL_TO_EXTERNAL9
    PORT_EXTERNAL_TO_INTERNAL9
    +
    +@end html +@end ifset + +@section I/O Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{IO\_INITIALIZE}{2} +\rtemsonecase{IO\_OPEN}{1} +\rtemsonecase{IO\_CLOSE}{1} +\rtemsonecase{IO\_READ}{1} +\rtemsonecase{IO\_WRITE}{1} +\rtemsonecase{IO\_CONTROL}{1} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item IO_INITIALIZE +@itemize - +@item only case: 2 +@end itemize + +@item IO_OPEN +@itemize - +@item only case: 1 +@end itemize + +@item IO_CLOSE +@itemize - +@item only case: 1 +@end itemize + +@item IO_READ +@itemize - +@item only case: 1 +@end itemize + +@item IO_WRITE +@itemize - +@item only case: 1 +@end itemize + +@item IO_CONTROL +@itemize - +@item only case: 1 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + +
    IO_INITIALIZE2
    IO_OPEN1
    IO_CLOSE1
    IO_READ1
    IO_WRITE1
    IO_CONTROL1
    +
    +@end html +@end ifset + +@section Rate Monotonic Manager + +@ifset use-tex +@tex +\centerline{\vbox{\offinterlineskip\halign{ +\span\rtemstimetable +\rtemsonecase{RATE\_MONOTONIC\_CREATE}{12} +\rtemsonecase{RATE\_MONOTONIC\_IDENT}{159} +\rtemsonecase{RATE\_MONOTONIC\_CANCEL}{14} +\rtemsdirective{RATE\_MONOTONIC\_DELETE} +\rtemscase{active}{19} +\rtemscase{inactive}{16} +\rtemsdirective{RATE\_MONOTONIC\_PERIOD} +\rtemscase{initiate period -- returns to caller} + {20} +\rtemscase{conclude period -- caller blocks} + {55} +\rtemscase{obtain status}{9} +\rtemsendtimetable +}}\hfil} +@end tex +@end ifset + +@ifset use-ascii +@ifinfo +@itemize @bullet + +@item RATE_MONOTONIC_CREATE +@itemize - +@item only case: 12 +@end itemize + +@item RATE_MONOTONIC_IDENT +@itemize - +@item only case: 159 +@end itemize + +@item RATE_MONOTONIC_CANCEL +@itemize - +@item only case: 14 +@end itemize + +@item RATE_MONOTONIC_DELETE +@itemize - +@item active: 19 +@item inactive: 16 +@end itemize + +@item RATE_MONOTONIC_PERIOD +@itemize - +@item initiate period -- returns to caller: 20 +@item conclude period -- caller blocks: 55 +@item obtain status: 9 +@end itemize + +@end itemize +@end ifinfo +@end ifset + +@ifset use-html +@html +
    + + + + + + + + + + + + + + + + + + + +
    RATE_MONOTONIC_CREATE12
    RATE_MONOTONIC_IDENT159
    RATE_MONOTONIC_CANCEL14
    RATE_MONOTONIC_DELETE
    active
    19
    inactive
    16
    RATE_MONOTONIC_PERIOD
    initiate period -- returns to caller
    + 20
    conclude period -- caller blocks
    + 55
    obtain status
    9
    +
    +@end html +@end ifset + +@tex +\global\advance \smallskipamount by 4pt +@end tex + +@tex +\global\advance \smallskipamount by 4pt +@end tex diff --git a/doc/supplements/supplement.am b/doc/supplements/supplement.am new file mode 100644 index 0000000000..ff1e7a9c88 --- /dev/null +++ b/doc/supplements/supplement.am @@ -0,0 +1,11 @@ +## $Id$ + +## +## Makefile fragment common to all supplements//Makefile.ams +## + +REPLACE = $(PERL) $(top_srcdir)/tools/word-replace +REPLACE2 = $(PERL) $(top_srcdir)/tools/word-replace2 + +MAINTAINERCLEANFILES += $(GENERATED_FILES) +CLEANFILES += *.fixed diff --git a/doc/supplements/template/BSP_TIMES b/doc/supplements/template/BSP_TIMES index c80ed37148..10a86f288f 100644 --- a/doc/supplements/template/BSP_TIMES +++ b/doc/supplements/template/BSP_TIMES @@ -7,8 +7,8 @@ # # CPU Model Information # -RTEMS_BSP BSP_FOR_TIMES -RTEMS_CPU_MODEL BSP_CPU_MODEL +RTEMS_BSP MYBSP +RTEMS_CPU_MODEL MYCPU # # Interrupt Latency # diff --git a/doc/supplements/template/Makefile b/doc/supplements/template/Makefile deleted file mode 100644 index e5187e1038..0000000000 --- a/doc/supplements/template/Makefile +++ /dev/null @@ -1,159 +0,0 @@ -# -# COPYRIGHT (c) 1988-1999. -# On-Line Applications Research Corporation (OAR). -# All rights reserved. -# -# $Id$ -# - -PROJECT=template - -include ../../Make.config - -REPLACE=../../tools/word-replace - -all: html info ps pdf - -dirs: - $(make-dirs) - -COMMON_FILES=../../common/cpright.texi ../../common/setup.texi - -GENERATED_FILES=\ - cpumodel.texi callconv.texi memmodel.texi intr.texi fatalerr.texi \ - bsp.texi cputable.texi wksheets.texi timing.texi timeBSP.texi - -FILES= $(PROJECT).texi preface.texi \ - $(COMMON_FILES) $(GENERATED_FILES) - -info: dirs c_$(PROJECT) - @echo NEED TO INSTALL THE INFO FILES - #cp c_$(PROJECT) c_$(PROJECT)-* $(INFO_INSTALL) - #cp c_$(PROJECT) c_$(PROJECT)-* $(INFO_INSTALL) - -c_$(PROJECT): $(FILES) - $(MAKEINFO) $(PROJECT).texi - -dvi: dirs $(PROJECT).dvi -ps: dirs $(PROJECT).ps -pdf: dirs $(PROJECT).pdf - -$(PROJECT).pdf: $(FILES) - $(TEXI2PDF) $(PROJECT).texi - cp $(PROJECT).pdf $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).ps: $(PROJECT).dvi - dvips -o $(PROJECT).ps $(PROJECT).dvi - cp $(PROJECT).ps $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).dvi: $(FILES) - $(TEXI2DVI) $(PROJECT).texi - cp $(PROJECT).dvi $(WWW_INSTALL)/$(PROJECT) - -html: dirs $(FILES) - -mkdir -p $(WWW_INSTALL)/$(PROJECT) - $(TEXI2WWW) $(TEXI2WWW_ARGS) -dir $(WWW_INSTALL)/$(PROJECT) \ - $(PROJECT).texi - -clean: - rm -f *.o $(PROG) *.txt core $(PROJECT).pdf - rm -f *.dvi *.ps *.log *.aux *.cp *.fn *.ky *.pg *.toc *.tp *.vr $(BASE) - rm -f $(PROJECT) $(PROJECT)-* - rm -f c_$(PROJECT) c_$(PROJECT)-* - rm -f wksheets.t wksheets_NOTIMES.t - rm -f intr.t - rm -f timeBSP_.t timing.t - rm -f *.fixed _* $(GENERATED_FILES) - rm -f timeBSP_.t - -# -# Chapters which get automatic processing -# -cpumodel.texi: cpumodel.t Makefile - $(BMENU) -p "Preface" \ - -u "Top" \ - -n "Calling Conventions" ${*}.t - -callconv.texi: callconv.t Makefile - $(BMENU) -p "CPU Model Dependent Features Another Optional Feature" \ - -u "Top" \ - -n "Memory Model" ${*}.t - -memmodel.texi: memmodel.t Makefile - $(BMENU) -p "Calling Conventions User-Provided Routines" \ - -u "Top" \ - -n "Interrupt Processing" ${*}.t - -# Interrupt Chapter: -# 1. Replace Times and Sizes -# 2. Build Node Structure -intr.t: intr_NOTIMES.t BSP_TIMES - ${REPLACE} -p BSP_TIMES intr_NOTIMES.t - mv intr_NOTIMES.t.fixed intr.t - -intr.texi: intr.t Makefile - $(BMENU) -p "Memory Model Flat Memory Model" \ - -u "Top" \ - -n "Default Fatal Error Processing" ${*}.t - -fatalerr.texi: fatalerr.t Makefile - $(BMENU) -p "Interrupt Processing Interrupt Stack" \ - -u "Top" \ - -n "Board Support Packages" ${*}.t - -bsp.texi: bsp.t Makefile - $(BMENU) -p "Default Fatal Error Processing Default Fatal Error Handler Operations" \ - -u "Top" \ - -n "Processor Dependent Information Table" ${*}.t - -cputable.texi: cputable.t Makefile - $(BMENU) -p "Board Support Packages Processor Initialization" \ - -u "Top" \ - -n "Memory Requirements" ${*}.t - -# Worksheets Chapter: -# 1. Copy the Shared File -# 2. Replace Times and Sizes -# 3. Build Node Structure - -wksheets_NOTIMES.t: ../../common/wksheets.t - cp ../../common/wksheets.t wksheets_NOTIMES.t - -wksheets.t: wksheets_NOTIMES.t BSP_TIMES - ${REPLACE} -p BSP_TIMES wksheets_NOTIMES.t - mv wksheets_NOTIMES.t.fixed wksheets.t - -wksheets.texi: wksheets.t Makefile - $(BMENU) -p "Processor Dependent Information Table CPU Dependent Information Table" \ - -u "Top" \ - -n "Timing Specification" ${*}.t - -# Timing Specification Chapter: -# 1. Copy the Shared File -# 3. Build Node Structure - -timing.t: ../../common/timing.t - cp ../../common/timing.t timing.t - -timing.texi: timing.t Makefile - $(BMENU) -p "Memory Requirements RTEMS RAM Workspace Worksheet" \ - -u "Top" \ - -n "BSP_FOR_TIMES Timing Data" ${*}.t - -# Timing Data for BSP Chapter: -# 1. Copy the Shared File -# 2. Replace Times and Sizes -# 3. Build Node Structure - -timeBSP_.t: ../../common/timetbl.t timeBSP.t - cat timeBSP.t ../../common/timetbl.t >timeBSP_.t - @echo >>timeBSP_.t - @echo "@tex" >>timeBSP_.t - @echo "\\global\\advance \\smallskipamount by 4pt" >>timeBSP_.t - @echo "@end tex" >>timeBSP_.t - -timeBSP.texi: timeBSP_.t Makefile - $(BMENU) -p "Timing Specification Terminology" \ - -u "Top" \ - -n "Command and Variable Index" timeBSP_.t - mv timeBSP_.t timeBSP.texi diff --git a/doc/supplements/template/Makefile.am b/doc/supplements/template/Makefile.am new file mode 100644 index 0000000000..1d743aa2b7 --- /dev/null +++ b/doc/supplements/template/Makefile.am @@ -0,0 +1,115 @@ +# +# COPYRIGHT (c) 1988-1999. +# On-Line Applications Research Corporation (OAR). +# All rights reserved. +# +# $Id$ +# + +AUTOMAKE_OPTIONS = foreign + +PROJECT=template + +include $(top_srcdir)/project.am +include $(top_srcdir)/supplements/supplement.am + +COMMON_FILES= $(top_srcdir)/common/cpright.texi $(top_builddir)/common/setup.texi + +GENERATED_FILES=\ + cpumodel.texi callconv.texi memmodel.texi intr.texi fatalerr.texi \ + bsp.texi cputable.texi wksheets.texi timing.texi timeBSP.texi + +FILES= preface.texi + +info_TEXINFOS = template.texi +template_TEXINFOS = $(FILES) $(COMMON_FILES) $(GENERATED_FILES) + +# +# Chapters which get automatic processing +# +cpumodel.texi: cpumodel.t + $(BMENU) -p "Preface" \ + -u "Top" \ + -n "Calling Conventions" $< + +callconv.texi: callconv.t + $(BMENU) -p "CPU Model Dependent Features Another Optional Feature" \ + -u "Top" \ + -n "Memory Model" $< + +memmodel.texi: memmodel.t + $(BMENU) -p "Calling Conventions User-Provided Routines" \ + -u "Top" \ + -n "Interrupt Processing" $< + +# Interrupt Chapter: +# 1. Replace Times and Sizes +# 2. Build Node Structure +intr.texi: intr_NOTIMES.t BSP_TIMES + ${REPLACE2} -p $(srcdir)/BSP_TIMES $(srcdir)/intr_NOTIMES.t intr.t + $(BMENU) -p "Memory Model Flat Memory Model" \ + -u "Top" \ + -n "Default Fatal Error Processing" intr.t +CLEANFILES += intr.t + +fatalerr.texi: fatalerr.t + $(BMENU) -p "Interrupt Processing Interrupt Stack" \ + -u "Top" \ + -n "Board Support Packages" $< + +bsp.texi: bsp.t + $(BMENU) -p "Default Fatal Error Processing Default Fatal Error Handler Operations" \ + -u "Top" \ + -n "Processor Dependent Information Table" $< + +cputable.texi: cputable.t + $(BMENU) -p "Board Support Packages Processor Initialization" \ + -u "Top" \ + -n "Memory Requirements" $< + +# Worksheets Chapter: +# 1. Obtain the Shared File +# 2. Replace Times and Sizes +# 3. Build Node Structure + +wksheets.texi: $(top_srcdir)/common/wksheets.t BSP_TIMES + ${REPLACE2} -p $(srcdir)/BSP_TIMES \ + $(top_srcdir)/common/wksheets.t wksheets.t + $(BMENU) -p "Processor Dependent Information Table CPU Dependent Information Table" \ + -u "Top" \ + -n "Timing Specification" wksheets.t +CLEANFILES += wksheets.t + +# Timing Specification Chapter: +# 1. Copy the Shared File +# 3. Build Node Structure + +timing.texi: $(top_srcdir)/common/timing.t + cp $(top_srcdir)/common/timing.t timing.t + $(BMENU) -p "Memory Requirements RTEMS RAM Workspace Worksheet" \ + -u "Top" \ + -n "MYBSP Timing Data" timing.t +CLEANFILES += timing.t + +# Timing Data for BSP BSP Chapter: +# 1. Copy the Shared File +# 2. Replace Times and Sizes +# 3. Build Node Structure + +timeBSP_.t: $(top_srcdir)/common/timetbl.t timeBSP.t + cat timeBSP.t $(top_srcdir)/common/timetbl.t >timeBSP_.t + @echo >>timeBSP_.t + @echo "@tex" >>timeBSP_.t + @echo "\\global\\advance \\smallskipamount by 4pt" >>timeBSP_.t + @echo "@end tex" >>timeBSP_.t + ${REPLACE} -p BSP_TIMES timeBSP_.t + mv timeBSP_.t.fixed timeBSP_.t +MAINTAINERCLEANFILES += timeBSP_.t + +timeBSP.texi: timeBSP_.t + $(BMENU) -p "Timing Specification Terminology" \ + -u "Top" \ + -n "Command and Variable Index" timeBSP_.t + mv timeBSP_.texi timeBSP.texi + +EXTRA_DIST = BSP_TIMES *.t diff --git a/doc/supplements/template/template.texi b/doc/supplements/template/template.texi index fae5f168ff..ce9e950f17 100644 --- a/doc/supplements/template/template.texi +++ b/doc/supplements/template/template.texi @@ -1,6 +1,6 @@ \input texinfo @c -*-texinfo-*- @c %**start of header -@setfilename c_template +@setfilename template @syncodeindex vr fn @synindex ky cp @paragraphindent 0 @@ -76,7 +76,7 @@ END-INFO-DIR-ENTRY @include timeBSP.texi @ifinfo @node Top, Preface, (dir), (dir) -@top c_template +@top template This is the online version of the RTEMS Template Applications Supplement. @@ -92,7 +92,7 @@ Applications Supplement. * Processor Dependent Information Table:: * Memory Requirements:: * Timing Specification:: -* BSP_FOR_TIMES Timing Data:: +* MYBSP Timing Data:: * Command and Variable Index:: * Concept Index:: @end menu @@ -103,7 +103,7 @@ Applications Supplement. @c Need to copy the emacs stuff and "trailer stuff" (index, toc) into here @c -@node Command and Variable Index, Concept Index, BSP_FOR_TIMES Timing Data Context Switch, Top +@node Command and Variable Index, Concept Index, MYBSP Timing Data Rate Monotonic Manager, Top @unnumbered Command and Variable Index There are currently no Command and Variable Index entries. diff --git a/doc/supplements/template/timeBSP.t b/doc/supplements/template/timeBSP.t index f8cafd5f89..3787442e7d 100644 --- a/doc/supplements/template/timeBSP.t +++ b/doc/supplements/template/timeBSP.t @@ -11,7 +11,7 @@ \global\advance \smallskipamount by -4pt @end tex -@chapter BSP_FOR_TIMES Timing Data +@chapter MYBSP Timing Data @section Introduction @@ -27,7 +27,7 @@ times as they pertain to the XXX version of RTEMS. All times reported except for the maximum period interrupts are disabled by RTEMS were measured using a Motorola -BSP_FOR_TIMES CPU board. The BSP_FOR_TIMES is a 20Mhz board with one wait +MYBSP CPU board. The MYBSP is a 20Mhz board with one wait state dynamic memory and a XXX numeric coprocessor. The Zilog 8036 countdown timer on this board was used to measure elapsed time with a one-half microsecond resolution. All @@ -66,14 +66,14 @@ It should be noted again that the maximum period with interrupts disabled within RTEMS is hand-timed and based upon worst case (i.e. CPU cache disabled and no instruction overlap) times for a 20Mhz XXX. The interrupt vector and entry -overhead time was generated on an BSP_FOR_TIMES benchmark platform +overhead time was generated on an MYBSP benchmark platform using the Multiprocessing Communications registers to generate as the interrupt source. @section Context Switch The RTEMS processor context switch time is RTEMS_NO_FP_CONTEXTS -microseconds on the BSP_FOR_TIMES benchmark platform when no floating +microseconds on the MYBSP benchmark platform when no floating point context is saved or restored. Additional execution time is required when a TASK_SWITCH user extension is configured. The use of the TASK_SWITCH extension is application dependent. @@ -104,5 +104,5 @@ executing and the busy state when floating point instructions are executing. The state of the coprocessor is task specific. The following table summarizes the context switch -times for the BSP_FOR_TIMES benchmark platform: +times for the MYBSP benchmark platform: diff --git a/doc/texinfo/texinfo.tex b/doc/texinfo/texinfo.tex index 8fcde98a03..c49af9f4ed 100644 --- a/doc/texinfo/texinfo.tex +++ b/doc/texinfo/texinfo.tex @@ -1,77 +1,90 @@ -%% TeX macros to handle texinfo files - -% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 1994 Free Software Foundation, Inc. - -%This texinfo.tex file 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, or (at -%your option) any later version. - -%This texinfo.tex file 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 texinfo.tex file; see the file COPYING. If not, write -%to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, -%USA. - - -%In other words, you are welcome to use, share and improve this program. -%You are forbidden to forbid anyone else to use, share and improve -%what you give them. Help stamp out software-hoarding! - - -% Send bug reports to bug-texinfo@prep.ai.mit.edu. -% Please include a *precise* test case in each bug report. - - -% Make it possible to create a .fmt file just by loading this file: -% if the underlying format is not loaded, start by loading it now. -% Added by gildea November 1993. +% texinfo.tex -- TeX macros to handle Texinfo files. +% +% Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi +% +\def\texinfoversion{1999-09-25.10} +% +% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99 +% Free Software Foundation, Inc. +% +% This texinfo.tex file 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, or (at +% your option) any later version. +% +% This texinfo.tex file 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 texinfo.tex file; see the file COPYING. If not, write +% to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +% Boston, MA 02111-1307, USA. +% +% In other words, you are welcome to use, share and improve this program. +% You are forbidden to forbid anyone else to use, share and improve +% what you give them. Help stamp out software-hoarding! +% +% Please try the latest version of texinfo.tex before submitting bug +% reports; you can get the latest version from: +% ftp://ftp.gnu.org/gnu/texinfo.tex +% (and all GNU mirrors, see http://www.gnu.org/order/ftp.html) +% ftp://texinfo.org/tex/texinfo.tex +% ftp://us.ctan.org/macros/texinfo/texinfo.tex +% (and all CTAN mirrors, finger ctan@us.ctan.org for a list). +% /home/gd/gnu/doc/texinfo.tex on the GNU machines. +% The texinfo.tex in any given Texinfo distribution could well be out +% of date, so if that's what you're using, please check. +% Texinfo has a small home page at http://texinfo.org/. +% +% Send bug reports to bug-texinfo@gnu.org. Please include including a +% complete document in each bug report with which we can reproduce the +% problem. Patches are, of course, greatly appreciated. +% +% To process a Texinfo manual with TeX, it's most reliable to use the +% texi2dvi shell script that comes with the distribution. For a simple +% manual foo.texi, however, you can get away with this: +% tex foo.texi +% texindex foo.?? +% tex foo.texi +% tex foo.texi +% dvips foo.dvi -o # or whatever, to process the dvi file; this makes foo.ps. +% The extra runs of TeX get the cross-reference information correct. +% Sometimes one run after texindex suffices, and sometimes you need more +% than two; texi2dvi does it as many times as necessary. +% +% It is possible to adapt texinfo.tex for other languages. You can get +% the existing language-specific files from ftp://ftp.gnu.org/gnu/texinfo/. -% This automatically updates the version number based on RCS. -\def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}} -\deftexinfoversion$Revision$ -\message{Loading texinfo package [Version \texinfoversion]:} +\message{Loading texinfo [version \texinfoversion]:} % If in a .fmt file, print the version number % and turn on active characters that we couldn't do earlier because % they might have appeared in the input file name. -\everyjob{\message{[Texinfo version \texinfoversion]}\message{} +\everyjob{\message{[Texinfo version \texinfoversion]}% \catcode`+=\active \catcode`\_=\active} % Save some parts of plain tex whose names we will redefine. - -\let\ptextilde=\~ -\let\ptexlbrace=\{ -\let\ptexrbrace=\} -\let\ptexdots=\dots -\let\ptexdot=\. -\let\ptexstar=\* -\let\ptexend=\end -\let\ptexbullet=\bullet \let\ptexb=\b +\let\ptexbullet=\bullet \let\ptexc=\c +\let\ptexcomma=\, +\let\ptexdot=\. +\let\ptexdots=\dots +\let\ptexend=\end +\let\ptexequiv=\equiv +\let\ptexexclam=\! \let\ptexi=\i +\let\ptexlbrace=\{ +\let\ptexrbrace=\} +\let\ptexstar=\* \let\ptext=\t -\let\ptexl=\l -\let\ptexL=\L -% Be sure we're in horizontal mode when doing a tie, since we make space -% equivalent to this in @example-like environments. Otherwise, a space -% at the beginning of a line will start with \penalty -- and -% since \penalty is valid in vertical mode, we'd end up putting the -% penalty on the vertical list instead of in the new paragraph. -{\catcode`@ = 11 - % Avoid using \@M directly, because that causes trouble - % if the definition is written into an index file. - \global\let\tiepenalty = \@M - \gdef\tie{\leavevmode\penalty\tiepenalty\ } -} -\let\~ = \tie % And make it available as @~. +% We never want plain's outer \+ definition in Texinfo. +% For @tex, we can use \tabalign. +\let\+ = \relax \message{Basics,} \chardef\other=12 @@ -80,18 +93,47 @@ % starts a new line in the output. \newlinechar = `^^J -% Set up fixed words for English. -\ifx\putwordChapter\undefined{\gdef\putwordChapter{Chapter}}\fi% -\def\putwordInfo{Info}% -\ifx\putwordSee\undefined{\gdef\putwordSee{See}}\fi% -\ifx\putwordsee\undefined{\gdef\putwordsee{see}}\fi% -\ifx\putwordfile\undefined{\gdef\putwordfile{file}}\fi% -\ifx\putwordpage\undefined{\gdef\putwordpage{page}}\fi% -\ifx\putwordsection\undefined{\gdef\putwordsection{section}}\fi% -\ifx\putwordSection\undefined{\gdef\putwordSection{Section}}\fi% -\ifx\putwordTableofContents\undefined{\gdef\putwordTableofContents{Table of Contents}}\fi% -\ifx\putwordShortContents\undefined{\gdef\putwordShortContents{Short Contents}}\fi% -\ifx\putwordAppendix\undefined{\gdef\putwordAppendix{Appendix}}\fi% +% Set up fixed words for English if not already set. +\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi +\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi +\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi +\ifx\putwordin\undefined \gdef\putwordin{in}\fi +\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi +\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi +\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi +\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi +\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi +\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi +\ifx\putwordof\undefined \gdef\putwordof{of}\fi +\ifx\putwordon\undefined \gdef\putwordon{on}\fi +\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi +\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi +\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi +\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi +\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi +\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi +\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi +% +\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi +\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi +\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi +\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi +\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi +\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi +\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi +\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi +\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi +\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi +\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi +\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi +% +\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi +\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi +\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi +\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi +\ifx\putwordDeftypevar\undefined\gdef\putwordDeftypevar{Variable}\fi +\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi +\ifx\putwordDeftypefun\undefined\gdef\putwordDeftypefun{Function}\fi % Ignore a token. % @@ -100,89 +142,130 @@ \hyphenation{ap-pen-dix} \hyphenation{mini-buf-fer mini-buf-fers} \hyphenation{eshell} +\hyphenation{white-space} % Margin to add to right of even pages, to left of odd pages. -\newdimen \bindingoffset \bindingoffset=0pt -\newdimen \normaloffset \normaloffset=\hoffset +\newdimen \bindingoffset +\newdimen \normaloffset \newdimen\pagewidth \newdimen\pageheight -\pagewidth=\hsize \pageheight=\vsize % Sometimes it is convenient to have everything in the transcript file % and nothing on the terminal. We don't just call \tracingall here, % since that produces some useless output on the terminal. % \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% +\ifx\eTeXversion\undefined \def\loggingall{\tracingcommands2 \tracingstats2 \tracingpages1 \tracingoutput1 \tracinglostchars1 \tracingmacros2 \tracingparagraphs1 \tracingrestores1 \showboxbreadth\maxdimen\showboxdepth\maxdimen }% +\else +\def\loggingall{\tracingcommands3 \tracingstats2 + \tracingpages1 \tracingoutput1 \tracinglostchars1 + \tracingmacros2 \tracingparagraphs1 \tracingrestores1 + \tracingscantokens1 \tracingassigns1 \tracingifs1 + \tracinggroups1 \tracingnesting2 + \showboxbreadth\maxdimen\showboxdepth\maxdimen +}% +\fi -%---------------------Begin change----------------------- +% For @cropmarks command. +% Do @cropmarks to get crop marks. % -%%%% For @cropmarks command. -% Dimensions to add cropmarks at corners Added by P. A. MacKay, 12 Nov. 1986 +\newif\ifcropmarks +\let\cropmarks = \cropmarkstrue % -\newdimen\cornerlong \newdimen\cornerthick -\newdimen \topandbottommargin -\newdimen \outerhsize \newdimen \outervsize -\cornerlong=1pc\cornerthick=.3pt % These set size of cropmarks -\outerhsize=7in -%\outervsize=9.5in -% Alternative @smallbook page size is 9.25in -\outervsize=9.25in -\topandbottommargin=.75in +% Dimensions to add cropmarks at corners. +% Added by P. A. MacKay, 12 Nov. 1986 % -%---------------------End change----------------------- +\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines +\newdimen\cornerlong \cornerlong=1pc +\newdimen\cornerthick \cornerthick=.3pt +\newdimen\topandbottommargin \topandbottommargin=.75in + +% Main output routine. +\chardef\PAGE = 255 +\output = {\onepageout{\pagecontents\PAGE}} + +\newbox\headlinebox +\newbox\footlinebox % \onepageout takes a vbox as an argument. Note that \pagecontents -% does insertions itself, but you have to call it yourself. -\chardef\PAGE=255 \output={\onepageout{\pagecontents\PAGE}} -\def\onepageout#1{\hoffset=\normaloffset -\ifodd\pageno \advance\hoffset by \bindingoffset -\else \advance\hoffset by -\bindingoffset\fi -{\escapechar=`\\\relax % makes sure backslash is used in output files. -\shipout\vbox{{\let\hsize=\pagewidth \makeheadline} \pagebody{#1}% -{\let\hsize=\pagewidth \makefootline}}}% -\advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi} - -%%%% For @cropmarks command %%%% - -% Here is a modification of the main output routine for Near East Publications -% This provides right-angle cropmarks at all four corners. -% The contents of the page are centerlined into the cropmarks, -% and any desired binding offset is added as an \hskip on either -% site of the centerlined box. (P. A. MacKay, 12 November, 1986) -% -\def\croppageout#1{\hoffset=0pt % make sure this doesn't mess things up -{\escapechar=`\\\relax % makes sure backslash is used in output files. - \shipout - \vbox to \outervsize{\hsize=\outerhsize - \vbox{\line{\ewtop\hfill\ewtop}} - \nointerlineskip - \line{\vbox{\moveleft\cornerthick\nstop} - \hfill - \vbox{\moveright\cornerthick\nstop}} - \vskip \topandbottommargin - \centerline{\ifodd\pageno\hskip\bindingoffset\fi - \vbox{ - {\let\hsize=\pagewidth \makeheadline} - \pagebody{#1} - {\let\hsize=\pagewidth \makefootline}} - \ifodd\pageno\else\hskip\bindingoffset\fi} - \vskip \topandbottommargin plus1fill minus1fill - \boxmaxdepth\cornerthick - \line{\vbox{\moveleft\cornerthick\nsbot} - \hfill - \vbox{\moveright\cornerthick\nsbot}} - \nointerlineskip - \vbox{\line{\ewbot\hfill\ewbot}} - }} +% does insertions, but you have to call it yourself. +\def\onepageout#1{% + \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi + % + \ifodd\pageno \advance\hoffset by \bindingoffset + \else \advance\hoffset by -\bindingoffset\fi + % + % Do this outside of the \shipout so @code etc. will be expanded in + % the headline as they should be, not taken literally (outputting ''code). + \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% + \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% + % + {% + % Have to do this stuff outside the \shipout because we want it to + % take effect in \write's, yet the group defined by the \vbox ends + % before the \shipout runs. + % + \escapechar = `\\ % use backslash in output files. + \indexdummies % don't expand commands in the output. + \normalturnoffactive % \ in index entries must not stay \, e.g., if + % the page break happens to be in the middle of an example. + \shipout\vbox{% + \ifcropmarks \vbox to \outervsize\bgroup + \hsize = \outerhsize + \vskip-\topandbottommargin + \vtop to0pt{% + \line{\ewtop\hfil\ewtop}% + \nointerlineskip + \line{% + \vbox{\moveleft\cornerthick\nstop}% + \hfill + \vbox{\moveright\cornerthick\nstop}% + }% + \vss}% + \vskip\topandbottommargin + \line\bgroup + \hfil % center the page within the outer (page) hsize. + \ifodd\pageno\hskip\bindingoffset\fi + \vbox\bgroup + \fi + % + \unvbox\headlinebox + \pagebody{#1}% + \ifdim\ht\footlinebox > 0pt + % Only leave this space if the footline is nonempty. + % (We lessened \vsize for it in \oddfootingxxx.) + % The \baselineskip=24pt in plain's \makefootline has no effect. + \vskip 2\baselineskip + \unvbox\footlinebox + \fi + % + \ifpdfmakepagedest \pdfmkdest{\the\pageno} \fi + % + \ifcropmarks + \egroup % end of \vbox\bgroup + \hfil\egroup % end of (centering) \line\bgroup + \vskip\topandbottommargin plus1fill minus1fill + \boxmaxdepth = \cornerthick + \vbox to0pt{\vss + \line{% + \vbox{\moveleft\cornerthick\nsbot}% + \hfill + \vbox{\moveright\cornerthick\nsbot}% + }% + \nointerlineskip + \line{\ewbot\hfil\ewbot}% + }% + \egroup % \vbox from first cropmarks clause + \fi + }% end of \shipout\vbox + }% end of group with \turnoffactive \advancepageno - \ifnum\outputpenalty>-20000 \else\dosupereject\fi} -% -% Do @cropmarks to get crop marks -\def\cropmarks{\let\onepageout=\croppageout } + \ifnum\outputpenalty>-20000 \else\dosupereject\fi +} \newinsert\margin \dimen\margin=\maxdimen @@ -197,7 +280,6 @@ \ifr@ggedbottom \kern-\dimen@ \vfil \fi} } -% % Here are the rules for the cropmarks. Note that they are % offset so that the space between them is truly \outerhsize or \outervsize % (P. A. MacKay, 12 November, 1986) @@ -292,11 +374,11 @@ %% Call \inENV within environments (after a \begingroup) \newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi} \def\ENVcheck{% -\ifENV\errmessage{Still within an environment. Type Return to continue.} +\ifENV\errmessage{Still within an environment; press RETURN to continue} \endgroup\fi} % This is not perfect, but it should reduce lossage % @begin foo is the same as @foo, for now. -\newhelp\EMsimple{Type to continue.} +\newhelp\EMsimple{Press RETURN to continue.} \outer\def\begin{\parsearg\beginxxx} @@ -355,7 +437,7 @@ % @@ prints an @ % Kludge this until the fonts are right (grr). -\def\@{{\tt \char '100}} +\def\@{{\tt\char64}} % This is turned off because it was never documented % and you can use @w{...} around a quote to suppress ligatures. @@ -365,11 +447,55 @@ %\def\'{{'}} % Used to generate quoted braces. - -\def\mylbrace {{\tt \char '173}} -\def\myrbrace {{\tt \char '175}} +\def\mylbrace {{\tt\char123}} +\def\myrbrace {{\tt\char125}} \let\{=\mylbrace \let\}=\myrbrace +\begingroup + % Definitions to produce actual \{ & \} command in an index. + \catcode`\{ = 12 \catcode`\} = 12 + \catcode`\[ = 1 \catcode`\] = 2 + \catcode`\@ = 0 \catcode`\\ = 12 + @gdef@lbracecmd[\{]% + @gdef@rbracecmd[\}]% +@endgroup + +% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent +% Others are defined by plain TeX: @` @' @" @^ @~ @= @v @H. +\let\, = \c +\let\dotaccent = \. +\def\ringaccent#1{{\accent23 #1}} +\let\tieaccent = \t +\let\ubaraccent = \b +\let\udotaccent = \d + +% Other special characters: @questiondown @exclamdown +% Plain TeX defines: @AA @AE @O @OE @L (and lowercase versions) @ss. +\def\questiondown{?`} +\def\exclamdown{!`} + +% Dotless i and dotless j, used for accents. +\def\imacro{i} +\def\jmacro{j} +\def\dotless#1{% + \def\temp{#1}% + \ifx\temp\imacro \ptexi + \else\ifx\temp\jmacro \j + \else \errmessage{@dotless can be used only with i or j}% + \fi\fi +} + +% Be sure we're in horizontal mode when doing a tie, since we make space +% equivalent to this in @example-like environments. Otherwise, a space +% at the beginning of a line will start with \penalty -- and +% since \penalty is valid in vertical mode, we'd end up putting the +% penalty on the vertical list instead of in the new paragraph. +{\catcode`@ = 11 + % Avoid using \@M directly, because that causes trouble + % if the definition is written into an index file. + \global\let\tiepenalty = \@M + \gdef\tie{\leavevmode\penalty\tiepenalty\ } +} % @: forces normal size whitespace following. \def\:{\spacefactor=1000 } @@ -380,14 +506,11 @@ % @. is an end-of-sentence period. \def\.{.\spacefactor=3000 } -% @enddots{} is an end-of-sentence ellipsis. -\gdef\enddots{$\mathinner{\ldotp\ldotp\ldotp\ldotp}$\spacefactor=3000} - % @! is an end-of-sentence bang. -\gdef\!{!\spacefactor=3000 } +\def\!{!\spacefactor=3000 } % @? is an end-of-sentence query. -\gdef\?{?\spacefactor=3000 } +\def\?{?\spacefactor=3000 } % @w prevents a word break. Without the \leavevmode, @w at the % beginning of a paragraph, when TeX is still in vertical mode, would @@ -471,53 +594,81 @@ where each line of input produces a line of output.} %% This method tries to make TeX break the page naturally %% if the depth of the box does not fit. %{\baselineskip=0pt% -%\vtop to #1\mil{\vfil}\kern -#1\mil\penalty 10000 +%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak %\prevdepth=-1000pt %}} \def\needx#1{% - % Go into vertical mode, so we don't make a big box in the middle of a + % Ensure vertical mode, so we don't make a big box in the middle of a % paragraph. \par % - % Don't add any leading before our big empty box, but allow a page - % break, since the best break might be right here. - \allowbreak - \nointerlineskip - \vtop to #1\mil{\vfil}% - % - % TeX does not even consider page breaks if a penalty added to the - % main vertical list is 10000 or more. But in order to see if the - % empty box we just added fits on the page, we must make it consider - % page breaks. On the other hand, we don't want to actually break the - % page after the empty box. So we use a penalty of 9999. - % - % There is an extremely small chance that TeX will actually break the - % page at this \penalty, if there are no other feasible breakpoints in - % sight. (If the user is using lots of big @group commands, which - % almost-but-not-quite fill up a page, TeX will have a hard time doing - % good page breaking, for example.) However, I could not construct an - % example where a page broke at this \penalty; if it happens in a real - % document, then we can reconsider our strategy. - \penalty9999 - % - % Back up by the size of the box, whether we did a page break or not. - \kern -#1\mil - % - % Do not allow a page break right after this kern. - \nobreak + % If the @need value is less than one line space, it's useless. + \dimen0 = #1\mil + \dimen2 = \ht\strutbox + \advance\dimen2 by \dp\strutbox + \ifdim\dimen0 > \dimen2 + % + % Do a \strut just to make the height of this box be normal, so the + % normal leading is inserted relative to the preceding line. + % And a page break here is fine. + \vtop to #1\mil{\strut\vfil}% + % + % TeX does not even consider page breaks if a penalty added to the + % main vertical list is 10000 or more. But in order to see if the + % empty box we just added fits on the page, we must make it consider + % page breaks. On the other hand, we don't want to actually break the + % page after the empty box. So we use a penalty of 9999. + % + % There is an extremely small chance that TeX will actually break the + % page at this \penalty, if there are no other feasible breakpoints in + % sight. (If the user is using lots of big @group commands, which + % almost-but-not-quite fill up a page, TeX will have a hard time doing + % good page breaking, for example.) However, I could not construct an + % example where a page broke at this \penalty; if it happens in a real + % document, then we can reconsider our strategy. + \penalty9999 + % + % Back up by the size of the box, whether we did a page break or not. + \kern -#1\mil + % + % Do not allow a page break right after this kern. + \nobreak + \fi } % @br forces paragraph break \let\br = \par -% @dots{} output some dots +% @dots{} output an ellipsis using the current font. +% We do .5em per period so that it has the same spacing in a typewriter +% font as three actual period characters. +% +\def\dots{% + \leavevmode + \hbox to 1.5em{% + \hskip 0pt plus 0.25fil minus 0.25fil + .\hss.\hss.% + \hskip 0pt plus 0.5fil minus 0.5fil + }% +} + +% @enddots{} is an end-of-sentence ellipsis. +% +\def\enddots{% + \leavevmode + \hbox to 2em{% + \hskip 0pt plus 0.25fil minus 0.25fil + .\hss.\hss.\hss.% + \hskip 0pt plus 0.5fil minus 0.5fil + }% + \spacefactor=3000 +} -\def\dots{$\ldots$} % @page forces the start of a new page - +% \def\page{\par\vfill\supereject} % @exdent text.... @@ -536,17 +687,34 @@ where each line of input produces a line of output.} \def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount \leftline{\hskip\leftskip{\rm#1}}}} +% @inmargin{TEXT} puts TEXT in the margin next to the current paragraph. + +\def\inmargin#1{% +\strut\vadjust{\nobreak\kern-\strutdepth + \vtop to \strutdepth{\baselineskip\strutdepth\vss + \llap{\rightskip=\inmarginspacing \vbox{\noindent #1}}\null}}} +\newskip\inmarginspacing \inmarginspacing=1cm +\def\strutdepth{\dp\strutbox} + %\hbox{{\rm#1}}\hfil\break}} % @include file insert text of that file as input. - -\def\include{\parsearg\includezzz} -%Use \input\thisfile to avoid blank after \input, which may be an active -%char (in which case the blank would become the \input argument). -%The grouping keeps the value of \thisfile correct even when @include -%is nested. -\def\includezzz #1{\begingroup -\def\thisfile{#1}\input\thisfile +% Allow normal characters that we make active in the argument (a file name). +\def\include{\begingroup + \catcode`\\=12 + \catcode`~=12 + \catcode`^=12 + \catcode`_=12 + \catcode`|=12 + \catcode`<=12 + \catcode`>=12 + \catcode`+=12 + \parsearg\includezzz} +% Restore active chars for included file. +\def\includezzz#1{\endgroup\begingroup + % Read the included file in a group so nested @include's work. + \def\thisfile{#1}% + \input\thisfile \endgroup} \def\thisfile{} @@ -561,371 +729,317 @@ where each line of input produces a line of output.} % @sp n outputs n lines of vertical space \def\sp{\parsearg\spxxx} -\def\spxxx #1{\par \vskip #1\baselineskip} +\def\spxxx #1{\vskip #1\baselineskip} % @comment ...line which is ignored... % @c is the same as @comment % @ignore ... @end ignore is another way to write a comment -\def\comment{\catcode 64=\other \catcode 123=\other \catcode 125=\other% -\parsearg \commentxxx} - -\def\commentxxx #1{\catcode 64=0 \catcode 123=1 \catcode 125=2 } +\def\comment{\begingroup \catcode`\^^M=\other% +\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% +\commentxxx} +{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} \let\c=\comment -% Prevent errors for section commands. -% Used in @ignore and in failing conditionals. -\def\ignoresections{% -\let\chapter=\relax -\let\unnumbered=\relax -\let\top=\relax -\let\unnumberedsec=\relax -\let\unnumberedsection=\relax -\let\unnumberedsubsec=\relax -\let\unnumberedsubsection=\relax -\let\unnumberedsubsubsec=\relax -\let\unnumberedsubsubsection=\relax -\let\section=\relax -\let\subsec=\relax -\let\subsubsec=\relax -\let\subsection=\relax -\let\subsubsection=\relax -\let\appendix=\relax -\let\appendixsec=\relax -\let\appendixsection=\relax -\let\appendixsubsec=\relax -\let\appendixsubsection=\relax -\let\appendixsubsubsec=\relax -\let\appendixsubsubsection=\relax -\let\contents=\relax -\let\smallbook=\relax -\let\titlepage=\relax +% @paragraphindent NCHARS +% We'll use ems for NCHARS, close enough. +% We cannot implement @paragraphindent asis, though. +% +\def\asisword{asis} % no translation, these are keywords +\def\noneword{none} +% +\def\paragraphindent{\parsearg\doparagraphindent} +\def\doparagraphindent#1{% + \def\temp{#1}% + \ifx\temp\asisword + \else + \ifx\temp\noneword + \defaultparindent = 0pt + \else + \defaultparindent = #1em + \fi + \fi + \parindent = \defaultparindent } -% Used in nested conditionals, where we have to parse the Texinfo source -% and so want to turn off most commands, in case they are used -% incorrectly. -% -\def\ignoremorecommands{% - \let\defcv = \relax - \let\deffn = \relax - \let\deffnx = \relax - \let\defindex = \relax - \let\defivar = \relax - \let\defmac = \relax - \let\defmethod = \relax - \let\defop = \relax - \let\defopt = \relax - \let\defspec = \relax - \let\deftp = \relax - \let\deftypefn = \relax - \let\deftypefun = \relax - \let\deftypevar = \relax - \let\deftypevr = \relax - \let\defun = \relax - \let\defvar = \relax - \let\defvr = \relax - \let\ref = \relax - \let\xref = \relax - \let\printindex = \relax - \let\pxref = \relax - \let\settitle = \relax - \let\include = \relax - \let\lowersections = \relax - \let\down = \relax - \let\raisesections = \relax - \let\up = \relax - \let\set = \relax - \let\clear = \relax - \let\item = \relax - \let\message = \relax +% @exampleindent NCHARS +% We'll use ems for NCHARS like @paragraphindent. +% It seems @exampleindent asis isn't necessary, but +% I preserve it to make it similar to @paragraphindent. +\def\exampleindent{\parsearg\doexampleindent} +\def\doexampleindent#1{% + \def\temp{#1}% + \ifx\temp\asisword + \else + \ifx\temp\noneword + \lispnarrowing = 0pt + \else + \lispnarrowing = #1em + \fi + \fi } -% Ignore @ignore ... @end ignore. +% @asis just yields its argument. Used with @table, for example. % -\def\ignore{\doignore{ignore}} +\def\asis#1{#1} -% Also ignore @ifinfo, @ifhtml, @html, @menu, and @direntry text. +% @math means output in math mode. +% We don't use $'s directly in the definition of \math because control +% sequences like \math are expanded when the toc file is written. Then, +% we read the toc file back, the $'s will be normal characters (as they +% should be, according to the definition of Texinfo). So we must use a +% control sequence to switch into and out of math mode. % -\def\ifinfo{\doignore{ifinfo}} -\def\ifhtml{\doignore{ifhtml}} -\def\html{\doignore{html}} -\def\menu{\doignore{menu}} -\def\direntry{\doignore{direntry}} +% This isn't quite enough for @math to work properly in indices, but it +% seems unlikely it will ever be needed there. +% +\let\implicitmath = $ +\def\math#1{\implicitmath #1\implicitmath} -% Ignore text until a line `@end #1'. +% @bullet and @minus need the same treatment as @math, just above. +\def\bullet{\implicitmath\ptexbullet\implicitmath} +\def\minus{\implicitmath-\implicitmath} + +% @refill is a no-op. +\let\refill=\relax + +% If working on a large document in chapters, it is convenient to +% be able to disable indexing, cross-referencing, and contents, for test runs. +% This is done with @novalidate (before @setfilename). % -\def\doignore#1{\begingroup - % Don't complain about control sequences we have declared \outer. - \ignoresections - % - % Define a command to swallow text until we reach `@end #1'. - \long\def\doignoretext##1\end #1{\enddoignore}% - % - % Make sure that spaces turn into tokens that match what \doignoretext wants. - \catcode32 = 10 - % - % And now expand that command. - \doignoretext +\newif\iflinks \linkstrue % by default we want the aux files. +\let\novalidate = \linksfalse + +% @setfilename is done at the beginning of every texinfo file. +% So open here the files we need to have open while reading the input. +% This makes it possible to make a .fmt file for texinfo. +\def\setfilename{% + \iflinks + \readauxfile + \fi % \openindices needs to do some work in any case. + \openindices + \fixbackslash % Turn off hack to swallow `\input texinfo'. + \global\let\setfilename=\comment % Ignore extra @setfilename cmds. + % + % If texinfo.cnf is present on the system, read it. + % Useful for site-wide @afourpaper, etc. + % Just to be on the safe side, close the input stream before the \input. + \openin 1 texinfo.cnf + \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi + \closein1 + \temp + % + \comment % Ignore the actual filename. } -% What we do to finish off ignored text. +% Called from \setfilename. % -\def\enddoignore{\endgroup\ignorespaces}% - -\newif\ifwarnedobs\warnedobsfalse -\def\obstexwarn{% - \ifwarnedobs\relax\else - % We need to warn folks that they may have trouble with TeX 3.0. - % This uses \immediate\write16 rather than \message to get newlines. - \immediate\write16{} - \immediate\write16{***WARNING*** for users of Unix TeX 3.0!} - \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).} - \immediate\write16{If you are running another version of TeX, relax.} - \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.} - \immediate\write16{ Then upgrade your TeX installation if you can.} - \immediate\write16{If you are stuck with version 3.0, run the} - \immediate\write16{ script ``tex3patch'' from the Texinfo distribution} - \immediate\write16{ to use a workaround.} - \immediate\write16{} - \warnedobstrue - \fi +\def\openindices{% + \newindex{cp}% + \newcodeindex{fn}% + \newcodeindex{vr}% + \newcodeindex{tp}% + \newcodeindex{ky}% + \newcodeindex{pg}% } -% **In TeX 3.0, setting text in \nullfont hangs tex. For a -% workaround (which requires the file ``dummy.tfm'' to be installed), -% uncomment the following line: -%%%%%\font\nullfont=dummy\let\obstexwarn=\relax +% @bye. +\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} -% Ignore text, except that we keep track of conditional commands for -% purposes of nesting, up to an `@end #1' command. -% -\def\nestedignore#1{% - \obstexwarn - % We must actually expand the ignored text to look for the @end - % command, so that nested ignore constructs work. Thus, we put the - % text into a \vbox and then do nothing with the result. To minimize - % the change of memory overflow, we follow the approach outlined on - % page 401 of the TeXbook: make the current font be a dummy font. - % - \setbox0 = \vbox\bgroup - % Don't complain about control sequences we have declared \outer. - \ignoresections - % - % Define `@end #1' to end the box, which will in turn undefine the - % @end command again. - \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}% - % - % We are going to be parsing Texinfo commands. Most cause no - % trouble when they are used incorrectly, but some commands do - % complicated argument parsing or otherwise get confused, so we - % undefine them. - % - % We can't do anything about stray @-signs, unfortunately; - % they'll produce `undefined control sequence' errors. - \ignoremorecommands - % - % Set the current font to be \nullfont, a TeX primitive, and define - % all the font commands to also use \nullfont. We don't use - % dummy.tfm, as suggested in the TeXbook, because not all sites - % might have that installed. Therefore, math mode will still - % produce output, but that should be an extremely small amount of - % stuff compared to the main input. - % - \nullfont - \let\tenrm = \nullfont \let\tenit = \nullfont \let\tensl = \nullfont - \let\tenbf = \nullfont \let\tentt = \nullfont \let\smallcaps = \nullfont - \let\tensf = \nullfont - % Similarly for index fonts (mostly for their use in - % smallexample) - \let\indrm = \nullfont \let\indit = \nullfont \let\indsl = \nullfont - \let\indbf = \nullfont \let\indtt = \nullfont \let\indsc = \nullfont - \let\indsf = \nullfont - % - % Don't complain when characters are missing from the fonts. - \tracinglostchars = 0 - % - % Don't bother to do space factor calculations. - \frenchspacing - % - % Don't report underfull hboxes. - \hbadness = 10000 - % - % Do minimal line-breaking. - \pretolerance = 10000 - % - % Do not execute instructions in @tex - \def\tex{\doignore{tex}} -} - -% @set VAR sets the variable VAR to an empty value. -% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. -% -% Since we want to separate VAR from REST-OF-LINE (which might be -% empty), we can't just use \parsearg; we have to insert a space of our -% own to delimit the rest of the line, and then take it out again if we -% didn't need it. -% -\def\set{\parsearg\setxxx} -\def\setxxx#1{\setyyy#1 \endsetyyy} -\def\setyyy#1 #2\endsetyyy{% - \def\temp{#2}% - \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty - \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted. - \fi -} -% Can't use \xdef to pre-expand #2 and save some time, since \temp or -% \next or other control sequences that we've defined might get us into -% an infinite loop. Consider `@set foo @cite{bar}'. -\def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}} - -% @clear VAR clears (i.e., unsets) the variable VAR. -% -\def\clear{\parsearg\clearxxx} -\def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax} - -% @value{foo} gets the text saved in variable foo. -% -\def\value#1{\expandafter - \ifx\csname SET#1\endcsname\relax - {\{No value for ``#1''\}} - \else \csname SET#1\endcsname \fi} - -% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined -% with @set. -% -\def\ifset{\parsearg\ifsetxxx} -\def\ifsetxxx #1{% - \expandafter\ifx\csname SET#1\endcsname\relax - \expandafter\ifsetfail - \else - \expandafter\ifsetsucceed - \fi -} -\def\ifsetsucceed{\conditionalsucceed{ifset}} -\def\ifsetfail{\nestedignore{ifset}} -\defineunmatchedend{ifset} -% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been -% defined with @set, or has been undefined with @clear. -% -\def\ifclear{\parsearg\ifclearxxx} -\def\ifclearxxx #1{% - \expandafter\ifx\csname SET#1\endcsname\relax - \expandafter\ifclearsucceed +\message{pdf,} +% adobe `portable' document format +\newcount\tempnum +\newcount\lnkcount +\newtoks\filename +\newcount\filenamelength +\newcount\pgn +\newtoks\toksA +\newtoks\toksB +\newtoks\toksC +\newtoks\toksD +\newbox\boxA +\newcount\countA +\newif\ifpdf +\newif\ifpdfmakepagedest + +\ifx\pdfoutput\undefined + \pdffalse + \let\pdfmkdest = \gobble + \let\pdfurl = \gobble + \let\endlink = \relax + \let\linkcolor = \relax + \let\pdfmakeoutlines = \relax +\else + \pdftrue + \pdfoutput = 1 + \input pdfcolor + \def\dopdfimage#1#2#3{% + \def\imagewidth{#2}% + \def\imageheight{#3}% + \ifnum\pdftexversion < 14 + \pdfimage + \else + \pdfximage + \fi + \ifx\empty\imagewidth\else width \imagewidth \fi + \ifx\empty\imageheight\else height \imageheight \fi + {#1.pdf}% + \ifnum\pdftexversion < 14 \else + \pdfrefximage \pdflastximage + \fi} + \def\pdfmkdest#1{\pdfdest name{#1@} xyz} + \def\pdfmkpgn#1{#1@} + \let\linkcolor = \Cyan + \def\endlink{\Black\pdfendlink} + % Adding outlines to PDF; macros for calculating structure of outlines + % come from Petr Olsak + \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% + \else \csname#1\endcsname \fi} + \def\advancenumber#1{\tempnum=\expnumber{#1}\relax + \advance\tempnum by1 + \expandafter\xdef\csname#1\endcsname{\the\tempnum}} + \def\pdfmakeoutlines{{% + \openin 1 \jobname.toc + \ifeof 1\else\bgroup + \closein 1 + \indexnofonts + \def\tt{} + % thanh's hack / proper braces in bookmarks + \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace + \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace + % + \def\chapentry ##1##2##3{} + \def\unnumbchapentry ##1##2{} + \def\secentry ##1##2##3##4{\advancenumber{chap##2}} + \def\unnumbsecentry ##1##2{} + \def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}} + \def\unnumbsubsecentry ##1##2{} + \def\subsubsecentry ##1##2##3##4##5##6{\advancenumber{subsec##2.##3.##4}} + \def\unnumbsubsubsecentry ##1##2{} + \input \jobname.toc + \def\chapentry ##1##2##3{% + \pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}} + \def\unnumbchapentry ##1##2{% + \pdfoutline goto name{\pdfmkpgn{##2}}{##1}} + \def\secentry ##1##2##3##4{% + \pdfoutline goto name{\pdfmkpgn{##4}}count-\expnumber{sec##2.##3}{##1}} + \def\unnumbsecentry ##1##2{% + \pdfoutline goto name{\pdfmkpgn{##2}}{##1}} + \def\subsecentry ##1##2##3##4##5{% + \pdfoutline goto name{\pdfmkpgn{##5}}count-\expnumber{subsec##2.##3.##4}{##1}} + \def\unnumbsubsecentry ##1##2{% + \pdfoutline goto name{\pdfmkpgn{##2}}{##1}} + \def\subsubsecentry ##1##2##3##4##5##6{% + \pdfoutline goto name{\pdfmkpgn{##6}}{##1}} + \def\unnumbsubsubsecentry ##1##2{% + \pdfoutline goto name{\pdfmkpgn{##2}}{##1}} + \input \jobname.toc + \egroup\fi + }} + \def\makelinks #1,{% + \def\params{#1}\def\E{END}% + \ifx\params\E + \let\nextmakelinks=\relax + \else + \let\nextmakelinks=\makelinks + \ifnum\lnkcount>0,\fi + \picknum{#1}% + \startlink attr{/Border [0 0 0]} + goto name{\pdfmkpgn{\the\pgn}}% + \linkcolor #1% + \advance\lnkcount by 1% + \endlink + \fi + \nextmakelinks + } + \def\picknum#1{\expandafter\pn#1} + \def\pn#1{% + \def\p{#1}% + \ifx\p\lbrace + \let\nextpn=\ppn + \else + \let\nextpn=\ppnn + \def\first{#1} + \fi + \nextpn + } + \def\ppn#1{\pgn=#1\gobble} + \def\ppnn{\pgn=\first} + \def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,} + \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} + \def\skipspaces#1{\def\PP{#1}\def\D{|}% + \ifx\PP\D\let\nextsp\relax + \else\let\nextsp\skipspaces + \ifx\p\space\else\addtokens{\filename}{\PP}% + \advance\filenamelength by 1 + \fi + \fi + \nextsp} + \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax} + \ifnum\pdftexversion < 14 + \let \startlink \pdfannotlink \else - \expandafter\ifclearfail + \let \startlink \pdfstartlink \fi -} -\def\ifclearsucceed{\conditionalsucceed{ifclear}} -\def\ifclearfail{\nestedignore{ifclear}} -\defineunmatchedend{ifclear} - -% @iftex always succeeds; we read the text following, through @end -% iftex). But `@end iftex' should be valid only after an @iftex. -% -\def\iftex{\conditionalsucceed{iftex}} -\defineunmatchedend{iftex} - -% We can't just want to start a group at @iftex (for example) and end it -% at @end iftex, since then @set commands inside the conditional have no -% effect (they'd get reverted at the end of the group). So we must -% define \Eiftex to redefine itself to be its previous value. (We can't -% just define it to fail again with an ``unmatched end'' error, since -% the @ifset might be nested.) -% -\def\conditionalsucceed#1{% - \edef\temp{% - % Remember the current value of \E#1. - \let\nece{prevE#1} = \nece{E#1}% - % - % At the `@end #1', redefine \E#1 to be its previous value. - \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}% - }% - \temp -} - -% We need to expand lots of \csname's, but we don't want to expand the -% control sequences after we've constructed them. -% -\def\nece#1{\expandafter\noexpand\csname#1\endcsname} - -% @asis just yields its argument. Used with @table, for example. -% -\def\asis#1{#1} - -% @math means output in math mode. -% We don't use $'s directly in the definition of \math because control -% sequences like \math are expanded when the toc file is written. Then, -% we read the toc file back, the $'s will be normal characters (as they -% should be, according to the definition of Texinfo). So we must use a -% control sequence to switch into and out of math mode. -% -% This isn't quite enough for @math to work properly in indices, but it -% seems unlikely it will ever be needed there. -% -\let\implicitmath = $ -\def\math#1{\implicitmath #1\implicitmath} - -% @bullet and @minus need the same treatment as @math, just above. -\def\bullet{\implicitmath\ptexbullet\implicitmath} -\def\minus{\implicitmath-\implicitmath} - -\def\node{\ENVcheck\parsearg\nodezzz} -\def\nodezzz#1{\nodexxx [#1,]} -\def\nodexxx[#1,#2]{\gdef\lastnode{#1}} -\let\nwnode=\node -\let\lastnode=\relax - -\def\donoderef{\ifx\lastnode\relax\else -\expandafter\expandafter\expandafter\setref{\lastnode}\fi -\global\let\lastnode=\relax} - -\def\unnumbnoderef{\ifx\lastnode\relax\else -\expandafter\expandafter\expandafter\unnumbsetref{\lastnode}\fi -\global\let\lastnode=\relax} - -\def\appendixnoderef{\ifx\lastnode\relax\else -\expandafter\expandafter\expandafter\appendixsetref{\lastnode}\fi -\global\let\lastnode=\relax} - -\let\refill=\relax - -% @setfilename is done at the beginning of every texinfo file. -% So open here the files we need to have open while reading the input. -% This makes it possible to make a .fmt file for texinfo. -\def\setfilename{% - \readauxfile - \opencontents - \openindices - \fixbackslash % Turn off hack to swallow `\input texinfo'. - \global\let\setfilename=\comment % Ignore extra @setfilename cmds. - \comment % Ignore the actual filename. -} - -\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} + \def\pdfurl#1{% + \begingroup + \normalturnoffactive\def\@{@}% + \leavevmode\Red + \startlink attr{/Border [0 0 0]}% + user{/Subtype /Link /A << /S /URI /URI (#1) >>}% + % #1 + \endgroup} + \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} + \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} + \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} + \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} + \def\maketoks{% + \expandafter\poptoks\the\toksA|ENDTOKS| + \ifx\first0\adn0 + \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 + \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 + \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 + \else + \ifnum0=\countA\else\makelink\fi + \ifx\first.\let\next=\done\else + \let\next=\maketoks + \addtokens{\toksB}{\the\toksD} + \ifx\first,\addtokens{\toksB}{\space}\fi + \fi + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi + \next} + \def\makelink{\addtokens{\toksB}% + {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} + \def\pdflink#1{% + \startlink attr{/Border [0 0 0]} goto name{\mkpgn{#1}} + \linkcolor #1\endlink} + \def\mkpgn#1{#1@} + \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} +\fi % \ifx\pdfoutput -\def\inforef #1{\inforefzzz #1,,,,**} -\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, - node \samp{\ignorespaces#1{}}} \message{fonts,} - % Font-change commands. -% Texinfo supports the sans serif font style, which plain TeX does not. +% Texinfo sort of supports the sans serif font style, which plain TeX does not. % So we set up a \sf analogous to plain's \rm, etc. \newfam\sffam \def\sf{\fam=\sffam \tensf} \let\li = \sf % Sometimes we call it \li, not \sf. -%% Try out Computer Modern fonts at \magstephalf -\let\mainmagstep=\magstephalf +% We don't need math for this one. +\def\ttsl{\tenttsl} + +% Use Computer Modern fonts at \magstephalf (11pt). +\newcount\mainmagstep +\mainmagstep=\magstephalf % Set the font macro #1 to the font named #2, adding on the % specified font prefix (normally `cm'). -\def\setfont#1#2{\font#1=\fontprefix#2} +% #3 is the font's design size, #4 is a scale factor +\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4} % Use cm as the default font prefix. % To specify the font prefix, you must define \fontprefix @@ -933,98 +1047,125 @@ where each line of input produces a line of output.} \ifx\fontprefix\undefined \def\fontprefix{cm} \fi +% Support font families that don't use the same naming scheme as CM. +\def\rmshape{r} +\def\rmbshape{bx} %where the normal face is bold +\def\bfshape{b} +\def\bxshape{bx} +\def\ttshape{tt} +\def\ttbshape{tt} +\def\ttslshape{sltt} +\def\itshape{ti} +\def\itbshape{bxti} +\def\slshape{sl} +\def\slbshape{bxsl} +\def\sfshape{ss} +\def\sfbshape{ss} +\def\scshape{csc} +\def\scbshape{csc} \ifx\bigger\relax \let\mainmagstep=\magstep1 -\setfont\textrm{r12} -\setfont\texttt{tt12} +\setfont\textrm\rmshape{12}{1000} +\setfont\texttt\ttshape{12}{1000} \else -\setfont\textrm{r10 scaled \mainmagstep} -\setfont\texttt{tt10 scaled \mainmagstep} +\setfont\textrm\rmshape{10}{\mainmagstep} +\setfont\texttt\ttshape{10}{\mainmagstep} \fi % Instead of cmb10, you many want to use cmbx10. % cmbx10 is a prettier font on its own, but cmb10 % looks better when embedded in a line with cmr10. -\setfont\textbf{b10 scaled \mainmagstep} -\setfont\textit{ti10 scaled \mainmagstep} -\setfont\textsl{sl10 scaled \mainmagstep} -\setfont\textsf{ss10 scaled \mainmagstep} -\setfont\textsc{csc10 scaled \mainmagstep} +\setfont\textbf\bfshape{10}{\mainmagstep} +\setfont\textit\itshape{10}{\mainmagstep} +\setfont\textsl\slshape{10}{\mainmagstep} +\setfont\textsf\sfshape{10}{\mainmagstep} +\setfont\textsc\scshape{10}{\mainmagstep} +\setfont\textttsl\ttslshape{10}{\mainmagstep} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep % A few fonts for @defun, etc. -\setfont\defbf{bx10 scaled \magstep1} %was 1314 -\setfont\deftt{tt10 scaled \magstep1} +\setfont\defbf\bxshape{10}{\magstep1} %was 1314 +\setfont\deftt\ttshape{10}{\magstep1} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf} -% Fonts for indices and small examples. -% We actually use the slanted font rather than the italic, -% because texinfo normally uses the slanted fonts for that. -% Do not make many font distinctions in general in the index, since they -% aren't very useful. -\setfont\ninett{tt9} -\setfont\indrm{r9} -\setfont\indit{sl9} -\let\indsl=\indit -\let\indtt=\ninett -\let\indsf=\indrm -\let\indbf=\indrm -\setfont\indsc{csc10 at 9pt} -\font\indi=cmmi9 -\font\indsy=cmsy9 - -% Fonts for headings -\setfont\chaprm{bx12 scaled \magstep2} -\setfont\chapit{ti12 scaled \magstep2} -\setfont\chapsl{sl12 scaled \magstep2} -\setfont\chaptt{tt12 scaled \magstep2} -\setfont\chapsf{ss12 scaled \magstep2} +% Fonts for indices, footnotes, small examples (9pt). +\setfont\smallrm\rmshape{9}{1000} +\setfont\smalltt\ttshape{9}{1000} +\setfont\smallbf\bfshape{10}{900} +\setfont\smallit\itshape{9}{1000} +\setfont\smallsl\slshape{9}{1000} +\setfont\smallsf\sfshape{9}{1000} +\setfont\smallsc\scshape{10}{900} +\setfont\smallttsl\ttslshape{10}{900} +\font\smalli=cmmi9 +\font\smallsy=cmsy9 + +% Fonts for title page: +\setfont\titlerm\rmbshape{12}{\magstep3} +\setfont\titleit\itbshape{10}{\magstep4} +\setfont\titlesl\slbshape{10}{\magstep4} +\setfont\titlett\ttbshape{12}{\magstep3} +\setfont\titlettsl\ttslshape{10}{\magstep4} +\setfont\titlesf\sfbshape{17}{\magstep1} +\let\titlebf=\titlerm +\setfont\titlesc\scbshape{10}{\magstep4} +\font\titlei=cmmi12 scaled \magstep3 +\font\titlesy=cmsy10 scaled \magstep4 +\def\authorrm{\secrm} + +% Chapter (and unnumbered) fonts (17.28pt). +\setfont\chaprm\rmbshape{12}{\magstep2} +\setfont\chapit\itbshape{10}{\magstep3} +\setfont\chapsl\slbshape{10}{\magstep3} +\setfont\chaptt\ttbshape{12}{\magstep2} +\setfont\chapttsl\ttslshape{10}{\magstep3} +\setfont\chapsf\sfbshape{17}{1000} \let\chapbf=\chaprm -\setfont\chapsc{csc10 scaled\magstep3} +\setfont\chapsc\scbshape{10}{\magstep3} \font\chapi=cmmi12 scaled \magstep2 \font\chapsy=cmsy10 scaled \magstep3 -\setfont\secrm{bx12 scaled \magstep1} -\setfont\secit{ti12 scaled \magstep1} -\setfont\secsl{sl12 scaled \magstep1} -\setfont\sectt{tt12 scaled \magstep1} -\setfont\secsf{ss12 scaled \magstep1} -\setfont\secbf{bx12 scaled \magstep1} -\setfont\secsc{csc10 scaled\magstep2} +% Section fonts (14.4pt). +\setfont\secrm\rmbshape{12}{\magstep1} +\setfont\secit\itbshape{10}{\magstep2} +\setfont\secsl\slbshape{10}{\magstep2} +\setfont\sectt\ttbshape{12}{\magstep1} +\setfont\secttsl\ttslshape{10}{\magstep2} +\setfont\secsf\sfbshape{12}{\magstep1} +\let\secbf\secrm +\setfont\secsc\scbshape{10}{\magstep2} \font\seci=cmmi12 scaled \magstep1 \font\secsy=cmsy10 scaled \magstep2 -% \setfont\ssecrm{bx10 scaled \magstep1} % This size an font looked bad. -% \setfont\ssecit{cmti10 scaled \magstep1} % The letters were too crowded. -% \setfont\ssecsl{sl10 scaled \magstep1} -% \setfont\ssectt{tt10 scaled \magstep1} -% \setfont\ssecsf{ss10 scaled \magstep1} +% \setfont\ssecrm\bxshape{10}{\magstep1} % This size an font looked bad. +% \setfont\ssecit\itshape{10}{\magstep1} % The letters were too crowded. +% \setfont\ssecsl\slshape{10}{\magstep1} +% \setfont\ssectt\ttshape{10}{\magstep1} +% \setfont\ssecsf\sfshape{10}{\magstep1} -%\setfont\ssecrm{b10 scaled 1315} % Note the use of cmb rather than cmbx. -%\setfont\ssecit{ti10 scaled 1315} % Also, the size is a little larger than -%\setfont\ssecsl{sl10 scaled 1315} % being scaled magstep1. -%\setfont\ssectt{tt10 scaled 1315} -%\setfont\ssecsf{ss10 scaled 1315} +%\setfont\ssecrm\bfshape{10}{1315} % Note the use of cmb rather than cmbx. +%\setfont\ssecit\itshape{10}{1315} % Also, the size is a little larger than +%\setfont\ssecsl\slshape{10}{1315} % being scaled magstep1. +%\setfont\ssectt\ttshape{10}{1315} +%\setfont\ssecsf\sfshape{10}{1315} %\let\ssecbf=\ssecrm -\setfont\ssecrm{bx12 scaled \magstephalf} -\setfont\ssecit{ti12 scaled \magstephalf} -\setfont\ssecsl{sl12 scaled \magstephalf} -\setfont\ssectt{tt12 scaled \magstephalf} -\setfont\ssecsf{ss12 scaled \magstephalf} -\setfont\ssecbf{bx12 scaled \magstephalf} -\setfont\ssecsc{csc10 scaled \magstep1} +% Subsection fonts (13.15pt). +\setfont\ssecrm\rmbshape{12}{\magstephalf} +\setfont\ssecit\itbshape{10}{1315} +\setfont\ssecsl\slbshape{10}{1315} +\setfont\ssectt\ttbshape{12}{\magstephalf} +\setfont\ssecttsl\ttslshape{10}{1315} +\setfont\ssecsf\sfbshape{12}{\magstephalf} +\let\ssecbf\ssecrm +\setfont\ssecsc\scbshape{10}{\magstep1} \font\sseci=cmmi12 scaled \magstephalf -\font\ssecsy=cmsy10 scaled \magstep1 +\font\ssecsy=cmsy10 scaled 1315 % The smallcaps and symbol fonts should actually be scaled \magstep1.5, % but that is not a standard magnification. -% Fonts for title page: -\setfont\titlerm{bx12 scaled \magstep3} -\let\authorrm = \secrm - % In order for the font changes to affect most math symbols and letters, % we have to define the \textfont of the standard families. Since % texinfo doesn't allow for producing subscripts and superscripts, we @@ -1041,46 +1182,59 @@ where each line of input produces a line of output.} % The font-changing commands redefine the meanings of \tenSTYLE, instead % of just \STYLE. We do this so that font changes will continue to work % in math mode, where it is the current \fam that is relevant in most -% cases, not the current. Plain TeX does, for example, -% \def\bf{\fam=\bffam \tenbf} By redefining \tenbf, we obviate the need -% to redefine \bf itself. +% cases, not the current font. Plain TeX does \def\bf{\fam=\bffam +% \tenbf}, for example. By redefining \tenbf, we obviate the need to +% redefine \bf itself. \def\textfonts{% \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc - \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy + \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl \resetmathfonts} +\def\titlefonts{% + \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl + \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc + \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy + \let\tenttsl=\titlettsl + \resetmathfonts \setleading{25pt}} +\def\titlefont#1{{\titlefonts\rm #1}} \def\chapfonts{% \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc - \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy - \resetmathfonts} + \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl + \resetmathfonts \setleading{19pt}} \def\secfonts{% \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc - \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy - \resetmathfonts} + \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl + \resetmathfonts \setleading{16pt}} \def\subsecfonts{% \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc - \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy - \resetmathfonts} -\def\indexfonts{% - \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl - \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc - \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy - \resetmathfonts} + \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl + \resetmathfonts \setleading{15pt}} +\let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf? +\def\smallfonts{% + \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl + \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc + \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy + \let\tenttsl=\smallttsl + \resetmathfonts \setleading{11pt}} % Set up the default fonts, so we can use them for creating boxes. % \textfonts +% Define these so they can be easily changed for other fonts. +\def\angleleft{$\langle$} +\def\angleright{$\rangle$} + % Count depth in font-changes, for error checks \newcount\fontdepth \fontdepth=0 % Fonts for short table of contents. -\setfont\shortcontrm{r12} -\setfont\shortcontbf{bx12} -\setfont\shortcontsl{sl12} +\setfont\shortcontrm\rmshape{12}{1000} +\setfont\shortcontbf\bxshape{12}{1000} +\setfont\shortcontsl\slshape{12}{1000} %% Add scribe-like font environments, plus @l for inline lisp (usually sans %% serif) and @ii for TeX italic @@ -1088,13 +1242,14 @@ where each line of input produces a line of output.} % \smartitalic{ARG} outputs arg in italics, followed by an italic correction % unless the following character is such as not to need one. \def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else\/\fi\fi\fi} -\def\smartitalic#1{{\sl #1}\futurelet\next\smartitalicx} +\def\smartslanted#1{{\sl #1}\futurelet\next\smartitalicx} +\def\smartitalic#1{{\it #1}\futurelet\next\smartitalicx} \let\i=\smartitalic -\let\var=\smartitalic -\let\dfn=\smartitalic +\let\var=\smartslanted +\let\dfn=\smartslanted \let\emph=\smartitalic -\let\cite=\smartitalic +\let\cite=\smartslanted \def\b#1{{\bf #1}} \let\strong=\b @@ -1111,11 +1266,22 @@ where each line of input produces a line of output.} \null } \let\ttfont=\t -\def\samp #1{`\tclose{#1}'\null} -\def\key #1{{\tt \nohyphenation \uppercase{#1}}\null} +\def\samp#1{`\tclose{#1}'\null} +\setfont\keyrm\rmshape{8}{1000} +\font\keysy=cmsy9 +\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% + \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% + \vbox{\hrule\kern-0.4pt + \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% + \kern-0.4pt\hrule}% + \kern-.06em\raise0.4pt\hbox{\angleright}}}} +% The old definition, with no lozenge: +%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} \def\ctrl #1{{\tt \rawbackslash \hat}#1} +% @file, @option are the same as @samp. \let\file=\samp +\let\option=\samp % @code is a modification of @t, % which makes spaces the same size as normal in the surrounding text. @@ -1141,29 +1307,32 @@ where each line of input produces a line of output.} } % We *must* turn on hyphenation at `-' and `_' in \code. -% Otherwise, it is too hard to avoid overful hboxes +% Otherwise, it is too hard to avoid overfull hboxes % in the Emacs manual, the Library manual, etc. % Unfortunately, TeX uses one parameter (\hyphenchar) to control % both hyphenation at - and hyphenation within words. % We must therefore turn them both off (\tclose does that) -% and arrange explicitly to hyphenate an a dash. +% and arrange explicitly to hyphenate at a dash. % -- rms. { -\catcode`\-=\active -\catcode`\_=\active -\global\def\code{\begingroup \catcode`\-=\active \let-\codedash \catcode`\_=\active \let_\codeunder \codex} -% The following is used by \doprintindex to insure that long function names -% wrap around. It is necessary for - and _ to be active before the index is -% read from the file, as \entry parses the arguments long before \code is -% ever called. -- mycroft -\global\def\indexbreaks{\catcode`\-=\active \let-\realdash \catcode`\_=\active \let_\realunder} + \catcode`\-=\active + \catcode`\_=\active + % + \global\def\code{\begingroup + \catcode`\-=\active \let-\codedash + \catcode`\_=\active \let_\codeunder + \codex + } + % + % If we end up with any active - characters when handling the index, + % just treat them as a normal -. + \global\def\indexbreaks{\catcode`\-=\active \let-\realdash} } \def\realdash{-} -\def\realunder{_} \def\codedash{-\discretionary{}{}{}} -\def\codeunder{\normalunderscore\discretionary{}{}{}} +\def\codeunder{\ifusingtt{\normalunderscore\discretionary{}{}{}}{\_}} \def\codex #1{\tclose{#1}\endgroup} %\let\exp=\tclose %Was temporary @@ -1171,26 +1340,114 @@ where each line of input produces a line of output.} % @kbd is like @code, except that if the argument is just one @key command, % then @kbd has no effect. +% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), +% `example' (@kbd uses ttsl only inside of @example and friends), +% or `code' (@kbd uses normal tty font always). +\def\kbdinputstyle{\parsearg\kbdinputstylexxx} +\def\kbdinputstylexxx#1{% + \def\arg{#1}% + \ifx\arg\worddistinct + \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% + \else\ifx\arg\wordexample + \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% + \else\ifx\arg\wordcode + \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% + \fi\fi\fi +} +\def\worddistinct{distinct} +\def\wordexample{example} +\def\wordcode{code} + +% Default is kbdinputdistinct. (Too much of a hassle to call the macro, +% the catcodes are wrong for parsearg to work.) +\gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl} + \def\xkey{\key} \def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% \ifx\one\xkey\ifx\threex\three \key{#2}% -\else\tclose{\look}\fi -\else\tclose{\look}\fi} +\else{\tclose{\kbdfont\look}}\fi +\else{\tclose{\kbdfont\look}}\fi} + +% For @url, @env, @command quotes seem unnecessary, so use \code. +\let\url=\code +\let\env=\code +\let\command=\code + +% @uref (abbreviation for `urlref') takes an optional (comma-separated) +% second argument specifying the text to display and an optional third +% arg as text to display instead of (rather than in addition to) the url +% itself. First (mandatory) arg is the url. Perhaps eventually put in +% a hypertex \special here. +% +\def\uref#1{\douref #1,,,\finish} +\def\douref#1,#2,#3,#4\finish{\begingroup + \unsepspaces + \pdfurl{#1}% + \setbox0 = \hbox{\ignorespaces #3}% + \ifdim\wd0 > 0pt + \unhbox0 % third arg given, show only that + \else + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0 > 0pt + \ifpdf + \unhbox0 % PDF: 2nd arg given, show only it + \else + \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url + \fi + \else + \code{#1}% only url given, so show it + \fi + \fi + \endlink +\endgroup} + +% rms does not like angle brackets --karl, 17may97. +% So now @email is just like @uref, unless we are pdf. +% +%\def\email#1{\angleleft{\tt #1}\angleright} +\ifpdf + \def\email#1{\doemail#1,,\finish} + \def\doemail#1,#2,#3\finish{\begingroup + \unsepspaces + \pdfurl{mailto:#1}% + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi + \endlink + \endgroup} +\else + \let\email=\uref +\fi + +% Check if we are currently using a typewriter font. Since all the +% Computer Modern typewriter fonts have zero interword stretch (and +% shrink), and it is reasonable to expect all typewriter fonts to have +% this property, we can check that font parameter. +% +\def\ifmonospace{\ifdim\fontdimen3\font=0pt } % Typeset a dimension, e.g., `in' or `pt'. The only reason for the -% argument is to make the input look right: @dmn{pt} instead of -% @dmn{}pt. +% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. % \def\dmn#1{\thinspace #1} \def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par} -\def\l#1{{\li #1}\null} % +% @l was never documented to mean ``switch to the Lisp font'', +% and it is not used as such in any manual I can find. We need it for +% Polish suppressed-l. --karl, 22sep96. +%\def\l#1{{\li #1}\null} + +% Explicit font changes: @r, @sc, undocumented @ii. +\def\r#1{{\rm #1}} % roman font +\def\sc#1{{\smallcaps#1}} % smallcaps font +\def\ii#1{{\it #1}} % italic font + +% @acronym downcases the argument and prints in smallcaps. +\def\acronym#1{{\smallcaps \lowercase{#1}}} + +% @pounds{} is a sterling sign. +\def\pounds{{\it\$}} -\def\r#1{{\rm #1}} % roman font -% Use of \lowercase was suggested. -\def\sc#1{{\smallcaps#1}} % smallcaps font -\def\ii#1{{\it #1}} % italic font \message{page headings,} @@ -1198,20 +1455,23 @@ where each line of input produces a line of output.} \newskip\titlepagebottomglue \titlepagebottomglue = 2pc % First the title page. Must do @settitle before @titlepage. -\def\titlefont#1{{\titlerm #1}} - \newif\ifseenauthor \newif\iffinishedtitlepage +% Do an implicit @contents or @shortcontents after @end titlepage if the +% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. +% +\newif\ifsetcontentsaftertitlepage + \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue +\newif\ifsetshortcontentsaftertitlepage + \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue + \def\shorttitlepage{\parsearg\shorttitlepagezzz} \def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% - \endgroup\page\hbox{}\page} + \endgroup\page\hbox{}\page} \def\titlepage{\begingroup \parindent=0pt \textfonts \let\subtitlerm=\tenrm -% I deinstalled the following change because \cmr12 is undefined. -% This change was not in the ChangeLog anyway. --rms. -% \let\subtitlerm=\cmr12 \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}% % \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines}% @@ -1221,10 +1481,10 @@ where each line of input produces a line of output.} % % Now you can print the title using @title. \def\title{\parsearg\titlezzz}% - \def\titlezzz##1{\leftline{\titlefont{##1}} - % print a rule at the page bottom also. - \finishedtitlepagefalse - \vskip4pt \hrule height 4pt width \hsize \vskip4pt}% + \def\titlezzz##1{\leftline{\titlefonts\rm ##1} + % print a rule at the page bottom also. + \finishedtitlepagefalse + \vskip4pt \hrule height 4pt width \hsize \vskip4pt}% % No rule at page bottom unless we print one at the top with @title. \finishedtitlepagetrue % @@ -1242,7 +1502,7 @@ where each line of input produces a line of output.} \let\oldpage = \page \def\page{% \iffinishedtitlepage\else - \finishtitlepage + \finishtitlepage \fi \oldpage \let\page = \oldpage @@ -1260,6 +1520,23 @@ where each line of input produces a line of output.} % after the title page, which we certainly don't want. \oldpage \endgroup + % + % If they want short, they certainly want long too. + \ifsetshortcontentsaftertitlepage + \shortcontents + \contents + \global\let\shortcontents = \relax + \global\let\contents = \relax + \fi + % + \ifsetcontentsaftertitlepage + \contents + \global\let\contents = \relax + \global\let\shortcontents = \relax + \fi + % + \ifpdf \pdfmakepagedesttrue \fi + % \HEADINGSon } @@ -1273,10 +1550,10 @@ where each line of input produces a line of output.} \let\thispage=\folio -\newtoks \evenheadline % Token sequence for heading line of even pages -\newtoks \oddheadline % Token sequence for heading line of odd pages -\newtoks \evenfootline % Token sequence for footing line of even pages -\newtoks \oddfootline % Token sequence for footing line of odd pages +\newtoks\evenheadline % headline on even pages +\newtoks\oddheadline % headline on odd pages +\newtoks\evenfootline % footline on even pages +\newtoks\oddfootline % footline on odd pages % Now make Tex use those variables \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline @@ -1310,10 +1587,7 @@ where each line of input produces a line of output.} \gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{% \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} -\gdef\everyheadingxxx #1{\everyheadingyyy #1@|@|@|@|\finish} -\gdef\everyheadingyyy #1@|#2@|#3@|#4\finish{% -\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}} -\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} +\gdef\everyheadingxxx#1{\oddheadingxxx{#1}\evenheadingxxx{#1}}% \gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish} \gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{% @@ -1321,23 +1595,27 @@ where each line of input produces a line of output.} \gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish} \gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{% -\global\oddfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% + % + % Leave some space for the footline. Hopefully ok to assume + % @evenfooting will not be used by itself. + \global\advance\pageheight by -\baselineskip + \global\advance\vsize by -\baselineskip +} -\gdef\everyfootingxxx #1{\everyfootingyyy #1@|@|@|@|\finish} -\gdef\everyfootingyyy #1@|#2@|#3@|#4\finish{% -\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}} -\global\oddfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} +\gdef\everyfootingxxx#1{\oddfootingxxx{#1}\evenfootingxxx{#1}} % }% unbind the catcode of @. -% @headings double turns headings on for double-sided printing. -% @headings single turns headings on for single-sided printing. -% @headings off turns them off. -% @headings on same as @headings double, retained for compatibility. -% @headings after turns on double-sided headings after this page. -% @headings doubleafter turns on double-sided headings after this page. +% @headings double turns headings on for double-sided printing. +% @headings single turns headings on for single-sided printing. +% @headings off turns them off. +% @headings on same as @headings double, retained for compatibility. +% @headings after turns on double-sided headings after this page. +% @headings doubleafter turns on double-sided headings after this page. % @headings singleafter turns on single-sided headings after this page. -% By default, they are off. +% By default, they are off at the start of a document, +% and turned `on' after @end titlepage. \def\headings #1 {\csname HEADINGS#1\endcsname} @@ -1351,22 +1629,24 @@ where each line of input produces a line of output.} % title on inside top of left hand pages, and page numbers on outside top % edge of all pages. \def\HEADINGSdouble{ -%\pagealignmacro \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chapoddpage } +\let\contentsalignmacro = \chappager + % For single-sided printing, chapter title goes across top left of page, % page number on top right. \def\HEADINGSsingle{ -%\pagealignmacro \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chappager } \def\HEADINGSon{\HEADINGSdouble} @@ -1377,6 +1657,7 @@ where each line of input produces a line of output.} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chapoddpage } \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} @@ -1385,42 +1666,28 @@ where each line of input produces a line of output.} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chappager } % Subroutines used in generating headings % Produces Day Month Year style of output. -\def\today{\number\day\space -\ifcase\month\or -January\or February\or March\or April\or May\or June\or -July\or August\or September\or October\or November\or December\fi -\space\number\year} - -% Use this if you want the Month Day, Year style of output. -%\def\today{\ifcase\month\or -%January\or February\or March\or April\or May\or June\or -%July\or August\or September\or October\or November\or December\fi -%\space\number\day, \number\year} - -% @settitle line... specifies the title of the document, for headings -% It generates no output of its own - -\def\thistitle{No Title} +\def\today{% + \number\day\space + \ifcase\month + \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr + \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug + \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec + \fi + \space\number\year} + +% @settitle line... specifies the title of the document, for headings. +% It generates no output of its own. +\def\thistitle{\putwordNoTitle} \def\settitle{\parsearg\settitlezzz} \def\settitlezzz #1{\gdef\thistitle{#1}} -\message{tables,} - -% @tabs -- simple alignment - -% These don't work. For one thing, \+ is defined as outer. -% So these macros cannot even be defined. - -%\def\tabs{\parsearg\tabszzz} -%\def\tabszzz #1{\settabs\+#1\cr} -%\def\tabline{\parsearg\tablinezzz} -%\def\tablinezzz #1{\+#1\cr} -%\def\&{&} +\message{tables,} % Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x). % default indentation of table text @@ -1440,7 +1707,7 @@ July\or August\or September\or October\or November\or December\fi \newif\ifitemxneedsnegativevskip -\def\itemxpar{\par\ifitemxneedsnegativevskip\vskip-\parskip\nobreak\fi} +\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} \def\internalBitem{\smallbreak \parsearg\itemzzz} \def\internalBitemx{\itemxpar \parsearg\itemzzz} @@ -1464,11 +1731,6 @@ July\or August\or September\or October\or November\or December\fi \itemindex{#1}% \nobreak % This prevents a break before @itemx. % - % Be sure we are not still in the middle of a paragraph. - %{\parskip = 0in - %\par - %}% - % % If the item text does not fit in the space we have, put it on a line % by itself, and do not allow a page break either before or after that % line. We do not start a paragraph here because then if the next @@ -1497,13 +1759,17 @@ July\or August\or September\or October\or November\or December\fi \itemxneedsnegativevskipfalse \else % The item text fits into the space. Start a paragraph, so that the - % following text (if any) will end up on the same line. Since that - % text will be indented by \tableindent, we make the item text be in - % a zero-width box. + % following text (if any) will end up on the same line. \noindent - \rlap{\hskip -\tableindent\box0}\ignorespaces% - \endgroup% - \itemxneedsnegativevskiptrue% + % Do this with kerns and \unhbox so that if there is a footnote in + % the item text, it can migrate to the main vertical list and + % eventually be printed. + \nobreak\kern-\tableindent + \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 + \unhbox0 + \nobreak\kern\dimen0 + \endgroup + \itemxneedsnegativevskiptrue \fi } @@ -1514,9 +1780,10 @@ July\or August\or September\or October\or November\or December\fi \def\xitem{\errmessage{@xitem while not in a table}} \def\xitemx{\errmessage{@xitemx while not in a table}} -%% Contains a kludge to get @end[description] to work +% Contains a kludge to get @end[description] to work. \def\description{\tablez{\dontindex}{1}{}{}{}{}} +% @table, @ftable, @vtable. \def\table{\begingroup\inENV\obeylines\obeyspaces\tablex} {\obeylines\obeyspaces% \gdef\tablex #1^^M{% @@ -1576,7 +1843,7 @@ July\or August\or September\or October\or November\or December\fi \def\itemize{\parsearg\itemizezzz} \def\itemizezzz #1{% - \begingroup % ended by the @end itemsize + \begingroup % ended by the @end itemize \itemizey {#1}{\Eitemize} } @@ -1682,186 +1949,617 @@ July\or August\or September\or October\or November\or December\fi }% } -% Call itemizey, adding a period to the first argument and supplying the -% common last two arguments. Also subtract one from the initial value in -% \itemno, since @item increments \itemno. +% Call itemizey, adding a period to the first argument and supplying the +% common last two arguments. Also subtract one from the initial value in +% \itemno, since @item increments \itemno. +% +\def\startenumeration#1{% + \advance\itemno by -1 + \itemizey{#1.}\Eenumerate\flushcr +} + +% @alphaenumerate and @capsenumerate are abbreviations for giving an arg +% to @enumerate. +% +\def\alphaenumerate{\enumerate{a}} +\def\capsenumerate{\enumerate{A}} +\def\Ealphaenumerate{\Eenumerate} +\def\Ecapsenumerate{\Eenumerate} + +% Definition of @item while inside @itemize. + +\def\itemizeitem{% +\advance\itemno by 1 +{\let\par=\endgraf \smallbreak}% +\ifhmode \errmessage{In hmode at itemizeitem}\fi +{\parskip=0in \hskip 0pt +\hbox to 0pt{\hss \itemcontents\hskip \itemmargin}% +\vadjust{\penalty 1200}}% +\flushcr} + +% @multitable macros +% Amy Hendrickson, 8/18/94, 3/6/96 +% +% @multitable ... @end multitable will make as many columns as desired. +% Contents of each column will wrap at width given in preamble. Width +% can be specified either with sample text given in a template line, +% or in percent of \hsize, the current width of text on page. + +% Table can continue over pages but will only break between lines. + +% To make preamble: +% +% Either define widths of columns in terms of percent of \hsize: +% @multitable @columnfractions .25 .3 .45 +% @item ... +% +% Numbers following @columnfractions are the percent of the total +% current hsize to be used for each column. You may use as many +% columns as desired. + + +% Or use a template: +% @multitable {Column 1 template} {Column 2 template} {Column 3 template} +% @item ... +% using the widest term desired in each column. +% +% For those who want to use more than one line's worth of words in +% the preamble, break the line within one argument and it +% will parse correctly, i.e., +% +% @multitable {Column 1 template} {Column 2 template} {Column 3 +% template} +% Not: +% @multitable {Column 1 template} {Column 2 template} +% {Column 3 template} + +% Each new table line starts with @item, each subsequent new column +% starts with @tab. Empty columns may be produced by supplying @tab's +% with nothing between them for as many times as empty columns are needed, +% ie, @tab@tab@tab will produce two empty columns. + +% @item, @tab, @multitable or @end multitable do not need to be on their +% own lines, but it will not hurt if they are. + +% Sample multitable: + +% @multitable {Column 1 template} {Column 2 template} {Column 3 template} +% @item first col stuff @tab second col stuff @tab third col +% @item +% first col stuff +% @tab +% second col stuff +% @tab +% third col +% @item first col stuff @tab second col stuff +% @tab Many paragraphs of text may be used in any column. +% +% They will wrap at the width determined by the template. +% @item@tab@tab This will be in third column. +% @end multitable + +% Default dimensions may be reset by user. +% @multitableparskip is vertical space between paragraphs in table. +% @multitableparindent is paragraph indent in table. +% @multitablecolmargin is horizontal space to be left between columns. +% @multitablelinespace is space to leave between table items, baseline +% to baseline. +% 0pt means it depends on current normal line spacing. +% +\newskip\multitableparskip +\newskip\multitableparindent +\newdimen\multitablecolspace +\newskip\multitablelinespace +\multitableparskip=0pt +\multitableparindent=6pt +\multitablecolspace=12pt +\multitablelinespace=0pt + +% Macros used to set up halign preamble: +% +\let\endsetuptable\relax +\def\xendsetuptable{\endsetuptable} +\let\columnfractions\relax +\def\xcolumnfractions{\columnfractions} +\newif\ifsetpercent + +% #1 is the part of the @columnfraction before the decimal point, which +% is presumably either 0 or the empty string (but we don't check, we +% just throw it away). #2 is the decimal part, which we use as the +% percent of \hsize for this column. +\def\pickupwholefraction#1.#2 {% + \global\advance\colcount by 1 + \expandafter\xdef\csname col\the\colcount\endcsname{.#2\hsize}% + \setuptable +} + +\newcount\colcount +\def\setuptable#1{% + \def\firstarg{#1}% + \ifx\firstarg\xendsetuptable + \let\go = \relax + \else + \ifx\firstarg\xcolumnfractions + \global\setpercenttrue + \else + \ifsetpercent + \let\go\pickupwholefraction + \else + \global\advance\colcount by 1 + \setbox0=\hbox{#1\unskip }% Add a normal word space as a separator; + % typically that is always in the input, anyway. + \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% + \fi + \fi + \ifx\go\pickupwholefraction + % Put the argument back for the \pickupwholefraction call, so + % we'll always have a period there to be parsed. + \def\go{\pickupwholefraction#1}% + \else + \let\go = \setuptable + \fi% + \fi + \go +} + +% This used to have \hskip1sp. But then the space in a template line is +% not enough. That is bad. So let's go back to just & until we +% encounter the problem it was intended to solve again. +% --karl, nathan@acm.org, 20apr99. +\def\tab{&} + +% @multitable ... @end multitable definitions: +% +\def\multitable{\parsearg\dotable} +\def\dotable#1{\bgroup + \vskip\parskip + \let\item\crcr + \tolerance=9500 + \hbadness=9500 + \setmultitablespacing + \parskip=\multitableparskip + \parindent=\multitableparindent + \overfullrule=0pt + \global\colcount=0 + \def\Emultitable{\global\setpercentfalse\cr\egroup\egroup}% + % + % To parse everything between @multitable and @item: + \setuptable#1 \endsetuptable + % + % \everycr will reset column counter, \colcount, at the end of + % each line. Every column entry will cause \colcount to advance by one. + % The table preamble + % looks at the current \colcount to find the correct column width. + \everycr{\noalign{% + % + % \filbreak%% keeps underfull box messages off when table breaks over pages. + % Maybe so, but it also creates really weird page breaks when the table + % breaks over pages. Wouldn't \vfil be better? Wait until the problem + % manifests itself, so it can be fixed for real --karl. + \global\colcount=0\relax}}% + % + % This preamble sets up a generic column definition, which will + % be used as many times as user calls for columns. + % \vtop will set a single line and will also let text wrap and + % continue for many paragraphs if desired. + \halign\bgroup&\global\advance\colcount by 1\relax + \multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname + % + % In order to keep entries from bumping into each other + % we will add a \leftskip of \multitablecolspace to all columns after + % the first one. + % + % If a template has been used, we will add \multitablecolspace + % to the width of each template entry. + % + % If the user has set preamble in terms of percent of \hsize we will + % use that dimension as the width of the column, and the \leftskip + % will keep entries from bumping into each other. Table will start at + % left margin and final column will justify at right margin. + % + % Make sure we don't inherit \rightskip from the outer environment. + \rightskip=0pt + \ifnum\colcount=1 + % The first column will be indented with the surrounding text. + \advance\hsize by\leftskip + \else + \ifsetpercent \else + % If user has not set preamble in terms of percent of \hsize + % we will advance \hsize by \multitablecolspace. + \advance\hsize by \multitablecolspace + \fi + % In either case we will make \leftskip=\multitablecolspace: + \leftskip=\multitablecolspace + \fi + % Ignoring space at the beginning and end avoids an occasional spurious + % blank line, when TeX decides to break the line at the space before the + % box from the multistrut, so the strut ends up on a line by itself. + % For example: + % @multitable @columnfractions .11 .89 + % @item @code{#} + % @tab Legal holiday which is valid in major parts of the whole country. + % Is automatically provided with highlighting sequences respectively marking + % characters. + \noindent\ignorespaces##\unskip\multistrut}\cr +} + +\def\setmultitablespacing{% test to see if user has set \multitablelinespace. +% If so, do nothing. If not, give it an appropriate dimension based on +% current baselineskip. +\ifdim\multitablelinespace=0pt +\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip +\global\advance\multitablelinespace by-\ht0 +%% strut to put in table in case some entry doesn't have descenders, +%% to keep lines equally spaced +\let\multistrut = \strut +\else +%% FIXME: what is \box0 supposed to be? +\gdef\multistrut{\vrule height\multitablelinespace depth\dp0 +width0pt\relax} \fi +%% Test to see if parskip is larger than space between lines of +%% table. If not, do nothing. +%% If so, set to same dimension as multitablelinespace. +\ifdim\multitableparskip>\multitablelinespace +\global\multitableparskip=\multitablelinespace +\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller + %% than skip between lines in the table. +\fi% +\ifdim\multitableparskip=0pt +\global\multitableparskip=\multitablelinespace +\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller + %% than skip between lines in the table. +\fi} + + +\message{conditionals,} +% Prevent errors for section commands. +% Used in @ignore and in failing conditionals. +\def\ignoresections{% + \let\chapter=\relax + \let\unnumbered=\relax + \let\top=\relax + \let\unnumberedsec=\relax + \let\unnumberedsection=\relax + \let\unnumberedsubsec=\relax + \let\unnumberedsubsection=\relax + \let\unnumberedsubsubsec=\relax + \let\unnumberedsubsubsection=\relax + \let\section=\relax + \let\subsec=\relax + \let\subsubsec=\relax + \let\subsection=\relax + \let\subsubsection=\relax + \let\appendix=\relax + \let\appendixsec=\relax + \let\appendixsection=\relax + \let\appendixsubsec=\relax + \let\appendixsubsection=\relax + \let\appendixsubsubsec=\relax + \let\appendixsubsubsection=\relax + \let\contents=\relax + \let\smallbook=\relax + \let\titlepage=\relax +} + +% Used in nested conditionals, where we have to parse the Texinfo source +% and so want to turn off most commands, in case they are used +% incorrectly. +% +\def\ignoremorecommands{% + \let\defcodeindex = \relax + \let\defcv = \relax + \let\deffn = \relax + \let\deffnx = \relax + \let\defindex = \relax + \let\defivar = \relax + \let\defmac = \relax + \let\defmethod = \relax + \let\defop = \relax + \let\defopt = \relax + \let\defspec = \relax + \let\deftp = \relax + \let\deftypefn = \relax + \let\deftypefun = \relax + \let\deftypeivar = \relax + \let\deftypeop = \relax + \let\deftypevar = \relax + \let\deftypevr = \relax + \let\defun = \relax + \let\defvar = \relax + \let\defvr = \relax + \let\ref = \relax + \let\xref = \relax + \let\printindex = \relax + \let\pxref = \relax + \let\settitle = \relax + \let\setchapternewpage = \relax + \let\setchapterstyle = \relax + \let\everyheading = \relax + \let\evenheading = \relax + \let\oddheading = \relax + \let\everyfooting = \relax + \let\evenfooting = \relax + \let\oddfooting = \relax + \let\headings = \relax + \let\include = \relax + \let\lowersections = \relax + \let\down = \relax + \let\raisesections = \relax + \let\up = \relax + \let\set = \relax + \let\clear = \relax + \let\item = \relax +} + +% Ignore @ignore ... @end ignore. +% +\def\ignore{\doignore{ignore}} + +% Ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, and @direntry text. +% +\def\ifinfo{\doignore{ifinfo}} +\def\ifhtml{\doignore{ifhtml}} +\def\ifnottex{\doignore{ifnottex}} +\def\html{\doignore{html}} +\def\menu{\doignore{menu}} +\def\direntry{\doignore{direntry}} + +% @dircategory CATEGORY -- specify a category of the dir file +% which this file should belong to. Ignore this in TeX. +\let\dircategory = \comment + +% Ignore text until a line `@end #1'. +% +\def\doignore#1{\begingroup + % Don't complain about control sequences we have declared \outer. + \ignoresections + % + % Define a command to swallow text until we reach `@end #1'. + % This @ is a catcode 12 token (that is the normal catcode of @ in + % this texinfo.tex file). We change the catcode of @ below to match. + \long\def\doignoretext##1@end #1{\enddoignore}% + % + % Make sure that spaces turn into tokens that match what \doignoretext wants. + \catcode32 = 10 + % + % Ignore braces, too, so mismatched braces don't cause trouble. + \catcode`\{ = 9 + \catcode`\} = 9 + % + % We must not have @c interpreted as a control sequence. + \catcode`\@ = 12 + % + % Make the letter c a comment character so that the rest of the line + % will be ignored. This way, the document can have (for example) + % @c @end ifinfo + % and the @end ifinfo will be properly ignored. + % (We've just changed @ to catcode 12.) + \catcode`\c = 14 + % + % And now expand that command. + \doignoretext +} + +% What we do to finish off ignored text. +% +\def\enddoignore{\endgroup\ignorespaces}% + +\newif\ifwarnedobs\warnedobsfalse +\def\obstexwarn{% + \ifwarnedobs\relax\else + % We need to warn folks that they may have trouble with TeX 3.0. + % This uses \immediate\write16 rather than \message to get newlines. + \immediate\write16{} + \immediate\write16{WARNING: for users of Unix TeX 3.0!} + \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).} + \immediate\write16{If you are running another version of TeX, relax.} + \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.} + \immediate\write16{ Then upgrade your TeX installation if you can.} + \immediate\write16{ (See ftp://ftp.gnu.org/pub/gnu/TeX.README.)} + \immediate\write16{If you are stuck with version 3.0, run the} + \immediate\write16{ script ``tex3patch'' from the Texinfo distribution} + \immediate\write16{ to use a workaround.} + \immediate\write16{} + \global\warnedobstrue + \fi +} + +% **In TeX 3.0, setting text in \nullfont hangs tex. For a +% workaround (which requires the file ``dummy.tfm'' to be installed), +% uncomment the following line: +%%%%%\font\nullfont=dummy\let\obstexwarn=\relax + +% Ignore text, except that we keep track of conditional commands for +% purposes of nesting, up to an `@end #1' command. +% +\def\nestedignore#1{% + \obstexwarn + % We must actually expand the ignored text to look for the @end + % command, so that nested ignore constructs work. Thus, we put the + % text into a \vbox and then do nothing with the result. To minimize + % the change of memory overflow, we follow the approach outlined on + % page 401 of the TeXbook: make the current font be a dummy font. + % + \setbox0 = \vbox\bgroup + % Don't complain about control sequences we have declared \outer. + \ignoresections + % + % Define `@end #1' to end the box, which will in turn undefine the + % @end command again. + \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}% + % + % We are going to be parsing Texinfo commands. Most cause no + % trouble when they are used incorrectly, but some commands do + % complicated argument parsing or otherwise get confused, so we + % undefine them. + % + % We can't do anything about stray @-signs, unfortunately; + % they'll produce `undefined control sequence' errors. + \ignoremorecommands + % + % Set the current font to be \nullfont, a TeX primitive, and define + % all the font commands to also use \nullfont. We don't use + % dummy.tfm, as suggested in the TeXbook, because not all sites + % might have that installed. Therefore, math mode will still + % produce output, but that should be an extremely small amount of + % stuff compared to the main input. + % + \nullfont + \let\tenrm=\nullfont \let\tenit=\nullfont \let\tensl=\nullfont + \let\tenbf=\nullfont \let\tentt=\nullfont \let\smallcaps=\nullfont + \let\tensf=\nullfont + % Similarly for index fonts (mostly for their use in smallexample). + \let\smallrm=\nullfont \let\smallit=\nullfont \let\smallsl=\nullfont + \let\smallbf=\nullfont \let\smalltt=\nullfont \let\smallsc=\nullfont + \let\smallsf=\nullfont + % + % Don't complain when characters are missing from the fonts. + \tracinglostchars = 0 + % + % Don't bother to do space factor calculations. + \frenchspacing + % + % Don't report underfull hboxes. + \hbadness = 10000 + % + % Do minimal line-breaking. + \pretolerance = 10000 + % + % Do not execute instructions in @tex + \def\tex{\doignore{tex}}% + % Do not execute macro definitions. + % `c' is a comment character, so the word `macro' will get cut off. + \def\macro{\doignore{ma}}% +} + +% @set VAR sets the variable VAR to an empty value. +% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. +% +% Since we want to separate VAR from REST-OF-LINE (which might be +% empty), we can't just use \parsearg; we have to insert a space of our +% own to delimit the rest of the line, and then take it out again if we +% didn't need it. Make sure the catcode of space is correct to avoid +% losing inside @example, for instance. +% +\def\set{\begingroup\catcode` =10 + \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR. + \parsearg\setxxx} +\def\setxxx#1{\setyyy#1 \endsetyyy} +\def\setyyy#1 #2\endsetyyy{% + \def\temp{#2}% + \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty + \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted. + \fi + \endgroup +} +% Can't use \xdef to pre-expand #2 and save some time, since \temp or +% \next or other control sequences that we've defined might get us into +% an infinite loop. Consider `@set foo @cite{bar}'. +\def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}} + +% @clear VAR clears (i.e., unsets) the variable VAR. +% +\def\clear{\parsearg\clearxxx} +\def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax} + +% @value{foo} gets the text saved in variable foo. +{ + \catcode`\_ = \active + % + % We might end up with active _ or - characters in the argument if + % we're called from @code, as @code{@value{foo-bar_}}. So \let any + % such active characters to their normal equivalents. + \gdef\value{\begingroup + \catcode`\-=12 \catcode`\_=12 + \indexbreaks \let_\normalunderscore + \valuexxx} +} +\def\valuexxx#1{\expandablevalue{#1}\endgroup} + +% We have this subroutine so that we can handle at least some @value's +% properly in indexes (we \let\value to this in \indexdummies). Ones +% whose names contain - or _ still won't work, but we can't do anything +% about that. The command has to be fully expandable, since the result +% winds up in the index file. This means that if the variable's value +% contains other Texinfo commands, it's almost certain it will fail +% (although perhaps we could fix that with sufficient work to do a +% one-level expansion on the result, instead of complete). +% +\def\expandablevalue#1{% + \expandafter\ifx\csname SET#1\endcsname\relax + {[No value for ``#1'']}% + \else + \csname SET#1\endcsname + \fi +} + +% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined +% with @set. +% +\def\ifset{\parsearg\ifsetxxx} +\def\ifsetxxx #1{% + \expandafter\ifx\csname SET#1\endcsname\relax + \expandafter\ifsetfail + \else + \expandafter\ifsetsucceed + \fi +} +\def\ifsetsucceed{\conditionalsucceed{ifset}} +\def\ifsetfail{\nestedignore{ifset}} +\defineunmatchedend{ifset} + +% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been +% defined with @set, or has been undefined with @clear. % -\def\startenumeration#1{% - \advance\itemno by -1 - \itemizey{#1.}\Eenumerate\flushcr +\def\ifclear{\parsearg\ifclearxxx} +\def\ifclearxxx #1{% + \expandafter\ifx\csname SET#1\endcsname\relax + \expandafter\ifclearsucceed + \else + \expandafter\ifclearfail + \fi } +\def\ifclearsucceed{\conditionalsucceed{ifclear}} +\def\ifclearfail{\nestedignore{ifclear}} +\defineunmatchedend{ifclear} -% @alphaenumerate and @capsenumerate are abbreviations for giving an arg -% to @enumerate. +% @iftex, @ifnothtml, @ifnotinfo always succeed; we read the text +% following, through the first @end iftex (etc.). Make `@end iftex' +% (etc.) valid only after an @iftex. % -\def\alphaenumerate{\enumerate{a}} -\def\capsenumerate{\enumerate{A}} -\def\Ealphaenumerate{\Eenumerate} -\def\Ecapsenumerate{\Eenumerate} - -% Definition of @item while inside @itemize. - -\def\itemizeitem{% -\advance\itemno by 1 -{\let\par=\endgraf \smallbreak}% -\ifhmode \errmessage{\in hmode at itemizeitem}\fi -{\parskip=0in \hskip 0pt -\hbox to 0pt{\hss \itemcontents\hskip \itemmargin}% -\vadjust{\penalty 1200}}% -\flushcr} +\def\iftex{\conditionalsucceed{iftex}} +\def\ifnothtml{\conditionalsucceed{ifnothtml}} +\def\ifnotinfo{\conditionalsucceed{ifnotinfo}} +\defineunmatchedend{iftex} +\defineunmatchedend{ifnothtml} +\defineunmatchedend{ifnotinfo} -% @multitable macros -% Amy Hendrickson, 8/18/94 +% We can't just want to start a group at @iftex (for example) and end it +% at @end iftex, since then @set commands inside the conditional have no +% effect (they'd get reverted at the end of the group). So we must +% define \Eiftex to redefine itself to be its previous value. (We can't +% just define it to fail again with an ``unmatched end'' error, since +% the @ifset might be nested.) % -% @multitable ... @endmultitable will make as many columns as desired. -% Contents of each column will wrap at width given in preamble. Width -% can be specified either with sample text given in a template line, -% or in percent of \hsize, the current width of text on page. - -% Table can continue over pages but will only break between lines. +\def\conditionalsucceed#1{% + \edef\temp{% + % Remember the current value of \E#1. + \let\nece{prevE#1} = \nece{E#1}% + % + % At the `@end #1', redefine \E#1 to be its previous value. + \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}% + }% + \temp +} -% To make preamble: -% -% Either define widths of columns in terms of percent of \hsize: -% @multitable @percentofhsize .2 .3 .5 -% @item ... +% We need to expand lots of \csname's, but we don't want to expand the +% control sequences after we've constructed them. % -% Numbers following @percentofhsize are the percent of the total -% current hsize to be used for each column. You may use as many -% columns as desired. - -% Or use a template: -% @multitable {Column 1 template} {Column 2 template} {Column 3 template} -% @item ... -% using the widest term desired in each column. - - -% Each new table line starts with @item, each subsequent new column -% starts with @tab. Empty columns may be produced by supplying @tab's -% with nothing between them for as many times as empty columns are needed, -% ie, @tab@tab@tab will produce two empty columns. - -% @item, @tab, @multicolumn or @endmulticolumn do not need to be on their -% own lines, but it will not hurt if they are. - -% Sample multitable: - -% @multitable {Column 1 template} {Column 2 template} {Column 3 template} -% @item first col stuff @tab second col stuff @tab third col -% @item -% first col stuff -% @tab -% second col stuff -% @tab -% third col -% @item first col stuff @tab second col stuff -% @tab Many paragraphs of text may be used in any column. -% -% They will wrap at the width determined by the template. -% @item@tab@tab This will be in third column. -% @endmultitable - -% Default dimensions may be reset by user. -% @intableparskip will set vertical space between paragraphs in table. -% @intableparindent will set paragraph indent in table. -% @spacebetweencols will set horizontal space to be left between columns. -% @spacebetweenlines will set vertical space to be left between lines. - -%%%% -% Dimensions - -\newdimen\intableparskip -\newdimen\intableparindent -\newdimen\spacebetweencols -\newdimen\spacebetweenlines -\intableparskip=0pt -\intableparindent=6pt -\spacebetweencols=12pt -\spacebetweenlines=12pt - -%%%% -% Macros used to set up halign preamble: -\let\endsetuptable\relax -\def\xendsetuptable{\endsetuptable} -\let\percentofhsize\relax -\def\xpercentofhsize{\percentofhsize} -\newif\ifsetpercent +\def\nece#1{\expandafter\noexpand\csname#1\endcsname} -\newcount\colcount -\def\setuptable#1{\def\firstarg{#1}% -\ifx\firstarg\xendsetuptable\let\go\relax% -\else - \ifx\firstarg\xpercentofhsize\global\setpercenttrue% - \else - \ifsetpercent - \if#1.\else% - \global\advance\colcount by1 % - \expandafter\xdef\csname col\the\colcount\endcsname{.#1\hsize}% - \fi - \else - \global\advance\colcount by1 - \setbox0=\hbox{#1}% - \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% - \fi% - \fi% - \let\go\setuptable% -\fi\go} -%%%% -% multitable syntax -\def\tab{&} +% @defininfoenclose. +\let\definfoenclose=\comment -%%%% -% @multitable ... @endmultitable definitions: - -\def\multitable#1\item{\bgroup -\let\item\cr -\tolerance=9500 -\hbadness=9500 -\parskip=\intableparskip -\parindent=\intableparindent -\overfullrule=0pt -\global\colcount=0\relax% -\def\Emultitable{\global\setpercentfalse\global\everycr{}\cr\egroup\egroup}% - % To parse everything between @multitable and @item : -\def\one{#1}\expandafter\setuptable\one\endsetuptable - % Need to reset this to 0 after \setuptable. -\global\colcount=0\relax% - % - % This preamble sets up a generic column definition, which will - % be used as many times as user calls for columns. - % \vtop will set a single line and will also let text wrap and - % continue for many paragraphs if desired. -\halign\bgroup&\global\advance\colcount by 1\relax% -\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname - % In order to keep entries from bumping into each other - % we will add a \leftskip of \spacebetweencols to all columns after - % the first one. - % If a template has been used, we will add \spacebetweencols - % to the width of each template entry. - % If user has set preamble in terms of percent of \hsize - % we will use that dimension as the width of the column, and - % the \leftskip will keep entries from bumping into each other. - % Table will start at left margin and final column will justify at - % right margin. -\ifnum\colcount=1 -\else - \ifsetpercent - \else - % If user has set preamble in terms of percent of \hsize - % we will advance \hsize by \spacebetweencols - \advance\hsize by \spacebetweencols - \fi - % In either case we will make \leftskip=\spacebetweencols: -\leftskip=\spacebetweencols -\fi -\noindent##}\cr% - % \everycr will reset column counter, \colcount, at the end of - % each line. Every column entry will cause \colcount to advance by one. - % The table preamble - % looks at the current \colcount to find the correct column width. -\global\everycr{\noalign{\nointerlineskip\vskip\spacebetweenlines -\filbreak%% keeps underfull box messages off when table breaks over pages. -\global\colcount=0\relax}}} \message{indexing,} % Index generation facilities @@ -1875,15 +2573,17 @@ July\or August\or September\or October\or November\or December\fi % It automatically defines \fooindex such that % \fooindex ...rest of line... puts an entry in the index foo. % It also defines \fooindfile to be the number of the output channel for -% the file that accumulates this index. The file's extension is foo. +% the file that accumulates this index. The file's extension is foo. % The name of an index should be no more than 2 characters long % for the sake of vms. - -\def\newindex #1{ -\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file -\openout \csname#1indfile\endcsname \jobname.#1 % Open the file -\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex -\noexpand\doindex {#1}} +% +\def\newindex#1{% + \iflinks + \expandafter\newwrite \csname#1indfile\endcsname + \openout \csname#1indfile\endcsname \jobname.#1 % Open the file + \fi + \expandafter\xdef\csname#1index\endcsname{% % Define @#1index + \noexpand\doindex{#1}} } % @defindex foo == \newindex{foo} @@ -1892,31 +2592,37 @@ July\or August\or September\or October\or November\or December\fi % Define @defcodeindex, like @defindex except put all entries in @code. -\def\newcodeindex #1{ -\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file -\openout \csname#1indfile\endcsname \jobname.#1 % Open the file -\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex -\noexpand\docodeindex {#1}} +\def\newcodeindex#1{% + \iflinks + \expandafter\newwrite \csname#1indfile\endcsname + \openout \csname#1indfile\endcsname \jobname.#1 + \fi + \expandafter\xdef\csname#1index\endcsname{% + \noexpand\docodeindex{#1}} } \def\defcodeindex{\parsearg\newcodeindex} % @synindex foo bar makes index foo feed into index bar. % Do this instead of @defindex foo if you don't want it as a separate index. -\def\synindex #1 #2 {% -\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname -\expandafter\let\csname#1indfile\endcsname=\synindexfoo -\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex -\noexpand\doindex {#2}}% +% The \closeout helps reduce unnecessary open files; the limit on the +% Acorn RISC OS is a mere 16 files. +\def\synindex#1 #2 {% + \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname + \expandafter\closeout\csname#1indfile\endcsname + \expandafter\let\csname#1indfile\endcsname=\synindexfoo + \expandafter\xdef\csname#1index\endcsname{% define \xxxindex + \noexpand\doindex{#2}}% } % @syncodeindex foo bar similar, but put all entries made for index foo % inside @code. -\def\syncodeindex #1 #2 {% -\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname -\expandafter\let\csname#1indfile\endcsname=\synindexfoo -\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex -\noexpand\docodeindex {#2}}% +\def\syncodeindex#1 #2 {% + \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname + \expandafter\closeout\csname#1indfile\endcsname + \expandafter\let\csname#1indfile\endcsname=\synindexfoo + \expandafter\xdef\csname#1index\endcsname{% define \xxxindex + \noexpand\docodeindex{#2}}% } % Define \doindex, the driver for all \fooindex macros. @@ -1937,6 +2643,7 @@ July\or August\or September\or October\or November\or December\fi \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} \def\indexdummies{% +\def\ { }% % Take care of the plain tex accent commands. \def\"{\realbackslash "}% \def\`{\realbackslash `}% @@ -1963,27 +2670,48 @@ July\or August\or September\or October\or November\or December\fi \def\L{\realbackslash L}% \def\ss{\realbackslash ss}% % Take care of texinfo commands likely to appear in an index entry. +% (Must be a way to avoid doing expansion at all, and thus not have to +% laboriously list every single command here.) +\def\@{@}% will be @@ when we switch to @ as escape char. +% Need these in case \tex is in effect and \{ is a \delimiter again. +% But can't use \lbracecmd and \rbracecmd because texindex assumes +% braces and backslashes are used only as delimiters. +\let\{ = \mylbrace +\let\} = \myrbrace \def\_{{\realbackslash _}}% \def\w{\realbackslash w }% \def\bf{\realbackslash bf }% -\def\rm{\realbackslash rm }% +%\def\rm{\realbackslash rm }% \def\sl{\realbackslash sl }% \def\sf{\realbackslash sf}% \def\tt{\realbackslash tt}% \def\gtr{\realbackslash gtr}% \def\less{\realbackslash less}% \def\hat{\realbackslash hat}% -\def\char{\realbackslash char}% \def\TeX{\realbackslash TeX}% \def\dots{\realbackslash dots }% -\def\copyright{\realbackslash copyright }% +\def\result{\realbackslash result}% +\def\equiv{\realbackslash equiv}% +\def\expansion{\realbackslash expansion}% +\def\print{\realbackslash print}% +\def\error{\realbackslash error}% +\def\point{\realbackslash point}% +\def\copyright{\realbackslash copyright}% \def\tclose##1{\realbackslash tclose {##1}}% \def\code##1{\realbackslash code {##1}}% +\def\uref##1{\realbackslash uref {##1}}% +\def\url##1{\realbackslash url {##1}}% +\def\env##1{\realbackslash env {##1}}% +\def\command##1{\realbackslash command {##1}}% +\def\option##1{\realbackslash option {##1}}% +\def\dotless##1{\realbackslash dotless {##1}}% \def\samp##1{\realbackslash samp {##1}}% -\def\t##1{\realbackslash r {##1}}% +\def\,##1{\realbackslash ,{##1}}% +\def\t##1{\realbackslash t {##1}}% \def\r##1{\realbackslash r {##1}}% \def\i##1{\realbackslash i {##1}}% \def\b##1{\realbackslash b {##1}}% +\def\sc##1{\realbackslash sc {##1}}% \def\cite##1{\realbackslash cite {##1}}% \def\key##1{\realbackslash key {##1}}% \def\file##1{\realbackslash file {##1}}% @@ -1991,7 +2719,16 @@ July\or August\or September\or October\or November\or December\fi \def\kbd##1{\realbackslash kbd {##1}}% \def\dfn##1{\realbackslash dfn {##1}}% \def\emph##1{\realbackslash emph {##1}}% +\def\acronym##1{\realbackslash acronym {##1}}% +% +% Handle some cases of @value -- where the variable name does not +% contain - or _, and the value does not contain any +% (non-fully-expandable) commands. +\let\value = \expandablevalue +% \unsepspaces +% Turn off macro expansion +\turnoffmacros } % If an index command is used in an @example environment, any spaces @@ -2008,6 +2745,7 @@ July\or August\or September\or October\or November\or December\fi \def\indexnofonts{% % Just ignore accents. +\let\,=\indexdummyfont \let\"=\indexdummyfont \let\`=\indexdummyfont \let\'=\indexdummyfont @@ -2020,6 +2758,7 @@ July\or August\or September\or October\or November\or December\fi \let\u=\indexdummyfont \let\v=\indexdummyfont \let\H=\indexdummyfont +\let\dotless=\indexdummyfont % Take care of the plain tex special European modified letters. \def\oe{oe}% \def\ae{ae}% @@ -2046,6 +2785,12 @@ July\or August\or September\or October\or November\or December\fi %\let\tt=\indexdummyfont \let\tclose=\indexdummyfont \let\code=\indexdummyfont +\let\url=\indexdummyfont +\let\uref=\indexdummyfont +\let\env=\indexdummyfont +\let\acronym=\indexdummyfont +\let\command=\indexdummyfont +\let\option=\indexdummyfont \let\file=\indexdummyfont \let\samp=\indexdummyfont \let\kbd=\indexdummyfont @@ -2053,6 +2798,7 @@ July\or August\or September\or October\or November\or December\fi \let\var=\indexdummyfont \let\TeX=\indexdummytex \let\dots=\indexdummydots +\def\@{@}% } % To define \realbackslash, we must make \ not be an escape. @@ -2060,57 +2806,102 @@ July\or August\or September\or October\or November\or December\fi % so we do not become unable to do a definition. {\catcode`\@=0 \catcode`\\=\other -@gdef@realbackslash{\}} + @gdef@realbackslash{\}} \let\indexbackslash=0 %overridden during \printindex. +\let\SETmarginindex=\relax % put index entries in margin (undocumented)? -\let\SETmarginindex=\relax %initialize! -% workhorse for all \fooindexes -% #1 is name of index, #2 is stuff to put there -\def\doind #1#2{% -% Put the index entry in the margin if desired. -\ifx\SETmarginindex\relax\else% -\insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}% -\fi% -{\count10=\lastpenalty % -{\indexdummies % Must do this here, since \bf, etc expand at this stage -\escapechar=`\\% -{\let\folio=0% Expand all macros now EXCEPT \folio -\def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now -% so it will be output as is; and it will print as backslash in the indx. -% -% Now process the index-string once, with all font commands turned off, -% to get the string to sort the index by. -{\indexnofonts -\xdef\temp1{#2}% -}% -% Now produce the complete index entry. We process the index-string again, -% this time with font commands expanded, to get what to print in the index. -\edef\temp{% -\write \csname#1indfile\endcsname{% -\realbackslash entry {\temp1}{\folio}{#2}}}% -\temp }% -}\penalty\count10}} - -\def\dosubind #1#2#3{% -{\count10=\lastpenalty % -{\indexdummies % Must do this here, since \bf, etc expand at this stage -\escapechar=`\\% -{\let\folio=0% -\def\rawbackslashxx{\indexbackslash}% -% -% Now process the index-string once, with all font commands turned off, -% to get the string to sort the index by. -{\indexnofonts -\xdef\temp1{#2 #3}% -}% -% Now produce the complete index entry. We process the index-string again, -% this time with font commands expanded, to get what to print in the index. -\edef\temp{% -\write \csname#1indfile\endcsname{% -\realbackslash entry {\temp1}{\folio}{#2}{#3}}}% -\temp }% -}\penalty\count10}} +% For \ifx comparisons. +\def\emptymacro{\empty} + +% Most index entries go through here, but \dosubind is the general case. +% +\def\doind#1#2{\dosubind{#1}{#2}\empty} + +% Workhorse for all \fooindexes. +% #1 is name of index, #2 is stuff to put there, #3 is subentry -- +% \empty if called from \doind, as we usually are. The main exception +% is with defuns, which call us directly. +% +\def\dosubind#1#2#3{% + % Put the index entry in the margin if desired. + \ifx\SETmarginindex\relax\else + \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}% + \fi + {% + \count255=\lastpenalty + {% + \indexdummies % Must do this here, since \bf, etc expand at this stage + \escapechar=`\\ + {% + \let\folio = 0% We will expand all macros now EXCEPT \folio. + \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now + % so it will be output as is; and it will print as backslash. + % + \def\thirdarg{#3}% + % + % If third arg is present, precede it with space in sort key. + \ifx\thirdarg\emptymacro + \let\subentry = \empty + \else + \def\subentry{ #3}% + \fi + % + % First process the index entry with all font commands turned + % off to get the string to sort by. + {\indexnofonts \xdef\indexsorttmp{#2\subentry}}% + % + % Now the real index entry with the fonts. + \toks0 = {#2}% + % + % If third (subentry) arg is present, add it to the index + % string. And include a space. + \ifx\thirdarg\emptymacro \else + \toks0 = \expandafter{\the\toks0 \space #3}% + \fi + % + % Set up the complete index entry, with both the sort key + % and the original text, including any font commands. We write + % three arguments to \entry to the .?? file, texindex reduces to + % two when writing the .??s sorted result. + \edef\temp{% + \write\csname#1indfile\endcsname{% + \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}% + }% + % + % If a skip is the last thing on the list now, preserve it + % by backing up by \lastskip, doing the \write, then inserting + % the skip again. Otherwise, the whatsit generated by the + % \write will make \lastskip zero. The result is that sequences + % like this: + % @end defun + % @tindex whatever + % @defun ... + % will have extra space inserted, because the \medbreak in the + % start of the @defun won't see the skip inserted by the @end of + % the previous defun. + % + % But don't do any of this if we're not in vertical mode. We + % don't want to do a \vskip and prematurely end a paragraph. + % + % Avoid page breaks due to these extra skips, too. + % + \iflinks + \ifvmode + \skip0 = \lastskip + \ifdim\lastskip = 0pt \else \nobreak\vskip-\lastskip \fi + \fi + % + \temp % do the write + % + % + \ifvmode \ifdim\skip0 = 0pt \else \nobreak\vskip\skip0 \fi \fi + \fi + }% + }% + \penalty\count255 + }% +} % The index entry written in the file actually looks like % \entry {sortstring}{page}{topic} @@ -2144,78 +2935,85 @@ July\or August\or September\or October\or November\or December\fi % Define the macros used in formatting output of the sorted index material. -% This is what you call to cause a particular index to get printed. -% Write -% @unnumbered Function Index -% @printindex fn - +% @printindex causes a particular index (the ??s file) to get printed. +% It does not print any chapter heading (usually an @unnumbered). +% \def\printindex{\parsearg\doprintindex} - -\def\doprintindex#1{% - \tex - \dobreak \chapheadingskip {10000} - \catcode`\%=\other\catcode`\&=\other\catcode`\#=\other - \catcode`\$=\other - \catcode`\~=\other - \indexbreaks +\def\doprintindex#1{\begingroup + \dobreak \chapheadingskip{10000}% % - % The following don't help, since the chars were translated - % when the raw index was written, and their fonts were discarded - % due to \indexnofonts. - %\catcode`\"=\active - %\catcode`\^=\active - %\catcode`\_=\active - %\catcode`\|=\active - %\catcode`\<=\active - %\catcode`\>=\active - % % - \def\indexbackslash{\rawbackslashxx} - \indexfonts\rm \tolerance=9500 \advance\baselineskip -1pt - \begindoublecolumns + \smallfonts \rm + \tolerance = 9500 + \indexbreaks % % See if the index file exists and is nonempty. + % Change catcode of @ here so that if the index file contains + % \initial {@} + % as its first line, TeX doesn't complain about mismatched braces + % (because it thinks @} is a control sequence). + \catcode`\@ = 11 \openin 1 \jobname.#1s \ifeof 1 % \enddoublecolumns gets confused if there is no text in the index, % and it loses the chapter title and the aux file entries for the % index. The easiest way to prevent this problem is to make sure % there is some text. - (Index is nonexistent) - \else + \putwordIndexNonexistent + \else % % If the index file exists but is empty, then \openin leaves \ifeof % false. We have to make TeX try to read something from the file, so % it can discover if there is anything in it. \read 1 to \temp \ifeof 1 - (Index is empty) + \putwordIndexIsEmpty \else + % Index files are almost Texinfo source, but we use \ as the escape + % character. It would be better to use @, but that's too big a change + % to make right now. + \def\indexbackslash{\rawbackslashxx}% + \catcode`\\ = 0 + \escapechar = `\\ + \begindoublecolumns \input \jobname.#1s + \enddoublecolumns \fi \fi \closein 1 - \enddoublecolumns - \Etex -} +\endgroup} % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. -% Same as \bigskipamount except no shrink. -% \balancecolumns gets confused if there is any shrink. -\newskip\initialskipamount \initialskipamount 12pt plus4pt - -\def\initial #1{% -{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt -\ifdim\lastskip<\initialskipamount -\removelastskip \penalty-200 \vskip \initialskipamount\fi -\line{\secbf#1\hfill}\kern 2pt\penalty10000}} +\def\initial#1{{% + % Some minor font changes for the special characters. + \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt + % + % Remove any glue we may have, we'll be inserting our own. + \removelastskip + % + % We like breaks before the index initials, so insert a bonus. + \penalty -300 + % + % Typeset the initial. Making this add up to a whole number of + % baselineskips increases the chance of the dots lining up from column + % to column. It still won't often be perfect, because of the stretch + % we need before each entry, but it's better. + % + % No shrink because it confuses \balancecolumns. + \vskip 1.67\baselineskip plus .5\baselineskip + \leftline{\secbf #1}% + \vskip .33\baselineskip plus .1\baselineskip + % + % Do our best not to break after the initial. + \nobreak +}} % This typesets a paragraph consisting of #1, dot leaders, and then #2 % flush to the right margin. It is used for index and table of contents % entries. The paragraph is indented by \leftskip. % -\def\entry #1#2{\begingroup +\def\entry#1#2{\begingroup % % Start a new paragraph if necessary, so our assignments below can't % affect previous text. @@ -2238,12 +3036,15 @@ July\or August\or September\or October\or November\or December\fi % % \hangafter is reset to 1 (which is the value we want) at the start % of each paragraph, so we need not do anything with that. - \hangindent=2em + \hangindent = 2em % % When the entry text needs to be broken, just fill out the first line % with blank space. \rightskip = 0pt plus1fil % + % A bit of stretch before each entry for the benefit of balancing columns. + \vskip 0pt plus1pt + % % Start a ``paragraph'' for the index entry so the line breaking % parameters we've set above will have an effect. \noindent @@ -2268,7 +3069,11 @@ July\or August\or September\or October\or November\or December\fi % The `\ ' here is removed by the implicit \unskip that TeX does as % part of (the primitive) \par. Without it, a spurious underfull % \hbox ensues. - \ #2% The page number ends the paragraph. + \ifpdf + \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. + \else + \ #2% The page number ends the paragraph. + \fi \fi% \par \endgroup} @@ -2287,34 +3092,51 @@ July\or August\or September\or October\or November\or December\fi \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par }} -%% Define two-column mode, which is used in indexes. -%% Adapted from the TeXbook, page 416. -\catcode `\@=11 +% Define two-column mode, which we use to typeset indexes. +% Adapted from the TeXbook, page 416, which is to say, +% the manmac.tex format used to print the TeXbook itself. +\catcode`\@=11 \newbox\partialpage - \newdimen\doublecolumnhsize -\def\begindoublecolumns{\begingroup +\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % Grab any single-column material above us. - \output = {\global\setbox\partialpage - =\vbox{\unvbox255\kern -\topskip \kern \baselineskip}}% - \eject + \output = {% + % + % Here is a possibility not foreseen in manmac: if we accumulate a + % whole lot of material, we might end up calling this \output + % routine twice in a row (see the doublecol-lose test, which is + % essentially a couple of indexes with @setchapternewpage off). In + % that case we just ship out what is in \partialpage with the normal + % output routine. Generally, \partialpage will be empty when this + % runs and this will be a no-op. See the indexspread.tex test case. + \ifvoid\partialpage \else + \onepageout{\pagecontents\partialpage}% + \fi + % + \global\setbox\partialpage = \vbox{% + % Unvbox the main output page. + \unvbox\PAGE + \kern-\topskip \kern\baselineskip + }% + }% + \eject % run that output routine to set \partialpage % - % Now switch to the double-column output routine. - \output={\doublecolumnout}% + % Use the double-column output routine for subsequent pages. + \output = {\doublecolumnout}% % % Change the page size parameters. We could do this once outside this % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 % format, but then we repeat the same computation. Repeating a couple % of assignments once per index is clearly meaningless for the - % execution time, so we may as well do it once. + % execution time, so we may as well do it in one place. % % First we halve the line length, less a little for the gutter between % the columns. We compute the gutter based on the line length, so it % changes automatically with the paper format. The magic constant - % below is chosen so that the gutter has the same value (well, +- < - % 1pt) as it did when we hard-coded it. + % below is chosen so that the gutter has the same value (well, +-<1pt) + % as it did when we hard-coded it. % % We put the result in a separate register, \doublecolumhsize, so we % can restore it in \pagesofar, after \hsize itself has (potentially) @@ -2327,109 +3149,140 @@ July\or August\or September\or October\or November\or December\fi % % Double the \vsize as well. (We don't need a separate register here, % since nobody clobbers \vsize.) + \advance\vsize by -\ht\partialpage \vsize = 2\vsize - \doublecolumnpagegoal } -\def\enddoublecolumns{\eject \endgroup \pagegoal=\vsize \unvbox\partialpage} - -\def\doublecolumnsplit{\splittopskip=\topskip \splitmaxdepth=\maxdepth - \global\dimen@=\pageheight \global\advance\dimen@ by-\ht\partialpage - \global\setbox1=\vsplit255 to\dimen@ \global\setbox0=\vbox{\unvbox1} - \global\setbox3=\vsplit255 to\dimen@ \global\setbox2=\vbox{\unvbox3} - \ifdim\ht0>\dimen@ \setbox255=\vbox{\unvbox0\unvbox2} \global\setbox255=\copy5 \fi - \ifdim\ht2>\dimen@ \setbox255=\vbox{\unvbox0\unvbox2} \global\setbox255=\copy5 \fi +% The double-column output routine for all double-column pages except +% the last. +% +\def\doublecolumnout{% + \splittopskip=\topskip \splitmaxdepth=\maxdepth + % Get the available space for the double columns -- the normal + % (undoubled) page height minus any material left over from the + % previous page. + \dimen@ = \vsize + \divide\dimen@ by 2 + % + % box0 will be the left-hand column, box2 the right. + \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ + \onepageout\pagesofar + \unvbox255 + \penalty\outputpenalty } -\def\doublecolumnpagegoal{% - \dimen@=\vsize \advance\dimen@ by-2\ht\partialpage \global\pagegoal=\dimen@ +\def\pagesofar{% + % Re-output the contents of the output page -- any previous material, + % followed by the two boxes we just split, in box0 and box2. + \unvbox\partialpage + % + \hsize = \doublecolumnhsize + \wd0=\hsize \wd2=\hsize + \hbox to\pagewidth{\box0\hfil\box2}% } -\def\pagesofar{\unvbox\partialpage % - \hsize=\doublecolumnhsize % have to restore this since output routine - \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}} -\def\doublecolumnout{% - \setbox5=\copy255 - {\vbadness=10000 \doublecolumnsplit} - \ifvbox255 - \setbox0=\vtop to\dimen@{\unvbox0} - \setbox2=\vtop to\dimen@{\unvbox2} - \onepageout\pagesofar \unvbox255 \penalty\outputpenalty - \else - \setbox0=\vbox{\unvbox5} - \ifvbox0 - \dimen@=\ht0 \advance\dimen@ by\topskip \advance\dimen@ by-\baselineskip - \divide\dimen@ by2 \splittopskip=\topskip \splitmaxdepth=\maxdepth - {\vbadness=10000 - \loop \global\setbox5=\copy0 - \setbox1=\vsplit5 to\dimen@ - \setbox3=\vsplit5 to\dimen@ - \ifvbox5 \global\advance\dimen@ by1pt \repeat - \setbox0=\vbox to\dimen@{\unvbox1} - \setbox2=\vbox to\dimen@{\unvbox3} - \global\setbox\partialpage=\vbox{\pagesofar} - \doublecolumnpagegoal - } - \fi - \fi +\def\enddoublecolumns{% + \output = {% + % Split the last of the double-column material. Leave it on the + % current page, no automatic page break. + \balancecolumns + % + % If we end up splitting too much material for the current page, + % though, there will be another page break right after this \output + % invocation ends. Having called \balancecolumns once, we do not + % want to call it again. Therefore, reset \output to its normal + % definition right away. (We hope \balancecolumns will never be + % called on to balance too much material, but if it is, this makes + % the output somewhat more palatable.) + \global\output = {\onepageout{\pagecontents\PAGE}}% + }% + \eject + \endgroup % started in \begindoublecolumns + % + % \pagegoal was set to the doubled \vsize above, since we restarted + % the current page. We're now back to normal single-column + % typesetting, so reset \pagegoal to the normal \vsize (after the + % \endgroup where \vsize got restored). + \pagegoal = \vsize +} +\def\balancecolumns{% + % Called at the end of the double column material. + \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. + \dimen@ = \ht0 + \advance\dimen@ by \topskip + \advance\dimen@ by-\baselineskip + \divide\dimen@ by 2 % target to split to + %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% + \splittopskip = \topskip + % Loop until we get a decent breakpoint. + {% + \vbadness = 10000 + \loop + \global\setbox3 = \copy0 + \global\setbox1 = \vsplit3 to \dimen@ + \ifdim\ht3>\dimen@ + \global\advance\dimen@ by 1pt + \repeat + }% + %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% + \setbox0=\vbox to\dimen@{\unvbox1}% + \setbox2=\vbox to\dimen@{\unvbox3}% + % + \pagesofar } +\catcode`\@ = \other + -\catcode `\@=\other \message{sectioning,} -% Define chapters, sections, etc. +% Chapters, sections, etc. -\newcount \chapno -\newcount \secno \secno=0 -\newcount \subsecno \subsecno=0 -\newcount \subsubsecno \subsubsecno=0 +\newcount\chapno +\newcount\secno \secno=0 +\newcount\subsecno \subsecno=0 +\newcount\subsubsecno \subsubsecno=0 % This counter is funny since it counts through charcodes of letters A, B, ... -\newcount \appendixno \appendixno = `\@ -\def\appendixletter{\char\the\appendixno} - -\newwrite \contentsfile -% This is called from \setfilename. -\def\opencontents{\openout \contentsfile = \jobname.toc} +\newcount\appendixno \appendixno = `\@ +% \def\appendixletter{\char\the\appendixno} +% We do the following for the sake of pdftex, which needs the actual +% letter in the expansion, not just typeset. +\def\appendixletter{% + \ifnum\appendixno=`A A% + \else\ifnum\appendixno=`B B% + \else\ifnum\appendixno=`C C% + \else\ifnum\appendixno=`D D% + \else\ifnum\appendixno=`E E% + \else\ifnum\appendixno=`F F% + \else\ifnum\appendixno=`G G% + \else\ifnum\appendixno=`H H% + \else\ifnum\appendixno=`I I% + \else\ifnum\appendixno=`J J% + \else\ifnum\appendixno=`K K% + \else\ifnum\appendixno=`L L% + \else\ifnum\appendixno=`M M% + \else\ifnum\appendixno=`N N% + \else\ifnum\appendixno=`O O% + \else\ifnum\appendixno=`P P% + \else\ifnum\appendixno=`Q Q% + \else\ifnum\appendixno=`R R% + \else\ifnum\appendixno=`S S% + \else\ifnum\appendixno=`T T% + \else\ifnum\appendixno=`U U% + \else\ifnum\appendixno=`V V% + \else\ifnum\appendixno=`W W% + \else\ifnum\appendixno=`X X% + \else\ifnum\appendixno=`Y Y% + \else\ifnum\appendixno=`Z Z% + % The \the is necessary, despite appearances, because \appendixletter is + % expanded while writing the .toc file. \char\appendixno is not + % expandable, thus it is written literally, thus all appendixes come out + % with the same letter (or @) in the toc without it. + \else\char\the\appendixno + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} % Each @chapter defines this as the name of the chapter. -% page headings and footings can use it. @section does likewise - -\def\thischapter{} \def\thissection{} -\def\seccheck#1{\if \pageno<0 % -\errmessage{@#1 not allowed after generating table of contents}\fi -% -} - -\def\chapternofonts{% -\let\rawbackslash=\relax% -\let\frenchspacing=\relax% -\def\result{\realbackslash result} -\def\equiv{\realbackslash equiv} -\def\expansion{\realbackslash expansion} -\def\print{\realbackslash print} -\def\TeX{\realbackslash TeX} -\def\dots{\realbackslash dots} -\def\copyright{\realbackslash copyright} -\def\tt{\realbackslash tt} -\def\bf{\realbackslash bf } -\def\w{\realbackslash w} -\def\less{\realbackslash less} -\def\gtr{\realbackslash gtr} -\def\hat{\realbackslash hat} -\def\char{\realbackslash char} -\def\tclose##1{\realbackslash tclose {##1}} -\def\code##1{\realbackslash code {##1}} -\def\samp##1{\realbackslash samp {##1}} -\def\r##1{\realbackslash r {##1}} -\def\b##1{\realbackslash b {##1}} -\def\key##1{\realbackslash key {##1}} -\def\file##1{\realbackslash file {##1}} -\def\kbd##1{\realbackslash kbd {##1}} -% These are redefined because @smartitalic wouldn't work inside xdef. -\def\i##1{\realbackslash i {##1}} -\def\cite##1{\realbackslash cite {##1}} -\def\var##1{\realbackslash var {##1}} -\def\emph##1{\realbackslash emph {##1}} -\def\dfn##1{\realbackslash dfn {##1}} -} +% page headings and footings can use it. @section does likewise. +\def\thischapter{} +\def\thissection{} \newcount\absseclevel % used to calculate proper heading level \newcount\secbase\secbase=0 % @raise/lowersections modify this count @@ -2501,53 +3354,59 @@ July\or August\or September\or October\or November\or December\fi \fi } - +% @chapter, @appendix, @unnumbered. \def\thischaptername{No Chapter Title} \outer\def\chapter{\parsearg\chapteryyy} \def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz -\def\chapterzzz #1{\seccheck{chapter}% +\def\chapterzzz #1{% \secno=0 \subsecno=0 \subsubsecno=0 -\global\advance \chapno by 1 \message{\putwordChapter \the\chapno}% +\global\advance \chapno by 1 \message{\putwordChapter\space \the\chapno}% \chapmacro {#1}{\the\chapno}% \gdef\thissection{#1}% \gdef\thischaptername{#1}% % We don't substitute the actual chapter name into \thischapter % because we don't want its macros evaluated now. \xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}% -{\chapternofonts% -\edef\temp{{\realbackslash chapentry {#1}{\the\chapno}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\donoderef % +\toks0 = {#1}% +\edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}% + {\the\chapno}}}% +\temp +\donoderef \global\let\section = \numberedsec \global\let\subsection = \numberedsubsec \global\let\subsubsection = \numberedsubsubsec -}} +} \outer\def\appendix{\parsearg\appendixyyy} \def\appendixyyy #1{\apphead0{#1}} % normally apphead0 calls appendixzzz -\def\appendixzzz #1{\seccheck{appendix}% +\def\appendixzzz #1{% \secno=0 \subsecno=0 \subsubsecno=0 -\global\advance \appendixno by 1 \message{Appendix \appendixletter}% +\global\advance \appendixno by 1 +\message{\putwordAppendix\space \appendixletter}% \chapmacro {#1}{\putwordAppendix{} \appendixletter}% \gdef\thissection{#1}% \gdef\thischaptername{#1}% \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}% -{\chapternofonts% -\edef\temp{{\realbackslash chapentry - {#1}{\putwordAppendix{} \appendixletter}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\appendixnoderef % +\toks0 = {#1}% +\edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}% + {\putwordAppendix{} \appendixletter}}}% +\temp +\appendixnoderef \global\let\section = \appendixsec \global\let\subsection = \appendixsubsec \global\let\subsubsection = \appendixsubsubsec -}} +} + +% @centerchap is like @unnumbered, but the heading is centered. +\outer\def\centerchap{\parsearg\centerchapyyy} +\def\centerchapyyy #1{{\let\unnumbchapmacro=\centerchapmacro \unnumberedyyy{#1}}} +% @top is like @unnumbered. \outer\def\top{\parsearg\unnumberedyyy} + \outer\def\unnumbered{\parsearg\unnumberedyyy} \def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz -\def\unnumberedzzz #1{\seccheck{unnumbered}% +\def\unnumberedzzz #1{% \secno=0 \subsecno=0 \subsubsecno=0 % % This used to be simply \message{#1}, but TeX fully expands the @@ -2559,146 +3418,139 @@ July\or August\or September\or October\or November\or December\fi % Anyway, we don't want the fully-expanded definition of @cite to appear % as a result of the \message, we just want `@cite' itself. We use % \the to achieve this: TeX expands \the only once, -% simply yielding the contents of the . +% simply yielding the contents of . (We also do this for +% the toc entries.) \toks0 = {#1}\message{(\the\toks0)}% % \unnumbchapmacro {#1}% \gdef\thischapter{#1}\gdef\thissection{#1}% -{\chapternofonts% -\edef\temp{{\realbackslash unnumbchapentry {#1}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\unnumbnoderef % +\toks0 = {#1}% +\edef\temp{\noexpand\writetocentry{\realbackslash unnumbchapentry{\the\toks0}}}% +\temp +\unnumbnoderef \global\let\section = \unnumberedsec \global\let\subsection = \unnumberedsubsec \global\let\subsubsection = \unnumberedsubsubsec -}} +} +% Sections. \outer\def\numberedsec{\parsearg\secyyy} \def\secyyy #1{\numhead1{#1}} % normally calls seczzz -\def\seczzz #1{\seccheck{section}% +\def\seczzz #1{% \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 % \gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}% -{\chapternofonts% -\edef\temp{{\realbackslash secentry % -{#1}{\the\chapno}{\the\secno}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\donoderef % -\penalty 10000 % -}} +\toks0 = {#1}% +\edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}% + {\the\chapno}{\the\secno}}}% +\temp +\donoderef +\nobreak +} \outer\def\appendixsection{\parsearg\appendixsecyyy} \outer\def\appendixsec{\parsearg\appendixsecyyy} \def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz -\def\appendixsectionzzz #1{\seccheck{appendixsection}% +\def\appendixsectionzzz #1{% \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 % \gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}% -{\chapternofonts% -\edef\temp{{\realbackslash secentry % -{#1}{\appendixletter}{\the\secno}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\appendixnoderef % -\penalty 10000 % -}} +\toks0 = {#1}% +\edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}% + {\appendixletter}{\the\secno}}}% +\temp +\appendixnoderef +\nobreak +} \outer\def\unnumberedsec{\parsearg\unnumberedsecyyy} \def\unnumberedsecyyy #1{\unnmhead1{#1}} % normally calls unnumberedseczzz -\def\unnumberedseczzz #1{\seccheck{unnumberedsec}% +\def\unnumberedseczzz #1{% \plainsecheading {#1}\gdef\thissection{#1}% -{\chapternofonts% -\edef\temp{{\realbackslash unnumbsecentry{#1}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\unnumbnoderef % -\penalty 10000 % -}} +\toks0 = {#1}% +\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsecentry{\the\toks0}}}% +\temp +\unnumbnoderef +\nobreak +} +% Subsections. \outer\def\numberedsubsec{\parsearg\numberedsubsecyyy} \def\numberedsubsecyyy #1{\numhead2{#1}} % normally calls numberedsubseczzz -\def\numberedsubseczzz #1{\seccheck{subsection}% +\def\numberedsubseczzz #1{% \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 % \subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}% -{\chapternofonts% -\edef\temp{{\realbackslash subsecentry % -{#1}{\the\chapno}{\the\secno}{\the\subsecno}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\donoderef % -\penalty 10000 % -}} +\toks0 = {#1}% +\edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}% + {\the\chapno}{\the\secno}{\the\subsecno}}}% +\temp +\donoderef +\nobreak +} \outer\def\appendixsubsec{\parsearg\appendixsubsecyyy} \def\appendixsubsecyyy #1{\apphead2{#1}} % normally calls appendixsubseczzz -\def\appendixsubseczzz #1{\seccheck{appendixsubsec}% +\def\appendixsubseczzz #1{% \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 % \subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}% -{\chapternofonts% -\edef\temp{{\realbackslash subsecentry % -{#1}{\appendixletter}{\the\secno}{\the\subsecno}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\appendixnoderef % -\penalty 10000 % -}} +\toks0 = {#1}% +\edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}% + {\appendixletter}{\the\secno}{\the\subsecno}}}% +\temp +\appendixnoderef +\nobreak +} \outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy} \def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz -\def\unnumberedsubseczzz #1{\seccheck{unnumberedsubsec}% -\plainsecheading {#1}\gdef\thissection{#1}% -{\chapternofonts% -\edef\temp{{\realbackslash unnumbsubsecentry{#1}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\unnumbnoderef % -\penalty 10000 % -}} +\def\unnumberedsubseczzz #1{% +\plainsubsecheading {#1}\gdef\thissection{#1}% +\toks0 = {#1}% +\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsecentry% + {\the\toks0}}}% +\temp +\unnumbnoderef +\nobreak +} +% Subsubsections. \outer\def\numberedsubsubsec{\parsearg\numberedsubsubsecyyy} \def\numberedsubsubsecyyy #1{\numhead3{#1}} % normally numberedsubsubseczzz -\def\numberedsubsubseczzz #1{\seccheck{subsubsection}% +\def\numberedsubsubseczzz #1{% \gdef\thissection{#1}\global\advance \subsubsecno by 1 % \subsubsecheading {#1} {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}% -{\chapternofonts% -\edef\temp{{\realbackslash subsubsecentry % - {#1} - {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno} - {\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\donoderef % -\penalty 10000 % -}} +\toks0 = {#1}% +\edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}% + {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}% +\temp +\donoderef +\nobreak +} \outer\def\appendixsubsubsec{\parsearg\appendixsubsubsecyyy} \def\appendixsubsubsecyyy #1{\apphead3{#1}} % normally appendixsubsubseczzz -\def\appendixsubsubseczzz #1{\seccheck{appendixsubsubsec}% +\def\appendixsubsubseczzz #1{% \gdef\thissection{#1}\global\advance \subsubsecno by 1 % \subsubsecheading {#1} {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}% -{\chapternofonts% -\edef\temp{{\realbackslash subsubsecentry{#1}% - {\appendixletter} - {\the\secno}{\the\subsecno}{\the\subsubsecno}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\appendixnoderef % -\penalty 10000 % -}} +\toks0 = {#1}% +\edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}% + {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}% +\temp +\appendixnoderef +\nobreak +} \outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy} \def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz -\def\unnumberedsubsubseczzz #1{\seccheck{unnumberedsubsubsec}% -\plainsecheading {#1}\gdef\thissection{#1}% -{\chapternofonts% -\edef\temp{{\realbackslash unnumbsubsubsecentry{#1}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\unnumbnoderef % -\penalty 10000 % -}} +\def\unnumberedsubsubseczzz #1{% +\plainsubsubsecheading {#1}\gdef\thissection{#1}% +\toks0 = {#1}% +\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsubsecentry% + {\the\toks0}}}% +\temp +\unnumbnoderef +\nobreak +} % These are variants which are not "outer", so they can appear in @ifinfo. % Actually, they should now be obsolete; ordinary section commands should work. @@ -2727,12 +3579,11 @@ July\or August\or September\or October\or November\or December\fi % Define @majorheading, @heading and @subheading -% NOTE on use of \vbox for chapter headings, section headings, and -% such: -% 1) We use \vbox rather than the earlier \line to permit -% overlong headings to fold. -% 2) \hyphenpenalty is set to 10000 because hyphenation in a -% heading is obnoxious; this forbids it. +% NOTE on use of \vbox for chapter headings, section headings, and such: +% 1) We use \vbox rather than the earlier \line to permit +% overlong headings to fold. +% 2) \hyphenpenalty is set to 10000 because hyphenation in a +% heading is obnoxious; this forbids it. % 3) Likewise, headings look best if no \parindent is used, and % if justification is not attempted. Hence \raggedright. @@ -2750,11 +3601,10 @@ July\or August\or September\or October\or November\or December\fi \parindent=0pt\raggedright \rm #1\hfill}}\bigskip \par\penalty 200} -\def\heading{\parsearg\secheadingi} - -\def\subheading{\parsearg\subsecheadingi} - -\def\subsubheading{\parsearg\subsubsecheadingi} +% @heading, @subheading, @subsubheading. +\def\heading{\parsearg\plainsecheading} +\def\subheading{\parsearg\plainsubsecheading} +\def\subsubheading{\parsearg\plainsubsubsecheading} % These macros generate a chapter, section, etc. heading only % (including whitespace, linebreaking, etc. around it), @@ -2768,7 +3618,7 @@ July\or August\or September\or October\or November\or December\fi %%% Define plain chapter starts, and page on/off switching for it % Parameter controlling skip before chapter headings (if needed) -\newskip \chapheadingskip \chapheadingskip = 30pt plus 8pt minus 4pt +\newskip\chapheadingskip \def\chapbreak{\dobreak \chapheadingskip {-4000}} \def\chappager{\par\vfill\supereject} @@ -2776,16 +3626,19 @@ July\or August\or September\or October\or November\or December\fi \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} -\def\CHAPPAGoff{ +\def\CHAPPAGoff{% +\global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chapbreak \global\let\pagealignmacro=\chappager} -\def\CHAPPAGon{ +\def\CHAPPAGon{% +\global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chappager \global\let\pagealignmacro=\chappager \global\def\HEADINGSon{\HEADINGSsingle}} \def\CHAPPAGodd{ +\global\let\contentsalignmacro = \chapoddpage \global\let\pchapsepmacro=\chapoddpage \global\let\pagealignmacro=\chapoddpage \global\def\HEADINGSon{\HEADINGSdouble}} @@ -2794,31 +3647,45 @@ July\or August\or September\or October\or November\or December\fi \def\CHAPFplain{ \global\let\chapmacro=\chfplain -\global\let\unnumbchapmacro=\unnchfplain} +\global\let\unnumbchapmacro=\unnchfplain +\global\let\centerchapmacro=\centerchfplain} -\def\chfplain #1#2{% +% Plain chapter opening. +% #1 is the text, #2 the chapter number or empty if unnumbered. +\def\chfplain#1#2{% \pchapsepmacro {% - \chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #2\enspace #1}% + \chapfonts \rm + \def\chapnum{#2}% + \setbox0 = \hbox{#2\ifx\chapnum\empty\else\enspace\fi}% + \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright + \hangindent = \wd0 \centerparametersmaybe + \unhbox0 #1\par}% }% - \bigskip - \penalty5000 + \nobreak\bigskip % no page break after a chapter title + \nobreak } -\def\unnchfplain #1{% -\pchapsepmacro % -{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}\bigskip \par\penalty 10000 % -} +% Plain opening for unnumbered. +\def\unnchfplain#1{\chfplain{#1}{}} + +% @centerchap -- centered and unnumbered. +\let\centerparametersmaybe = \relax +\def\centerchfplain#1{{% + \def\centerparametersmaybe{% + \advance\rightskip by 3\rightskip + \leftskip = \rightskip + \parfillskip = 0pt + }% + \chfplain{#1}{}% +}} + \CHAPFplain % The default \def\unnchfopen #1{% \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt\raggedright - \rm #1\hfill}}\bigskip \par\penalty 10000 % + \rm #1\hfill}}\bigskip \par\nobreak } \def\chfopen #1#2{\chapoddpage {\chapfonts @@ -2826,91 +3693,133 @@ July\or August\or September\or October\or November\or December\fi \par\penalty 5000 % } +\def\centerchfopen #1{% +\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 + \parindent=0pt + \hfill {\rm #1}\hfill}}\bigskip \par\nobreak +} + \def\CHAPFopen{ \global\let\chapmacro=\chfopen -\global\let\unnumbchapmacro=\unnchfopen} +\global\let\unnumbchapmacro=\unnchfopen +\global\let\centerchapmacro=\centerchfopen} -% Parameter controlling skip before section headings. -\newskip \subsecheadingskip \subsecheadingskip = 17pt plus 8pt minus 4pt +% Section titles. +\newskip\secheadingskip +\def\secheadingbreak{\dobreak \secheadingskip {-1000}} +\def\secheading#1#2#3{\sectionheading{sec}{#2.#3}{#1}} +\def\plainsecheading#1{\sectionheading{sec}{}{#1}} + +% Subsection titles. +\newskip \subsecheadingskip \def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}} +\def\subsecheading#1#2#3#4{\sectionheading{subsec}{#2.#3.#4}{#1}} +\def\plainsubsecheading#1{\sectionheading{subsec}{}{#1}} -\newskip \secheadingskip \secheadingskip = 21pt plus 8pt minus 4pt -\def\secheadingbreak{\dobreak \secheadingskip {-1000}} +% Subsubsection titles. +\let\subsubsecheadingskip = \subsecheadingskip +\let\subsubsecheadingbreak = \subsecheadingbreak +\def\subsubsecheading#1#2#3#4#5{\sectionheading{subsubsec}{#2.#3.#4.#5}{#1}} +\def\plainsubsubsecheading#1{\sectionheading{subsubsec}{}{#1}} -% @paragraphindent is defined for the Info formatting commands only. -\let\paragraphindent=\comment - -% Section fonts are the base font at magstep2, which produces -% a size a bit more than 14 points in the default situation. - -\def\secheading #1#2#3{\secheadingi {#2.#3\enspace #1}} -\def\plainsecheading #1{\secheadingi {#1}} -\def\secheadingi #1{{\advance \secheadingskip by \parskip % -\secheadingbreak}% -{\secfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}% -\ifdim \parskip<10pt \kern 10pt\kern -\parskip\fi \penalty 10000 } - - -% Subsection fonts are the base font at magstep1, -% which produces a size of 12 points. - -\def\subsecheading #1#2#3#4{\subsecheadingi {#2.#3.#4\enspace #1}} -\def\subsecheadingi #1{{\advance \subsecheadingskip by \parskip % -\subsecheadingbreak}% -{\subsecfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}% -\ifdim \parskip<10pt \kern 10pt\kern -\parskip\fi \penalty 10000 } - -\def\subsubsecfonts{\subsecfonts} % Maybe this should change: - % Perhaps make sssec fonts scaled - % magstep half -\def\subsubsecheading #1#2#3#4#5{\subsubsecheadingi {#2.#3.#4.#5\enspace #1}} -\def\subsubsecheadingi #1{{\advance \subsecheadingskip by \parskip % -\subsecheadingbreak}% -{\subsubsecfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}% -\ifdim \parskip<10pt \kern 10pt\kern -\parskip\fi \penalty 10000} + +% Print any size section title. +% +% #1 is the section type (sec/subsec/subsubsec), #2 is the section +% number (maybe empty), #3 the text. +\def\sectionheading#1#2#3{% + {% + \expandafter\advance\csname #1headingskip\endcsname by \parskip + \csname #1headingbreak\endcsname + }% + {% + % Switch to the right set of fonts. + \csname #1fonts\endcsname \rm + % + % Only insert the separating space if we have a section number. + \def\secnum{#2}% + \setbox0 = \hbox{#2\ifx\secnum\empty\else\enspace\fi}% + % + \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright + \hangindent = \wd0 % zero if no section number + \unhbox0 #3}% + }% + \ifdim\parskip<10pt \nobreak\kern10pt\nobreak\kern-\parskip\fi \nobreak +} -\message{toc printing,} +\message{toc,} +% Table of contents. +\newwrite\tocfile -% Finish up the main text and prepare to read what we've written -% to \contentsfile. +% Write an entry to the toc file, opening it if necessary. +% Called from @chapter, etc. We supply {\folio} at the end of the +% argument, which will end up as the last argument to the \...entry macro. +% +% We open the .toc file here instead of at @setfilename or any other +% given time so that @contents can be put in the document anywhere. +% +\newif\iftocfileopened +\def\writetocentry#1{% + \iftocfileopened\else + \immediate\openout\tocfile = \jobname.toc + \global\tocfileopenedtrue + \fi + \iflinks \write\tocfile{#1{\folio}}\fi +} \newskip\contentsrightmargin \contentsrightmargin=1in +\newcount\savepageno +\newcount\lastnegativepageno \lastnegativepageno = -1 + +% Finish up the main text and prepare to read what we've written +% to \tocfile. +% \def\startcontents#1{% - \pagealignmacro - \immediate\closeout \contentsfile - \ifnum \pageno>0 - \pageno = -1 % Request roman numbered pages. - \fi + % If @setchapternewpage on, and @headings double, the contents should + % start on an odd page, unlike chapters. Thus, we maintain + % \contentsalignmacro in parallel with \pagealignmacro. + % From: Torbjorn Granlund + \contentsalignmacro + \immediate\closeout\tocfile + % % Don't need to put `Contents' or `Short Contents' in the headline. % It is abundantly clear what they are. \unnumbchapmacro{#1}\def\thischapter{}% - \begingroup % Set up to handle contents files properly. + \savepageno = \pageno + \begingroup % Set up to handle contents files properly. \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11 - \catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi + % We can't do this, because then an actual ^ in a section + % title fails, e.g., @chapter ^ -- exponentiation. --karl, 9jul97. + %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi \raggedbottom % Worry more about breakpoints than the bottom. \advance\hsize by -\contentsrightmargin % Don't use the full line length. + % + % Roman numerals for page numbers. + \ifnum \pageno>0 \pageno = \lastnegativepageno \fi } % Normal (long) toc. -\outer\def\contents{% - \startcontents{\putwordTableofContents}% - \input \jobname.toc +\def\contents{% + \startcontents{\putwordTOC}% + \openin 1 \jobname.toc + \ifeof 1 \else + \closein 1 + \input \jobname.toc + \fi + \vfill \eject + \contentsalignmacro % in case @setchapternewpage odd is in effect + \pdfmakeoutlines \endgroup - \vfill \eject + \lastnegativepageno = \pageno + \pageno = \savepageno } % And just the chapters. -\outer\def\summarycontents{% - \startcontents{\putwordShortContents}% +\def\summarycontents{% + \startcontents{\putwordShortTOC}% % \let\chapentry = \shortchapentry \let\unnumbchapentry = \shortunnumberedentry @@ -2918,6 +3827,7 @@ July\or August\or September\or October\or November\or December\fi \secfonts \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl \rm + \hyphenpenalty = 10000 \advance\baselineskip by 1pt % Open it up a little. \def\secentry ##1##2##3##4{} \def\unnumbsecentry ##1##2{} @@ -2925,12 +3835,23 @@ July\or August\or September\or October\or November\or December\fi \def\unnumbsubsecentry ##1##2{} \def\subsubsecentry ##1##2##3##4##5##6{} \def\unnumbsubsubsecentry ##1##2{} - \input \jobname.toc + \openin 1 \jobname.toc + \ifeof 1 \else + \closein 1 + \input \jobname.toc + \fi + \vfill \eject + \contentsalignmacro % in case @setchapternewpage odd is in effect \endgroup - \vfill \eject + \lastnegativepageno = \pageno + \pageno = \savepageno } \let\shortcontents = \summarycontents +\ifpdf + \pdfcatalog{/PageMode /UseOutlines}% +\fi + % These macros generate individual entries in the table of contents. % The first argument is the chapter or section name. % The last argument is the page number. @@ -2941,7 +3862,7 @@ July\or August\or September\or October\or November\or December\fi % See comments in \dochapentry re vbox and related settings \def\shortchapentry#1#2#3{% - \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno{#3}}% + \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#3\egroup}% } % Typeset the label for a chapter or appendix for the short contents. @@ -2949,10 +3870,14 @@ July\or August\or September\or October\or November\or December\fi % We could simplify the code here by writing out an \appendixentry % command in the toc file for appendices, instead of using \chapentry % for both, but it doesn't seem worth it. -\setbox0 = \hbox{\shortcontrm \putwordAppendix } -\newdimen\shortappendixwidth \shortappendixwidth = \wd0 - +% +\newdimen\shortappendixwidth +% \def\shortchaplabel#1{% + % Compute width of word "Appendix", may change with language. + \setbox0 = \hbox{\shortcontrm \putwordAppendix}% + \shortappendixwidth = \wd0 + % % We typeset #1 in a box of constant width, regardless of the text of % #1, so the chapter titles will come out aligned. \setbox0 = \hbox{#1}% @@ -2961,13 +3886,13 @@ July\or August\or September\or October\or November\or December\fi % This space should be plenty, since a single number is .5em, and the % widest letter (M) is 1em, at least in the Computer Modern fonts. % (This space doesn't include the extra space that gets added after - % the label; that gets put in in \shortchapentry above.) + % the label; that gets put in by \shortchapentry above.) \advance\dimen0 by 1.1em \hbox to \dimen0{#1\hfil}% } \def\unnumbchapentry#1#2{\dochapentry{#1}{#2}} -\def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno{#2}}} +\def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno\bgroup#2\egroup}} % Sections. \def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}} @@ -2982,48 +3907,48 @@ July\or August\or September\or October\or November\or December\fi \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}} \def\unnumbsubsubsecentry#1#2{\dosubsubsecentry{#1}{#2}} - % This parameter controls the indentation of the various levels. \newdimen\tocindent \tocindent = 3pc % Now for the actual typesetting. In all these, #1 is the text and #2 is the % page number. % -% If the toc has to be broken over pages, we would want to be at chapters +% If the toc has to be broken over pages, we want it to be at chapters % if at all possible; hence the \penalty. \def\dochapentry#1#2{% - \penalty-300 \vskip\baselineskip + \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip \begingroup \chapentryfonts - \tocentry{#1}{\dopageno{#2}}% + \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup - \nobreak\vskip .25\baselineskip + \nobreak\vskip .25\baselineskip plus.1\baselineskip } \def\dosecentry#1#2{\begingroup \secentryfonts \leftskip=\tocindent - \tocentry{#1}{\dopageno{#2}}% + \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsecentry#1#2{\begingroup \subsecentryfonts \leftskip=2\tocindent - \tocentry{#1}{\dopageno{#2}}% + \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsubsecentry#1#2{\begingroup \subsubsecentryfonts \leftskip=3\tocindent - \tocentry{#1}{\dopageno{#2}}% + \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} % Final typesetting of a toc entry; we use the same \entry macro as for % the index entries, but we want to suppress hyphenation here. (We % can't do that in the \entry macro, since index entries might consist % of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.) -% -% \turnoffactive is for the sake of @" used for umlauts. \def\tocentry#1#2{\begingroup - \hyphenpenalty = 10000 - \entry{\turnoffactive #1}{\turnoffactive #2}% + \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks + % Do not use \turnoffactive in these arguments. Since the toc is + % typeset in cmr, so characters such as _ would come out wrong; we + % have to do the usual translation tricks. + \entry{#1}{#2}% \endgroup} % Space between chapter (or whatever) number and the title. @@ -3039,6 +3964,7 @@ July\or August\or September\or October\or November\or December\fi \message{environments,} +% @foo ... @end foo. % Since these characters are used in examples, it should be an even number of % \tt widths. Each \tt character is 1en, so two makes it 1em. @@ -3047,8 +3973,6 @@ July\or August\or September\or October\or November\or December\fi \newbox\pushcharbox \newbox\bullbox \newbox\equivbox \newbox\errorbox -\let\ptexequiv = \equiv - %{\tentt %\global\setbox\dblarrowbox = \hbox to 1em{\hfil$\Rightarrow$\hfil} %\global\setbox\longdblarrowbox = \hbox to 1em{\hfil$\mapsto$\hfil} @@ -3059,12 +3983,11 @@ July\or August\or September\or October\or November\or December\fi % depth .1ex\hfil} %} +% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. \def\point{$\star$} - \def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} \def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}} \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} - \def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}} % Adapted from the TeXbook's \boxit. @@ -3092,29 +4015,36 @@ July\or August\or September\or October\or November\or December\fi % But \@ or @@ will get a plain tex @ character. \def\tex{\begingroup -\catcode `\\=0 \catcode `\{=1 \catcode `\}=2 -\catcode `\$=3 \catcode `\&=4 \catcode `\#=6 -\catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie -\catcode `\%=14 -\catcode 43=12 -\catcode`\"=12 -\catcode`\==12 -\catcode`\|=12 -\catcode`\<=12 -\catcode`\>=12 -\escapechar=`\\ -% -\let\~=\ptextilde -\let\{=\ptexlbrace -\let\}=\ptexrbrace -\let\.=\ptexdot -\let\*=\ptexstar -\let\dots=\ptexdots -\def\@{@}% -\let\bullet=\ptexbullet -\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext \let\l=\ptexl -\let\L=\ptexL -% + \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 + \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 + \catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie + \catcode `\%=14 + \catcode 43=12 % plus + \catcode`\"=12 + \catcode`\==12 + \catcode`\|=12 + \catcode`\<=12 + \catcode`\>=12 + \escapechar=`\\ + % + \let\b=\ptexb + \let\bullet=\ptexbullet + \let\c=\ptexc + \let\,=\ptexcomma + \let\.=\ptexdot + \let\dots=\ptexdots + \let\equiv=\ptexequiv + \let\!=\ptexexclam + \let\i=\ptexi + \let\{=\ptexlbrace + \let\+=\tabalign + \let\}=\ptexrbrace + \let\*=\ptexstar + \let\t=\ptext + % + \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% + \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% + \def\@{@}% \let\Etex=\endgroup} % Define @lisp ... @endlisp. @@ -3159,8 +4089,8 @@ July\or August\or September\or October\or November\or December\fi % \nonarrowing is a flag. If "set", @lisp etc don't narrow margins. \let\nonarrowing=\relax -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% \cartouche: draw rectangle w/rounded corners around argument +% @cartouche ... @end cartouche: draw rectangle w/rounded corners around +% environment contents. \font\circle=lcircle10 \newdimen\circthick \newdimen\cartouter\newdimen\cartinner @@ -3172,50 +4102,50 @@ July\or August\or September\or October\or November\or December\fi \def\cbl{{\circle\char'012\hskip -6pt}} \def\cbr{{\hskip 6pt\circle\char'011}} \def\carttop{\hbox to \cartouter{\hskip\lskip - \ctl\leaders\hrule height\circthick\hfil\ctr - \hskip\rskip}} + \ctl\leaders\hrule height\circthick\hfil\ctr + \hskip\rskip}} \def\cartbot{\hbox to \cartouter{\hskip\lskip - \cbl\leaders\hrule height\circthick\hfil\cbr - \hskip\rskip}} + \cbl\leaders\hrule height\circthick\hfil\cbr + \hskip\rskip}} % \newskip\lskip\newskip\rskip \long\def\cartouche{% \begingroup - \lskip=\leftskip \rskip=\rightskip - \leftskip=0pt\rightskip=0pt %we want these *outside*. - \cartinner=\hsize \advance\cartinner by-\lskip - \advance\cartinner by-\rskip - \cartouter=\hsize - \advance\cartouter by 18pt % allow for 3pt kerns on either -% side, and for 6pt waste from -% each corner char - \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip - % Flag to tell @lisp, etc., not to narrow margin. - \let\nonarrowing=\comment - \vbox\bgroup - \baselineskip=0pt\parskip=0pt\lineskip=0pt - \carttop - \hbox\bgroup - \hskip\lskip - \vrule\kern3pt - \vbox\bgroup - \hsize=\cartinner - \kern3pt - \begingroup - \baselineskip=\normbskip - \lineskip=\normlskip - \parskip=\normpskip - \vskip -\parskip + \lskip=\leftskip \rskip=\rightskip + \leftskip=0pt\rightskip=0pt %we want these *outside*. + \cartinner=\hsize \advance\cartinner by-\lskip + \advance\cartinner by-\rskip + \cartouter=\hsize + \advance\cartouter by 18.4pt % allow for 3pt kerns on either +% side, and for 6pt waste from +% each corner char, and rule thickness + \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip + % Flag to tell @lisp, etc., not to narrow margin. + \let\nonarrowing=\comment + \vbox\bgroup + \baselineskip=0pt\parskip=0pt\lineskip=0pt + \carttop + \hbox\bgroup + \hskip\lskip + \vrule\kern3pt + \vbox\bgroup + \hsize=\cartinner + \kern3pt + \begingroup + \baselineskip=\normbskip + \lineskip=\normlskip + \parskip=\normpskip + \vskip -\parskip \def\Ecartouche{% - \endgroup - \kern3pt - \egroup - \kern3pt\vrule - \hskip\rskip - \egroup - \cartbot - \egroup + \endgroup + \kern3pt + \egroup + \kern3pt\vrule + \hskip\rskip + \egroup + \cartbot + \egroup \endgroup }} @@ -3243,49 +4173,52 @@ July\or August\or September\or October\or November\or December\fi \fi } -% To ending an @example-like environment, we first end the paragraph -% (via \afterenvbreak's vertical glue), and then the group. That way we -% keep the zero \parskip that the environments set -- \parskip glue -% will be inserted at the beginning of the next paragraph in the -% document, after the environment. +% Define the \E... control sequence only if we are inside the particular +% environment, so the error checking in \end will work. +% +% To end an @example-like environment, we first end the paragraph (via +% \afterenvbreak's vertical glue), and then the group. That way we keep +% the zero \parskip that the environments set -- \parskip glue will be +% inserted at the beginning of the next paragraph in the document, after +% the environment. % -\def\nonfillfinish{\afterenvbreak\endgroup}% +\def\nonfillfinish{\afterenvbreak\endgroup} -% This macro is +% @lisp: indented, narrowed, typewriter font. \def\lisp{\begingroup \nonfillstart \let\Elisp = \nonfillfinish \tt - \rawbackslash % have \ input char produce \ char from current font - \gobble + \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. + \gobble % eat return } -% Define the \E... control sequence only if we are inside the -% environment, so the error checking in \end will work. -% -% We must call \lisp last in the definition, since it reads the -% return following the @example (or whatever) command. -% +% @example: Same as @lisp. \def\example{\begingroup \def\Eexample{\nonfillfinish\endgroup}\lisp} -\def\smallexample{\begingroup \def\Esmallexample{\nonfillfinish\endgroup}\lisp} -\def\smalllisp{\begingroup \def\Esmalllisp{\nonfillfinish\endgroup}\lisp} -% @smallexample and @smalllisp. This is not used unless the @smallbook -% command is given. Originally contributed by Pavel@xerox. +% @small... is usually equivalent to the non-small (@smallbook +% redefines). We must call \example (or whatever) last in the +% definition, since it reads the return following the @example (or +% whatever) command. % +% This actually allows (for example) @end display inside an +% @smalldisplay. Too bad, but makeinfo will catch the error anyway. +% +\def\smalldisplay{\begingroup\def\Esmalldisplay{\nonfillfinish\endgroup}\display} +\def\smallexample{\begingroup\def\Esmallexample{\nonfillfinish\endgroup}\lisp} +\def\smallformat{\begingroup\def\Esmallformat{\nonfillfinish\endgroup}\format} +\def\smalllisp{\begingroup\def\Esmalllisp{\nonfillfinish\endgroup}\lisp} + +% Real @smallexample and @smalllisp (when @smallbook): use smaller fonts. +% Originally contributed by Pavel@xerox. \def\smalllispx{\begingroup - \nonfillstart - \let\Esmalllisp = \nonfillfinish - \let\Esmallexample = \nonfillfinish - % - % Smaller interline space and fonts for small examples. - \setleading{10pt}% - \indexfonts \tt - \rawbackslash % make \ output the \ character from the current font (tt) - \gobble + \def\Esmalllisp{\nonfillfinish\endgroup}% + \def\Esmallexample{\nonfillfinish\endgroup}% + \smallfonts + \lisp } -% This is @display; same as @lisp except use roman font. +% @display: same as @lisp except keep current font. % \def\display{\begingroup \nonfillstart @@ -3293,7 +4226,15 @@ July\or August\or September\or October\or November\or December\fi \gobble } -% This is @format; same as @display except don't narrow margins. +% @smalldisplay (when @smallbook): @display plus smaller fonts. +% +\def\smalldisplayx{\begingroup + \def\Esmalldisplay{\nonfillfinish\endgroup}% + \smallfonts \rm + \display +} + +% @format: same as @display except don't narrow margins. % \def\format{\begingroup \let\nonarrowing = t @@ -3302,20 +4243,27 @@ July\or August\or September\or October\or November\or December\fi \gobble } -% @flushleft (same as @format) and @flushright. +% @smallformat (when @smallbook): @format plus smaller fonts. % -\def\flushleft{\begingroup - \let\nonarrowing = t - \nonfillstart - \let\Eflushleft = \nonfillfinish - \gobble +\def\smallformatx{\begingroup + \def\Esmallformat{\nonfillfinish\endgroup}% + \smallfonts \rm + \format } + +% @flushleft (same as @format). +% +\def\flushleft{\begingroup \def\Eflushleft{\nonfillfinish\endgroup}\format} + +% @flushright. +% \def\flushright{\begingroup \let\nonarrowing = t \nonfillstart \let\Eflushright = \nonfillfinish \advance\leftskip by 0pt plus 1fill - \gobble} + \gobble +} % @quotation does normal linebreaking (hence we can't use \nonfillstart) % and narrows the margins. @@ -3338,9 +4286,11 @@ July\or August\or September\or October\or November\or December\fi \fi } + \message{defuns,} -% Define formatter for defuns -% First, allow user to change definition object font (\df) internally +% @defun etc. + +% Allow user to change definition object font (\df) internally \def\setdeffont #1 {\csname DEF#1\endcsname} \newskip\defbodyindent \defbodyindent=.4in @@ -3374,16 +4324,17 @@ July\or August\or September\or October\or November\or December\fi % Definitions of (, ) and & used in args for functions. % This is the definition of ( outside of all parentheses. -\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested % -\global\advance\parencount by 1 } +\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested + \global\advance\parencount by 1 +} % % This is the definition of ( when already inside a level of parens. \gdef\opnested{\char`\(\global\advance\parencount by 1 } % \gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0. -% also in that case restore the outer-level definition of (. -\ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi -\global\advance \parencount by -1 } + % also in that case restore the outer-level definition of (. + \ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi + \global\advance \parencount by -1 } % If we encounter &foo, then turn on ()-hacking afterwards \gdef\amprm#1 {{\rm\}\let(=\oprm \let)=\clrm\ } % @@ -3391,8 +4342,17 @@ July\or August\or September\or October\or November\or December\fi } % End of definition inside \activeparens %% These parens (in \boldbrax) actually are a little bolder than the %% contained text. This is especially needed for [ and ] -\def\opnr{{\sf\char`\(}} \def\clnr{{\sf\char`\)}} \def\ampnr{\&} -\def\lbrb{{\bf\char`\[}} \def\rbrb{{\bf\char`\]}} +\def\opnr{{\sf\char`\(}\global\advance\parencount by 1 } +\def\clnr{{\sf\char`\)}\global\advance\parencount by -1 } +\let\ampnr = \& +\def\lbrb{{\bf\char`\[}} +\def\rbrb{{\bf\char`\]}} + +% Active &'s sneak into the index arguments, so make sure it's defined. +{ + \catcode`& = 13 + \global\let& = \ampnr +} % First, defname, which formats the header line itself. % #1 should be the function name. @@ -3403,20 +4363,18 @@ July\or August\or September\or October\or November\or December\fi % outside the @def... \dimen2=\leftskip \advance\dimen2 by -\defbodyindent -\dimen3=\rightskip -\advance\dimen3 by -\defbodyindent -\noindent % +\noindent \setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}% \dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line \dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations -\parshape 2 0in \dimen0 \defargsindent \dimen1 % +\parshape 2 0in \dimen0 \defargsindent \dimen1 % Now output arg 2 ("Function" or some such) % ending at \deftypemargin from the right margin, % but stuck inside a box of width 0 so it does not interfere with linebreaking {% Adjust \hsize to exclude the ambient margins, % so that \rightline will obey them. -\advance \hsize by -\dimen2 \advance \hsize by -\dimen3 -\rlap{\rightline{{\rm #2}\hskip \deftypemargin}}}% +\advance \hsize by -\dimen2 +\rlap{\rightline{{\rm #2}\hskip -1.25pc }}}% % Make all lines underfull and no complaints: \tolerance=10000 \hbadness=10000 \advance\leftskip by -\defbodyindent @@ -3437,23 +4395,62 @@ July\or August\or September\or October\or November\or December\fi \def#1{\endgraf\endgroup\medbreak}% \def#2{\begingroup\obeylines\activeparens\spacesplit#3}% \parindent=0in -\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent +\advance\leftskip by \defbodyindent \exdentamount=\defbodyindent \begingroup % \catcode 61=\active % 61 is `=' \obeylines\activeparens\spacesplit#3} -\def\defmethparsebody #1#2#3#4 {\begingroup\inENV % +% #1 is the \E... control sequence to end the definition (which we define). +% #2 is the \...x control sequence for consecutive fns (which we define). +% #3 is the control sequence to call to resume processing. +% #4, delimited by the space, is the class name. +% +\def\defmethparsebody#1#2#3#4 {\begingroup\inENV % \medbreak % % Define the end token that this defining construct specifies % so that it will exit this group. \def#1{\endgraf\endgroup\medbreak}% \def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}% \parindent=0in -\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent +\advance\leftskip by \defbodyindent \exdentamount=\defbodyindent \begingroup\obeylines\activeparens\spacesplit{#3{#4}}} +% Used for @deftypemethod and @deftypeivar. +% #1 is the \E... control sequence to end the definition (which we define). +% #2 is the \...x control sequence for consecutive fns (which we define). +% #3 is the control sequence to call to resume processing. +% #4, delimited by a space, is the class name. +% #5 is the method's return type. +% +\def\deftypemethparsebody#1#2#3#4 #5 {\begingroup\inENV + \medbreak + \def#1{\endgraf\endgroup\medbreak}% + \def#2##1 ##2 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}{##2}}}% + \parindent=0in + \advance\leftskip by \defbodyindent + \exdentamount=\defbodyindent + \begingroup\obeylines\activeparens\spacesplit{#3{#4}{#5}}} + +% Used for @deftypeop. The change from \deftypemethparsebody is an +% extra argument at the beginning which is the `category', instead of it +% being the hardwired string `Method' or `Instance Variable'. We have +% to account for this both in the \...x definition and in parsing the +% input at hand. Thus also need a control sequence (passed as #5) for +% the \E... definition to assign the category name to. +% +\def\deftypeopparsebody#1#2#3#4#5 #6 {\begingroup\inENV + \medbreak + \def#1{\endgraf\endgroup\medbreak}% + \def#2##1 ##2 ##3 {% + \def#4{##1}% + \begingroup\obeylines\activeparens\spacesplit{#3{##2}{##3}}}% + \parindent=0in + \advance\leftskip by \defbodyindent + \exdentamount=\defbodyindent + \begingroup\obeylines\activeparens\spacesplit{#3{#5}{#6}}} + \def\defopparsebody #1#2#3#4#5 {\begingroup\inENV % \medbreak % % Define the end token that this defining construct specifies @@ -3462,7 +4459,7 @@ July\or August\or September\or October\or November\or December\fi \def#2##1 ##2 {\def#4{##1}% \begingroup\obeylines\activeparens\spacesplit{#3{##2}}}% \parindent=0in -\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent +\advance\leftskip by \defbodyindent \exdentamount=\defbodyindent \begingroup\obeylines\activeparens\spacesplit{#3{#5}}} @@ -3477,7 +4474,7 @@ July\or August\or September\or October\or November\or December\fi \def#1{\endgraf\endgroup\medbreak}% \def#2{\begingroup\obeylines\spacesplit#3}% \parindent=0in -\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent +\advance\leftskip by \defbodyindent \exdentamount=\defbodyindent \begingroup % \catcode 61=\active % @@ -3485,7 +4482,7 @@ July\or August\or September\or October\or November\or December\fi % This is used for \def{tp,vr}parsebody. It could probably be used for % some of the others, too, with some judicious conditionals. -% +% \def\parsebodycommon#1#2#3{% \begingroup\inENV % \medbreak % @@ -3494,7 +4491,7 @@ July\or August\or September\or October\or November\or December\fi \def#1{\endgraf\endgroup\medbreak}% \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}% \parindent=0in - \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent + \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent \begingroup\obeylines } @@ -3519,17 +4516,16 @@ July\or August\or September\or October\or November\or December\fi } % Fine, but then we have to eventually remove the \empty *and* the -% braces (if any). That's what this does, putting the result in \tptemp. -% -\def\removeemptybraces\empty#1\relax{\def\tptemp{#1}}% +% braces (if any). That's what this does. +% +\def\removeemptybraces\empty#1\relax{#1} % After \spacesplit has done its work, this is called -- #1 is the final % thing to call, #2 the type name (which starts with \empty), and #3 % (which might be empty) the arguments. -% +% \def\parsetpheaderline#1#2#3{% - \removeemptybraces#2\relax - #1{\tptemp}{#3}% + #1{\removeemptybraces#2\relax}{#3}% }% \def\defopvarparsebody #1#2#3#4#5 {\begingroup\inENV % @@ -3540,7 +4536,7 @@ July\or August\or September\or October\or November\or December\fi \def#2##1 ##2 {\def#4{##1}% \begingroup\obeylines\spacesplit{#3{##2}}}% \parindent=0in -\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent +\advance\leftskip by \defbodyindent \exdentamount=\defbodyindent \begingroup\obeylines\spacesplit{#3{#5}}} @@ -3564,16 +4560,17 @@ July\or August\or September\or October\or November\or December\fi % First, define the processing that is wanted for arguments of \defun % Use this to expand the args and terminate the paragraph they make up -\def\defunargs #1{\functionparens \sl +\def\defunargs#1{\functionparens \sl % Expand, preventing hyphenation at `-' chars. % Note that groups don't affect changes in \hyphenchar. -\hyphenchar\tensl=0 +% Set the font temporarily and use \font in case \setfont made \tensl a macro. +{\tensl\hyphenchar\font=0}% #1% -\hyphenchar\tensl=45 -\ifnum\parencount=0 \else \errmessage{unbalanced parens in @def arguments}\fi% +{\tensl\hyphenchar\font=45}% +\ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi% \interlinepenalty=10000 \advance\rightskip by 0pt plus 1fil -\endgraf\penalty 10000\vskip -\parskip\penalty 10000% +\endgraf\nobreak\vskip -\parskip\nobreak } \def\deftypefunargs #1{% @@ -3584,7 +4581,7 @@ July\or August\or September\or October\or November\or December\fi \tclose{#1}% avoid \code because of side effects on active chars \interlinepenalty=10000 \advance\rightskip by 0pt plus 1fil -\endgraf\penalty 10000\vskip -\parskip\penalty 10000% +\endgraf\nobreak\vskip -\parskip\nobreak } % Do complete processing of one @defun or @defunx line already parsed. @@ -3603,7 +4600,7 @@ July\or August\or September\or October\or November\or December\fi \def\defun{\defparsebody\Edefun\defunx\defunheader} \def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index -\begingroup\defname {#1}{Function}% +\begingroup\defname {#1}{\putwordDeffunc}% \defunargs {#2}\endgroup % \catcode 61=\other % Turn off change made in \defparsebody } @@ -3617,7 +4614,7 @@ July\or August\or September\or October\or November\or December\fi % #1 is the data type, #2 the name, #3 the args. \def\deftypefunheaderx #1#2 #3\relax{% \doind {fn}{\code{#2}}% Make entry in function index -\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Function}% +\begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypefun}% \deftypefunargs {#3}\endgroup % \catcode 61=\other % Turn off change made in \defparsebody } @@ -3648,7 +4645,7 @@ July\or August\or September\or October\or November\or December\fi \def\defmac{\defparsebody\Edefmac\defmacx\defmacheader} \def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index -\begingroup\defname {#1}{Macro}% +\begingroup\defname {#1}{\putwordDefmac}% \defunargs {#2}\endgroup % \catcode 61=\other % Turn off change made in \defparsebody } @@ -3658,42 +4655,77 @@ July\or August\or September\or October\or November\or December\fi \def\defspec{\defparsebody\Edefspec\defspecx\defspecheader} \def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index -\begingroup\defname {#1}{Special Form}% +\begingroup\defname {#1}{\putwordDefspec}% \defunargs {#2}\endgroup % \catcode 61=\other % Turn off change made in \defparsebody } -% This definition is run if you use @defunx -% anywhere other than immediately after a @defun or @defunx. - -\def\deffnx #1 {\errmessage{@deffnx in invalid context}} -\def\defunx #1 {\errmessage{@defunx in invalid context}} -\def\defmacx #1 {\errmessage{@defmacx in invalid context}} -\def\defspecx #1 {\errmessage{@defspecx in invalid context}} -\def\deftypefnx #1 {\errmessage{@deftypefnx in invalid context}} -\def\deftypeunx #1 {\errmessage{@deftypeunx in invalid context}} - -% @defmethod, and so on - -% @defop {Funny Method} foo-class frobnicate argument - +% @defop CATEGORY CLASS OPERATION ARG... +% \def\defop #1 {\def\defoptype{#1}% \defopparsebody\Edefop\defopx\defopheader\defoptype} - -\def\defopheader #1#2#3{% -\dosubind {fn}{\code{#2}}{on #1}% Make entry in function index -\begingroup\defname {#2}{\defoptype{} on #1}% +% +\def\defopheader#1#2#3{% +\dosubind {fn}{\code{#2}}{\putwordon\ #1}% Make entry in function index +\begingroup\defname {#2}{\defoptype\ \putwordon\ #1}% \defunargs {#3}\endgroup % } -% @defmethod == @defop Method +% @deftypeop CATEGORY CLASS TYPE OPERATION ARG... +% +\def\deftypeop #1 {\def\deftypeopcategory{#1}% + \deftypeopparsebody\Edeftypeop\deftypeopx\deftypeopheader + \deftypeopcategory} +% +% #1 is the class name, #2 the data type, #3 the operation name, #4 the args. +\def\deftypeopheader#1#2#3#4{% + \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index + \begingroup + \defname{\defheaderxcond#2\relax$$$#3} + {\deftypeopcategory\ \putwordon\ \code{#1}}% + \deftypefunargs{#4}% + \endgroup +} -\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader} +% @deftypemethod CLASS TYPE METHOD ARG... +% +\def\deftypemethod{% + \deftypemethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader} +% +% #1 is the class name, #2 the data type, #3 the method name, #4 the args. +\def\deftypemethodheader#1#2#3#4{% + \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index + \begingroup + \defname{\defheaderxcond#2\relax$$$#3}{\putwordMethodon\ \code{#1}}% + \deftypefunargs{#4}% + \endgroup +} -\def\defmethodheader #1#2#3{% -\dosubind {fn}{\code{#2}}{on #1}% entry in function index -\begingroup\defname {#2}{Method on #1}% -\defunargs {#3}\endgroup % +% @deftypeivar CLASS TYPE VARNAME +% +\def\deftypeivar{% + \deftypemethparsebody\Edeftypeivar\deftypeivarx\deftypeivarheader} +% +% #1 is the class name, #2 the data type, #3 the variable name. +\def\deftypeivarheader#1#2#3{% + \dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index + \begingroup + \defname{#3}{\putwordInstanceVariableof\ \code{#1}}% + \defvarargs{#3}% + \endgroup +} + +% @defmethod == @defop Method +% +\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader} +% +% #1 is the class name, #2 the method name, #3 the args. +\def\defmethodheader#1#2#3{% + \dosubind{fn}{\code{#2}}{\putwordon\ \code{#1}}% entry in function index + \begingroup + \defname{#2}{\putwordMethodon\ \code{#1}}% + \defunargs{#3}% + \endgroup } % @defcv {Class Option} foo-class foo-flag @@ -3702,37 +4734,30 @@ July\or August\or September\or October\or November\or December\fi \defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype} \def\defcvarheader #1#2#3{% -\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index -\begingroup\defname {#2}{\defcvtype{} of #1}% +\dosubind {vr}{\code{#2}}{\putwordof\ #1}% Make entry in var index +\begingroup\defname {#2}{\defcvtype\ \putwordof\ #1}% \defvarargs {#3}\endgroup % } -% @defivar == @defcv {Instance Variable} - +% @defivar CLASS VARNAME == @defcv {Instance Variable} CLASS VARNAME +% \def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader} - -\def\defivarheader #1#2#3{% -\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index -\begingroup\defname {#2}{Instance Variable of #1}% -\defvarargs {#3}\endgroup % +% +\def\defivarheader#1#2#3{% + \dosubind {vr}{\code{#2}}{\putwordof\ #1}% entry in var index + \begingroup + \defname{#2}{\putwordInstanceVariableof\ #1}% + \defvarargs{#3}% + \endgroup } -% These definitions are run if you use @defmethodx, etc., -% anywhere other than immediately after a @defmethod, etc. - -\def\defopx #1 {\errmessage{@defopx in invalid context}} -\def\defmethodx #1 {\errmessage{@defmethodx in invalid context}} -\def\defcvx #1 {\errmessage{@defcvx in invalid context}} -\def\defivarx #1 {\errmessage{@defivarx in invalid context}} - -% Now @defvar - +% @defvar % First, define the processing that is wanted for arguments of @defvar. % This is actually simple: just print them in roman. % This must expand the args and terminate the paragraph they make up \def\defvarargs #1{\normalparens #1% \interlinepenalty=10000 -\endgraf\penalty 10000\vskip -\parskip\penalty 10000} +\endgraf\nobreak\vskip -\parskip\nobreak} % @defvr Counter foo-count @@ -3746,7 +4771,7 @@ July\or August\or September\or October\or November\or December\fi \def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader} \def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index -\begingroup\defname {#1}{Variable}% +\begingroup\defname {#1}{\putwordDefvar}% \defvarargs {#2}\endgroup % } @@ -3755,7 +4780,7 @@ July\or August\or September\or October\or November\or December\fi \def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader} \def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index -\begingroup\defname {#1}{User Option}% +\begingroup\defname {#1}{\putwordDefopt}% \defvarargs {#2}\endgroup % } @@ -3763,33 +4788,26 @@ July\or August\or September\or October\or November\or December\fi \def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader} -% #1 is the data type. #2 is the name. +% #1 is the data type. #2 is the name, perhaps followed by text that +% is actually part of the data type, which should not be put into the index. \def\deftypevarheader #1#2{% -\doind {vr}{\code{#2}}% Make entry in variables index -\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Variable}% +\dovarind#2 \relax% Make entry in variables index +\begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypevar}% \interlinepenalty=10000 -\endgraf\penalty 10000\vskip -\parskip\penalty 10000 +\endgraf\nobreak\vskip -\parskip\nobreak \endgroup} +\def\dovarind#1 #2\relax{\doind{vr}{\code{#1}}} % @deftypevr {Global Flag} int enable \def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader} -\def\deftypevrheader #1#2#3{\doind {vr}{\code{#3}}% +\def\deftypevrheader #1#2#3{\dovarind#3 \relax% \begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1} \interlinepenalty=10000 -\endgraf\penalty 10000\vskip -\parskip\penalty 10000 +\endgraf\nobreak\vskip -\parskip\nobreak \endgroup} -% This definition is run if you use @defvarx -% anywhere other than immediately after a @defvar or @defvarx. - -\def\defvrx #1 {\errmessage{@defvrx in invalid context}} -\def\defvarx #1 {\errmessage{@defvarx in invalid context}} -\def\defoptx #1 {\errmessage{@defoptx in invalid context}} -\def\deftypevarx #1 {\errmessage{@deftypevarx in invalid context}} -\def\deftypevrx #1 {\errmessage{@deftypevrx in invalid context}} - % Now define @deftp % Args are printed in bold, a slight difference from @defvar. @@ -3802,60 +4820,407 @@ July\or August\or September\or October\or November\or December\fi \def\deftpheader #1#2#3{\doind {tp}{\code{#2}}% \begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup} -% This definition is run if you use @deftpx, etc -% anywhere other than immediately after a @deftp, etc. +% These definitions are used if you use @defunx (etc.) +% anywhere other than immediately after a @defun or @defunx. +% +\def\defcvx#1 {\errmessage{@defcvx in invalid context}} +\def\deffnx#1 {\errmessage{@deffnx in invalid context}} +\def\defivarx#1 {\errmessage{@defivarx in invalid context}} +\def\defmacx#1 {\errmessage{@defmacx in invalid context}} +\def\defmethodx#1 {\errmessage{@defmethodx in invalid context}} +\def\defoptx #1 {\errmessage{@defoptx in invalid context}} +\def\defopx#1 {\errmessage{@defopx in invalid context}} +\def\defspecx#1 {\errmessage{@defspecx in invalid context}} +\def\deftpx#1 {\errmessage{@deftpx in invalid context}} +\def\deftypefnx#1 {\errmessage{@deftypefnx in invalid context}} +\def\deftypefunx#1 {\errmessage{@deftypefunx in invalid context}} +\def\deftypeivarx#1 {\errmessage{@deftypeivarx in invalid context}} +\def\deftypemethodx#1 {\errmessage{@deftypemethodx in invalid context}} +\def\deftypeopx#1 {\errmessage{@deftypeopx in invalid context}} +\def\deftypevarx#1 {\errmessage{@deftypevarx in invalid context}} +\def\deftypevrx#1 {\errmessage{@deftypevrx in invalid context}} +\def\defunx#1 {\errmessage{@defunx in invalid context}} +\def\defvarx#1 {\errmessage{@defvarx in invalid context}} +\def\defvrx#1 {\errmessage{@defvrx in invalid context}} + + +\message{macros,} +% @macro. + +% To do this right we need a feature of e-TeX, \scantokens, +% which we arrange to emulate with a temporary file in ordinary TeX. +\ifx\eTeXversion\undefined + \newwrite\macscribble + \def\scanmacro#1{% + \begingroup \newlinechar`\^^M + % Undo catcode changes of \startcontents and \doprintindex + \catcode`\@=0 \catcode`\\=12 \escapechar=`\@ + % Append \endinput to make sure that TeX does not see the ending newline. + \toks0={#1\endinput}% + \immediate\openout\macscribble=\jobname.tmp + \immediate\write\macscribble{\the\toks0}% + \immediate\closeout\macscribble + \let\xeatspaces\eatspaces + \input \jobname.tmp + \endgroup +} +\else +\def\scanmacro#1{% +\begingroup \newlinechar`\^^M +% Undo catcode changes of \startcontents and \doprintindex +\catcode`\@=0 \catcode`\\=12 \escapechar=`\@ +\let\xeatspaces\eatspaces\scantokens{#1\endinput}\endgroup} +\fi + +\newcount\paramno % Count of parameters +\newtoks\macname % Macro name +\newif\ifrecursive % Is it recursive? +\def\macrolist{} % List of all defined macros in the form + % \do\macro1\do\macro2... + +% Utility routines. +% Thisdoes \let #1 = #2, except with \csnames. +\def\cslet#1#2{% +\expandafter\expandafter +\expandafter\let +\expandafter\expandafter +\csname#1\endcsname +\csname#2\endcsname} + +% Trim leading and trailing spaces off a string. +% Concepts from aro-bend problem 15 (see CTAN). +{\catcode`\@=11 +\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} +\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} +\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} +\def\unbrace#1{#1} +\unbrace{\gdef\trim@@@ #1 } #2@{#1} +} + +% Trim a single trailing ^^M off a string. +{\catcode`\^^M=12\catcode`\Q=3% +\gdef\eatcr #1{\eatcra #1Q^^MQ}% +\gdef\eatcra#1^^MQ{\eatcrb#1Q}% +\gdef\eatcrb#1Q#2Q{#1}% +} + +% Macro bodies are absorbed as an argument in a context where +% all characters are catcode 10, 11 or 12, except \ which is active +% (as in normal texinfo). It is necessary to change the definition of \. + +% It's necessary to have hard CRs when the macro is executed. This is +% done by making ^^M (\endlinechar) catcode 12 when reading the macro +% body, and then making it the \newlinechar in \scanmacro. + +\def\macrobodyctxt{% + \catcode`\~=12 + \catcode`\^=12 + \catcode`\_=12 + \catcode`\|=12 + \catcode`\<=12 + \catcode`\>=12 + \catcode`\+=12 + \catcode`\{=12 + \catcode`\}=12 + \catcode`\@=12 + \catcode`\^^M=12 + \usembodybackslash} + +\def\macroargctxt{% + \catcode`\~=12 + \catcode`\^=12 + \catcode`\_=12 + \catcode`\|=12 + \catcode`\<=12 + \catcode`\>=12 + \catcode`\+=12 + \catcode`\@=12 + \catcode`\\=12} + +% \mbodybackslash is the definition of \ in @macro bodies. +% It maps \foo\ => \csname macarg.foo\endcsname => #N +% where N is the macro parameter number. +% We define \csname macarg.\endcsname to be \realbackslash, so +% \\ in macro replacement text gets you a backslash. + +{\catcode`@=0 @catcode`@\=@active + @gdef@usembodybackslash{@let\=@mbodybackslash} + @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} +} +\expandafter\def\csname macarg.\endcsname{\realbackslash} + +\def\macro{\recursivefalse\parsearg\macroxxx} +\def\rmacro{\recursivetrue\parsearg\macroxxx} + +\def\macroxxx#1{% + \getargs{#1}% now \macname is the macname and \argl the arglist + \ifx\argl\empty % no arguments + \paramno=0% + \else + \expandafter\parsemargdef \argl;% + \fi + \if1\csname ismacro.\the\macname\endcsname + \message{Warning: redefining \the\macname}% + \else + \expandafter\ifx\csname \the\macname\endcsname \relax + \else \errmessage{The name \the\macname\space is reserved}\fi + \global\cslet{macsave.\the\macname}{\the\macname}% + \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% + % Add the macroname to \macrolist + \toks0 = \expandafter{\macrolist\do}% + \xdef\macrolist{\the\toks0 + \expandafter\noexpand\csname\the\macname\endcsname}% + \fi + \begingroup \macrobodyctxt + \ifrecursive \expandafter\parsermacbody + \else \expandafter\parsemacbody + \fi} + +\def\unmacro{\parsearg\unmacroxxx} +\def\unmacroxxx#1{% + \if1\csname ismacro.#1\endcsname + \global\cslet{#1}{macsave.#1}% + \global\expandafter\let \csname ismacro.#1\endcsname=0% + % Remove the macro name from \macrolist + \begingroup + \edef\tempa{\expandafter\noexpand\csname#1\endcsname}% + \def\do##1{% + \def\tempb{##1}% + \ifx\tempa\tempb + % remove this + \else + \toks0 = \expandafter{\newmacrolist\do}% + \edef\newmacrolist{\the\toks0\expandafter\noexpand\tempa}% + \fi}% + \def\newmacrolist{}% + % Execute macro list to define \newmacrolist + \macrolist + \global\let\macrolist\newmacrolist + \endgroup + \else + \errmessage{Macro #1 not defined}% + \fi +} + +% This makes use of the obscure feature that if the last token of a +% is #, then the preceding argument is delimited by +% an opening brace, and that opening brace is not consumed. +\def\getargs#1{\getargsxxx#1{}} +\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} +\def\getmacname #1 #2\relax{\macname={#1}} +\def\getmacargs#1{\def\argl{#1}} + +% Parse the optional {params} list. Set up \paramno and \paramlist +% so \defmacro knows what to do. Define \macarg.blah for each blah +% in the params list, to be ##N where N is the position in that list. +% That gets used by \mbodybackslash (above). + +% We need to get `macro parameter char #' into several definitions. +% The technique used is stolen from LaTeX: let \hash be something +% unexpandable, insert that wherever you need a #, and then redefine +% it to # just before using the token list produced. +% +% The same technique is used to protect \eatspaces till just before +% the macro is used. + +\def\parsemargdef#1;{\paramno=0\def\paramlist{}% + \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,} +\def\parsemargdefxxx#1,{% + \if#1;\let\next=\relax + \else \let\next=\parsemargdefxxx + \advance\paramno by 1% + \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname + {\xeatspaces{\hash\the\paramno}}% + \edef\paramlist{\paramlist\hash\the\paramno,}% + \fi\next} + +% These two commands read recursive and nonrecursive macro bodies. +% (They're different since rec and nonrec macros end differently.) + +\long\def\parsemacbody#1@end macro% +{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% +\long\def\parsermacbody#1@end rmacro% +{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% + +% This defines the macro itself. There are six cases: recursive and +% nonrecursive macros of zero, one, and many arguments. +% Much magic with \expandafter here. +% \xdef is used so that macro definitions will survive the file +% they're defined in; @include reads the file inside a group. +\def\defmacro{% + \let\hash=##% convert placeholders to macro parameter chars + \ifrecursive + \ifcase\paramno + % 0 + \expandafter\xdef\csname\the\macname\endcsname{% + \noexpand\scanmacro{\temp}}% + \or % 1 + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \noexpand\braceorline + \expandafter\noexpand\csname\the\macname xxx\endcsname}% + \expandafter\xdef\csname\the\macname xxx\endcsname##1{% + \egroup\noexpand\scanmacro{\temp}}% + \else % many + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \noexpand\csname\the\macname xx\endcsname}% + \expandafter\xdef\csname\the\macname xx\endcsname##1{% + \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% + \expandafter\expandafter + \expandafter\xdef + \expandafter\expandafter + \csname\the\macname xxx\endcsname + \paramlist{\egroup\noexpand\scanmacro{\temp}}% + \fi + \else + \ifcase\paramno + % 0 + \expandafter\xdef\csname\the\macname\endcsname{% + \noexpand\norecurse{\the\macname}% + \noexpand\scanmacro{\temp}\egroup}% + \or % 1 + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \noexpand\braceorline + \expandafter\noexpand\csname\the\macname xxx\endcsname}% + \expandafter\xdef\csname\the\macname xxx\endcsname##1{% + \egroup + \noexpand\norecurse{\the\macname}% + \noexpand\scanmacro{\temp}\egroup}% + \else % many + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \expandafter\noexpand\csname\the\macname xx\endcsname}% + \expandafter\xdef\csname\the\macname xx\endcsname##1{% + \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% + \expandafter\expandafter + \expandafter\xdef + \expandafter\expandafter + \csname\the\macname xxx\endcsname + \paramlist{% + \egroup + \noexpand\norecurse{\the\macname}% + \noexpand\scanmacro{\temp}\egroup}% + \fi + \fi} + +\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} + +% \braceorline decides whether the next nonwhitespace character is a +% {. If so it reads up to the closing }, if not, it reads the whole +% line. Whatever was read is then fed to the next control sequence +% as an argument (by \parsebrace or \parsearg) +\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx} +\def\braceorlinexxx{% + \ifx\nchar\bgroup\else + \expandafter\parsearg + \fi \next} -\def\deftpx #1 {\errmessage{@deftpx in invalid context}} +% We mant to disable all macros during \shipout so that they are not +% expanded by \write. +\def\turnoffmacros{\begingroup \def\do##1{\let\noexpand##1=\relax}% + \edef\next{\macrolist}\expandafter\endgroup\next} -\message{cross reference,} -% Define cross-reference macros -\newwrite \auxfile -\newif\ifhavexrefs % True if xref values are known. +% @alias. +% We need some trickery to remove the optional spaces around the equal +% sign. Just make them active and then expand them all to nothing. +\def\alias{\begingroup\obeyspaces\parsearg\aliasxxx} +\def\aliasxxx #1{\aliasyyy#1\relax} +\def\aliasyyy #1=#2\relax{\ignoreactivespaces +\edef\next{\global\let\expandafter\noexpand\csname#1\endcsname=% + \expandafter\noexpand\csname#2\endcsname}% +\expandafter\endgroup\next} + + +\message{cross references,} +% @xref etc. + +\newwrite\auxfile + +\newif\ifhavexrefs % True if xref values are known. \newif\ifwarnedxrefs % True if we warned once that they aren't known. -% \setref{foo} defines a cross-reference point named foo. +% @inforef is relatively simple. +\def\inforef #1{\inforefzzz #1,,,,**} +\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, + node \samp{\ignorespaces#1{}}} + +% @node's job is to define \lastnode. +\def\node{\ENVcheck\parsearg\nodezzz} +\def\nodezzz#1{\nodexxx [#1,]} +\def\nodexxx[#1,#2]{\gdef\lastnode{#1}} +\let\nwnode=\node +\let\lastnode=\relax -\def\setref#1{% -\dosetq{#1-title}{Ytitle}% -\dosetq{#1-pg}{Ypagenumber}% -\dosetq{#1-snt}{Ysectionnumberandtype}} +% The sectioning commands (@chapter, etc.) call these. +\def\donoderef{% + \ifx\lastnode\relax\else + \expandafter\expandafter\expandafter\setref{\lastnode}% + {Ysectionnumberandtype}% + \global\let\lastnode=\relax + \fi +} +\def\unnumbnoderef{% + \ifx\lastnode\relax\else + \expandafter\expandafter\expandafter\setref{\lastnode}{Ynothing}% + \global\let\lastnode=\relax + \fi +} +\def\appendixnoderef{% + \ifx\lastnode\relax\else + \expandafter\expandafter\expandafter\setref{\lastnode}% + {Yappendixletterandtype}% + \global\let\lastnode=\relax + \fi +} -\def\unnumbsetref#1{% -\dosetq{#1-title}{Ytitle}% -\dosetq{#1-pg}{Ypagenumber}% -\dosetq{#1-snt}{Ynothing}} -\def\appendixsetref#1{% -\dosetq{#1-title}{Ytitle}% -\dosetq{#1-pg}{Ypagenumber}% -\dosetq{#1-snt}{Yappendixletterandtype}} +% @anchor{NAME} -- define xref target at arbitrary point. +% +\newcount\savesfregister +\gdef\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} +\gdef\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} +\gdef\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} + +% \setref{NAME}{SNT} defines a cross-reference point NAME, namely +% NAME-title, NAME-pg, and NAME-SNT. Called from \foonoderef. We have +% to set \indexdummies so commands such as @code in a section title +% aren't expanded. It would be nicer not to expand the titles in the +% first place, but there's so many layers that that is hard to do. +% +\def\setref#1#2{{% + \indexdummies + \pdfmkdest{#1}% + \dosetq{#1-title}{Ytitle}% + \dosetq{#1-pg}{Ypagenumber}% + \dosetq{#1-snt}{#2}% +}} -% \xref, \pxref, and \ref generate cross-references to specified points. -% For \xrefX, #1 is the node name, #2 the name of the Info -% cross-reference, #3 the printed node name, #4 the name of the Info -% file, #5 the name of the printed manual. All but the node name can be -% omitted. +% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is +% the node name, #2 the name of the Info cross-reference, #3 the printed +% node name, #4 the name of the Info file, #5 the name of the printed +% manual. All but the node name can be omitted. % -\def\href#1{\hrefX[#1,,,]} -\def\hrefX[#1,#2,#3,#4]{#1} \def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} \def\ref#1{\xrefX[#1,,,,,,,]} \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup + \unsepspaces \def\printedmanual{\ignorespaces #5}% \def\printednodename{\ignorespaces #3}% \setbox1=\hbox{\printedmanual}% \setbox0=\hbox{\printednodename}% \ifdim \wd0 = 0pt % No printed node name was explicitly given. - \ifx\SETxref-automatic-section-title\thisisundefined + \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax % Use the node name inside the square brackets. \def\printednodename{\ignorespaces #1}% \else % Use the actual chapter/section title appear inside % the square brackets. Use the real section title if we have it. - \ifdim \wd1>0pt% + \ifdim \wd1 > 0pt % It is in another manual, so we don't have it. \def\printednodename{\ignorespaces #1}% \else @@ -3876,27 +5241,54 @@ July\or August\or September\or October\or November\or December\fi % are best written with fairly long node names, containing hyphens, this % is a loss. Therefore, we give the text of the node name again, so it % is as if TeX is seeing it for the first time. + \ifpdf + \leavevmode + \getfilename{#4}% + \ifnum\filenamelength>0 + \startlink attr{/Border [0 0 0]}% + goto file{\the\filename.pdf} name{#1@}% + \else + \startlink attr{/Border [0 0 0]}% + goto name{#1@}% + \fi + \linkcolor + \fi + % \ifdim \wd1 > 0pt - \putwordsection{} ``\printednodename'' in \cite{\printedmanual}% + \putwordsection{} ``\printednodename'' \putwordin{} \cite{\printedmanual}% \else % _ (for example) has to be the character _ for the purposes of the % control sequence corresponding to the node, but it has to expand % into the usual \leavevmode...\vrule stuff for purposes of % printing. So we \turnoffactive for the \refx-snt, back on for the % printing, back off for the \refx-pg. - {\turnoffactive \refx{#1-snt}{}}% - \space [\printednodename],\space + {\normalturnoffactive + % Only output a following space if the -snt ref is nonempty; for + % @unnumbered and @anchor, it won't be. + \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% + \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi + }% + % [mynode], + [\printednodename],\space + % page 3 \turnoffactive \putwordpage\tie\refx{#1-pg}{}% \fi + \endlink \endgroup} % \dosetq is the interface for calls from other macros -% Use \turnoffactive so that punctuation chars such as underscore -% work in node names. -\def\dosetq #1#2{{\let\folio=0 \turnoffactive \auxhat% -\edef\next{\write\auxfile{\internalsetq {#1}{#2}}}% -\next}} +% Use \normalturnoffactive so that punctuation chars such as underscore +% and backslash work in node names. (\turnoffactive doesn't do \.) +\def\dosetq#1#2{% + {\let\folio=0% + \normalturnoffactive + \edef\next{\write\auxfile{\internalsetq{#1}{#2}}}% + \iflinks + \next + \fi + }% +} % \internalsetq {foo}{page} expands into % CHARACTERS 'xrdef {foo}{...expansion of \Ypage...} @@ -3947,13 +5339,15 @@ July\or August\or September\or October\or November\or December\fi \def\refx#1#2{% \expandafter\ifx\csname X#1\endcsname\relax % If not defined, say something at least. - $\langle$un\-de\-fined$\rangle$% - \ifhavexrefs - \message{\linenumber Undefined cross reference `#1'.}% - \else - \ifwarnedxrefs\else - \global\warnedxrefstrue - \message{Cross reference values unknown; you must run TeX again.}% + \angleleft un\-de\-fined\angleright + \iflinks + \ifhavexrefs + \message{\linenumber Undefined cross reference `#1'.}% + \else + \ifwarnedxrefs\else + \global\warnedxrefstrue + \message{Cross reference values unknown; you must run TeX again.}% + \fi \fi \fi \else @@ -3963,84 +5357,101 @@ July\or August\or September\or October\or November\or December\fi #2% Output the suffix in any case. } -% Read the last existing aux file, if any. No error if none exists. - % This is the macro invoked by entries in the aux file. -\def\xrdef #1#2{ -{\catcode`\'=\other\expandafter \gdef \csname X#1\endcsname {#2}}} +% +\def\xrdef#1{\begingroup + % Reenable \ as an escape while reading the second argument. + \catcode`\\ = 0 + \afterassignment\endgroup + \expandafter\gdef\csname X#1\endcsname +} -\def\readauxfile{% -\begingroup -\catcode `\^^@=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\^^C=\other -\catcode `\^^D=\other -\catcode `\^^E=\other -\catcode `\^^F=\other -\catcode `\^^G=\other -\catcode `\^^H=\other -\catcode `\ =\other -\catcode `\^^L=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode 26=\other -\catcode `\^^[=\other -\catcode `\^^\=\other -\catcode `\^^]=\other -\catcode `\^^^=\other -\catcode `\^^_=\other -\catcode `\@=\other -\catcode `\^=\other -\catcode `\~=\other -\catcode `\[=\other -\catcode `\]=\other -\catcode`\"=\other -\catcode`\_=\other -\catcode`\|=\other -\catcode`\<=\other -\catcode`\>=\other -\catcode `\$=\other -\catcode `\#=\other -\catcode `\&=\other -% `\+ does not work, so use 43. -\catcode 43=\other -% Make the characters 128-255 be printing characters -{% - \count 1=128 - \def\loop{% - \catcode\count 1=\other - \advance\count 1 by 1 - \ifnum \count 1<256 \loop \fi +% Read the last existing aux file, if any. No error if none exists. +\def\readauxfile{\begingroup + \catcode`\^^@=\other + \catcode`\^^A=\other + \catcode`\^^B=\other + \catcode`\^^C=\other + \catcode`\^^D=\other + \catcode`\^^E=\other + \catcode`\^^F=\other + \catcode`\^^G=\other + \catcode`\^^H=\other + \catcode`\^^K=\other + \catcode`\^^L=\other + \catcode`\^^N=\other + \catcode`\^^P=\other + \catcode`\^^Q=\other + \catcode`\^^R=\other + \catcode`\^^S=\other + \catcode`\^^T=\other + \catcode`\^^U=\other + \catcode`\^^V=\other + \catcode`\^^W=\other + \catcode`\^^X=\other + \catcode`\^^Z=\other + \catcode`\^^[=\other + \catcode`\^^\=\other + \catcode`\^^]=\other + \catcode`\^^^=\other + \catcode`\^^_=\other + \catcode`\@=\other + \catcode`\^=\other + % It was suggested to define this as 7, which would allow ^^e4 etc. + % in xref tags, i.e., node names. But since ^^e4 notation isn't + % supported in the main text, it doesn't seem desirable. Furthermore, + % that is not enough: for node names that actually contain a ^ + % character, we would end up writing a line like this: 'xrdef {'hat + % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first + % argument, and \hat is not an expandable control sequence. It could + % all be worked out, but why? Either we support ^^ or we don't. + % + % The other change necessary for this was to define \auxhat: + % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter + % and then to call \auxhat in \setq. + % + \catcode`\~=\other + \catcode`\[=\other + \catcode`\]=\other + \catcode`\"=\other + \catcode`\_=\other + \catcode`\|=\other + \catcode`\<=\other + \catcode`\>=\other + \catcode`\$=\other + \catcode`\#=\other + \catcode`\&=\other + \catcode`+=\other % avoid \+ for paranoia even though we've turned it off + % Make the characters 128-255 be printing characters + {% + \count 1=128 + \def\loop{% + \catcode\count 1=\other + \advance\count 1 by 1 + \ifnum \count 1<256 \loop \fi + }% }% -}% -% the aux file uses ' as the escape. -% Turn off \ as an escape so we do not lose on -% entries which were dumped with control sequences in their names. -% For example, 'xrdef {$\leq $-fun}{page ...} made by @defun ^^ -% Reference to such entries still does not work the way one would wish, -% but at least they do not bomb out when the aux file is read in. -\catcode `\{=1 \catcode `\}=2 -\catcode `\%=\other -\catcode `\'=0 -\catcode`\^=7 % to make ^^e4 etc usable in xref tags -\catcode `\\=\other -\openin 1 \jobname.aux -\ifeof 1 \else \closein 1 \input \jobname.aux \global\havexrefstrue -\global\warnedobstrue -\fi -% Open the new aux file. Tex will close it automatically at exit. -\openout \auxfile=\jobname.aux + % The aux file uses ' as the escape (for now). + % Turn off \ as an escape so we do not lose on + % entries which were dumped with control sequences in their names. + % For example, 'xrdef {$\leq $-fun}{page ...} made by @defun ^^ + % Reference to such entries still does not work the way one would wish, + % but at least they do not bomb out when the aux file is read in. + \catcode`\{=1 + \catcode`\}=2 + \catcode`\%=\other + \catcode`\'=0 + \catcode`\\=\other + % + \openin 1 \jobname.aux + \ifeof 1 \else + \closein 1 + \input \jobname.aux + \global\havexrefstrue + \global\warnedobstrue + \fi + % Open the new aux file. TeX will close it automatically at exit. + \openout\auxfile=\jobname.aux \endgroup} @@ -4051,10 +5462,11 @@ July\or August\or September\or October\or November\or December\fi % The trailing space in the following definition for supereject is % vital for proper filling; pages come out unaligned when you do a % pagealignmacro call if that space before the closing brace is -% removed. +% removed. (Generally, numeric constants should always be followed by a +% space to prevent strange expansion errors.) \def\supereject{\par\penalty -20000\footnoteno =0 } -% @footnotestyle is meaningful for info output only.. +% @footnotestyle is meaningful for info output only. \let\footnotestyle=\comment \let\ptexfootnote=\footnote @@ -4080,7 +5492,11 @@ July\or August\or September\or October\or November\or December\fi % Don't bother with the trickery in plain.tex to not require the % footnote text as a parameter. Our footnotes don't need to be so general. % -\long\gdef\footnotezzz#1{\insert\footins{% +% Oh yes, they do; otherwise, @ifset and anything else that uses +% \parseargline fail inside footnotes because the tokens are fixed when +% the footnote is read. --karl, 16nov96. +% +\long\gdef\footnotezzz{\insert\footins\bgroup % We want to typeset this text as a normal paragraph, even if the % footnote reference occurs in (for example) a display environment. % So reset some parameters. @@ -4094,6 +5510,8 @@ July\or August\or September\or October\or November\or December\fi \xspaceskip\z@skip \parindent\defaultparindent % + \smallfonts \rm + % % Hang the footnote text off the number. \hang \textindent{\thisfootno}% @@ -4102,8 +5520,13 @@ July\or August\or September\or October\or November\or December\fi % expands into a box, it must come within the paragraph, lest it % provide a place where TeX can split the footnote. \footstrut - #1\strut}% + \futurelet\next\fo@t } +\def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t + \else\let\next\f@t\fi \next} +\def\f@@t{\bgroup\aftergroup\@foot\let\next} +\def\f@t#1{#1\@foot} +\def\@foot{\strut\par\egroup} }%end \catcode `\@=11 @@ -4160,31 +5583,117 @@ July\or August\or September\or October\or November\or December\fi % \def\finalout{\overfullrule=0pt} +% @image. We use the macros from epsf.tex to support this. +% If epsf.tex is not installed and @image is used, we complain. +% +% Check for and read epsf.tex up front. If we read it only at @image +% time, we might be inside a group, and then its definitions would get +% undone and the next image would fail. +\openin 1 = epsf.tex +\ifeof 1 \else + \closein 1 + % Do not bother showing banner with post-v2.7 epsf.tex (available in + % doc/epsf.tex until it shows up on ctan). + \def\epsfannounce{\toks0 = }% + \input epsf.tex +\fi +% +% We will only complain once about lack of epsf.tex. +\newif\ifwarnednoepsf +\newhelp\noepsfhelp{epsf.tex must be installed for images to + work. It is also included in the Texinfo distribution, or you can get + it from ftp://tug.org/tex/epsf.tex.} +% +\def\image#1{% + \ifx\epsfbox\undefined + \ifwarnednoepsf \else + \errhelp = \noepsfhelp + \errmessage{epsf.tex not found, images will be ignored}% + \global\warnednoepsftrue + \fi + \else + \imagexxx #1,,,\finish + \fi +} +% +% Arguments to @image: +% #1 is (mandatory) image filename; we tack on .eps extension. +% #2 is (optional) width, #3 is (optional) height. +% #4 is just the usual extra ignored arg for parsing this stuff. +\def\imagexxx#1,#2,#3,#4\finish{% + \ifpdf + \centerline{\dopdfimage{#1}{#2}{#3}}% + \else + % \epsfbox itself resets \epsf?size at each figure. + \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi + \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi + \begingroup + \catcode`\^^M = 5 % in case we're inside an example + % If the image is by itself, center it. + \ifvmode + \nobreak\bigskip + % Usually we'll have text after the image which will insert + % \parskip glue, so insert it here too to equalize the space + % above and below. + \nobreak\vskip\parskip + \nobreak + \centerline{\epsfbox{#1.eps}}% + \bigbreak + \else + % In the middle of a paragraph, no extra space. + \epsfbox{#1.eps}% + \fi + \endgroup + \fi +} -% End of control word definitions. -\message{and turning on texinfo input format.} +\message{localization,} +% and i18n. -\def\openindices{% - \newindex{cp}% - \newcodeindex{fn}% - \newcodeindex{vr}% - \newcodeindex{tp}% - \newcodeindex{ky}% - \newcodeindex{pg}% +% @documentlanguage is usually given very early, just after +% @setfilename. If done too late, it may not override everything +% properly. Single argument is the language abbreviation. +% It would be nice if we could set up a hyphenation file here. +% +\def\documentlanguage{\parsearg\dodocumentlanguage} +\def\dodocumentlanguage#1{% + \tex % read txi-??.tex file in plain TeX. + % Read the file if it exists. + \openin 1 txi-#1.tex + \ifeof1 + \errhelp = \nolanghelp + \errmessage{Cannot read language file txi-#1.tex}% + \let\temp = \relax + \else + \def\temp{\input txi-#1.tex }% + \fi + \temp + \endgroup } +\newhelp\nolanghelp{The given language definition file cannot be found or +is empty. Maybe you need to install it? In the current directory +should work if nowhere else does.} + -% Set some numeric style parameters, for 8.5 x 11 format. +% @documentencoding should change something in TeX eventually, most +% likely, but for now just recognize it. +\let\documentencoding = \comment -%\hsize = 6.5in + +% Page size parameters. +% \newdimen\defaultparindent \defaultparindent = 15pt -\parindent = \defaultparindent -\parskip 18pt plus 1pt -\setleading{15pt} -\advance\topskip by 1.2cm + +\chapheadingskip = 15pt plus 4pt minus 2pt +\secheadingskip = 12pt plus 3pt minus 2pt +\subsecheadingskip = 9pt plus 2pt minus 2pt % Prevent underfull vbox error messages. -\vbadness=10000 +\vbadness = 10000 + +% Don't be so finicky about underfull hboxes, either. +\hbadness = 2000 % Following George Bush, just get rid of widows and orphans. \widowpenalty=10000 @@ -4193,89 +5702,125 @@ July\or August\or September\or October\or November\or December\fi % Use TeX 3.0's \emergencystretch to help line breaking, but if we're % using an old version of TeX, don't do anything. We want the amount of % stretch added to depend on the line length, hence the dependence on -% \hsize. This makes it come to about 9pt for the 8.5x11 format. +% \hsize. We call this whenever the paper size is set. % -\ifx\emergencystretch\thisisundefined - % Allow us to assign to \emergencystretch anyway. - \def\emergencystretch{\dimen0}% -\else - \emergencystretch = \hsize - \divide\emergencystretch by 45 -\fi +\def\setemergencystretch{% + \ifx\emergencystretch\thisisundefined + % Allow us to assign to \emergencystretch anyway. + \def\emergencystretch{\dimen0}% + \else + \emergencystretch = .15\hsize + \fi +} + +% Parameters in order: 1) textheight; 2) textwidth; 3) voffset; +% 4) hoffset; 5) binding offset; 6) topskip. Then whoever calls us can +% set \parskip and call \setleading for \baselineskip. +% +\def\internalpagesizes#1#2#3#4#5#6{% + \voffset = #3\relax + \topskip = #6\relax + \splittopskip = \topskip + % + \vsize = #1\relax + \advance\vsize by \topskip + \outervsize = \vsize + \advance\outervsize by 2\topandbottommargin + \pageheight = \vsize + % + \hsize = #2\relax + \outerhsize = \hsize + \advance\outerhsize by 0.5in + \pagewidth = \hsize + % + \normaloffset = #4\relax + \bindingoffset = #5\relax + % + \parindent = \defaultparindent + \setemergencystretch +} -% Use @smallbook to reset parameters for 7x9.5 format (or else 7x9.25) -\def\smallbook{ +% @letterpaper (the default). +\def\letterpaper{{\globaldefs = 1 + \parskip = 3pt plus 2pt minus 1pt + \setleading{13.2pt}% + % + % If page is nothing but text, make it come out even. + \internalpagesizes{46\baselineskip}{6in}{\voffset}{.25in}{\bindingoffset}{36pt}% +}} -% These values for secheadingskip and subsecheadingskip are -% experiments. RJC 7 Aug 1992 -\global\secheadingskip = 17pt plus 6pt minus 3pt -\global\subsecheadingskip = 14pt plus 6pt minus 3pt +% Use @smallbook to reset parameters for 7x9.5 (or so) format. +\def\smallbook{{\globaldefs = 1 + \parskip = 2pt plus 1pt + \setleading{12pt}% + % + \internalpagesizes{7.5in}{5.in}{\voffset}{.25in}{\bindingoffset}{16pt}% + % + \lispnarrowing = 0.3in + \tolerance = 700 + \hfuzz = 1pt + \contentsrightmargin = 0pt + \deftypemargin = 0pt + \defbodyindent = .5cm + % + \let\smalldisplay = \smalldisplayx + \let\smallexample = \smalllispx + \let\smallformat = \smallformatx + \let\smalllisp = \smalllispx +}} -\global\lispnarrowing = 0.3in -\setleading{12pt} -\advance\topskip by -1cm -\global\parskip 3pt plus 1pt -\global\hsize = 5in -\global\vsize=7.5in -\global\tolerance=700 -\global\hfuzz=1pt -\global\contentsrightmargin=0pt -\global\deftypemargin=0pt -\global\defbodyindent=.5cm +% Use @afourpaper to print on European A4 paper. +\def\afourpaper{{\globaldefs = 1 + \setleading{12pt}% + \parskip = 3pt plus 2pt minus 1pt + % + \internalpagesizes{53\baselineskip}{160mm}{\voffset}{4mm}{\bindingoffset}{44pt}% + % + \tolerance = 700 + \hfuzz = 1pt +}} -\global\pagewidth=\hsize -\global\pageheight=\vsize +% A specific text layout, 24x15cm overall, intended for A4 paper. Top margin +% 29mm, hence bottom margin 28mm, nominal side margin 3cm. +\def\afourlatex{{\globaldefs = 1 + \setleading{13.6pt}% + % + \afourpaper + \internalpagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}% + % + \globaldefs = 0 +}} -\global\let\smalllisp=\smalllispx -\global\let\smallexample=\smalllispx -\global\def\Esmallexample{\Esmalllisp} +% Use @afourwide to print on European A4 paper in wide format. +\def\afourwide{% + \afourpaper + \internalpagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}% + % + \globaldefs = 0 } -% Use @afourpaper to print on European A4 paper. -\def\afourpaper{ -\global\tolerance=700 -\global\hfuzz=1pt -\setleading{12pt} -\global\parskip 15pt plus 1pt - -\global\vsize= 53\baselineskip -\advance\vsize by \topskip -%\global\hsize= 5.85in % A4 wide 10pt -\global\hsize= 6.5in -\global\outerhsize=\hsize -\global\advance\outerhsize by 0.5in -\global\outervsize=\vsize -\global\advance\outervsize by 0.6in - -\global\pagewidth=\hsize -\global\pageheight=\vsize -} - -% Allow control of the text dimensions. Parameters in order: textheight; -% textwidth; \voffset; \hoffset (!); binding offset. All require a dimension; -% header is additional; added length extends the bottom of the page. - -\def\changepagesizes#1#2#3#4#5{ - \global\vsize= #1 - \advance\vsize by \topskip - \global\voffset= #3 - \global\hsize= #2 - \global\outerhsize=\hsize - \global\advance\outerhsize by 0.5in - \global\outervsize=\vsize - \global\advance\outervsize by 0.6in - \global\pagewidth=\hsize - \global\pageheight=\vsize - \global\normaloffset= #4 - \global\bindingoffset= #5} - -% This layout is compatible with Latex on A4 paper. - -\def\afourlatex{\changepagesizes{22cm}{15cm}{7mm}{4.6mm}{5mm}} +% @pagesizes TEXTHEIGHT[,TEXTWIDTH] +% Perhaps we should allow setting the margins, \topskip, \parskip, +% and/or leading, also. Or perhaps we should compute them somehow. +% +\def\pagesizes{\parsearg\pagesizesxxx} +\def\pagesizesxxx#1{\pagesizesyyy #1,,\finish} +\def\pagesizesyyy#1,#2,#3\finish{{% + \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi + \globaldefs = 1 + % + \parskip = 3pt plus 2pt minus 1pt + \setleading{13.2pt}% + % + \internalpagesizes{#1}{\hsize}{\voffset}{\normaloffset}{\bindingoffset}{44pt}% +}} -% Use @afourwide to print on European A4 paper in wide format. -\def\afourwide{\afourpaper -\changepagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}} +% Set default to letter. +% +\letterpaper + + +\message{and turning on texinfo input format.} % Define macros to output various characters with catcode for normal text. \catcode`\"=\other @@ -4286,6 +5831,7 @@ July\or August\or September\or October\or November\or December\fi \catcode`\<=\other \catcode`\>=\other \catcode`\+=\other +\catcode`\$=\other \def\normaldoublequote{"} \def\normaltilde{~} \def\normalcaret{^} @@ -4294,6 +5840,7 @@ July\or August\or September\or October\or November\or December\fi \def\normalless{<} \def\normalgreater{>} \def\normalplus{+} +\def\normaldollar{$} % This macro is used to make a character print one way in ttfont % where it can probably just be output, and another way in other fonts, @@ -4304,7 +5851,13 @@ July\or August\or September\or October\or November\or December\fi % interword stretch (and shrink), and it is reasonable to expect all % typewriter fonts to have this, we can check that font parameter. % -\def\ifusingtt#1#2{\ifdim \fontdimen3\the\font=0pt #1\else #2\fi} +\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} + +% Same as above, but check for italic font. Actually this also catches +% non-italic slanted fonts since it is impossible to distinguish them from +% italic fonts. But since this is only used by $ and it uses \sl anyway +% this is not a problem. +\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} % Turn off all special characters except @ % (and those which the user can use as if they were ordinary). @@ -4312,13 +5865,12 @@ July\or August\or September\or October\or November\or December\fi % use math or other variants that look better in normal text. \catcode`\"=\active -\def\activedoublequote{{\tt \char '042}} +\def\activedoublequote{{\tt\char34}} \let"=\activedoublequote \catcode`\~=\active -\def~{{\tt \char '176}} +\def~{{\tt\char126}} \chardef\hat=`\^ \catcode`\^=\active -\def\auxhat{\def^{'hat}} \def^{{\tt \hat}} \catcode`\_=\active @@ -4327,7 +5879,7 @@ July\or August\or September\or October\or November\or December\fi \def\_{\leavevmode \kern.06em \vbox{\hrule width.3em height.1ex}} \catcode`\|=\active -\def|{{\tt \char '174}} +\def|{{\tt\char124}} \chardef \less=`\< \catcode`\<=\active \def<{{\tt \less}} @@ -4336,6 +5888,8 @@ July\or August\or September\or October\or November\or December\fi \def>{{\tt \gtr}} \catcode`\+=\active \def+{{\tt \char 43}} +\catcode`\$=\active +\def${\ifusingit{{\sl\$}}\normaldollar} %\catcode 27=\active %\def^^[{$\diamondsuit$} @@ -4366,9 +5920,6 @@ July\or August\or September\or October\or November\or December\fi % \normalbackslash outputs one backslash in fixed width font. \def\normalbackslash{{\tt\rawbackslashxx}} -% Say @foo, not \foo, in error messages. -\escapechar=`\@ - % \catcode 17=0 % Define control-q \catcode`\\=\active @@ -4382,7 +5933,8 @@ July\or August\or September\or October\or November\or December\fi @let|=@normalverticalbar @let<=@normalless @let>=@normalgreater -@let+=@normalplus} +@let+=@normalplus +@let$=@normaldollar} @def@normalturnoffactive{@let"=@normaldoublequote @let\=@normalbackslash @@ -4392,7 +5944,8 @@ July\or August\or September\or October\or November\or December\fi @let|=@normalverticalbar @let<=@normalless @let>=@normalgreater -@let+=@normalplus} +@let+=@normalplus +@let$=@normaldollar} % Make _ and + \other characters, temporarily. % This is canceled by @fixbackslash. @@ -4411,16 +5964,29 @@ July\or August\or September\or October\or November\or December\fi % Also back turn on active characters that might appear in the input % file name, in case not using a pre-dumped format. % -@gdef@fixbackslash{@ifx\@eatinput @let\ = @normalbackslash @fi - @catcode`+=@active @catcode`@_=@active} +@gdef@fixbackslash{% + @ifx\@eatinput @let\ = @normalbackslash @fi + @catcode`+=@active + @catcode`@_=@active +} + +% Say @foo, not \foo, in error messages. +@escapechar = `@@ -%% These look ok in all fonts, so just make them not special. The @rm below -%% makes sure that the current font starts out as the newly loaded cmr10 -@catcode`@$=@other @catcode`@%=@other @catcode`@&=@other @catcode`@#=@other +% These look ok in all fonts, so just make them not special. +@catcode`@& = @other +@catcode`@# = @other +@catcode`@% = @other +@c Set initial fonts. @textfonts @rm + @c Local variables: +@c eval: (add-hook 'write-file-hooks 'time-stamp) @c page-delimiter: "^\\\\message" +@c time-stamp-start: "def\\\\texinfoversion{" +@c time-stamp-format: "%:y-%02m-%02d.%02H" +@c time-stamp-end: "}" @c End: diff --git a/doc/tools/Makefile.am b/doc/tools/Makefile.am new file mode 100644 index 0000000000..278b42e7ef --- /dev/null +++ b/doc/tools/Makefile.am @@ -0,0 +1,13 @@ +## $Id$ + +AUTOMAKE_OPTIONS = foreign 1.4 + +EXTRA_DIST = \ +update word-replace + +SUBDIRS = \ +bmenu \ +src2html1.4a \ +src2html \ +pdl2texi \ +texi2www diff --git a/doc/tools/bmenu/Makefile b/doc/tools/bmenu/Makefile deleted file mode 100644 index 6d5da7b9d0..0000000000 --- a/doc/tools/bmenu/Makefile +++ /dev/null @@ -1,45 +0,0 @@ -# -# COPYRIGHT (c) 1988-1999. -# On-Line Applications Research Corporation (OAR). -# All rights reserved. -# -# $Id$ -# - -CC=gcc -#CFLAGS=-O4 -fomit-frame-pointer -CFLAGS=-g - -#TEXINPUTS=/home/gnu/work/binutils-2.6/texinfo:. -PROG=bmenu - -all: $(PROG) - -$(BASE).txt: $(BASE).d ./$(PROG) - ./$(PROG) $(BASE).d - -$(PROG): main.o chain.o - gcc main.o chain.o -o $(PROG) - -main.o: main.c base.h - -chain.o: chain.c - -info: c_user.texinfo timer.texi - makeinfo c_user.texinfo - -TESTER=init -test: all - #rm -f timer.txt - #./bmenu -v timer.texi - #cp ../user/$(TESTER).texi . - ./bmenu -u "DOCS UP" -p "DOCS PREV" -n "DOCS NEXT" -v testdoc.txt - #mv $(TESTER).txt $(TESTER).texi - #makeinfo c_user.texinfo - - -clean: - rm -f *.o $(PROG) *.txt core *.html - rm -f *.dvi *.ps *.log *.aux *.cp *.fn *.ky *.pg *.toc *.tp *.vr $(BASE) - rm -f c_user c_user-* _* - diff --git a/doc/tools/bmenu/Makefile.am b/doc/tools/bmenu/Makefile.am new file mode 100644 index 0000000000..122467187b --- /dev/null +++ b/doc/tools/bmenu/Makefile.am @@ -0,0 +1,16 @@ +# +# COPYRIGHT (c) 1988-1998. +# On-Line Applications Research Corporation (OAR). +# All rights reserved. +# +# $Id$ +# + +AUTOMAKE_OPTIONS = foreign 1.4 + +noinst_PROGRAMS=bmenu + +bmenu_SOURCES = \ +address.h chain.c isr.h \ +address.inl chain.h main.c \ +base.h chain.inl system.h diff --git a/doc/tools/configure.in b/doc/tools/configure.in new file mode 100644 index 0000000000..bf8d7efdc5 --- /dev/null +++ b/doc/tools/configure.in @@ -0,0 +1,32 @@ +dnl Process this file with autoconf to produce a configure script. +dnl NOTE: This is a very coarse port to automake +AC_PREREQ(2.13) + +AC_INIT(update) + +AM_INIT_AUTOMAKE(rtemsdoc-tools,0.0.0,no) +dnl Checks for programs. +AC_PROG_CC + +dnl Checks for libraries. + +dnl Checks for header files. +AC_HEADER_STDC +AC_CHECK_HEADERS(limits.h) + +dnl Checks for typedefs, structures, and compiler characteristics. + +dnl Checks for library functions. +AC_CHECK_FUNCS(strdup strstr) + +AC_OUTPUT( +Makefile +bmenu/Makefile +src2html/Makefile +src2html1.4a/Makefile +src2html1.4a/Ctags/Makefile +src2html1.4a/FreeBSD/Makefile +src2html1.4a/ctags-emacs/Makefile +pdl2texi/Makefile +texi2www/Makefile +) diff --git a/doc/tools/pdl2texi/Makefile b/doc/tools/pdl2texi/Makefile deleted file mode 100644 index 6827898edb..0000000000 --- a/doc/tools/pdl2texi/Makefile +++ /dev/null @@ -1,85 +0,0 @@ -# -# COPYRIGHT (c) 1996-1997. -# On-Line Applications Research Corporation (OAR). -# All rights reserved. -# -# $Id$ -# - -CC=gcc -#CFLAGS=-O4 -fomit-frame-pointer -CFLAGS=-g - -TEXINPUTS=/home/gnu/work/binutils-2.6/texinfo:. -PROG=pdl2texi - -all: $(PROG) - -$(BASE).texi: $(BASE).d ./$(PROG) - ./$(PROG) $(BASE).d - -$(PROG): main.o chain.o - gcc -static main.o chain.o -o $(PROG) - -drive: Drive -Drive: $(BASE).txt - /usr1/home/joel/tmp/makeinfo $(PROJECT).texi - -main.o: main.c base.h - -chain.o: chain.c - -dvi: dirs $(PROJECT).dvi -ps: $(PROJECT).ps -pdf: dirs $(PROJECT).pdf - -$(PROJECT).pdf: $(FILES) - $(TEXI2PDF) $(PROJECT).texi -info: Drive -html: $(PROJECT).texi $(BASE).txt - ../textools/texi2html $(PROJECT).texi - -$(BASE).txt: $(BASE).d - ./$(PROG) -v -p "Turret Subsystem" -u "Turret Subsystem" $(BASE).d - -$(PROJECT).ps: $(PROJECT).dvi - dvips -o $(PROJECT).ps $(PROJECT).dvi - -$(PROJECT).dvi: $(FILES) - $(TEXI2DVI) $(PROJECT).texi - cp $(PROJECT).dvi $(WWW_INSTALL)/$(PROJECT) - -view: - test -r $(PROJECT).ps && ghostview $(PROJECT).ps - -tests: test test1 - -test: $(PROG) - rm -f $(BASE).texi - ./$(PROG) -v -p "Turret Subsystem" -u "Turret Subsystem" $(BASE).d - -test1: - rm -f t1.txt - ./$(PROG) -v t1.d - -wtest: - rm -f $(BASE).txt - ./$(PROG) -w -v -p "Turret Subsystem" -u "Turret Subsystem" $(BASE).d - -enum: - ./$(PROG) -w -v -p "Magic Subsystem" \ - -u "Magic Subsystem" test_cases/enum.d - ./$(PROG) -w -v -p "Magic Subsystem" \ - -u "Magic Subsystem" test_cases/enumbad.d - -avdas: - ./$(PROG) -v -p "Magic Subsystem" \ - -u "Magic Subsystem" test_cases/avdas.d - ./$(PROG) -w -v -p "Magic Subsystem" \ - -u "Magic Subsystem" test_cases/avdas.d - -clean: - rm -f *.o $(PROG) *.txt core *.html $(PROJECT) Drive.texi $(PROJECT).pdf - rm -f *.dvi *.ps *.log *.aux *.cp *.fn *.ky *.pg *.toc *.tp *.vr $(BASE) - rm -f test_cases/*.txt test_cases/*.texi - diff --git a/doc/tools/pdl2texi/Makefile.am b/doc/tools/pdl2texi/Makefile.am new file mode 100644 index 0000000000..0d31296e7a --- /dev/null +++ b/doc/tools/pdl2texi/Makefile.am @@ -0,0 +1,59 @@ +# +# COPYRIGHT (c) 1996-1997. +# On-Line Applications Research Corporation (OAR). +# All rights reserved. +# +# $Id$ +# + +AUTOMAKE_OPTIONS = foreign + +PROG=pdl2texi +noinst_PROGRAMS=$(PROG) + +#$(BASE).texi: $(BASE).d ./$(PROG) +# ./$(PROG) $(BASE).d + +pdl2texi_SOURCES = \ +address.inl chain.h main.c system.h \ +base.h chain.inl address.h chain.c \ +isr.h + +BASE=sample + +#drive: Drive +#Drive: $(BASE).txt +# /usr1/home/joel/tmp/makeinfo $(PROJECT).texi + +#dvi: $(PROJECT).dvi +#ps: $(PROJECT).ps +#info: Drive +#html: $(PROJECT).texi $(BASE).txt +# ../textools/texi2html $(PROJECT).texi + +$(BASE).txt: $(BASE).d + ./$(PROG) -v -p "Turret Subsystem" -u "Turret Subsystem" $(BASE).d + +wtest: + rm -f $(BASE).txt + ./$(PROG) -w -v -p "Turret Subsystem" -u "Turret Subsystem" $(BASE).d + +enum: + ./$(PROG) -w -v -p "Magic Subsystem" \ + -u "Magic Subsystem" test_cases/enum.d + ./$(PROG) -w -v -p "Magic Subsystem" \ + -u "Magic Subsystem" test_cases/enumbad.d + +avdas: + ./$(PROG) -v -p "Magic Subsystem" \ + -u "Magic Subsystem" test_cases/avdas.d + ./$(PROG) -w -v -p "Magic Subsystem" \ + -u "Magic Subsystem" test_cases/avdas.d + +clean: + rm -f *.o $(PROG) *.txt core *.html $(PROJECT) Drive.texi + rm -f *.dvi *.ps *.log *.aux *.cp *.fn *.ky *.pg *.toc *.tp *.vr $(BASE) + rm -f test_cases/*.txt test_cases/*.texi + +EXTRA_DIST = test_cases/enum.d test_cases/enumbad.d test_cases/table.d \ + s.d sample.d diff --git a/doc/tools/src2html/Makefile b/doc/tools/src2html/Makefile deleted file mode 100644 index 6aa7b47e39..0000000000 --- a/doc/tools/src2html/Makefile +++ /dev/null @@ -1,38 +0,0 @@ -# -# COPYRIGHT (c) 1988-1999. -# On-Line Applications Research Corporation (OAR). -# All rights reserved. -# -# $Id$ -# - -CC=gcc -CFLAGS=-g - -PROGS=ctags-wr ctags-new ctags src2html - -SRC2HTMLDIR=src2html1.4a - -all: tools - -tools: $(PROGS) - chmod +x $(PROGS) - -ctags-wr: - cp ../$(SRC2HTMLDIR)/ctags-wr . - -ctags-new: - cd ../$(SRC2HTMLDIR)/Ctags ; gmake - cp ../$(SRC2HTMLDIR)/Ctags/ctags-new . - -# EMACS ctags with Ada awareness -ctags: - cp ../$(SRC2HTMLDIR)/ctags-emacs/ctags ctags - -src2html: - cp ../$(SRC2HTMLDIR)/src2html . - -clean: - rm -f $(PROGS) - cd ../$(SRC2HTMLDIR)/Ctags ; gmake clean - diff --git a/doc/tools/src2html/Makefile.am b/doc/tools/src2html/Makefile.am new file mode 100644 index 0000000000..76d61c75ce --- /dev/null +++ b/doc/tools/src2html/Makefile.am @@ -0,0 +1,25 @@ +# +# COPYRIGHT (c) 1988-1998. +# On-Line Applications Research Corporation (OAR). +# All rights reserved. +# +# $Id$ +# + +AUTOMAKE_OPTIONS = foreign + +SRC2HTMLDIR=$(top_srcdir)/src2html1.4a + +ctags-wr: $(SRC2HTMLDIR)/ctags-wr + cp $< $@ + chmod 755 $@ + +ctags-new: $(SRC2HTMLDIR)/Ctags/ctags-new + cp $< $@ + +# EMACS ctags with Ada awareness +ctags: $(SRC2HTMLDIR)/ctags-emacs/ctags + cp $< $@ + +src2html: $(SRC2HTMLDIR)/src2html + cp $< $@ diff --git a/doc/tools/src2html1.4a/Ctags/Makefile b/doc/tools/src2html1.4a/Ctags/Makefile deleted file mode 100644 index c6dd7f0d6a..0000000000 --- a/doc/tools/src2html1.4a/Ctags/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -# @(#)Makefile 5.6 (Berkeley) 5/11/90 - -CC=gcc - -PROG= ctags-new -CFLAGS+=-I. -g - -SRCS= C.c ctags.c fortran.c lisp.c print.c tree.c yacc.c strerror.c - -ctags: C.o ctags.o fortran.o lisp.o print.o tree.o yacc.o strerror.o - $(CC) -o ctags-new C.o ctags.o fortran.o lisp.o print.o tree.o yacc.o \ - strerror.o - -clean: - rm -f *.o ctags-new diff --git a/doc/tools/src2html1.4a/Ctags/Makefile.am b/doc/tools/src2html1.4a/Ctags/Makefile.am new file mode 100644 index 0000000000..0066980147 --- /dev/null +++ b/doc/tools/src2html1.4a/Ctags/Makefile.am @@ -0,0 +1,10 @@ +## $Id$ + +AUTOMAKE_OPTIONS = foreign + +noinst_PROGRAMS = ctags-new + +ctags_new_SOURCES = C.c ctags.c fortran.c lisp.c print.c \ +tree.c yacc.c strerror.c ctags.h + +EXTRA_DIST = ctags.1 z.c diff --git a/doc/tools/src2html1.4a/FreeBSD/Makefile.am b/doc/tools/src2html1.4a/FreeBSD/Makefile.am new file mode 100644 index 0000000000..df56641ebe --- /dev/null +++ b/doc/tools/src2html1.4a/FreeBSD/Makefile.am @@ -0,0 +1,21 @@ +## $Id$ + +AUTOMAKE_OPTIONS = foreign + +EXTRA_DIST = \ +FreeBSD.hdr \ +FreeBSD.s2h \ +conf.hdr \ +ddb.hdr \ +i386.i386.hdr \ +i386.include.hdr \ +i386.isa.hdr \ +i386.stand.hdr \ +kern.hdr \ +net.hdr \ +netinet.hdr \ +nfs.hdr \ +stand.hdr \ +sys.hdr \ +ufs.hdr \ +vm.hdr diff --git a/doc/tools/src2html1.4a/Makefile.am b/doc/tools/src2html1.4a/Makefile.am new file mode 100644 index 0000000000..8814866d6f --- /dev/null +++ b/doc/tools/src2html1.4a/Makefile.am @@ -0,0 +1,8 @@ +AUTOMAKE_OPTIONS = foreign + +SUBDIRS = Ctags FreeBSD ctags-emacs + +noinst_SCRIPTS = ctags-wr src2html src2html.cgi + +EXTRA_DIST = src2html.1 Readme $(noinst_SCRIPTS) + diff --git a/doc/tools/src2html1.4a/ctags-emacs/Makefile.am b/doc/tools/src2html1.4a/ctags-emacs/Makefile.am new file mode 100644 index 0000000000..8c0c4a0ac5 --- /dev/null +++ b/doc/tools/src2html1.4a/ctags-emacs/Makefile.am @@ -0,0 +1,5 @@ +## $Id$ + +AUTOMAKE_OPTIONS = foreign + +EXTRA_DIST = ctags etags.c-ada-patch README diff --git a/doc/tools/texi2www/Makefile b/doc/tools/texi2www/Makefile deleted file mode 100644 index 11ef5a3d65..0000000000 --- a/doc/tools/texi2www/Makefile +++ /dev/null @@ -1,50 +0,0 @@ -# -# COPYRIGHT (c) 1988-1999. -# On-Line Applications Research Corporation (OAR). -# All rights reserved. -# -# $Id$ -# - -PROJECT=texi2www - -include ../../Make.config - -all: html info ps pdf - -dirs: - $(make-dirs) - -FILES= texi2www.texi - -info: - -dvi: dirs $(PROJECT).dvi - -ps: dirs $(PROJECT).ps -pdf: dirs $(PROJECT).pdf - -$(PROJECT).pdf: $(FILES) - #$(TEXI2PDF) $(PROJECT).texi - #cp $(PROJECT).pdf $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).ps: $(PROJECT).dvi - #dvips -o $(PROJECT).ps $(PROJECT).dvi - #cp $(PROJECT).ps $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).dvi: $(FILES) - #$(TEXI2DVI) $(PROJECT).texi - #cp $(PROJECT).dvi $(WWW_INSTALL)/$(PROJECT) - -html: dirs $(FILES) - #-mkdir -p $(WWW_INSTALL)/$(PROJECT) - #$(TEXI2WWW) $(TEXI2WWW_ARGS) -dir $(WWW_INSTALL)/$(PROJECT) \ - # $(PROJECT).texi - -clean: - rm -f *.o $(PROG) *.txt core $(PROJECT).pdf - rm -f *.dvi *.ps *.log *.aux *.cp *.cps - rm -f *.fn *.ky *.pg *.toc *.tp *.vr $(BASE) - rm -f $(PROJECT)-* $(GENERATED_FILES) - rm -f *.fixed _* - diff --git a/doc/tools/texi2www/Makefile.am b/doc/tools/texi2www/Makefile.am new file mode 100644 index 0000000000..08b530df5f --- /dev/null +++ b/doc/tools/texi2www/Makefile.am @@ -0,0 +1,24 @@ +# +# COPYRIGHT (c) 1988-1998. +# On-Line Applications Research Corporation (OAR). +# All rights reserved. +# +# $Id$ +# + +AUTOMAKE_OPTIONS = foreign + +noinst_SCRIPTS = texi2www texi2dvi + +EXTRA_DIST = \ +$(noinst_SCRIPTS) \ +dir-arrow.gif prev-arrow.gif \ +missing-arrow.gif up-arrow.gif \ +next-arrow.gif \ +texi2www.texi \ +archive/texi2www-960103.tgz + +PROJECT=texi2www + +# TEXINFO_TEX = $(top_srcdir)/../texinfo/texinfo.tex +# info_TEXINFOS = texi2www.texi diff --git a/doc/tools/word-replace2 b/doc/tools/word-replace2 new file mode 100644 index 0000000000..a56d88a688 --- /dev/null +++ b/doc/tools/word-replace2 @@ -0,0 +1,101 @@ +#!/usr/bin/perl +# +# $Id$ +# + +eval "exec /usr/local/bin/perl -S $0 $*" + if $running_under_some_shell; + +require 'getopts.pl'; +&Getopts("p:vh"); # help, pattern file, verbose, + +if ($opt_h || ! $opt_p) { + print STDERR <) +{ + chop; + s/#.*//; + next if /^$/; + ($orig, $new, $junk, @rest) = split; + next if ( ! $orig || ! $new || $junk); # <2 or >2 patterns + die "pattern appears 2x: '$orig' in '$pattern_file'--" if defined($patterns{$orig}); + $patterns{$orig} = $new; +} +close PATTERNS; +# walk thru each line in each file + +$infile = '-' ; +$outfile = '-' ; + +if ( $#ARGV > -1 ) +{ + $infile = "@ARGV[0]" ; + shift @ARGV ; +} + +if ( $#ARGV > -1 ) +{ + $outfile = "@ARGV[0]" ; + shift @ARGV ; +} + +print STDERR "$outfile\t"; + +open (INFILE, "<$infile") || + die "could not open input file $infile: $!"; + +open (OUTFILE, ">$outfile") || + die "could not open output file $outfile: $!"; + +$line = join('',) ; + + foreach $key (keys %patterns) + { + if ( $line =~ s/\b$key\b/$patterns{$key}/ge ) + { + print STDERR "." ; + } + } + +print OUTFILE $line ; + +print STDERR "\n"; +close INFILE; +close OUTFILE; diff --git a/doc/user/Makefile b/doc/user/Makefile deleted file mode 100644 index 1e4cc53234..0000000000 --- a/doc/user/Makefile +++ /dev/null @@ -1,194 +0,0 @@ -# -# COPYRIGHT (c) 1988-1999. -# On-Line Applications Research Corporation (OAR). -# All rights reserved. -# -# $Id$ -# - -PROJECT=c_user - -include ../Make.config - -all: html info ps pdf - -dirs: - $(make-dirs) - -COMMON_FILES=../common/cpright.texi -FILES= bsp.texi c_user.texi clock.texi concepts.texi conf.texi \ - dirstat.texi dpmem.texi event.texi example.texi fatal.texi \ - glossary.texi init.texi intr.texi io.texi mp.texi msg.texi overview.texi \ - part.texi preface.texi region.texi rtmon.texi schedule.texi sem.texi \ - signal.texi task.texi timer.texi userext.texi $(COMMON_FILES) - -GENERATED_FILES=overview.texi concepts.texi init.texi task.texi \ - intr.texi clock.texi timer.texi sem.texi msg.texi \ - event.texi signal.texi part.texi region.texi \ - dpmem.texi io.texi fatal.texi schedule.texi rtmon.texi \ - bsp.texi userext.texi conf.texi mp.texi - -INFOFILES=$(wildcard $(PROJECT) $(PROJECT)-*) - -info: dirs $(PROJECT) - cp $(PROJECT) $(PROJECT)-* $(INFO_INSTALL) - -$(PROJECT): $(FILES) - $(MAKEINFO) $(PROJECT).texi - -dvi: dirs $(PROJECT).dvi -ps: dirs $(PROJECT).ps -pdf: dirs $(PROJECT).pdf - -$(PROJECT).pdf: $(FILES) - $(TEXI2PDF) $(PROJECT).texi - cp $(PROJECT).pdf $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).ps: $(PROJECT).dvi - dvips -o $(PROJECT).ps $(PROJECT).dvi - cp $(PROJECT).ps $(WWW_INSTALL)/$(PROJECT) - -$(PROJECT).dvi: $(FILES) - $(TEXI2DVI) $(PROJECT).texi - cp $(PROJECT).dvi $(WWW_INSTALL)/$(PROJECT) - -html: dirs $(FILES) - -mkdir -p $(WWW_INSTALL)/$(PROJECT) - cp rtemsarc.png rtemspie.png states.png $(WWW_INSTALL)/c_user - $(TEXI2WWW) $(TEXI2WWW_ARGS) -dir $(WWW_INSTALL)/$(PROJECT) \ - $(PROJECT).texi - -index: - texindex $(PROJECT).cp $(PROJECT).vr $(PROJECT).fn \ - $(PROJECT).tp $(PROJECT).pg $(PROJECT).ky - -clean: - rm -f *.o $(PROG) *.txt core *.html $(PROJECT).pdf - rm -f *.dvi *.ps *.log *.aux *.cp *.fn *.ky *.pg *.toc *.tp *.vr $(BASE) - rm -f $(PROJECT) $(PROJECT)-* _* $(GENERATED_FILES) - rm -f *.cps *.cpss *.fns *.kys *.pgs *.tps *.vrs - - -#preface.texi: preface.t -# $(BMENU) -p "Top" \ -# -u "Top" \ -# -n "Overview" ${*}.t - -overview.texi: overview.t - $(BMENU) -p "Preface" \ - -u "Top" \ - -n "Key Concepts" ${*}.t - -concepts.texi: concepts.t - $(BMENU) -p "Overview Manual Organization" \ - -u "Top" \ - -n "Initialization Manager" ${*}.t - -init.texi: init.t - $(BMENU) -p "Key Concepts Memory Management" \ - -u "Top" \ - -n "Task Manager" ${*}.t - -task.texi: task.t - $(BMENU) -p "Initialization Manager SHUTDOWN_EXECUTIVE - Shutdown RTEMS" \ - -u "Top" \ - -n "Interrupt Manager" ${*}.t - -intr.texi: intr.t - $(BMENU) -p "Task Manager TASK_VARIABLE_DELETE - Remove per task variable" \ - -u "Top" \ - -n "Clock Manager" ${*}.t - -clock.texi: clock.t - $(BMENU) \ - -p "Interrupt Manager INTERRUPT_IS_IN_PROGRESS - Is an ISR in Progress" \ - -u "Top" \ - -n "Timer Manager" ${*}.t - -timer.texi: timer.t - $(BMENU) -p "Clock Manager CLOCK_TICK - Announce a clock tick" \ - -u "Top" \ - -n "Semaphore Manager" ${*}.t - -sem.texi: sem.t - $(BMENU) -p "Timer Manager TIMER_RESET - Reset an interval timer" \ - -u "Top" \ - -n "Message Manager" ${*}.t - -msg.texi: msg.t - $(BMENU) -p "Semaphore Manager SEMAPHORE_FLUSH - Unblock all tasks waiting on a semaphore" \ - -u "Top" \ - -n "Event Manager" ${*}.t - -event.texi: event.t - $(BMENU) \ - -p "Message Manager MESSAGE_QUEUE_FLUSH - Flush all messages on a queue" \ - -u "Top" \ - -n "Signal Manager" ${*}.t - -signal.texi: signal.t - $(BMENU) -p "Event Manager EVENT_RECEIVE - Receive event condition" \ - -u "Top" \ - -n "Partition Manager" ${*}.t - -part.texi: part.t - $(BMENU) -p "Signal Manager SIGNAL_SEND - Send signal set to a task" \ - -u "Top" \ - -n "Region Manager" ${*}.t - -region.texi: region.t - $(BMENU) \ --p "Partition Manager PARTITION_RETURN_BUFFER - Return buffer to a partition" \ - -u "Top" \ - -n "Dual-Ported Memory Manager" ${*}.t - -dpmem.texi: dpmem.t - $(BMENU) \ - -p "Region Manager REGION_GET_SEGMENT_SIZE - Obtain size of a segment" \ - -u "Top" \ - -n "I/O Manager" ${*}.t - -io.texi: io.t - $(BMENU) -p "Dual-Ported Memory Manager PORT_INTERNAL_TO_EXTERNAL - Convert internal to external address" \ - -u "Top" \ - -n "Fatal Error Manager" ${*}.t - -fatal.texi: fatal.t - $(BMENU) -p "I/O Manager IO_CONTROL - Special device services" \ - -u "Top" \ - -n "Scheduling Concepts" ${*}.t - -schedule.texi: schedule.t - $(BMENU) \ --p "Fatal Error Manager FATAL_ERROR_OCCURRED - Invoke the fatal error handler" \ - -u "Top" \ - -n "Rate Monotonic Manager" ${*}.t - -rtmon.texi: rtmon.t - $(BMENU) -p "Scheduling Concepts Task State Transitions" \ - -u "Top" \ - -n "Board Support Packages" ${*}.t - -bsp.texi: bsp.t - $(BMENU) -p "Rate Monotonic Manager RATE_MONOTONIC_GET_STATUS - Obtain status information on period" \ - -u "Top" \ - -n "User Extensions Manager" ${*}.t - -userext.texi: userext.t - $(BMENU) -p "Board Support Packages Heterogeneous Systems" \ - -u "Top" \ - -n "Configuring a System" ${*}.t - -conf.texi: conf.t - $(BMENU) -p "User Extensions Manager EXTENSION_DELETE - Delete a extension set" \ - -u "Top" \ - -n "Multiprocessing Manager" ${*}.t - -mp.texi: mp.t - $(BMENU) -p "Configuring a System Sizing the RTEMS RAM Workspace" \ - -u "Top" \ - -n "Directive Status Codes" ${*}.t - -convert: - /usr/bin/gs -dMaxBitmap=300000000 -g5500x5500 -sDEVICE=pdfwrite -q -dNOPAUSE -dSAFER -sOutputFile=rtemspie.pdf -- rtemspie.eps -c -quit - /usr/bin/gs -dMaxBitmap=300000000 -g5500x5500 -sDEVICE=pdfwrite -q -dNOPAUSE -dSAFER -sOutputFile=states.pdf -- states.eps -c -quit diff --git a/doc/user/Makefile.am b/doc/user/Makefile.am new file mode 100644 index 0000000000..fc81acf71c --- /dev/null +++ b/doc/user/Makefile.am @@ -0,0 +1,157 @@ +# +# COPYRIGHT (c) 1988-1999. +# On-Line Applications Research Corporation (OAR). +# All rights reserved. +# +# $Id$ +# + +AUTOMAKE_OPTIONS = foreign + +PROJECT=c_user + +include $(top_srcdir)/project.am + +COMMON_FILES=$(top_srcdir)/common/cpright.texi + +FILES= bsp.texi dirstat.texi example.texi glossary.texi preface.texi + +GENERATED_FILES=overview.texi concepts.texi init.texi task.texi \ + intr.texi clock.texi timer.texi sem.texi msg.texi \ + event.texi signal.texi part.texi region.texi \ + dpmem.texi io.texi fatal.texi schedule.texi rtmon.texi \ + bsp.texi userext.texi conf.texi mp.texi + +info_TEXINFOS = c_user.texi +c_user_TEXINFOS = $(FILES) $(COMMON_FILES) $(GENERATED_FILES) + +PNG_FILES = rtemsarc.png rtemspie.png states.png +if USE_HTML +html_project_DATA += $(PNG_FILES) +endif + +#preface.texi: preface.t +# $(BMENU) -p "Top" \ +# -u "Top" \ +# -n "Overview" $< + +overview.texi: overview.t + $(BMENU) -p "Preface" \ + -u "Top" \ + -n "Key Concepts" $< + +concepts.texi: concepts.t + $(BMENU) -p "Overview Manual Organization" \ + -u "Top" \ + -n "Initialization Manager" $< + +init.texi: init.t + $(BMENU) -p "Key Concepts Memory Management" \ + -u "Top" \ + -n "Task Manager" $< + +task.texi: task.t + $(BMENU) -p "Initialization Manager SHUTDOWN_EXECUTIVE - Shutdown RTEMS" \ + -u "Top" \ + -n "Interrupt Manager" $< + +intr.texi: intr.t + $(BMENU) -p "Task Manager TASK_VARIABLE_DELETE - Remove per task variable" \ + -u "Top" \ + -n "Clock Manager" $< + +clock.texi: clock.t + $(BMENU) \ + -p "Interrupt Manager INTERRUPT_IS_IN_PROGRESS - Is an ISR in Progress" \ + -u "Top" \ + -n "Timer Manager" $< + +timer.texi: timer.t + $(BMENU) -p "Clock Manager CLOCK_TICK - Announce a clock tick" \ + -u "Top" \ + -n "Semaphore Manager" $< + +sem.texi: sem.t + $(BMENU) -p "Timer Manager TIMER_RESET - Reset an interval timer" \ + -u "Top" \ + -n "Message Manager" $< + +msg.texi: msg.t + $(BMENU) -p "Semaphore Manager SEMAPHORE_FLUSH - Unblock all tasks waiting on a semaphore" \ + -u "Top" \ + -n "Event Manager" $< + +event.texi: event.t + $(BMENU) \ + -p "Message Manager MESSAGE_QUEUE_FLUSH - Flush all messages on a queue" \ + -u "Top" \ + -n "Signal Manager" $< + +signal.texi: signal.t + $(BMENU) -p "Event Manager EVENT_RECEIVE - Receive event condition" \ + -u "Top" \ + -n "Partition Manager" $< + +part.texi: part.t + $(BMENU) -p "Signal Manager SIGNAL_SEND - Send signal set to a task" \ + -u "Top" \ + -n "Region Manager" $< + +region.texi: region.t + $(BMENU) \ +-p "Partition Manager PARTITION_RETURN_BUFFER - Return buffer to a partition" \ + -u "Top" \ + -n "Dual-Ported Memory Manager" $< + +dpmem.texi: dpmem.t + $(BMENU) \ + -p "Region Manager REGION_GET_SEGMENT_SIZE - Obtain size of a segment" \ + -u "Top" \ + -n "I/O Manager" $< + +io.texi: io.t + $(BMENU) -p "Dual-Ported Memory Manager PORT_INTERNAL_TO_EXTERNAL - Convert internal to external address" \ + -u "Top" \ + -n "Fatal Error Manager" $< + +fatal.texi: fatal.t + $(BMENU) -p "I/O Manager IO_CONTROL - Special device services" \ + -u "Top" \ + -n "Scheduling Concepts" $< + +schedule.texi: schedule.t + $(BMENU) \ +-p "Fatal Error Manager FATAL_ERROR_OCCURRED - Invoke the fatal error handler" \ + -u "Top" \ + -n "Rate Monotonic Manager" $< + +rtmon.texi: rtmon.t + $(BMENU) -p "Scheduling Concepts Task State Transitions" \ + -u "Top" \ + -n "Board Support Packages" $< + +bsp.texi: bsp.t + $(BMENU) -p "Rate Monotonic Manager RATE_MONOTONIC_GET_STATUS - Obtain status information on period" \ + -u "Top" \ + -n "User Extensions Manager" $< + +userext.texi: userext.t + $(BMENU) -p "Board Support Packages Heterogeneous Systems" \ + -u "Top" \ + -n "Configuring a System" $< + +conf.texi: conf.t + $(BMENU) -p "User Extensions Manager EXTENSION_DELETE - Delete a extension set" \ + -u "Top" \ + -n "Multiprocessing Manager" $< + +mp.texi: mp.t + $(BMENU) -p "Configuring a System Sizing the RTEMS RAM Workspace" \ + -u "Top" \ + -n "Directive Status Codes" $< + +noinst_DATA = \ +states.gif states.eps \ +rtemspie.gif rtemspie.eps + +EXTRA_DIST = *.t $(PNG_FILES) $(noinst_DATA) diff --git a/doc/user/rtemspie.pdf b/doc/user/rtemspie.pdf deleted file mode 100644 index ad64183eed..0000000000 Binary files a/doc/user/rtemspie.pdf and /dev/null differ diff --git a/doc/user/states.pdf b/doc/user/states.pdf deleted file mode 100644 index 490d2e00cd..0000000000 Binary files a/doc/user/states.pdf and /dev/null differ -- cgit v1.2.3