Codebase list frotz / 75ce7a8
Update upstream source from tag 'upstream/2.53+dfsg' Update to upstream version '2.53+dfsg' with Debian dir a68ea3e0654488a8f4abe7d842be225163fe968e Stephen Kitt 3 years ago
80 changed file(s) with 25283 addition(s) and 327 deletion(s). Raw diff Collapse all Expand all
0 Summary of changes between Frotz 2.52 and Frotz 2.53:
1 =====================================================
2
3 Frotz 2.53 was released on Saturday February 27, 2021.
4
5 This is a minor release focusing on minor enhancements and bug fixes.
6
7 NEW FEATURES
8
9 - -E option to choose how emphasised text is rendered.
10
11 - X11 interface has been added as a compile target.
12
13 - Added new default TrueType font for sfrotz.
14
15 - Automatically select the appropriate interpreter number for V6 games.
16
17 - Limited mouse support for curses interface.
18
19 BUG FIXES
20
21 - Corrected potential trouble with garbage in filenames for SDL
22 interface.
23
24 - Corrected a problem wherein @print_table would sometimes print garbage.
25
26 - Fixed a segfault problem when input buffers are abused.
27
28 - Double-clicks are now recognized in sfrotz and xfrotz.
29
30 - Fixed problem with spurious newline when a space triggers a word wrap.
31
32 - Fixed a problem with UTF-8 characters getting corrupted during line
33 editing.
34
35 - Fixed some problems with V3 games scribbling on the status line in
36 certain circumstances.
37
38 - Removed pre-C99 idioms and C++ comments in curses and core to benefit
39 older compilers. X11 is still pre-C99 clean. SDL interface is not
40 pre-C99-clean due to libSDL2 not being pre-C99-clean.
41
42 - Fixed a problem with the -x flag not properly expanding commands for
43 some Infocom games.
44
45
046 Summary of changes between Frotz 2.51 and Frotz 2.52:
147 =====================================================
248
5757 Frotz's Makefile now requires the use of GNU Make.
5858
5959
60 =======================
61 Installing a package ||
62 =======================
63
64 You have many choices available to you if you don't want to install
65 Frotz by compiling it yourself. All of the commonly-encountered
66 distributions of Linux include Frotz in their packaging systems. The
67 BSDs do so including FreeBSD, NetBSD, and OpenBSD.
68
69 For Macintosh, I recommend using Brew. With a single script, this
70 packaging system can be installed into a macOS system whereupon it can
71 be used to install Frotz. See https://brew.sh/ for more information.
72
73 Frotz can also be installed as a container using Docker. See
74 https://github.com/newtmitch/frotz-docker and
75 https://hub.docker.com/r/newtmitch/frotz
76
77
6078 =============
6179 Dumb Frotz ||
6280 =============
91109 * libpng-dev (1.6.x or higher)
92110 * libjpeg-dev (1.5.x or higher)
93111 * zlib1g-dev (1.2.x or higher)
112 Earlier versions of these libraries might work, but are untested.
113
114
115 ============
116 X11 Frotz ||
117 ============
118
119 X11 Frotz (aka xfrotz) was created by Daniel Schepler from around 1998 to
120 2000 based in Frotz 2.32. Like SDK Frotz, it languished for several years.
121 It does have rudimentary audio support for playback of Infocom's original
122 .snd audio file format and no Blorb support. It also supports rune
123 characters in Beyond Zork through .pcf fonts. This interface is not yet
124 ready. On startup, the screen has a tendency to be black. Saves and
125 restores also don't work -- doing so causes a segfault.
126
127
128 ================
129 Prerequisites ||
130 ================
131
132 Prerequisite packages for xfrotz:
133 * libx11 (1.6.7 or higher)
134 * libxt (1.1.5 or higher)
94135
95136 Prerequisite packages for sfrotz (macOS Homebrew nomenclature):
96137 * pkg-config (0.29 or higher)
116157 * png (1.6.x or higher)
117158 * jpeg (1.5.x or higher)
118159 * zlib (1.2.x or higher)
160
161 Earlier versions of these libraries might work, but are untested.
119162
120163
121164 =======================
1717 To compile DOS Frotz, you need the following:
1818 * Borland Turbo C++ 3.00. This is the latest version I'm aware
1919 of capable of building 16-bit DOS applications.
20 Alternatively, use Open Watcom C 2.0 beta, May 17 2020, or higher.
2021 * PC-DOS, MS-DOS, or DR-DOS version 5.0 or higher.
2122 FreeDOS 1.2 works well too.
2223
2324
24 ==============
25 Compilation ||
26 ==============
25 =============================
26 Compilation with Turbo C++ ||
27 =============================
2728
2829 Turbo C++ is typically installed to C:\tc. Make sure your path contains
2930 C:\tc\bin. When this is done, type "make". Did Borland's make program
5354 To clean up after a build, type "build clean".
5455
5556
57 ===============================================
58 Compilation with Open Watcom C hosted on DOS ||
59 ===============================================
60
61 You should be able to find an installer program for the DOS version of Open
62 Watcom at https://github.com/open-watcom/open-watcom-v2/releases ; it will
63 likely be under the name open-watcom-2_0-c-dos.exe.
64
65 Open Watcom is typically installed to C:\watcom. Make sure the environment
66 variable WATCOM points to the installation path, e.g.
67
68 set WATCOM=C:\watcom
69
70 When this is done, type "%WATCOM%\binw\dos4gw". Did the DOS/4GW program
71 run? If this command works, then you should be ready to compile.
72
73 To compile, you need to first get the source code into a DOS machine,
74 whether it's real or emulated. Do "make dos" to produce a zip file,
75 frotzsrc.zip, which can then be copied to your real or virtual DOS
76 machine.
77
78 To compile, open up this zip file and go into the frotzsrc directory and
79 type "owbuild". That will invoke "owbuild.bat", a batch file that sets some
80 environment variables and then executes "wmake -f makefile.ow". After about
81 a minute, you should have FROTZ.EXE. This file is all you need to run
82 Frotz. Put it somewhere in your path and go to wherever you keep your
83 Infocom games. Type "frotz zork1.dat" or whatever and there you go.
84
85 Compile-time options are set in src/owdos/defs.h. There should be no need
86 to edit Makefile.ow.
87
88 To clean up after a build, type "owbuild clean".
89
90
5691 ========================
5792 Hardware Requirements ||
5893 ========================
1616
1717 # Define where you want Frotz installed
1818 PREFIX ?= /usr/local
19 MANDIR ?= $(PREFIX)/share/man
19 MANDIR ?= $(MAN_PREFIX)/man
2020 BINDIR ?= $(PREFIX)/bin
2121 #BINDIR ?= $(PREFIX)/games
2222 MAN_PREFIX ?= $(PREFIX)/share
5050
5151 # Comment this out if your machine's version of curses doesn't support color.
5252 COLOR ?= yes
53
54 # Comment this out if your machine's version of curses doesn't support italic.
55 ITALIC ?= yes
5356
5457 # Select your chosen version of curses. Unless something old is going
5558 # on, ncursesw should be used because that's how UTF8 is supported.
206209 CURSES_DEFINE = USE_NCURSES_H
207210 endif
208211
212 MKFONTDIR ?= $(shell which mkfontdir)
213
209214 export CC
210215 export CFLAGS
211216 export CURSES_CFLAGS
213218 export MAKEFLAGS
214219 export AR
215220 export RANLIB
216 export PREFIX
217 export MANDIR
218221 export SYSCONFDIR
219222 export SDL_CFLAGS
220223 export COLOR
224 export ITALIC
221225 export SOUND_TYPE
222226 export NO_SOUND
223227
224228 NAME = frotz
225 VERSION = 2.52
229 VERSION = 2.53
226230 RELEASE_NOTES = "Official release."
227231
228232 # If we're working from git, we have access to proper variables. If
234238 GIT_HASH_SHORT = $(shell git rev-parse --short HEAD)
235239 GIT_DATE = $(shell git show -s --format=%ci)
236240 else
237 GIT_HASH = 79136f96fc929e824ad4118e00433f82ca1d133d
238 GIT_HASH_SHORT = 79136f9
239 GIT_DATE = 2020-05-10 16:51:48 -0700
241 GIT_HASH = 85a3a98dcbae0ee5aa036686a13b1088f7d6de17
242 GIT_HASH_SHORT = 85a3a98
243 GIT_DATE = 2021-02-27 16:50:16 -0800
240244 endif
241245 export CFLAGS
242246
262266 DOS_DIR = $(SRCDIR)/dos
263267 DOS_DEFINES = $(DOS_DIR)/defs.h
264268
269 OW_DOS_DIR = $(SRCDIR)/owdos
270 OW_DOS_DEFINES = $(OW_DOS_DIR)/defs.h
271
272 X11_DIR = $(SRCDIR)/x11
273 X11_LIB = $(X11_DIR)/frotz_x11.a
274 export X11_PKGS = x11 xt
275 X11_FONTDIR = $(DESTDIR)$(PREFIX)/share/fonts/X11/zork
276 X11_LDFLAGS = `pkg-config $(X11_PKGS) --libs` -lm
277
265278 SDL_DIR = $(SRCDIR)/sdl
266279 SDL_LIB = $(SDL_DIR)/frotz_sdl.a
267280 export SDL_PKGS = libpng libjpeg sdl2 SDL2_mixer freetype2 zlib
268281 SDL_LDFLAGS += $(shell $(PKG_CONFIG) $(SDL_PKGS) --libs) -lm
269282
270 SUBDIRS = $(COMMON_DIR) $(CURSES_DIR) $(SDL_DIR) $(DUMB_DIR) $(BLORB_DIR) $(DOS_DIR)
283 SUBDIRS = $(COMMON_DIR) $(CURSES_DIR) $(X11_DIR) $(SDL_DIR) $(DUMB_DIR) $(BLORB_DIR) $(DOS_DIR) $(OW_DOS_DIR)
271284 SUB_CLEAN = $(SUBDIRS:%=%-clean)
272285
273286 FROTZ_BIN = frotz$(EXTENSION)
274287 DFROTZ_BIN = dfrotz$(EXTENSION)
288 XFROTZ_BIN = xfrotz$(EXTENSION)
275289 SFROTZ_BIN = sfrotz$(EXTENSION)
276290 DOS_BIN = frotz.exe
277291
278292 FROTZ_LIBS = $(COMMON_LIB) $(CURSES_LIB) $(BLORB_LIB) $(COMMON_LIB)
279293 DFROTZ_LIBS = $(COMMON_LIB) $(DUMB_LIB) $(BLORB_LIB) $(COMMON_LIB)
294 XFROTZ_LIBS = $(COMMON_LIB) $(X11_LIB) $(BLORB_LIB) $(COMMON_LIB)
280295 SFROTZ_LIBS = $(COMMON_LIB) $(SDL_LIB) $(BLORB_LIB) $(COMMON_LIB)
281296
282297
331346 @echo "** Done building Frotz with dumb interface."
332347 @echo "** Blorb support $(BLORB_SUPPORT)"
333348
349 x11: $(XFROTZ_BIN)
350 $(XFROTZ_BIN): $(XFROTZ_LIBS)
351 $(CC) $+ -o $@$(EXTENSION) $(LDFLAGS) $(X11_LDFLAGS)
352 @echo "** Done building Frotz with X11 interface."
353
334354 sdl: $(SFROTZ_BIN)
335355 $(SFROTZ_BIN): $(SFROTZ_LIBS)
336356 $(CC) $+ -o $@$(EXTENSION) $(LDFLAGS) $(SDL_LDFLAGS)
337357 @echo "** Done building Frotz with SDL interface."
338358
339 dos: $(DOS_DEFINES) $(DOS_BIN)
340 $(DOS_BIN):
359 dos: $(DOS_BIN)
360 $(DOS_BIN): $(DOS_DEFINES) $(OW_DOS_DEFINES) $(HASH)
341361 ifneq ($(and $(wildcard $(GIT_DIR)),$(shell which git)),)
342362 @echo
343363 @echo " ** Cannot cross-compile for DOS yet."
344364 @echo " ** Copy this zip file, $(NAME)src.zip, into a DOS machine and use Turbo C."
345 @echo " ** A virtualized DOS machine will do. This zip file will fit on a single"
346 @echo " ** double-sided double-density 5.25-inch floppy disk. Read the file"
347 @echo " ** DOSBUILD.txt for more information."
365 @echo " ** or Open Watcom C. A virtualized DOS machine will do. This zip file"
366 @echo " ** will fit on a single double-sided double-density 5.25-inch floppy disk."
367 @echo " ** Read the file INSTALL_DOS for more information."
348368 @echo
349369 @git archive --format=zip --prefix $(NAME)src/ HEAD -o $(NAME)src.zip
350370 @zip -d $(NAME)src.zip $(NAME)src/src/curses/* \
351371 $(NAME)src/src/dumb/* $(NAME)src/src/blorb/* \
352372 $(NAME)src/src/sdl/* $(NAME)src/src/misc/* \
373 $(NAME)src/src/x11/* \
353374 $(NAME)src/doc/*.6 $(NAME)src/doc/frotz.conf* \
354375 $(NAME)src/doc/Xresources > /dev/null
355 @mkdir -p $(NAME)src/$(DOS_DIR)
376 @mkdir -p $(NAME)src/$(DOS_DIR) $(NAME)src/$(OW_DOS_DIR)
356377 @cp $(DOS_DEFINES) $(NAME)src/$(DOS_DIR)
357 @zip $(NAME)src.zip $(NAME)src/$(DOS_DEFINES) > /dev/null
378 @cp $(OW_DOS_DEFINES) $(NAME)src/$(OW_DOS_DIR)
379 @zip $(NAME)src.zip $(NAME)src/$(DOS_DEFINES) $(NAME)src/$(OW_DOS_DEFINES) > /dev/null
358380 @rm -rf $(NAME)src
359381
360382 else
361383 @echo "Not in a git repository or git command not found. Cannot make a tarball."
362384 endif
363385
364 all: $(FROTZ_BIN) $(DFROTZ_BIN) $(SFROTZ_BIN)
386 all: $(FROTZ_BIN) $(DFROTZ_BIN) $(SFROTZ_BIN) $(XFROTZ_BIN)
365387
366388 common_lib: $(COMMON_LIB)
367389 curses_lib: $(CURSES_LIB)
390 x11_lib: $(X11_LIB)
368391 sdl_lib: $(SDL_LIB)
369392 dumb_lib: $(DUMB_LIB)
370393 blorb_lib: $(BLORB_LIB)
376399 $(CURSES_LIB): $(COMMON_DEFINES) $(CURSES_DEFINES) $(HASH)
377400 $(MAKE) -C $(CURSES_DIR)
378401
379 $(SDL_LIB): $(COMMON_DEFINES) $(HASH)
402 $(X11_LIB): $(COMMON_DEFINES) $(HASH)
403 $(MAKE) -C $(X11_DIR)
404
405 $(SDL_LIB): $(COMMON_DEFINES) $(HASH) $(SDL_DIR)
380406 $(MAKE) -C $(SDL_DIR)
381407
382408 $(DUMB_LIB): $(COMMON_DEFINES) $(HASH)
434460 endif
435461
436462
437 dosdefs: $(DOS_DEFINES)
438 $(DOS_DEFINES):
463 dosdefs: $(DOS_DEFINES) $(OW_DOS_DEFINES)
464 $(DOS_DEFINES) $(OW_DOS_DEFINES):
439465 @echo "** Generating $@"
440466 @echo "#ifndef DOS_DEFINES_H" > $@
441467 @echo "#define DOS_DEFINES_H" >> $@
459485 @echo "** ERROR You need to pick a flavor of curses in the Makefile!"
460486 exit 1
461487 endif
462 ifdef USE_UTF8
488 ifeq ($(USE_UTF8), yes)
463489 ifneq ($(CURSES),ncursesw)
464490 ifndef MACOS
465491 @echo "** ERROR UTF-8 support only works with ncursesw!"
485511 ifdef COLOR
486512 @echo "#define COLOR_SUPPORT" >> $@
487513 endif
514 ifdef ITALIC
515 @echo "#define ITALIC_SUPPORT" >> $@
516 endif
488517 ifeq ($(USE_UTF8), yes)
489518 @echo "#define USE_UTF8" >> $@
490519 endif
510539 install_frotz: $(FROTZ_BIN)
511540 install -d $(DESTDIR)$(BINDIR)
512541 install -c -m 755 $(FROTZ_BIN) $(DESTDIR)$(BINDIR)
513 install -d $(DESTDIR)$(MAN_PREFIX)/man/man6
514 install -m 644 doc/frotz.6 $(DESTDIR)$(MAN_PREFIX)/man/man6/
542 install -d $(DESTDIR)$(MANDIR)/man6
543 install -m 644 doc/frotz.6 $(DESTDIR)$(MANDIR)/man6/
515544
516545 uninstall: uninstall_frotz
517546 uninstall_frotz:
518547 rm -f $(DESTDIR)$(BINDIR)/frotz
519 rm -f $(DESTDIR)$(MAN_PREFIX)/man6/frotz.6
548 rm -f $(DESTDIR)$(MANDIR)/man6/frotz.6
520549
521550 install_dumb: install_dfrotz
522551 install_dfrotz: $(DFROTZ_BIN)
523552 install -d $(DESTDIR)$(BINDIR)
524553 install -c -m 755 $(DFROTZ_BIN) $(DESTDIR)$(BINDIR)
525 install -d $(DESTDIR)$(MAN_PREFIX)/man/man6
526 install -m 644 doc/dfrotz.6 $(DESTDIR)$(MAN_PREFIX)/man/man6/
554 install -d $(DESTDIR)$(MANDIR)/man6
555 install -m 644 doc/dfrotz.6 $(DESTDIR)$(MANDIR)/man6/
527556
528557 uninstall_dumb: uninstall_dfrotz
529558 uninstall_dfrotz:
530559 rm -f $(DESTDIR)$(BINDIR)/dfrotz
531 rm -f $(DESTDIR)$(MAN_PREFIX)/man/man6/dfrotz.6
560 rm -f $(DESTDIR)$(MANDIR)/man6/dfrotz.6
561
562 install_x11: install_xfrotz
563 install_xfrotz: $(XFROTZ_BIN)
564 install -d "$(DESTDIR)$(PREFIX)/bin" "$(DESTDIR)$(MANDIR)/man6"
565 install "$(XFROTZ_BIN)" "$(DESTDIR)$(PREFIX)/bin/"
566 install -m 644 doc/xfrotz.6 "$(DESTDIR)$(MANDIR)/man6/"
567 install -d "$(X11_FONTDIR)"
568 install -m 644 "$(X11_DIR)/Zork_r400-10.pcf" "$(X11_FONTDIR)"
569 install -m 644 "$(X11_DIR)/Zork_r400-11.pcf" "$(X11_FONTDIR)"
570 install -m 644 "$(X11_DIR)/Zork_r400-13.pcf" "$(X11_FONTDIR)"
571 install -m 644 "$(X11_DIR)/Zork_r400-16.pcf" "$(X11_FONTDIR)"
572 install -m 644 "$(X11_DIR)/Zork_r400-20.pcf" "$(X11_FONTDIR)"
573 $(MKFONTDIR) $(X11_FONTDIR)
574
575 uninstall_x11: uninstall_xfrotz
576 uninstall_xfrotz:
577 rm -f "$(DESTDIR)$(PREFIX)/bin/xfrotz"
578 rm -f "$(DESTDIR)$(MANDIR)/man6/xfrotz.6"
579 rm -f "$(X11_FONTDIR)/Zork_r400-10.pcf"
580 rm -f "$(X11_FONTDIR)/Zork_r400-11.pcf"
581 rm -f "$(X11_FONTDIR)/Zork_r400-13.pcf"
582 rm -f "$(X11_FONTDIR)/Zork_r400-16.pcf"
583 rm -f "$(X11_FONTDIR)/Zork_r400-20.pcf"
584 rm -f "$(X11_FONTDIR)/fonts.dir"
585 find $(X11_FONTDIR) -type d -depth -empty -exec rmdir "{}" \;
532586
533587 install_sdl: install_sfrotz
534588 install_sfrotz: $(SFROTZ_BIN)
535589 install -d $(DESTDIR)$(BINDIR)
536590 install -c -m 755 $(SFROTZ_BIN) $(DESTDIR)$(BINDIR)
537 install -d $(DESTDIR)$(MAN_PREFIX)/man/man6
538 install -m 644 doc/sfrotz.6 $(DESTDIR)$(MAN_PREFIX)/man/man6/
591 install -d $(DESTDIR)$(MANDIR)/man6
592 install -m 644 doc/sfrotz.6 $(DESTDIR)$(MANDIR)/man6/
539593
540594 uninstall_sdl: uninstall_sfrotz
541595 uninstall_sfrotz:
542596 rm -f $(DESTDIR)$(BINDIR)/sfrotz
543 rm -f $(DESTDIR)$(MAN_PREFIX)/man/man6/sfrotz.6
544
545 install_all: install_frotz install_dfrotz install_sfrotz
546
547 uninstall_all: uninstall_frotz uninstall_dfrotz uninstall_sfrotz
597 rm -f $(DESTDIR)$(MANDIR)/man6/sfrotz.6
598
599 install_all: install_frotz install_dfrotz install_sfrotz install_xfrotz
600
601 uninstall_all: uninstall_frotz uninstall_dfrotz uninstall_sfrotz uninstall_xfrotz
548602
549603
550604 dist: $(NAME)-$(VERSION).tar.gz
578632 rm -rf $(COMMON_DEFINES) \
579633 $(CURSES_DEFINES) \
580634 $(DOS_DEFINES) \
635 $(OW_DOS_DEFINES) \
581636 $(HASH)
582637 rm -f FROTZ.BAK FROTZ.EXE FROTZ.LIB FROTZ.DSK *.OBJ
583638
584639 distclean: clean
585 rm -f frotz$(EXTENSION) dfrotz$(EXTENSION) sfrotz$(EXTENSION) a.out
640 rm -f frotz$(EXTENSION) dfrotz$(EXTENSION) sfrotz$(EXTENSION) xfrotz$(EXTENTION)
641 rm -f a.out
586642 rm -rf $(NAME)src $(NAME)$(DOSVER)
587643 rm -f $(NAME)*.tar.gz $(NAME)src.zip $(NAME)$(DOSVER).zip
588644
592648 @echo " nosound: the standard curses edition without sound support"
593649 @echo " dumb: for dumb terminals and wrapper scripts"
594650 @echo " sdl: for SDL graphics and sound"
595 @echo " all: build curses, dumb, and SDL versions"
651 @echo " x11: for X11 graphics"
652 @echo " all: build curses, dumb, SDL, and x11 versions"
596653 @echo " dos: Make a zip file containing DOS Frotz source code"
597654 @echo " install"
598655 @echo " uninstall"
599656 @echo " install_dumb"
600657 @echo " uninstall_dumb"
658 @echo " install_x11"
659 @echo " uninstall_x11"
601660 @echo " install_sdl"
602661 @echo " uninstall_sdl"
603662 @echo " install_all"
612671
613672 .PHONY: all clean dist dosdist curses ncurses dumb sdl hash help \
614673 common_defines dosdefs curses_defines nosound nosound_helper\
615 $(COMMON_DEFINES) $(DOS_DEFINES) $(CURSES_DEFINES) $(HASH) \
674 $(COMMON_DEFINES) $(DOS_DEFINES) $(OW_DOS_DEFINES) $(CURSES_DEFINES) \
675 $(HASH) \
616676 blorb_lib common_lib curses_lib dumb_lib \
617 install install_dfrotz install_sfrotz $(SUB_CLEAN)
677 install install_dfrotz install_sfrotz install_xfrotz $(SUB_CLEAN)
678 uninstall uninstall_dfrotz uninstall_sfrotz uninstall_xfrotz
0 # This file is used to build Frotz for DOS using Open Watcom C 2.0 beta.
1 # Written with Open Watcom MAKE Version 2.0 beta in mind.
2 # The resulting executable runs as a 16-bit program.
3 #
4
5 # It would be more convenient to use the POSIX-ish owcc wrapper to do
6 # compilation, but the DOS/4GW version of owcc (27 Aug 2020) likes to crash
7 # when trying to invoke wcc. (The Linux version has no problem.)
8 CC = wcc
9 CFLAGS = -bt=dos -ml -onatxl+ -0 -zq
10 AS = wasm
11 ASFLAGS = -bt=dos -ml -zq
12 LD = wlink
13 LDFLAGS = system dos option quiet,map=$(BINNAME:.exe=.map)
14 WLIB = wlib
15 # Use a wmake internal command to delete individual files. This works on
16 # both MS-DOS and Linux build systems.
17 RM = %erase
18
19 BINNAME = frotz.exe
20
21 VERSION = "2.53"
22
23 # MS-DOS command.com and Unix sh have different shell quoting rules. Try to
24 # detect which one we are running under.
25 !ifdef %COMSPEC
26 !ifndef %SHELL
27 VER = -DVERSION=$(VERSION)
28 !endif
29 !endif
30 !ifdef %SHELL
31 !ifndef %COMSPEC
32 VER = -DVERSION='$(VERSION)'
33 !endif
34 !endif
35
36 OW_DOS_DIR = src/owdos
37 DOS_OBJECTS = $(OW_DOS_DIR)/owinit.o
38 DOS_OBJECTS += $(OW_DOS_DIR)/owinput.o
39 DOS_OBJECTS += $(OW_DOS_DIR)/owmouse.o
40 DOS_OBJECTS += $(OW_DOS_DIR)/owpic.o
41 DOS_OBJECTS += $(OW_DOS_DIR)/owsample.o
42 DOS_OBJECTS += $(OW_DOS_DIR)/owscreen.o
43 DOS_OBJECTS += $(OW_DOS_DIR)/owtext.o
44 DOS_OBJECTS += $(OW_DOS_DIR)/owblorb.o
45 DOS_OBJECTS += $(OW_DOS_DIR)/owfix.o
46
47 CORE_DIR = src/common
48 CORE_OBJECTS = $(CORE_DIR)/buffer.o
49 CORE_OBJECTS += $(CORE_DIR)/fastmem.o
50 CORE_OBJECTS += $(CORE_DIR)/files.o
51 CORE_OBJECTS += $(CORE_DIR)/getopt.o
52 CORE_OBJECTS += $(CORE_DIR)/hotkey.o
53 CORE_OBJECTS += $(CORE_DIR)/input.o
54 CORE_OBJECTS += $(CORE_DIR)/main.o
55 CORE_OBJECTS += $(CORE_DIR)/math.o
56 CORE_OBJECTS += $(CORE_DIR)/object.o
57 CORE_OBJECTS += $(CORE_DIR)/process.o
58 CORE_OBJECTS += $(CORE_DIR)/random.o
59 CORE_OBJECTS += $(CORE_DIR)/redirect.o
60 CORE_OBJECTS += $(CORE_DIR)/screen.o
61 CORE_OBJECTS += $(CORE_DIR)/sound.o
62 CORE_OBJECTS += $(CORE_DIR)/stream.o
63 CORE_OBJECTS += $(CORE_DIR)/table.o
64 CORE_OBJECTS += $(CORE_DIR)/text.o
65 CORE_OBJECTS += $(CORE_DIR)/variable.o
66 CORE_OBJECTS += $(CORE_DIR)/quetzal.o
67 CORE_OBJECTS += $(CORE_DIR)/err.o
68
69 all: frotz
70
71 .ERASE
72
73 .c: $(OW_DOS_DIR);$(CORE_DIR)
74 .asm: $(OW_DOS_DIR)
75
76 .c.o:
77 echo $(CFLAGS) -fo=$@ $< >$*.rsp
78 $(CC) $(VER) -i="$(OW_DOS_DIR)" -i="$(CORE_DIR)" @$*.rsp
79 $(RM) $*.rsp
80
81 .asm.o:
82 echo $(ASFLAGS) -fo=$@ $< >$*.rsp
83 $(AS) $(VER) -i="$(OW_DOS_DIR)" -i="$(CORE_DIR)" @$*.rsp
84 $(RM) $*.rsp
85
86 # Note: the `for' command is specially intercepted by wmake, and works like
87 # its namesake in MS-DOS command.com --- even when cross-building in Unix (!).
88 clean: .SYMBOLIC
89 for %i in ($(CORE_DIR)/*.o $(OW_DOS_DIR)/*.o) do -$(RM) %i
90 for %i in ($(CORE_DIR)/*.rsp $(OW_DOS_DIR)/*.rsp) do -$(RM) %i
91 for %i in (*.obj *.lib *.rsp *.exe *.bak *.map *.lnk) do -$(RM) %i
92
93 frotz: $(BINNAME) .SYMBOLIC
94
95 $(BINNAME): $(DOS_OBJECTS) $(CORE_OBJECTS)
96 echo $(LDFLAGS) name $(BINNAME) >$*.rsp
97 for %i in ($(DOS_OBJECTS) $(CORE_OBJECTS)) do echo file %i >>$*.rsp
98 $(LD) @$*.rsp
99 $(RM) $*.rsp
1313 BINNAME = frotz.exe
1414 LIBRARY = frotz.lib
1515
16 VERSION = "2.52"
16 VERSION = "2.53"
17 RELEASE_NOTES = "Official release."
1718
1819 VER = -DVERSION=$(VERSION)
1920
0 FROTZ V2.52 - An interpreter for all Infocom and other Z-machine games.
0 FROTZ V2.53 - An interpreter for all Infocom and other Z-machine games.
11 Complies with standard 1.0 of Graham Nelson's specification.
22
33 Originally written by Stefan Jokisch in 1995-1997.
1515 README.1st This file.
1616 TODO Stuff to do in no particular order.
1717
18 doc/ Manpages and sample config files.
18 doc/ Manpages, DOS documentation, and sample config files.
1919 public/ The Frotz webpage.
2020 src/ Source code to Frotz.
21 src/blorb Blorb library.
22 src/common The Frotz core code.
23 src/curses Curses user interface code.
24 src/dos MSDOS user interface code.
25 src/dumb Dumb user interface code.
26 src/misc Scripts and fonts.
27 src/owdos MSDOS (Open Watcom C) interface code (experimental).
28 src/sdl SDL user interface code.
29 src/test Zcode test programs.
30 src/x11 X11 user interface code.
00 .\" -*- nroff -*-
1 .TH DFROTZ 6 2.51
1 .TH DFROTZ 6 2.53
22 .SH NAME
33 dfrotz \- interpreter for Infocom and other Z-Machine games (dumb interface)
44
55
66 .SH SYNOPSIS
77 .B dfrotz
8 .RI [ options "] " "file " [ blorbfile "]"
8 .RI [ options "] " "file " [ blorb_file "]"
99
1010 At least one file must be specified on the command line. This can be
1111 either a plain Z-code file or a Blorb file. A Z-code file is a compiled
132132 Z-code.
133133
134134 .TP
135 .B \-r \exxx
136 Set runtime options. This option may be used repeatedly.
135 .B \-r xxx
136 Set runtime options. This option may be used repeatedly. See
137 \.B CONFIGURATION
138 below. There is no need to prepend a backslash.
137139
138140 .TP
139141 .B \-R <path>
234236 There are, for instance, specifically Amiga versions. The DECSystem-20
235237 was Infocom's own in-house mainframe.
236238
239 For Infocom's four V6 games, the interpreter number will be
240 automatically chosen based on the title and release number. Of course,
241 this can be overridden at the command line.
242
237243 Infocom used the following interpreter numbers:
238244
239245 .PP
528534 .PP
529535 Most distributions of Linux and BSD include Frotz in their package
530536 repositories.
537 .br
538 It is distributed under the GNU General Public License version 2 or (at
539 your option) any later version.
540 .br
541 .BR https://www.gnu.org/licenses/gpl-2.0.en.html
542 .br
543 This software is offered as-is with no warranty or liability. If you
544 find a bug or would like
545 .B Frotz
546 to do something it doesn't currently do, please visit the above Gitlab
547 website and report your concerns.
531548
532549
533550 .SH CAVEATS
0 FROTZ v2.52 - Infocom-style interactive
0 FROTZ v2.53 - Infocom-style interactive
11 fiction player. Plays all Z-machine games.
22 Compiled with Turbo C++ 3.0 in 16-bit mode
33 for maximum compatibility.
00 .\" -*- nroff -*-
1 .TH FROTZ 6 2.51
1 .TH FROTZ 6 2.53
22 .SH NAME
33 frotz \- interpreter for Infocom and other Z-Machine games
44
55
66 .SH SYNOPSIS
77 .B frotz
8 .RI [ options "] " "file " [ blorbfile "]"
8 .RI [ options "] " "file " [ blorb_file "]"
99
1010 At least one file must be specified on the command line. This can be
1111 either a plain Z-code file or a Blorb file. A Z-code file is a compiled
8585 sound effects, use this.
8686
8787 .TP
88 .B \-E <mode>
89 Emphasis mode. <mode> corresponds to one of three possible ways to
90 render emphasized text. Possible choices are as follows:
91 .br
92 .I italic underline none
93 .br
94 Infocom created an EMPHASIS_STYLE for the Z-machine, which was supposed
95 to make the text be underlined or be italicized. Exactly what to do is
96 left up to the interpreter. Some platforms/terminals could support
97 either, both of these, or neither. Underlining was more common than
98 italic. This option allows you to choose how EMPHASIS_STYLE is
99 displayed.
100
101 .TP
88102 .B \-f <colorname>
89103 Sets the default foreground color. <colorname> corresponds to one of the
90 Z-machine colors, which are as follows
104 Z-machine colors, which are as follows:
91105 .br
92106 .I black red green yellow blue magenta cyan white
93107 .br
129143 .TP
130144 .B \-L <filename>
131145 When the game starts, load this saved game file.
146
147 .TP
148 .B \-m
149 Enable mouse support. Naturally, this is quite limited, but it's
150 available for anyone who wants to experiment with it. When active, the
151 mouse cannot be used to copy text from the terminal.
132152
133153 .TP
134154 .B \-o
298318 There are, for instance, specifically Amiga versions. The DECSystem-20
299319 was Infocom's own in-house mainframe.
300320
321 For Infocom's four V6 games, the interpreter number will be
322 automatically chosen based on the title and release number. Of course,
323 this can be overridden at the command line.
324
301325 Infocom used the following interpreter numbers:
302326
303327 .PP
664688
665689 .SH FURTHER INFORMATION
666690 .PP
667 The Frotz homepage is at https://661.org/proj/if/frotz/.
691 The
692 .B Frotz
693 homepage is at https://661.org/proj/if/frotz/.
668694 .PP
669695 A
670696 .BR git(1)
681707 .br
682708 http://www.ifarchive.org/
683709 .PP
684 Most distributions of Linux and BSD include Frotz in their package
685 repositories.
710 Most distributions of Linux and BSD include
711 .B Frotz
712 in their package repositories.
713 .br
714 It is distributed under the GNU General Public License version 2 or (at
715 your option) any later version.
716 .br
717 .BR https://www.gnu.org/licenses/gpl-2.0.en.html
718 .br
719 This software is offered as-is with no warranty or liability. If you
720 find a bug or would like
721 .B Frotz
722 to do something it doesn't currently do, please visit the above Gitlab
723 website and report your concerns.
686724
687725
688726 .SH CAVEATS
0 FROTZ V2.51
0 FROTZ V2.53
11 An interpreter for all Infocom and other Z-Machine games.
22 Complies with standard 1.0 of Graham Nelson's specification.
33
1414 source code and to report bugs, please see Frotz's Gitlab page at
1515 https://gitlab.com/DavidGriffith/frotz. The source can also be
1616 found at the Interactive Fiction Archive at http://ifarchive.org/
17
18 Frotz is distributed under the GNU General Public License version 2 or (at
19 your option) and later version.
20
21 https://www.gnu.org/licenses/gpl-2.0.en.html
22
23 This software is offered as-is with no warranty or liability. If you
24 find a bug or would like Frotz to do something it doesn't currently do,
25 please visit the above Gitlab website and report your concerns.
1726
1827
1928 Syntax: frotz [options] story-file
00 .\" -*- nroff -*-
1 .TH SFROTZ 6 2.51
1 .TH SFROTZ 6 2.53
22 .SH NAME
33 sfrotz \- interpreter for Infocom and other Z-Machine games (SDL interface)
44
55
66 .SH SYNOPSIS
77 .B sfrotz
8 .RI [ options "] " "file " [ blorbfile "]"
8 .RI [ options "] " "file " [ blorb_file "]"
99
1010 At least one file must be specified on the command line. This can be
1111 either a plain Z-code file or a Blorb file. A Z-code file is a compiled
8080 before prompting again. This switch specifies how many lines of text
8181 .B Frotz
8282 will hold over and display at the top of the next screen.
83
84 .TP
85 .B \-d
86 Disable color.
8387
8488 .TP
8589 .B \-f <colorname>
327331 There are, for instance, specifically Amiga versions. The DECSystem-20
328332 was Infocom's own in-house mainframe.
329333
334 For Infocom's four V6 games, the interpreter number will be
335 automatically chosen based on the title and release number. Of course,
336 this can be overridden at the command line.
337
330338 Infocom used the following interpreter numbers:
331339
332340 .PP
790798 Most distributions of Linux and BSD include
791799 .B Frotz
792800 in their package repositories.
801 .br
802 It is distributed under the GNU General Public License version 2 or (at
803 your option) any later version.
804 .br
805 .BR https://www.gnu.org/licenses/gpl-2.0.en.html
806 .br
807 This software is offered as-is with no warranty or liability. If you
808 find a bug or would like
809 .B Frotz
810 to do something it doesn't currently do, please visit the above Gitlab
811 website and report your concerns.
793812
794813
795814 .SH CAVEATS
0 .TH XFROTZ 6 2.53
1 .SH NAME
2 xfrotz \- interpreter for Infocom and other Z-Machine games (X11 interface)
3
4
5 .SH SYNOPSIS
6 .B xfrotz
7 .I "[options] file"
8
9
10 .SH DESCRIPTION
11 The \fIxfrotz\fP program is an Xlib-based interpreter for Z-machine
12 code, the byte code used by Infocom games and, more recently, Inform.
13 .I xfrotz
14 supports versions 1 through 8 of the format. It uses the standard
15 Quetzal format for its saved games.
16
17 .I Xfrotz
18 supports Version 6 graphical games. It currently supports
19 color, graphics (in the
20 .B .mg1
21 format only) by way of Blorb archives or by parsing Infocom's original
22 files. Sound is supported through OSS.
23
24
25 .SH OPTIONS
26 In each of the following options which enables some feature, replacing
27 .B \-
28 with
29 .B \+
30 explicitly disables that feature, overriding any X resources. Also,
31 each option has a corresponding X resource, which is listed in
32 parentheses after the option name.
33 .TP
34 .B \-aa
35 (class \fBWatchAttribute\fP, name \fBwatchAttrAssign\fP)
36 Enables watching of attribute assignment.
37 .TP
38 .B \-at
39 (class \fBWatchAttribute\fP, name \fBwatchAttrTest\fP)
40 Enables watching of attribute testing.
41 .TP
42 .BI \-bg " color"
43 (class \fBBackground\fP, name \fBbackground\fP)
44 Sets the default background color. In addition to the standard X
45 color specification formats,
46 .I xfrotz
47 supports the format \fBz:\fP\fInum\fP, which refers to a z-machine
48 color from 2 to 9.
49 .TP
50 .BI \-c " number"
51 (class \fBContextLines\fP, name \fBcontextLines\fP)
52 Specifies the number of context lines used. When scrolling large
53 amounts of text,
54 .I xfrotz
55 pauses after each screenful with a ``[MORE]'' prompt; this option
56 specifies how many lines of a previous screen
57 .I xfrotz
58 will keep at the top of the next screen.
59 .TP
60 .BI \-fg " color"
61 (class \fBForeground\fP, name \fBforeground\fP)
62 Sets the default foreground color. See \fB\-bg\fP above.
63 .TP
64 .BI \-fn[\-z|[f][b][i]] " font name"
65 (class \fBFont\fP, name \fBfont[Z|[F][B][I]]\fP)
66 Sets the fonts to be used for various styles. For example,
67 \fB\-fn\-fbi\fP sets the font for fixed, bold, italic text, and
68 \fB\-fn\-z\fP sets the z-machine ``picture font,'' which is used in
69 \fIBeyond Zork\fP and \fIJourney\fP.
70 .TP
71 .B \-i
72 (class \fBIgnoreErrors\fP, name \fBignoreErrors\fP)
73 Ignore runtime errors. This can be useful when running
74 .I xfrotz
75 with buggy story files which cause fatal errors.
76 .TP
77 .BI \-lm " number"
78 (class \fBMargin\fP, name \fBleftMargin\fP)
79 Sets the left margin.
80 .TP
81 .B \-ol
82 (class \fBWatchObject\fP, name \fBwatchObjLocating\fP)
83 Enables watching of testing the location of objects.
84 .TP
85 .B \-om
86 (class \fBWatchObject\fP, name \fBWatchObjMovement\fP)
87 Enables watching of object movement.
88 .TP
89 .B \-p
90 (class \fBPiracy\fP, name \fBpiracy\fP)
91 Enable branching on the
92 .I @piracy
93 opcode. This opcode is seldom used.
94 .TP
95 .BI \-rm " number"
96 (class \fBMargin\fP, name \fBrightMargin\fP)
97 Sets the right margin.
98 .TP
99 .BI \-rs " number"
100 (class \fBRandomSeed\fP, name \fBrandomSeed\fP)
101 Set the random seed. By default, the random number generator is
102 initialized based on the system clock; this allows you to make the
103 random number generator predictable, for use in recorded scripts or
104 debugging.
105 .TP
106 .BI \-sc " number"
107 (class \fBScriptColumns\fP, name \fBscriptColumns\fP)
108 Set the transcript width (default 80). Set to 0 to disable line
109 splitting in transcripts.
110 .TP
111 .B \-t
112 (class \fBTandy\fP, name \fBtandy\fP)
113 Set the z-machine's Tandy bit, which affects the behavior of certain
114 Infocom games. For example, \fIZork I\fP pretends not to have
115 sequels, and \fIWitness\fP has its language censored.
116 .TP
117 .BI \-u " number"
118 (class \fBUndoSlots\fP, name \fBundoSlots\fP)
119 Set the number of undo slots available. The default number is 25.
120 Note that many Infocom games do not support an ``undo'' command, and
121 most Inform games do not allow more than one ``undo'' at a time.
122 Because of this, you may need to use the undo hotkey instead (see
123 below).
124 .TP
125 .B \-x
126 (class \fBExpandAbbrevs\fP, name \fBexpandAbbrevs\fP)
127 With this option enabled,
128 .I xfrotz
129 expands ``x'' to ``examine,'' ``o'' to ``oops,'' and ``g'' to
130 ``again.'' This is convenient when running certain Infocom games
131 which do not implement these abbreviations.
132 .TP
133 .BI \-xrm " resources"
134 This allows setting resources on the command line.
135 .TP
136 .BI \-zs " level"
137 (class \fBZStrict\fP, name \fBzStrict\fP)
138 Set the reporting level of ``Vile Zero Error From Hell'' bugs. The
139 possible levels are: 0 to print no error messages, 1 to print just one
140 error message and ignore subsequent errors (the default), 2 to print
141 all error messages, or 3 to exit with a fatal error. Symbolic values
142 of \fBnever\fP, \fBonce\fP, \fBalways\fP, and \fBfatal\fP,
143 respectively, are also accepted.
144 .SH RESOURCES
145 \fIxfrotz\fP's resource class is ``XFrotz'', and its resource name is
146 the base name by which it was invoked, usually ``xfrotz''. In
147 addition to the X resources listed above, there is one more set of
148 resources: by setting \fBcolor\fP\fInum\fP (class name
149 \fBColor\fP\fInum\fP) to the name of a color, you can change the
150 meaning of the z-machine colors. Note that here the \fBz:\fP\fBnum\fP
151 syntax is not accepted.
152 .SH ENVIRONMENT
153 .I xfrotz
154 supports the INFOCOM_PATH environment variable. This is a
155 colon-separated list of pathnames in which
156 .I xfrotz
157 will search for the given story file. Note that
158 .I xfrotz
159 will expect the
160 .I story.mg1
161 file and the
162 .I sounds
163 directory to be in the same directory as it finds the story file.
164 .SH HOTKEYS
165 .I xfrotz
166 supports several ``hotkeys,'' which interrupt the currently running
167 game to set options or perform certain actions.
168 .TP
169 .B Mod1\+D
170 Sets debugging options by prompting the user. These options are
171 equivalent to specifying \fB\-aa\fP, \fB\-at\fP, \fB\-ol\fP, and
172 \fB\-om\fP on the command line.
173 .TP
174 .B Mod1\+H
175 Lists available hotkeys.
176 .TP
177 .B Mod1\+N
178 Starts a new game. Equivalent to the \fIrestart\fP command supported
179 by most games.
180 .TP
181 .B Mod1\+P
182 Starts or stops playback from a recorded script.
183 .TP
184 .B Mod1\+R
185 Starts or stops recording player input into a file.
186 .TP
187 .B Mod1\+S
188 Sets the random number generator seed.
189 .TP
190 .B Mod1\+U
191 Undoes one turn.
192 .TP
193 .B Mod1\+X
194 Exits the currently running game.
195
196
197 .SH FURTHER INFORMATION
198 .PP
199 The
200 .B Frotz
201 homepage is at https://661.org/proj/if/frotz/.
202 .PP
203 The bleeding edge of Frotz development may be followed there.
204 .PP
205 The Interactive Fiction Archive is a good place to find games to play
206 with Frotz. Various ports and builds for Frotz may also be found here.
207 Here is its URL:
208 .br
209 http://www.ifarchive.org/
210 .PP
211 Most distributions of Linux and BSD include
212 .B Frotz
213 in their package repositories.
214 .br
215 It is distributed under the GNU General Public License version 2 or (at
216 your option) any later version.
217 .br
218 .BR https://www.gnu.org/licenses/gpl-2.0.en.html
219 .br
220 This software is offered as-is with no warranty or liability. If you
221 find a bug or would like
222 .B Frotz
223 to do something it doesn't currently do, please visit the above Gitlab
224 website and report your concerns.
225
226
227 .SH CAVEATS
228 .PP
229 This manpage is not intended to tell users HOW to play interactive
230 fiction. Refer to the file HOW_TO_PLAY included in the Unix Frotz
231 documentation or visit one of the following sites:
232 .br
233 http://www.microheaven.com/ifguide/
234 .br
235 http://www.brasslantern.org/beginners/
236 .br
237 http://www.musicwords.net/if/how_to_play.htm
238 .br
239 http://ifarchive.org/
240
241
242 .SH BUGS
243 If run on an 8-bit display,
244 .I xfrotz
245 will most likely leak the entire color palette, especially if
246 displaying graphics.
247
248 The window size is fixed at 800x600, with pictures scaled to match;
249 this scaling is hard coded. Also,
250 .I xfrotz
251 depends on backing store instead of saving the screen's state.
252
253 If different fonts have different heights, the display might look a
254 bit strange, and things might not line up as they should. This is
255 especially apparent in menus.
256
257 In order to change the fonts used, you would usually have to specify
258 at least 4 fonts (for normal, bold, italic, and bold italic). This is
259 extremely cumbersome.
260
261
262 .SH AUTHORS
263 .I frotz
264 was written by Stefan Jokisch in 1995-7.
265 .I xfrotz
266 is an Xlib port written by Daniel Schepler, based in part on the Unix
267 port by Galen Hazelwood and on WinFrotz by Rich Lawrence.
268 .br
269 The Unix port is currently maintained by David Griffith <dave@661.org>
270
271 .SH SEE ALSO
272 .BR frotz (6)
273 .BR sfrotz (6)
274 .BR nitfol (6)
275 .BR rezrov (6)
276 .BR jzip (6)
277 .BR xzip (6)
278 .BR inform (1)
279
00 Begin3
11 Title: Frotz
2 Version: 2.52
2 Version: 2.53
33 Entered-date: 2020-05-10
44 Description: An interpreter for all Infocom games and other Z-machine games.
55 Keywords: infocom, frotz, text-adventure, zork, z-machine
Binary diff not shown
0 @ECHO OFF
1 REM This batch file is for compiling Frotz using Open Watcom C for DOS.
2 if ""=="%WATCOM%" echo Cannot build --- WATCOM environment variable undefined!
3 if ""=="%WATCOM%" goto x
4 REM FIXME: this assumes PATH is correct if INCLUDE is set...
5 if ""=="%INCLUDE%" echo setting PATH=%WATCOM%\binw;%PATH%
6 if ""=="%INCLUDE%" set PATH=%WATCOM%\binw;%PATH%
7 if ""=="%INCLUDE%" echo setting INCLUDE=%WATCOM%\h
8 if ""=="%INCLUDE%" set INCLUDE=%WATCOM%\h
9 REM We are all set.
10 wmake -f makefile.ow %1
11 :x
2525 #include <string.h>
2626 #include "frotz.h"
2727
28 #ifdef MSDOS_16BIT
29
30 #include <alloc.h>
31
32 #define malloc(size) farmalloc (size)
33 #define realloc(size,p) farrealloc (size,p)
34 #define free(size) farfree (size)
35
36 #else
28 #ifndef MSDOS_16BIT
3729
3830 #include <stdlib.h>
3931
4234 #define SEEK_CUR 1
4335 #define SEEK_END 2
4436 #endif
45
46 #define far
47
37 #endif /* !MSDOS_16BIT */
38
39 #ifdef __WATCOMC__
40 zbyte huge *zmp = NULL;
41 zbyte huge *pcp = NULL;
42 #else
43 zbyte *zmp = NULL;
44 zbyte *pcp = NULL;
4845 #endif
4946
5047 extern void seed_random (int);
6966 /* char save_name[MAX_FILE_NAME + 1] = DEFAULT_SAVE_NAME; */
7067 char auxilary_name[MAX_FILE_NAME + 1] = DEFAULT_AUXILARY_NAME;
7168
72 zbyte far *zmp = NULL;
73 zbyte far *pcp = NULL;
74
7569 static FILE *story_fp = NULL;
7670
7771 /*
8074 * Nitfol interpreter.
8175 * Undo blocks are stored as differences between states.
8276 */
83
8477 typedef struct undo_struct undo_t;
8578 struct undo_struct {
8679 undo_t *next;
9386 /* undo diff and stack data follow */
9487 };
9588
96 static undo_t *first_undo = NULL, *last_undo = NULL, *curr_undo = NULL;
97 static zbyte *prev_zmp, *undo_diff;
89 static undo_t huge *first_undo = NULL, huge *last_undo = NULL,
90 huge *curr_undo = NULL;
91 static zbyte huge *prev_zmp, *undo_diff;
9892
9993 static int undo_count = 0;
94
95
96 #ifdef __WATCOMC__
97 void huge *zrealloc(void huge *p, long size, size_t old_size)
98 {
99 void huge *q = zmalloc(size);
100 if (q == NULL)
101 return NULL;
102 _fmemcpy(q, p, size < old_size ? size : old_size);
103 zfree(p);
104 return q;
105 }
106 #endif /* __WATCOMC__ */
100107
101108
102109 /*
155162
156163 SET_BYTE(H_CONFIG, z_header.config);
157164 SET_WORD(H_FLAGS, z_header.flags);
165
166 if (z_header.version == V6 && f_setup.interpreter_number == 0) {
167 if (story_id == JOURNEY) {
168 switch (z_header.release) {
169 case 26: f_setup.interpreter_number = INTERP_MACINTOSH; break;
170 case 30: f_setup.interpreter_number = INTERP_AMIGA; break;
171 case 77: f_setup.interpreter_number = INTERP_APPLE_IIE; break;
172 case 83: f_setup.interpreter_number = INTERP_MSDOS; break;
173 default: f_setup.interpreter_number = INTERP_AMIGA; break;
174 }
175 z_header.interpreter_number = f_setup.interpreter_number;
176 } else if (story_id == SHOGUN) {
177 switch (z_header.release) {
178 case 292: f_setup.interpreter_number = INTERP_MACINTOSH; break;
179 case 295: f_setup.interpreter_number = INTERP_AMIGA; break;
180 case 311: f_setup.interpreter_number = INTERP_APPLE_IIE; break;
181 case 322: f_setup.interpreter_number = INTERP_MSDOS; break;
182 default: f_setup.interpreter_number = INTERP_AMIGA; break;
183 }
184 z_header.interpreter_number = f_setup.interpreter_number;
185 } else if (story_id == ZORK_ZERO) {
186 switch (z_header.release) {
187 case 296: f_setup.interpreter_number = INTERP_MACINTOSH; break;
188 case 366: f_setup.interpreter_number = INTERP_AMIGA; break;
189 case 383: f_setup.interpreter_number = INTERP_APPLE_IIE; break;
190 case 393: f_setup.interpreter_number = INTERP_MSDOS; break;
191 default: f_setup.interpreter_number = INTERP_AMIGA; break;
192 }
193 z_header.interpreter_number = f_setup.interpreter_number;
194 } else if (story_id == ARTHUR) {
195 switch (z_header.release) {
196 case 54: f_setup.interpreter_number = INTERP_AMIGA; break;
197 case 64: f_setup.interpreter_number = INTERP_APPLE_IIE; break;
198 case 74: f_setup.interpreter_number = INTERP_MSDOS; break;
199 default: f_setup.interpreter_number = INTERP_AMIGA; break;
200 }
201 z_header.interpreter_number = f_setup.interpreter_number;
202 }
203 }
158204
159205 if (z_header.version >= V4) {
160206 SET_BYTE(H_INTERPRETER_NUMBER, z_header.interpreter_number);
306352 { SORCERER, 87, "860904" },
307353 { SPELLBREAKER, 63, "850916" },
308354 { SPELLBREAKER, 87, "860904" },
355 { PLANETFALL, 1, "830517" },
309356 { PLANETFALL, 20, "830708" },
310357 { PLANETFALL, 26, "831014" },
311358 { PLANETFALL, 29, "840118" },
409456 os_fatal("Cannot open story file");
410457
411458 /* Allocate memory for story header */
412 if ((zmp = (zbyte far *) malloc(64)) == NULL)
459 if ((zmp = (zbyte huge *) zmalloc(64)) == NULL)
413460 os_fatal("Out of memory");
414461
415462 /* Load header into memory */
487534 }
488535
489536 /* Allocate memory for story data */
490 if ((zmp = (zbyte far *) realloc(zmp, story_size)) == NULL)
537 if ((zmp = (zbyte huge *) zrealloc(zmp, story_size, 64)) == NULL)
491538 os_fatal("Out of memory");
492539
493540 /* Load story file in chunks of 32KB */
516563 */
517564 void init_undo(void)
518565 {
519 void far *reserved;
566 void huge *reserved;
520567
521568 reserved = NULL; /* makes compilers shut up */
522569
523570 if (reserve_mem != 0) {
524 if ((reserved = malloc(reserve_mem)) == NULL)
571 if ((reserved = zmalloc(reserve_mem)) == NULL)
525572 return;
526573 }
527574
528575 /* Allocate z_header.dynamic_size bytes for previous dynamic
529576 * zmp state + 1.5 z_header.dynamic_size for Quetzal diff + 2.
530577 */
531 prev_zmp = malloc(z_header.dynamic_size);
532 undo_diff = malloc(((unsigned long)z_header.dynamic_size * 3) / 2 + 2);
578 prev_zmp = zmalloc(z_header.dynamic_size);
579 undo_diff = zmalloc(((unsigned long)z_header.dynamic_size * 3) / 2 + 2);
533580 if ((undo_diff != NULL) && (prev_zmp != NULL)) {
534581 memmove (prev_zmp, zmp, z_header.dynamic_size);
535582 } else {
536583 f_setup.undo_slots = 0;
537 if (prev_zmp != NULL) free(prev_zmp);
538 if (undo_diff != NULL) free(undo_diff);
584 if (prev_zmp != NULL) zfree(prev_zmp);
585 if (undo_diff != NULL) zfree(undo_diff);
539586 }
540587
541588 if (reserve_mem != 0)
542 free(reserved);
589 zfree(reserved);
543590 } /* init_undo */
544591
545592
560607 if (curr_undo == first_undo)
561608 curr_undo = curr_undo->next;
562609 first_undo = first_undo->next;
563 free (p);
610 zfree (p);
564611 undo_count--;
565612 }
566613 if (first_undo)
584631
585632 if (undo_diff) {
586633 free_undo(undo_count);
587 free(undo_diff);
588 free(prev_zmp);
634 zfree(undo_diff);
635 zfree(prev_zmp);
589636 }
590637
591638 undo_diff = NULL;
593640 prev_zmp = NULL;
594641
595642 if (zmp)
596 free(zmp);
643 zfree(zmp);
597644 zmp = NULL;
598645 } /* reset_memory */
599646
752799 /* Close auxilary file */
753800 fclose (gfp);
754801 } else {
755
756 // long pc;
757 // zword release;
758 // zword addr;
759 // int i;
760
802 /*
803 * long pc;
804 * zword release;
805 * zword addr;
806 * int i;
807 */
761808 /* Get the file name */
762809 new_name = os_read_file_name(f_setup.save_name, FILE_RESTORE);
763810 if (new_name == NULL)
764811 goto finished;
765 free(f_setup.save_name);
812 zfree(f_setup.save_name);
766813 f_setup.save_name = strdup(new_name);
767814
768815 /* Open game file */
9791026 fclose(gfp);
9801027
9811028 } else {
982
983 // long pc;
984 // zword addr;
985 // zword nsp, nfp;
986 // int skip;
987 // int i;
988
1029 /*
1030 * long pc;
1031 * zword addr;
1032 * zword nsp, nfp;
1033 * int skip;
1034 * int i;
1035 */
9891036 /* Get the file name */
9901037 new_name = os_read_file_name(f_setup.save_name, FILE_SAVE);
9911038 if (new_name == NULL)
10291076 {
10301077 long diff_size;
10311078 zword stack_size;
1032 undo_t *p;
1079 undo_t huge *p;
10331080 long pc;
10341081
10351082 /* undo feature unavailable */
10541101 diff_size = mem_diff(zmp, prev_zmp, z_header.dynamic_size, undo_diff);
10551102 stack_size = stack + STACK_SIZE - sp;
10561103 do {
1057 p = malloc(sizeof (undo_t) + diff_size + stack_size * sizeof (*sp));
1104 p = zmalloc(sizeof (undo_t) + diff_size + stack_size * sizeof (*sp));
10581105 if (p == NULL)
10591106 free_undo(1);
10601107 } while (!p && undo_count);
88 #define FROTZ_H_
99
1010
11 /******************************************************************************/
12 /* MSDOS settings */
13 /******************************************************************************/
1114 /* For now we assume DOS Frotz is always 16-bit */
15 #if defined __TURBOC__ || defined __WATCOMC__
16 #define MSDOS_16BIT
17 #endif
18
19 #ifdef MSDOS_16BIT
1220 #ifdef __TURBOC__
13 #define MSDOS_16BIT
14 #endif
15
16 #ifdef MSDOS_16BIT
17 #include "..\dos\defs.h"
21 #include "../dos/defs.h"
22 #else
23 #include "../owdos/defs.h"
24 #endif
25
1826 #ifdef USE_UTF8
1927 #error UTF-8 is not supported in DOS Frotz
2028 #endif
21 #endif
22
23 #ifndef MSDOS_16BIT
24 #include "defs.h"
25 #include "git_hash.h"
26 #endif
29
30 #include <malloc.h>
31
32 #define zmalloc(size) halloc((size), 1)
33 #define zfree(p) hfree(p)
34
35 #ifdef __WATCOMC__
36 /*
37 * Open Watcom C's runtime library does not have a function to reallocate
38 * "huge" memory blocks --- unlike Borland Turbo C --- so we need to
39 * implement our own function to do that. (Luckily zrealloc is used only in
40 * one place in fastmem.c, which simplifies things somewhat.)
41 */
42 #define huge _huge
43 void huge *zrealloc(void huge *p, long size, size_t old_size);
44 #else
45 #define zrealloc(p, size, old_size) farrealloc((p), (size))
46 #endif
47
48 #endif /* MSDOS_16BIT */
49 /******************************************************************************/
50 /******************************************************************************/
2751
2852 #ifndef __UNIX_PORT_FILE
2953 #include <signal.h>
3054 typedef int bool;
3155 #endif /* __UNIX_PORT_FILE */
3256
57
58 /******************************************************************************/
59 /* For Amiga and Unix */
60 /******************************************************************************/
61 #ifndef MSDOS_16BIT
62
63 #include "defs.h"
64 #include "git_hash.h"
65
66 #define huge
67 #define zmalloc(size) malloc(size)
68 #define zfree(p) free(p)
69 #define zrealloc(p, size, old_size) realloc((p), (size))
70
71 #endif /* !MSDOS_16BIT */
72 /******************************************************************************/
73 /******************************************************************************/
74
75 /******************************************************************************/
76 /* For everything */
77 /******************************************************************************/
3378 #include <stdio.h>
3479
3580 #ifndef TRUE
5398 #endif /* !PATH_MAX */
5499
55100
56 #if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64) || defined (__CYGWIN__)
101 /* MSDOS and derived systems use a backslash for path separator */
102 #if defined(MSDOS_16BIT) || defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64) || defined (__CYGWIN__)
57103 #define PATH_SEPARATOR '\\'
58104 #else
59105 #define PATH_SEPARATOR '/'
365411 #define ZC_LATIN1_MAX 0xff
366412
367413 /*** File types ***/
368
369414 #define FILE_RESTORE 0
370415 #define FILE_SAVE 1
371416 #define FILE_SCRIPT 2
375420 #define FILE_SAVE_AUX 6
376421
377422 /*** Data access macros ***/
378
379423 #define SET_BYTE(addr,v) { zmp[addr] = v; }
380424 #define LOW_BYTE(addr,v) { v = zmp[addr]; }
381425 #define CODE_BYTE(v) { v = *pcp++; }
382426
427
428 /******************************************************************************/
429 /* Amiga macros */
430 /******************************************************************************/
383431 #if defined (AMIGA)
384432
385433 extern zbyte *pcp;
395443 #define GET_PC(v) { v = pcp - zmp; }
396444 #define SET_PC(v) { pcp = zmp + v; }
397445
398 #endif
399
446 #endif /* AMIGA */
447 /******************************************************************************/
448 /******************************************************************************/
449
450
451 /******************************************************************************/
452 /* MSDOS macros */
453 /******************************************************************************/
400454 #if defined (MSDOS_16BIT)
455
456 #define lo(v) ((zbyte *)&v)[0]
457 #define hi(v) ((zbyte *)&v)[1]
458
459 #ifdef __WATCOMC__
460
461 extern zbyte _huge *pcp;
462 extern zbyte _huge *zmp;
463
464 zword bswap16(zword x);
465 #pragma aux bswap16 = "xchg ah, al" parm [ax] value [ax];
466
467 /*
468 * TODO: make these more efficient (and still correct).
469 */
470 #define SET_WORD(addr, v) { *(zword _huge *)(zmp+(addr))=bswap16(v); }
471 #define LOW_WORD(addr, v) { (v)=bswap16(*(zword _huge *)(zmp+(addr))); }
472 #define HIGH_WORD(addr, v) { (v)=bswap16(*(zword _huge *)(zmp+(addr))); }
473 #define CODE_WORD(v) { (v)=bswap16(*(zword _huge *)pcp); pcp+=2; }
474 #define GET_PC(v) { (v) = pcp - zmp; }
475 #define SET_PC(v) { pcp = zmp + (v); }
476
477 #else /* !__WATCOMC__ */
478
401479 extern zbyte *pcp;
402480 extern zbyte *zmp;
403
404 #define lo(v) ((zbyte *)&v)[0]
405 #define hi(v) ((zbyte *)&v)[1]
406481
407482 /*
408483 * Turbo C has a strange limitation with passing members of structs to
416491 * struct members.
417492 *
418493 */
419
420494 #define SET_WORD(addr, v) do {\
421495 asm les bx,zmp;\
422496 asm add bx,addr;\
481555 mov word ptr pcp,bx;\
482556 mov word ptr pcp+2,ax }
483557
558 #endif /* !__WATCOMC__ */
559
484560 #endif /* MSDOS_16BIT */
485
486
561 /******************************************************************************/
562 /******************************************************************************/
563
564
565 /******************************************************************************/
566 /* Macros for neither Amiga nor MSDOS... that is Unix et al. */
567 /******************************************************************************/
487568 #if !defined (AMIGA) && !defined (MSDOS_16BIT)
488569
489570 extern zbyte *pcp;
500581 #define SET_PC(v) { pcp = zmp + v; }
501582
502583 #endif
584 /******************************************************************************/
585 /******************************************************************************/
503586
504587
505588 /*** Various data ***/
738821 void print_num(zword);
739822 void print_object(zword);
740823 void print_string(const char *);
824 void reset_window(void);
741825
742826 void stream_mssg_on(void);
743827 void stream_mssg_off(void);
761845
762846 void screen_new_line(void);
763847
764 #ifndef MSDOS_16BIT
765 #define cdecl
766 #endif
767
768 int cdecl zgetopt(int, char **, const char *);
848 int zgetopt(int, char **, const char *);
769849
770850 /*** returns the current window ***/
771851 Zwindow * curwinrec(void);
1010 #include <stdio.h>
1111 #include <string.h>
1212
13 #ifndef MSDOS_16BIT
14 #define cdecl
15 #endif
16
1713 int zoptind = 1;
1814 int zoptopt = 0;
1915 char *zoptarg = NULL;
2016
21 int cdecl zgetopt (int argc, char *argv[], const char *options)
17 int zgetopt (int argc, char *argv[], const char *options)
2218 {
2319 static int pos = 1;
2420 const char *p;
5050 print_string("@Attempt to address illegal object ");
5151 print_num(obj);
5252 print_string(". This is normally fatal.");
53 new_line();
53 reset_window();
5454 runtime_error (ERR_ILL_OBJ);
5555 }
5656
2121 #include <string.h>
2222 #include "frotz.h"
2323
24 #ifdef MSDOS_16BIT
25
26 #include <alloc.h>
27 #include <dos.h>
28
29 #define malloc(size) farmalloc (size)
30 #define realloc(size,p) farrealloc (size,p)
31 #define free(size) farfree (size)
32
33 #else
24 #ifndef MSDOS_16BIT
3425
3526 #include <stdlib.h>
3627
3930 #define SEEK_CUR 1
4031 #define SEEK_END 2
4132 #endif
42
43 #define far
4433
4534 #endif
4635
292281 tmpl >>= 8; /* Shift to get PC value. */
293282 --tmpl; /* Point at result byte. */
294283 /* Sanity check on result variable... */
295 #ifdef MSDOS_16BIT
296 if (tmpl > 0xffffL) {
297 zbyte far *zmp2;
298 zmp2 = MK_FP(FP_SEG(zmp) + (unsigned)(tmpl >> 16) * 0x1000,
299 FP_OFF(zmp));
300 x -= zmp2[tmpl & 0xffff];
301 } else {
302 x -= zmp[tmpl];
303 }
304 if (x != 0) {
305 #else
306284 if (zmp[tmpl] != (zbyte) x) {
307 #endif
308285 print_string
309286 ("Save-file has wrong variable number on stack (possibly wrong game version?)\n");
310287 return fatal;
572549
573550 switch (p[0] & 0xF000) { /* Check type of call. */
574551 case 0x0000: /* Function. */
575 #ifdef MSDOS_16BIT
576 if (pc > 0xffffL) {
577 zbyte far *zmp2;
578 zmp2 = MK_FP(FP_SEG(zmp) + (unsigned)(pc >> 16) * 0x1000,
579 FP_OFF(zmp));
580 var = zmp2[pc & 0xffff];
581 } else {
582 var = zmp[pc];
583 }
584 #else
585552 var = zmp[pc];
586 #endif
587553 pc = ((pc + 1) << 8) | nvars;
588554 break;
589555 case 0x1000: /* Procedure. */
330330 {
331331 int width;
332332
333 bool last_char_space = FALSE;
334
333335 if (discarding)
334336 return;
335337
337339 screen_char(*s++);
338340
339341 if (units_left() < (width = os_string_width(s))) {
342 if (s[os_string_width(s)-1] == ' ')
343 last_char_space = TRUE;
344
340345 if (!enable_wrapping) {
341346 zchar c;
342347 while ((c = *s++) != 0) {
358363 if (cwin == 0)
359364 Justifiable();
360365 #endif
361
362 screen_new_line();
366 if (!last_char_space)
367 screen_new_line();
363368 }
364369 os_display_string(s);
365370 cwp->x_cursor += width;
424429 zchar console_read_input(int max, zchar * buf, zword timeout, bool continued)
425430 {
426431 zchar key;
427 int i;
432 int i, min_prompt_space;
433
434 if (story_id == LGOP)
435 min_prompt_space = 8;
436 else
437 min_prompt_space = 10;
428438
429439 /* Make sure there is some space for input */
430 if (cwin == 0 && units_left() + os_string_width(buf) < 10 * font_width)
440 if (cwin == 0 && units_left() + os_string_width(buf) < min_prompt_space * font_width)
431441 screen_new_line();
432442
433443 /* Make sure the input line is visible */
436446
437447 input_window = cwin;
438448 input_redraw = FALSE;
449
450 /* Check for buffer contents not shown on the screen (game error). */
451 if (cwp->x_cursor <= os_string_width(buf))
452 os_fatal("Game uses inconsistent input buffer");
439453
440454 /* Get input line from IO interface */
441455 cwp->x_cursor -= os_string_width(buf);
11621176
11631177
11641178 /*
1165 * z_print_table, print ASCII text in a rectangular area.
1179 * z_print_table, print ZSCII text in a rectangular area.
11661180 *
11671181 * zargs[0] = address of text to be printed
11681182 * zargs[1] = width of rectangular area
12051219
12061220 LOW_BYTE(addr, c)
12071221 addr++;
1208 print_char(c);
1222 print_char(translate_from_zscii(c));
12091223 }
12101224 addr += zargs[3];
12111225 }
17951809 {
17961810 return cwp - wp;
17971811 } /* get_current_window */
1812
1813
1814 /*
1815 * reset_window
1816 *
1817 * This should be used to stop error messages from repeatedly scribbling
1818 * over the status line.
1819 *
1820 */
1821 void reset_window(void)
1822 {
1823 set_window(0);
1824 new_line();
1825 }
1111 FORMAT_UNKNOWN,
1212 FORMAT_DISABLED,
1313 FORMAT_IRC,
14 FORMAT_ANSI
14 FORMAT_ANSI,
15 FORMAT_BBCODE
1516 } format_t;
1617
1718 typedef struct frotz_setup_struct {
322322 if (timeout != 0) {
323323 if (direct_call(routine) == 0)
324324 goto continue_input;
325 else
326 buf[0] = 0;
325327 } else {
326328 goto continue_input;
327329 }
234234 */
235235 static void encode_text(int padding)
236236 {
237 static zchar again[] = { 'a', 'g', 'a', 'i', 'n', 0 };
238 static zchar examine[] = { 'e', 'x', 'a', 'm', 'i', 'n', 'e', 0 };
239 static zchar wait[] = { 'w', 'a', 'i', 't', 0 };
237 /* Pad expansions to same size as decoded[] (10) */
238 static zchar again[] = { 'a', 'g', 'a', 'i', 'n', 0, 0, 0, 0, 0 };
239 static zchar examine[] = { 'e', 'x', 'a', 'm', 'i', 'n', 'e', 0, 0, 0 };
240 static zchar wait[] = { 'w', 'a', 'i', 't', 0, 0, 0, 0, 0, 0 };
240241
241242 zbyte zchars[12];
242243 const zchar *ptr = decoded;
2727 #include <stdio.h>
2828 #include <stdlib.h>
2929 #include <string.h>
30 #include <pthread.h>
3130 #include <assert.h>
32 #include <unistd.h> //pread
31 #include <unistd.h> /* pread */
3332
3433 #include "ux_defines.h"
3534
5150
5251 ux_sem_t sound_done; /* 1 if the sound is done */
5352
53 #include <pthread.h>
5454 #include <ao/ao.h>
5555 #include <sndfile.h>
5656 #include <samplerate.h>
161161 union {
162162 sound_stream_t *e;
163163 int i;
164 };
164 } data;
165165 } sound_event_t;
166166
167167 #define NUM_VOICES 8
643643 /* Handle event */
644644 if (ux_sem_trywait(&e->ev_pending) == 0) {
645645 if (e->event.type == EVENT_START_STREAM)
646 sound_enqueue_real(e,e->event.e);
646 sound_enqueue_real(e,e->event.data.e);
647647 else if (e->event.type == EVENT_STOP_STREAM)
648 sound_stop_id_real(e,e->event.i);
648 sound_stop_id_real(e,e->event.data.i);
649649 ux_sem_post(&e->ev_free);
650650 }
651651
767767 sound_stop_id(int id)
768768 {
769769 ux_sem_wait(&frotz_audio.ev_free);
770 frotz_audio.event.type = EVENT_STOP_STREAM;
771 frotz_audio.event.i = id;
770 frotz_audio.event.type = EVENT_STOP_STREAM;
771 frotz_audio.event.data.i = id;
772772 ux_sem_post(&frotz_audio.ev_pending);
773773 }
774774
793793 sound_enqueue(sound_stream_t *s)
794794 {
795795 ux_sem_wait(&frotz_audio.ev_free);
796 frotz_audio.event.type = EVENT_START_STREAM;
797 frotz_audio.event.e = s;
796 frotz_audio.event.type = EVENT_START_STREAM;
797 frotz_audio.event.data.e = s;
798798 ux_sem_post(&frotz_audio.ev_pending);
799799 }
800800
5757 #define PIC_DATA 8
5858 #define PIC_COLOUR 11
5959
60 enum emph_mode {
61 EMPHASIS_ITALIC,
62 EMPHASIS_UNDERLINE,
63 EMPHASIS_NONE
64 };
65
66
67 #ifndef EMPHASIS_DEFAULT
68 #ifdef ITALIC_SUPPORT
69 #define EMPHASIS_DEFAULT EMPHASIS_ITALIC
70 #else
71 #define EMPHASIS_DEFAULT EMPHASIS_UNDERLINE
72 #endif
73 #endif
6074
6175 /* Paths where z-files may be found */
6276 #define PATH1 "ZCODE_PATH"
8498
8599 /*** Functions specific to the Unix port of Frotz ***/
86100 bool unix_init_pictures(void); /* ux_pic.c */
87 // void unix_init_scrollback(void); /* ux_screen.c */
88 // void unix_save_screen(int); /* ux_screen.c */
89 // void unix_do_scrollback(void); /* ux_screen.c */
101 /* void unix_init_scrollback(void); */ /* ux_screen.c */
102 /* void unix_save_screen(int); */ /* ux_screen.c */
103 /* void unix_do_scrollback(void); */ /* ux_screen.c */
90104 void unix_resize_display(void); /* ux_screen.c */
91105 void unix_suspend_program(void); /* ux_screen.c */
92106 void unix_get_terminal_size(void); /* ux_init.c */
6161 #define INFORMATION "\
6262 An interpreter for all Infocom and other Z-Machine games.\n\
6363 \n\
64 Syntax: frotz [options] story-file\n\
65 -a watch attribute setting \t -O watch object locating\n\
66 -A watch attribute testing \t -p plain ASCII output only\n\
67 -b <colorname> background color \t -P alter piracy opcode\n\
68 -c # context lines \t -q quiet (disable sound effects)\n\
69 -d disable color \t -r # right margin\n\
70 -e enable sound \t -R <path> restricted read/write\n\
64 Syntax: frotz [options] story-file [blorb file]\n\
65 -a watch attribute setting \t -o watch object movement\n\
66 -A watch attribute testing \t -O watch object locating\n\
67 -b <colorname> background color \t -p plain ASCII output only\n\
68 -c # context lines \t -P alter piracy opcode\n\
69 -d disable color \t -q quiet (disable sound effects)\n\
70 -e enable sound \t -r # right margin\n\
71 -E <style> emphasis style \t -R <path> restricted read/write\n\
7172 -f <colorname> foreground color \t -s # random number seed value\n\
7273 -F Force color mode \t -S # transcript width\n\
7374 -h # text height \t -t set Tandy bit\n\
7576 -I # interpreter number \t -v show version information\n\
7677 -l # left margin \t -w # text width\n\
7778 -L <file> load this save file \t -x expand abbreviations g/x/z\n\
78 -o watch object movement \t -Z # error checking (see below)\n"
79 -m enable mouse support \t -Z # error checking (see below)\n"
7980
8081 #define INFO2 "\
8182 Error checking: 0 none, 1 first only (default), 2 all, 3 exit after any error.\n\
9798 static void print_version(void);
9899 static int getconfig(char *);
99100 static int getbool(char *);
101 static int getemph(char *);
100102 static int getcolor(char *);
101103 static int geterrmode(char *);
102104 static FILE *pathopen(const char *, const char *, const char *);
195197 {
196198 int c;
197199 char *p = NULL;
198 /*
199 * FIXME: Remove this after K&R treatment
200 * FIXME: put this back before committing merge fixes
201 * char *blorb_ext = NULL;
202 */
203200 char *home;
204201 char configfile[FILENAME_MAX + 1];
205202
264261
265262 /* Parse the options */
266263 do {
267 c = zgetopt(argc, argv, "aAb:c:def:Fh:iI:l:L:oOpPqr:R:s:S:tu:vw:W:xZ:");
264 c = zgetopt(argc, argv, "aAb:c:deE:f:Fh:iI:l:L:moOpPqr:R:s:S:tu:vw:W:xZ:");
268265 switch(c) {
269266 case 'a': f_setup.attribute_assignment = 1; break;
270267 case 'A': f_setup.attribute_testing = 1; break;
279276 case 'c': f_setup.context_lines = atoi(zoptarg); break;
280277 case 'd': u_setup.disable_color = 1; break;
281278 case 'e': f_setup.sound = 1; break;
279 case 'E':
280 u_setup.emphasis_mode = getemph(zoptarg); break;
282281 case 'f':
283282 u_setup.foreground_color = getcolor(zoptarg);
284283 u_setup.force_color = 1;
299298 f_setup.restore_mode = 1;
300299 f_setup.tmp_save_name = strdup(zoptarg);
301300 break;
301 case 'm': u_setup.mouse_enabled = TRUE; break;
302302 case 'o': f_setup.object_movement = 1; break;
303303 case 'O': f_setup.object_locating = 1; break;
304304 case 'p': u_setup.plain_ascii = 1; break;
351351 *p = '\0'; /* extension removed */
352352
353353 /* Create nice default file names */
354 f_setup.script_name = malloc((strlen(f_setup.story_name) + strlen(EXT_SCRIPT)) * sizeof(char) + 1);
354 f_setup.script_name = malloc((strlen(f_setup.story_name) + strlen(EXT_SCRIPT) + 1) * sizeof(char));
355355 memcpy(f_setup.script_name, f_setup.story_name, (strlen(f_setup.story_name) + strlen(EXT_SCRIPT)) * sizeof(char));
356 strncat(f_setup.script_name, EXT_SCRIPT, strlen(EXT_SCRIPT) + 1);
357
358 f_setup.command_name = malloc((strlen(f_setup.story_name) + strlen(EXT_COMMAND)) * sizeof(char) + 1);
356 strncat(f_setup.script_name, EXT_SCRIPT, strlen(EXT_SCRIPT)+1);
357
358 f_setup.command_name = malloc((strlen(f_setup.story_name) + strlen(EXT_COMMAND) + 1) * sizeof(char));
359359 memcpy(f_setup.command_name, f_setup.story_name, (strlen(f_setup.story_name) + strlen(EXT_COMMAND)) * sizeof(char));
360 strncat(f_setup.command_name, EXT_COMMAND, strlen(EXT_COMMAND) + 1);
360 strncat(f_setup.command_name, EXT_COMMAND, strlen(EXT_COMMAND)+1);
361361
362362 if (!f_setup.restore_mode) {
363 f_setup.save_name = malloc((strlen(f_setup.story_name) + strlen(EXT_SAVE)) * sizeof(char) + 1);
363 f_setup.save_name = malloc((strlen(f_setup.story_name) + strlen(EXT_SAVE) + 1) * sizeof(char));
364364 memcpy(f_setup.save_name, f_setup.story_name, (strlen(f_setup.story_name) + strlen(EXT_SAVE)) * sizeof(char));
365365 strncat(f_setup.save_name, EXT_SAVE, strlen(EXT_SAVE) + 1);
366366 } else { /*Set our auto load save as the name_save*/
367 f_setup.save_name = malloc((strlen(f_setup.tmp_save_name) + strlen(EXT_SAVE)) * sizeof(char) + 1);
368 memcpy(f_setup.save_name, f_setup.tmp_save_name, (strlen(f_setup.tmp_save_name) + strlen(EXT_SAVE)) * sizeof(char));
367 f_setup.save_name = malloc((strlen(f_setup.tmp_save_name) + strlen(EXT_SAVE) + 1) * sizeof(char));
368 memcpy(f_setup.save_name, f_setup.tmp_save_name, (strlen(f_setup.story_name) + strlen(EXT_SAVE)) * sizeof(char));
369369 free(f_setup.tmp_save_name);
370370 }
371371
372 f_setup.aux_name = malloc((strlen(f_setup.story_name) + strlen(EXT_AUX)) * sizeof(char) + 1);
372 f_setup.aux_name = malloc((strlen(f_setup.story_name) + strlen(EXT_AUX) + 1) * sizeof(char));
373373 memcpy(f_setup.aux_name, f_setup.story_name, (strlen(f_setup.story_name) + strlen(EXT_AUX)) * sizeof(char));
374374 strncat(f_setup.aux_name, EXT_AUX, strlen(EXT_AUX) + 1);
375375
463463 keypad(stdscr, TRUE); /* Enable the keypad and function keys */
464464 scrollok(stdscr, FALSE); /* No scrolling unless explicitly asked for */
465465
466 /* It's nice to know what terminal we have to work with. */
467 u_setup.term = strdup(getenv("TERM"));
468
466469 if (z_header.version == V3 && u_setup.tandy_bit != 0)
467470 z_header.config |= CONFIG_TANDY;
468471
469472 if (z_header.version == V3)
470473 z_header.config |= CONFIG_SPLITSCREEN;
471474
472 if (z_header.version >= V4)
473 z_header.config |= CONFIG_BOLDFACE | CONFIG_EMPHASIS | CONFIG_FIXED | CONFIG_TIMEDINPUT;
475 if (z_header.version >= V4) {
476 z_header.config |= CONFIG_BOLDFACE | CONFIG_FIXED | CONFIG_TIMEDINPUT;
477 if (u_setup.emphasis_mode != EMPHASIS_NONE)
478 z_header.config |= CONFIG_EMPHASIS;
479 }
474480
475481 if (z_header.version >= V5)
476 z_header.flags &= ~(GRAPHICS_FLAG | MOUSE_FLAG | MENU_FLAG);
482 z_header.flags &= ~(GRAPHICS_FLAG | MENU_FLAG);
483
484 #ifdef NCURSES_MOUSE_VERSION
485 /* Limited mouse support */
486 if (u_setup.mouse_enabled && z_header.version >= V5)
487 mousemask(BUTTON1_CLICKED | BUTTON1_DOUBLE_CLICKED, NULL);
488 else
489 #endif
490 if (z_header.version >= V5) {
491 z_header.flags &= ~MOUSE_FLAG;
492 }
477493
478494 #ifdef NO_SOUND
479495 if (z_header.version >= V5)
891907 else if (strcmp(varname, "force_color") == 0) {
892908 u_setup.force_color = getbool(value);
893909 }
910 else if (strcmp(varname, "emphasis_mode") == 0) {
911 u_setup.emphasis_mode = getemph(value);
912 }
894913 else if (strcmp(varname, "obj_move") == 0) {
895914 f_setup.object_movement = getbool(value);
896915 }
959978 } /* while */
960979 return TRUE;
961980 } /* getconfig */
981
982
983 /* getemph
984 *
985 * Check a string for possible emphasis types:
986 * italic, underline, caps, or none
987 *
988 */
989 static int getemph(char *value)
990 {
991 int num;
992
993 /* Be case-insensitive */
994 for (num = 0; value[num] != 0; num++)
995 value[num] = tolower((int) value[num]);
996
997 if (strncmp(value, "italic", 6) == 0)
998 return EMPHASIS_ITALIC;
999
1000 if (strncmp(value, "under", 5) == 0)
1001 return EMPHASIS_UNDERLINE;
1002
1003 if (strncmp(value, "none", 2) == 0)
1004 return EMPHASIS_NONE;
1005
1006 if (atoi(value) == 0)
1007 return EMPHASIS_NONE;
1008
1009 return EMPHASIS_ITALIC;
1010 }
9621011
9631012
9641013 /*
11011150 u_setup.force_color = 0;
11021151 u_setup.foreground_color = -1;
11031152 u_setup.background_color = -1;
1153 u_setup.emphasis_mode = EMPHASIS_DEFAULT;
11041154 u_setup.screen_width = -1;
11051155 u_setup.screen_height = -1;
11061156 u_setup.random_seed = -1;
11171167 /* u_setup.interpreter = INTERP_DEFAULT; */
11181168 u_setup.current_color = 0;
11191169 u_setup.color_enabled = FALSE;
1170 u_setup.mouse_enabled = FALSE;
11201171 } /* os_init_setup */
11211172
11221173
11671218 printf(" Frotz was originally written by Stefan Jokisch.\n");
11681219 printf(" It complies with standard 1.0 of Graham Nelson's specification.\n");
11691220 printf(" It was ported to Unix by Galen Hazelwood.\n");
1221 printf(" It is distributed under the GNU General Public License version 2 or\n");
1222 printf(" (at your option) any later version.\n");
1223 printf(" This software is offered as-is with no warranty or liability.\n");
11701224 printf(" The core and Unix port are maintained by David Griffith.\n");
11711225 printf(" Frotz's homepage is https://661.org/proj/if/frotz/\n\n");
11721226 return;
165165 */
166166 static int unix_read_char(int extkeys)
167167 {
168 #ifdef NCURSES_MOUSE_VERSION
169 MEVENT mouse_event;
170 #endif
171
168172 #ifdef USE_UTF8
169173 wint_t c;
170174 #else
261265 * SIGWINCH ourselves.
262266 */
263267 #ifdef KEY_RESIZE
264 case KEY_RESIZE:
265 #endif
266 continue;
267
268 case KEY_RESIZE:
269 #endif
270 continue;
271
272 #ifdef NCURSES_MOUSE_VERSION
273 case KEY_MOUSE:
274 if (getmouse(&mouse_event) == OK) {
275 if (mouse_event.bstate & BUTTON1_RELEASED) continue;
276 mouse_x = mouse_event.x + 1;
277 mouse_y = mouse_event.y + 1;
278 return (mouse_event.bstate & BUTTON1_DOUBLE_CLICKED ? ZC_DOUBLE_CLICK : ZC_SINGLE_CLICK);
279 }
280 continue;
281 #endif
268282 /* Screen decluttering. */
269283 case MOD_CTRL ^ 'L':
270284 case MOD_CTRL ^ 'R':
534548 getyx(stdscr, y, x);
535549 if (src > dest) {
536550 for (col = src; col < src + n; col++) {
551 #ifdef USE_UTF8
552 cchar_t ch;
553 mvin_wch(y, col, &ch);
554 mvadd_wch(y, col - src + dest, &ch);
555 #else
537556 chtype ch = mvinch(y, col);
538557 mvaddch(y, col - src + dest, ch);
558 #endif
539559 }
540560 } else if (src < dest) {
541561 for (col = src + n - 1; col >= src; col--) {
562 #ifdef USE_UTF8
563 cchar_t ch;
564 mvin_wch(y, col, &ch);
565 mvadd_wch(y, col - src + dest, &ch);
566 #else
542567 chtype ch = mvinch(y, col);
543568 mvaddch(y, col - src + dest, ch);
569 #endif
544570 }
545571 }
546572 move(y, x);
549575
550576
551577 /*
552 * scrnset
553 *
554 * In the row of the cursor, set n characters starting at start to c.
555 *
556 */
557 static void scrnset(int start, int c, int n)
578 * spaceset
579 *
580 * In the row of the cursor, set n characters starting at start to space.
581 *
582 *
583 */
584 static void spaceset(int start, int n)
558585 {
559586 int y, x;
587
560588 getyx(stdscr, y, x);
561589 while (n--)
562 mvaddch(y, start + n, c);
590 mvaddch(y, start + n, ' ');
563591 move(y, x);
564592 return;
565 } /* scrnset */
593 } /* spaceset */
566594
567595
568596 #ifdef USE_UTF8
659687 zchar os_read_line (int bufmax, zchar *buf, int timeout, int width,
660688 int continued)
661689 {
662 int ch, y, x, len = zcharstrlen(buf);
690 int ch, y, x;
663691 int res;
692 size_t len = zcharstrlen(buf);
664693 const int margin = MAX(z_header.screen_width - width, 0);
665694
666695 /* These are static to allow input continuation to work smoothly. */
744773 scrnmove(x, x + scrpos, len);
745774 memmove(buf, buf + scrpos,
746775 len*sizeof(zchar));
747 for (int i = len; i <= len + scrpos; i++)
776 int i;
777 for (i = len; i <= len + scrpos; i++)
748778 mvaddch(y, x + i, ' ');
749779 scrpos = 0;
750780 }
762792 continue; /* Don't feed is_terminator bad zchars. */
763793
764794 case KEY_EOL: /* Delete from cursor to end of line. */
765 scrnset(x + scrpos, ' ', len - scrpos);
795 spaceset(x + scrpos, len - scrpos);
766796 len = scrpos;
767797 continue;
768798 case ZC_ESCAPE: /* Delete whole line */
769 scrnset(x, ' ', len);
799 spaceset(x, len);
770800 len = scrpos = 0;
771801 searchpos = -1;
772802 history_view = history_next;
808838 res = unix_history_forward(buf, searchpos, max);
809839
810840 if (res) {
811 scrnset(x, ' ', len);
841 spaceset(x, len);
812842 #ifdef USE_UTF8
813843 utf8_mvaddstr(y, x, buf);
814844 #else
33 -c # context lines
44 -d disable color
55 -e enable sound
6 -E <style> emphasis style
67 -f <colorname> foreground color
78 -F Force color mode
89 -h # text height
1011 -I # interpreter number
1112 -l # left margin
1213 -L <file> load this save file
14 -m enable mouse support
1315 -o watch object movement
1416 -O watch object locating
1517 -p plain ASCII output only
77 int force_color;
88 int foreground_color;
99 int background_color;
10 int emphasis_mode;
1011 int screen_width;
1112 int screen_height;
1213 int random_seed;
1617 int plain_ascii;
1718 int current_color; /* ux_text.c ux_screen.c */
1819 bool color_enabled; /* ux_init.c ux_pic.c ux_text.c */
20 bool mouse_enabled;
1921 int interpreter; /* see frotz.h */
2022 zlong colours[11];
2123 zlong nonstdcolours[NON_STD_COLS];
2224 int nonstdindex;
25 char *term; /* Terminal name, aka $TERM. */
2326 } u_setup_t;
2427
2528 extern u_setup_t u_setup;
153153 && (new_background == z_header.default_foreground))
154154 ? A_REVERSE : 0);
155155 os_set_text_style(u_setup.current_text_style);
156
156157 } /* os_set_colour */
157158
158159
174175 u_setup.current_text_style = new_style;
175176 if (new_style & REVERSE_STYLE) temp |= A_REVERSE;
176177 if (new_style & BOLDFACE_STYLE) temp |= A_BOLD;
177 if (new_style & EMPHASIS_STYLE) temp |= A_UNDERLINE;
178 if (new_style & EMPHASIS_STYLE) {
179 switch(u_setup.emphasis_mode) {
180 case EMPHASIS_ITALIC:
181 #ifdef ITALIC_SUPPORT
182 if (termattrs() & A_ITALIC) temp |= A_ITALIC;
183 else temp |= A_UNDERLINE;
184 #else
185 temp |= A_UNDERLINE;
186 #endif /* ITALICS_SUPPORT */
187 break;
188 case EMPHASIS_UNDERLINE:
189 temp |= A_UNDERLINE;
190 break;
191 case EMPHASIS_NONE: /* do nothing */
192 default:
193 break;
194 }
195 }
178196 attrset(temp ^ u_setup.current_color);
179197 } /* os_set_text_style */
180198
00 #ifndef BCHASH_H
11 #define BCHASH_H
2 #define GIT_HASH "79136f96fc929e824ad4118e00433f82ca1d133d"
3 #define GIT_HASH_SHORT "79136f9"
4 #define GIT_DATE "2020-05-10 16:51:48 -0700"
2 #define GIT_HASH "85a3a98dcbae0ee5aa036686a13b1088f7d6de17"
3 #define GIT_HASH_SHORT "85a3a98"
4 #define GIT_DATE "2021-02-27 16:50:16 -0800"
55 #endif
6464 extern unsigned cdecl _stklen = 0x800;
6565
6666 extern int zoptind;
67
68 int cdecl zgetopt(int, char *[], const char *);
6967
7068 static const char *progname = NULL;
7169
3131 #define INFORMATION "\
3232 An interpreter for all Infocom and other Z-Machine games.\n\
3333 \n\
34 Syntax: dfrotz [options] story-file\n\
34 Syntax: dfrotz [options] story-file [blorb file]\n\
3535 -a watch attribute setting \t -P alter piracy opcode\n\
36 -A watch attribute testing \t -R <path> restricted read/write\n\
37 -f <type> type of format codes \t -s # random number seed value\n\
38 -h # screen height \t -S # transcript width\n\
39 -i ignore fatal errors \t -t set Tandy bit\n\
40 -I # interpreter number \t -u # slots for multiple undo\n\
41 -o watch object movement \t -v show version information\n\
42 -O watch object locating \t -w # screen width\n\
43 -L <file> load this save file \t -x expand abbreviations g/x/z\n\
44 -m turn off MORE prompts \t -Z # error checking (see below)\n\
45 -p plain ASCII output only\n"
36 -A watch attribute testing \t -r <option> Set runtime options\n\
37 -f <type> type of format codes \t -R <path> restricted read/write\n\
38 -h # screen height \t -s # random number seed value\n\
39 -i ignore fatal errors \t -S # transcript width\n\
40 -I # interpreter number \t -t set Tandy bit\n\
41 -o watch object movement \t -u # slots for multiple undo\n\
42 -O watch object locating \t -v show version information\n\
43 -L <file> load this save file \t -w # screen width\n\
44 -m turn off MORE prompts \t -x expand abbreviations g/x/z\n\
45 -p plain ASCII output only \t -Z # error checking (see below)\n"
4646
4747 #define INFO2 "\
4848 Error checking: 0 none, 1 first only (default), 2 all, 3 exit after any error.\n\
5050 While running, enter \"\\help\" to list the runtime escape sequences.\n"
5151
5252
53 static int user_text_width = 75;
53 static int user_text_width = 80;
5454 static int user_text_height = 24;
5555 static int user_random_seed = -1;
5656 static int user_tandy_bit = 0;
9797 f_setup.format = FORMAT_IRC;
9898 } else if (strcmp(zoptarg, "ansi") == 0) {
9999 f_setup.format = FORMAT_ANSI;
100 } else if (strcmp(zoptarg, "bbcode") == 0) {
101 f_setup.format = FORMAT_BBCODE;
100102 } else if ((strcmp(zoptarg, "none") == 0) ||
101103 (strcmp(zoptarg, "normal") == 0)) {
102104 } else
185187 printf("Using ANSI formatting.\n");
186188 f_setup.format = FORMAT_ANSI;
187189 break;
190 case FORMAT_BBCODE:
191 printf("Using Discourse BBCode formatting.\n");
192 f_setup.format = FORMAT_BBCODE;
193 break;
188194 case FORMAT_UNKNOWN:
189195 printf("Unknown formatting \"%s\".\n", format_orig);
190196 f_setup.format = FORMAT_NORMAL;
219225 *p = '\0'; /* extension removed */
220226
221227 /* Create nice default file names */
222
223 f_setup.script_name = malloc((strlen(f_setup.story_name) +
224 strlen(EXT_SCRIPT)) * sizeof(char) + 1);
225 memcpy(f_setup.script_name, f_setup.story_name, (strlen(f_setup.story_name) + strlen(EXT_SCRIPT)) * sizeof(char));
226
227 strncat(f_setup.script_name, EXT_SCRIPT, strlen(EXT_SCRIPT) + 1);
228
229 f_setup.command_name = malloc((strlen(f_setup.story_name) +
230 strlen(EXT_COMMAND)) * sizeof(char) + 1);
228 f_setup.script_name = malloc((strlen(f_setup.story_name) + strlen(EXT_SCRIPT) + 1) * sizeof(char));
229 memcpy(f_setup.script_name, f_setup.story_name, (strlen(f_setup.story_name) + strlen(EXT_SCRIPT)) * sizeof(char));
230 strncat(f_setup.script_name, EXT_SCRIPT, strlen(EXT_SCRIPT)+1);
231
232 f_setup.command_name = malloc((strlen(f_setup.story_name) + strlen(EXT_COMMAND) + 1) * sizeof(char));
231233 memcpy(f_setup.command_name, f_setup.story_name, (strlen(f_setup.story_name) + strlen(EXT_COMMAND)) * sizeof(char));
232 strncat(f_setup.command_name, EXT_COMMAND, strlen(EXT_COMMAND) + 1);
234 strncat(f_setup.command_name, EXT_COMMAND, strlen(EXT_COMMAND)+1);
233235
234236 if (!f_setup.restore_mode) {
235 f_setup.save_name = malloc((strlen(f_setup.story_name) +
236 strlen(EXT_SAVE)) * sizeof(char) + 1);
237 f_setup.save_name = malloc((strlen(f_setup.story_name) + strlen(EXT_SAVE) + 1) * sizeof(char));
237238 memcpy(f_setup.save_name, f_setup.story_name, (strlen(f_setup.story_name) + strlen(EXT_SAVE)) * sizeof(char));
238239 strncat(f_setup.save_name, EXT_SAVE, strlen(EXT_SAVE) + 1);
239240 } else { /* Set our auto load save as the name save */
240 f_setup.save_name = malloc((strlen(f_setup.tmp_save_name) +
241 strlen(EXT_SAVE)) * sizeof(char) + 1);
242 memcpy(f_setup.save_name, f_setup.tmp_save_name, (strlen(f_setup.tmp_save_name) + strlen(EXT_SAVE)) * sizeof(char));
243 free(f_setup.tmp_save_name);
241 f_setup.save_name = malloc((strlen(f_setup.tmp_save_name) + strlen(EXT_SAVE) + 1) * sizeof(char));
242 memcpy(f_setup.save_name, f_setup.tmp_save_name, (strlen(f_setup.tmp_save_name) + strlen(EXT_SAVE)) * sizeof(char));
243 free(f_setup.tmp_save_name);
244244 }
245245
246 f_setup.aux_name = malloc((strlen(f_setup.story_name) +
247 strlen(EXT_AUX)) * sizeof(char) + 1);
246 f_setup.aux_name = malloc((strlen(f_setup.story_name) + strlen(EXT_AUX) + 1) * sizeof(char));
248247 memcpy(f_setup.aux_name, f_setup.story_name, (strlen(f_setup.story_name) + strlen(EXT_AUX)) * sizeof(char));
249248 strncat(f_setup.aux_name, EXT_AUX, strlen(EXT_AUX) + 1);
250249 }
413412 printf(" Frotz was originally written by Stefan Jokisch.\n");
414413 printf(" It complies with standard 1.0 of Graham Nelson's specification.\n");
415414 printf(" It was ported to Unix by Galen Hazelwood.\n");
415 printf(" It is distributed under the GNU General Public License version 2 or\n");
416 printf(" (at your option) any later version.\n");
417 printf(" This software is offered as-is with no warranty or liability.\n");
416418 printf(" The core and dumb port are maintained by David Griffith.\n");
417419 printf(" Frotz's homepage is https://661.org/proj/if/frotz.\n\n");
418420 return;
2525 extern f_setup_t f_setup;
2626
2727 static bool show_line_numbers = FALSE;
28 static bool show_line_types = -1;
28 static bool show_line_types = FALSE;
2929 static bool show_pictures = TRUE;
3030 static bool visual_bell = TRUE;
3131 static bool plain_ascii = FALSE;
4040 ;
4141
4242 static char frotz_to_dumb [256];
43
44 static char* bbcode_colour[] = {
45 "black", "red", "green", "yellow", "blue", "magenda",
46 "cyan", "white", "lightgrey", "grey", "dimgrey"
47 };
4348
4449 /* z_header.screen_rows * z_header.screen_cols */
4550 static int screen_cells;
248253
249254 if (cel.style & PICTURE_STYLE)
250255 zputchar(show_pictures ? cel.c : ' ');
256 else
257 zputchar(cel.c);
258 }
259
260 static void show_cell_bbcode(cell_t cel)
261 {
262 static char lastfg = DEFAULT_DUMB_COLOUR,
263 lastbg = DEFAULT_DUMB_COLOUR,
264 lastbold = 0,
265 lastemph = 0,
266 lastfix = 0;
267 char fg = cel.fg,
268 bg = cel.bg,
269 bold = (cel.style & BOLDFACE_STYLE) ? 1 : 0,
270 emph = (cel.style & EMPHASIS_STYLE) ? 1 : 0,
271 fix = (cel.style & FIXED_WIDTH_STYLE) ? 1 : 0,
272 defaultfg = frotz_to_dumb [z_header.default_foreground],
273 defaultbg = frotz_to_dumb [z_header.default_background];
274
275 if (fg == DEFAULT_DUMB_COLOUR)
276 fg = defaultfg;
277 if (bg == DEFAULT_DUMB_COLOUR)
278 bg = defaultbg;
279 if (lastfg == DEFAULT_DUMB_COLOUR)
280 lastfg = defaultfg;
281 if (lastbg == DEFAULT_DUMB_COLOUR)
282 lastbg = defaultbg;
283
284 if (cel.style & REVERSE_STYLE) {
285 char tmp;
286 tmp = fg;
287 fg = bg;
288 bg = tmp;
289 }
290
291 if (lastemph && (fix != lastfix || emph != lastemph || bold != lastbold
292 || bg != lastbg || fg != lastfg)) {
293 printf("[/i]");
294 lastemph = 0;
295 }
296
297 if (lastbold && (fix != lastfix || bold != lastbold || bg != lastbg
298 || fg != lastfg)) {
299 printf("[/b]");
300 lastbold = 0;
301 }
302
303 if (lastfg != defaultfg && (fix != lastfix || bg != lastbg
304 || fg != lastfg)) {
305 printf("[/color]");
306 lastfg = defaultfg;
307 }
308
309 if (lastbg != defaultbg && (fix != lastfix || bg != lastbg)) {
310 printf("[/bgcolor]");
311 lastbg = defaultbg;
312 }
313
314 if (lastfix && fix != lastfix) {
315 printf("[/font]");
316 lastfix = 0;
317 }
318
319 if (fix != lastfix) {
320 printf("[font=monospace]");
321 lastfix = 1;
322 }
323
324 if (bg != lastbg) {
325 printf("[bgcolor=%s]", bbcode_colour[(short)bg]);
326 lastbg = bg;
327 }
328
329 if (fg != lastfg) {
330 printf("[color=%s]", bbcode_colour[(short)fg]);
331 lastfg = fg;
332 }
333
334 if (bold != lastbold) {
335 printf("[b]");
336 lastbold = 1;
337 }
338
339 if (emph != lastemph) {
340 printf("[i]");
341 lastemph = 1;
342 }
343
344 if (cel.style & PICTURE_STYLE)
345 zputchar(show_pictures ? cel.c : ' ');
346 else if (strchr("[]\\`*|_#<>=-.+~&", cel.c))
347 printf("\\%c", cel.c);
348 else if (cel.c == ' ' && fix)
349 printf("&nbsp;");
251350 else
252351 zputchar(cel.c);
253352 }
302401 show_cell_irc(cel);
303402 else if (f_setup.format == FORMAT_ANSI)
304403 show_cell_ansi(cel);
404 else if (f_setup.format == FORMAT_BBCODE)
405 show_cell_bbcode(cel);
305406 else
306407 #endif
307408 show_cell_normal(cel);
703804
704805 z_header.default_foreground = WHITE_COLOUR;
705806 z_header.default_background = BLACK_COLOUR;
807 } else if (f_setup.format == FORMAT_BBCODE) {
808 setvbuf(stdout, 0, _IONBF, 0);
809 setvbuf(stderr, 0, _IONBF, 0);
810
811 z_header.config |= CONFIG_COLOUR | CONFIG_BOLDFACE | CONFIG_EMPHASIS;
812
813 memset (frotz_to_dumb, 256, DEFAULT_DUMB_COLOUR);
814 frotz_to_dumb [BLACK_COLOUR] = 0;
815 frotz_to_dumb [RED_COLOUR] = 1;
816 frotz_to_dumb [GREEN_COLOUR] = 2;
817 frotz_to_dumb [YELLOW_COLOUR] = 3;
818 frotz_to_dumb [BLUE_COLOUR] = 4;
819 frotz_to_dumb [MAGENTA_COLOUR] = 5;
820 frotz_to_dumb [CYAN_COLOUR] = 6;
821 frotz_to_dumb [WHITE_COLOUR] = 7;
822 frotz_to_dumb [LIGHTGREY_COLOUR] = 8;
823 frotz_to_dumb [MEDIUMGREY_COLOUR] = 9;
824 frotz_to_dumb [DARKGREY_COLOUR] = 10;
825
826 z_header.default_foreground = BLACK_COLOUR;
827 z_header.default_background = WHITE_COLOUR;
706828 }
707829 #endif /* DISABLE_FORMATS */
708830 if (z_header.version == V3) {
719841 screen_cells = z_header.screen_rows * z_header.screen_cols;
720842
721843 z_header.font_width = 1; z_header.font_height = 1;
722
723 if (show_line_types == -1)
724 show_line_types = z_header.version > 3;
725844
726845 screen_data = malloc(screen_cells * sizeof(cell_t));
727846 screen_changes = malloc(screen_cells);
99 -m turn off MORE prompts
1010 -p plain ASCII output only
1111 -P alter piracy opcode
12 -r <option> Set runtime options
1213 -R <path> restricted read/write
1314 -s # random number seed value
1415 -S # transcript width
0 SplineFontDB: 3.0
1 FontName: FreeFont3
2 FullName: Free Z-Machine Graphics Font
3 FamilyName: FreeFont3
4 Weight: Book
5 Copyright: Copyleft 2002, 2003, 2005, 2008 Free Software Foundation.
6 Version: $Revision: 1.2 $
7 ItalicAngle: 0
8 UnderlinePosition: -100
9 UnderlineWidth: 50
10 Ascent: 800
11 Descent: 200
12 sfntRevision: 0x00013333
13 LayerCount: 2
14 Layer: 0 1 "Back" 1
15 Layer: 1 1 "Fore" 0
16 XUID: [1021 822 523827577 8259209]
17 FSType: 0
18 OS2Version: 1
19 OS2_WeightWidthSlopeOnly: 0
20 OS2_UseTypoMetrics: 1
21 CreationTime: 1203284335
22 ModificationTime: 1599572456
23 PfmFamily: 17
24 TTFWeight: 400
25 TTFWidth: 5
26 LineGap: 0
27 VLineGap: 0
28 Panose: 2 7 4 9 2 2 5 2 4 4
29 OS2TypoAscent: 800
30 OS2TypoAOffset: 0
31 OS2TypoDescent: -200
32 OS2TypoDOffset: 0
33 OS2TypoLinegap: 0
34 OS2WinAscent: 800
35 OS2WinAOffset: 0
36 OS2WinDescent: 200
37 OS2WinDOffset: 0
38 HheadAscent: 800
39 HheadAOffset: 0
40 HheadDescent: -200
41 HheadDOffset: 0
42 OS2SubXSize: 650
43 OS2SubYSize: 699
44 OS2SubXOff: 47
45 OS2SubYOff: 140
46 OS2SupXSize: 650
47 OS2SupYSize: 699
48 OS2SupXOff: -163
49 OS2SupYOff: 479
50 OS2StrikeYSize: 49
51 OS2StrikeYPos: 258
52 OS2Vendor: 'GNU '
53 OS2CodePages: 600001bf.dff70000
54 OS2UnicodeRanges: e4000eff.400079ff.00048020.00000000
55 MarkAttachClasses: 1
56 DEI: 91125
57 TtTable: prep
58 PUSHW_1
59 511
60 SCANCTRL
61 SVTCA[y-axis]
62 MPPEM
63 PUSHB_1
64 8
65 LT
66 IF
67 PUSHB_2
68 1
69 1
70 INSTCTRL
71 EIF
72 PUSHB_2
73 70
74 6
75 CALL
76 IF
77 POP
78 PUSHB_1
79 16
80 EIF
81 MPPEM
82 PUSHB_1
83 20
84 GT
85 IF
86 POP
87 PUSHB_1
88 128
89 EIF
90 SCVTCI
91 PUSHB_1
92 6
93 CALL
94 NOT
95 IF
96 SVTCA[y-axis]
97 PUSHB_1
98 4
99 DUP
100 RCVT
101 PUSHB_1
102 3
103 CALL
104 WCVTP
105 SVTCA[x-axis]
106 PUSHB_1
107 5
108 DUP
109 RCVT
110 PUSHB_1
111 3
112 CALL
113 WCVTP
114 PUSHB_1
115 6
116 DUP
117 RCVT
118 PUSHW_3
119 5
120 32767
121 2
122 CALL
123 PUSHB_2
124 3
125 70
126 SROUND
127 CALL
128 WCVTP
129 EIF
130 EndTTInstrs
131 TtTable: fpgm
132 PUSHB_1
133 0
134 FDEF
135 PUSHB_1
136 0
137 SZP0
138 MPPEM
139 PUSHB_1
140 42
141 LT
142 IF
143 PUSHB_1
144 74
145 SROUND
146 EIF
147 PUSHB_1
148 0
149 SWAP
150 MIAP[rnd]
151 RTG
152 PUSHB_1
153 6
154 CALL
155 IF
156 RTDG
157 EIF
158 MPPEM
159 PUSHB_1
160 42
161 LT
162 IF
163 RDTG
164 EIF
165 DUP
166 MDRP[rp0,rnd,grey]
167 PUSHB_1
168 1
169 SZP0
170 MDAP[no-rnd]
171 RTG
172 ENDF
173 PUSHB_1
174 1
175 FDEF
176 DUP
177 DUP
178 MDRP[rp0,min,white]
179 MDAP[rnd]
180 PUSHB_1
181 7
182 CALL
183 NOT
184 IF
185 DUP
186 DUP
187 GC[orig]
188 SWAP
189 GC[cur]
190 SUB
191 ROUND[White]
192 DUP
193 IF
194 DUP
195 ABS
196 DIV
197 SHPIX
198 ELSE
199 POP
200 POP
201 EIF
202 ELSE
203 POP
204 EIF
205 ENDF
206 PUSHB_1
207 2
208 FDEF
209 MPPEM
210 GT
211 IF
212 RCVT
213 SWAP
214 EIF
215 POP
216 ENDF
217 PUSHB_1
218 3
219 FDEF
220 ROUND[Black]
221 RTG
222 DUP
223 PUSHB_1
224 64
225 LT
226 IF
227 POP
228 PUSHB_1
229 64
230 EIF
231 ENDF
232 PUSHB_1
233 4
234 FDEF
235 PUSHB_1
236 6
237 CALL
238 IF
239 POP
240 SWAP
241 POP
242 ROFF
243 IF
244 MDRP[rp0,min,rnd,black]
245 ELSE
246 MDRP[min,rnd,black]
247 EIF
248 ELSE
249 MPPEM
250 GT
251 IF
252 IF
253 MIRP[rp0,min,rnd,black]
254 ELSE
255 MIRP[min,rnd,black]
256 EIF
257 ELSE
258 SWAP
259 POP
260 PUSHB_1
261 5
262 CALL
263 IF
264 PUSHB_1
265 70
266 SROUND
267 EIF
268 IF
269 MDRP[rp0,min,rnd,black]
270 ELSE
271 MDRP[min,rnd,black]
272 EIF
273 EIF
274 EIF
275 RTG
276 ENDF
277 PUSHB_1
278 5
279 FDEF
280 GFV
281 NOT
282 AND
283 ENDF
284 PUSHB_1
285 6
286 FDEF
287 PUSHB_2
288 34
289 1
290 GETINFO
291 LT
292 IF
293 PUSHB_1
294 32
295 GETINFO
296 NOT
297 NOT
298 ELSE
299 PUSHB_1
300 0
301 EIF
302 ENDF
303 PUSHB_1
304 7
305 FDEF
306 PUSHB_2
307 36
308 1
309 GETINFO
310 LT
311 IF
312 PUSHB_1
313 64
314 GETINFO
315 NOT
316 NOT
317 ELSE
318 PUSHB_1
319 0
320 EIF
321 ENDF
322 PUSHB_1
323 8
324 FDEF
325 SRP2
326 SRP1
327 DUP
328 IP
329 MDAP[rnd]
330 ENDF
331 EndTTInstrs
332 ShortTable: cvt 9
333 0
334 417
335 563
336 603
337 43
338 41
339 41
340 33
341 633
342 EndShort
343 ShortTable: maxp 16
344 1
345 0
346 3030
347 480
348 120
349 126
350 6
351 2
352 1
353 0
354 9
355 0
356 256
357 1318
358 5
359 4
360 EndShort
361 LangName: 1033 "" "" "Medium" "" "" "" "" "" "GNU" "" "" "" "" "The use of this font is granted subject to GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.+AAoA"
362 GaspTable: 2 8 2 65535 3 0
363 Encoding: UnicodeBmp
364 UnicodeInterp: none
365 NameList: Adobe Glyph List
366 DisplaySize: -24
367 AntiAlias: 1
368 FitToEm: 1
369 WinInfo: 0 27 8
370 BeginPrivate: 0
371 EndPrivate
372 TeXData: 1 0 0 629145 314572 209715 670040 1048576 209715 783286 444596 497025 792723 393216 433062 380633 303038 157286 324010 404750 52429 2506097 1059062 262144
373 BeginChars: 127 95
374
375 StartChar: space
376 Encoding: 32 32 0
377 Width: 600
378 GlyphClass: 2
379 Flags: W
380 LayerCount: 2
381 EndChar
382
383 StartChar: exclam
384 Encoding: 33 33 1
385 Width: 600
386 GlyphClass: 2
387 Flags: W
388 LayerCount: 2
389 Fore
390 SplineSet
391 270 190 m 0,0,1
392 270 183 270 183 264 175 c 128,-1,2
393 258 167 258 167 250 167 c 0,3,4
394 245 167 245 167 237 172 c 2,5,-1
395 41 281 l 1,6,-1
396 238 390 l 2,7,8
397 246 395 246 395 250 395 c 0,9,10
398 257 395 257 395 263.5 388 c 128,-1,11
399 270 381 270 381 270 373 c 0,12,13
400 270 362 270 362 257 355 c 2,14,-1
401 161 302 l 1,15,-1
402 501 302 l 2,16,17
403 528 302 528 302 528 282 c 0,18,19
404 528 261 528 261 501 261 c 2,20,-1
405 159 261 l 1,21,-1
406 257 207 l 2,22,23
407 270 200 270 200 270 190 c 0,0,1
408 EndSplineSet
409 Validated: 1
410 EndChar
411
412 StartChar: quotedbl
413 Encoding: 34 34 2
414 Width: 600
415 GlyphClass: 2
416 Flags: W
417 LayerCount: 2
418 Fore
419 SplineSet
420 332 167 m 0,0,1
421 324 167 324 167 318 175 c 128,-1,2
422 312 183 312 183 312 190 c 0,3,4
423 312 200 312 200 325 207 c 2,5,-1
424 423 261 l 1,6,-1
425 81 261 l 2,7,8
426 54 261 54 261 54 282 c 0,9,10
427 54 302 54 302 81 302 c 2,11,-1
428 421 302 l 1,12,-1
429 325 355 l 2,13,14
430 312 362 312 362 312 373 c 0,15,16
431 312 380 312 380 318.5 387.5 c 128,-1,17
432 325 395 325 395 332 395 c 0,18,19
433 336 395 336 395 344 390 c 2,20,-1
434 541 281 l 1,21,-1
435 345 172 l 2,22,23
436 337 167 337 167 332 167 c 0,0,1
437 EndSplineSet
438 Validated: 1
439 EndChar
440
441 StartChar: numbersign
442 Encoding: 35 35 3
443 Width: 600
444 GlyphClass: 2
445 Flags: W
446 LayerCount: 2
447 Fore
448 SplineSet
449 0 -180 m 1,0,-1
450 566 800 l 1,1,-1
451 600 780 l 5,2,-1
452 34 -200 l 5,3,-1
453 0 -180 l 1,0,-1
454 EndSplineSet
455 Validated: 1
456 EndChar
457
458 StartChar: dollar
459 Encoding: 36 36 4
460 Width: 600
461 GlyphClass: 2
462 Flags: W
463 LayerCount: 2
464 Fore
465 SplineSet
466 600 -180 m 5,0,-1
467 566 -200 l 5,1,-1
468 0 780 l 5,2,-1
469 34 800 l 5,3,-1
470 600 -180 l 5,0,-1
471 EndSplineSet
472 Validated: 1
473 EndChar
474
475 StartChar: percent
476 Encoding: 37 37 5
477 Width: 600
478 GlyphClass: 2
479 Flags: W
480 LayerCount: 2
481 EndChar
482
483 StartChar: ampersand
484 Encoding: 38 38 6
485 Width: 600
486 GlyphClass: 2
487 Flags: W
488 LayerCount: 2
489 Fore
490 SplineSet
491 0 320 m 1,0,-1
492 600 320 l 1,1,-1
493 600 280 l 1,2,-1
494 0 280 l 1,3,-1
495 0 320 l 1,0,-1
496 EndSplineSet
497 Validated: 1
498 EndChar
499
500 StartChar: quotesingle
501 Encoding: 39 39 7
502 Width: 600
503 GlyphClass: 2
504 Flags: W
505 LayerCount: 2
506 Fore
507 SplineSet
508 0 320 m 1,0,-1
509 600 320 l 1,1,-1
510 600 280 l 1,2,-1
511 0 280 l 1,3,-1
512 0 320 l 1,0,-1
513 EndSplineSet
514 Validated: 1
515 EndChar
516
517 StartChar: parenleft
518 Encoding: 40 40 8
519 Width: 600
520 GlyphClass: 2
521 Flags: W
522 LayerCount: 2
523 Fore
524 SplineSet
525 280 800 m 5,0,-1
526 320 800 l 5,1,-1
527 320 -200 l 5,2,-1
528 280 -200 l 5,3,-1
529 280 800 l 5,0,-1
530 EndSplineSet
531 Validated: 1
532 EndChar
533
534 StartChar: parenright
535 Encoding: 41 41 9
536 Width: 600
537 GlyphClass: 2
538 Flags: W
539 LayerCount: 2
540 Fore
541 SplineSet
542 280 800 m 1,0,-1
543 320 800 l 1,1,-1
544 320 -200 l 1,2,-1
545 280 -200 l 1,3,-1
546 280 800 l 1,0,-1
547 EndSplineSet
548 Validated: 1
549 EndChar
550
551 StartChar: asterisk
552 Encoding: 42 42 10
553 Width: 600
554 GlyphClass: 2
555 Flags: W
556 LayerCount: 2
557 Fore
558 SplineSet
559 0 280 m 1,0,-1
560 0 320 l 1,1,-1
561 280 320 l 1,2,-1
562 280 800 l 1,3,-1
563 320 800 l 1,4,-1
564 320 320 l 1,5,-1
565 600 320 l 1,6,-1
566 600 280 l 1,7,-1
567 0 280 l 1,0,-1
568 EndSplineSet
569 Validated: 1
570 EndChar
571
572 StartChar: plus
573 Encoding: 43 43 11
574 Width: 600
575 GlyphClass: 2
576 Flags: W
577 LayerCount: 2
578 Fore
579 SplineSet
580 0 320 m 1,0,-1
581 600 320 l 1,1,-1
582 600 280 l 1,2,-1
583 320 280 l 1,3,-1
584 320 -200 l 1,4,-1
585 280 -200 l 1,5,-1
586 280 280 l 1,6,-1
587 0 280 l 1,7,-1
588 0 320 l 1,0,-1
589 EndSplineSet
590 Validated: 1
591 EndChar
592
593 StartChar: comma
594 Encoding: 44 44 12
595 Width: 600
596 GlyphClass: 2
597 Flags: W
598 LayerCount: 2
599 Fore
600 SplineSet
601 280 -200 m 1,0,-1
602 280 800 l 1,1,-1
603 320 800 l 1,2,-1
604 320 320 l 1,3,-1
605 600 320 l 1,4,-1
606 600 280 l 1,5,-1
607 320 280 l 1,6,-1
608 320 -200 l 1,7,-1
609 280 -200 l 1,0,-1
610 EndSplineSet
611 Validated: 1
612 EndChar
613
614 StartChar: hyphen
615 Encoding: 45 45 13
616 Width: 600
617 GlyphClass: 2
618 Flags: W
619 LayerCount: 2
620 Fore
621 SplineSet
622 320 -200 m 1,0,-1
623 280 -200 l 1,1,-1
624 280 280 l 1,2,-1
625 0 280 l 1,3,-1
626 0 320 l 1,4,-1
627 280 320 l 1,5,-1
628 280 800 l 1,6,-1
629 320 800 l 1,7,-1
630 320 -200 l 1,0,-1
631 EndSplineSet
632 Validated: 1
633 EndChar
634
635 StartChar: period
636 Encoding: 46 46 14
637 Width: 600
638 GlyphClass: 2
639 Flags: W
640 LayerCount: 2
641 Fore
642 SplineSet
643 280 280 m 1,0,-1
644 280 800 l 1,1,-1
645 320 800 l 1,2,-1
646 320 320 l 1,3,-1
647 600 320 l 1,4,-1
648 600 280 l 1,5,-1
649 280 280 l 1,0,-1
650 EndSplineSet
651 Validated: 1
652 EndChar
653
654 StartChar: slash
655 Encoding: 47 47 15
656 Width: 600
657 GlyphClass: 2
658 Flags: W
659 LayerCount: 2
660 Fore
661 SplineSet
662 280 320 m 1,0,-1
663 600 320 l 1,1,-1
664 600 280 l 1,2,-1
665 320 280 l 1,3,-1
666 320 -200 l 1,4,-1
667 280 -200 l 1,5,-1
668 280 320 l 1,0,-1
669 EndSplineSet
670 Validated: 1
671 EndChar
672
673 StartChar: zero
674 Encoding: 48 48 16
675 Width: 600
676 GlyphClass: 2
677 Flags: W
678 LayerCount: 2
679 Fore
680 SplineSet
681 320 320 m 1,0,-1
682 320 -200 l 1,1,-1
683 280 -200 l 1,2,-1
684 280 280 l 1,3,-1
685 0 280 l 1,4,-1
686 0 320 l 1,5,-1
687 320 320 l 1,0,-1
688 EndSplineSet
689 Validated: 1
690 EndChar
691
692 StartChar: one
693 Encoding: 49 49 17
694 Width: 600
695 GlyphClass: 2
696 Flags: W
697 LayerCount: 2
698 Fore
699 SplineSet
700 320 280 m 1,0,-1
701 0 280 l 1,1,-1
702 0 320 l 1,2,-1
703 280 320 l 1,3,-1
704 280 800 l 1,4,-1
705 320 800 l 1,5,-1
706 320 280 l 1,0,-1
707 EndSplineSet
708 Validated: 1
709 EndChar
710
711 StartChar: two
712 Encoding: 50 50 18
713 Width: 600
714 GlyphClass: 2
715 Flags: W
716 LayerCount: 2
717 Fore
718 SplineSet
719 311 280 m 1,0,-1
720 34 -200 l 1,1,-1
721 0 -180 l 1,2,-1
722 280 305 l 1,3,-1
723 280 800 l 1,4,-1
724 320 800 l 1,5,-1
725 320 320 l 1,6,-1
726 600 320 l 1,7,-1
727 600 280 l 1,8,-1
728 311 280 l 1,0,-1
729 EndSplineSet
730 Validated: 1
731 EndChar
732
733 StartChar: three
734 Encoding: 51 51 19
735 Width: 600
736 GlyphClass: 2
737 Flags: W
738 LayerCount: 2
739 Fore
740 SplineSet
741 311 320 m 1,0,-1
742 600 320 l 1,1,-1
743 600 280 l 1,2,-1
744 320 280 l 1,3,-1
745 320 -200 l 1,4,-1
746 280 -200 l 1,5,-1
747 280 287 l 1,6,-1
748 0 772 l 1,7,-1
749 34 792 l 1,8,-1
750 311 320 l 1,0,-1
751 EndSplineSet
752 Validated: 1
753 EndChar
754
755 StartChar: four
756 Encoding: 52 52 20
757 Width: 600
758 GlyphClass: 2
759 Flags: W
760 LayerCount: 2
761 Fore
762 SplineSet
763 320 295 m 1,0,-1
764 320 -200 l 1,1,-1
765 280 -200 l 1,2,-1
766 280 280 l 1,3,-1
767 0 280 l 1,4,-1
768 0 320 l 1,5,-1
769 289 320 l 1,6,-1
770 566 800 l 1,7,-1
771 600 780 l 1,8,-1
772 320 295 l 1,0,-1
773 EndSplineSet
774 Validated: 1
775 EndChar
776
777 StartChar: five
778 Encoding: 53 53 21
779 Width: 600
780 GlyphClass: 2
781 Flags: W
782 LayerCount: 2
783 Fore
784 SplineSet
785 600 -180 m 1,0,-1
786 566 -200 l 1,1,-1
787 289 280 l 1,2,-1
788 0 280 l 1,3,-1
789 0 320 l 1,4,-1
790 280 320 l 1,5,-1
791 280 800 l 1,6,-1
792 320 800 l 1,7,-1
793 320 305 l 1,8,-1
794 600 -180 l 1,0,-1
795 EndSplineSet
796 Validated: 1
797 EndChar
798
799 StartChar: six
800 Encoding: 54 54 22
801 Width: 600
802 GlyphClass: 2
803 Flags: W
804 LayerCount: 2
805 Fore
806 SplineSet
807 0 800 m 1,0,-1
808 600 800 l 1,1,-1
809 600 -200 l 1,2,-1
810 0 -200 l 1,3,-1
811 0 800 l 1,0,-1
812 EndSplineSet
813 Validated: 1
814 EndChar
815
816 StartChar: seven
817 Encoding: 55 55 23
818 Width: 600
819 GlyphClass: 2
820 Flags: W
821 LayerCount: 2
822 Fore
823 SplineSet
824 0 800 m 1,0,-1
825 600 800 l 1,1,-1
826 600 300 l 1,2,-1
827 0 300 l 1,3,-1
828 0 800 l 1,0,-1
829 EndSplineSet
830 Validated: 1
831 EndChar
832
833 StartChar: eight
834 Encoding: 56 56 24
835 Width: 600
836 GlyphClass: 2
837 Flags: W
838 LayerCount: 2
839 Fore
840 SplineSet
841 0 300 m 1,0,-1
842 600 300 l 1,1,-1
843 600 -200 l 1,2,-1
844 0 -200 l 1,3,-1
845 0 300 l 1,0,-1
846 EndSplineSet
847 Validated: 1
848 EndChar
849
850 StartChar: nine
851 Encoding: 57 57 25
852 Width: 600
853 GlyphClass: 2
854 Flags: W
855 LayerCount: 2
856 Fore
857 SplineSet
858 0 800 m 1,0,-1
859 300 800 l 1,1,-1
860 300 -200 l 1,2,-1
861 0 -200 l 1,3,-1
862 0 800 l 1,0,-1
863 EndSplineSet
864 Validated: 1
865 EndChar
866
867 StartChar: colon
868 Encoding: 58 58 26
869 Width: 600
870 GlyphClass: 2
871 Flags: W
872 LayerCount: 2
873 Fore
874 SplineSet
875 300 800 m 1,0,-1
876 600 800 l 1,1,-1
877 600 -200 l 1,2,-1
878 300 -200 l 1,3,-1
879 300 800 l 1,0,-1
880 EndSplineSet
881 Validated: 1
882 EndChar
883
884 StartChar: semicolon
885 Encoding: 59 59 27
886 Width: 600
887 GlyphClass: 2
888 Flags: W
889 LayerCount: 2
890 Fore
891 SplineSet
892 280 800 m 5,0,-1
893 320 800 l 5,1,-1
894 320 300 l 5,2,-1
895 600 300 l 5,3,-1
896 600 -200 l 5,4,-1
897 0 -200 l 5,5,-1
898 0 300 l 5,6,-1
899 280 300 l 5,7,-1
900 280 800 l 5,0,-1
901 EndSplineSet
902 Validated: 1
903 EndChar
904
905 StartChar: less
906 Encoding: 60 60 28
907 Width: 600
908 GlyphClass: 2
909 Flags: W
910 LayerCount: 2
911 Fore
912 SplineSet
913 280 300 m 1,0,-1
914 0 300 l 1,1,-1
915 0 800 l 1,2,-1
916 600 800 l 1,3,-1
917 600 300 l 1,4,-1
918 320 300 l 1,5,-1
919 320 -200 l 1,6,-1
920 280 -200 l 1,7,-1
921 280 300 l 1,0,-1
922 EndSplineSet
923 Validated: 1
924 EndChar
925
926 StartChar: equal
927 Encoding: 61 61 29
928 Width: 600
929 GlyphClass: 2
930 Flags: W
931 LayerCount: 2
932 Fore
933 SplineSet
934 0 800 m 1,0,-1
935 300 800 l 1,1,-1
936 300 320 l 1,2,-1
937 600 320 l 1,3,-1
938 600 280 l 1,4,-1
939 300 280 l 1,5,-1
940 300 -200 l 1,6,-1
941 0 -200 l 1,7,-1
942 0 800 l 1,0,-1
943 EndSplineSet
944 Validated: 1
945 EndChar
946
947 StartChar: greater
948 Encoding: 62 62 30
949 Width: 600
950 GlyphClass: 2
951 Flags: W
952 LayerCount: 2
953 Fore
954 SplineSet
955 300 800 m 5,0,-1
956 600 800 l 5,1,-1
957 600 -200 l 5,2,-1
958 300 -200 l 5,3,-1
959 300 280 l 5,4,-1
960 0 280 l 5,5,-1
961 0 320 l 5,6,-1
962 300 320 l 5,7,-1
963 300 800 l 5,0,-1
964 EndSplineSet
965 Validated: 1
966 EndChar
967
968 StartChar: question
969 Encoding: 63 63 31
970 Width: 600
971 GlyphClass: 2
972 Flags: W
973 LayerCount: 2
974 Fore
975 SplineSet
976 300 800 m 1,0,-1
977 600 800 l 1,1,-1
978 600 300 l 1,2,-1
979 300 300 l 1,3,-1
980 300 800 l 1,0,-1
981 EndSplineSet
982 Validated: 1
983 EndChar
984
985 StartChar: at
986 Encoding: 64 64 32
987 Width: 600
988 GlyphClass: 2
989 Flags: W
990 LayerCount: 2
991 Fore
992 SplineSet
993 300 300 m 1,0,-1
994 600 300 l 1,1,-1
995 600 -200 l 1,2,-1
996 300 -200 l 1,3,-1
997 300 300 l 1,0,-1
998 EndSplineSet
999 Validated: 1
1000 EndChar
1001
1002 StartChar: A
1003 Encoding: 65 65 33
1004 Width: 600
1005 GlyphClass: 2
1006 Flags: W
1007 LayerCount: 2
1008 Fore
1009 SplineSet
1010 0 300 m 1,0,-1
1011 300 300 l 1,1,-1
1012 300 -200 l 1,2,-1
1013 0 -200 l 1,3,-1
1014 0 300 l 1,0,-1
1015 EndSplineSet
1016 Validated: 1
1017 EndChar
1018
1019 StartChar: B
1020 Encoding: 66 66 34
1021 Width: 600
1022 GlyphClass: 2
1023 Flags: W
1024 LayerCount: 2
1025 Fore
1026 SplineSet
1027 0 800 m 1,0,-1
1028 300 800 l 1,1,-1
1029 300 300 l 1,2,-1
1030 0 300 l 1,3,-1
1031 0 800 l 1,0,-1
1032 EndSplineSet
1033 Validated: 1
1034 EndChar
1035
1036 StartChar: C
1037 Encoding: 67 67 35
1038 Width: 600
1039 GlyphClass: 2
1040 Flags: W
1041 LayerCount: 2
1042 Fore
1043 SplineSet
1044 323 300 m 5,0,-1
1045 34 -200 l 5,1,-1
1046 0 -180 l 5,2,-1
1047 300 339 l 5,3,-1
1048 300 800 l 5,4,-1
1049 600 800 l 5,5,-1
1050 600 300 l 5,6,-1
1051 323 300 l 5,0,-1
1052 EndSplineSet
1053 Validated: 1
1054 EndChar
1055
1056 StartChar: D
1057 Encoding: 68 68 36
1058 Width: 600
1059 GlyphClass: 2
1060 Flags: W
1061 LayerCount: 2
1062 Fore
1063 SplineSet
1064 323 300 m 5,0,-1
1065 600 300 l 5,1,-1
1066 600 -200 l 5,2,-1
1067 300 -200 l 5,3,-1
1068 300 261 l 5,4,-1
1069 0 780 l 5,5,-1
1070 34 800 l 5,6,-1
1071 323 300 l 5,0,-1
1072 EndSplineSet
1073 Validated: 1
1074 EndChar
1075
1076 StartChar: E
1077 Encoding: 69 69 37
1078 Width: 600
1079 GlyphClass: 2
1080 Flags: W
1081 LayerCount: 2
1082 Fore
1083 SplineSet
1084 300 261 m 1,0,-1
1085 300 -200 l 1,1,-1
1086 0 -200 l 1,2,-1
1087 0 300 l 1,3,-1
1088 277 300 l 1,4,-1
1089 566 800 l 1,5,-1
1090 600 780 l 1,6,-1
1091 300 261 l 1,0,-1
1092 EndSplineSet
1093 Validated: 1
1094 EndChar
1095
1096 StartChar: F
1097 Encoding: 70 70 38
1098 Width: 600
1099 GlyphClass: 2
1100 Flags: W
1101 LayerCount: 2
1102 Fore
1103 SplineSet
1104 600 -180 m 1,0,-1
1105 566 -200 l 1,1,-1
1106 277 300 l 1,2,-1
1107 0 300 l 1,3,-1
1108 0 800 l 1,4,-1
1109 300 800 l 1,5,-1
1110 300 339 l 1,6,-1
1111 600 -180 l 1,0,-1
1112 EndSplineSet
1113 Validated: 1
1114 EndChar
1115
1116 StartChar: G
1117 Encoding: 71 71 39
1118 Width: 600
1119 GlyphClass: 2
1120 Flags: W
1121 LayerCount: 2
1122 Fore
1123 SplineSet
1124 525 675 m 1,0,-1
1125 525 800 l 1,1,-1
1126 600 800 l 1,2,-1
1127 600 675 l 1,3,-1
1128 525 675 l 1,0,-1
1129 EndSplineSet
1130 Validated: 1
1131 EndChar
1132
1133 StartChar: H
1134 Encoding: 72 72 40
1135 Width: 600
1136 GlyphClass: 2
1137 Flags: W
1138 LayerCount: 2
1139 Fore
1140 SplineSet
1141 525 -200 m 1,0,-1
1142 525 -75 l 1,1,-1
1143 600 -75 l 1,2,-1
1144 600 -200 l 1,3,-1
1145 525 -200 l 1,0,-1
1146 EndSplineSet
1147 Validated: 1
1148 EndChar
1149
1150 StartChar: I
1151 Encoding: 73 73 41
1152 Width: 600
1153 GlyphClass: 2
1154 Flags: W
1155 LayerCount: 2
1156 Fore
1157 SplineSet
1158 75 -200 m 1,0,-1
1159 0 -200 l 1,1,-1
1160 0 -75 l 1,2,-1
1161 75 -75 l 1,3,-1
1162 75 -200 l 1,0,-1
1163 EndSplineSet
1164 Validated: 1
1165 EndChar
1166
1167 StartChar: J
1168 Encoding: 74 74 42
1169 Width: 600
1170 GlyphClass: 2
1171 Flags: W
1172 LayerCount: 2
1173 Fore
1174 SplineSet
1175 75 675 m 1,0,-1
1176 0 675 l 1,1,-1
1177 0 800 l 1,2,-1
1178 75 800 l 1,3,-1
1179 75 675 l 1,0,-1
1180 EndSplineSet
1181 Validated: 1
1182 EndChar
1183
1184 StartChar: K
1185 Encoding: 75 75 43
1186 Width: 600
1187 GlyphClass: 2
1188 Flags: W
1189 LayerCount: 2
1190 Fore
1191 SplineSet
1192 0 800 m 5,0,-1
1193 600 800 l 5,1,-1
1194 600 675 l 5,2,-1
1195 0 675 l 5,3,-1
1196 0 800 l 5,0,-1
1197 EndSplineSet
1198 Validated: 1
1199 EndChar
1200
1201 StartChar: L
1202 Encoding: 76 76 44
1203 Width: 600
1204 GlyphClass: 2
1205 Flags: W
1206 LayerCount: 2
1207 Fore
1208 SplineSet
1209 0 -75 m 5,0,-1
1210 600 -75 l 5,1,-1
1211 600 -200 l 5,2,-1
1212 0 -200 l 5,3,-1
1213 0 -75 l 5,0,-1
1214 EndSplineSet
1215 Validated: 1
1216 EndChar
1217
1218 StartChar: M
1219 Encoding: 77 77 45
1220 Width: 600
1221 GlyphClass: 2
1222 Flags: W
1223 LayerCount: 2
1224 Fore
1225 SplineSet
1226 0 800 m 5,0,-1
1227 75 800 l 5,1,-1
1228 75 -200 l 5,2,-1
1229 0 -200 l 5,3,-1
1230 0 800 l 5,0,-1
1231 EndSplineSet
1232 Validated: 1
1233 EndChar
1234
1235 StartChar: N
1236 Encoding: 78 78 46
1237 Width: 600
1238 GlyphClass: 2
1239 Flags: W
1240 LayerCount: 2
1241 Fore
1242 SplineSet
1243 525 800 m 5,0,-1
1244 600 800 l 5,1,-1
1245 600 -200 l 5,2,-1
1246 525 -200 l 5,3,-1
1247 525 800 l 5,0,-1
1248 EndSplineSet
1249 Validated: 1
1250 EndChar
1251
1252 StartChar: O
1253 Encoding: 79 79 47
1254 Width: 600
1255 GlyphClass: 2
1256 Flags: W
1257 LayerCount: 2
1258 Fore
1259 SplineSet
1260 0 0 m 5,0,-1
1261 600 0 l 5,1,-1
1262 600 -100 l 5,2,-1
1263 0 -100 l 5,3,-1
1264 0 0 l 5,0,-1
1265 0 700 m 5,4,-1
1266 600 700 l 5,5,-1
1267 600 600 l 5,6,-1
1268 0 600 l 5,7,-1
1269 0 700 l 5,4,-1
1270 EndSplineSet
1271 Validated: 1
1272 EndChar
1273
1274 StartChar: P
1275 Encoding: 80 80 48
1276 Width: 600
1277 GlyphClass: 2
1278 Flags: W
1279 LayerCount: 2
1280 Fore
1281 SplineSet
1282 75 600 m 5,0,-1
1283 75 0 l 5,1,-1
1284 600 0 l 5,2,-1
1285 600 -100 l 5,3,-1
1286 0 -100 l 5,4,-1
1287 0 700 l 5,5,-1
1288 600 700 l 5,6,-1
1289 600 600 l 5,7,-1
1290 75 600 l 5,0,-1
1291 EndSplineSet
1292 Validated: 1
1293 EndChar
1294
1295 StartChar: Q
1296 Encoding: 81 81 49
1297 Width: 600
1298 GlyphClass: 2
1299 Flags: W
1300 LayerCount: 2
1301 Fore
1302 SplineSet
1303 150 600 m 5,0,-1
1304 150 0 l 5,1,-1
1305 600 0 l 5,2,-1
1306 600 -100 l 5,3,-1
1307 0 -100 l 5,4,-1
1308 0 700 l 5,5,-1
1309 600 700 l 5,6,-1
1310 600 600 l 5,7,-1
1311 150 600 l 5,0,-1
1312 EndSplineSet
1313 Validated: 1
1314 EndChar
1315
1316 StartChar: R
1317 Encoding: 82 82 50
1318 Width: 600
1319 GlyphClass: 2
1320 Flags: W
1321 LayerCount: 2
1322 Fore
1323 SplineSet
1324 225 600 m 5,0,-1
1325 225 0 l 5,1,-1
1326 600 0 l 5,2,-1
1327 600 -100 l 5,3,-1
1328 0 -100 l 5,4,-1
1329 0 700 l 5,5,-1
1330 600 700 l 5,6,-1
1331 600 600 l 5,7,-1
1332 225 600 l 5,0,-1
1333 EndSplineSet
1334 Validated: 1
1335 EndChar
1336
1337 StartChar: S
1338 Encoding: 83 83 51
1339 Width: 600
1340 GlyphClass: 2
1341 Flags: W
1342 LayerCount: 2
1343 Fore
1344 SplineSet
1345 300 600 m 5,0,-1
1346 300 0 l 5,1,-1
1347 600 0 l 5,2,-1
1348 600 -100 l 5,3,-1
1349 0 -100 l 5,4,-1
1350 0 700 l 5,5,-1
1351 600 700 l 5,6,-1
1352 600 600 l 5,7,-1
1353 300 600 l 5,0,-1
1354 EndSplineSet
1355 Validated: 1
1356 EndChar
1357
1358 StartChar: T
1359 Encoding: 84 84 52
1360 Width: 600
1361 GlyphClass: 2
1362 Flags: W
1363 LayerCount: 2
1364 Fore
1365 SplineSet
1366 375 600 m 5,0,-1
1367 375 0 l 5,1,-1
1368 600 0 l 5,2,-1
1369 600 -100 l 5,3,-1
1370 0 -100 l 5,4,-1
1371 0 700 l 5,5,-1
1372 600 700 l 5,6,-1
1373 600 600 l 5,7,-1
1374 375 600 l 5,0,-1
1375 EndSplineSet
1376 Validated: 1
1377 EndChar
1378
1379 StartChar: U
1380 Encoding: 85 85 53
1381 Width: 600
1382 GlyphClass: 2
1383 Flags: W
1384 LayerCount: 2
1385 Fore
1386 SplineSet
1387 450 600 m 5,0,-1
1388 450 0 l 5,1,-1
1389 600 0 l 5,2,-1
1390 600 -100 l 5,3,-1
1391 0 -100 l 5,4,-1
1392 0 700 l 5,5,-1
1393 600 700 l 5,6,-1
1394 600 600 l 5,7,-1
1395 450 600 l 5,0,-1
1396 EndSplineSet
1397 Validated: 1
1398 EndChar
1399
1400 StartChar: V
1401 Encoding: 86 86 54
1402 Width: 600
1403 GlyphClass: 2
1404 Flags: W
1405 LayerCount: 2
1406 Fore
1407 SplineSet
1408 525 600 m 1,0,-1
1409 525 0 l 1,1,-1
1410 600 0 l 1,2,-1
1411 600 -100 l 1,3,-1
1412 0 -100 l 1,4,-1
1413 0 700 l 1,5,-1
1414 600 700 l 1,6,-1
1415 600 600 l 1,7,-1
1416 525 600 l 1,0,-1
1417 EndSplineSet
1418 Validated: 1
1419 EndChar
1420
1421 StartChar: W
1422 Encoding: 87 87 55
1423 Width: 600
1424 GlyphClass: 2
1425 Flags: W
1426 LayerCount: 2
1427 Fore
1428 SplineSet
1429 0 700 m 1,0,-1
1430 600 700 l 1,1,-1
1431 600 -100 l 1,2,-1
1432 0 -100 l 1,3,-1
1433 0 700 l 1,0,-1
1434 EndSplineSet
1435 Validated: 1
1436 EndChar
1437
1438 StartChar: X
1439 Encoding: 88 88 56
1440 Width: 600
1441 VWidth: 860
1442 GlyphClass: 2
1443 Flags: W
1444 LayerCount: 2
1445 Fore
1446 SplineSet
1447 525 700 m 1,0,-1
1448 600 700 l 1,1,-1
1449 600 -100 l 1,2,-1
1450 525 -100 l 1,3,-1
1451 525 700 l 1,0,-1
1452 EndSplineSet
1453 Validated: 1
1454 EndChar
1455
1456 StartChar: Y
1457 Encoding: 89 89 57
1458 Width: 600
1459 VWidth: 860
1460 GlyphClass: 2
1461 Flags: W
1462 LayerCount: 2
1463 Fore
1464 SplineSet
1465 0 700 m 1,0,-1
1466 75 700 l 1,1,-1
1467 75 -100 l 1,2,-1
1468 0 -100 l 1,3,-1
1469 0 700 l 1,0,-1
1470 EndSplineSet
1471 Validated: 1
1472 EndChar
1473
1474 StartChar: Z
1475 Encoding: 90 90 58
1476 Width: 600
1477 GlyphClass: 2
1478 Flags: W
1479 LayerCount: 2
1480 Fore
1481 SplineSet
1482 600 -180 m 1,0,-1
1483 566 -200 l 1,1,-1
1484 300 261 l 1,2,-1
1485 34 -200 l 1,3,-1
1486 0 -180 l 1,4,-1
1487 277 300 l 1,5,-1
1488 0 780 l 1,6,-1
1489 34 800 l 1,7,-1
1490 300 339 l 1,8,-1
1491 566 800 l 1,9,-1
1492 600 780 l 1,10,-1
1493 323 300 l 1,11,-1
1494 600 -180 l 1,0,-1
1495 EndSplineSet
1496 Validated: 1
1497 EndChar
1498
1499 StartChar: bracketleft
1500 Encoding: 91 91 59
1501 Width: 600
1502 GlyphClass: 2
1503 Flags: W
1504 LayerCount: 2
1505 Fore
1506 SplineSet
1507 280 280 m 1,0,-1
1508 0 280 l 1,1,-1
1509 0 320 l 1,2,-1
1510 280 320 l 1,3,-1
1511 280 800 l 1,4,-1
1512 320 800 l 1,5,-1
1513 320 320 l 1,6,-1
1514 600 320 l 1,7,-1
1515 600 280 l 1,8,-1
1516 320 280 l 1,9,-1
1517 320 -200 l 1,10,-1
1518 280 -200 l 1,11,-1
1519 280 280 l 1,0,-1
1520 EndSplineSet
1521 Validated: 1
1522 EndChar
1523
1524 StartChar: backslash
1525 Encoding: 92 92 60
1526 Width: 600
1527 GlyphClass: 2
1528 Flags: W
1529 LayerCount: 2
1530 Fore
1531 SplineSet
1532 414 316 m 1,0,1
1533 414 310 414 310 407.5 303 c 128,-1,2
1534 401 296 401 296 392 296 c 128,-1,3
1535 383 296 383 296 374 308 c 1,4,-1
1536 322 404 l 1,5,-1
1537 322 64 l 2,6,7
1538 322 38 322 38 302 38 c 0,8,9
1539 280 38 280 38 280 64 c 2,10,-1
1540 280 406 l 1,11,-1
1541 226 308 l 2,12,13
1542 220 296 220 296 210 296 c 0,14,15
1543 198 296 198 296 192 303.5 c 128,-1,16
1544 186 311 186 311 186 316 c 0,17,18
1545 186 322 186 322 192 328 c 1,19,-1
1546 300 524 l 1,20,-1
1547 410 328 l 1,21,-1
1548 414 316 l 1,0,1
1549 EndSplineSet
1550 Validated: 1
1551 EndChar
1552
1553 StartChar: bracketright
1554 Encoding: 93 93 61
1555 Width: 600
1556 GlyphClass: 2
1557 Flags: W
1558 LayerCount: 2
1559 Fore
1560 SplineSet
1561 186 246 m 0,0,1
1562 186 251 186 251 192 258.5 c 128,-1,2
1563 198 266 198 266 210 266 c 0,3,4
1564 220 266 220 266 226 254 c 2,5,-1
1565 280 156 l 1,6,-1
1566 280 498 l 2,7,8
1567 280 524 280 524 302 524 c 0,9,10
1568 322 524 322 524 322 498 c 2,11,-1
1569 322 158 l 1,12,-1
1570 374 254 l 1,13,14
1571 383 266 383 266 392 266 c 128,-1,15
1572 401 266 401 266 407.5 259.5 c 128,-1,16
1573 414 253 414 253 414 246 c 1,17,-1
1574 410 234 l 1,18,-1
1575 300 38 l 1,19,-1
1576 192 234 l 1,20,21
1577 186 240 186 240 186 246 c 0,0,1
1578 EndSplineSet
1579 Validated: 1
1580 EndChar
1581
1582 StartChar: asciicircum
1583 Encoding: 94 94 62
1584 Width: 600
1585 GlyphClass: 2
1586 Flags: W
1587 LayerCount: 2
1588 Fore
1589 SplineSet
1590 186 215 m 0,0,1
1591 186 223 186 223 194 229 c 128,-1,2
1592 202 235 202 235 209 235 c 0,3,4
1593 219 235 219 235 226 222 c 2,5,-1
1594 280 124 l 1,6,-1
1595 280 438 l 1,7,-1
1596 226 340 l 2,8,9
1597 219 327 219 327 209 327 c 0,10,11
1598 202 327 202 327 194 333 c 128,-1,12
1599 186 339 186 339 186 347 c 0,13,14
1600 186 352 186 352 191 360 c 2,15,-1
1601 300 556 l 1,16,-1
1602 409 359 l 2,17,18
1603 414 351 414 351 414 347 c 0,19,20
1604 414 340 414 340 407 333.5 c 128,-1,21
1605 400 327 400 327 392 327 c 0,22,23
1606 381 327 381 327 374 340 c 2,24,-1
1607 321 436 l 1,25,-1
1608 321 126 l 1,26,-1
1609 374 222 l 2,27,28
1610 381 235 381 235 392 235 c 0,29,30
1611 399 235 399 235 406.5 228.5 c 128,-1,31
1612 414 222 414 222 414 215 c 0,32,33
1613 414 211 414 211 409 203 c 2,34,-1
1614 300 6 l 1,35,-1
1615 191 202 l 2,36,37
1616 186 210 186 210 186 215 c 0,0,1
1617 EndSplineSet
1618 Validated: 1
1619 EndChar
1620
1621 StartChar: underscore
1622 Encoding: 95 95 63
1623 Width: 600
1624 GlyphClass: 2
1625 Flags: W
1626 LayerCount: 2
1627 Fore
1628 SplineSet
1629 0 -200 m 5,0,-1
1630 0 800 l 5,1,-1
1631 600 800 l 5,2,-1
1632 600 -200 l 5,3,-1
1633 0 -200 l 5,0,-1
1634 75 -75 m 5,4,-1
1635 525 -75 l 5,5,-1
1636 525 675 l 5,6,-1
1637 75 675 l 5,7,-1
1638 75 -75 l 5,4,-1
1639 EndSplineSet
1640 Validated: 1
1641 EndChar
1642
1643 StartChar: grave
1644 Encoding: 96 96 64
1645 Width: 600
1646 GlyphClass: 2
1647 Flags: W
1648 LayerCount: 2
1649 Fore
1650 SplineSet
1651 134 529 m 1,0,1
1652 144 532 144 532 175 546.5 c 128,-1,2
1653 206 561 206 561 237.5 569 c 128,-1,3
1654 269 577 269 577 309 577 c 0,4,5
1655 389 577 389 577 438 534.5 c 128,-1,6
1656 487 492 487 492 487 423 c 0,7,8
1657 487 367 487 367 451.5 329 c 128,-1,9
1658 416 291 416 291 322 247 c 1,10,-1
1659 322 206 l 2,11,12
1660 322 179 322 179 302 179 c 0,13,14
1661 281 179 281 179 281 206 c 2,15,-1
1662 281 274 l 1,16,17
1663 369 311 369 311 407.5 345.5 c 128,-1,18
1664 446 380 446 380 446 423 c 0,19,20
1665 446 473 446 473 406 504.5 c 128,-1,21
1666 366 536 366 536 304 536 c 0,22,23
1667 243 536 243 536 175 502 c 1,24,-1
1668 175 461 l 2,25,26
1669 175 434 175 434 155 434 c 0,27,28
1670 134 434 134 434 134 461 c 2,29,-1
1671 134 529 l 1,0,1
1672 287 85 m 2,30,-1
1673 314 85 l 2,31,32
1674 340 85 340 85 355.5 71 c 128,-1,33
1675 371 57 371 57 371 35 c 128,-1,34
1676 371 13 371 13 355 -1 c 128,-1,35
1677 339 -15 339 -15 314 -15 c 2,36,-1
1678 287 -15 l 2,37,38
1679 261 -15 261 -15 245.5 -1 c 128,-1,39
1680 230 13 230 13 230 35 c 128,-1,40
1681 230 57 230 57 245.5 71 c 128,-1,41
1682 261 85 261 85 287 85 c 2,30,-1
1683 EndSplineSet
1684 Validated: 1
1685 EndChar
1686
1687 StartChar: a
1688 Encoding: 97 97 65
1689 Width: 600
1690 GlyphClass: 2
1691 Flags: W
1692 LayerCount: 2
1693 Fore
1694 SplineSet
1695 416 768 m 1,0,-1
1696 301 679 l 1,1,-1
1697 211 748 l 1,2,-1
1698 211 683 l 1,3,-1
1699 308 607 l 1,4,-1
1700 293 581 l 1,5,-1
1701 211 645 l 1,6,-1
1702 211 -104 l 1,7,-1
1703 184 -104 l 1,8,-1
1704 184 787 l 1,9,-1
1705 211 787 l 1,10,-1
1706 301 718 l 1,11,-1
1707 401 796 l 1,12,-1
1708 416 768 l 1,0,-1
1709 EndSplineSet
1710 Validated: 1
1711 EndChar
1712
1713 StartChar: b
1714 Encoding: 98 98 66
1715 Width: 600
1716 GlyphClass: 2
1717 Flags: W
1718 LayerCount: 2
1719 Fore
1720 SplineSet
1721 438 188 m 1,0,-1
1722 190 -103 l 1,1,-1
1723 162 -103 l 1,2,-1
1724 162 788 l 1,3,-1
1725 190 788 l 1,4,-1
1726 438 497 l 1,5,-1
1727 307 343 l 1,6,-1
1728 438 188 l 1,0,-1
1729 398 498 m 1,7,-1
1730 190 742 l 1,8,-1
1731 190 -57 l 1,9,-1
1732 397 187 l 1,10,-1
1733 264 343 l 1,11,-1
1734 398 498 l 1,7,-1
1735 EndSplineSet
1736 Validated: 1
1737 EndChar
1738
1739 StartChar: c
1740 Encoding: 99 99 67
1741 Width: 600
1742 GlyphClass: 2
1743 Flags: W
1744 LayerCount: 2
1745 Fore
1746 SplineSet
1747 424 611 m 1,0,-1
1748 313 741 l 1,1,-1
1749 313 -103 l 1,2,-1
1750 286 -103 l 1,3,-1
1751 176 27 l 1,4,-1
1752 176 73 l 1,5,-1
1753 286 -56 l 1,6,-1
1754 286 788 l 1,7,-1
1755 313 788 l 1,8,-1
1756 424 658 l 1,9,-1
1757 424 611 l 1,0,-1
1758 EndSplineSet
1759 Validated: 1
1760 EndChar
1761
1762 StartChar: d
1763 Encoding: 100 100 68
1764 Width: 600
1765 GlyphClass: 2
1766 Flags: W
1767 LayerCount: 2
1768 Fore
1769 SplineSet
1770 582 -103 m 1,0,-1
1771 550 -103 l 1,1,-1
1772 300 316 l 1,2,-1
1773 50 -103 l 1,3,-1
1774 18 -103 l 1,4,-1
1775 18 788 l 1,5,-1
1776 50 788 l 1,6,-1
1777 300 369 l 1,7,-1
1778 550 788 l 1,8,-1
1779 582 788 l 1,9,-1
1780 582 -103 l 1,0,-1
1781 554 -57 m 1,10,-1
1782 554 742 l 1,11,-1
1783 316 343 l 1,12,-1
1784 554 -57 l 1,10,-1
1785 285 343 m 1,13,-1
1786 46 742 l 1,14,-1
1787 46 -57 l 1,15,-1
1788 285 343 l 1,13,-1
1789 EndSplineSet
1790 Validated: 1
1791 EndChar
1792
1793 StartChar: e
1794 Encoding: 101 101 69
1795 Width: 600
1796 GlyphClass: 2
1797 Flags: W
1798 LayerCount: 2
1799 Fore
1800 SplineSet
1801 490 -103 m 1,0,-1
1802 463 -103 l 1,1,-1
1803 463 744 l 1,2,-1
1804 300 551 l 1,3,-1
1805 137 744 l 1,4,-1
1806 137 -103 l 1,5,-1
1807 110 -103 l 1,6,-1
1808 110 788 l 1,7,-1
1809 137 788 l 1,8,-1
1810 300 598 l 1,9,-1
1811 463 788 l 1,10,-1
1812 490 788 l 1,11,-1
1813 490 -103 l 1,0,-1
1814 EndSplineSet
1815 Validated: 1
1816 EndChar
1817
1818 StartChar: f
1819 Encoding: 102 102 70
1820 Width: 600
1821 GlyphClass: 2
1822 Flags: W
1823 LayerCount: 2
1824 Fore
1825 SplineSet
1826 391 576 m 1,0,-1
1827 237 394 l 1,1,-1
1828 237 -103 l 1,2,-1
1829 209 -103 l 1,3,-1
1830 209 788 l 1,4,-1
1831 237 788 l 1,5,-1
1832 237 606 l 1,6,-1
1833 391 788 l 1,7,-1
1834 391 741 l 1,8,-1
1835 237 559 l 1,9,-1
1836 237 441 l 1,10,-1
1837 391 623 l 1,11,-1
1838 391 576 l 1,0,-1
1839 EndSplineSet
1840 Validated: 1
1841 EndChar
1842
1843 StartChar: g
1844 Encoding: 103 103 71
1845 Width: 600
1846 GlyphClass: 2
1847 Flags: W
1848 LayerCount: 2
1849 Fore
1850 SplineSet
1851 582 -103 m 1,0,-1
1852 550 -103 l 1,1,-1
1853 300 316 l 1,2,-1
1854 50 -103 l 1,3,-1
1855 18 -103 l 1,4,-1
1856 285 343 l 1,5,-1
1857 18 788 l 1,6,-1
1858 50 788 l 1,7,-1
1859 300 369 l 1,8,-1
1860 550 788 l 1,9,-1
1861 582 788 l 1,10,-1
1862 316 343 l 1,11,-1
1863 582 -103 l 1,0,-1
1864 EndSplineSet
1865 Validated: 1
1866 EndChar
1867
1868 StartChar: h
1869 Encoding: 104 104 72
1870 Width: 600
1871 GlyphClass: 2
1872 Flags: W
1873 LayerCount: 2
1874 Fore
1875 SplineSet
1876 431 -103 m 1,0,-1
1877 403 -103 l 1,1,-1
1878 403 108 l 1,2,-1
1879 197 351 l 1,3,-1
1880 197 -103 l 1,4,-1
1881 169 -103 l 1,5,-1
1882 169 788 l 1,6,-1
1883 197 788 l 1,7,-1
1884 197 580 l 1,8,-1
1885 403 335 l 1,9,-1
1886 403 788 l 1,10,-1
1887 431 788 l 1,11,-1
1888 431 -103 l 1,0,-1
1889 403 155 m 1,12,-1
1890 403 290 l 1,13,-1
1891 197 534 l 1,14,-1
1892 197 396 l 1,15,-1
1893 403 155 l 1,12,-1
1894 EndSplineSet
1895 Validated: 1
1896 EndChar
1897
1898 StartChar: i
1899 Encoding: 105 105 73
1900 Width: 600
1901 GlyphClass: 2
1902 Flags: W
1903 LayerCount: 2
1904 Fore
1905 SplineSet
1906 314 -103 m 1,0,-1
1907 286 -103 l 1,1,-1
1908 286 788 l 1,2,-1
1909 314 788 l 1,3,-1
1910 314 -103 l 1,0,-1
1911 EndSplineSet
1912 Validated: 1
1913 EndChar
1914
1915 StartChar: j
1916 Encoding: 106 106 74
1917 Width: 600
1918 GlyphClass: 2
1919 Flags: W
1920 LayerCount: 2
1921 Fore
1922 SplineSet
1923 549 334 m 1,0,-1
1924 314 57 l 1,1,-1
1925 314 -103 l 1,2,-1
1926 286 -103 l 1,3,-1
1927 286 57 l 1,4,-1
1928 51 334 l 1,5,-1
1929 286 612 l 1,6,-1
1930 286 788 l 1,7,-1
1931 314 788 l 1,8,-1
1932 314 612 l 1,9,-1
1933 549 334 l 1,0,-1
1934 510 334 m 1,10,-1
1935 314 565 l 1,11,-1
1936 314 103 l 1,12,-1
1937 510 334 l 1,10,-1
1938 286 103 m 1,13,-1
1939 286 565 l 1,14,-1
1940 90 334 l 1,15,-1
1941 286 103 l 1,13,-1
1942 EndSplineSet
1943 Validated: 1
1944 EndChar
1945
1946 StartChar: k
1947 Encoding: 107 107 75
1948 Width: 600
1949 GlyphClass: 2
1950 Flags: W
1951 LayerCount: 2
1952 Fore
1953 SplineSet
1954 51 -101 m 1,0,1
1955 51 -36 51 -36 70.5 17 c 128,-1,2
1956 90 70 90 70 118 101 c 128,-1,3
1957 146 132 146 132 180.5 153 c 128,-1,4
1958 215 174 215 174 241.5 182 c 128,-1,5
1959 268 190 268 190 288 191 c 1,6,-1
1960 288 788 l 1,7,-1
1961 315 788 l 1,8,-1
1962 315 191 l 1,9,10
1963 416 183 416 183 482.5 97.5 c 128,-1,11
1964 549 12 549 12 549 -101 c 1,12,-1
1965 521 -101 l 1,13,14
1966 521 0 521 0 462 75 c 128,-1,15
1967 403 150 403 150 315 159 c 1,16,-1
1968 315 -103 l 1,17,-1
1969 288 -103 l 1,18,-1
1970 288 159 l 1,19,20
1971 197 153 197 153 138 76.5 c 128,-1,21
1972 79 0 79 0 79 -101 c 1,22,-1
1973 51 -101 l 1,0,1
1974 EndSplineSet
1975 Validated: 1
1976 EndChar
1977
1978 StartChar: l
1979 Encoding: 108 108 76
1980 Width: 600
1981 GlyphClass: 2
1982 Flags: W
1983 LayerCount: 2
1984 Fore
1985 SplineSet
1986 386 572 m 1,0,-1
1987 241 744 l 1,1,-1
1988 241 -103 l 1,2,-1
1989 214 -103 l 1,3,-1
1990 214 788 l 1,4,-1
1991 241 788 l 1,5,-1
1992 386 619 l 1,6,-1
1993 386 572 l 1,0,-1
1994 EndSplineSet
1995 Validated: 1
1996 EndChar
1997
1998 StartChar: m
1999 Encoding: 109 109 77
2000 Width: 600
2001 GlyphClass: 2
2002 Flags: W
2003 LayerCount: 2
2004 Fore
2005 SplineSet
2006 454 -103 m 1,0,-1
2007 426 -103 l 1,1,-1
2008 426 744 l 1,2,-1
2009 320 617 l 1,3,-1
2010 387 538 l 1,4,-1
2011 387 491 l 1,5,-1
2012 300 594 l 1,6,-1
2013 213 491 l 1,7,-1
2014 213 538 l 1,8,-1
2015 280 617 l 1,9,-1
2016 174 744 l 1,10,-1
2017 174 -103 l 1,11,-1
2018 146 -103 l 1,12,-1
2019 146 788 l 1,13,-1
2020 174 788 l 1,14,-1
2021 300 640 l 1,15,-1
2022 426 788 l 1,16,-1
2023 454 788 l 1,17,-1
2024 454 -103 l 1,0,-1
2025 EndSplineSet
2026 Validated: 1
2027 EndChar
2028
2029 StartChar: n
2030 Encoding: 110 110 78
2031 Width: 600
2032 GlyphClass: 2
2033 Flags: W
2034 LayerCount: 2
2035 Fore
2036 SplineSet
2037 424 157 m 1,0,-1
2038 313 289 l 1,1,-1
2039 313 -103 l 1,2,-1
2040 286 -103 l 1,3,-1
2041 286 321 l 1,4,-1
2042 176 450 l 1,5,-1
2043 176 497 l 1,6,-1
2044 286 367 l 1,7,-1
2045 286 788 l 1,8,-1
2046 313 788 l 1,9,-1
2047 313 334 l 1,10,-1
2048 424 204 l 1,11,-1
2049 424 157 l 1,0,-1
2050 EndSplineSet
2051 Validated: 1
2052 EndChar
2053
2054 StartChar: o
2055 Encoding: 111 111 79
2056 Width: 600
2057 GlyphClass: 2
2058 Flags: W
2059 LayerCount: 2
2060 Fore
2061 SplineSet
2062 416 666 m 1,0,-1
2063 301 575 l 1,1,-1
2064 211 645 l 1,2,-1
2065 211 -104 l 1,3,-1
2066 184 -104 l 1,4,-1
2067 184 787 l 1,5,-1
2068 211 787 l 1,6,-1
2069 301 718 l 1,7,-1
2070 401 796 l 1,8,-1
2071 416 768 l 1,9,-1
2072 301 679 l 1,10,-1
2073 211 748 l 1,11,-1
2074 211 683 l 1,12,-1
2075 301 614 l 1,13,-1
2076 401 692 l 1,14,-1
2077 416 666 l 1,0,-1
2078 EndSplineSet
2079 Validated: 1
2080 EndChar
2081
2082 StartChar: p
2083 Encoding: 112 112 80
2084 Width: 600
2085 GlyphClass: 2
2086 Flags: W
2087 LayerCount: 2
2088 Fore
2089 SplineSet
2090 184 788 m 1,0,1
2091 184 788 184 788 184 -56 c 1,2,-1
2092 316 99 l 1,3,-1
2093 443 -51 l 1,4,-1
2094 443 -98 l 1,5,-1
2095 316 52 l 1,6,-1
2096 184 -103 l 1,7,-1
2097 157 -103 l 1,8,-1
2098 157 788 l 1,9,-1
2099 184 788 l 1,0,1
2100 EndSplineSet
2101 Validated: 1
2102 EndChar
2103
2104 StartChar: q
2105 Encoding: 113 113 81
2106 Width: 600
2107 GlyphClass: 2
2108 Flags: W
2109 LayerCount: 2
2110 Fore
2111 SplineSet
2112 436 -103 m 1,0,-1
2113 397 -103 l 1,1,-1
2114 191 140 l 1,2,-1
2115 191 -103 l 1,3,-1
2116 164 -103 l 1,4,-1
2117 164 788 l 1,5,-1
2118 191 788 l 1,6,-1
2119 191 186 l 1,7,-1
2120 436 -103 l 1,0,-1
2121 EndSplineSet
2122 Validated: 1
2123 EndChar
2124
2125 StartChar: r
2126 Encoding: 114 114 82
2127 Width: 600
2128 GlyphClass: 2
2129 Flags: W
2130 LayerCount: 2
2131 Fore
2132 SplineSet
2133 438 497 m 1,0,-1
2134 263 292 l 1,1,-1
2135 428 96 l 1,2,-1
2136 428 51 l 1,3,-1
2137 223 291 l 1,4,-1
2138 398 498 l 1,5,-1
2139 190 742 l 1,6,-1
2140 190 -103 l 1,7,-1
2141 162 -103 l 1,8,-1
2142 162 788 l 1,9,-1
2143 190 788 l 1,10,-1
2144 438 497 l 1,0,-1
2145 EndSplineSet
2146 Validated: 1
2147 EndChar
2148
2149 StartChar: s
2150 Encoding: 115 115 83
2151 Width: 600
2152 GlyphClass: 2
2153 Flags: W
2154 LayerCount: 2
2155 Fore
2156 SplineSet
2157 423 -103 m 1,0,-1
2158 395 -103 l 1,1,-1
2159 395 464 l 1,2,-1
2160 177 206 l 1,3,-1
2161 177 789 l 1,4,-1
2162 205 789 l 1,5,-1
2163 205 284 l 1,6,-1
2164 423 542 l 1,7,-1
2165 423 -103 l 1,0,-1
2166 EndSplineSet
2167 Validated: 1
2168 EndChar
2169
2170 StartChar: t
2171 Encoding: 116 116 84
2172 Width: 600
2173 GlyphClass: 2
2174 Flags: W
2175 LayerCount: 2
2176 Fore
2177 SplineSet
2178 441 572 m 1,0,-1
2179 296 744 l 1,1,-1
2180 296 -103 l 1,2,-1
2181 269 -103 l 1,3,-1
2182 269 741 l 1,4,-1
2183 159 610 l 1,5,-1
2184 159 655 l 1,6,-1
2185 269 788 l 1,7,-1
2186 296 788 l 1,8,-1
2187 441 619 l 1,9,-1
2188 441 572 l 1,0,-1
2189 EndSplineSet
2190 Validated: 1
2191 EndChar
2192
2193 StartChar: u
2194 Encoding: 117 117 85
2195 Width: 600
2196 GlyphClass: 2
2197 Flags: W
2198 LayerCount: 2
2199 Fore
2200 SplineSet
2201 529 -103 m 1,0,-1
2202 486 -103 l 1,1,-1
2203 99 744 l 1,2,-1
2204 99 -103 l 1,3,-1
2205 71 -103 l 1,4,-1
2206 71 788 l 1,5,-1
2207 99 788 l 1,6,-1
2208 529 -103 l 1,0,-1
2209 EndSplineSet
2210 Validated: 1
2211 EndChar
2212
2213 StartChar: v
2214 Encoding: 118 118 86
2215 Width: 600
2216 GlyphClass: 2
2217 Flags: W
2218 LayerCount: 2
2219 Fore
2220 SplineSet
2221 573 783 m 1,0,-1
2222 573 736 l 1,1,-1
2223 445 586 l 1,2,-1
2224 314 741 l 1,3,-1
2225 314 -103 l 1,4,-1
2226 287 -103 l 1,5,-1
2227 287 741 l 1,6,-1
2228 155 586 l 1,7,-1
2229 27 737 l 1,8,-1
2230 28 783 l 1,9,-1
2231 155 633 l 1,10,-1
2232 287 788 l 1,11,-1
2233 314 788 l 1,12,-1
2234 446 633 l 1,13,-1
2235 573 783 l 1,0,-1
2236 EndSplineSet
2237 Validated: 1
2238 EndChar
2239
2240 StartChar: w
2241 Encoding: 119 119 87
2242 Width: 600
2243 GlyphClass: 2
2244 Flags: W
2245 LayerCount: 2
2246 Fore
2247 SplineSet
2248 431 510 m 1,0,-1
2249 196 233 l 1,1,-1
2250 196 -103 l 1,2,-1
2251 169 -103 l 1,3,-1
2252 169 788 l 1,4,-1
2253 196 788 l 1,5,6
2254 196 788 196 788 431 510 c 1,0,-1
2255 392 510 m 1,7,-1
2256 196 742 l 1,8,-1
2257 196 278 l 1,9,-1
2258 392 510 l 1,7,-1
2259 EndSplineSet
2260 Validated: 1
2261 EndChar
2262
2263 StartChar: x
2264 Encoding: 120 120 88
2265 Width: 600
2266 GlyphClass: 2
2267 Flags: W
2268 LayerCount: 2
2269 Fore
2270 SplineSet
2271 441 703 m 1,0,-1
2272 296 532 l 1,1,-1
2273 296 -103 l 1,2,-1
2274 269 -103 l 1,3,-1
2275 269 533 l 1,4,-1
2276 159 663 l 1,5,-1
2277 159 708 l 1,6,-1
2278 269 580 l 1,7,-1
2279 269 788 l 1,8,-1
2280 296 788 l 1,9,-1
2281 296 578 l 1,10,-1
2282 441 750 l 1,11,-1
2283 441 703 l 1,0,-1
2284 EndSplineSet
2285 Validated: 1
2286 EndChar
2287
2288 StartChar: y
2289 Encoding: 121 121 89
2290 Width: 600
2291 GlyphClass: 2
2292 Flags: W
2293 LayerCount: 2
2294 Fore
2295 SplineSet
2296 529 -103 m 1,0,-1
2297 486 -103 l 1,1,-1
2298 99 744 l 1,2,-1
2299 99 426 l 1,3,-1
2300 148 426 l 2,4,5
2301 181 426 181 426 203 399 c 128,-1,6
2302 225 372 225 372 225 335 c 2,7,-1
2303 225 -103 l 1,8,-1
2304 198 -103 l 1,9,-1
2305 198 335 l 2,10,11
2306 198 358 198 358 183.5 376 c 128,-1,12
2307 169 394 169 394 148 394 c 2,13,-1
2308 99 394 l 1,14,-1
2309 99 -103 l 1,15,-1
2310 71 -103 l 1,16,-1
2311 71 788 l 1,17,-1
2312 99 788 l 1,18,-1
2313 529 -103 l 1,0,-1
2314 EndSplineSet
2315 Validated: 1
2316 EndChar
2317
2318 StartChar: z
2319 Encoding: 122 122 90
2320 Width: 600
2321 GlyphClass: 2
2322 Flags: W
2323 LayerCount: 2
2324 Fore
2325 SplineSet
2326 495 410 m 1,0,-1
2327 319 202 l 1,1,-1
2328 495 -4 l 1,2,-1
2329 456 -4 l 1,3,-1
2330 298 182 l 1,4,-1
2331 145 1 l 1,5,-1
2332 106 1 l 1,6,-1
2333 279 205 l 1,7,-1
2334 105 410 l 1,8,-1
2335 300 639 l 1,9,-1
2336 495 410 l 1,0,-1
2337 455 409 m 1,10,-1
2338 300 592 l 1,11,-1
2339 145 410 l 1,12,-1
2340 300 227 l 1,13,-1
2341 455 409 l 1,10,-1
2342 EndSplineSet
2343 Validated: 1
2344 EndChar
2345
2346 StartChar: braceleft
2347 Encoding: 123 123 91
2348 Width: 600
2349 GlyphClass: 2
2350 Flags: W
2351 LayerCount: 2
2352 Fore
2353 SplineSet
2354 0 800 m 5,0,-1
2355 600 800 l 5,1,-1
2356 600 -200 l 1,2,-1
2357 0 -200 l 1,3,-1
2358 0 800 l 5,0,-1
2359 414 316 m 1,4,-1
2360 410 328 l 1,5,-1
2361 300 524 l 1,6,-1
2362 192 328 l 1,7,8
2363 186 322 186 322 186 316 c 0,9,10
2364 186 311 186 311 192 303.5 c 128,-1,11
2365 198 296 198 296 210 296 c 0,12,13
2366 220 296 220 296 226 308 c 2,14,-1
2367 280 406 l 1,15,-1
2368 280 64 l 2,16,17
2369 280 38 280 38 302 38 c 0,18,19
2370 322 38 322 38 322 64 c 2,20,-1
2371 322 404 l 1,21,-1
2372 374 308 l 1,22,23
2373 383 296 383 296 392 296 c 128,-1,24
2374 401 296 401 296 407.5 303 c 128,-1,25
2375 414 310 414 310 414 316 c 1,4,-1
2376 EndSplineSet
2377 Validated: 1
2378 EndChar
2379
2380 StartChar: bar
2381 Encoding: 124 124 92
2382 Width: 600
2383 GlyphClass: 2
2384 Flags: W
2385 LayerCount: 2
2386 Fore
2387 SplineSet
2388 0 800 m 5,0,-1
2389 600 800 l 5,1,-1
2390 600 -200 l 5,2,-1
2391 0 -200 l 5,3,-1
2392 0 800 l 5,0,-1
2393 186 246 m 0,4,5
2394 186 240 186 240 192 234 c 1,6,-1
2395 300 38 l 1,7,-1
2396 410 234 l 1,8,-1
2397 414 246 l 1,9,10
2398 414 253 414 253 407.5 259.5 c 128,-1,11
2399 401 266 401 266 392 266 c 128,-1,12
2400 383 266 383 266 374 254 c 1,13,-1
2401 322 158 l 1,14,-1
2402 322 498 l 2,15,16
2403 322 524 322 524 302 524 c 0,17,18
2404 280 524 280 524 280 498 c 2,19,-1
2405 280 156 l 1,20,-1
2406 226 254 l 2,21,22
2407 220 266 220 266 210 266 c 0,23,24
2408 198 266 198 266 192 258.5 c 128,-1,25
2409 186 251 186 251 186 246 c 0,4,5
2410 EndSplineSet
2411 Validated: 1
2412 EndChar
2413
2414 StartChar: braceright
2415 Encoding: 125 125 93
2416 Width: 600
2417 GlyphClass: 2
2418 Flags: W
2419 LayerCount: 2
2420 Fore
2421 SplineSet
2422 0 800 m 5,0,-1
2423 600 800 l 5,1,-1
2424 600 -200 l 5,2,-1
2425 0 -200 l 5,3,-1
2426 0 800 l 5,0,-1
2427 186 215 m 0,4,5
2428 186 210 186 210 191 202 c 2,6,-1
2429 300 6 l 1,7,-1
2430 409 203 l 2,8,9
2431 414 211 414 211 414 215 c 0,10,11
2432 414 222 414 222 406.5 228.5 c 128,-1,12
2433 399 235 399 235 392 235 c 0,13,14
2434 381 235 381 235 374 222 c 2,15,-1
2435 321 126 l 1,16,-1
2436 321 436 l 1,17,-1
2437 374 340 l 2,18,19
2438 381 327 381 327 392 327 c 0,20,21
2439 400 327 400 327 407 333.5 c 128,-1,22
2440 414 340 414 340 414 347 c 0,23,24
2441 414 351 414 351 409 359 c 2,25,-1
2442 300 556 l 1,26,-1
2443 191 360 l 2,27,28
2444 186 352 186 352 186 347 c 0,29,30
2445 186 339 186 339 194 333 c 128,-1,31
2446 202 327 202 327 209 327 c 0,32,33
2447 219 327 219 327 226 340 c 2,34,-1
2448 280 438 l 1,35,-1
2449 280 124 l 1,36,-1
2450 226 222 l 2,37,38
2451 219 235 219 235 209 235 c 0,39,40
2452 202 235 202 235 194 229 c 128,-1,41
2453 186 223 186 223 186 215 c 0,4,5
2454 EndSplineSet
2455 Validated: 1
2456 EndChar
2457
2458 StartChar: asciitilde
2459 Encoding: 126 126 94
2460 Width: 600
2461 GlyphClass: 2
2462 Flags: W
2463 LayerCount: 2
2464 Fore
2465 SplineSet
2466 0 800 m 5,0,-1
2467 600 800 l 5,1,-1
2468 600 -200 l 5,2,-1
2469 0 -200 l 5,3,-1
2470 0 800 l 5,0,-1
2471 134 529 m 1,4,-1
2472 134 461 l 2,5,6
2473 134 434 134 434 155 434 c 0,7,8
2474 175 434 175 434 175 461 c 2,9,-1
2475 175 502 l 1,10,11
2476 243 536 243 536 304 536 c 0,12,13
2477 366 536 366 536 406 504.5 c 128,-1,14
2478 446 473 446 473 446 423 c 0,15,16
2479 446 380 446 380 407.5 345.5 c 128,-1,17
2480 369 311 369 311 281 274 c 1,18,-1
2481 281 206 l 2,19,20
2482 281 179 281 179 302 179 c 0,21,22
2483 322 179 322 179 322 206 c 2,23,-1
2484 322 247 l 1,24,25
2485 416 291 416 291 451.5 329 c 128,-1,26
2486 487 367 487 367 487 423 c 0,27,28
2487 487 492 487 492 438 534.5 c 128,-1,29
2488 389 577 389 577 309 577 c 0,30,31
2489 269 577 269 577 237.5 569 c 128,-1,32
2490 206 561 206 561 175 546.5 c 128,-1,33
2491 144 532 144 532 134 529 c 1,4,-1
2492 287 85 m 2,34,35
2493 261 85 261 85 245.5 71 c 128,-1,36
2494 230 57 230 57 230 35 c 128,-1,37
2495 230 13 230 13 245.5 -1 c 128,-1,38
2496 261 -15 261 -15 287 -15 c 2,39,-1
2497 314 -15 l 2,40,41
2498 339 -15 339 -15 355 -1 c 128,-1,42
2499 371 13 371 13 371 35 c 128,-1,43
2500 371 57 371 57 355.5 71 c 128,-1,44
2501 340 85 340 85 314 85 c 2,45,-1
2502 287 85 l 2,34,35
2503 EndSplineSet
2504 Validated: 1
2505 EndChar
2506 EndChars
2507 EndSplineFont
Binary diff not shown
0 # For GNU Make.
1
2 SOURCES = owblorb.c owinit.c owinput.c owmouse.c owpic.c owsample.c owscreen.c owtext.c
3 HEADERS = blorb.h blorblow.h fontdata.h owblorb.h owfrotz.h owhash.h
4 OBJECTS = $(SOURCES:.c=.o)
5
6 %.o: %.c
7 $(WCC) $(CFLAGS) $(DOS_CFLAGS) -o $@ -c $<
8
9 .PHONY: clean
10
11 clean:
12 rm -f $(TARGET) $(OBJECTS)
13 rm -f *.O
14
0 #ifndef BLORB_H
1 #define BLORB_H
2
3 /* blorb.h: Header file for Blorb library, version 1.0.2.
4 Designed by Andrew Plotkin <erkyrath@eblong.com>
5 http://www.eblong.com/zarf/blorb/index.html
6
7 This is the header that a Z-machine interpreter should include.
8 It defines everything that the interpreter has to know.
9 */
10
11 /* Things you (the porter) have to edit: */
12
13 /* As you might expect, uint32 must be a 32-bit unsigned numeric type,
14 and uint16 a 16-bit unsigned numeric type. You should also uncomment
15 exactly one of the two ENDIAN definitions. */
16
17 typedef unsigned long uint32;
18 typedef unsigned short uint16;
19
20 /* End of things you have to edit. */
21
22 #ifndef TRUE
23 #define TRUE 1
24 #endif
25 #ifndef FALSE
26 #define FALSE 0
27 #endif
28
29 /* Error type and error codes */
30 typedef int bb_err_t;
31
32 #define bb_err_None (0)
33 #define bb_err_CompileTime (1)
34 #define bb_err_Alloc (2)
35 #define bb_err_Read (3)
36 #define bb_err_NotAMap (4)
37 #define bb_err_Format (5)
38 #define bb_err_NotFound (6)
39
40 /* Methods for loading a chunk */
41 #define bb_method_DontLoad (0)
42 #define bb_method_Memory (1)
43 #define bb_method_FilePos (2)
44
45 /* Four-byte constants */
46
47 /*#define bb_make_id(c1, c2, c3, c4) \
48 (((c1) << 24) | ((c2) << 16) | ((c3) << 8) | (c4))
49 */
50 #define bb_ID_Snd 1399743520
51 #define bb_ID_Exec 1165518179
52 #define bb_ID_Pict 1349084020
53 #define bb_ID_Copyright 677587232
54 #define bb_ID_AUTH 1096111176
55 #define bb_ID_ANNO 1095650895
56
57 #define bb_ID_ZCOD 1514360644
58
59 /* bb_result_t: Result when you try to load a chunk. */
60 typedef struct bb_result_struct {
61 int chunknum; /* The chunk number (for use in bb_unload_chunk(), etc.) */
62 union {
63 void *ptr; /* A pointer to the data (if you used bb_method_Memory) */
64 uint32 startpos; /* The position in the file (if you used bb_method_FilePos) */
65 } data;
66 uint32 length; /* The length of the data */
67 } bb_result_t;
68
69 /* bb_aux_sound_t: Extra data which may be associated with a sound. */
70 typedef struct bb_aux_sound_struct {
71 char repeats;
72 } bb_aux_sound_t;
73
74 /* bb_aux_pict_t: Extra data which may be associated with an image. */
75 typedef struct bb_aux_pict_struct {
76 uint32 ratnum, ratden;
77 uint32 minnum, minden;
78 uint32 maxnum, maxden;
79 } bb_aux_pict_t;
80
81 /* bb_resolution_t: The global resolution data. */
82 typedef struct bb_resolution_struct {
83 uint32 px, py;
84 uint32 minx, miny;
85 uint32 maxx, maxy;
86 } bb_resolution_t;
87
88 /* bb_color_t: Guess what. */
89 typedef struct bb_color_struct {
90 unsigned char red, green, blue;
91 } bb_color_t;
92
93 /* bb_palette_t: The palette data. */
94 typedef struct bb_palette_struct {
95 int isdirect;
96 union {
97 int depth; /* The depth (if isdirect is TRUE). Either 16 or 32. */
98 struct {
99 int numcolors;
100 bb_color_t *colors;
101 } table; /* The list of colors (if isdirect is FALSE). */
102 } data;
103 } bb_palette_t;
104
105 /* bb_zheader_t: Information to identify a Z-code file. */
106 typedef struct bb_zheader_struct {
107 uint16 releasenum; /* Bytes $2-3 of header. */
108 char serialnum[6]; /* Bytes $12-17 of header. */
109 uint16 checksum; /* Bytes $1C-1D of header. */
110 /* The initpc field is not used by Blorb. */
111 } bb_zheader_t;
112
113 /* bb_map_t: Holds the complete description of an open Blorb file.
114 This type is opaque for normal interpreter use. */
115 typedef struct bb_map_struct bb_map_t;
116
117 /* Function declarations. These functions are of fairly general use;
118 they would apply to any Blorb file. */
119
120 extern bb_err_t bb_create_map(FILE * file, bb_map_t ** newmap);
121 extern bb_err_t bb_destroy_map(bb_map_t * map);
122
123 extern char *bb_err_to_string(bb_err_t err);
124
125 extern bb_err_t bb_load_chunk_by_type(bb_map_t * map, int method,
126 bb_result_t * res, uint32 chunktype,
127 int count);
128 extern bb_err_t bb_load_chunk_by_number(bb_map_t * map, int method,
129 bb_result_t * res, int chunknum);
130 extern bb_err_t bb_unload_chunk(bb_map_t * map, int chunknum);
131
132 extern bb_err_t bb_load_resource(bb_map_t * map, int method,
133 bb_result_t * res, uint32 usage, int resnum);
134 extern bb_err_t bb_count_resources(bb_map_t * map, uint32 usage,
135 int *num, int *min, int *max);
136
137 /* More function declarations. These functions are more or less
138 specific to the Z-machine's use of Blorb. */
139
140 extern uint16 bb_get_release_num(bb_map_t * map);
141 extern bb_zheader_t *bb_get_zheader(bb_map_t * map);
142 extern bb_resolution_t *bb_get_resolution(bb_map_t * map);
143 extern bb_err_t bb_get_palette(bb_map_t * map, bb_palette_t ** res);
144 extern bb_err_t bb_load_resource_pict(bb_map_t * map, int method,
145 bb_result_t * res, int resnum,
146 bb_aux_pict_t ** auxdata);
147 extern bb_err_t bb_load_resource_snd(bb_map_t * map, int method,
148 bb_result_t * res, int resnum,
149 bb_aux_sound_t ** auxdata);
150
151 #endif /* BLORB_H */
0 #ifndef BLORBLOW_H
1 #define BLORBLOW_H
2
3 /* blorblow.h: Low-level header file for Blorb library, version 1.0.2.
4 Designed by Andrew Plotkin <erkyrath@eblong.com>
5 http://www.eblong.com/zarf/blorb/index.html
6
7 This header is generally of interest only to the Blorb library code
8 itself (blorblib.c); it defines things internal to the library.
9 An interpreter shouldn't have to include this file. The only time you
10 might need to include this is if you're writing a Blorb file analysis
11 tool (such as blorbscan), or a transformation tool, or some such thing.
12 */
13
14 /* More four-byte constants. */
15
16 #define bb_ID_FORM 1179603533
17 #define bb_ID_IFRS 1229345363
18 #define bb_ID_RIdx 1380541560
19 #define bb_ID_IFhd 1229351012
20 #define bb_ID_Reso 1382380399
21 #define bb_ID_Loop 1282371440
22 #define bb_ID_RelN 1382378574
23 #define bb_ID_Plte 1349284965
24
25 /* bb_chunkdesc_t: Describes one chunk of the Blorb file. */
26 typedef struct bb_chunkdesc_struct {
27 uint32 type;
28 uint32 len;
29 uint32 startpos; /* start of chunk header */
30 uint32 datpos; /* start of data (either startpos or startpos+8) */
31
32 void *ptr; /* pointer to malloc'd data, if loaded */
33 int auxdatnum; /* entry in the auxsound/auxpict array; -1 if none.
34 This only applies to chunks that represent resources; */
35
36 } bb_chunkdesc_t;
37
38 /* bb_resdesc_t: Describes one resource in the Blorb file. */
39 typedef struct bb_resdesc_struct {
40 uint32 usage;
41 int resnum;
42 int chunknum;
43 } bb_resdesc_t;
44
45 /* bb_map_t: Holds the complete description of an open Blorb file. */
46 struct bb_map_struct {
47 uint32 inited; /* holds bb_Inited_Magic if the map structure is valid */
48 FILE *file;
49
50 int numchunks;
51 bb_chunkdesc_t *chunks; /* list of chunk descriptors */
52
53 int numresources;
54 bb_resdesc_t *resources; /* list of resource descriptors */
55 bb_resdesc_t **ressorted; /* list of pointers to descriptors
56 in map->resources -- sorted by usage and resource number. */
57
58 bb_zheader_t *zheader;
59 int releasenum;
60 bb_resolution_t *resolution;
61 int palettechunk; /* chunk number of palette, or -1 if there is none. */
62 bb_palette_t *palette;
63 bb_aux_sound_t *auxsound; /* extra information about sounds */
64 bb_aux_pict_t *auxpict; /* extra information about pictures */
65 };
66
67 #define bb_Inited_Magic (0xB7012BED)
68
69 extern char *bb_id_to_string(uint32 id);
70
71 #endif /* BLORBLOW_H */
0 static unsigned char font_data[] = {
1 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
5 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
6 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,
7 0x00, 0x50, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
8 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
9 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14,
10 0x00, 0x7e, 0x00, 0x28, 0x00, 0x28, 0x00, 0xfc, 0x00, 0x50, 0x00, 0x50,
11 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
12 0x00, 0x10, 0x00, 0x10, 0x00, 0x30, 0x00, 0x48, 0x00, 0x48, 0x00, 0x40,
13 0x00, 0x30, 0x00, 0x08, 0x00, 0x08, 0x00, 0x48, 0x00, 0x30, 0x00, 0x20,
14 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x30,
15 0x40, 0x48, 0x80, 0x48, 0x00, 0x31, 0x00, 0x02, 0x00, 0x04, 0xc0, 0x08,
16 0x20, 0x11, 0x20, 0x21, 0xc0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
17 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x28, 0x00, 0x28,
18 0x00, 0x28, 0x80, 0x13, 0x00, 0x29, 0x00, 0x45, 0x00, 0x42, 0x00, 0x45,
19 0x80, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
20 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
21 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
22 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
23 0x00, 0x20, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
24 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x20, 0x00, 0x20,
25 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x20,
26 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
27 0x00, 0x20, 0x00, 0x20, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
28 0x00, 0x00, 0x00, 0x10, 0x00, 0x54, 0x00, 0x38, 0x00, 0x54, 0x00, 0x10,
29 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
30 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
31 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x7c, 0x00, 0x10,
32 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
33 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35 0x00, 0x40, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
36 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
38 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
40 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
41 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10,
42 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
43 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
44 0x00, 0x00, 0x00, 0x30, 0x00, 0x48, 0x00, 0x48, 0x00, 0x48, 0x00, 0x48,
45 0x00, 0x48, 0x00, 0x48, 0x00, 0x48, 0x00, 0x48, 0x00, 0x30, 0x00, 0x00,
46 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
47 0x00, 0x30, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10,
48 0x00, 0x10, 0x00, 0x10, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
49 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x48, 0x00, 0x08,
50 0x00, 0x08, 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, 0x20, 0x00, 0x48,
51 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
52 0x00, 0x00, 0x00, 0x30, 0x00, 0x48, 0x00, 0x08, 0x00, 0x08, 0x00, 0x30,
53 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x48, 0x00, 0x30, 0x00, 0x00,
54 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
55 0x00, 0x18, 0x00, 0x18, 0x00, 0x28, 0x00, 0x28, 0x00, 0x48, 0x00, 0x78,
56 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
57 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x40, 0x00, 0x40,
58 0x00, 0x40, 0x00, 0x70, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x48,
59 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
60 0x00, 0x00, 0x00, 0x18, 0x00, 0x20, 0x00, 0x40, 0x00, 0x40, 0x00, 0x70,
61 0x00, 0x48, 0x00, 0x48, 0x00, 0x48, 0x00, 0x48, 0x00, 0x30, 0x00, 0x00,
62 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78,
63 0x00, 0x48, 0x00, 0x08, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x20,
64 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
65 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x48, 0x00, 0x48,
66 0x00, 0x48, 0x00, 0x30, 0x00, 0x48, 0x00, 0x48, 0x00, 0x48, 0x00, 0x48,
67 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
68 0x00, 0x00, 0x00, 0x30, 0x00, 0x48, 0x00, 0x48, 0x00, 0x48, 0x00, 0x48,
69 0x00, 0x38, 0x00, 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x60, 0x00, 0x00,
70 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
71 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
72 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
73 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
74 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
75 0x00, 0x40, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
76 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20,
77 0x00, 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00,
78 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
79 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c,
80 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
81 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x20,
82 0x00, 0x10, 0x00, 0x08, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20,
83 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
84 0x00, 0x00, 0x00, 0x30, 0x00, 0x48, 0x00, 0x08, 0x00, 0x08, 0x00, 0x10,
85 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
86 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1f,
87 0x40, 0x20, 0x20, 0x47, 0x20, 0x49, 0x20, 0x49, 0x20, 0x49, 0x20, 0x49,
88 0x20, 0x47, 0xc0, 0x20, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
89 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x14,
90 0x00, 0x14, 0x00, 0x22, 0x00, 0x22, 0x00, 0x3e, 0x00, 0x41, 0x00, 0x41,
91 0x80, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
92 0x00, 0x00, 0x00, 0x7e, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x3e,
93 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x7e, 0x00, 0x00,
94 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1e,
95 0x80, 0x21, 0x80, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
96 0x80, 0x40, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
97 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x23, 0x00, 0x21,
98 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x00, 0x21, 0x00, 0x23,
99 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
100 0x00, 0x00, 0x00, 0x7e, 0x00, 0x22, 0x00, 0x20, 0x00, 0x24, 0x00, 0x3c,
101 0x00, 0x24, 0x00, 0x20, 0x00, 0x20, 0x00, 0x22, 0x00, 0x7e, 0x00, 0x00,
102 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e,
103 0x00, 0x22, 0x00, 0x20, 0x00, 0x24, 0x00, 0x3c, 0x00, 0x24, 0x00, 0x20,
104 0x00, 0x20, 0x00, 0x20, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
105 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1e, 0x80, 0x21, 0x80, 0x40,
106 0x00, 0x40, 0x00, 0x40, 0xc0, 0x41, 0x80, 0x40, 0x80, 0x40, 0x80, 0x20,
107 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
108 0x00, 0x00, 0x80, 0x73, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x3f,
109 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x80, 0x73, 0x00, 0x00,
110 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70,
111 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
112 0x00, 0x20, 0x00, 0x20, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
113 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x10, 0x00, 0x10,
114 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x90,
115 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
116 0x00, 0x00, 0x00, 0x77, 0x00, 0x22, 0x00, 0x24, 0x00, 0x28, 0x00, 0x30,
117 0x00, 0x28, 0x00, 0x24, 0x00, 0x22, 0x00, 0x21, 0x80, 0x73, 0x00, 0x00,
118 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70,
119 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
120 0x00, 0x20, 0x00, 0x21, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
121 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x60, 0x80, 0x31, 0x80, 0x31,
122 0x80, 0x31, 0x80, 0x2a, 0x80, 0x2a, 0x80, 0x2a, 0x80, 0x24, 0x80, 0x24,
123 0xc0, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
124 0x00, 0x00, 0x80, 0x63, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x29,
125 0x00, 0x25, 0x00, 0x25, 0x00, 0x23, 0x00, 0x23, 0x00, 0x71, 0x00, 0x00,
126 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e,
127 0x00, 0x21, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40,
128 0x80, 0x40, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
129 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x22, 0x00, 0x22,
130 0x00, 0x22, 0x00, 0x22, 0x00, 0x3c, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
131 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
132 0x00, 0x00, 0x00, 0x1e, 0x00, 0x21, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40,
133 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x06,
134 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c,
135 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x3c, 0x00, 0x24,
136 0x00, 0x22, 0x00, 0x21, 0x80, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
137 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x4c, 0x00, 0x44,
138 0x00, 0x40, 0x00, 0x30, 0x00, 0x08, 0x00, 0x04, 0x00, 0x44, 0x00, 0x64,
139 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
140 0x00, 0x00, 0x80, 0xff, 0x80, 0x88, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08,
141 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x1c, 0x00, 0x00,
142 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x73,
143 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21,
144 0x00, 0x21, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
145 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0x00, 0x41, 0x00, 0x41,
146 0x00, 0x22, 0x00, 0x22, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x08,
147 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
148 0x00, 0x00, 0xb8, 0xed, 0x10, 0x45, 0x10, 0x45, 0x20, 0x22, 0x20, 0x22,
149 0x40, 0x15, 0x40, 0x15, 0x40, 0x15, 0x80, 0x08, 0x80, 0x08, 0x00, 0x00,
150 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe1,
151 0x80, 0x40, 0x00, 0x21, 0x00, 0x12, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x12,
152 0x00, 0x21, 0x80, 0x40, 0xc0, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
153 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0x00, 0x41, 0x00, 0x22,
154 0x00, 0x22, 0x00, 0x14, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08,
155 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
156 0x00, 0x00, 0x00, 0xff, 0x00, 0x82, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08,
157 0x00, 0x10, 0x00, 0x20, 0x00, 0x20, 0x00, 0x41, 0x00, 0xff, 0x00, 0x00,
158 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
159 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
160 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x60,
161 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80,
162 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
163 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
164 0x00, 0x00, 0x00, 0x60, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
165 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
166 0x00, 0x20, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x28,
167 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
168 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
169 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
170 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
171 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
172 0x00, 0x80, 0x00, 0x40, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
173 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
174 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
175 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x08, 0x00, 0x38, 0x00, 0x48,
176 0x00, 0x48, 0x00, 0x48, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
177 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x40, 0x00, 0x40,
178 0x00, 0x58, 0x00, 0x64, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
179 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
180 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44,
181 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x44, 0x00, 0x38, 0x00, 0x00,
182 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c,
183 0x00, 0x04, 0x00, 0x04, 0x00, 0x3c, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
184 0x00, 0x44, 0x00, 0x44, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
185 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
186 0x00, 0x38, 0x00, 0x44, 0x00, 0x44, 0x00, 0x7c, 0x00, 0x40, 0x00, 0x44,
187 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
188 0x00, 0x00, 0x00, 0x30, 0x00, 0x40, 0x00, 0x40, 0x00, 0xe0, 0x00, 0x40,
189 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x60, 0x00, 0x00,
190 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
191 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
192 0x00, 0x38, 0x00, 0x40, 0x00, 0x3c, 0x00, 0x42, 0x00, 0x42, 0x00, 0x3c,
193 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x40, 0x00, 0x40,
194 0x00, 0x58, 0x00, 0x64, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
195 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
196 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x40,
197 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x60, 0x00, 0x00,
198 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
199 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
200 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x80,
201 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x40, 0x00, 0x40,
202 0x00, 0x4c, 0x00, 0x48, 0x00, 0x50, 0x00, 0x70, 0x00, 0x48, 0x00, 0x44,
203 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
204 0x00, 0x00, 0x00, 0xc0, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
205 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x60, 0x00, 0x00,
206 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
207 0x00, 0x00, 0x00, 0x00, 0x00, 0xd2, 0x00, 0x6d, 0x00, 0x49, 0x00, 0x49,
208 0x00, 0x49, 0x00, 0x49, 0x80, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
209 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
210 0x00, 0xd8, 0x00, 0x64, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
211 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
212 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44,
213 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x38, 0x00, 0x00,
214 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
215 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x64, 0x00, 0x44, 0x00, 0x44,
216 0x00, 0x44, 0x00, 0x44, 0x00, 0x78, 0x00, 0x40, 0x00, 0x40, 0x00, 0xe0,
217 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
218 0x00, 0x3c, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
219 0x00, 0x3c, 0x00, 0x04, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00,
220 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x60,
221 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x60, 0x00, 0x00,
222 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
223 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x40, 0x00, 0x40, 0x00, 0x20,
224 0x00, 0x10, 0x00, 0x10, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
225 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40,
226 0x00, 0xe0, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
227 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
228 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x44,
229 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x4c, 0x00, 0x36, 0x00, 0x00,
230 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
231 0x00, 0x00, 0x00, 0x00, 0x00, 0xee, 0x00, 0x44, 0x00, 0x44, 0x00, 0x28,
232 0x00, 0x28, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
233 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
234 0x80, 0xdd, 0x80, 0x88, 0x80, 0x88, 0x00, 0x55, 0x00, 0x55, 0x00, 0x22,
235 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
236 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xee, 0x00, 0x44,
237 0x00, 0x28, 0x00, 0x10, 0x00, 0x28, 0x00, 0x44, 0x00, 0xee, 0x00, 0x00,
238 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
239 0x00, 0x00, 0x00, 0x00, 0x00, 0xee, 0x00, 0x44, 0x00, 0x44, 0x00, 0x28,
240 0x00, 0x28, 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, 0xa0, 0x00, 0xc0,
241 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
242 0x00, 0x7c, 0x00, 0x44, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x44,
243 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
244 0x00, 0x00, 0x00, 0x10, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
245 0x00, 0x20, 0x00, 0x40, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
246 0x00, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
247 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
248 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
249 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x20, 0x00, 0x20,
250 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x10, 0x00, 0x20, 0x00, 0x20,
251 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
252 0x00, 0x00, 0x00, 0x32, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
253 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
254 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
255 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
256 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
257 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
258 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
259 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
260 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40,
261 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00,
262 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
263 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x38, 0x00, 0x4c, 0x00, 0x50,
264 0x00, 0x50, 0x00, 0x64, 0x00, 0x38, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
265 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x48, 0x00, 0x40,
266 0x00, 0x40, 0x00, 0x20, 0x00, 0x78, 0x00, 0x20, 0x00, 0x20, 0x00, 0x24,
267 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
268 0x00, 0x00, 0x00, 0xb4, 0x00, 0x48, 0x00, 0x48, 0x00, 0xb4, 0x00, 0x00,
269 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
270 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc,
271 0x00, 0x88, 0x00, 0xf8, 0x00, 0x50, 0x00, 0xf8, 0x00, 0x20, 0x00, 0x20,
272 0x00, 0x20, 0x00, 0x20, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
273 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
274 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
275 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
276 0x00, 0x00, 0x00, 0x30, 0x00, 0x48, 0x00, 0x40, 0x00, 0x20, 0x00, 0x50,
277 0x00, 0x48, 0x00, 0x48, 0x00, 0x28, 0x00, 0x10, 0x00, 0x08, 0x00, 0x48,
278 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,
279 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
280 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
281 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x20, 0x40, 0x4e,
282 0x40, 0x51, 0x40, 0x50, 0x40, 0x50, 0x40, 0x51, 0x40, 0x4e, 0x80, 0x20,
283 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
284 0x00, 0x00, 0x00, 0x40, 0x00, 0x20, 0x00, 0x60, 0x00, 0x60, 0x00, 0x00,
285 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
286 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
287 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x28,
288 0x00, 0x50, 0x00, 0x28, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
289 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
290 0x00, 0x00, 0x00, 0x7c, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
291 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
292 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
293 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
294 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f,
295 0x80, 0x20, 0x40, 0x5e, 0x40, 0x51, 0x40, 0x51, 0x40, 0x5e, 0x40, 0x52,
296 0x40, 0x51, 0x80, 0x20, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
297 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
298 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
299 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
300 0x00, 0x00, 0x00, 0x20, 0x00, 0x50, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,
301 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
302 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
303 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x7c, 0x00, 0x10, 0x00, 0x10,
304 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
305 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0xa0, 0x00, 0x20,
306 0x00, 0x40, 0x00, 0x80, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
307 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
308 0x00, 0x00, 0x00, 0xc0, 0x00, 0x20, 0x00, 0x40, 0x00, 0x20, 0x00, 0x20,
309 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
310 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x20,
311 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
312 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
313 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
314 0x00, 0x00, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
315 0x00, 0x7b, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
316 0x00, 0x00, 0x00, 0x38, 0x00, 0x78, 0x00, 0x78, 0x00, 0x78, 0x00, 0x38,
317 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00,
318 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
319 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
320 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
321 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
322 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
323 0x00, 0x40, 0x00, 0x20, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
324 0x00, 0x00, 0x00, 0x40, 0x00, 0xc0, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
325 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
326 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
327 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00,
328 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
329 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
330 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x28, 0x00, 0x14, 0x00, 0x28,
331 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
332 0x00, 0x00, 0x80, 0x40, 0x00, 0xc1, 0x00, 0x42, 0x00, 0x44, 0x80, 0x48,
333 0x80, 0xe9, 0x80, 0x12, 0x80, 0x22, 0x80, 0x43, 0x80, 0x80, 0x00, 0x00,
334 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40,
335 0x00, 0xc1, 0x00, 0x42, 0x00, 0x44, 0x00, 0x49, 0x80, 0xea, 0x80, 0x10,
336 0x00, 0x21, 0x00, 0x42, 0x80, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
337 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0x00, 0x21, 0x00, 0x42,
338 0x00, 0x24, 0x80, 0x28, 0x80, 0xc9, 0x80, 0x12, 0x80, 0x22, 0x80, 0x43,
339 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
340 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10,
341 0x00, 0x20, 0x00, 0x40, 0x00, 0x40, 0x00, 0x48, 0x00, 0x30, 0x00, 0x00,
342 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x04, 0x00, 0x08,
343 0x00, 0x08, 0x00, 0x14, 0x00, 0x14, 0x00, 0x22, 0x00, 0x22, 0x00, 0x3e,
344 0x00, 0x41, 0x00, 0x41, 0x80, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
345 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x08, 0x00, 0x08, 0x00, 0x14,
346 0x00, 0x14, 0x00, 0x22, 0x00, 0x22, 0x00, 0x3e, 0x00, 0x41, 0x00, 0x41,
347 0x80, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x14,
348 0x00, 0x22, 0x00, 0x08, 0x00, 0x08, 0x00, 0x14, 0x00, 0x14, 0x00, 0x22,
349 0x00, 0x22, 0x00, 0x3e, 0x00, 0x41, 0x00, 0x41, 0x80, 0xe3, 0x00, 0x00,
350 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x08,
351 0x00, 0x08, 0x00, 0x14, 0x00, 0x14, 0x00, 0x22, 0x00, 0x22, 0x00, 0x3e,
352 0x00, 0x41, 0x00, 0x41, 0x80, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
353 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x14,
354 0x00, 0x14, 0x00, 0x22, 0x00, 0x22, 0x00, 0x3e, 0x00, 0x41, 0x00, 0x41,
355 0x80, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x14,
356 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x14, 0x00, 0x14, 0x00, 0x22,
357 0x00, 0x22, 0x00, 0x3e, 0x00, 0x41, 0x00, 0x41, 0x80, 0xe3, 0x00, 0x00,
358 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07,
359 0x20, 0x0a, 0x00, 0x0a, 0x40, 0x12, 0xc0, 0x13, 0x40, 0x22, 0x00, 0x3e,
360 0x00, 0x42, 0x20, 0x42, 0xe0, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
361 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1e, 0x80, 0x21, 0x80, 0x40,
362 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x80, 0x40, 0x00, 0x21,
363 0x00, 0x1e, 0x00, 0x08, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x08,
364 0x00, 0x04, 0x00, 0x7e, 0x00, 0x22, 0x00, 0x20, 0x00, 0x24, 0x00, 0x3c,
365 0x00, 0x24, 0x00, 0x20, 0x00, 0x20, 0x00, 0x22, 0x00, 0x7e, 0x00, 0x00,
366 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x7e,
367 0x00, 0x22, 0x00, 0x20, 0x00, 0x24, 0x00, 0x3c, 0x00, 0x24, 0x00, 0x20,
368 0x00, 0x20, 0x00, 0x22, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
369 0x00, 0x08, 0x00, 0x14, 0x00, 0x22, 0x00, 0x7e, 0x00, 0x22, 0x00, 0x20,
370 0x00, 0x24, 0x00, 0x3c, 0x00, 0x24, 0x00, 0x20, 0x00, 0x20, 0x00, 0x22,
371 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22,
372 0x00, 0x00, 0x00, 0x7e, 0x00, 0x22, 0x00, 0x20, 0x00, 0x24, 0x00, 0x3c,
373 0x00, 0x24, 0x00, 0x20, 0x00, 0x20, 0x00, 0x22, 0x00, 0x7e, 0x00, 0x00,
374 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, 0x70,
375 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
376 0x00, 0x20, 0x00, 0x20, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
377 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x70, 0x00, 0x20, 0x00, 0x20,
378 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
379 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x50,
380 0x00, 0x88, 0x00, 0x70, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
381 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x70, 0x00, 0x00,
382 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x70,
383 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
384 0x00, 0x20, 0x00, 0x20, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
385 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x23, 0x00, 0x21,
386 0x80, 0x20, 0x80, 0x70, 0x80, 0x20, 0x80, 0x20, 0x00, 0x21, 0x00, 0x23,
387 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x26,
388 0x00, 0x00, 0x80, 0x63, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x29,
389 0x00, 0x25, 0x00, 0x25, 0x00, 0x23, 0x00, 0x23, 0x00, 0x71, 0x00, 0x00,
390 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x04, 0x00, 0x1e,
391 0x00, 0x21, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40,
392 0x80, 0x40, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
393 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x1e, 0x00, 0x21, 0x80, 0x40,
394 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x00, 0x21,
395 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x12,
396 0x00, 0x21, 0x00, 0x1e, 0x00, 0x21, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40,
397 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00,
398 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x26, 0x00, 0x00, 0x00, 0x1e,
399 0x00, 0x21, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40,
400 0x80, 0x40, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
401 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x21, 0x80, 0x40,
402 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x00, 0x21,
403 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
404 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x28,
405 0x00, 0x10, 0x00, 0x28, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
406 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x1e,
407 0x80, 0x21, 0x80, 0x41, 0x80, 0x42, 0x80, 0x44, 0x80, 0x48, 0x80, 0x50,
408 0x80, 0x60, 0x00, 0x61, 0x00, 0x9e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
409 0x00, 0x10, 0x00, 0x08, 0x00, 0x04, 0x80, 0x73, 0x00, 0x21, 0x00, 0x21,
410 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21,
411 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x04,
412 0x00, 0x08, 0x80, 0x73, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21,
413 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00,
414 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x12, 0x00, 0x21, 0x80, 0x73,
415 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21,
416 0x00, 0x21, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
417 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x80, 0x73, 0x00, 0x21, 0x00, 0x21,
418 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21,
419 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08,
420 0x00, 0x10, 0x80, 0xe3, 0x00, 0x41, 0x00, 0x22, 0x00, 0x22, 0x00, 0x14,
421 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x1c, 0x00, 0x00,
422 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70,
423 0x00, 0x20, 0x00, 0x3c, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22,
424 0x00, 0x3c, 0x00, 0x20, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
425 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44, 0x00, 0x44,
426 0x00, 0x44, 0x00, 0x48, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
427 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
428 0x00, 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x30, 0x00, 0x08,
429 0x00, 0x38, 0x00, 0x48, 0x00, 0x48, 0x00, 0x48, 0x00, 0x34, 0x00, 0x00,
430 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x10,
431 0x00, 0x20, 0x00, 0x00, 0x00, 0x30, 0x00, 0x08, 0x00, 0x38, 0x00, 0x48,
432 0x00, 0x48, 0x00, 0x48, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
433 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x28, 0x00, 0x44, 0x00, 0x00,
434 0x00, 0x30, 0x00, 0x08, 0x00, 0x38, 0x00, 0x48, 0x00, 0x48, 0x00, 0x48,
435 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
436 0x00, 0x00, 0x00, 0x34, 0x00, 0x58, 0x00, 0x00, 0x00, 0x30, 0x00, 0x08,
437 0x00, 0x38, 0x00, 0x48, 0x00, 0x48, 0x00, 0x48, 0x00, 0x34, 0x00, 0x00,
438 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
439 0x00, 0x48, 0x00, 0x00, 0x00, 0x30, 0x00, 0x08, 0x00, 0x38, 0x00, 0x48,
440 0x00, 0x48, 0x00, 0x48, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
441 0x00, 0x00, 0x00, 0x10, 0x00, 0x28, 0x00, 0x28, 0x00, 0x10, 0x00, 0x00,
442 0x00, 0x30, 0x00, 0x08, 0x00, 0x38, 0x00, 0x48, 0x00, 0x48, 0x00, 0x48,
443 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
444 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x09,
445 0x00, 0x3f, 0x00, 0x48, 0x00, 0x48, 0x00, 0x49, 0x00, 0x36, 0x00, 0x00,
446 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
447 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44, 0x00, 0x40, 0x00, 0x40,
448 0x00, 0x40, 0x00, 0x44, 0x00, 0x38, 0x00, 0x10, 0x00, 0x08, 0x00, 0x10,
449 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00,
450 0x00, 0x38, 0x00, 0x44, 0x00, 0x7c, 0x00, 0x40, 0x00, 0x40, 0x00, 0x44,
451 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
452 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44,
453 0x00, 0x7c, 0x00, 0x40, 0x00, 0x40, 0x00, 0x44, 0x00, 0x38, 0x00, 0x00,
454 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x28,
455 0x00, 0x44, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44, 0x00, 0x7c, 0x00, 0x40,
456 0x00, 0x40, 0x00, 0x44, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
457 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00,
458 0x00, 0x38, 0x00, 0x44, 0x00, 0x7c, 0x00, 0x40, 0x00, 0x40, 0x00, 0x44,
459 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
460 0x00, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x40,
461 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x60, 0x00, 0x00,
462 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
463 0x00, 0x40, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
464 0x00, 0x40, 0x00, 0x40, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
465 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0xa0, 0x00, 0x00,
466 0x00, 0xc0, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
467 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
468 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x40,
469 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x60, 0x00, 0x00,
470 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,
471 0x00, 0x20, 0x00, 0x50, 0x00, 0x08, 0x00, 0x3c, 0x00, 0x44, 0x00, 0x44,
472 0x00, 0x44, 0x00, 0x44, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
473 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x58, 0x00, 0x00,
474 0x00, 0xd8, 0x00, 0x64, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
475 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
476 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44,
477 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x38, 0x00, 0x00,
478 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x10,
479 0x00, 0x20, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
480 0x00, 0x44, 0x00, 0x44, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
481 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x28, 0x00, 0x44, 0x00, 0x00,
482 0x00, 0x38, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
483 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
484 0x00, 0x00, 0x00, 0x34, 0x00, 0x58, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44,
485 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x38, 0x00, 0x00,
486 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
487 0x00, 0x44, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
488 0x00, 0x44, 0x00, 0x44, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
489 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
490 0x00, 0x10, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
491 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
492 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x4c,
493 0x00, 0x54, 0x00, 0x54, 0x00, 0x54, 0x00, 0x64, 0x00, 0x78, 0x00, 0x00,
494 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x10,
495 0x00, 0x08, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
496 0x00, 0x44, 0x00, 0x4c, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
497 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x00,
498 0x00, 0xcc, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x4c,
499 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
500 0x00, 0x10, 0x00, 0x28, 0x00, 0x44, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x44,
501 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x4c, 0x00, 0x36, 0x00, 0x00,
502 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
503 0x00, 0x44, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
504 0x00, 0x44, 0x00, 0x4c, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
505 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x00,
506 0x00, 0xee, 0x00, 0x44, 0x00, 0x44, 0x00, 0x28, 0x00, 0x28, 0x00, 0x10,
507 0x00, 0x10, 0x00, 0x20, 0x00, 0xa0, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
508 0x00, 0x00, 0x00, 0xc0, 0x00, 0x40, 0x00, 0x40, 0x00, 0x58, 0x00, 0x64,
509 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x78, 0x00, 0x40,
510 0x00, 0x40, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
511 0x00, 0x44, 0x00, 0x00, 0x00, 0xee, 0x00, 0x44, 0x00, 0x44, 0x00, 0x28,
512 0x00, 0x28, 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, 0xa0, 0x00, 0xc0,
513 0x03, 0x03, 0x05, 0x07, 0x06, 0x0c, 0x0a, 0x03, 0x04, 0x04, 0x07, 0x07,
514 0x03, 0x04, 0x03, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
515 0x06, 0x06, 0x03, 0x03, 0x07, 0x07, 0x07, 0x06, 0x0c, 0x09, 0x09, 0x09,
516 0x0a, 0x08, 0x07, 0x0a, 0x0a, 0x05, 0x06, 0x09, 0x08, 0x0b, 0x0a, 0x0a,
517 0x08, 0x0a, 0x09, 0x07, 0x09, 0x0a, 0x09, 0x0d, 0x0a, 0x09, 0x08, 0x04,
518 0x04, 0x04, 0x07, 0x06, 0x04, 0x06, 0x07, 0x06, 0x07, 0x07, 0x04, 0x07,
519 0x07, 0x03, 0x03, 0x07, 0x03, 0x09, 0x07, 0x07, 0x07, 0x07, 0x05, 0x05,
520 0x03, 0x07, 0x07, 0x09, 0x07, 0x07, 0x07, 0x05, 0x03, 0x05, 0x08, 0x00,
521 0x03, 0x03, 0x06, 0x06, 0x06, 0x06, 0x03, 0x06, 0x05, 0x0b, 0x04, 0x07,
522 0x07, 0x04, 0x0b, 0x06, 0x04, 0x07, 0x03, 0x03, 0x04, 0x08, 0x06, 0x03,
523 0x04, 0x03, 0x04, 0x07, 0x09, 0x09, 0x09, 0x06, 0x09, 0x09, 0x09, 0x09,
524 0x09, 0x09, 0x0c, 0x09, 0x08, 0x08, 0x08, 0x08, 0x05, 0x05, 0x05, 0x05,
525 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x07, 0x0a, 0x0a, 0x0a, 0x0a,
526 0x0a, 0x09, 0x08, 0x07, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x09, 0x06,
527 0x07, 0x07, 0x07, 0x07, 0x03, 0x03, 0x03, 0x03, 0x07, 0x07, 0x07, 0x07,
528 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
529 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
530 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
531 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
532 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
533 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
534 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,
535 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
536 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
537 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x12, 0x00, 0x12, 0x00, 0x24,
538 0x00, 0xff, 0x00, 0x24, 0x00, 0x24, 0x00, 0xff, 0x00, 0x48, 0x00, 0x48,
539 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
540 0x00, 0x10, 0x00, 0x38, 0x00, 0x54, 0x00, 0x54, 0x00, 0x50, 0x00, 0x30,
541 0x00, 0x18, 0x00, 0x14, 0x00, 0x54, 0x00, 0x54, 0x00, 0x38, 0x00, 0x10,
542 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x60,
543 0x80, 0x90, 0x00, 0x91, 0x00, 0x91, 0x00, 0x62, 0x60, 0x04, 0x90, 0x08,
544 0x90, 0x10, 0x90, 0x10, 0x60, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
545 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x09, 0x00, 0x09,
546 0x00, 0x0a, 0xe0, 0x0c, 0x40, 0x34, 0x80, 0x44, 0x00, 0x43, 0x10, 0x62,
547 0xe0, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
548 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00,
549 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
550 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x10,
551 0x00, 0x20, 0x00, 0x20, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
552 0x00, 0x40, 0x00, 0x40, 0x00, 0x20, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08,
553 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x20, 0x00, 0x20,
554 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10,
555 0x00, 0x20, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
556 0x00, 0x10, 0x00, 0x54, 0x00, 0x38, 0x00, 0x38, 0x00, 0x54, 0x00, 0x10,
557 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
558 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
559 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0xfe, 0x00, 0x10, 0x00, 0x10,
560 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
561 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
562 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
563 0x00, 0xc0, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
564 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
565 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
566 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
567 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
568 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
569 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, 0x20,
570 0x00, 0x20, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x80,
571 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
572 0x00, 0x00, 0x00, 0x38, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
573 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x38, 0x00, 0x00,
574 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
575 0x00, 0x30, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10,
576 0x00, 0x10, 0x00, 0x10, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
577 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44, 0x00, 0x04,
578 0x00, 0x04, 0x00, 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x44,
579 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
580 0x00, 0x00, 0x00, 0x38, 0x00, 0x44, 0x00, 0x04, 0x00, 0x08, 0x00, 0x18,
581 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x78, 0x00, 0x00,
582 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
583 0x00, 0x18, 0x00, 0x28, 0x00, 0x28, 0x00, 0x48, 0x00, 0x88, 0x00, 0xfc,
584 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
585 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x20, 0x00, 0x20,
586 0x00, 0x70, 0x00, 0x08, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08,
587 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
588 0x00, 0x00, 0x00, 0x0c, 0x00, 0x10, 0x00, 0x20, 0x00, 0x58, 0x00, 0x64,
589 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x38, 0x00, 0x00,
590 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e,
591 0x00, 0x82, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08, 0x00, 0x08,
592 0x00, 0x08, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
593 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44, 0x00, 0x44,
594 0x00, 0x28, 0x00, 0x10, 0x00, 0x28, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
595 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
596 0x00, 0x00, 0x00, 0x38, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
597 0x00, 0x3c, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x60, 0x00, 0x00,
598 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
599 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
600 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
601 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
602 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
603 0x00, 0x60, 0x00, 0x20, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
604 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0c, 0x00, 0x30, 0x00, 0x40,
605 0x00, 0x30, 0x00, 0x0c, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
606 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
607 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
608 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
609 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x30,
610 0x00, 0x0c, 0x00, 0x02, 0x00, 0x0c, 0x00, 0x30, 0x00, 0x40, 0x00, 0x00,
611 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
612 0x00, 0x00, 0x00, 0x38, 0x00, 0x44, 0x00, 0x44, 0x00, 0x04, 0x00, 0x08,
613 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
614 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x10, 0x08, 0x08, 0x10,
615 0xa8, 0x23, 0x68, 0x44, 0x48, 0x48, 0x48, 0x48, 0x88, 0x48, 0x88, 0x48,
616 0x90, 0x49, 0x64, 0x46, 0x08, 0x20, 0x10, 0x10, 0x20, 0x08, 0xc0, 0x07,
617 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x0a,
618 0x00, 0x0a, 0x00, 0x11, 0x00, 0x11, 0x00, 0x1f, 0x80, 0x20, 0x80, 0x20,
619 0xe0, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
620 0x00, 0x00, 0x00, 0x7e, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x3e,
621 0x00, 0x21, 0x80, 0x20, 0x80, 0x20, 0x00, 0x21, 0x00, 0x7e, 0x00, 0x00,
622 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1e,
623 0x80, 0x21, 0x80, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
624 0x80, 0x40, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
625 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x21, 0x80, 0x20,
626 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x80, 0x20, 0x00, 0x21,
627 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
628 0x00, 0x00, 0x00, 0x7f, 0x00, 0x21, 0x00, 0x20, 0x00, 0x24, 0x00, 0x3c,
629 0x00, 0x24, 0x00, 0x20, 0x80, 0x20, 0x00, 0x21, 0x00, 0x7f, 0x00, 0x00,
630 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f,
631 0x00, 0x21, 0x00, 0x20, 0x00, 0x24, 0x00, 0x3c, 0x00, 0x24, 0x00, 0x20,
632 0x00, 0x20, 0x00, 0x20, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
633 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1e, 0x80, 0x21, 0x80, 0x40,
634 0x00, 0x40, 0x00, 0x40, 0xc0, 0x41, 0x80, 0x40, 0x80, 0x40, 0x80, 0x20,
635 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
636 0x00, 0x00, 0xc0, 0x71, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x80, 0x3f,
637 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0xc0, 0x71, 0x00, 0x00,
638 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70,
639 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
640 0x00, 0x20, 0x00, 0x20, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
641 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x10, 0x00, 0x10,
642 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x90,
643 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
644 0x00, 0x00, 0xc0, 0x73, 0x00, 0x21, 0x00, 0x22, 0x00, 0x24, 0x00, 0x38,
645 0x00, 0x28, 0x00, 0x24, 0x00, 0x22, 0x00, 0x21, 0xc0, 0x73, 0x00, 0x00,
646 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70,
647 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
648 0x80, 0x20, 0x00, 0x21, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
649 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x60, 0x30, 0xa0, 0x28,
650 0xa0, 0x28, 0xa0, 0x28, 0x20, 0x25, 0x20, 0x25, 0x20, 0x25, 0x20, 0x22,
651 0x70, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
652 0x00, 0x00, 0xc0, 0x61, 0x80, 0x20, 0x80, 0x30, 0x80, 0x28, 0x80, 0x24,
653 0x80, 0x24, 0x80, 0x22, 0x80, 0x21, 0x80, 0x20, 0x80, 0x70, 0x00, 0x00,
654 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f,
655 0x80, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
656 0x40, 0x40, 0x80, 0x20, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
657 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x21, 0x00, 0x21,
658 0x00, 0x21, 0x00, 0x21, 0x00, 0x3e, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
659 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
660 0x00, 0x00, 0x00, 0x1f, 0x80, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
661 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x80, 0x20, 0x00, 0x1f, 0x00, 0x04,
662 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e,
663 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x3e, 0x00, 0x24, 0x00, 0x22,
664 0x00, 0x22, 0x00, 0x21, 0xc0, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
665 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x46, 0x00, 0x42,
666 0x00, 0x40, 0x00, 0x30, 0x00, 0x0c, 0x00, 0x02, 0x00, 0x42, 0x00, 0x62,
667 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
668 0x00, 0x00, 0x80, 0xff, 0x80, 0x88, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08,
669 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x1c, 0x00, 0x00,
670 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x71,
671 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20,
672 0x80, 0x20, 0x00, 0x11, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
673 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf1, 0x80, 0x20, 0x80, 0x20,
674 0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x0a, 0x00, 0x0a, 0x00, 0x0c,
675 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
676 0x00, 0x00, 0xbc, 0xf7, 0x08, 0x21, 0x10, 0x21, 0x10, 0x23, 0x90, 0x12,
677 0xa0, 0x14, 0xa0, 0x14, 0xa0, 0x14, 0x40, 0x08, 0x40, 0x08, 0x00, 0x00,
678 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xfb,
679 0x80, 0x20, 0x00, 0x11, 0x00, 0x0a, 0x00, 0x0c, 0x00, 0x04, 0x00, 0x0a,
680 0x00, 0x12, 0x00, 0x21, 0xc0, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
681 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x79, 0x80, 0x10, 0x00, 0x11,
682 0x00, 0x09, 0x00, 0x0a, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04,
683 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
684 0x00, 0x00, 0x00, 0x7f, 0x00, 0x42, 0x00, 0x44, 0x00, 0x04, 0x00, 0x08,
685 0x00, 0x10, 0x00, 0x20, 0x80, 0x20, 0x00, 0x41, 0x00, 0xff, 0x00, 0x00,
686 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x40,
687 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
688 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x70,
689 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x40, 0x00, 0x40,
690 0x00, 0x40, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x10,
691 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
692 0x00, 0xe0, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
693 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
694 0x00, 0x20, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30,
695 0x00, 0x48, 0x00, 0x48, 0x00, 0x84, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00,
696 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
697 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
698 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
699 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
700 0x00, 0x00, 0x00, 0x40, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
701 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
702 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
703 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44, 0x00, 0x04, 0x00, 0x3c,
704 0x00, 0x44, 0x00, 0x44, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
705 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0xc0, 0x00, 0x40, 0x00, 0x40,
706 0x00, 0x58, 0x00, 0x64, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
707 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
708 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44,
709 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x44, 0x00, 0x38, 0x00, 0x00,
710 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0c,
711 0x00, 0x04, 0x00, 0x04, 0x00, 0x34, 0x00, 0x4c, 0x00, 0x44, 0x00, 0x44,
712 0x00, 0x44, 0x00, 0x4e, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
713 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
714 0x00, 0x38, 0x00, 0x44, 0x00, 0x7c, 0x00, 0x40, 0x00, 0x40, 0x00, 0x44,
715 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
716 0x00, 0x38, 0x00, 0x48, 0x00, 0x40, 0x00, 0x40, 0x00, 0xf0, 0x00, 0x40,
717 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0xf0, 0x00, 0x00,
718 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
719 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x8c, 0x00, 0x88, 0x00, 0x88,
720 0x00, 0x70, 0x00, 0x80, 0x00, 0x78, 0x00, 0x84, 0x00, 0x84, 0x00, 0x78,
721 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0xc0, 0x00, 0x40, 0x00, 0x40,
722 0x00, 0x58, 0x00, 0x64, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
723 0x00, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
724 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0xc0,
725 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0xe0, 0x00, 0x00,
726 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
727 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x60, 0x00, 0x20, 0x00, 0x20,
728 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0xc0,
729 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0xc0, 0x00, 0x40, 0x00, 0x40,
730 0x00, 0x4e, 0x00, 0x48, 0x00, 0x50, 0x00, 0x70, 0x00, 0x48, 0x00, 0x44,
731 0x00, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
732 0x00, 0x40, 0x00, 0xc0, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
733 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0xe0, 0x00, 0x00,
734 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
735 0x00, 0x00, 0x00, 0x00, 0x80, 0x59, 0x40, 0xe6, 0x40, 0x44, 0x40, 0x44,
736 0x40, 0x44, 0x40, 0x44, 0xe0, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
737 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
738 0x00, 0x58, 0x00, 0xe4, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
739 0x00, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
740 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44,
741 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x38, 0x00, 0x00,
742 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
743 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0xe4, 0x00, 0x44, 0x00, 0x44,
744 0x00, 0x44, 0x00, 0x64, 0x00, 0x58, 0x00, 0x40, 0x00, 0x40, 0x00, 0xe0,
745 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
746 0x00, 0x34, 0x00, 0x4c, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x4c,
747 0x00, 0x34, 0x00, 0x04, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00,
748 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0xe0,
749 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0xe0, 0x00, 0x00,
750 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
751 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x48, 0x00, 0x40, 0x00, 0x30,
752 0x00, 0x08, 0x00, 0x48, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
753 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40,
754 0x00, 0xf0, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x50,
755 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
756 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x44,
757 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x4e, 0x00, 0x34, 0x00, 0x00,
758 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
759 0x00, 0x00, 0x00, 0x00, 0x00, 0xee, 0x00, 0x44, 0x00, 0x44, 0x00, 0x28,
760 0x00, 0x28, 0x00, 0x28, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
761 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
762 0xe0, 0xee, 0x40, 0x44, 0x40, 0x44, 0x80, 0x2a, 0x80, 0x2a, 0x00, 0x33,
763 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
764 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xee, 0x00, 0x44,
765 0x00, 0x28, 0x00, 0x10, 0x00, 0x28, 0x00, 0x44, 0x00, 0xee, 0x00, 0x00,
766 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
767 0x00, 0x00, 0x00, 0x00, 0x00, 0xee, 0x00, 0x44, 0x00, 0x44, 0x00, 0x28,
768 0x00, 0x28, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, 0xc0,
769 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
770 0x00, 0x7c, 0x00, 0x48, 0x00, 0x10, 0x00, 0x20, 0x00, 0x20, 0x00, 0x44,
771 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
772 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10,
773 0x00, 0x20, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10,
774 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40,
775 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
776 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
777 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, 0x10,
778 0x00, 0x10, 0x00, 0x10, 0x00, 0x08, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10,
779 0x00, 0x10, 0x00, 0x10, 0x00, 0x30, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
780 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
781 0x00, 0x71, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
782 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
783 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
784 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
785 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
786 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
787 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
788 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
789 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
790 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
791 0x00, 0x02, 0x00, 0x04, 0x00, 0x3c, 0x00, 0x46, 0x00, 0x48, 0x00, 0x48,
792 0x00, 0x52, 0x00, 0x32, 0x00, 0x3c, 0x00, 0x20, 0x00, 0x20, 0x00, 0x40,
793 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x20, 0x00, 0x20,
794 0x00, 0x20, 0x00, 0x78, 0x00, 0x20, 0x00, 0x20, 0x00, 0x40, 0x00, 0x62,
795 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
796 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x24, 0x00, 0x42,
797 0x00, 0x42, 0x00, 0x24, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
798 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77,
799 0x00, 0x22, 0x00, 0x14, 0x00, 0x14, 0x00, 0x7f, 0x00, 0x08, 0x00, 0x7f,
800 0x00, 0x08, 0x00, 0x08, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
801 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
802 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
803 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
804 0x00, 0x00, 0x00, 0x1c, 0x00, 0x24, 0x00, 0x20, 0x00, 0x10, 0x00, 0x28,
805 0x00, 0x44, 0x00, 0x42, 0x00, 0x22, 0x00, 0x14, 0x00, 0x08, 0x00, 0x04,
806 0x00, 0x24, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
807 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
808 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
809 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x40, 0x40, 0x9f,
810 0x40, 0xa1, 0x40, 0xa0, 0x40, 0xa0, 0x40, 0xa1, 0x40, 0x9e, 0x80, 0x40,
811 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
812 0x00, 0x00, 0x00, 0xe0, 0x00, 0xa0, 0x00, 0x60, 0x00, 0xa0, 0x00, 0xf0,
813 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
814 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
815 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x48, 0x00, 0x48, 0x00, 0x90,
816 0x00, 0x48, 0x00, 0x48, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
817 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
818 0x00, 0x00, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
819 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
820 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
821 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
822 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f,
823 0x80, 0x40, 0x40, 0xbc, 0x40, 0x92, 0x40, 0x9c, 0x40, 0x94, 0x40, 0x92,
824 0x40, 0xb9, 0x80, 0x40, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
825 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
826 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
827 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
828 0x00, 0x00, 0x00, 0x38, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x38,
829 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
830 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
831 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0xfe, 0x00, 0x10, 0x00, 0x10,
832 0x00, 0x10, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
833 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x90, 0x00, 0x20,
834 0x00, 0x40, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
835 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
836 0x00, 0x00, 0x00, 0xe0, 0x00, 0x10, 0x00, 0x60, 0x00, 0x10, 0x00, 0xe0,
837 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
838 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
839 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
840 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
841 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
842 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
843 0x00, 0x7e, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
844 0x00, 0x00, 0x00, 0x7e, 0x00, 0xf4, 0x00, 0xf4, 0x00, 0xf4, 0x00, 0xf4,
845 0x00, 0x74, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14,
846 0x00, 0x14, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
847 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x00, 0x00,
848 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
849 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
850 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
851 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00,
852 0x00, 0x00, 0x00, 0x20, 0x00, 0x60, 0x00, 0x20, 0x00, 0x20, 0x00, 0x70,
853 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
854 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
855 0x00, 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00,
856 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
857 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
858 0x00, 0x90, 0x00, 0x48, 0x00, 0x48, 0x00, 0x24, 0x00, 0x48, 0x00, 0x48,
859 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
860 0x00, 0x00, 0x80, 0x20, 0x80, 0x60, 0x00, 0x21, 0x00, 0x22, 0x00, 0x72,
861 0x40, 0x04, 0xc0, 0x08, 0x40, 0x09, 0xe0, 0x11, 0x40, 0x20, 0x00, 0x00,
862 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x20,
863 0x00, 0x61, 0x00, 0x22, 0x00, 0x22, 0x00, 0x74, 0xe0, 0x08, 0x20, 0x09,
864 0x40, 0x10, 0x80, 0x20, 0xe0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
865 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0x00, 0x11, 0x00, 0x62,
866 0x00, 0x12, 0x00, 0xe4, 0x40, 0x08, 0xc0, 0x08, 0x40, 0x11, 0xe0, 0x21,
867 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
868 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
869 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x44,
870 0x00, 0x44, 0x00, 0x38, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04,
871 0x00, 0x04, 0x00, 0x0a, 0x00, 0x0a, 0x00, 0x11, 0x00, 0x11, 0x00, 0x1f,
872 0x80, 0x20, 0x80, 0x20, 0xe0, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
873 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x0a,
874 0x00, 0x0a, 0x00, 0x11, 0x00, 0x11, 0x00, 0x1f, 0x80, 0x20, 0x80, 0x20,
875 0xe0, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x09,
876 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x0a, 0x00, 0x11,
877 0x00, 0x11, 0x00, 0x1f, 0x80, 0x20, 0x80, 0x20, 0xe0, 0xf1, 0x00, 0x00,
878 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x16, 0x00, 0x00, 0x00, 0x04,
879 0x00, 0x04, 0x00, 0x0a, 0x00, 0x0a, 0x00, 0x11, 0x00, 0x11, 0x00, 0x1f,
880 0x80, 0x20, 0x80, 0x20, 0xe0, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
881 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x0a,
882 0x00, 0x0a, 0x00, 0x11, 0x00, 0x11, 0x00, 0x1f, 0x80, 0x20, 0x80, 0x20,
883 0xe0, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x09,
884 0x00, 0x09, 0x00, 0x06, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x0a, 0x00, 0x11,
885 0x00, 0x11, 0x00, 0x1f, 0x80, 0x20, 0x80, 0x20, 0xe0, 0xf1, 0x00, 0x00,
886 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f,
887 0x08, 0x06, 0x00, 0x0a, 0x20, 0x0a, 0xe0, 0x13, 0x20, 0x3e, 0x00, 0x22,
888 0x08, 0x42, 0x18, 0x42, 0xf0, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
889 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1e, 0x80, 0x21, 0x80, 0x40,
890 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x80, 0x40, 0x00, 0x21,
891 0x00, 0x1e, 0x00, 0x08, 0x00, 0x08, 0x00, 0x18, 0x00, 0x10, 0x00, 0x08,
892 0x00, 0x00, 0x00, 0x7f, 0x00, 0x21, 0x00, 0x20, 0x00, 0x24, 0x00, 0x3c,
893 0x00, 0x24, 0x00, 0x20, 0x80, 0x20, 0x00, 0x21, 0x00, 0x7f, 0x00, 0x00,
894 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x7f,
895 0x00, 0x21, 0x00, 0x20, 0x00, 0x24, 0x00, 0x3c, 0x00, 0x24, 0x00, 0x20,
896 0x80, 0x20, 0x00, 0x21, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
897 0x00, 0x0c, 0x00, 0x12, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x21, 0x00, 0x20,
898 0x00, 0x24, 0x00, 0x3c, 0x00, 0x24, 0x00, 0x20, 0x80, 0x20, 0x00, 0x21,
899 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14,
900 0x00, 0x00, 0x00, 0x7f, 0x00, 0x21, 0x00, 0x20, 0x00, 0x24, 0x00, 0x3c,
901 0x00, 0x24, 0x00, 0x20, 0x80, 0x20, 0x00, 0x21, 0x00, 0x7f, 0x00, 0x00,
902 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x20, 0x00, 0x00, 0x00, 0x70,
903 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
904 0x00, 0x20, 0x00, 0x20, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
905 0x00, 0x10, 0x00, 0x20, 0x00, 0x00, 0x00, 0x70, 0x00, 0x20, 0x00, 0x20,
906 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
907 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x48,
908 0x00, 0x00, 0x00, 0x70, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
909 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x70, 0x00, 0x00,
910 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x70,
911 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
912 0x00, 0x20, 0x00, 0x20, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
913 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x20, 0x40, 0x20,
914 0x20, 0x20, 0x20, 0xfe, 0x20, 0x20, 0x20, 0x20, 0x40, 0x20, 0x80, 0x20,
915 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x16,
916 0x00, 0x00, 0xc0, 0x61, 0x80, 0x20, 0x80, 0x30, 0x80, 0x28, 0x80, 0x24,
917 0x80, 0x24, 0x80, 0x22, 0x80, 0x21, 0x80, 0x20, 0x80, 0x70, 0x00, 0x00,
918 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f,
919 0x80, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
920 0x40, 0x40, 0x80, 0x20, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
921 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x20, 0x40, 0x40,
922 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x80, 0x20,
923 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x09,
924 0x00, 0x00, 0x00, 0x1f, 0x80, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
925 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x80, 0x20, 0x00, 0x1f, 0x00, 0x00,
926 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x16, 0x00, 0x00, 0x00, 0x1f,
927 0x80, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
928 0x40, 0x40, 0x80, 0x20, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
929 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x20, 0x40, 0x40,
930 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x80, 0x20,
931 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
932 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x24, 0x00, 0x18,
933 0x00, 0x18, 0x00, 0x24, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
934 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x1f,
935 0x80, 0x21, 0x80, 0x41, 0x40, 0x42, 0x40, 0x44, 0x40, 0x48, 0x40, 0x48,
936 0x40, 0x30, 0x80, 0x30, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
937 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0xc0, 0x71, 0x80, 0x20, 0x80, 0x20,
938 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x00, 0x11,
939 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x04,
940 0x00, 0x00, 0xc0, 0x71, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20,
941 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x00, 0x11, 0x00, 0x0e, 0x00, 0x00,
942 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x09, 0x00, 0x00, 0xc0, 0x71,
943 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20,
944 0x80, 0x20, 0x00, 0x11, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
945 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0xc0, 0x71, 0x80, 0x20, 0x80, 0x20,
946 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x00, 0x11,
947 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x04,
948 0x00, 0x00, 0xe0, 0x79, 0x80, 0x10, 0x00, 0x11, 0x00, 0x09, 0x00, 0x0a,
949 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00,
950 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70,
951 0x00, 0x20, 0x00, 0x3e, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21,
952 0x00, 0x3e, 0x00, 0x20, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
953 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42,
954 0x00, 0x4c, 0x00, 0x46, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42,
955 0x00, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
956 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44,
957 0x00, 0x04, 0x00, 0x3c, 0x00, 0x44, 0x00, 0x44, 0x00, 0x3e, 0x00, 0x00,
958 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
959 0x00, 0x10, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44, 0x00, 0x04, 0x00, 0x3c,
960 0x00, 0x44, 0x00, 0x44, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
961 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x24, 0x00, 0x00,
962 0x00, 0x38, 0x00, 0x44, 0x00, 0x04, 0x00, 0x3c, 0x00, 0x44, 0x00, 0x44,
963 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
964 0x00, 0x00, 0x00, 0x34, 0x00, 0x58, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44,
965 0x00, 0x04, 0x00, 0x3c, 0x00, 0x44, 0x00, 0x44, 0x00, 0x3e, 0x00, 0x00,
966 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
967 0x00, 0x28, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44, 0x00, 0x04, 0x00, 0x3c,
968 0x00, 0x44, 0x00, 0x44, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
969 0x00, 0x00, 0x00, 0x18, 0x00, 0x24, 0x00, 0x24, 0x00, 0x18, 0x00, 0x00,
970 0x00, 0x38, 0x00, 0x44, 0x00, 0x04, 0x00, 0x3c, 0x00, 0x44, 0x00, 0x44,
971 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
972 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x80, 0x48,
973 0x80, 0x1f, 0x00, 0x28, 0x00, 0x48, 0x80, 0x48, 0x00, 0x77, 0x00, 0x00,
974 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
975 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44, 0x00, 0x40, 0x00, 0x40,
976 0x00, 0x40, 0x00, 0x44, 0x00, 0x38, 0x00, 0x10, 0x00, 0x10, 0x00, 0x30,
977 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x00,
978 0x00, 0x38, 0x00, 0x44, 0x00, 0x7c, 0x00, 0x40, 0x00, 0x40, 0x00, 0x44,
979 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
980 0x00, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44,
981 0x00, 0x7c, 0x00, 0x40, 0x00, 0x40, 0x00, 0x44, 0x00, 0x38, 0x00, 0x00,
982 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
983 0x00, 0x24, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44, 0x00, 0x7c, 0x00, 0x40,
984 0x00, 0x40, 0x00, 0x44, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
985 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00,
986 0x00, 0x38, 0x00, 0x44, 0x00, 0x7c, 0x00, 0x40, 0x00, 0x40, 0x00, 0x44,
987 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
988 0x00, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0xc0,
989 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0xe0, 0x00, 0x00,
990 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
991 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0xc0, 0x00, 0x40, 0x00, 0x40,
992 0x00, 0x40, 0x00, 0x40, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
993 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x90, 0x00, 0x00,
994 0x00, 0x20, 0x00, 0x60, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
995 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
996 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x40, 0x00, 0xc0,
997 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0xe0, 0x00, 0x00,
998 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x18,
999 0x00, 0x28, 0x00, 0x04, 0x00, 0x3c, 0x00, 0x46, 0x00, 0x42, 0x00, 0x42,
1000 0x00, 0x42, 0x00, 0x42, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1001 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x58, 0x00, 0x00,
1002 0x00, 0x58, 0x00, 0xe4, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
1003 0x00, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1004 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44,
1005 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x38, 0x00, 0x00,
1006 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
1007 0x00, 0x10, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
1008 0x00, 0x44, 0x00, 0x44, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1009 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x24, 0x00, 0x00,
1010 0x00, 0x38, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
1011 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1012 0x00, 0x00, 0x00, 0x34, 0x00, 0x58, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44,
1013 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x38, 0x00, 0x00,
1014 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1015 0x00, 0x28, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
1016 0x00, 0x44, 0x00, 0x44, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1017 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
1018 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
1019 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1020 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0x00, 0x46,
1021 0x00, 0x46, 0x00, 0x4a, 0x00, 0x52, 0x00, 0x22, 0x00, 0x5c, 0x00, 0x00,
1022 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
1023 0x00, 0x10, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
1024 0x00, 0x44, 0x00, 0x4e, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1025 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x00,
1026 0x00, 0xcc, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x4e,
1027 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1028 0x00, 0x00, 0x00, 0x30, 0x00, 0x48, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x44,
1029 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x4e, 0x00, 0x34, 0x00, 0x00,
1030 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1031 0x00, 0x28, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
1032 0x00, 0x44, 0x00, 0x4e, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1033 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x00,
1034 0x00, 0xee, 0x00, 0x44, 0x00, 0x44, 0x00, 0x28, 0x00, 0x28, 0x00, 0x10,
1035 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
1036 0x00, 0x40, 0x00, 0xc0, 0x00, 0x40, 0x00, 0x40, 0x00, 0x5c, 0x00, 0x62,
1037 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x7c, 0x00, 0x40,
1038 0x00, 0x40, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1039 0x00, 0x28, 0x00, 0x00, 0x00, 0xee, 0x00, 0x44, 0x00, 0x44, 0x00, 0x28,
1040 0x00, 0x28, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, 0xc0,
1041 0x04, 0x03, 0x05, 0x08, 0x07, 0x0d, 0x0c, 0x03, 0x05, 0x05, 0x07, 0x08,
1042 0x03, 0x05, 0x04, 0x04, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
1043 0x07, 0x07, 0x03, 0x04, 0x08, 0x08, 0x08, 0x07, 0x0e, 0x0b, 0x0a, 0x0a,
1044 0x0b, 0x09, 0x08, 0x0a, 0x0b, 0x05, 0x06, 0x0b, 0x09, 0x0d, 0x0b, 0x0b,
1045 0x09, 0x0b, 0x0a, 0x08, 0x09, 0x0b, 0x0b, 0x0e, 0x0a, 0x0b, 0x09, 0x05,
1046 0x04, 0x04, 0x06, 0x08, 0x04, 0x07, 0x07, 0x07, 0x07, 0x07, 0x05, 0x07,
1047 0x07, 0x03, 0x04, 0x07, 0x03, 0x0b, 0x07, 0x07, 0x07, 0x07, 0x05, 0x06,
1048 0x04, 0x07, 0x07, 0x0b, 0x07, 0x07, 0x06, 0x07, 0x03, 0x07, 0x08, 0x00,
1049 0x04, 0x03, 0x08, 0x08, 0x08, 0x09, 0x03, 0x08, 0x05, 0x0b, 0x04, 0x07,
1050 0x08, 0x05, 0x0b, 0x08, 0x06, 0x08, 0x05, 0x05, 0x04, 0x07, 0x07, 0x04,
1051 0x04, 0x05, 0x04, 0x07, 0x0b, 0x0b, 0x0b, 0x07, 0x0b, 0x0b, 0x0b, 0x0b,
1052 0x0b, 0x0b, 0x0d, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x05, 0x05, 0x05, 0x05,
1053 0x0c, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x08, 0x0b, 0x0b, 0x0b, 0x0b,
1054 0x0b, 0x0b, 0x09, 0x08, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0a, 0x07,
1055 0x07, 0x07, 0x07, 0x07, 0x03, 0x03, 0x04, 0x03, 0x08, 0x07, 0x07, 0x07,
1056 0x07, 0x07, 0x07, 0x08, 0x08, 0x07, 0x07, 0x07, 0x07, 0x07, 0x08, 0x07,
1057 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1058 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1059 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1060 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1061 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
1062 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1063 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00,
1064 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1065 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x11,
1066 0x80, 0x7f, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0xff, 0x00, 0x44,
1067 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1068 0x00, 0x00, 0x00, 0x10, 0x00, 0x3e, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50,
1069 0x00, 0x3c, 0x00, 0x12, 0x00, 0x12, 0x00, 0x12, 0x00, 0x7c, 0x00, 0x10,
1070 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
1071 0x00, 0x32, 0x00, 0x4c, 0x00, 0x4c, 0x00, 0x38, 0x00, 0x08, 0x00, 0x13,
1072 0x80, 0x14, 0x80, 0x34, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1073 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x14,
1074 0x00, 0x1c, 0x00, 0x18, 0x00, 0x2a, 0x00, 0x4a, 0x00, 0x46, 0x00, 0x44,
1075 0x00, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1076 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
1077 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1078 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
1079 0x00, 0x20, 0x00, 0x20, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1080 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x20, 0x00, 0x20, 0x00, 0x10,
1081 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x40,
1082 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
1083 0x00, 0x20, 0x00, 0x40, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
1084 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0xf8, 0x00, 0x30, 0x00, 0x48,
1085 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1086 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1087 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0xf8,
1088 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1089 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1090 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1091 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1092 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1093 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1094 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1095 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1096 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1097 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08,
1098 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, 0x20, 0x00, 0x40, 0x00, 0x40,
1099 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1100 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
1101 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x38, 0x00, 0x00,
1102 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1103 0x00, 0x20, 0x00, 0x60, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
1104 0x00, 0x20, 0x00, 0x20, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1105 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44,
1106 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x40,
1107 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1108 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44, 0x00, 0x04, 0x00, 0x04,
1109 0x00, 0x38, 0x00, 0x04, 0x00, 0x04, 0x00, 0x44, 0x00, 0x38, 0x00, 0x00,
1110 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1111 0x00, 0x08, 0x00, 0x18, 0x00, 0x28, 0x00, 0x48, 0x00, 0x88, 0x00, 0xfc,
1112 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1113 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x40,
1114 0x00, 0x40, 0x00, 0x58, 0x00, 0x64, 0x00, 0x44, 0x00, 0x04, 0x00, 0x44,
1115 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1116 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x78,
1117 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x38, 0x00, 0x00,
1118 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1119 0x00, 0xfe, 0x00, 0x04, 0x00, 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x10,
1120 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1121 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44,
1122 0x00, 0x44, 0x00, 0x44, 0x00, 0x38, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
1123 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1124 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
1125 0x00, 0x44, 0x00, 0x3c, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x00,
1126 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1127 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00,
1128 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1129 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1130 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1131 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1132 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
1133 0x00, 0x60, 0x00, 0xc0, 0x00, 0x40, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,
1134 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1135 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
1136 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1137 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1138 0x00, 0x80, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80,
1139 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1140 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08,
1141 0x00, 0x10, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
1142 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e,
1143 0x80, 0x61, 0x40, 0x4c, 0x40, 0x98, 0x40, 0xa6, 0x40, 0xa6, 0x80, 0x9d,
1144 0x00, 0x40, 0x80, 0x20, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1145 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08,
1146 0x00, 0x14, 0x00, 0x14, 0x00, 0x24, 0x00, 0x3c, 0x00, 0x42, 0x00, 0x42,
1147 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1148 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22,
1149 0x00, 0x3c, 0x00, 0x24, 0x00, 0x22, 0x00, 0x22, 0x00, 0x3c, 0x00, 0x00,
1150 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1151 0x00, 0x1c, 0x00, 0x24, 0x00, 0x40, 0x00, 0x40, 0x00, 0x80, 0x00, 0x80,
1152 0x00, 0x80, 0x00, 0x84, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1153 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x58,
1154 0x00, 0x44, 0x00, 0x42, 0x00, 0x41, 0x00, 0x41, 0x00, 0x41, 0x00, 0x42,
1155 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1156 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1157 0x00, 0x7e, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x3e, 0x00, 0x00,
1158 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1159 0x00, 0x7e, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x7c, 0x00, 0x40,
1160 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1161 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44,
1162 0x00, 0x40, 0x00, 0x80, 0x00, 0xbe, 0x00, 0x82, 0x00, 0x82, 0x00, 0x84,
1163 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1164 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x41, 0x00, 0x41, 0x00, 0x41,
1165 0x00, 0x7f, 0x00, 0x41, 0x00, 0x41, 0x00, 0x41, 0x00, 0x41, 0x00, 0x00,
1166 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1167 0x00, 0x7c, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10,
1168 0x00, 0x10, 0x00, 0x10, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1169 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x04,
1170 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x44, 0x00, 0x44,
1171 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1172 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x44, 0x00, 0x48, 0x00, 0x70,
1173 0x00, 0x60, 0x00, 0x60, 0x00, 0x50, 0x00, 0x48, 0x00, 0x46, 0x00, 0x00,
1174 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1175 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1176 0x00, 0x40, 0x00, 0x40, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1177 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x22,
1178 0x00, 0x22, 0x00, 0x56, 0x00, 0x55, 0x00, 0x55, 0x00, 0x55, 0x80, 0x88,
1179 0x80, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1180 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x80, 0x60, 0x80, 0x50, 0x80, 0x48,
1181 0x80, 0x48, 0x80, 0x44, 0x80, 0x42, 0x80, 0x41, 0x80, 0x40, 0x00, 0x00,
1182 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1183 0x00, 0x0e, 0x00, 0x11, 0x80, 0x20, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40,
1184 0x00, 0x41, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1185 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x48,
1186 0x00, 0x48, 0x00, 0x48, 0x00, 0x48, 0x00, 0x70, 0x00, 0x40, 0x00, 0x40,
1187 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1188 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x21, 0x80, 0x40, 0x80, 0x40,
1189 0x80, 0x40, 0x80, 0x40, 0x80, 0x44, 0x80, 0x23, 0x00, 0x1f, 0x80, 0x01,
1190 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1191 0x00, 0x70, 0x00, 0x48, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x78,
1192 0x00, 0x50, 0x00, 0x48, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1193 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x20,
1194 0x00, 0x40, 0x00, 0x40, 0x00, 0x3c, 0x00, 0x02, 0x00, 0x02, 0x00, 0x84,
1195 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1196 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08,
1197 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00,
1198 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1199 0x00, 0x41, 0x00, 0x41, 0x00, 0x41, 0x00, 0x41, 0x00, 0x41, 0x00, 0x41,
1200 0x00, 0x41, 0x00, 0x22, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1201 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x82,
1202 0x00, 0x84, 0x00, 0x44, 0x00, 0x44, 0x00, 0x28, 0x00, 0x28, 0x00, 0x30,
1203 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1204 0x00, 0x00, 0x00, 0x00, 0x20, 0x84, 0x20, 0x84, 0x40, 0x44, 0x40, 0x4a,
1205 0x40, 0x4a, 0x80, 0x52, 0x80, 0x52, 0x80, 0x22, 0x00, 0x21, 0x00, 0x00,
1206 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1207 0x00, 0x81, 0x00, 0x42, 0x00, 0x24, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18,
1208 0x00, 0x24, 0x00, 0x42, 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1209 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x44,
1210 0x00, 0x44, 0x00, 0x24, 0x00, 0x28, 0x00, 0x18, 0x00, 0x10, 0x00, 0x10,
1211 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1212 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08,
1213 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00, 0xff, 0x00, 0x00,
1214 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70,
1215 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1216 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x70,
1217 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc0,
1218 0x00, 0x40, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x10, 0x00, 0x10,
1219 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1220 0x00, 0x00, 0x00, 0x70, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10,
1221 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10,
1222 0x00, 0x10, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
1223 0x00, 0x70, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1224 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1225 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1226 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1227 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1228 0x00, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,
1229 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1230 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1231 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x48, 0x00, 0x88,
1232 0x00, 0x88, 0x00, 0x88, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1233 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80,
1234 0x00, 0x80, 0x00, 0xf0, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88,
1235 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1236 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30,
1237 0x00, 0x48, 0x00, 0x80, 0x00, 0x80, 0x00, 0x88, 0x00, 0x70, 0x00, 0x00,
1238 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
1239 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x78, 0x00, 0x88, 0x00, 0x88,
1240 0x00, 0x88, 0x00, 0x88, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1241 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1242 0x00, 0x00, 0x00, 0x70, 0x00, 0x88, 0x00, 0x90, 0x00, 0xe0, 0x00, 0x88,
1243 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1244 0x00, 0x00, 0x00, 0x18, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0xf8,
1245 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00,
1246 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1247 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x48, 0x00, 0x88,
1248 0x00, 0x88, 0x00, 0x88, 0x00, 0x78, 0x00, 0x08, 0x00, 0x08, 0x00, 0xf0,
1249 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80,
1250 0x00, 0x80, 0x00, 0xb0, 0x00, 0xc8, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88,
1251 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1252 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
1253 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00,
1254 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1255 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10,
1256 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x90, 0x00, 0x60,
1257 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80,
1258 0x00, 0x80, 0x00, 0x90, 0x00, 0xa0, 0x00, 0xe0, 0x00, 0xd0, 0x00, 0x90,
1259 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1260 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80,
1261 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00,
1262 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1263 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa4, 0x00, 0xda, 0x00, 0x92,
1264 0x00, 0x92, 0x00, 0x92, 0x00, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1265 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1266 0x00, 0x00, 0x00, 0xb0, 0x00, 0xc8, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88,
1267 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1268 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70,
1269 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x70, 0x00, 0x00,
1270 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1271 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x88, 0x00, 0x88,
1272 0x00, 0x88, 0x00, 0x88, 0x00, 0xf0, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80,
1273 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1274 0x00, 0x00, 0x00, 0x38, 0x00, 0x48, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88,
1275 0x00, 0x78, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
1276 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0,
1277 0x00, 0xd0, 0x00, 0x90, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00,
1278 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1279 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x88, 0x00, 0x60,
1280 0x00, 0x10, 0x00, 0x08, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1281 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
1282 0x00, 0x20, 0x00, 0xf8, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
1283 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1284 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88,
1285 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x78, 0x00, 0x00,
1286 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1287 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x88, 0x00, 0x50,
1288 0x00, 0x50, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1289 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1290 0x00, 0x00, 0x00, 0x92, 0x00, 0x92, 0x00, 0xb4, 0x00, 0xb4, 0x00, 0x54,
1291 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1292 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84,
1293 0x00, 0x48, 0x00, 0x30, 0x00, 0x30, 0x00, 0x48, 0x00, 0x84, 0x00, 0x00,
1294 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1295 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x48, 0x00, 0x48,
1296 0x00, 0x30, 0x00, 0x30, 0x00, 0x20, 0x00, 0x20, 0x00, 0x40, 0x00, 0x40,
1297 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1298 0x00, 0x00, 0x00, 0x78, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40,
1299 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1300 0x00, 0x00, 0x00, 0x30, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1301 0x00, 0x40, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1302 0x00, 0x40, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
1303 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
1304 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00,
1305 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x20, 0x00, 0x20,
1306 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x30, 0x00, 0x30, 0x00, 0x20,
1307 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
1308 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64,
1309 0x00, 0xe4, 0x00, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1310 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1311 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1312 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1313 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1314 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1315 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1316 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1317 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00,
1318 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
1319 0x00, 0x20, 0x00, 0x78, 0x00, 0x68, 0x00, 0xa0, 0x00, 0xa0, 0x00, 0xa8,
1320 0x00, 0xa8, 0x00, 0x70, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1321 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x30, 0x00, 0x20,
1322 0x00, 0x20, 0x00, 0xfc, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x21,
1323 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1324 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x7c,
1325 0x00, 0x48, 0x00, 0x48, 0x00, 0x78, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00,
1326 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1327 0x00, 0x82, 0x00, 0x44, 0x00, 0x44, 0x00, 0x28, 0x00, 0x7c, 0x00, 0x10,
1328 0x00, 0x38, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1329 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
1330 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
1331 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1332 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x22, 0x00, 0x20, 0x00, 0x3c,
1333 0x00, 0x22, 0x00, 0x1e, 0x00, 0x02, 0x00, 0x22, 0x00, 0x1c, 0x00, 0x00,
1334 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1335 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1336 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1337 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x62, 0x00, 0x9d,
1338 0x00, 0xa1, 0x00, 0xa5, 0x00, 0x9b, 0x00, 0x42, 0x00, 0x3c, 0x00, 0x00,
1339 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1340 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x90, 0x00, 0x98, 0x00, 0x68,
1341 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1342 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1343 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x50, 0x00, 0xa0,
1344 0x00, 0x50, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1345 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1346 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x08, 0x00, 0x08,
1347 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1348 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1349 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1350 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c,
1351 0x00, 0x42, 0x00, 0x9d, 0x00, 0x95, 0x00, 0x9d, 0x00, 0xa9, 0x00, 0xa7,
1352 0x00, 0x42, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1353 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c,
1354 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1355 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1356 0x00, 0x00, 0x00, 0x60, 0x00, 0x90, 0x00, 0x90, 0x00, 0x60, 0x00, 0x00,
1357 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1358 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1359 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0xf8,
1360 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
1361 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x28, 0x00, 0x18,
1362 0x00, 0x20, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1363 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1364 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x08, 0x00, 0x04, 0x00, 0x1c,
1365 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1366 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
1367 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1368 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1369 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1370 0x00, 0x00, 0x00, 0x22, 0x00, 0x22, 0x00, 0x46, 0x00, 0x44, 0x00, 0x44,
1371 0x00, 0x7c, 0x00, 0xc0, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1372 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x3a, 0x00, 0x4a, 0x00, 0x4a,
1373 0x00, 0x4a, 0x00, 0x4a, 0x00, 0x3a, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14,
1374 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1375 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00,
1376 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1377 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1378 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1379 0x00, 0x00, 0x00, 0x60, 0x00, 0x20, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00,
1380 0x00, 0x00, 0x00, 0x08, 0x00, 0x18, 0x00, 0x08, 0x00, 0x08, 0x00, 0x1c,
1381 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1382 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38,
1383 0x00, 0x44, 0x00, 0x44, 0x00, 0x4c, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00,
1384 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1385 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1386 0x00, 0x00, 0x00, 0x50, 0x00, 0x28, 0x00, 0x14, 0x00, 0x28, 0x00, 0x50,
1387 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1388 0x00, 0x00, 0x00, 0x08, 0x00, 0x18, 0x00, 0x08, 0x00, 0x08, 0x00, 0x1c,
1389 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x08, 0x00, 0x18, 0x00, 0x28,
1390 0x00, 0x7c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
1391 0x00, 0x18, 0x00, 0x08, 0x00, 0x08, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x7e,
1392 0x00, 0x00, 0x00, 0x1c, 0x00, 0x14, 0x00, 0x0c, 0x00, 0x10, 0x00, 0x1c,
1393 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x08, 0x00, 0x18,
1394 0x00, 0x08, 0x00, 0x38, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x08,
1395 0x00, 0x18, 0x00, 0x28, 0x00, 0x7c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
1396 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x30, 0x00, 0x40,
1397 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0xc8, 0x00, 0x70, 0x00, 0x00,
1398 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00,
1399 0x00, 0x08, 0x00, 0x08, 0x00, 0x14, 0x00, 0x14, 0x00, 0x24, 0x00, 0x3c,
1400 0x00, 0x42, 0x00, 0x42, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1401 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08,
1402 0x00, 0x14, 0x00, 0x14, 0x00, 0x24, 0x00, 0x3c, 0x00, 0x42, 0x00, 0x42,
1403 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c,
1404 0x00, 0x12, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x14, 0x00, 0x14,
1405 0x00, 0x24, 0x00, 0x3c, 0x00, 0x42, 0x00, 0x42, 0x00, 0x82, 0x00, 0x00,
1406 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x2e, 0x00, 0x00,
1407 0x00, 0x08, 0x00, 0x08, 0x00, 0x14, 0x00, 0x14, 0x00, 0x24, 0x00, 0x3c,
1408 0x00, 0x42, 0x00, 0x42, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1409 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08,
1410 0x00, 0x14, 0x00, 0x14, 0x00, 0x24, 0x00, 0x3c, 0x00, 0x42, 0x00, 0x42,
1411 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c,
1412 0x00, 0x12, 0x00, 0x12, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x14, 0x00, 0x14,
1413 0x00, 0x24, 0x00, 0x3c, 0x00, 0x42, 0x00, 0x42, 0x00, 0x82, 0x00, 0x00,
1414 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x01,
1415 0x00, 0x03, 0x00, 0x05, 0x00, 0x09, 0x00, 0x11, 0xf8, 0x1f, 0x00, 0x21,
1416 0x00, 0x41, 0x00, 0x81, 0xf8, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1417 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x24,
1418 0x00, 0x44, 0x00, 0x40, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0xcc,
1419 0x00, 0x78, 0x00, 0x08, 0x00, 0x38, 0x00, 0x00, 0x00, 0x20, 0x00, 0x10,
1420 0x00, 0x08, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1421 0x00, 0x7e, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x3e, 0x00, 0x00,
1422 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x00,
1423 0x00, 0x7e, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x7e, 0x00, 0x40,
1424 0x00, 0x40, 0x00, 0x40, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1425 0x00, 0x00, 0x00, 0x18, 0x00, 0x24, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x40,
1426 0x00, 0x40, 0x00, 0x40, 0x00, 0x7e, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1427 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1428 0x00, 0x24, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1429 0x00, 0x7e, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x3e, 0x00, 0x00,
1430 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, 0x00,
1431 0x00, 0x7c, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10,
1432 0x00, 0x10, 0x00, 0x10, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1433 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x10,
1434 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10,
1435 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30,
1436 0x00, 0x48, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10,
1437 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x7c, 0x00, 0x00,
1438 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00,
1439 0x00, 0x7c, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10,
1440 0x00, 0x10, 0x00, 0x10, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1441 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x58,
1442 0x00, 0x44, 0x00, 0x42, 0x00, 0x41, 0x00, 0xf1, 0x00, 0x41, 0x00, 0x41,
1443 0x00, 0x42, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a,
1444 0x00, 0x2e, 0x00, 0x00, 0x80, 0x40, 0x80, 0x60, 0x80, 0x50, 0x80, 0x48,
1445 0x80, 0x48, 0x80, 0x44, 0x80, 0x42, 0x80, 0x41, 0x80, 0x40, 0x00, 0x00,
1446 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00,
1447 0x00, 0x0e, 0x00, 0x11, 0x80, 0x20, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40,
1448 0x00, 0x41, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1449 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x11,
1450 0x80, 0x20, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x00, 0x41, 0x00, 0x21,
1451 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06,
1452 0x00, 0x09, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x11, 0x80, 0x20, 0x80, 0x40,
1453 0x80, 0x40, 0x80, 0x40, 0x00, 0x41, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00,
1454 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x17, 0x00, 0x00,
1455 0x00, 0x0e, 0x00, 0x11, 0x80, 0x20, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40,
1456 0x00, 0x41, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1457 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x11,
1458 0x80, 0x20, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x00, 0x41, 0x00, 0x21,
1459 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1460 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98,
1461 0x00, 0xe0, 0x00, 0x60, 0x00, 0xf0, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00,
1462 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1463 0x80, 0x1e, 0x80, 0x61, 0x80, 0x42, 0x80, 0x84, 0x80, 0x88, 0x80, 0x91,
1464 0x00, 0xe1, 0x00, 0x43, 0x00, 0xbc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1465 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x41, 0x00, 0x41,
1466 0x00, 0x41, 0x00, 0x41, 0x00, 0x41, 0x00, 0x41, 0x00, 0x41, 0x00, 0x22,
1467 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08,
1468 0x00, 0x10, 0x00, 0x00, 0x00, 0x41, 0x00, 0x41, 0x00, 0x41, 0x00, 0x41,
1469 0x00, 0x41, 0x00, 0x41, 0x00, 0x41, 0x00, 0x22, 0x00, 0x1c, 0x00, 0x00,
1470 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x24, 0x00, 0x00,
1471 0x00, 0x41, 0x00, 0x41, 0x00, 0x41, 0x00, 0x41, 0x00, 0x41, 0x00, 0x41,
1472 0x00, 0x41, 0x00, 0x22, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1473 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x41, 0x00, 0x41,
1474 0x00, 0x41, 0x00, 0x41, 0x00, 0x41, 0x00, 0x41, 0x00, 0x41, 0x00, 0x22,
1475 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x10,
1476 0x00, 0x20, 0x00, 0x00, 0x00, 0x82, 0x00, 0x44, 0x00, 0x44, 0x00, 0x24,
1477 0x00, 0x28, 0x00, 0x18, 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, 0x00,
1478 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1479 0x00, 0x40, 0x00, 0x78, 0x00, 0x4c, 0x00, 0x44, 0x00, 0x44, 0x00, 0x4c,
1480 0x00, 0x78, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1481 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x48, 0x00, 0x88,
1482 0x00, 0x88, 0x00, 0x90, 0x00, 0xa0, 0x00, 0x90, 0x00, 0x88, 0x00, 0x88,
1483 0x00, 0xf0, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1484 0x00, 0x00, 0x00, 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x38,
1485 0x00, 0x48, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x74, 0x00, 0x00,
1486 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
1487 0x00, 0x10, 0x00, 0x20, 0x00, 0x00, 0x00, 0x38, 0x00, 0x48, 0x00, 0x88,
1488 0x00, 0x88, 0x00, 0x88, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1489 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x48,
1490 0x00, 0x00, 0x00, 0x38, 0x00, 0x48, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88,
1491 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1492 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x38,
1493 0x00, 0x48, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x74, 0x00, 0x00,
1494 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1495 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x38, 0x00, 0x48, 0x00, 0x88,
1496 0x00, 0x88, 0x00, 0x88, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1497 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x48, 0x00, 0x48, 0x00, 0x30,
1498 0x00, 0x00, 0x00, 0x38, 0x00, 0x48, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88,
1499 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1500 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1f,
1501 0x80, 0x24, 0x00, 0x45, 0x00, 0x46, 0x40, 0x64, 0x80, 0x3f, 0x00, 0x00,
1502 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1503 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x48, 0x00, 0x80,
1504 0x00, 0x80, 0x00, 0x88, 0x00, 0x78, 0x00, 0x10, 0x00, 0x70, 0x00, 0x00,
1505 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x20, 0x00, 0x10,
1506 0x00, 0x00, 0x00, 0x70, 0x00, 0x88, 0x00, 0x90, 0x00, 0xe0, 0x00, 0x88,
1507 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1508 0x00, 0x00, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x00, 0x00, 0x70,
1509 0x00, 0x88, 0x00, 0x90, 0x00, 0xe0, 0x00, 0x88, 0x00, 0x70, 0x00, 0x00,
1510 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1511 0x00, 0x30, 0x00, 0x48, 0x00, 0x00, 0x00, 0x70, 0x00, 0x88, 0x00, 0x90,
1512 0x00, 0xe0, 0x00, 0x88, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1513 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00,
1514 0x00, 0x00, 0x00, 0x70, 0x00, 0x88, 0x00, 0x90, 0x00, 0xe0, 0x00, 0x88,
1515 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1516 0x00, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x20, 0x00, 0x00, 0x00, 0x40,
1517 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00,
1518 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
1519 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1520 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1521 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x90,
1522 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
1523 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1524 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x20,
1525 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00,
1526 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
1527 0x00, 0x78, 0x00, 0x30, 0x00, 0xf0, 0x00, 0x08, 0x00, 0x38, 0x00, 0x48,
1528 0x00, 0x88, 0x00, 0x88, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1529 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x00, 0xb8,
1530 0x00, 0x00, 0x00, 0xb0, 0x00, 0xc8, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88,
1531 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1532 0x00, 0x00, 0x00, 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x70,
1533 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x70, 0x00, 0x00,
1534 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
1535 0x00, 0x10, 0x00, 0x20, 0x00, 0x00, 0x00, 0x70, 0x00, 0x88, 0x00, 0x88,
1536 0x00, 0x88, 0x00, 0x88, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1537 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x48,
1538 0x00, 0x00, 0x00, 0x70, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88,
1539 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1540 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x70,
1541 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x70, 0x00, 0x00,
1542 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1543 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x70, 0x00, 0x88, 0x00, 0x88,
1544 0x00, 0x88, 0x00, 0x88, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1545 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1546 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x20,
1547 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1548 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78,
1549 0x00, 0xc8, 0x00, 0xb8, 0x00, 0xa8, 0x00, 0xc8, 0x00, 0xf0, 0x00, 0x00,
1550 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
1551 0x00, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88,
1552 0x00, 0x88, 0x00, 0x88, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1553 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20,
1554 0x00, 0x00, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88,
1555 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1556 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x90, 0x00, 0x00, 0x00, 0x88,
1557 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x78, 0x00, 0x00,
1558 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1559 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88,
1560 0x00, 0x88, 0x00, 0x88, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1561 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40,
1562 0x00, 0x00, 0x00, 0x84, 0x00, 0x48, 0x00, 0x48, 0x00, 0x30, 0x00, 0x30,
1563 0x00, 0x20, 0x00, 0x20, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
1564 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0xf0,
1565 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0xf0, 0x00, 0x80,
1566 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1567 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x84, 0x00, 0x48, 0x00, 0x48,
1568 0x00, 0x30, 0x00, 0x30, 0x00, 0x20, 0x00, 0x20, 0x00, 0x40, 0x00, 0x40,
1569 0x04, 0x03, 0x05, 0x0a, 0x08, 0x0a, 0x08, 0x05, 0x04, 0x04, 0x06, 0x06,
1570 0x03, 0x05, 0x03, 0x06, 0x07, 0x05, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
1571 0x07, 0x07, 0x04, 0x04, 0x05, 0x06, 0x04, 0x06, 0x0b, 0x08, 0x08, 0x07,
1572 0x09, 0x08, 0x07, 0x08, 0x09, 0x07, 0x08, 0x07, 0x07, 0x0a, 0x0a, 0x0a,
1573 0x06, 0x0b, 0x07, 0x08, 0x08, 0x09, 0x08, 0x0c, 0x09, 0x08, 0x09, 0x05,
1574 0x06, 0x05, 0x06, 0x08, 0x07, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
1575 0x06, 0x02, 0x05, 0x06, 0x02, 0x08, 0x06, 0x06, 0x06, 0x06, 0x05, 0x06,
1576 0x06, 0x06, 0x06, 0x08, 0x07, 0x06, 0x06, 0x04, 0x05, 0x04, 0x07, 0x00,
1577 0x04, 0x03, 0x06, 0x09, 0x07, 0x08, 0x05, 0x08, 0x07, 0x09, 0x06, 0x07,
1578 0x06, 0x05, 0x09, 0x07, 0x05, 0x06, 0x08, 0x08, 0x07, 0x07, 0x08, 0x03,
1579 0x07, 0x08, 0x08, 0x07, 0x08, 0x08, 0x08, 0x06, 0x08, 0x08, 0x08, 0x08,
1580 0x08, 0x08, 0x0e, 0x07, 0x08, 0x08, 0x08, 0x08, 0x07, 0x07, 0x07, 0x07,
1581 0x09, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x06, 0x0a, 0x09, 0x09, 0x09,
1582 0x09, 0x08, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0b, 0x06,
1583 0x06, 0x06, 0x06, 0x06, 0x03, 0x03, 0x04, 0x04, 0x06, 0x06, 0x06, 0x06,
1584 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
1585 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1586 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1587 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1588 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1589 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
1590 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,
1591 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1592 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1593 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14,
1594 0x00, 0x7e, 0x00, 0x28, 0x00, 0x28, 0x00, 0xfc, 0x00, 0x50, 0x00, 0x50,
1595 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1596 0x00, 0x00, 0x00, 0x10, 0x00, 0x38, 0x00, 0x54, 0x00, 0x54, 0x00, 0x50,
1597 0x00, 0x38, 0x00, 0x14, 0x00, 0x14, 0x00, 0x54, 0x00, 0x38, 0x00, 0x10,
1598 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30,
1599 0x40, 0x48, 0x80, 0x48, 0x00, 0x31, 0x00, 0x02, 0x00, 0x04, 0xc0, 0x08,
1600 0x20, 0x11, 0x20, 0x21, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1601 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x24, 0x00, 0x24,
1602 0x00, 0x24, 0x00, 0x18, 0x00, 0x28, 0x00, 0x44, 0x00, 0x45, 0x00, 0x42,
1603 0x00, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1604 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00,
1605 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1606 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
1607 0x00, 0x20, 0x00, 0x20, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1608 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x20, 0x00, 0x20, 0x00, 0x10,
1609 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x40,
1610 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
1611 0x00, 0x20, 0x00, 0x40, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
1612 0x00, 0x00, 0x00, 0x20, 0x00, 0xa8, 0x00, 0x70, 0x00, 0xd8, 0x00, 0x00,
1613 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1614 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1615 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x7c, 0x00, 0x10,
1616 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1617 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1618 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1619 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1620 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1621 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1622 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1623 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1624 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1625 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10,
1626 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1627 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1628 0x00, 0x00, 0x00, 0x38, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
1629 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x38, 0x00, 0x00,
1630 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
1631 0x00, 0x70, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10,
1632 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1633 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44, 0x00, 0x44,
1634 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x40,
1635 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1636 0x00, 0x00, 0x00, 0x38, 0x00, 0x44, 0x00, 0x04, 0x00, 0x04, 0x00, 0x18,
1637 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x44, 0x00, 0x38, 0x00, 0x00,
1638 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
1639 0x00, 0x0c, 0x00, 0x14, 0x00, 0x14, 0x00, 0x24, 0x00, 0x44, 0x00, 0x7c,
1640 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1641 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x40, 0x00, 0x40,
1642 0x00, 0x40, 0x00, 0x78, 0x00, 0x44, 0x00, 0x04, 0x00, 0x04, 0x00, 0x44,
1643 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1644 0x00, 0x00, 0x00, 0x38, 0x00, 0x44, 0x00, 0x40, 0x00, 0x40, 0x00, 0x58,
1645 0x00, 0x64, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x38, 0x00, 0x00,
1646 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c,
1647 0x00, 0x04, 0x00, 0x04, 0x00, 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x10,
1648 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1649 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44, 0x00, 0x44,
1650 0x00, 0x44, 0x00, 0x38, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
1651 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1652 0x00, 0x00, 0x00, 0x38, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x4c,
1653 0x00, 0x34, 0x00, 0x04, 0x00, 0x04, 0x00, 0x44, 0x00, 0x38, 0x00, 0x00,
1654 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1655 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1656 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1657 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1658 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1659 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1660 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x18, 0x00, 0x30,
1661 0x00, 0x60, 0x00, 0x30, 0x00, 0x18, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00,
1662 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1663 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x7c,
1664 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1665 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
1666 0x00, 0x30, 0x00, 0x18, 0x00, 0x0c, 0x00, 0x18, 0x00, 0x30, 0x00, 0x60,
1667 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1668 0x00, 0x00, 0x00, 0x38, 0x00, 0x44, 0x00, 0x44, 0x00, 0x04, 0x00, 0x08,
1669 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
1670 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x60, 0x18,
1671 0x10, 0x20, 0x10, 0x20, 0xc8, 0x43, 0x48, 0x44, 0x48, 0x44, 0x88, 0x44,
1672 0x70, 0x23, 0x00, 0x20, 0x30, 0x18, 0xc0, 0x07, 0x00, 0x00, 0x00, 0x00,
1673 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x14,
1674 0x00, 0x14, 0x00, 0x22, 0x00, 0x22, 0x00, 0x7f, 0x00, 0x41, 0x80, 0x80,
1675 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1676 0x00, 0x00, 0x00, 0x7e, 0x00, 0x41, 0x00, 0x41, 0x00, 0x41, 0x00, 0x7e,
1677 0x00, 0x41, 0x00, 0x41, 0x00, 0x41, 0x00, 0x41, 0x00, 0x7e, 0x00, 0x00,
1678 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e,
1679 0x00, 0x21, 0x80, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1680 0x80, 0x40, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1681 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x41, 0x80, 0x40,
1682 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x00, 0x41,
1683 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1684 0x00, 0x00, 0x00, 0x7f, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x7e,
1685 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x7f, 0x00, 0x00,
1686 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f,
1687 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x7e, 0x00, 0x40, 0x00, 0x40,
1688 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1689 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x21, 0x80, 0x40,
1690 0x00, 0x40, 0x00, 0x40, 0x80, 0x43, 0x80, 0x40, 0x80, 0x40, 0x80, 0x21,
1691 0x80, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1692 0x00, 0x00, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x7f,
1693 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x00, 0x00,
1694 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
1695 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1696 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1697 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04,
1698 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x44, 0x00, 0x44,
1699 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1700 0x00, 0x00, 0x00, 0x42, 0x00, 0x44, 0x00, 0x48, 0x00, 0x50, 0x00, 0x60,
1701 0x00, 0x50, 0x00, 0x48, 0x00, 0x44, 0x00, 0x42, 0x00, 0x41, 0x00, 0x00,
1702 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
1703 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1704 0x00, 0x40, 0x00, 0x40, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1705 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x60,
1706 0xc0, 0x60, 0x40, 0x51, 0x40, 0x51, 0x40, 0x4a, 0x40, 0x4a, 0x40, 0x44,
1707 0x40, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1708 0x00, 0x00, 0x80, 0x40, 0x80, 0x60, 0x80, 0x50, 0x80, 0x50, 0x80, 0x48,
1709 0x80, 0x44, 0x80, 0x42, 0x80, 0x42, 0x80, 0x41, 0x80, 0x40, 0x00, 0x00,
1710 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e,
1711 0x00, 0x21, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40,
1712 0x80, 0x40, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1713 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x41, 0x80, 0x40,
1714 0x80, 0x40, 0x00, 0x41, 0x00, 0x7e, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1715 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1716 0x00, 0x00, 0x00, 0x1e, 0x00, 0x21, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40,
1717 0x80, 0x40, 0x80, 0x40, 0x80, 0x42, 0x00, 0x21, 0x80, 0x1e, 0x00, 0x00,
1718 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e,
1719 0x00, 0x41, 0x80, 0x40, 0x80, 0x40, 0x00, 0x41, 0x00, 0x7f, 0x80, 0x40,
1720 0x80, 0x40, 0x80, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1721 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x41, 0x00, 0x41,
1722 0x00, 0x40, 0x00, 0x38, 0x00, 0x06, 0x00, 0x01, 0x00, 0x41, 0x00, 0x41,
1723 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1724 0x00, 0x00, 0x80, 0xff, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08,
1725 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00,
1726 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40,
1727 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40,
1728 0x80, 0x40, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1729 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x41,
1730 0x00, 0x41, 0x00, 0x22, 0x00, 0x22, 0x00, 0x14, 0x00, 0x14, 0x00, 0x08,
1731 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1732 0x00, 0x00, 0x08, 0x82, 0x08, 0x82, 0x08, 0x82, 0x10, 0x45, 0x10, 0x45,
1733 0xa0, 0x28, 0xa0, 0x28, 0xa0, 0x28, 0x40, 0x10, 0x40, 0x10, 0x00, 0x00,
1734 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81,
1735 0x00, 0x81, 0x00, 0x42, 0x00, 0x24, 0x00, 0x18, 0x00, 0x18, 0x00, 0x24,
1736 0x00, 0x42, 0x00, 0x81, 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1737 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x41,
1738 0x00, 0x22, 0x00, 0x14, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08,
1739 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1740 0x00, 0x00, 0x00, 0x7e, 0x00, 0x02, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08,
1741 0x00, 0x10, 0x00, 0x20, 0x00, 0x20, 0x00, 0x40, 0x00, 0x7e, 0x00, 0x00,
1742 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70,
1743 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1744 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x70,
1745 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80,
1746 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
1747 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1748 0x00, 0x00, 0x00, 0xe0, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
1749 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
1750 0x00, 0x20, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x28,
1751 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1752 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1753 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1754 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1755 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1756 0x00, 0x00, 0x00, 0x40, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1757 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1758 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1759 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x42, 0x00, 0x3e, 0x00, 0x42,
1760 0x00, 0x42, 0x00, 0x42, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1761 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1762 0x00, 0x5c, 0x00, 0x62, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x62,
1763 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1764 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x42,
1765 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x42, 0x00, 0x3c, 0x00, 0x00,
1766 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
1767 0x00, 0x02, 0x00, 0x02, 0x00, 0x3a, 0x00, 0x46, 0x00, 0x42, 0x00, 0x42,
1768 0x00, 0x42, 0x00, 0x46, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1769 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1770 0x00, 0x3c, 0x00, 0x42, 0x00, 0x42, 0x00, 0x7e, 0x00, 0x40, 0x00, 0x42,
1771 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1772 0x00, 0x00, 0x00, 0x20, 0x00, 0x40, 0x00, 0x40, 0x00, 0xe0, 0x00, 0x40,
1773 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00,
1774 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1775 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x46, 0x00, 0x42, 0x00, 0x42,
1776 0x00, 0x42, 0x00, 0x46, 0x00, 0x3a, 0x00, 0x02, 0x00, 0x02, 0x00, 0x3c,
1777 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1778 0x00, 0x58, 0x00, 0x64, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
1779 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1780 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40,
1781 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00,
1782 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
1783 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1784 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x80,
1785 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1786 0x00, 0x44, 0x00, 0x48, 0x00, 0x50, 0x00, 0x70, 0x00, 0x48, 0x00, 0x44,
1787 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1788 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1789 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00,
1790 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1791 0x00, 0x00, 0x00, 0x00, 0x80, 0x59, 0x40, 0x66, 0x40, 0x44, 0x40, 0x44,
1792 0x40, 0x44, 0x40, 0x44, 0x40, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1793 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1794 0x00, 0x58, 0x00, 0x64, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
1795 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1796 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x42,
1797 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x3c, 0x00, 0x00,
1798 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1799 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x62, 0x00, 0x42, 0x00, 0x42,
1800 0x00, 0x42, 0x00, 0x62, 0x00, 0x5c, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1801 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1802 0x00, 0x3a, 0x00, 0x46, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x46,
1803 0x00, 0x3a, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
1804 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x60,
1805 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00,
1806 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1807 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x44, 0x00, 0x40, 0x00, 0x38,
1808 0x00, 0x04, 0x00, 0x44, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1809 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40,
1810 0x00, 0xe0, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1811 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1812 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x44,
1813 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x4c, 0x00, 0x34, 0x00, 0x00,
1814 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1815 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x82, 0x00, 0x44, 0x00, 0x44,
1816 0x00, 0x28, 0x00, 0x28, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1817 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1818 0x80, 0x88, 0x80, 0x88, 0x00, 0x55, 0x00, 0x55, 0x00, 0x55, 0x00, 0x22,
1819 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1820 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x48,
1821 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x48, 0x00, 0x84, 0x00, 0x00,
1822 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1823 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x82, 0x00, 0x44, 0x00, 0x44,
1824 0x00, 0x28, 0x00, 0x28, 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, 0xc0,
1825 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1826 0x00, 0x78, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x20, 0x00, 0x40,
1827 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1828 0x00, 0x00, 0x00, 0x18, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
1829 0x00, 0x20, 0x00, 0xc0, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
1830 0x00, 0x20, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
1831 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1832 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1833 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x20, 0x00, 0x20,
1834 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x18, 0x00, 0x20, 0x00, 0x20,
1835 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
1836 0x00, 0x00, 0x00, 0x31, 0x00, 0x49, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00,
1837 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1838 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1839 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1840 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1841 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1842 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1843 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1844 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
1845 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1846 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1847 0x00, 0x00, 0x00, 0x04, 0x00, 0x38, 0x00, 0x4c, 0x00, 0x48, 0x00, 0x50,
1848 0x00, 0x50, 0x00, 0x64, 0x00, 0x38, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
1849 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x48, 0x00, 0x40,
1850 0x00, 0x40, 0x00, 0x20, 0x00, 0x78, 0x00, 0x20, 0x00, 0x20, 0x00, 0x40,
1851 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1852 0x00, 0x00, 0x00, 0x44, 0x00, 0x38, 0x00, 0x28, 0x00, 0x38, 0x00, 0x44,
1853 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1854 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82,
1855 0x00, 0x82, 0x00, 0x44, 0x00, 0x28, 0x00, 0xfe, 0x00, 0x10, 0x00, 0xfe,
1856 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1857 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1858 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40,
1859 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
1860 0x00, 0x00, 0x00, 0x38, 0x00, 0x44, 0x00, 0x20, 0x00, 0x30, 0x00, 0x48,
1861 0x00, 0x24, 0x00, 0x18, 0x00, 0x08, 0x00, 0x44, 0x00, 0x38, 0x00, 0x00,
1862 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90,
1863 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1864 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1865 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x42, 0x00, 0x9d,
1866 0x00, 0xa1, 0x00, 0xa1, 0x00, 0x9d, 0x00, 0x42, 0x00, 0x3c, 0x00, 0x00,
1867 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1868 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x30, 0x00, 0x50, 0x00, 0x30,
1869 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1870 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1871 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x28, 0x00, 0x50,
1872 0x00, 0x28, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1873 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1874 0x00, 0x00, 0x00, 0x7c, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1875 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1876 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1877 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1878 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c,
1879 0x00, 0x42, 0x00, 0xb9, 0x00, 0xa5, 0x00, 0xb9, 0x00, 0xa5, 0x00, 0x42,
1880 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1881 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1882 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1883 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1884 0x00, 0x00, 0x00, 0x20, 0x00, 0x50, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,
1885 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1886 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1887 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x7c, 0x00, 0x10,
1888 0x00, 0x10, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1889 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x90, 0x00, 0x20,
1890 0x00, 0x40, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1891 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1892 0x00, 0x00, 0x00, 0x60, 0x00, 0x90, 0x00, 0x20, 0x00, 0x90, 0x00, 0x60,
1893 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1894 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
1895 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1896 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1897 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44,
1898 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
1899 0x00, 0x7a, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
1900 0x00, 0x00, 0x00, 0x3c, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74,
1901 0x00, 0x34, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x00,
1902 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1903 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
1904 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1905 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1906 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1907 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00,
1908 0x00, 0x00, 0x00, 0x20, 0x00, 0x60, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
1909 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1910 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
1911 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x20, 0x00, 0x00, 0x00, 0x70,
1912 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1913 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1914 0x00, 0x00, 0x00, 0x50, 0x00, 0x28, 0x00, 0x14, 0x00, 0x28, 0x00, 0x50,
1915 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1916 0x00, 0x00, 0x00, 0x42, 0x00, 0xc2, 0x00, 0x44, 0x00, 0x44, 0x00, 0x48,
1917 0x80, 0x08, 0x80, 0x11, 0x80, 0x12, 0x80, 0x27, 0x80, 0x20, 0x00, 0x00,
1918 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42,
1919 0x00, 0xc2, 0x00, 0x44, 0x00, 0x44, 0x00, 0x48, 0x00, 0x0b, 0x80, 0x14,
1920 0x00, 0x11, 0x00, 0x22, 0x80, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1921 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x92, 0x00, 0x24,
1922 0x00, 0x94, 0x00, 0x68, 0x80, 0x08, 0x80, 0x11, 0x80, 0x12, 0x80, 0x27,
1923 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1924 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
1925 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x44,
1926 0x00, 0x44, 0x00, 0x38, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08,
1927 0x00, 0x08, 0x00, 0x14, 0x00, 0x14, 0x00, 0x22, 0x00, 0x22, 0x00, 0x7f,
1928 0x00, 0x41, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1929 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x14,
1930 0x00, 0x14, 0x00, 0x22, 0x00, 0x22, 0x00, 0x7f, 0x00, 0x41, 0x80, 0x80,
1931 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x14,
1932 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x14, 0x00, 0x14, 0x00, 0x22,
1933 0x00, 0x22, 0x00, 0x7f, 0x00, 0x41, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
1934 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x08,
1935 0x00, 0x08, 0x00, 0x14, 0x00, 0x14, 0x00, 0x22, 0x00, 0x22, 0x00, 0x7f,
1936 0x00, 0x41, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1937 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x14,
1938 0x00, 0x14, 0x00, 0x22, 0x00, 0x22, 0x00, 0x7f, 0x00, 0x41, 0x80, 0x80,
1939 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x14,
1940 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x14, 0x00, 0x14, 0x00, 0x22,
1941 0x00, 0x22, 0x00, 0x7f, 0x00, 0x41, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
1942 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0f,
1943 0x00, 0x0c, 0x00, 0x14, 0x00, 0x14, 0xe0, 0x27, 0x00, 0x24, 0x00, 0x7c,
1944 0x00, 0x44, 0x00, 0x84, 0xf0, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1945 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x21, 0x80, 0x40,
1946 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x80, 0x40, 0x00, 0x21,
1947 0x00, 0x1e, 0x00, 0x04, 0x00, 0x02, 0x00, 0x0c, 0x00, 0x10, 0x00, 0x08,
1948 0x00, 0x00, 0x00, 0x7f, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x7e,
1949 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x7f, 0x00, 0x00,
1950 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x7f,
1951 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x7e, 0x00, 0x40, 0x00, 0x40,
1952 0x00, 0x40, 0x00, 0x40, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1953 0x00, 0x08, 0x00, 0x14, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x40, 0x00, 0x40,
1954 0x00, 0x40, 0x00, 0x7e, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1955 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00,
1956 0x00, 0x00, 0x00, 0x7f, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x7e,
1957 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x7f, 0x00, 0x00,
1958 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40,
1959 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1960 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1961 0x00, 0x20, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1962 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1963 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0xa0,
1964 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1965 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00,
1966 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
1967 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
1968 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1969 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x42, 0x00, 0x41,
1970 0x00, 0x41, 0x00, 0xf1, 0x00, 0x41, 0x00, 0x41, 0x00, 0x41, 0x00, 0x42,
1971 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x26,
1972 0x00, 0x00, 0x80, 0x40, 0x80, 0x60, 0x80, 0x50, 0x80, 0x50, 0x80, 0x48,
1973 0x80, 0x44, 0x80, 0x42, 0x80, 0x42, 0x80, 0x41, 0x80, 0x40, 0x00, 0x00,
1974 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1e,
1975 0x00, 0x21, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40,
1976 0x80, 0x40, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1977 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x21, 0x80, 0x40,
1978 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x00, 0x21,
1979 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x12,
1980 0x00, 0x00, 0x00, 0x1e, 0x00, 0x21, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40,
1981 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00,
1982 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x26, 0x00, 0x00, 0x00, 0x1e,
1983 0x00, 0x21, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40,
1984 0x80, 0x40, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1985 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x21, 0x80, 0x40,
1986 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x00, 0x21,
1987 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1988 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x28,
1989 0x00, 0x10, 0x00, 0x28, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1990 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1e,
1991 0x00, 0x21, 0x80, 0x42, 0x80, 0x42, 0x80, 0x44, 0x80, 0x48, 0x80, 0x50,
1992 0x80, 0x50, 0x00, 0x21, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1993 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40,
1994 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x00, 0x21,
1995 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08,
1996 0x00, 0x00, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40,
1997 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00,
1998 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x12, 0x00, 0x12, 0x80, 0x40,
1999 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40,
2000 0x80, 0x40, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2001 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40,
2002 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x80, 0x40, 0x00, 0x21,
2003 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08,
2004 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x41, 0x00, 0x22, 0x00, 0x14,
2005 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00,
2006 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
2007 0x00, 0x40, 0x00, 0x7c, 0x00, 0x42, 0x00, 0x41, 0x00, 0x41, 0x00, 0x42,
2008 0x00, 0x7c, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2009 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x42, 0x00, 0x42,
2010 0x00, 0x42, 0x00, 0x5c, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42,
2011 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2012 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x42,
2013 0x00, 0x3e, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x3d, 0x00, 0x00,
2014 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
2015 0x00, 0x10, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x42, 0x00, 0x3e, 0x00, 0x42,
2016 0x00, 0x42, 0x00, 0x42, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2017 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x24, 0x00, 0x00,
2018 0x00, 0x3c, 0x00, 0x42, 0x00, 0x3e, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42,
2019 0x00, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2020 0x00, 0x00, 0x00, 0x32, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x42,
2021 0x00, 0x3e, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x3d, 0x00, 0x00,
2022 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24,
2023 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x42, 0x00, 0x3e, 0x00, 0x42,
2024 0x00, 0x42, 0x00, 0x42, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2025 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x24, 0x00, 0x18, 0x00, 0x00,
2026 0x00, 0x3c, 0x00, 0x42, 0x00, 0x3e, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42,
2027 0x00, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2028 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x3d, 0x10, 0x42,
2029 0x10, 0x3e, 0xf0, 0x43, 0x00, 0x42, 0x10, 0x42, 0xe0, 0x3d, 0x00, 0x00,
2030 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2031 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x42, 0x00, 0x40, 0x00, 0x40,
2032 0x00, 0x40, 0x00, 0x42, 0x00, 0x3c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x18,
2033 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00,
2034 0x00, 0x3c, 0x00, 0x42, 0x00, 0x42, 0x00, 0x7e, 0x00, 0x40, 0x00, 0x42,
2035 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2036 0x00, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x42,
2037 0x00, 0x42, 0x00, 0x7e, 0x00, 0x40, 0x00, 0x42, 0x00, 0x3c, 0x00, 0x00,
2038 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
2039 0x00, 0x24, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x42, 0x00, 0x42, 0x00, 0x7e,
2040 0x00, 0x40, 0x00, 0x42, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2041 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00,
2042 0x00, 0x3c, 0x00, 0x42, 0x00, 0x42, 0x00, 0x7e, 0x00, 0x40, 0x00, 0x42,
2043 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2044 0x00, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40,
2045 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00,
2046 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
2047 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
2048 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2049 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0xa0, 0x00, 0x00,
2050 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
2051 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2052 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40,
2053 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00,
2054 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14,
2055 0x00, 0x08, 0x00, 0x14, 0x00, 0x04, 0x00, 0x3e, 0x00, 0x42, 0x00, 0x42,
2056 0x00, 0x42, 0x00, 0x42, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2057 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x58, 0x00, 0x00,
2058 0x00, 0x58, 0x00, 0x64, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
2059 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2060 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x42,
2061 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x3c, 0x00, 0x00,
2062 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
2063 0x00, 0x10, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42,
2064 0x00, 0x42, 0x00, 0x42, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2065 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x24, 0x00, 0x00,
2066 0x00, 0x3c, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42,
2067 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2068 0x00, 0x00, 0x00, 0x32, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x42,
2069 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x3c, 0x00, 0x00,
2070 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24,
2071 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x42, 0x00, 0x42, 0x00, 0x42,
2072 0x00, 0x42, 0x00, 0x42, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2073 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2074 0x00, 0x10, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
2075 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2076 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x3c, 0x00, 0x46,
2077 0x00, 0x4a, 0x00, 0x4a, 0x00, 0x52, 0x00, 0x62, 0x00, 0x3c, 0x00, 0x40,
2078 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
2079 0x00, 0x10, 0x00, 0x00, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
2080 0x00, 0x44, 0x00, 0x4c, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2081 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x00,
2082 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x4c,
2083 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2084 0x00, 0x00, 0x00, 0x10, 0x00, 0x28, 0x00, 0x00, 0x00, 0x44, 0x00, 0x44,
2085 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x4c, 0x00, 0x34, 0x00, 0x00,
2086 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44,
2087 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44,
2088 0x00, 0x44, 0x00, 0x4c, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2089 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x00,
2090 0x00, 0x82, 0x00, 0x82, 0x00, 0x44, 0x00, 0x44, 0x00, 0x28, 0x00, 0x28,
2091 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
2092 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x5c, 0x00, 0x62,
2093 0x00, 0x42, 0x00, 0x42, 0x00, 0x42, 0x00, 0x62, 0x00, 0x5c, 0x00, 0x40,
2094 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44,
2095 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x82, 0x00, 0x44, 0x00, 0x44,
2096 0x00, 0x28, 0x00, 0x28, 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, 0xc0,
2097 0x03, 0x03, 0x05, 0x07, 0x07, 0x0c, 0x09, 0x03, 0x04, 0x04, 0x05, 0x07,
2098 0x03, 0x04, 0x03, 0x04, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
2099 0x07, 0x07, 0x03, 0x03, 0x07, 0x07, 0x07, 0x07, 0x0e, 0x09, 0x09, 0x09,
2100 0x0a, 0x09, 0x08, 0x0a, 0x0a, 0x03, 0x07, 0x08, 0x07, 0x0b, 0x0a, 0x0a,
2101 0x09, 0x0a, 0x0a, 0x09, 0x09, 0x0a, 0x09, 0x0d, 0x08, 0x09, 0x08, 0x04,
2102 0x04, 0x04, 0x07, 0x07, 0x04, 0x08, 0x08, 0x07, 0x08, 0x08, 0x03, 0x08,
2103 0x07, 0x03, 0x03, 0x07, 0x03, 0x0b, 0x07, 0x08, 0x08, 0x08, 0x04, 0x07,
2104 0x03, 0x07, 0x07, 0x09, 0x06, 0x07, 0x06, 0x05, 0x03, 0x05, 0x09, 0x00,
2105 0x03, 0x03, 0x07, 0x07, 0x07, 0x07, 0x03, 0x07, 0x04, 0x08, 0x05, 0x07,
2106 0x07, 0x04, 0x08, 0x07, 0x04, 0x07, 0x04, 0x04, 0x04, 0x07, 0x07, 0x03,
2107 0x04, 0x04, 0x05, 0x07, 0x09, 0x09, 0x09, 0x07, 0x09, 0x09, 0x09, 0x09,
2108 0x09, 0x09, 0x0d, 0x09, 0x09, 0x09, 0x09, 0x09, 0x03, 0x03, 0x03, 0x03,
2109 0x09, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x07, 0x0a, 0x0a, 0x0a, 0x0a,
2110 0x0a, 0x09, 0x09, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x0d, 0x07,
2111 0x08, 0x08, 0x08, 0x08, 0x03, 0x03, 0x03, 0x03, 0x08, 0x07, 0x08, 0x08,
2112 0x08, 0x08, 0x08, 0x07, 0x08, 0x07, 0x07, 0x07, 0x07, 0x07, 0x08, 0x07,
2113 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80,
2114 0x00, 0x80, 0x00, 0x00, 0xa0, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2115 0x50, 0xf8, 0x50, 0xf8, 0x50, 0x00, 0x00, 0x00, 0x20, 0xf8, 0xa0, 0xf8,
2116 0x28, 0xf8, 0x20, 0x00, 0x90, 0x10, 0x20, 0x40, 0x80, 0x90, 0x00, 0x00,
2117 0x40, 0xa0, 0x40, 0xa8, 0x90, 0x68, 0x00, 0x00, 0x40, 0x40, 0x80, 0x00,
2118 0x00, 0x00, 0x00, 0x00, 0x20, 0x40, 0x80, 0x80, 0x80, 0x40, 0x20, 0x00,
2119 0x80, 0x40, 0x20, 0x20, 0x20, 0x40, 0x80, 0x00, 0x00, 0x90, 0x60, 0xf0,
2120 0x60, 0x90, 0x00, 0x00, 0x00, 0x20, 0x20, 0xf8, 0x20, 0x20, 0x00, 0x00,
2121 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0xf0,
2122 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
2123 0x10, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x60, 0x90, 0x90, 0x90,
2124 0x90, 0x60, 0x00, 0x00, 0x40, 0xc0, 0x40, 0x40, 0x40, 0xe0, 0x00, 0x00,
2125 0x60, 0x90, 0x20, 0x40, 0x80, 0xf0, 0x00, 0x00, 0x60, 0x90, 0x20, 0x10,
2126 0x90, 0x60, 0x00, 0x00, 0xa0, 0xa0, 0xf0, 0x20, 0x20, 0x20, 0x00, 0x00,
2127 0xf0, 0x80, 0xe0, 0x10, 0x10, 0xe0, 0x00, 0x00, 0x70, 0x80, 0xe0, 0x90,
2128 0x90, 0x60, 0x00, 0x00, 0xf0, 0x10, 0x20, 0x40, 0x40, 0x40, 0x00, 0x00,
2129 0x60, 0x90, 0x60, 0x90, 0x90, 0x60, 0x00, 0x00, 0x60, 0x90, 0x90, 0x70,
2130 0x10, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00,
2131 0x00, 0x00, 0x40, 0x00, 0x40, 0x40, 0x80, 0x00, 0x00, 0x20, 0x40, 0x80,
2132 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0x00, 0x00,
2133 0x00, 0x80, 0x40, 0x20, 0x40, 0x80, 0x00, 0x00, 0x70, 0x88, 0x10, 0x20,
2134 0x00, 0x20, 0x00, 0x00, 0x60, 0x90, 0xb0, 0xb0, 0x80, 0x70, 0x00, 0x00,
2135 0x60, 0x90, 0x90, 0xf0, 0x90, 0x90, 0x00, 0x00, 0xe0, 0x90, 0xe0, 0x90,
2136 0x90, 0xe0, 0x00, 0x00, 0x70, 0x80, 0x80, 0x80, 0x80, 0x70, 0x00, 0x00,
2137 0xe0, 0x90, 0x90, 0x90, 0x90, 0xe0, 0x00, 0x00, 0xf0, 0x80, 0xe0, 0x80,
2138 0x80, 0xf0, 0x00, 0x00, 0xf0, 0x80, 0xe0, 0x80, 0x80, 0x80, 0x00, 0x00,
2139 0x70, 0x80, 0x80, 0xb0, 0x90, 0x70, 0x00, 0x00, 0x90, 0x90, 0x90, 0xf0,
2140 0x90, 0x90, 0x00, 0x00, 0xe0, 0x40, 0x40, 0x40, 0x40, 0xe0, 0x00, 0x00,
2141 0x10, 0x10, 0x10, 0x10, 0x90, 0x60, 0x00, 0x00, 0x90, 0xa0, 0xc0, 0xa0,
2142 0x90, 0x90, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0xf0, 0x00, 0x00,
2143 0x88, 0xd8, 0xa8, 0x88, 0x88, 0x88, 0x00, 0x00, 0x90, 0xd0, 0xb0, 0x90,
2144 0x90, 0x90, 0x00, 0x00, 0x60, 0x90, 0x90, 0x90, 0x90, 0x60, 0x00, 0x00,
2145 0xe0, 0x90, 0x90, 0xe0, 0x80, 0x80, 0x00, 0x00, 0x60, 0x90, 0x90, 0x90,
2146 0xb0, 0x70, 0x18, 0x00, 0xe0, 0x90, 0x90, 0xe0, 0xc0, 0xb0, 0x00, 0x00,
2147 0x70, 0x80, 0x60, 0x10, 0x90, 0x60, 0x00, 0x00, 0xf8, 0x20, 0x20, 0x20,
2148 0x20, 0x20, 0x00, 0x00, 0x90, 0x90, 0x90, 0x90, 0x90, 0x60, 0x00, 0x00,
2149 0x88, 0x88, 0x88, 0x50, 0x50, 0x20, 0x00, 0x00, 0x88, 0x88, 0x88, 0xa8,
2150 0xd8, 0x88, 0x00, 0x00, 0x88, 0x50, 0x20, 0x20, 0x50, 0x88, 0x00, 0x00,
2151 0x88, 0x88, 0x50, 0x20, 0x20, 0x20, 0x00, 0x00, 0xf0, 0x10, 0x20, 0x40,
2152 0x80, 0xf0, 0x00, 0x00, 0xc0, 0x80, 0x80, 0x80, 0x80, 0xc0, 0x00, 0x00,
2153 0x80, 0x80, 0x40, 0x20, 0x10, 0x10, 0x00, 0x00, 0xc0, 0x40, 0x40, 0x40,
2154 0x40, 0xc0, 0x00, 0x00, 0x20, 0x50, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00,
2155 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x80, 0x80, 0x40, 0x00,
2156 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x20, 0xe0, 0xa0, 0xe0, 0x00, 0x00,
2157 0x80, 0xe0, 0xa0, 0xa0, 0xa0, 0xe0, 0x00, 0x00, 0x00, 0xe0, 0x80, 0x80,
2158 0x80, 0xe0, 0x00, 0x00, 0x20, 0xe0, 0xa0, 0xa0, 0xa0, 0xe0, 0x00, 0x00,
2159 0x00, 0xe0, 0xa0, 0xe0, 0x80, 0xe0, 0x00, 0x00, 0x60, 0x40, 0xe0, 0x40,
2160 0x40, 0x40, 0x00, 0x00, 0x00, 0xe0, 0xa0, 0xa0, 0xa0, 0xe0, 0x20, 0xe0,
2161 0x80, 0xe0, 0xa0, 0xa0, 0xa0, 0xa0, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80,
2162 0x80, 0x80, 0x00, 0x00, 0x40, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0,
2163 0x80, 0xa0, 0xa0, 0xc0, 0xa0, 0xa0, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80,
2164 0x80, 0x80, 0x00, 0x00, 0x00, 0xf8, 0xa8, 0xa8, 0xa8, 0xa8, 0x00, 0x00,
2165 0x00, 0xe0, 0xa0, 0xa0, 0xa0, 0xa0, 0x00, 0x00, 0x00, 0xe0, 0xa0, 0xa0,
2166 0xa0, 0xe0, 0x00, 0x00, 0x00, 0xe0, 0xa0, 0xa0, 0xa0, 0xe0, 0x80, 0x80,
2167 0x00, 0xe0, 0xa0, 0xa0, 0xa0, 0xe0, 0x20, 0x20, 0x00, 0xe0, 0x80, 0x80,
2168 0x80, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x80, 0xe0, 0x20, 0xe0, 0x00, 0x00,
2169 0x40, 0xe0, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0xa0, 0xa0, 0xa0,
2170 0xa0, 0xe0, 0x00, 0x00, 0x00, 0xa0, 0xa0, 0xa0, 0xa0, 0x40, 0x00, 0x00,
2171 0x00, 0xa8, 0xa8, 0xa8, 0xa8, 0xf8, 0x00, 0x00, 0x00, 0xa0, 0xa0, 0x40,
2172 0xa0, 0xa0, 0x00, 0x00, 0x00, 0xa0, 0xa0, 0xa0, 0xa0, 0xe0, 0x20, 0xe0,
2173 0x00, 0xe0, 0x20, 0x40, 0x80, 0xe0, 0x00, 0x00, 0x20, 0x40, 0x40, 0x80,
2174 0x40, 0x40, 0x20, 0x00, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x00,
2175 0x80, 0x40, 0x40, 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x40, 0xa8,
2176 0x10, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2177 0x04, 0x02, 0x04, 0x06, 0x06, 0x05, 0x06, 0x03, 0x04, 0x04, 0x05, 0x06,
2178 0x03, 0x05, 0x02, 0x05, 0x05, 0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
2179 0x05, 0x05, 0x02, 0x03, 0x04, 0x05, 0x04, 0x06, 0x05, 0x05, 0x05, 0x05,
2180 0x05, 0x05, 0x05, 0x05, 0x05, 0x04, 0x05, 0x05, 0x05, 0x06, 0x05, 0x05,
2181 0x05, 0x06, 0x05, 0x05, 0x06, 0x05, 0x06, 0x06, 0x06, 0x06, 0x05, 0x03,
2182 0x05, 0x03, 0x06, 0x05, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
2183 0x04, 0x02, 0x03, 0x04, 0x02, 0x06, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
2184 0x04, 0x04, 0x04, 0x06, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x06, 0x00,
2185 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x70, 0xff,
2186 0x70, 0x30, 0x00, 0x00, 0x00, 0x0c, 0x0e, 0xff, 0x0e, 0x0c, 0x00, 0x00,
2187 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x40, 0x20, 0x10,
2188 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2189 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
2190 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
2191 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0xff,
2192 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x08, 0x08, 0x08,
2193 0x08, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x08, 0x08, 0x10, 0x10, 0x10, 0x10,
2194 0xf0, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f, 0x00, 0x00, 0x00,
2195 0x00, 0x00, 0x00, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0xf8,
2196 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0xf8, 0x00, 0x00, 0x00,
2197 0x10, 0x10, 0x10, 0x10, 0x1f, 0x20, 0x40, 0x80, 0x80, 0x40, 0x20, 0x1f,
2198 0x10, 0x10, 0x10, 0x10, 0x01, 0x02, 0x04, 0xf8, 0x08, 0x08, 0x08, 0x08,
2199 0x08, 0x08, 0x08, 0x08, 0xf8, 0x04, 0x02, 0x01, 0xff, 0xff, 0xff, 0xff,
2200 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
2201 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf8, 0xf8, 0xf8,
2202 0xf8, 0xf8, 0xf8, 0xf8, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f,
2203 0x08, 0x08, 0x08, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2204 0xff, 0x08, 0x08, 0x08, 0xf8, 0xf8, 0xf8, 0xf8, 0xff, 0xf8, 0xf8, 0xf8,
2205 0x1f, 0x1f, 0x1f, 0x1f, 0xff, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f,
2206 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f,
2207 0x00, 0x00, 0x00, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8,
2208 0xf8, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x20, 0x40, 0x80,
2209 0x80, 0x40, 0x20, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x01, 0x02, 0x04, 0xf8,
2210 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0x04, 0x02, 0x01,
2211 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2212 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
2213 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
2214 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
2215 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x01, 0x01, 0x01, 0x01,
2216 0x01, 0x01, 0x01, 0x01, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00,
2217 0x00, 0xff, 0x80, 0x80, 0x80, 0x80, 0xff, 0x00, 0x00, 0xff, 0xc0, 0xc0,
2218 0xc0, 0xc0, 0xff, 0x00, 0x00, 0xff, 0xe0, 0xe0, 0xe0, 0xe0, 0xff, 0x00,
2219 0x00, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0x00, 0x00, 0xff, 0xf8, 0xf8,
2220 0xf8, 0xf8, 0xff, 0x00, 0x00, 0xff, 0xfc, 0xfc, 0xfc, 0xfc, 0xff, 0x00,
2221 0x00, 0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff,
2222 0xff, 0xff, 0xff, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00,
2223 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x81, 0x42, 0x24, 0x18,
2224 0x18, 0x24, 0x42, 0x81, 0x08, 0x08, 0x08, 0x08, 0xff, 0x08, 0x08, 0x08,
2225 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18,
2226 0x18, 0x7e, 0x3c, 0x18, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x7e, 0x3c, 0x18,
2227 0xff, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xff, 0x00, 0x3c, 0x66, 0x06,
2228 0x18, 0x00, 0x18, 0x00, 0x63, 0x76, 0x5c, 0x60, 0x78, 0x66, 0x60, 0x00,
2229 0x78, 0x6e, 0x63, 0x7c, 0x63, 0x6e, 0x78, 0x00, 0x00, 0x1e, 0x1b, 0x18,
2230 0x18, 0xd8, 0x78, 0x00, 0x63, 0x63, 0x77, 0x49, 0x77, 0x63, 0x63, 0x00,
2231 0x63, 0x77, 0x6b, 0x6b, 0x63, 0x63, 0x63, 0x00, 0x49, 0x52, 0x64, 0x68,
2232 0x70, 0x60, 0x60, 0x00, 0x00, 0x63, 0x36, 0x1c, 0x1c, 0x36, 0x63, 0x00,
2233 0x63, 0x53, 0x4f, 0x63, 0x79, 0x65, 0x63, 0x00, 0x30, 0x30, 0x30, 0x30,
2234 0x30, 0x30, 0x30, 0x00, 0x18, 0x18, 0x7e, 0x99, 0x7e, 0x18, 0x18, 0x00,
2235 0x60, 0x60, 0x78, 0x6c, 0x67, 0x63, 0x63, 0x00, 0x38, 0x3c, 0x36, 0x30,
2236 0x30, 0x30, 0x30, 0x00, 0x77, 0x6b, 0x77, 0x63, 0x63, 0x63, 0x63, 0x00,
2237 0x18, 0xd8, 0x78, 0x3c, 0x1e, 0x1b, 0x18, 0x00, 0x71, 0x6a, 0x64, 0x71,
2238 0x6a, 0x64, 0x60, 0x00, 0x60, 0x60, 0x63, 0x67, 0x6f, 0x7b, 0x73, 0x00,
2239 0x18, 0x18, 0x18, 0x18, 0x3c, 0x5a, 0xdb, 0x00, 0x7c, 0x63, 0x63, 0x7c,
2240 0x66, 0x63, 0x63, 0x00, 0x60, 0x63, 0x67, 0x6f, 0x7b, 0x73, 0x03, 0x00,
2241 0x18, 0x3c, 0x5a, 0x99, 0x18, 0x18, 0x18, 0x00, 0x70, 0x78, 0x6c, 0x66,
2242 0x63, 0x63, 0x63, 0x00, 0x7e, 0x03, 0x7e, 0x03, 0x03, 0x03, 0x7c, 0x00,
2243 0x70, 0x6c, 0x63, 0x6c, 0x78, 0x60, 0x60, 0x00, 0xdb, 0x5a, 0x3c, 0x18,
2244 0x18, 0x18, 0x18, 0x00, 0x78, 0x64, 0x52, 0x49, 0x4f, 0x49, 0x49, 0x00,
2245 0x60, 0x63, 0x66, 0x6c, 0x78, 0x60, 0x60, 0x00, 0xe7, 0xc3, 0x81, 0xe7,
2246 0xe7, 0xe7, 0xe7, 0xff, 0xff, 0xe7, 0xe7, 0xe7, 0xe7, 0x81, 0xc3, 0xe7,
2247 0xe7, 0xc3, 0x81, 0xe7, 0xe7, 0x81, 0xc3, 0xe7, 0xff, 0xc3, 0x99, 0xf9,
2248 0xe7, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
2249 };
0 /* blorblib.c: Blorb file reader library, version 1.0.2.
1 Designed by Andrew Plotkin <erkyrath@eblong.com>
2 http://www.eblong.com/zarf/blorb/index.html
3
4 This is portable code to read a Blorb file. Add it to your
5 interpreter, #include "blorb.h", and you're ready to go.
6 */
7
8
9 #include <stdio.h>
10 #include <stdlib.h>
11 #include "frotz.h"
12
13 #ifndef NO_BLORB
14
15 #include "blorb.h"
16 #include "blorblow.h"
17
18 #define bb_native2(v) \
19 ( (((uint16)(v) >> 8) & 0x00ff) \
20 | (((uint16)(v) << 8) & 0xff00))
21 #define bb_native4(v) \
22 ( (((uint32)(v) >> 24) & 0x000000ff) \
23 | (((uint32)(v) >> 8) & 0x0000ff00) \
24 | (((uint32)(v) << 8) & 0x00ff0000) \
25 | (((uint32)(v) << 24) & 0xff000000))
26
27 static int lib_inited = FALSE;
28
29 static bb_err_t bb_initialize_map(bb_map_t * map);
30 static bb_err_t bb_initialize(void);
31 static int sortsplot(const void *p1, const void *p2);
32
33 /* Do some one-time startup tests. */
34 static bb_err_t bb_initialize()
35 {
36 union {
37 uint32 val;
38 unsigned char ch[4];
39 } test;
40 uint32 val;
41
42 // if (sizeof(uint32) != 4 || sizeof(uint16) != 2)
43 // return bb_err_CompileTime; /* Basic types are the wrong size. */
44
45 test.ch[0] = 0x13;
46 test.ch[1] = 0x57;
47 test.ch[2] = 0x9a;
48 test.ch[3] = 0xce;
49 val = test.val;
50 if (bb_native4(val) != 0x13579ace)
51 return bb_err_CompileTime; /* Wrong endianness. */
52
53 return bb_err_None;
54 } /* bb_initialize */
55
56
57 bb_err_t bb_create_map(FILE * file, bb_map_t ** newmap)
58 {
59 bb_err_t err;
60 bb_map_t *map;
61 size_t readlen;
62 uint32 nextpos, totallength;
63 bb_chunkdesc_t *chunks;
64 int chunks_size, numchunks;
65 uint32 buffer[4];
66
67 *newmap = NULL;
68
69 if (!lib_inited) {
70 err = bb_initialize();
71 if (err)
72 return err;
73 lib_inited = TRUE;
74 }
75
76 /* First, chew through the file and index the chunks. */
77
78 err = fseek(file, 0, 0);
79 if (err)
80 return bb_err_Read;
81
82 /* FIXME. Under 16-bit DOS, this fails.
83 * From the following url: "'unsigned long' variables don't work in
84 * 16-bit mode." How do I get around this?
85 * http://www.digitalmars.com/d/archives/c++/dos/16-bits/45.html
86 */
87 readlen = fread(buffer, sizeof(uint32), 3, file);
88 if (readlen != 3)
89 return bb_err_Read;
90
91 if (bb_native4(buffer[0]) != bb_ID_FORM)
92 return bb_err_Format;
93 if (bb_native4(buffer[2]) != bb_ID_IFRS)
94 return bb_err_Format;
95
96 totallength = bb_native4(buffer[1]) + 8;
97 nextpos = 12;
98
99 chunks_size = 8;
100 numchunks = 0;
101 chunks =
102 (bb_chunkdesc_t *) malloc(sizeof(bb_chunkdesc_t) * chunks_size);
103
104 while (nextpos < totallength) {
105 uint32 type, len;
106 int chunum;
107 bb_chunkdesc_t *chu;
108
109 err = fseek(file, nextpos, 0);
110 if (err)
111 return bb_err_Read;
112
113 readlen = fread(buffer, sizeof(uint32), 2, file);
114 if (readlen != 2)
115 return bb_err_Read;
116
117 type = bb_native4(buffer[0]);
118 len = bb_native4(buffer[1]);
119
120 if (numchunks >= chunks_size) {
121 chunks_size *= 2;
122 chunks = (bb_chunkdesc_t *) realloc(chunks,
123 sizeof
124 (bb_chunkdesc_t) *
125 chunks_size);
126 }
127
128 chunum = numchunks;
129 chu = &(chunks[chunum]);
130 numchunks++;
131
132 chu->type = type;
133 chu->startpos = nextpos;
134 if (type == bb_ID_FORM) {
135 chu->datpos = nextpos;
136 chu->len = len + 8;
137 } else {
138 chu->datpos = nextpos + 8;
139 chu->len = len;
140 }
141 chu->ptr = NULL;
142 chu->auxdatnum = -1;
143
144 nextpos = nextpos + len + 8;
145 if (nextpos & 1)
146 nextpos++;
147
148 if (nextpos > totallength)
149 return bb_err_Format;
150 }
151
152 /* The basic IFF structure seems to be ok, and we have a list of
153 chunks. Now we allocate the map structure itself. */
154
155 map = (bb_map_t *) malloc(sizeof(bb_map_t));
156 if (!map) {
157 free(chunks);
158 return bb_err_Alloc;
159 }
160
161 map->inited = bb_Inited_Magic;
162 map->file = file;
163 map->chunks = chunks;
164 map->numchunks = numchunks;
165 map->resources = NULL;
166 map->ressorted = NULL;
167 map->numresources = 0;
168 map->releasenum = 0;
169 map->zheader = NULL;
170 map->resolution = NULL;
171 map->palettechunk = -1;
172 map->palette = NULL;
173 map->auxsound = NULL;
174 map->auxpict = NULL;
175
176 /* Now we do everything else involved in loading the Blorb file,
177 such as building resource lists. */
178
179 err = bb_initialize_map(map);
180 if (err) {
181 bb_destroy_map(map);
182 return err;
183 }
184
185 *newmap = map;
186 return bb_err_None;
187 } /* bb_create_map */
188
189
190 static bb_err_t bb_initialize_map(bb_map_t * map)
191 {
192 /* It is important that the map structure be kept valid during this
193 function. If this returns an error, bb_destroy_map() will be called. */
194
195 int ix, jx;
196 bb_result_t chunkres;
197 bb_err_t err;
198 uint32 *ptr;
199 uint32 len;
200 uint32 val;
201 int numres;
202 int gotindex = FALSE;
203
204 for (ix = 0; ix < map->numchunks; ix++) {
205 bb_chunkdesc_t *chu = &map->chunks[ix];
206
207 switch (chu->type) {
208
209 case bb_ID_RIdx:
210 /* Resource index chunk: build the resource list and sort it. */
211
212 if (gotindex)
213 return bb_err_Format; /* duplicate index chunk */
214 err = bb_load_chunk_by_number(map, bb_method_Memory,
215 &chunkres, ix);
216 if (err)
217 return err;
218
219 ptr = chunkres.data.ptr;
220 len = chunkres.length;
221 val = ptr[0];
222 numres = bb_native4(val);
223
224 if (numres) {
225 int ix2;
226 bb_resdesc_t *resources;
227 bb_resdesc_t **ressorted;
228
229 if (len != numres * 12 + 4)
230 return bb_err_Format; /* bad length field */
231
232 resources =
233 (bb_resdesc_t *) malloc(numres *
234 sizeof
235 (bb_resdesc_t));
236 ressorted =
237 (bb_resdesc_t **) malloc(numres *
238 sizeof(bb_resdesc_t
239 *));
240 if (!ressorted || !resources)
241 return bb_err_Alloc;
242
243 ix2 = 0;
244 for (jx = 0; jx < numres; jx++) {
245 bb_resdesc_t *res = &(resources[jx]);
246 uint32 respos;
247
248 val = ptr[1 + jx * 3];
249 res->usage = bb_native4(val);
250 val = ptr[2 + jx * 3];
251 res->resnum = bb_native4(val);
252 val = ptr[3 + jx * 3];
253 respos = bb_native4(val);
254
255 while (ix2 < map->numchunks
256 && map->chunks[ix2].startpos <
257 respos)
258 ix2++;
259
260 if (ix2 >= map->numchunks
261 || map->chunks[ix2].startpos !=
262 respos)
263 return bb_err_Format; /* start pos does not match a real chunk */
264
265 res->chunknum = ix2;
266
267 ressorted[jx] = res;
268 }
269
270 /* Sort a resource list (actually a list of pointers to structures
271 in map->resources.) This makes it easy to find resources by
272 usage and resource number. */
273 qsort(ressorted, numres, sizeof(bb_resdesc_t *),
274 &sortsplot);
275
276 map->numresources = numres;
277 map->resources = resources;
278 map->ressorted = ressorted;
279 }
280
281 bb_unload_chunk(map, ix);
282 gotindex = TRUE;
283 break;
284
285 case bb_ID_RelN:
286 /* Release number chunk: Get the release number. */
287
288 err = bb_load_chunk_by_number(map, bb_method_Memory,
289 &chunkres, ix);
290 if (err)
291 return err;
292
293 if (chunkres.length != 2)
294 return bb_err_Format;
295
296 {
297 uint16 val = *((uint16 *) chunkres.data.ptr);
298 map->releasenum = bb_native2(val);
299 }
300
301 bb_unload_chunk(map, ix);
302 break;
303
304 case bb_ID_IFhd:
305 /* Z-header chunk: Get the header info. */
306
307 err = bb_load_chunk_by_number(map, bb_method_Memory,
308 &chunkres, ix);
309 if (err)
310 return err;
311
312 if (chunkres.length < 13)
313 return bb_err_Format;
314
315 {
316 uint16 val;
317 bb_zheader_t *head =
318 (bb_zheader_t *)
319 malloc(sizeof(bb_zheader_t));
320 if (!head)
321 return bb_err_Alloc;
322
323 val = ((uint16 *) (chunkres.data.ptr))[0];
324 head->releasenum = bb_native2(val);
325
326 val = ((uint16 *) (chunkres.data.ptr))[4];
327 head->checksum = bb_native2(val);
328
329 for (jx = 0; jx < 6; jx++) {
330 head->serialnum[jx] =
331 ((char *)(chunkres.data.ptr))[2 +
332 jx];
333 }
334
335 map->zheader = head;
336 }
337
338 bb_unload_chunk(map, ix);
339 break;
340
341 case bb_ID_Reso:
342 /* Resolution chunk: Get the window size data, and resolution
343 ratios for images. */
344
345 err = bb_load_chunk_by_number(map, bb_method_Memory,
346 &chunkres, ix);
347 if (err)
348 return err;
349
350 if (chunkres.length < 24)
351 return bb_err_Format;
352
353 ptr = chunkres.data.ptr;
354 len = chunkres.length;
355
356 {
357 bb_resolution_t *reso =
358 (bb_resolution_t *)
359 malloc(sizeof(bb_resolution_t));
360 if (!reso)
361 return bb_err_Alloc;
362
363 reso->px = bb_native4(ptr[0]);
364 reso->py = bb_native4(ptr[1]);
365 reso->minx = bb_native4(ptr[2]);
366 reso->miny = bb_native4(ptr[3]);
367 reso->maxx = bb_native4(ptr[4]);
368 reso->maxy = bb_native4(ptr[5]);
369
370 map->resolution = reso;
371 }
372
373 ptr += 6;
374 len -= 6 * 4;
375
376 len = len / 28;
377
378 if (len) {
379 bb_aux_pict_t *aux =
380 (bb_aux_pict_t *) malloc(len *
381 sizeof
382 (bb_aux_pict_t));
383
384 for (jx = 0; jx < len; jx++, ptr += 7) {
385 bb_result_t res;
386
387 err =
388 bb_load_resource(map,
389 bb_method_DontLoad,
390 &res, bb_ID_Pict,
391 bb_native4(ptr
392 [0]));
393 if (!err) {
394 bb_chunkdesc_t *chu =
395 &(map->
396 chunks[res.chunknum]);
397 if (chu->auxdatnum != -1)
398 return bb_err_Format; /* two image entries for this resource */
399 chu->auxdatnum = jx;
400 aux[jx].ratnum =
401 bb_native4(ptr[1]);
402 aux[jx].ratden =
403 bb_native4(ptr[2]);
404 aux[jx].minnum =
405 bb_native4(ptr[3]);
406 aux[jx].minden =
407 bb_native4(ptr[4]);
408 aux[jx].maxnum =
409 bb_native4(ptr[5]);
410 aux[jx].maxden =
411 bb_native4(ptr[6]);
412 }
413 }
414
415 map->auxpict = aux;
416 }
417
418 bb_unload_chunk(map, ix);
419 break;
420
421 case bb_ID_Loop:
422 /* Looping chunk: Get looping data for sounds. */
423
424 err = bb_load_chunk_by_number(map, bb_method_Memory,
425 &chunkres, ix);
426 if (err)
427 return err;
428
429 ptr = chunkres.data.ptr;
430 len = chunkres.length;
431
432 len = len / 8;
433
434 if (len) {
435 bb_aux_sound_t *aux =
436 (bb_aux_sound_t *) malloc(len *
437 sizeof
438 (bb_aux_sound_t));
439
440 for (jx = 0; jx < len; jx++, ptr += 2) {
441 bb_result_t res;
442
443 err =
444 bb_load_resource(map,
445 bb_method_DontLoad,
446 &res, bb_ID_Snd,
447 bb_native4(ptr
448 [0]));
449 if (!err) {
450 bb_chunkdesc_t *chu =
451 &(map->
452 chunks[res.chunknum]);
453 if (chu->auxdatnum != -1)
454 return bb_err_Format; /* two looping entries for this resource */
455 chu->auxdatnum = jx;
456 aux[jx].repeats =
457 bb_native4(ptr[1]);
458 }
459 }
460
461 map->auxsound = aux;
462 }
463
464 bb_unload_chunk(map, ix);
465 break;
466
467 case bb_ID_Plte:
468 /* Palette chunk: Don't get the palette info now, since it may
469 be large and the interpreter may not care. But remember
470 the chunk number in case the interpreter asks later. */
471
472 map->palettechunk = ix;
473 break;
474 }
475 }
476
477 return bb_err_None;
478 } /* bb_initialize_map */
479
480
481 bb_err_t bb_destroy_map(bb_map_t * map)
482 {
483 int ix;
484
485 if (!map || !map->chunks || map->inited != bb_Inited_Magic)
486 return bb_err_NotAMap;
487
488 for (ix = 0; ix < map->numchunks; ix++) {
489 bb_chunkdesc_t *chu = &(map->chunks[ix]);
490 if (chu->ptr) {
491 free(chu->ptr);
492 chu->ptr = NULL;
493 }
494 }
495
496 if (map->chunks) {
497 free(map->chunks);
498 map->chunks = NULL;
499 }
500
501 map->numchunks = 0;
502
503 if (map->resources) {
504 free(map->resources);
505 map->resources = NULL;
506 }
507
508 if (map->ressorted) {
509 free(map->ressorted);
510 map->ressorted = NULL;
511 }
512
513 map->numresources = 0;
514
515 if (map->zheader) {
516 free(map->zheader);
517 map->zheader = NULL;
518 }
519
520 if (map->resolution) {
521 free(map->resolution);
522 map->resolution = NULL;
523 }
524
525 if (map->palette) {
526 if (!map->palette->isdirect && map->palette->data.table.colors) {
527 free(map->palette->data.table.colors);
528 map->palette->data.table.colors = NULL;
529 }
530 free(map->palette);
531 map->palette = NULL;
532 }
533
534 if (map->auxsound) {
535 free(map->auxsound);
536 map->auxsound = NULL;
537 }
538
539 if (map->auxpict) {
540 free(map->auxpict);
541 map->auxpict = NULL;
542 }
543
544 map->file = NULL;
545 map->inited = 0;
546
547 free(map);
548
549 return bb_err_None;
550 } /* bb_destroy_map */
551
552
553 /* Turn a four-byte constant into a string. This returns a static buffer,
554 so if you call it twice, the old value gets overwritten. */
555 char *bb_id_to_string(uint32 id)
556 {
557 static char buf[5];
558 buf[0] = (id >> 24) & 0xff;
559 buf[1] = (id >> 16) & 0xff;
560 buf[2] = (id >> 8) & 0xff;
561 buf[3] = (id) & 0xff;
562 buf[4] = '\0';
563 return buf;
564 }
565
566
567 /* Turn an error code into a string describing the error. */
568 char *bb_err_to_string(bb_err_t err)
569 {
570 switch (err) {
571 case bb_err_None:
572 return "ok";
573 case bb_err_CompileTime:
574 return "library compiled wrong";
575 case bb_err_Alloc:
576 return "cannot allocate memory";
577 case bb_err_Read:
578 return "cannot read from file";
579 case bb_err_NotAMap:
580 return "map structure is bad";
581 case bb_err_Format:
582 return "bad format in Blorb file";
583 case bb_err_NotFound:
584 return "data not found";
585 default:
586 return "unknown error";
587 }
588 }
589
590
591 /* This is used for binary searching and quicksorting the resource pointer list. */
592 static int sortsplot(const void *p1, const void *p2)
593 {
594 bb_resdesc_t *v1 = *(bb_resdesc_t **) p1;
595 bb_resdesc_t *v2 = *(bb_resdesc_t **) p2;
596 if (v1->usage < v2->usage)
597 return -1;
598 if (v1->usage > v2->usage)
599 return 1;
600 return v1->resnum - v2->resnum;
601 }
602
603
604 bb_err_t bb_load_chunk_by_type(bb_map_t * map, int method, bb_result_t * res,
605 uint32 type, int count)
606 {
607 int ix;
608
609 for (ix = 0; ix < map->numchunks; ix++) {
610 if (map->chunks[ix].type == type) {
611 if (count == 0)
612 break;
613 count--;
614 }
615 }
616
617 if (ix >= map->numchunks) {
618 return bb_err_NotFound;
619 }
620
621 return bb_load_chunk_by_number(map, method, res, ix);
622 }
623
624
625 bb_err_t bb_load_chunk_by_number(bb_map_t * map, int method, bb_result_t * res,
626 int chunknum)
627 {
628 bb_chunkdesc_t *chu;
629
630 if (chunknum < 0 || chunknum >= map->numchunks)
631 return bb_err_NotFound;
632
633 chu = &(map->chunks[chunknum]);
634
635 switch (method) {
636
637 case bb_method_DontLoad:
638 /* do nothing */
639 break;
640
641 case bb_method_FilePos:
642 res->data.startpos = chu->datpos;
643 break;
644
645 case bb_method_Memory:
646 if (!chu->ptr) {
647 bb_err_t err;
648 size_t readlen;
649 void *dat = malloc(chu->len);
650
651 if (!dat)
652 return bb_err_Alloc;
653
654 err = fseek(map->file, chu->datpos, 0);
655 if (err)
656 return bb_err_Read;
657
658 readlen = fread(dat, 1, chu->len, map->file);
659 if (readlen != chu->len)
660 return bb_err_Read;
661
662 chu->ptr = dat;
663 }
664 res->data.ptr = chu->ptr;
665 break;
666 }
667
668 res->chunknum = chunknum;
669 res->length = chu->len;
670
671 return bb_err_None;
672 } /* bb_load_chunk_by_number */
673
674
675 bb_err_t bb_load_resource(bb_map_t * map, int method, bb_result_t * res,
676 uint32 usage, int resnum)
677 {
678 bb_resdesc_t sample;
679 bb_resdesc_t *ptr;
680 bb_resdesc_t **found;
681
682 sample.usage = usage;
683 sample.resnum = resnum;
684 ptr = &sample;
685
686 found =
687 bsearch(&ptr, map->ressorted, map->numresources,
688 sizeof(bb_resdesc_t *), &sortsplot);
689
690 if (!found)
691 return bb_err_NotFound;
692
693 return bb_load_chunk_by_number(map, method, res, (*found)->chunknum);
694 } /* bb_load_resource */
695
696
697 bb_err_t bb_unload_chunk(bb_map_t * map, int chunknum)
698 {
699 bb_chunkdesc_t *chu;
700
701 if (chunknum < 0 || chunknum >= map->numchunks)
702 return bb_err_NotFound;
703
704 chu = &(map->chunks[chunknum]);
705
706 if (chu->ptr) {
707 free(chu->ptr);
708 chu->ptr = NULL;
709 }
710
711 return bb_err_None;
712 } /* bb_unload_chunk */
713
714
715 bb_err_t bb_count_resources(bb_map_t * map, uint32 usage,
716 int *num, int *min, int *max)
717 {
718 int ix;
719 int count, minval, maxval, val;
720
721 count = 0;
722 minval = 0;
723 maxval = 0;
724
725 for (ix = 0; ix < map->numresources; ix++) {
726 if (map->resources[ix].usage == usage) {
727 val = map->resources[ix].resnum;
728 if (count == 0) {
729 count++;
730 minval = val;
731 maxval = val;
732 } else {
733 count++;
734 if (val < minval)
735 minval = val;
736 if (val > maxval)
737 maxval = val;
738 }
739 }
740 }
741
742 if (num)
743 *num = count;
744 if (min)
745 *min = minval;
746 if (max)
747 *max = maxval;
748
749 return bb_err_None;
750 } /* bb_cont_resources */
751
752
753 uint16 bb_get_release_num(bb_map_t * map)
754 {
755 return map->releasenum;
756 }
757
758
759 bb_zheader_t *bb_get_zheader(bb_map_t * map)
760 {
761 return map->zheader;
762 }
763
764
765 bb_resolution_t *bb_get_resolution(bb_map_t * map)
766 {
767 return map->resolution;
768 }
769
770
771 bb_err_t bb_get_palette(bb_map_t * map, bb_palette_t ** res)
772 {
773 int ix;
774 bb_err_t err;
775
776 if (res)
777 *res = NULL;
778
779 if (map->palettechunk < 0) {
780 return bb_err_None;
781 }
782
783 if (!map->palette) {
784 bb_result_t chunkres;
785 bb_palette_t *pal;
786 unsigned char *ptr;
787
788 pal = (bb_palette_t *) malloc(sizeof(bb_palette_t));
789 if (!pal)
790 return bb_err_Alloc;
791
792 err = bb_load_chunk_by_number(map, bb_method_Memory, &chunkres,
793 map->palettechunk);
794 if (err)
795 return err;
796
797 ptr = chunkres.data.ptr;
798
799 if (chunkres.length == 1) {
800 int val = ptr[0];
801 if (val != 16 && val != 32)
802 return bb_err_Format;
803 pal->isdirect = TRUE;
804 pal->data.depth = val;
805 } else {
806 int size = chunkres.length / 3;
807 bb_color_t *colors =
808 (bb_color_t *) malloc(size * sizeof(bb_color_t));
809 if (!colors)
810 return bb_err_Alloc;
811 if (size < 1 || size > 256)
812 return bb_err_Format;
813 for (ix = 0; ix < size; ix++) {
814 colors[ix].red = ptr[ix * 3 + 0];
815 colors[ix].green = ptr[ix * 3 + 1];
816 colors[ix].blue = ptr[ix * 3 + 2];
817 }
818 pal->isdirect = FALSE;
819 pal->data.table.numcolors = size;
820 pal->data.table.colors = colors;
821 }
822
823 bb_unload_chunk(map, map->palettechunk);
824 map->palette = pal;
825 }
826
827 if (res)
828 *res = map->palette;
829 return bb_err_None;
830 } /* bb_get_palette */
831
832
833 bb_err_t bb_load_resource_pict(bb_map_t * map, int method, bb_result_t * res,
834 int resnum, bb_aux_pict_t ** auxdata)
835 {
836 bb_err_t err;
837
838 if (auxdata)
839 *auxdata = NULL;
840
841 err = bb_load_resource(map, method, res, bb_ID_Pict, resnum);
842 if (err)
843 return err;
844
845 if (auxdata) {
846 bb_chunkdesc_t *chu = &(map->chunks[res->chunknum]);
847 if (chu->auxdatnum >= 0 && map->auxpict) {
848 *auxdata = &(map->auxpict[chu->auxdatnum]);
849 }
850 }
851
852 return bb_err_None;
853 } /* bb_load_resource_pict */
854
855
856 bb_err_t bb_load_resource_snd(bb_map_t * map, int method, bb_result_t * res,
857 int resnum, bb_aux_sound_t ** auxdata)
858 {
859 bb_err_t err;
860
861 if (auxdata)
862 *auxdata = NULL;
863
864 /* err = bb_load_resource(map, method, res, bb_ID_Pict, resnum); */
865 err = bb_load_resource(map, method, res, bb_ID_Snd, resnum);
866 if (err)
867 return err;
868
869 if (auxdata) {
870 bb_chunkdesc_t *chu = &(map->chunks[res->chunknum]);
871 if (chu->auxdatnum >= 0 && map->auxsound) {
872 *auxdata = &(map->auxsound[chu->auxdatnum]);
873 }
874 }
875
876 return bb_err_None;
877 } /* bb_load_resource_snd */
878
879 #endif /* NO_BLORB */
0 #ifndef DOS_OWBLORB_H
1 #define DOS_OWBLORB_H
2
3 #include "blorb.h"
4 #include "blorblow.h"
5
6
7 typedef struct sampledata_struct {
8 unsigned short channels;
9 unsigned long samples;
10 unsigned short bits;
11 double rate;
12 } sampledata_t;
13
14
15 bb_err_t blorb_err;
16 bb_map_t *blorb_map;
17 bb_result_t blorb_res;
18
19
20 /* uint32 *findchunk(uint32 *data, char *chunkID, int length); */
21 char *findchunk(char *pstart, char *fourcc, int n);
22 unsigned short ReadShort(const unsigned char *bytes);
23 unsigned long ReadLong(const unsigned char *bytes);
24 double ReadExtended(const unsigned char *bytes);
25
26 #define UnsignedToFloat(u) (((double)((long)(u - 2147483647L - 1))) + 2147483648.0)
27
28 #endif
0 ; owfix.asm - Fix for gremlins in the Open Watcom C runtime library.
1 ;
2 ; This file is part of Frotz.
3 ;
4 ; Frotz is free software; you can redistribute it and/or modify
5 ; it under the terms of the GNU General Public License as published by
6 ; the Free Software Foundation; either version 2 of the License, or
7 ; (at your option) any later version.
8 ;
9 ; Frotz is distributed in the hope that it will be useful,
10 ; but WITHOUT ANY WARRANTY; without even the implied warranty of
11 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 ; GNU General Public License for more details.
13 ;
14 ; You should have received a copy of the GNU General Public License
15 ; along with this program; if not, write to the Free Software
16 ; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 ; Or visit http://www.fsf.org/
18
19 _TEXT segment word public 'CODE'
20
21 assume cs:_TEXT
22
23 ; Open Watcom clibl.lib's internal functions __PIA and __PIS for huge
24 ; pointer arithmetic do not really normalize pointers completely. This is
25 ; an alternate implementation which does.
26 ;
27 ; (The OW source code also has implementations of functions __PCA and __PCS,
28 ; which do a better job at normalizing pointers, but they follow a different
29 ; interface, and in any case are not actually included in the C library.)
30 ;
31 ; Input: dx:ax = pointer; cx:bx = long addend or subtrahend.
32 ; Output: dx:ax = normalized pointer.
33
34 public __PIA,__PIS
35 __PIS:
36 neg cx
37 neg bx
38 sbb cx,0
39 __PIA:
40 add ax,bx ; Quickly add the low part (bx) of
41 ; the addend; this frees up bx
42 sbb bl,bl ; Let the segment component (dx)
43 and bl,0x10 ; absorb any carry over
44 add dh,bl
45 mov ch,cl ; Add the high part of the addend
46 mov cl,4 ; (cl)
47 shl ch,cl
48 add dh,ch
49 mov bx,ax ; Combine the higher 12 bits of the
50 shr bx,cl ; updated offset (ax) into the
51 add dx,bx ; segment component (dx)
52 and ax,0x000f ; Zap these 12 bits from ax
53 retf ; We are done
54
55 _TEXT ends
56
57 end
0 /*
1 * owfrotz.h
2 *
3 * DOS interface, declarations, definitions, and defaults (Open Watcom).
4 *
5 */
6
7 #ifndef DOS_OWFROTZ_H
8 #define DOS_OWFROTZ_H
9
10 #define MASK_LINEAR(addr) (addr & 0x000FFFFF)
11 #define RM_TO_LINEAR(addr) (((addr & 0xFFFF0000) >> 12) + (addr & 0xFFFF))
12 #define RM_OFFSET(addr) (addr & 0xF)
13 #define RM_SEGMENT(addr) ((addr >> 4) & 0xFFFF)
14
15 #define OS_PATHSEP ';'
16
17 #define byte0(v) ((byte *)&v)[0]
18 #define byte1(v) ((byte *)&v)[1]
19 #define byte2(v) ((byte *)&v)[2]
20 #define byte3(v) ((byte *)&v)[3]
21 #define word0(v) ((word *)&v)[0]
22 #define word1(v) ((word *)&v)[1]
23
24 #ifndef HISTORY_MIN_ENTRY
25 #define HISTORY_MIN_ENTRY 1
26 #endif
27
28 #define SPECIAL_KEY_MIN 256
29 #define SPECIAL_KEY_HOME 256
30 #define SPECIAL_KEY_END 257
31 #define SPECIAL_KEY_WORD_LEFT 258
32 #define SPECIAL_KEY_WORD_RIGHT 259
33 #define SPECIAL_KEY_DELETE 260
34 #define SPECIAL_KEY_INSERT 261
35 #define SPECIAL_KEY_PAGE_UP 262
36 #define SPECIAL_KEY_PAGE_DOWN 263
37 #define SPECIAL_KEY_TAB 264
38 #define SPECIAL_KEY_MAX 264
39
40 #define _MONO_ 0
41 #define _TEXT_ 1
42 #define _CGA_ 2
43 #define _MCGA_ 3
44 #define _EGA_ 4
45 #define _AMIGA_ 5
46
47 /*
48 * For ease of porting from Borland Turbo C to Open Watcom C, define these
49 * names for text mode colours. Borland C has these in <conio.h> and
50 * <graphics.h> --- as `enum COLORS' --- but Watcom does not.
51 */
52 enum bc_compatible_colours {
53 BLACK,
54 BLUE,
55 GREEN,
56 CYAN,
57 RED,
58 MAGENTA,
59 BROWN,
60 LIGHTGRAY,
61 DARKGRAY,
62 LIGHTBLUE,
63 LIGHTGREEN,
64 LIGHTCYAN,
65 LIGHTRED,
66 LIGHTMAGENTA,
67 YELLOW,
68 WHITE
69 };
70
71
72 typedef unsigned char byte;
73 typedef unsigned short word;
74
75 extern int display;
76
77 extern int cursor_x;
78 extern int cursor_y;
79
80 extern char latin1_to_ibm[];
81 extern char latin1_to_ascii[];
82
83 extern byte text_bg;
84 extern byte text_fg;
85
86 extern byte scrn_attr;
87
88 extern int user_background;
89 extern int user_foreground;
90 extern int user_emphasis;
91 extern int user_reverse_bg;
92 extern int user_reverse_fg;
93 extern int user_screen_height;
94 extern int user_screen_width;
95 extern int user_tandy_bit;
96 extern int user_bold_typing;
97 extern int user_random_seed;
98 extern int user_font;
99
100 extern char stripped_story_name[];
101 extern char *prog_name;
102
103 extern int current_bg;
104 extern int current_fg;
105 extern int current_style;
106 extern int current_font;
107
108 extern int scaler;
109
110 #ifdef SOUND_SUPPORT
111 extern volatile int end_of_sound_flag;
112 #endif
113
114 /* owinit */ int dectoi (const char *);
115 /* owinit */ int hextoi (const char *);
116 /* owmouse */ bool detect_mouse (void);
117 /* owmouse */ int read_mouse (void);
118 /* owpic */ bool init_pictures (void);
119 /* owpic */ void reset_pictures (void);
120
121 #ifdef SOUND_SUPPORT
122 /* owsmpl */ bool dos_init_sound (void);
123 /* owsmpl */ void dos_reset_sound (void);
124 /* owinput */ void end_of_sound(void);
125 #endif
126 /* owtext */ void switch_scrn_attr (bool);
127 /* owtext */ void load_fonts (void);
128
129 /*
130 * Inline functions for calling BIOS video and date/time services, and DOS
131 * mouse services.
132 */
133 word bios_video_ah(byte ah);
134 #pragma aux bios_video_ah = "int 0x10" parm [ah] value [ax] modify [bx cx dx];
135 word bios_video_ah_al_bh_bl_cx(byte ah, byte al, byte bh, byte bl, word cx);
136 #pragma aux bios_video_ah_al_bh_bl_cx = "int 0x10" \
137 parm [ah] [al] [bh] [bl] [cx] \
138 value [ax] modify [bx cx dx];
139 word bios_video_ah_bh_dh_dl(byte ah, byte bh, byte dh, byte dl);
140 #pragma aux bios_video_ah_bh_dh_dl = "int 0x10" parm [ah] [bh] [dh] [dl] \
141 value [ax] modify [bx cx dx];
142 word bios_video_ah_bh_cx_dx(byte ah, byte bh, word cx, word dx);
143 #pragma aux bios_video_ah_bh_cx_dx = "int 0x10" parm [ah] [bh] [cx] [dx] \
144 value [ax] modify [bx cx dx];
145 word bios_video_ah_cx(byte ah, word cx);
146 #pragma aux bios_video_ah_cx = "int 0x10" parm [ah] [cx] value [ax] \
147 modify [bx cx dx];
148 word bios_video_ax(word ax);
149 #pragma aux bios_video_ax = "int 0x10" parm [ax] value [ax] modify [bx cx dx];
150 word bios_video_ax_bl(word ax, byte bl);
151 #pragma aux bios_video_ax_bl = "int 0x10" parm [ax] [bl] value [ax] \
152 modify [bx cx dx];
153 /*
154 * This is used for int 0x10, ah = 6 or 7, which may destroy bp on some
155 * buggy BIOSes (per Ralf Brown's Interrupt List).
156 */
157 word bios_video_ax_bh_ch_cl_dh_dl(word ax, byte bh, byte ch, byte cl,
158 byte dh, byte dl);
159 #pragma aux bios_video_ax_bh_ch_cl_dh_dl = "push bp", \
160 "int 0x10", \
161 "pop bp" \
162 parm [ax] [bh] [ch] [cl] [dh] [dl] value [ax] modify [bx cx dx];
163 word bios_video_ax_bx(word ax, word bx);
164 #pragma aux bios_video_ax_bx = "int 0x10" parm [ax] [bx] value [ax] \
165 modify [bx cx dx];
166 word bios_video_ax_bx_cx_esdx(word ax, word bx, word cx, void _far *esdx);
167 #pragma aux bios_video_ax_bx_cx_esdx = "int 0x10" parm [ax] [bx] [cx] [es dx] \
168 value [ax] modify [bx cx dx];
169 word bios_video_ax_bx_dh_ch_cl(word ax, word bx, byte dh, byte ch, byte cl);
170 #pragma aux bios_video_ax_bx_dh_ch_cl = "int 0x10" \
171 parm [ax] [bx] [dh] [ch] [cl] \
172 value [ax] modify [bx cx dx];
173 word bios_video_ax_esdx_bh(word ax, void _far *esdx, byte bh);
174 #pragma aux bios_video_ax_esdx_bh = "int 0x10" parm [ax] [es dx] [bh] \
175 value [ax] modify [bx cx dx];
176 long bios_time_ah(byte ah);
177 #pragma aux bios_time_ah = "int 0x1a" parm [ah] value [cx dx] modify [ax bx];
178 word dos_mouse_ax(word ax);
179 #pragma aux dos_mouse_ax = "int 0x33" parm [ax] value [ax] modify [bx cx dx];
180 __int64 dos_mouse_ax_bx(word ax, word bx);
181 #pragma aux dos_mouse_ax_bx = "int 0x33" parm [ax] [bx] value [ax bx cx dx];
182 /*
183 * Used for latching operations in EGA or VGA screen output.
184 */
185 void video_latch(volatile byte);
186 #pragma aux video_latch = "" parm [al] modify [];
187
188 #endif
0 #ifndef OWHASH_H
1 #define OWHASH_H
2 #define GIT_HASH "$Format:%H$"
3 #define GIT_HASH_SHORT "$Format:%h$"
4 #define GIT_DATE "$Format:%ci$"
5 #endif
0 /*
1 * owinit.c - DOS interface (Open Watcom version), initialization
2 *
3 * This file is part of Frotz.
4 *
5 * Frotz is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * Frotz is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 * Or visit http://www.fsf.org/
19 */
20
21 #include <conio.h>
22 #include <dos.h>
23 #include <stdio.h>
24 #include <stdlib.h>
25 #include <string.h>
26 #include "frotz.h"
27 #include "owfrotz.h"
28
29 #ifndef NO_BLORB
30 #include "owblorb.h"
31 #endif
32
33 #include "owhash.h"
34
35 extern f_setup_t f_setup;
36 extern z_header_t z_header;
37
38 static char information[] =
39 "An interpreter for all Infocom and other Z-Machine games.\n"
40 "Complies with standard 1.0 of Graham Nelson's specification.\n"
41 "\n"
42 "Syntax: frotz [options] story-file\n"
43 " -a watch attribute setting \t -O watch object locating\n"
44 " -A watch attribute testing \t -p alter piracy opcode\n"
45 " -b # background colour \t -r # right margin\n"
46 " -B # reverse background colour \t -R <path> restricted read/write\n"
47 " -c # context lines \t -s # random number seed value\n"
48 " -d # display mode (see below) \t -S # transcript width\n"
49 " -e # emphasis colour [mode 1] \t -t set Tandy bit\n"
50 " -f # foreground colour \t -T bold typing [modes 2+4+5]\n"
51 " -F # reverse foreground colour \t -u # slots for multiple undo\n"
52 " -g # font [mode 5] (see below) \t -v show version information\n"
53 " -h # screen height \t -w # screen width\n"
54 " -i ignore runtime errors \t -x expand abbreviations g/x/z\n"
55 " -l # left margin \t -Z # error checking (see below)\n"
56 " -o watch object movement\n"
57 "\n"
58 "Fonts: 0 fixed, 1 sans serif, 2 comic, 3 times, 4 serif.\n"
59 "Display modes: 0 mono, 1 text, 2 CGA, 3 MCGA, 4 EGA, 5 Amiga.\n"
60 "Error reporting: 0 none, 1 first only (default), 2 all, 3 exit after any error.";
61
62 extern int zoptind;
63
64 static const char *progname = NULL;
65
66 extern char script_name[];
67 extern char command_name[];
68 extern char save_name[];
69 extern char auxilary_name[];
70
71 int display = -1;
72
73 int user_background = -1;
74 int user_foreground = -1;
75 int user_emphasis = -1;
76 int user_bold_typing = -1;
77 int user_reverse_bg = -1;
78 int user_reverse_fg = -1;
79 int user_screen_height = -1;
80 int user_screen_width = -1;
81 int user_tandy_bit = -1;
82 int user_random_seed = -1;
83 int user_font = 1;
84
85 /* Blorb-related things */
86 #ifndef NO_BLORB
87 char *blorb_name;
88 char *blorb_file;
89 bool use_blorb;
90 bool exec_in_blorb;
91 #endif
92
93 static byte old_video_mode = 0;
94
95 static void interrupt(*oldvect) () = NULL;
96
97 bool at_keybrd;
98
99 /* Test for the existance of Enhanced AT keyboard support in BIOS */
100 static bool test_enhanced_keyboard(unsigned char b)
101 {
102 union REGS regs;
103 unsigned char far *shift_status;
104 shift_status = MK_FP(0, 0x417);
105 shift_status[0] = b;
106 regs.h.ah = 0x12;
107 int86(0x16, &regs, &regs);
108 return b == regs.h.al;
109 }
110
111 /*
112 * os_init_setup
113 *
114 * Set or reset various configuration variables.
115 *
116 */
117 void os_init_setup(void)
118 {
119 f_setup.attribute_assignment = 0;
120 f_setup.attribute_testing = 0;
121 f_setup.context_lines = 0;
122 f_setup.object_locating = 0;
123 f_setup.object_movement = 0;
124 f_setup.left_margin = 0;
125 f_setup.right_margin = 0;
126 f_setup.ignore_errors = 0;
127 f_setup.piracy = 0;
128 f_setup.undo_slots = MAX_UNDO_SLOTS;
129 f_setup.expand_abbreviations = 0;
130 f_setup.script_cols = 80;
131 f_setup.sound = 1;
132 f_setup.err_report_mode = ERR_DEFAULT_REPORT_MODE;
133 f_setup.restore_mode = 0;
134
135 at_keybrd = (test_enhanced_keyboard(0x40) && test_enhanced_keyboard(0x80));
136 test_enhanced_keyboard(0x00);
137 } /* os_init_setup */
138
139
140 /*
141 * dectoi
142 *
143 * Convert a string containing a decimal number to integer. The string may
144 * be NULL, but it must not be empty.
145 *
146 */
147 int dectoi(const char *s)
148 {
149 int n = 0;
150
151 if (s != NULL) {
152 do {
153 n = 10 * n + (*s & 15);
154 } while (*++s > ' ');
155 }
156 return n;
157 } /* dectoi */
158
159
160 /*
161 * hextoi
162 *
163 * Convert a string containing a hex number to integer. The string may be
164 * NULL, but it must not be empty.
165 *
166 */
167 int hextoi(const char *s)
168 {
169 int n = 0;
170
171 if (s != NULL) {
172 do {
173
174 n = 16 * n + (*s & 15);
175
176 if (*s > '9')
177 n += 9;
178
179 } while (*++s > ' ');
180 }
181 return n;
182 } /* hextoi */
183
184
185 /*
186 * basename
187 *
188 * A generic and spartan bit of code to extract the filename from a path.
189 * This one is so trivial that it's okay to steal.
190 */
191 char *basename(const char *path)
192 {
193 const char *s;
194 const char *p;
195 p = s = path;
196
197 while (*s) {
198 if (*s++ == '\\') {
199 p = s;
200 }
201 }
202 return (char *)p;
203 } /* basename */
204
205
206 /*
207 * cleanup
208 *
209 * Shut down the IO interface: free memory, close files, restore
210 * interrupt pointers and return to the previous video mode.
211 *
212 */
213 static void cleanup(void)
214 {
215 #ifdef SOUND_SUPPORT
216 dos_reset_sound();
217 #endif
218 reset_pictures();
219
220 bios_video_ax((word)old_video_mode);
221
222 _dos_setvect(0x1b, oldvect);
223 } /* cleanup */
224
225
226 /*
227 * fast_exit
228 *
229 * Handler routine to be called when the crtl-break key is pressed.
230 *
231 */
232 static void interrupt fast_exit()
233 {
234 cleanup();
235 exit(EXIT_FAILURE);
236 } /* fast_exit */
237
238
239 /*
240 * os_quit
241 *
242 * Immediately and cleanly exit, passing along exit status.
243 *
244 */
245
246 void os_quit(int status)
247 {
248 cleanup();
249 exit(status);
250 }
251
252 /*
253 * os_fatal
254 *
255 * Display error message and exit program.
256 *
257 */
258 void os_fatal(const char *s, ...)
259 {
260 if (z_header.interpreter_number)
261 os_reset_screen();
262
263 /* Display error message */
264 fputs("\nFatal error: ", stderr);
265 fputs(s, stderr);
266 fputs("\n", stderr);
267
268 /* Abort program */
269 exit(EXIT_FAILURE);
270 } /* os_fatal */
271
272
273 /*
274 * parse_options
275 *
276 * Parse program options and set global flags accordingly.
277 *
278 */
279 static void parse_options(int argc, char **argv)
280 {
281 int c;
282
283 do {
284 int num = 0;
285
286 c = zgetopt(argc, argv,
287 "aAb:B:c:d:e:f:F:g:h:il:oOpr:R:s:S:tTu:vw:xZ:");
288
289 if (zoptarg != NULL)
290 num = dectoi(zoptarg);
291
292 if (c == 'a')
293 f_setup.attribute_assignment = 1;
294 if (c == 'A')
295 f_setup.attribute_testing = 1;
296 if (c == 'b')
297 user_background = num;
298 if (c == 'B')
299 user_reverse_bg = num;
300 if (c == 'c')
301 f_setup.context_lines = num;
302 if (c == 'd') {
303 display = zoptarg[0] | 32;
304 if ((display < '0' || display > '5')
305 && (display < 'a' || display > 'e')) {
306 display = -1;
307 }
308 }
309 if (c == 'e')
310 user_emphasis = num;
311 if (c == 'T')
312 user_bold_typing = 1;
313 if (c == 'f')
314 user_foreground = num;
315 if (c == 'F')
316 user_reverse_fg = num;
317 if (c == 'g') {
318 if (num >= 0 && num <= 4)
319 user_font = num;
320 }
321 if (c == 'h')
322 user_screen_height = num;
323 if (c == 'i')
324 f_setup.ignore_errors = 1;
325 if (c == 'l')
326 f_setup.left_margin = num;
327 if (c == 'o')
328 f_setup.object_movement = 1;
329 if (c == 'O')
330 f_setup.object_locating = 1;
331 if (c == 'p')
332 f_setup.piracy = 1;
333 if (c == 'r')
334 f_setup.right_margin = num;
335 if (c == 'R')
336 f_setup.restricted_path = strdup(zoptarg);
337 if (c == 's')
338 user_random_seed = num;
339 if (c == 'S')
340 f_setup.script_cols = num;
341 if (c == 't')
342 user_tandy_bit = 1;
343 if (c == 'u')
344 f_setup.undo_slots = num;
345 if (c == 'v') {
346 printf("FROTZ V%s - MSDOS / PCDOS Edition\n", VERSION);
347 printf("Commit date: %s\n", GIT_DATE);
348 printf("Git commit: %s\n", GIT_HASH);
349 printf("Notes: %s\n", RELEASE_NOTES);
350 printf(" Frotz was originally written by Stefan Jokisch.\n");
351 printf(" It complies with standard 1.0 of Graham Nelson's specification.\n");
352 printf(" It was ported to Unix by Galen Hazelwood.\n");
353 printf(" The core and DOS port are maintained by David Griffith.\n");
354 printf(" Frotz's homepage is https://661.org/proj/if/frotz/\n");
355 exit(0);
356 }
357 if (c == 'w')
358 user_screen_width = num;
359 if (c == 'x')
360 f_setup.expand_abbreviations = 1;
361 if (c == 'Z') {
362 if (num >= ERR_REPORT_NEVER && num <= ERR_REPORT_FATAL)
363 f_setup.err_report_mode = num;
364 }
365 if (c == '?')
366 zoptind = argc;
367 } while (c != EOF && c != '?');
368
369 } /* parse_options */
370
371 static char *malloc_filename(char *story_name, char *extension)
372 {
373 int length = strlen(story_name) + strlen(extension) + 2;
374 char *filename = malloc(length);
375 if (filename) {
376 strcpy(filename, story_name);
377 strcat(filename, ".");
378 strcat(filename, extension);
379 }
380 return filename;
381 }
382
383 /*
384 * os_process_arguments
385 *
386 * Handle command line switches. Some variables may be set to activate
387 * special features of Frotz:
388 *
389 * option_attribute_assignment
390 * option_attribute_testing
391 * option_context_lines
392 * option_object_locating
393 * option_object_movement
394 * option_left_margin
395 * option_right_margin
396 * option_ignore_errors
397 * option_piracy
398 * option_undo_slots
399 * option_expand_abbreviations
400 * option_script_cols
401 *
402 * The global pointer "story_name" is set to the story file name.
403 *
404 */
405 void os_process_arguments(int argc, char *argv[])
406 {
407 const char *p;
408 int i;
409 char stripped_story_name[10];
410
411 /* Parse command line options */
412 parse_options(argc, argv);
413
414 if (zoptind != argc - 1) {
415 printf("FROTZ V%s - MSDOS / PCDOS Edition. ", VERSION);
416 #ifndef NO_SOUND
417 printf("Audio output enabled.\n");
418 #else
419 printf("Audio output disabled.\n");
420 #endif
421 puts(information);
422 exit(EXIT_SUCCESS);
423 }
424
425 /* Set the story file name */
426 f_setup.story_file = strdup(argv[zoptind]);
427
428 /* Strip path and extension off the story file name */
429 p = strdup(f_setup.story_file);
430
431 for (i = 0; f_setup.story_file[i] != 0; i++)
432 if (f_setup.story_file[i] == '\\'
433 || f_setup.story_file[i] == '/'
434 || f_setup.story_file[i] == ':')
435 p = f_setup.story_file + i + 1;
436
437 for (i = 0; p[i] != 0 && p[i] != '.'; i++)
438 stripped_story_name[i] = p[i];
439 stripped_story_name[i] = 0;
440 f_setup.story_name = strdup(stripped_story_name);
441
442 /* Create nice default file names */
443 f_setup.script_name = malloc_filename(f_setup.story_name, "scr");
444 f_setup.command_name = malloc_filename(f_setup.story_name, "rec");
445 f_setup.save_name = malloc_filename(f_setup.story_name, "sav");
446 f_setup.aux_name = malloc_filename(f_setup.story_name, "aux");
447
448 /* Save the executable file name */
449 progname = argv[0];
450
451 #ifndef NO_BLORB
452 blorb_file = malloc_filename(f_setup.story_name, "blb");
453
454 switch (dos_init_blorb()) {
455 case bb_err_Format:
456 printf("Blorb file loaded, but unable to build map.\n\n");
457 break;
458 default:
459 break;
460 /* No problem. Don't say anything. */
461 /* printf("Blorb error code %i\n\n"); */
462 }
463 #endif
464 } /* os_process_arguments */
465
466
467 /*
468 * standard_palette
469 *
470 * Set palette registers to EGA default values and call VGA BIOS to
471 * use DAC registers #0 to #63.
472 *
473 */
474 static void standard_palette(void)
475 {
476
477 static byte palette[] = {
478 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
479 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
480 0x00 /* last one is the overscan register */
481 };
482
483 if (display == _AMIGA_) {
484 bios_video_ax_esdx_bh(0x1002, palette, 0);
485 bios_video_ax_bx(0x1013, 0x0001);
486 }
487 } /* standard_palette */
488
489
490 /*
491 * special_palette
492 *
493 * Set palette register #i to value i and call VGA BIOS to use DAC
494 * registers #64 to #127.
495 *
496 */ static void special_palette(void)
497 {
498
499 static byte palette[] = {
500 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
501 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
502 0x00 /* last one is the overscan register */
503 };
504
505 if (display == _AMIGA_) {
506 bios_video_ax_esdx_bh(0x1002, palette, 0);
507 bios_video_ax_bx(0x1013, 0x0101);
508 }
509 } /* special_palette */
510
511
512 /*
513 * os_init_screen
514 *
515 * Initialise the IO interface. Prepare the screen and other devices
516 * (mouse, sound board). Set various OS depending story file header
517 * entries:
518 *
519 * z_header.config (aka flags 1)
520 * z_header.flags (aka flags 2)
521 * z_header.screen_cols (aka screen width in characters)
522 * z_header.screen_rows (aka screen height in lines)
523 * z_header.screen_width
524 * z_header.screen_height
525 * z_header.font_height (defaults to 1)
526 * z_header.font_width (defaults to 1)
527 * z_header.default_foreground
528 * z_header.default_background
529 * z_header.interpreter_number
530 * z_header.interpreter_version
531 * z_header.user_name (optional; not used by any game)
532 *
533 * Finally, set reserve_mem to the amount of memory (in bytes) that
534 * should not be used for multiple undo and reserved for later use.
535 *
536 */ void os_init_screen(void)
537 {
538 static byte zcolour[] = {
539 BLACK_COLOUR,
540 BLUE_COLOUR,
541 GREEN_COLOUR,
542 CYAN_COLOUR,
543 RED_COLOUR,
544 MAGENTA_COLOUR,
545 BROWN + 16,
546 LIGHTGRAY + 16,
547 GREY_COLOUR,
548 LIGHTBLUE + 16,
549 LIGHTGREEN + 16,
550 LIGHTCYAN + 16,
551 LIGHTRED + 16,
552 LIGHTMAGENTA + 16,
553 YELLOW_COLOUR,
554 WHITE_COLOUR
555 };
556
557 static struct { /* information on modes 0 to 5 */
558 byte vmode;
559 word width;
560 word height;
561 byte font_width;
562 byte font_height;
563 byte fg;
564 byte bg;
565 } info[] = {
566 {0x07, 80, 25, 1, 1, LIGHTGRAY + 16, BLACK_COLOUR}, /* MONO */
567 {0x03, 80, 25, 1, 1, LIGHTGRAY + 16, BLUE_COLOUR}, /* TEXT */
568 {0x06, 640, 200, 8, 8, WHITE_COLOUR, BLACK_COLOUR}, /* CGA */
569 {0x13, 320, 200, 5, 8, WHITE_COLOUR, GREY_COLOUR}, /* MCGA */
570 {0x0e, 640, 200, 8, 8, WHITE_COLOUR, BLUE_COLOUR}, /* EGA */
571 {0x12, 640, 400, 8, 16, WHITE_COLOUR, BLACK_COLOUR} /* AMIGA */
572 };
573
574 static struct { /* information on modes A to E */
575 word vesamode;
576 word width;
577 word height;
578 } subinfo[] = {
579 {0x001, 40, 25},
580 {0x109, 132, 25},
581 {0x10b, 132, 50},
582 {0x108, 80, 60},
583 {0x10c, 132, 60}
584 };
585
586 int subdisplay;
587
588 /* Get the current video mode. This video mode will be selected
589 when the program terminates. It's also useful to auto-detect
590 monochrome boards. */
591 old_video_mode = (byte)bios_video_ah(0x0f);
592
593 /* If the display mode has not already been set by the user then see
594 if this is a monochrome board. If so, set the display mode to 0.
595 Otherwise check the graphics flag of the story. Select a graphic
596 mode if it is set or if this is a V6 game. Select text mode if it
597 is not. */
598 if (display == -1) {
599 if (old_video_mode == 7)
600 display = '0';
601 else if (z_header.version == V6 || (z_header.flags & GRAPHICS_FLAG))
602 display = '5';
603 else
604 display = '1';
605 }
606
607 /* Activate the desired display mode. All VESA text modes are very
608 similar to the standard text mode; in fact, only here we need to
609 know which VESA mode is used. */
610 if (display >= '0' && display <= '5') {
611 subdisplay = -1;
612 display -= '0';
613 bios_video_ax((word)info[display].vmode);
614 } else if (display == 'a') {
615 subdisplay = 0;
616 display = 1;
617 bios_video_ax(0x0001);
618 } else if (display >= 'b' && display <= 'e') {
619 subdisplay = display - 'a';
620 display = 1;
621 bios_video_ax_bx(0x4f02, subinfo[subdisplay].vesamode);
622 }
623
624 /* Make various preparations */
625 if (display <= _TEXT_) {
626 /* Enable bright background colours */
627 bios_video_ax_bl(0x1003, 0);
628 /* Turn off hardware cursor */
629 bios_video_ah_cx(1, 0xffff);
630 } else {
631 load_fonts();
632
633 if (display == _AMIGA_) {
634 scaler = 2;
635
636 /* Use resolution 640 x 400 instead of 640 x 480. BIOS doesn't
637 help us here since this is not a standard resolution. */
638 outp(0x03c2, 0x63);
639
640 outpw(0x03d4, 0x0e11);
641 outpw(0x03d4, 0xbf06);
642 outpw(0x03d4, 0x1f07);
643 outpw(0x03d4, 0x9c10);
644 outpw(0x03d4, 0x8f12);
645 outpw(0x03d4, 0x9615);
646 outpw(0x03d4, 0xb916);
647
648 }
649
650 }
651 #if !defined(__SMALL__) && !defined (__TINY__) && !defined (__MEDIUM__)
652 /* Set the amount of memory to reserve for later use. It takes
653 some memory to open command, script and game files. If Frotz
654 is compiled in a small memory model then memory for opening
655 files is allocated on the "near heap" while other allocations
656 are made on the "far heap", i.e. we need not reserve memory
657 in this case. */ reserve_mem = 4 * BUFSIZ;
658
659 #endif
660
661 /* Amiga emulation under V6 needs special preparation. */
662 if (display == _AMIGA_ && z_header.version == V6) {
663 user_reverse_fg = -1;
664 user_reverse_bg = -1;
665 zcolour[LIGHTGRAY] = LIGHTGREY_COLOUR;
666 zcolour[DARKGRAY] = DARKGREY_COLOUR;
667
668 special_palette();
669 }
670
671 /* Set various bits in the configuration byte. These bits tell
672 the game which features are supported by the interpreter. */
673 if (z_header.version == V3 && user_tandy_bit != -1)
674 z_header.config |= CONFIG_TANDY;
675 if (z_header.version == V3)
676 z_header.config |= CONFIG_SPLITSCREEN;
677 if (z_header.version == V3
678 && (display == _MCGA_ || (display == _AMIGA_ && user_font != 0)))
679 z_header.config |= CONFIG_PROPORTIONAL;
680 if (z_header.version >= V4 && display != _MCGA_
681 && (user_bold_typing != -1 || display <= _TEXT_))
682 z_header.config |= CONFIG_BOLDFACE;
683 if (z_header.version >= V4)
684 z_header.config |= CONFIG_EMPHASIS | CONFIG_FIXED | CONFIG_TIMEDINPUT;
685 if (z_header.version >= V5 && display != _MONO_ && display != _CGA_)
686 z_header.config |= CONFIG_COLOUR;
687 if (z_header.version >= V5 && display >= _CGA_ && init_pictures())
688 z_header.config |= CONFIG_PICTURES;
689
690 /* Handle various game flags. These flags are set if the game wants
691 to use certain features. The flags must be cleared if the feature
692 is not available. */
693 if (z_header.flags & GRAPHICS_FLAG)
694 if (display <= _TEXT_)
695 z_header.flags &= ~GRAPHICS_FLAG;
696 if (z_header.version == V3 && (z_header.flags & OLD_SOUND_FLAG))
697 #ifdef SOUND_SUPPORT
698 if (!dos_init_sound())
699 #endif
700 z_header.flags &= ~OLD_SOUND_FLAG;
701 if (z_header.flags & SOUND_FLAG)
702 #ifdef SOUND_SUPPORT
703 if (!dos_init_sound())
704 #endif
705 z_header.flags &= ~SOUND_FLAG;
706 if (z_header.version >= V5 && (z_header.flags & UNDO_FLAG))
707 if (!f_setup.undo_slots)
708 z_header.flags &= ~UNDO_FLAG;
709 if (z_header.flags & MOUSE_FLAG)
710 if (subdisplay != -1 || !detect_mouse())
711 z_header.flags &= ~MOUSE_FLAG;
712 if (z_header.flags & COLOUR_FLAG)
713 if (display == _MONO_ || display == _CGA_)
714 z_header.flags &= ~COLOUR_FLAG;
715 z_header.flags &= ~MENU_FLAG;
716
717 /* Set the screen dimensions, font size and default colour */
718 z_header.screen_width = info[display].width;
719 z_header.screen_height = info[display].height;
720 z_header.font_height = info[display].font_height;
721 z_header.font_width = info[display].font_width;
722 z_header.default_foreground = info[display].fg;
723 z_header.default_background = info[display].bg;
724
725 if (subdisplay != -1) {
726 z_header.screen_width = subinfo[subdisplay].width;
727 z_header.screen_height = subinfo[subdisplay].height;
728 }
729
730 if (user_screen_width != -1)
731 z_header.screen_width = user_screen_width;
732 if (user_screen_height != -1)
733 z_header.screen_height = user_screen_height;
734
735 z_header.screen_cols = z_header.screen_width / z_header.font_width;
736 z_header.screen_rows = z_header.screen_height / z_header.font_height;
737
738 if (user_foreground != -1)
739 z_header.default_foreground = zcolour[user_foreground];
740 if (user_background != -1)
741 z_header.default_background = zcolour[user_background];
742
743 /* Set the interpreter number (a constant telling the game which
744 operating system it runs on) and the interpreter version. The
745 interpreter number has effect on V6 games and "Beyond Zork". */
746 z_header.interpreter_number = INTERP_MSDOS;
747 z_header.interpreter_version = 'F';
748
749 if (display == _AMIGA_)
750 z_header.interpreter_number = INTERP_AMIGA;
751
752 /* Install the fast_exit routine to handle the ctrl-break key */
753 oldvect = _dos_getvect(0x1b);
754 _dos_setvect(0x1b, fast_exit);
755 } /* os_init_screen */
756
757
758 /*
759 * os_reset_screen
760 *
761 * Reset the screen before the program stops.
762 *
763 */
764 void os_reset_screen(void)
765 {
766 os_set_font(TEXT_FONT);
767 os_set_text_style(0);
768 os_display_string((zchar *) "[Hit any key to exit.]");
769 os_read_key(0, TRUE);
770
771 cleanup();
772 } /* os_reset_screen */
773
774
775 /*
776 * os_restart_game
777 *
778 * This routine allows the interface to interfere with the process of
779 * restarting a game at various stages:
780 *
781 * RESTART_BEGIN - restart has just begun
782 * RESTART_WPROP_SET - window properties have been initialised
783 * RESTART_END - restart is complete
784 *
785 */
786 void os_restart_game(int stage)
787 {
788 int x, y;
789
790 if (story_id == BEYOND_ZORK) {
791 if (stage == RESTART_BEGIN) {
792 if ((display == _MCGA_ || display == _AMIGA_)
793 && os_picture_data(1, &x, &y)) {
794
795 special_palette();
796
797 bios_video_ax_bx_dh_ch_cl(0x1010, 64, 0, 0, 0);
798 bios_video_ax_bx_dh_ch_cl(0x1010, 79,
799 0xff, 0xff, 0xff);
800 os_draw_picture(1, 1, 1);
801 os_read_key(0, FALSE);
802
803 standard_palette();
804 }
805 }
806 }
807 } /* os_restart_game */
808
809
810 /*
811 * os_random_seed
812 *
813 * Return an appropriate random seed value in the range from 0 to
814 * 32767, possibly by using the current system time.
815 *
816 */
817 int os_random_seed(void)
818 {
819 if (user_random_seed == -1)
820 /* Use the time of day as seed value */
821 return (int)bios_time_ah(0) & 0x7fff;
822 else
823 return user_random_seed;
824 } /* os_random_seed */
825
826
827 /*
828 * os_path_open
829 *
830 * Open a file in the current directory. If this fails then
831 * search the directories in the ZCODE_PATH environment variable,
832 * if it is defined, otherwise search INFOCOM_PATH.
833 *
834 */
835 FILE *os_path_open(const char *name, const char *mode)
836 {
837 FILE *fp;
838 char buf[MAX_FILE_NAME + 1];
839 char *p, *bp, lastch;
840
841 if ((fp = fopen(name, mode)) != NULL)
842 return fp;
843 if ((p = getenv("ZCODE_PATH")) == NULL)
844 p = getenv("INFOCOM_PATH");
845 if (p != NULL) {
846 while (*p) {
847 bp = buf;
848 while (*p && *p != OS_PATHSEP)
849 lastch = *bp++ = *p++;
850 if (lastch != '\\' && lastch != '/')
851 *bp++ = '\\';
852 strcpy(bp, name);
853 if ((fp = fopen(buf, mode)) != NULL)
854 return fp;
855 if (*p)
856 p++;
857 }
858 }
859 return NULL;
860 } /* os_path_open */
861
862
863 /*
864 * os_load_story
865 *
866 * This is different from os_path_open() because we need to see if the
867 * story file is actually a chunk inside a blorb file. Right now we're
868 * looking only at the exact path we're given on the command line.
869 *
870 * Open a file in the current directory. If this fails, then search the
871 * directories in the ZCODE_PATH environmental variable. If that's not
872 * defined, search INFOCOM_PATH.
873 *
874 */
875 FILE *os_load_story(void)
876 {
877 #ifndef NO_BLORB
878 FILE *fp;
879
880 /* Did we build a valid blorb map? */
881 if (exec_in_blorb) {
882 fp = fopen(blorb_file, "rb");
883 fseek(fp, blorb_res.data.startpos, SEEK_SET);
884 } else {
885 fp = fopen(f_setup.story_file, "rb");
886 }
887 return fp;
888 #else
889 return fopen(f_setup.story_file, "rb");
890 #endif
891 }
892
893
894 #ifndef NO_BLORB
895 int dos_init_blorb(void)
896 {
897 FILE *blorbfile;
898
899 /* If the filename given on the command line is the same as our
900 * computed blorb filename, then we will assume the executable
901 * is contained in the blorb file.
902 */
903 if (strncmp((char *)basename(f_setup.story_file),
904 (char *)basename(blorb_file), 55) == 0) {
905 if ((blorbfile = fopen(blorb_file, "rb")) == NULL)
906 return bb_err_Read;
907 /* Under DOS, bb_create_map() returns bb_err_Format */
908 blorb_err = bb_create_map(blorbfile, &blorb_map);
909
910 if (blorb_err != bb_err_None) {
911 return blorb_err;
912 }
913
914 /* Now we need to locate the EXEC chunk within the blorb file
915 * and present it to the rest of the program as a file stream.
916 */
917 blorb_err = bb_load_chunk_by_type(blorb_map, bb_method_FilePos,
918 &blorb_res, bb_ID_ZCOD, 0);
919
920 if (blorb_err == bb_err_None) {
921 exec_in_blorb = 1;
922 use_blorb = 1;
923 }
924 }
925 return 0;
926 }
927 #endif /* NO_BLORB */
928
929
930 /*
931 * Seek into a storyfile, either a standalone file or the
932 * ZCODE chunk of a blorb file
933 */
934 int os_storyfile_seek(FILE * fp, long offset, int whence)
935 {
936 #ifndef NO_BLORB
937 int retval;
938 /* Is this a Blorb file containing Zcode? */
939 if (exec_in_blorb) {
940 switch (whence) {
941 case SEEK_END:
942 retval =
943 fseek(fp,
944 blorb_res.data.startpos + blorb_res.length +
945 offset, SEEK_SET);
946 break;
947 case SEEK_CUR:
948 retval = fseek(fp, offset, SEEK_CUR);
949 break;
950 case SEEK_SET:
951 default:
952 retval =
953 fseek(fp, blorb_res.data.startpos + offset,
954 SEEK_SET);
955 break;
956 }
957 return retval;
958 }
959 #endif
960 return fseek(fp, offset, whence);
961 }
962
963
964 /*
965 * Tell the position in a storyfile, either a standalone file
966 * or the ZCODE chunk of a blorb file
967 */
968 int os_storyfile_tell(FILE * fp)
969 {
970 #ifndef NO_BLORB
971 /* Is this a Blorb file containing Zcode? */
972 if (exec_in_blorb)
973 return ftell(fp) - blorb_res.data.startpos;
974 #endif
975 return ftell(fp);
976 }
0 /*
1 * owinput.c - DOS interface (Open Watcom version), input functions
2 *
3 * This file is part of Frotz.
4 *
5 * Frotz is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * Frotz is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 * Or visit http://www.fsf.org/
19 */
20
21 #include <bios.h>
22 #include <io.h>
23 #include <string.h>
24 #include <stdio.h>
25 #include "frotz.h"
26 #include "owfrotz.h"
27
28 #ifndef HISTORY_BUFSIZE
29 #define HISTORY_BUFSIZE 500
30 #endif
31
32 extern bool is_terminator (zchar);
33
34 extern bool read_yes_or_no (const char *);
35 extern void read_string (int, zchar *);
36
37 extern int completion (const zchar *, zchar *);
38
39 extern bool at_keybrd;
40
41 static long limit = 0;
42
43 static struct {
44 zchar buffer[HISTORY_BUFSIZE];
45 int latest;
46 int current;
47 int prefix_len;
48 } history;
49
50 static struct {
51 zchar *buffer;
52 int pos;
53 int length;
54 int max_length;
55 int width;
56 int max_width;
57 } input;
58
59 static bool overwrite = FALSE;
60
61 volatile int end_of_sound_flag;
62
63 /*
64 * swap_colours
65 *
66 * This is a small helper function for switch_cursor. It swaps the
67 * current background and foreground colours.
68 *
69 */
70 static void swap_colours(void)
71 {
72 byte temp;
73
74 temp = text_fg;
75 text_fg = text_bg;
76 text_bg = temp;
77
78 } /* swap_colours */
79
80
81 /*
82 * switch_cursor
83 *
84 * Turn cursor on/off. If there is mouse support then turn the mouse
85 * pointer on/off as well. The cursor should not be moved and the
86 * contents of the screen should not be changed while the cursor is
87 * visible (because of the primitive cursor emulation we use here).
88 *
89 */
90 static void switch_cursor(bool cursor)
91 {
92 if (display <= _TEXT_) {
93 word shape;
94 /* Use hardware cursor in text mode */
95 if (display == _MONO_)
96 shape = overwrite ? 0x080f : 0x0a0b;
97 else
98 shape = overwrite ? 0x0408 : 0x0506;
99
100 if (!cursor)
101 shape = 0xffff;
102
103 bios_video_ah_bh_dh_dl(2, 0, cursor_y, cursor_x);
104 bios_video_ah_cx(1, shape);
105 } else {
106 int saved_x = cursor_x;
107
108 if (cursor)
109 swap_colours();
110
111 if (input.pos < input.length)
112 os_display_char(input.buffer[input.pos]);
113 else
114 os_display_char(' ');
115
116 if (cursor)
117 swap_colours();
118
119 cursor_x = saved_x;
120 }
121 } /* switch_cursor */
122
123
124 /*
125 * get_current_time
126 *
127 * Return the current system time in 1/10 seconds.
128 *
129 */
130 static long get_current_time(void)
131 {
132 long time;
133
134 /* Get the current time of day measured in
135 * 65536 / 1,193,180 = 0.054925493
136 * seconds. Multiply this value with
137 * 959 / 1746 = 0.54925544
138 * to get the current time in 0.1 seconds.
139 */
140 time = bios_time_ah(0);
141
142 return time * 959 / 1746;
143 } /* get_current_time */
144
145
146 /*
147 * set_timer
148 *
149 * Set a time limit of timeout/10 seconds if timeout is not zero;
150 * otherwise clear the time limit.
151 *
152 */
153 static void set_timer(int timeout)
154 {
155 limit = (timeout != 0) ? get_current_time () + timeout : 0;
156 } /* set_timer */
157
158
159 /*
160 * time_limit_hit
161 *
162 * Return true if a previously set time limit has been exceeded.
163 *
164 */
165 static bool out_of_time(void)
166 {
167 if (limit != 0) {
168 long now = get_current_time ();
169
170 if (now < 1L * 3600 * 10 && limit > 23L * 3600 * 10)
171 now += 24L * 3600 * 10;
172
173 return now >= limit;
174 } else
175 return FALSE;
176
177 } /* out_of_time */
178
179
180 /*
181 * get_key
182 *
183 * Read a keypress or a mouse click. Returns...
184 *
185 * ZC_TIME_OUT = time limit exceeded,
186 * ZC_BACKSPACE = the backspace key,
187 * ZC_RETURN = the return key,
188 * ZC_HKEY_MIN...ZC_HKEY_MAX = a hot key,
189 * ZC_ESCAPE = the escape key,
190 * ZC_ASCII_MIN...ZC_ASCII_MAX = ASCII character,
191 * ZC_ARROW_MIN...ZC_ARROW_MAX = an arrow key,
192 * ZC_FKEY_MIN...ZC_FKEY_MAX = a function key,
193 * ZC_NUMPAD_MIN...ZC_NUMPAD_MAX = a number pad key,
194 * ZC_SINGLE_CLICK = single mouse click,
195 * ZC_DOUBLE_CLICK = double mouse click,
196 * ZC_LATIN1_MIN+1...ZC_LATIN1_MAX = ISO Latin-1 character,
197 * SPECIAL_KEY_MIN...SPECIAL_KEY_MAX = a special editing key.
198 *
199 */
200 static int get_key(bool cursor)
201 {
202 static byte arrow_key_map[] = {0x48, 0x50, 0x4b, 0x4d};
203 static byte special_key_map[] = {0x47, 0x4f, 0x73, 0x74, 0x53,
204 0x52, 0x49, 0x51, 0x0f};
205 static byte hot_key_map[] = {0x13, 0x19, 0x1f, 0x16,
206 0x31, 0x2d, 0x20, 0x23};
207 static byte function_key_map[] = {0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40,
208 0x41, 0x42, 0x43, 0x44, 0x85, 0x86};
209
210 int key;
211
212 /* Loop until a key was pressed */
213 if (cursor)
214 switch_cursor(TRUE);
215
216 if (z_header.flags & MOUSE_FLAG)
217 dos_mouse_ax(1);
218
219 do {
220
221 #ifdef SOUND_SUPPORT
222 if (end_of_sound_flag)
223 end_of_sound();
224 #endif
225
226 if (_bios_keybrd(at_keybrd ? _NKEYBRD_READY : _KEYBRD_READY)) {
227 word code = _bios_keybrd(at_keybrd ? _NKEYBRD_READ : _KEYBRD_READ);
228 byte code0 = code;
229 byte code1 = code >> 8;
230
231 if (code0 != 0 && code0 != 9 && code0 != 0xe0) {
232 key = code0 - '0' + ZC_NUMPAD_MIN;
233 if (key >= ZC_NUMPAD_MIN && key <= ZC_NUMPAD_MAX && code1 >= 0x10)
234 goto exit_loop;
235
236 for (key = ZC_LATIN1_MIN + 1; key <= ZC_LATIN1_MAX; key++) {
237 if (code0 == latin1_to_ibm[key - ZC_LATIN1_MIN])
238 goto exit_loop;
239 }
240 key = code0;
241
242 if (key == ZC_BACKSPACE)
243 goto exit_loop;
244 if (key == ZC_RETURN)
245 goto exit_loop;
246 if (key == ZC_ESCAPE)
247 goto exit_loop;
248 if (key >= ZC_ASCII_MIN && key <= ZC_ASCII_MAX)
249 goto exit_loop;
250 } else {
251 for (key = ZC_ARROW_MIN; key <= ZC_ARROW_MAX; key++) {
252 if (code1 == arrow_key_map[key - ZC_ARROW_MIN])
253 goto exit_loop;
254 }
255
256 for (key = ZC_FKEY_MIN; key <= ZC_FKEY_MAX; key++) {
257 if (code1 == function_key_map[key - ZC_FKEY_MIN])
258 goto exit_loop;
259 }
260
261 for (key = ZC_HKEY_MIN; key <= ZC_HKEY_MAX; key++) {
262 if (code1 == hot_key_map[key - ZC_HKEY_MIN])
263 goto exit_loop;
264 }
265
266 for (key = SPECIAL_KEY_MIN; key <= SPECIAL_KEY_MAX; key++) {
267 if (code1 == special_key_map[key - SPECIAL_KEY_MIN])
268 goto exit_loop;
269 }
270 }
271 } else {
272 int clicks = read_mouse ();
273
274 if (clicks == 1) {
275 key = ZC_SINGLE_CLICK;
276 goto exit_loop;
277 }
278 if (clicks == 2) {
279 key = ZC_DOUBLE_CLICK;
280 goto exit_loop;
281 }
282 }
283
284 key = ZC_TIME_OUT;
285 } while (!out_of_time());
286
287 exit_loop:
288
289 if (z_header.flags & MOUSE_FLAG)
290 dos_mouse_ax(2);
291
292 if (cursor)
293 switch_cursor(FALSE);
294
295 return key;
296 } /* get_key */
297
298
299 /*
300 * cursor_left
301 *
302 * Move the cursor one character to the left.
303 *
304 */
305 static void cursor_left(void)
306 {
307 if (input.pos > 0)
308 cursor_x -= os_char_width(input.buffer[--input.pos]);
309 } /* cursor_left */
310
311
312 /*
313 * cursor_right
314 *
315 * Move the cursor one character to the right.
316 *
317 */
318 static void cursor_right(void)
319 {
320 if (input.pos < input.length)
321 cursor_x += os_char_width(input.buffer[input.pos++]);
322 } /* cursor_right */
323
324
325 /*
326 * first_char
327 *
328 * Move the cursor to the beginning of the input line.
329 *
330 */
331 static void first_char(void)
332 {
333 while (input.pos > 0)
334 cursor_left();
335 } /* first_char */
336
337
338 /*
339 * last_char
340 *
341 * Move the cursor to the end of the input line.
342 *
343 */
344 static void last_char(void)
345 {
346 while (input.pos < input.length)
347 cursor_right();
348
349 } /* last_char */
350
351
352 /*
353 * prev_word
354 *
355 * Move the cursor to the start of the previous word.
356 *
357 */
358 static void prev_word(void)
359 {
360 do {
361 cursor_left();
362 if (input.pos == 0)
363 return;
364 } while (input.buffer[input.pos] == ' ' || input.buffer[input.pos - 1] != ' ');
365 } /* prev_word */
366
367
368 /*
369 * next_word
370 *
371 * Move the cursor to the start of the next word.
372 *
373 */
374 static void next_word(void)
375 {
376 do {
377 cursor_right();
378 if (input.pos == input.length)
379 return;
380 } while (input.buffer[input.pos] == ' ' || input.buffer[input.pos - 1] != ' ');
381 } /* next_word */
382
383
384 /*
385 * input_move
386 *
387 * Helper function to move parts of the input buffer:
388 *
389 * newc != 0, oldc == 0: INSERT
390 * newc != 0, oldc != 0: OVERWRITE
391 * newc == 0, oldc != 0: DELETE
392 * newc == 0, oldc == 0: NO OPERATION
393 *
394 */
395 #define H(x) (x ? 1 : 0)
396 static void input_move(zchar newc, zchar oldc)
397 {
398 int newwidth = (newc != 0) ? os_char_width(newc) : 0;
399 int oldwidth = (oldc != 0) ? os_char_width(oldc) : 0;
400
401 zchar *p = input.buffer + input.pos;
402
403 int saved_x = cursor_x;
404
405 int updated_width = input.width + newwidth - oldwidth;
406 int updated_length = input.length + H (newc) - H (oldc);
407
408 if (updated_width > input.max_width)
409 return;
410 if (updated_length > input.max_length)
411 return;
412
413 input.width = updated_width;
414 input.length = updated_length;
415
416 if (oldc != 0 && newc == 0)
417 memmove(p, p + 1, updated_length - input.pos + 1);
418 if (newc != 0 && oldc == 0)
419 memmove(p + 1, p, updated_length - input.pos);
420
421 if (newc != 0)
422 *p = newc;
423
424 os_display_string(p);
425
426 switch_scrn_attr(TRUE);
427
428 if (oldwidth > newwidth) {
429 os_erase_area (
430 cursor_y + 1,
431 cursor_x + 1,
432 cursor_y + z_header.font_height,
433 cursor_x + oldwidth - newwidth,
434 -1);
435 }
436
437 switch_scrn_attr(FALSE);
438
439 cursor_x = saved_x;
440
441 if (newc != 0)
442 cursor_right();
443 } /* input_move */
444
445
446 #undef H
447
448
449 /*
450 * delete_char
451 *
452 * Delete the character below the cursor.
453 *
454 */
455 static void delete_char(void)
456 {
457 input_move (0, input.buffer[input.pos]);
458 } /* delete_char */
459
460
461 /*
462 * delete_left
463 *
464 * Delete the character to the left of the cursor.
465 *
466 */
467 static void delete_left(void)
468 {
469 if (input.pos > 0) {
470 cursor_left();
471 delete_char();
472 }
473 } /* delete_left */
474
475
476 /*
477 * truncate_line
478 *
479 * Truncate the input line to n characters.
480 *
481 */
482 static void truncate_line(int n)
483 {
484 last_char();
485 while (input.length > n)
486 delete_left();
487 } /* truncate_line */
488
489
490 /*
491 * insert_char
492 *
493 * Insert a character into the input buffer.
494 *
495 */
496 static void insert_char(zchar newc)
497 {
498 zchar oldc = 0;
499
500 if (overwrite)
501 oldc = input.buffer[input.pos];
502
503 input_move(newc, oldc);
504 } /* insert_char */
505
506
507 /*
508 * insert_string
509 *
510 * Add a string of characters to the input line.
511 *
512 */
513 static void insert_string(const zchar *s)
514 {
515 while (*s != 0) {
516 if (input.length + 1 > input.max_length)
517 break;
518 if (input.width + os_char_width (*s) > input.max_width)
519 break;
520 insert_char (*s++);
521 }
522 } /* insert_string */
523
524
525 /*
526 * tabulator_key
527 *
528 * Complete the word at the end of the input line, if possible.
529 *
530 */
531 static void tabulator_key(void)
532 {
533 int status;
534
535 if (input.pos == input.length) {
536 zchar extension[10];
537
538 status = completion(input.buffer, extension);
539 insert_string(extension);
540 } else
541 status = 2;
542
543 /* Beep if the completion was impossible or ambiguous */
544 if (status != 0)
545 os_beep(status);
546 } /* tabulator_key */
547
548
549 /*
550 * store_input
551 *
552 * Copy the current input line to the history buffer.
553 *
554 */
555 static void store_input(void)
556 {
557 if (input.length >= HISTORY_MIN_ENTRY) {
558
559 const zchar *ptr = input.buffer;
560
561 do {
562 if (history.latest++ == HISTORY_BUFSIZE - 1)
563 history.latest = 0;
564
565 history.buffer[history.latest] = *ptr;
566
567 } while (*ptr++ != 0);
568 }
569 } /* store_input */
570
571
572 /*
573 * fetch_entry
574 *
575 * Copy the current history entry to the input buffer and check if it
576 * matches the prefix in the input buffer.
577 *
578 */
579 static bool fetch_entry(zchar *buf, int entry)
580 {
581 int i = 0;
582 zchar c;
583
584 do {
585 if (entry++ == HISTORY_BUFSIZE - 1)
586 entry = 0;
587
588 c = history.buffer[entry];
589
590 if (i < history.prefix_len && input.buffer[i] != c)
591 return FALSE;
592
593 buf[i++] = c;
594 } while (c != 0);
595
596 return (i > history.prefix_len) && (i > 1);
597 } /* fetch_entry */
598
599
600 /*
601 * get_prev_entry
602 *
603 * Copy the previous history entry to the input buffer.
604 *
605 */
606 static void get_prev_entry(void)
607 {
608 zchar buf[INPUT_BUFFER_SIZE];
609
610 int i = history.current;
611
612 do {
613 do {
614 if (i-- == 0)
615 i = HISTORY_BUFSIZE - 1;
616
617 if (i == history.latest)
618 return;
619
620 } while (history.buffer[i] != 0);
621
622 } while (!fetch_entry(buf, i));
623
624 truncate_line(history.prefix_len);
625 insert_string(buf + history.prefix_len);
626 history.current = i;
627 } /* get_prev_entry */
628
629
630 /*
631 * get_next_entry
632 *
633 * Copy the next history entry to the input buffer.
634 *
635 */
636 static void get_next_entry(void)
637 {
638 zchar buf[INPUT_BUFFER_SIZE];
639
640 int i = history.current;
641
642 truncate_line(history.prefix_len);
643
644 do {
645 do {
646 if (i == history.latest)
647 return;
648
649 if (i++ == HISTORY_BUFSIZE - 1)
650 i = 0;
651 } while (history.buffer[i] != 0);
652 if (i == history.latest)
653 goto no_further;
654 } while (!fetch_entry (buf, i));
655
656 insert_string(buf + history.prefix_len);
657
658 no_further:
659 history.current = i;
660
661 } /* get_next_entry */
662
663
664 /*
665 * os_read_line
666 *
667 * Read a line of input from the keyboard into a buffer. The buffer
668 * may already be primed with some text. In this case, the "initial"
669 * text is already displayed on the screen. After the input action
670 * is complete, the function returns with the terminating key value.
671 * The length of the input should not exceed "max" characters plus
672 * an extra 0 terminator.
673 *
674 * Terminating keys are the return key (13) and all function keys
675 * (see the Specification of the Z-machine) which are accepted by
676 * the is_terminator function. Mouse clicks behave like function
677 * keys except that the mouse position is stored in global variables
678 * "mouse_x" and "mouse_y" (top left coordinates are (1,1)).
679 *
680 * Furthermore, Frotz introduces some special terminating keys:
681 *
682 * ZC_HKEY_PLAYBACK (Alt-P)
683 * ZC_HKEY_RECORD (Alt-R)
684 * ZC_HKEY_SEED (Alt-S)
685 * ZC_HKEY_UNDO (Alt-U)
686 * ZC_HKEY_RESTART (Alt-N, "new game")
687 * ZC_HKEY_QUIT (Alt-X, "exit game")
688 * ZC_HKEY_DEBUGGING (Alt-D)
689 * ZC_HKEY_HELP (Alt-H)
690 *
691 * If the timeout argument is not zero, the input gets interrupted
692 * after timeout/10 seconds (and the return value is 0).
693 *
694 * The complete input line including the cursor must fit in "width"
695 * screen units.
696 *
697 * The function may be called once again to continue after timeouts,
698 * misplaced mouse clicks or hot keys. In this case the "continued"
699 * flag will be set. This information can be useful if the interface
700 * implements input line history.
701 *
702 * The screen is not scrolled after the return key was pressed. The
703 * cursor is at the end of the input line when the function returns.
704 *
705 * Since Inform 2.2 the helper function "completion" can be called
706 * to implement word completion (similar to tcsh under Unix).
707 *
708 */
709
710 #define new_history_search() \
711 { history.prefix_len = input.pos; history.current = history.latest; }
712
713 zchar os_read_line(int max, zchar *buf, int timeout, int width, int continued)
714 {
715 int key = continued ? 9999 : 0;
716
717 /* Initialise input variables */
718 input.buffer = buf;
719 input.pos = strlen((char *) buf);
720 input.length = strlen((char *) buf);
721 input.max_length = max;
722 input.width = os_string_width(buf);
723 input.max_width = width - os_char_width(' ');
724
725 /* Calculate time limit */
726 set_timer (timeout);
727
728 /* Loop until a terminator is found */
729 do {
730 if (key != 9999)
731 new_history_search();
732
733 /* Get next key from mouse or keyboard */
734 key = get_key (TRUE);
735
736 if (key < ZC_ASCII_MIN || key > ZC_ASCII_MAX && key < ZC_LATIN1_MIN || key > ZC_LATIN1_MAX) {
737 /* Ignore time-outs if the cursor is not at end of the line */
738 if (key == ZC_TIME_OUT && input.pos < input.length)
739 key = 9999;
740
741 /* Backspace, return and escape keys */
742 if (key == ZC_BACKSPACE)
743 delete_left();
744 if (key == ZC_RETURN)
745 store_input();
746 if (key == ZC_ESCAPE)
747 truncate_line(0);
748
749 /* Editing keys */
750 if (cwin == 0) {
751 if (key == ZC_ARROW_UP)
752 get_prev_entry();
753 if (key == ZC_ARROW_DOWN)
754 get_next_entry();
755 if (key == ZC_ARROW_LEFT)
756 cursor_left();
757 if (key == ZC_ARROW_RIGHT)
758 cursor_right();
759 if (key >= ZC_ARROW_MIN && key <= ZC_ARROW_MAX)
760 key = 9999;
761 if (key == SPECIAL_KEY_HOME)
762 first_char();
763 if (key == SPECIAL_KEY_END)
764 last_char();
765 if (key == SPECIAL_KEY_WORD_LEFT)
766 prev_word();
767 if (key == SPECIAL_KEY_WORD_RIGHT)
768 next_word();
769 if (key == SPECIAL_KEY_DELETE)
770 delete_char();
771 if (key == SPECIAL_KEY_INSERT)
772 overwrite = !overwrite;
773 if (key == SPECIAL_KEY_TAB)
774 tabulator_key();
775 }
776 if (key == SPECIAL_KEY_PAGE_UP)
777 key = ZC_ARROW_UP;
778 if (key == SPECIAL_KEY_PAGE_DOWN)
779 key = ZC_ARROW_DOWN;
780 } else
781 insert_char(key);
782 } while (key > 0xff || !is_terminator(key));
783
784 last_char();
785
786 overwrite = FALSE;
787
788 /* Return terminating key */
789 return key;
790 } /* os_read_line */
791
792
793 #undef new_history_search
794
795 /*
796 * os_read_key
797 *
798 * Read a single character from the keyboard (or a mouse click) and
799 * return it. Input aborts after timeout/10 seconds.
800 *
801 */
802 zchar os_read_key(int timeout, bool cursor)
803 {
804 int key;
805
806 set_timer(timeout);
807
808 do {
809 key = get_key(cursor);
810 } while (key > 0xff);
811
812 return key;
813 } /* os_read_key */
814
815
816 /*
817 * os_read_file_name
818 *
819 * Return the name of a file. Flag can be one of:
820 *
821 * FILE_SAVE - Save game file
822 * FILE_RESTORE - Restore game file
823 * FILE_SCRIPT - Transscript file
824 * FILE_RECORD - Command file for recording
825 * FILE_PLAYBACK - Command file for playback
826 * FILE_SAVE_AUX - Save auxilary ("preferred settings") file
827 * FILE_LOAD_AUX - Load auxilary ("preferred settings") file
828 *
829 * The length of the file name is limited by MAX_FILE_NAME. Ideally
830 * an interpreter should open a file requester to ask for the file
831 * name. If it is unable to do that then this function should call
832 * print_string and read_string to ask for a file name.
833 *
834 */
835
836 char *os_read_file_name (const char *default_name, int flag)
837 {
838 char *extension;
839 FILE *fp;
840 bool terminal;
841 bool result;
842
843 bool saved_replay = istream_replay;
844 bool saved_record = ostream_record;
845
846 int i;
847 char *tempname;
848 char file_name[FILENAME_MAX + 1];
849
850 /* Turn off playback and recording temporarily */
851 istream_replay = FALSE;
852 ostream_record = FALSE;
853
854 /* Select appropriate extension */
855 extension = ".aux";
856
857 if (flag == FILE_SAVE || flag == FILE_RESTORE)
858 extension = ".sav";
859 if (flag == FILE_SCRIPT)
860 extension = ".scr";
861 if (flag == FILE_RECORD || flag == FILE_PLAYBACK)
862 extension = ".rec";
863
864 /* Input file name (reserve four bytes for a file name extension) */
865 print_string("Enter file name (\"");
866 print_string(extension);
867 print_string("\" will be added).\nDefault is \"");
868 print_string(default_name);
869 print_string("\": ");
870
871 read_string(MAX_FILE_NAME - 4, (zchar *) file_name);
872
873 /* Use the default name if nothing was typed */
874 if (file_name[0] == 0)
875 strcpy(file_name, default_name);
876 if (strchr(file_name, '.') == NULL)
877 strcat(file_name, extension);
878
879 /* FIXME: UNTESTED Check if we're restricted to one directory. */
880 if (f_setup.restricted_path != NULL) {
881 for (i = strlen(file_name); i > 0; i--) {
882 if (file_name[i] == PATH_SEPARATOR) {
883 i++;
884 break;
885 }
886 }
887 tempname = strdup(file_name + i);
888 strcpy(file_name, f_setup.restricted_path);
889 if (file_name[strlen(file_name)-1] != PATH_SEPARATOR) {
890 strcat(file_name, "\\");
891 }
892 strcat(file_name, tempname);
893 }
894
895 /* Make sure it is safe to use this file name */
896 result = TRUE;
897
898 /* OK if the file is opened for reading */
899 if (flag != FILE_SAVE && flag != FILE_SAVE_AUX && flag != FILE_RECORD)
900 goto finished;
901
902 /* OK if the file does not exist */
903 if ((fp = fopen(file_name, "rb")) == NULL)
904 goto finished;
905
906 /* OK if this is a pseudo-file (like PRN, CON, NUL) */
907 terminal = isatty(fileno(fp));
908
909 fclose(fp);
910
911 if (terminal)
912 goto finished;
913
914 /* OK if user wants to overwrite */
915 result = read_yes_or_no ("Overwrite existing file");
916
917 finished:
918
919 /* Restore state of playback and recording */
920 istream_replay = saved_replay;
921 ostream_record = saved_record;
922
923 if (!result)
924 return NULL;
925
926 return strdup(file_name);
927 } /* os_read_file_name */
928
929
930 /*
931 * Called regularly by the interpreter, at least every few instructions
932 * (only when interpreting: e.g., not when waiting for input).
933 */
934 void os_tick(void)
935 {
936 /* do nothing */
937 }
0 /*
1 * owmouse.h - DOS interface (Open Watcom version), mouse support
2 *
3 * This file is part of Frotz.
4 *
5 * Frotz is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * Frotz is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 * Or visit http://www.fsf.org/
19 */
20
21 #include <dos.h>
22 #include "frotz.h"
23 #include "owfrotz.h"
24
25 /*
26 * detect_mouse
27 *
28 * Return true if a mouse driver is present.
29 *
30 */
31 bool detect_mouse(void)
32 {
33 return dos_mouse_ax(0);
34 } /* detect_mouse */
35
36
37 /*
38 * read_mouse
39 *
40 * Report any mouse clicks. Return 2 for a double click, 1 for a single
41 * click or 0 if there was no mouse activity at all.
42 *
43 */
44 int read_mouse(void)
45 {
46 int click;
47
48 /* Read the current mouse status */
49 for (click = 0; click < 2; click++) {
50 union {
51 __int64 i;
52 struct {
53 int y, x, released;
54 } s;
55 } u;
56 int released, x, y;
57
58 if (click == 1)
59 delay(222);
60
61 /* Capture the returned bx, cx, and dx values all in a
62 single scalar value... */
63 u.i = dos_mouse_ax_bx(6, 0);
64 released = u.s.released;
65 x = u.s.x;
66 y = u.s.y;
67
68 if (released == 0)
69 break;
70
71 mouse_x = x;
72 mouse_y = y;
73
74 if (display <= _TEXT_) {
75 mouse_x /= 8;
76 mouse_y /= 8;
77 }
78
79 if (display == _MCGA_)
80 mouse_x /= 2;
81
82 mouse_x++;
83 mouse_y++;
84 }
85
86 /* Return single or double click */
87 return click;
88 } /* read_mouse */
0 /*
1 * owpic.c - DOS interface (Open Watcom version), picture functions
2 *
3 * This file is part of Frotz.
4 *
5 * Frotz is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * Frotz is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 * Or visit http://www.fsf.org/
19 */
20
21 #include <malloc.h>
22 #include <conio.h>
23 #include <dos.h>
24 #include <stdio.h>
25 #include <string.h>
26 #include "frotz.h"
27 #include "owfrotz.h"
28
29 #define PIC_NUMBER 0
30 #define PIC_WIDTH 2
31 #define PIC_HEIGHT 4
32 #define PIC_FLAGS 6
33 #define PIC_DATA 8
34 #define PIC_COLOUR 11
35
36 #define READ_BYTE(v,p,o) ((v) = *(byte _huge *)((p) + (o)))
37 #define READ_WORD(v,p,o) ((v) = *(word _huge *)((p) + (o)))
38
39 extern volatile byte _far *get_scrnptr (int);
40
41 extern FILE *os_path_open(const char *, const char *);
42
43 static struct {
44 byte fileno;
45 byte flags;
46 word unused1;
47 word images;
48 word link;
49 byte entry_size;
50 byte padding;
51 word checksum;
52 word unused2;
53 word version;
54 } gheader;
55
56 int scaler = 1;
57
58 static word pic_width = 0;
59 static word pic_height = 0;
60 static word pic_flags = 0;
61 static long pic_data = 0;
62 static long pic_colour = 0;
63
64 static byte _far *table_val = NULL;
65 static word _far *table_ref = NULL;
66
67 static FILE *file = NULL;
68 static byte _huge *info = NULL;
69
70
71 /*
72 * open_graphics_file
73 *
74 * Open a graphics file. EGA pictures may be stored in two separate
75 * graphics files.
76 *
77 */
78 static bool open_graphics_file(int number)
79 {
80 char fname[MAX_FILE_NAME + 1];
81 char extension[4 + 1];
82 word images;
83 byte entry_size;
84 byte _huge *p;
85
86 /* Build graphics file name */
87 extension[0] = '.';
88 extension[1] = "cmem"[display - 2];
89 extension[2] = 'g';
90 extension[3] = '0' + number;
91 extension[4] = 0;
92
93 /* Why does DOS not like "graphics\\" anymore? */
94 strcpy(fname, "graphics/");
95 strcat(fname, f_setup.story_name);
96 strcat(fname, extension);
97
98 /* Open file, load header, allocate memory, load picture directory */
99 if ((file = fopen(fname, "rb")) == NULL)
100 goto failure1;
101 if (fread(&gheader, sizeof(gheader), 1, file) != 1)
102 goto failure2;
103 images = gheader.images;
104 entry_size = gheader.entry_size;
105 if ((info = halloc((long)images * entry_size, 1)) == NULL)
106 goto failure2;
107 p = info;
108 while (images != 0) {
109 if (fread((void _far *)info, gheader.entry_size, 1, file) != 1)
110 goto failure3;
111 p += entry_size;
112 --images;
113 }
114 return TRUE;
115
116 failure3:
117 hfree(info);
118 info = NULL;
119
120 failure2:
121 fclose(file);
122 file = NULL;
123
124 failure1:
125 return FALSE;
126
127 } /* open_graphics_file */
128
129
130 /*
131 * close_graphics_file
132 *
133 * Free resources allocated for pictures.
134 *
135 */
136 static void close_graphics_file(void)
137 {
138 if (file != NULL) {
139 fclose(file);
140 file = NULL;
141 }
142 if (info != NULL) {
143 hfree(info);
144 info = NULL;
145 }
146
147 } /* close_graphics_file */
148
149
150 /*
151 * init_pictures
152 *
153 * Prepare to draw pictures. Return true if pictures are available.
154 *
155 */
156 bool init_pictures(void)
157 {
158
159 /* Allocate memory for decompression */
160 table_val = (byte _far *) _fmalloc(3 * 3840);
161 table_ref = (word _far *) (table_val + 3840);
162
163 if (table_val == NULL)
164 return FALSE;
165
166 /* Open the [first of two] graphics file[s] */
167 return open_graphics_file(1);
168
169 } /* init_pictures */
170
171
172 /*
173 * reset_pictures
174 *
175 * Free resources allocated for decompression of pictures.
176 *
177 */
178 void reset_pictures(void)
179 {
180 if (table_val != NULL) {
181 _ffree(table_val);
182 table_val = NULL;
183 }
184 if (file != NULL) {
185 fclose(file);
186 file = NULL;
187 }
188 if (info != NULL) {
189 hfree(info);
190 info = NULL;
191 }
192
193 } /* reset_pictures */
194
195
196 /*
197 * load_picture_info
198 *
199 * Helper function for os_picture_data. Load all information about
200 * the given picture from the graphics file and store it in global
201 * variables.
202 *
203 */
204 static bool load_picture_info(int picture)
205 {
206 byte _huge *ptr;
207 byte fileno;
208
209 fileno = gheader.fileno;
210
211 do {
212 int i;
213
214 /* Abort if there is a problem with the graphics file */
215 if (file == NULL)
216 return FALSE;
217
218 /* Scan the directory of the current graphics file */
219 ptr = info;
220 for (i = 0; i < gheader.images; i++) {
221 if (picture == *(int far *)ptr) {
222 READ_WORD(pic_width, ptr, PIC_WIDTH);
223 READ_WORD(pic_height, ptr, PIC_HEIGHT);
224 READ_WORD(pic_flags, ptr, PIC_FLAGS);
225
226 pic_height *= scaler;
227 pic_width *= scaler;
228
229 READ_BYTE(byte0(pic_data), ptr, PIC_DATA + 2);
230 READ_BYTE(byte1(pic_data), ptr, PIC_DATA + 1);
231 READ_BYTE(byte2(pic_data), ptr, PIC_DATA);
232
233 if (gheader.entry_size > PIC_COLOUR + 2) {
234 READ_BYTE(byte0(pic_colour), ptr,
235 PIC_COLOUR + 2);
236 READ_BYTE(byte1(pic_colour), ptr,
237 PIC_COLOUR + 1);
238 READ_BYTE(byte2(pic_colour), ptr,
239 PIC_COLOUR);
240 } else
241 pic_colour = 0;
242
243 return TRUE;
244 }
245 ptr += gheader.entry_size;
246 }
247
248 /* Close current graphics file */
249 close_graphics_file();
250
251 /* Open next graphics file */
252 open_graphics_file((gheader.link !=
253 0) ? gheader.fileno + 1 : 1);
254
255 } while (fileno != gheader.fileno);
256
257 return FALSE;
258 } /* load_picture_info */
259
260
261 /*
262 * load_colour_map
263 *
264 * Helper function for os_draw_picture. Load a colour map from the
265 * graphics file then copy it to the palette registers.
266 *
267 */
268 static void load_colour_map(int first_colour)
269 {
270 byte rgb[42];
271 int n, i;
272
273 fseek(file, pic_colour, SEEK_SET);
274
275 /* Some pictures from Arthur mistakenly claim to have 16 colours */
276 if ((n = fgetc(file)) == 16)
277 n = 14;
278
279 /* Each colour is stored in three bytes R-G-B */
280 fread(rgb, 3, n, file);
281
282 /* MCGA boards can only handle R-G-B values from 0 to 63 */
283 for (i = 0; i < 42; i++)
284 rgb[i] = (rgb[i] * 63 + 128) / 255;
285
286 /* Synchronise with vertical retrace */
287 while ((inp(0x03da) & 8) == 0) ;
288 while ((inp(0x03da) & 8) == 8) ;
289
290 /* Copy colours to palette registers */
291 bios_video_ax_bx_cx_esdx(0x1012, first_colour, n, rgb);
292 } /* load_colour_map */
293
294
295 /*
296 * draw_picture
297 *
298 * Helper function for os_draw_picture. The real work of drawing a
299 * picture happens here.
300 *
301 */
302 #pragma warn -def
303 static void draw_picture(int y, int x)
304 {
305 static int raise_bits[4] = {
306 0x0100, 0x0300, 0x0700, 0x0000
307 };
308
309 byte buf[512];
310 volatile byte _far *screen;
311 byte transparent;
312 byte colour_shift;
313 int first_colour;
314 int code, prev_code;
315 int next_entry;
316 int bits_per_code;
317 int bits_shift;
318 int bits;
319 int current_y;
320 int current_x;
321 int bufpos;
322 int pixels;
323 int i;
324
325 bufpos = 0;
326
327 /* When the given picture provides a colour map then activate it.
328 This is only used for MCGA pictures; the colour map affects
329 every picture on the screen. The first colour to be defined is
330 colour 2. Every map defines up to 14 colours (colour 2 to 15).
331 These colours are not related to the standard Z-machine colour
332 scheme which remains unchanged. (This is based on the Amiga
333 interpreter which had to work with 16 colours. Colours 0 and 1
334 were used for text; changing the text colours actually changed
335 palette entries 0 and 1. This interface uses the same trick in
336 Amiga mode.) */
337 if (display == _CGA_)
338 colour_shift = -2;
339 if (display == _EGA_)
340 colour_shift = 0;
341 if (display == _MCGA_) {
342 colour_shift = 32;
343 first_colour = 34;
344 }
345 if (display == _AMIGA_) {
346 colour_shift = -1;
347 first_colour = 65;
348 }
349
350 if (pic_colour != 0)
351 load_colour_map(first_colour);
352
353 fseek(file, pic_data, SEEK_SET);
354
355 /* Bit 0 of "flags" indicates that the picture uses a transparent
356 colour, the top four bits tell us which colour it is. For CGA
357 and MCGA pictures this is always 0; for EGA pictures it can be
358 any colour between 0 and 15. */
359 transparent = 0xff;
360
361 if (pic_flags & 1)
362 transparent = pic_flags >> 12;
363
364 /* Prepare EGA hardware for setting pixels */
365 if (display >= _EGA_) {
366 outpw(0x03ce, 0x0205);
367 outpw(0x03ce, 0xff08);
368 }
369
370 /* The uncompressed picture is a long sequence of bytes. Every
371 byte holds the colour of a pixel, starting at the top left,
372 stopping at the bottom right. We keep track of our position
373 in the current line. (There is a special case: CGA pictures
374 with no transparent colour are stored as bit patterns, i.e.
375 every byte holds the pattern for eight pixels. A pixel must
376 be white if the corresponding bit is set, otherwise it must
377 be black.) */
378 current_x = x + pic_width;
379 current_y = y - 1;
380 screen = get_scrnptr(current_y);
381
382 /* The compressed picture is a stream of bits. We read the file
383 byte-wise, storing the current byte in the variable "bits".
384 Several bits make one code; the variable "bits_shift" helps
385 us to build the next code. */
386 bits_shift = 0;
387 bits = 0;
388
389 reset_table:
390
391 /* Clear the table. We use a table of 3840 entries. Each entry
392 consists of both a value and a reference to another table
393 entry. Following these references we get a sequence of
394 values. At the start of decompression all table entries are
395 undefined. Later we see how entries are set and used. */
396 next_entry = 1;
397
398 /* At the start of decompression 9 bits make one code; during
399 the process this can rise to 12 bits per code. 9 bits are
400 sufficient to address both 256 literal values and 256 table
401 entries; 12 bits are sufficient to address both 256 literal
402 values and all 3840 table entries. The number of bits per
403 code rises with the number of table entries. When the table
404 is cleared, the number of bits per code drops back to 9. */
405 bits_per_code = 9;
406
407 next_code:
408
409 /* Read the next code from the graphics file. This requires
410 some confusing bit operations. Note that low bits always
411 come first. Usually there are a few bits left over from
412 the previous code; these bits must be used before further
413 bits are read from the graphics file. */
414 code = bits >> (8 - bits_shift);
415
416 do {
417 bits = fgetc(file);
418 code |= bits << bits_shift;
419 bits_shift += 8;
420 } while (bits_shift < bits_per_code);
421
422 bits_shift -= bits_per_code;
423 code &= 0xfff >> (12 - bits_per_code);
424
425 /* There are two codes with a special meaning. The first one
426 is 256 which clears the table and sets the number of bits
427 per code to 9. (This is necessary when the table is full.)
428 The second one is 257 which marks the end of the picture.
429 For the sake of efficiency, we decrement the code by 256. */
430 code -= 256;
431
432 if (code == 0)
433 goto reset_table;
434 if (code == 1)
435 return;
436
437 /* Codes from 0 to 255 are literals, i.e. they represent a
438 plain byte value. Codes from 258 onwards are references
439 to table entries, i.e. they represent a sequence of byte
440 values (see the remarks on the table above). This means
441 that for each code one or several byte values are added
442 to the decompressed picture. But there is yet more work
443 to do: Every time we read a code one table entry is set.
444 As we said above, a table entry consist of both a value
445 and a reference to another table entry. If the current
446 code is a literal, then the value has to be set to this
447 literal; but if the code refers to a sequence of byte
448 values, then the value has to be set to the last byte of
449 this sequence. In any case, the reference is set to the
450 previous code. Finally, one should be aware that a code
451 may legally refer to the table entry which is currently
452 being set. This requires some extra care. */
453 table_ref[next_entry] = prev_code;
454
455 prev_code = code;
456
457 while (code >= 0) {
458 buf[bufpos++] = table_val[code];
459 code = (short)table_ref[code];
460 }
461
462 if (next_entry == prev_code)
463 buf[0] = code;
464
465 table_val[next_entry] = code;
466
467 /* The number of bits per code is incremented when the current
468 number of bits no longer suffices to address all defined
469 table entries; but in any case the number of bits may never
470 be greater than 12. */
471 next_entry++;
472
473 if (next_entry == raise_bits[bits_per_code - 9])
474 bits_per_code++;
475
476 reverse_buffer:
477
478 /* Append the sequence of byte values (pixels) to the picture.
479 The order of the sequence must be reversed. (This is why we
480 have stored the sequence in a buffer; experiments show that
481 a buffer of 512 bytes suffices.) The sequence of values may
482 spread over several lines of the picture, so we must take
483 care to start a new line when we reach the right border of
484 the picture. */
485 if (current_x == x + pic_width) {
486 screen = get_scrnptr(current_y);
487 current_x -= pic_width;
488 current_y += scaler;
489 }
490
491 /* Either add a single pixel or a pattern of eight bits (b/w
492 CGA pictures without a transparent colour) to the current
493 line. Increment our position by 1 or 8 respectively. The
494 pixel may have to be painted several times if the scaling
495 factor is greater than one. */
496 if (display == _CGA_ && transparent == 0xff) {
497 pixels = x + pic_width - current_x;
498 if (pixels > 8)
499 pixels = 8;
500
501 _asm {
502 les bx, screen
503 mov dx, current_x
504 dec dx
505 push dx
506 mov cl, 3
507 shr dx, cl
508 add bx, dx
509 mov ax, es:[bx]
510 mov dx, 0xffff
511 mov cl, byte ptr pixels
512 shr dl, cl
513 pop cx
514 and cl, 7
515 ror dx, cl
516 and ax, dx
517 mov dx, code
518 inc dh
519 ror dx, cl
520 or ax, dx
521 mov es:[bx], ax
522 }
523
524 current_x += pixels;
525 } else for (i = 0; i < scaler; i++) {
526 _asm {
527 mov ah, byte ptr code
528 cmp ah, transparent
529 jz L4
530 add ah, colour_shift
531 les bx, screen
532 mov dx, current_x
533 dec dx
534 mov si, display
535 cmp si, _MCGA_
536 jz L2
537 push dx
538 mov cl, 3
539 shr dx, cl
540 pop cx
541 and cl, 7
542 add bx, dx
543 mov al, es:[bx]
544 cmp si, _CGA_
545 jnz L1
546 mov dl, 0x7f
547 ror dl, cl
548 and al, dl
549 xor ah, 1
550 ror ah, 1
551 shr ah, cl
552 or ah, al
553 jmp L3
554 L1: mov al, 0x80
555 shr al, cl
556 mov dx, 0x03cf
557 out dx, al
558 jmp L3
559 L2: add bx, dx
560 L3: mov es:[bx], ah
561 cmp si, _AMIGA_
562 jnz L4
563 add bx, 80
564 mov al, es:[bx]
565 mov es:[bx], ah
566 L4:
567 }
568 current_x++;
569 }
570
571 /* If there are no more values in the buffer then read the
572 next code from the file. Otherwise fetch the next byte
573 value from the buffer and continue painting the picture. */
574 if (bufpos == 0)
575 goto next_code;
576
577 code = buf[--bufpos];
578
579 goto reverse_buffer;
580 } /* draw_picture */
581
582 #pragma warn +def
583
584 /*
585 * os_draw_picture
586 *
587 * Display a picture at the given coordinates. Top left is (1,1).
588 *
589 */
590 void os_draw_picture(int picture, int y, int x)
591 {
592 if (load_picture_info(picture))
593 draw_picture(y, x);
594
595 } /* os_draw_picture */
596
597
598 /*
599 * os_peek_colour
600 *
601 * Return the colour of the pixel below the cursor. This is used
602 * by V6 games to print text on top of pictures. The coulor need
603 * not be in the standard set of Z-machine colours. To handle
604 * this situation, Frotz extends the colour scheme: Values above
605 * 15 (and below 256) may be used by the interface to refer to
606 * non-standard colours. Of course, os_set_colour must be able to
607 * deal with these colours. Interfaces which refer to characters
608 * instead of pixels might return the current background colour
609 * instead.
610 *
611 */
612 int os_peek_colour(void)
613 {
614 if (display >= _CGA_)
615 return (int)(byte)bios_video_ah_bh_cx_dx(13, 0,
616 cursor_x, cursor_y) + 16;
617 else
618 return current_bg;
619 } /* os_peek_colour */
620
621
622 /*
623 * os_picture_data
624 *
625 * Return true if the given picture is available. If so, write the
626 * width and height of the picture into the appropriate variables.
627 * Only when picture 0 is asked for, write the number of available
628 * pictures and the release number instead.
629 *
630 */
631
632 bool os_picture_data(int picture, int *height, int *width)
633 {
634 bool avail;
635
636 if (picture == 0) {
637 avail = FALSE;
638
639 /* This is the special case mentioned above. In practice, only
640 the release number is used; and even this is only used by
641 the DOS version of "Zork Zero". Infocom's Amiga interpreter
642 could not handle this feature, and the Amiga version of the
643 story file does not use it. */
644
645 pic_height = gheader.images;
646 pic_width = gheader.version;
647
648 } else
649 avail = load_picture_info(picture);
650
651 *height = pic_height;
652 *width = pic_width;
653
654 return avail;
655 } /* os_picture_data */
0 /*
1 * file "owsample.c"
2 *
3 * Open Watcom C front end, sound support
4 *
5 */
6
7 #include <malloc.h>
8 #include <conio.h>
9 #include <dos.h>
10 #include <stdlib.h>
11 #include <stdio.h>
12 #include <string.h>
13 #include "frotz.h"
14 #include "owfrotz.h"
15
16 #ifdef SOUND_SUPPORT
17
18 #define SWAP_BYTES(v) { (v) = bswap16(v); }
19
20 #define READ_DSP(v) {while(!inp(sound_adr+14)&0x80);(v)=inp(sound_adr+10);}
21 #define WRITE_DSP(v) {while(inp(sound_adr+12)&0x80);outp(sound_adr+12,(v));}
22
23 extern void end_of_sound(void);
24
25 static struct {
26 word prefix;
27 byte repeats;
28 byte base_note;
29 word frequency;
30 word unused;
31 word length;
32 } sheader;
33
34 static int current_sample = 0;
35
36 static void interrupt(*vect) (void) = NULL;
37
38 static int play_part = 0;
39 static int play_count = 0;
40
41 static word sound_adr = 0;
42 static word sound_irq = 0;
43 static word sound_dma = 0;
44 static word sound_int = 0;
45 static word sound_ver = 0;
46
47 static byte _huge *sample_data = NULL;
48
49 static long sample_adr1 = 0;
50 static long sample_adr2 = 0;
51 static word sample_len1 = 0;
52 static word sample_len2 = 0;
53
54 /*
55 * start_of_dma
56 *
57 * Start the DMA transfer to the sound board.
58 *
59 */
60 static void start_of_dma(long address, unsigned length)
61 {
62 static unsigned dma_page_port[] = {
63 0x87, 0x83, 0x81, 0x82
64 };
65
66 length--;
67
68 /* Set up DMA chip */
69 outp(0x0a, 0x04 | sound_dma);
70 outp(0x0c, 0x00);
71 outp(0x0b, 0x48 | sound_dma);
72 outp(2 * sound_dma, byte0(address));
73 outp(2 * sound_dma, byte1(address));
74 outp(dma_page_port[sound_dma], byte2(address));
75 outp(2 * sound_dma + 1, byte0(length));
76 outp(2 * sound_dma + 1, byte1(length));
77 outp(0x0a, sound_dma);
78
79 /* Play 8-bit mono sample */
80 WRITE_DSP(0x14)
81 WRITE_DSP(byte0(length))
82 WRITE_DSP(byte1(length))
83 } /* start_of_dma */
84
85
86 /*
87 * end_of_dma
88 *
89 * This function is called when a hardware interrupt signals the
90 * end of the current sound. We may have to play the second half
91 * of the sound effect, or we may have to repeat it, or call the
92 * end_of_sound function when we are finished.
93 *
94 */
95 static void interrupt end_of_dma(void)
96 {
97 /* Play the second half, play another cycle or finish */
98 if (play_part == 1 && sample_len2 != 0) {
99 play_part = 2;
100 start_of_dma(sample_adr2, sample_len2);
101 } else if (play_count == 255 || --play_count != 0) {
102 play_part = 1;
103 start_of_dma(sample_adr1, sample_len1);
104 } else {
105 play_part = 0;
106 end_of_sound();
107 }
108
109 /* Tell interrupt controller(s) + sound board we are done */
110 outp(0x20, 0x20);
111
112 if (sound_irq >= 8)
113 outp(0xa0, 0x20);
114
115 inp(sound_adr + 14);
116 } /* end_of_dma */
117
118
119 /*
120 * dos_init_sound
121 *
122 * Initialise the sound board and various sound related variables.
123 *
124 */
125 bool dos_init_sound(void)
126 {
127 const char *settings;
128 word irc_mask_port;
129
130 /* Read the IRQ, port address, DMA channel and SB version */
131 if ((settings = getenv("BLASTER")) == NULL)
132 return FALSE;
133
134 sound_irq = dectoi(strchr(settings, 'I') + 1);
135 sound_adr = hextoi(strchr(settings, 'A') + 1);
136 sound_dma = dectoi(strchr(settings, 'D') + 1);
137 sound_ver = dectoi(strchr(settings, 'T') + 1);
138
139 /* Reset mixer chip and DSP */
140 outp(sound_adr + 4, 0);
141 outp(sound_adr + 5, 0);
142
143 outp(sound_adr + 6, 1);
144 inp(sound_adr + 6);
145 inp(sound_adr + 6);
146 inp(sound_adr + 6);
147 outp(sound_adr + 6, 0);
148
149 /* Turn on speakers */
150 WRITE_DSP(0xd1)
151 /* Install the end_of_dma interrupt */
152 if (sound_irq < 8) {
153 irc_mask_port = 0x21;
154 sound_int = 0x08 + sound_irq;
155 } else {
156 irc_mask_port = 0xa1;
157 sound_int = 0x68 + sound_irq;
158 }
159
160 vect = _dos_getvect(sound_int);
161 _dos_setvect(sound_int, end_of_dma);
162
163 /* Allocate 64KB RAM for sample data */
164 if ((sample_data = (byte _huge *) halloc(0x10000L, 1)) == NULL)
165 return FALSE;
166
167 word0(sample_adr1) = FP_OFF(sample_data) | (FP_SEG(sample_data) << 4);
168 word1(sample_adr1) = FP_SEG(sample_data) >> 12;
169 word0(sample_adr2) = 0;
170 word1(sample_adr2) = word1(sample_adr1) + 1;
171
172 /* Enable the end_of_dma interrupt */
173 outp(0x20, 0x20);
174
175 if (sound_irq >= 8)
176 outp(0xa0, 0x20);
177
178 outp(irc_mask_port,
179 inp(irc_mask_port) & ~(1 << (sound_irq & 7)));
180
181 /* Indicate success */
182 return TRUE;
183
184 } /* init_sound */
185
186
187 /*
188 * dos_reset_sound
189 *
190 * Free resources allocated for playing samples.
191 *
192 */
193 void dos_reset_sound(void)
194 {
195 os_stop_sample(0);
196
197 if (sample_data != NULL) {
198 hfree(sample_data);
199 sample_data = NULL;
200 }
201 if (sound_adr != 0) {
202 _dos_setvect(sound_int, vect);
203 sound_adr = 0;
204 }
205
206 } /* dos_reset_sound */
207
208 #endif /* SOUND_SUPPORT */
209
210
211 /*
212 * os_beep
213 *
214 * Play a beep sound. Ideally, the sound should be high- (number == 1)
215 * or low-pitched (number == 2).
216 *
217 */
218 void os_beep(int number)
219 {
220 word T = 888 * number;
221
222 outp(0x43, 0xb6);
223 outp(0x42, lo(T));
224 outp(0x42, hi(T));
225 outp(0x61, inp(0x61) | 3);
226
227 delay(75);
228
229 outp(0x61, inp(0x61) & ~3);
230 } /* os_beep */
231
232 /*
233 * os_init_sound
234 *
235 * Dummy function to satisfy the core code. DOS Frotz does its sound
236 * initialization in bcinit.c in os_init_screen().
237 *
238 * FIXME: Move the sound initlization from os_init_screen() to here and
239 * somehow work around the ifs.
240 *
241 */
242 void os_init_sound(void)
243 {
244 /* do nothing */
245 }
246
247 /*
248 * os_prepare_sample
249 *
250 * Load the sample from the disk.
251 *
252 */
253 void os_prepare_sample(int number)
254 {
255 #ifdef SOUND_SUPPORT
256
257 os_stop_sample(0);
258
259 /* Exit if the sound board isn't set up properly */
260 if (sample_data == NULL)
261 return;
262 if (sound_adr == 0)
263 return;
264
265 /* Continue only if the desired sample is not already present */
266 if (current_sample != number) {
267
268 char sample_name[MAX_FILE_NAME + 1];
269 char numstr[2];
270 FILE *fp;
271
272 /* Build sample file name */
273 strcpy(sample_name, "sound/");
274
275 numstr[0] = '0' + number / 10;
276 numstr[1] = '0' + number % 10;
277
278 strncat(sample_name, f_setup.story_name, 6);
279 strncat(sample_name, numstr, 2);
280 strncat(sample_name, ".snd", 4);
281
282 /* Open sample file */
283 if ((fp = fopen(sample_name, "rb")) == NULL)
284 return;
285
286 /* Load header and sample data */
287 fread(&sheader, sizeof(sheader), 1, fp);
288
289 SWAP_BYTES(sheader.frequency)
290 SWAP_BYTES(sheader.length)
291 fread(sample_data, 1, sheader.length, fp);
292
293 sample_len1 = -word0(sample_adr1);
294
295 if (sample_len1 > sheader.length || sample_len1 == 0)
296 sample_len1 = sheader.length;
297
298 sample_len2 = sheader.length - sample_len1;
299
300 WRITE_DSP(0x40)
301 WRITE_DSP(256 - 1000000L / sheader.frequency)
302 current_sample = number;
303
304 /* Close sample file */
305 fclose(fp);
306
307 }
308 #endif /* SOUND_SUPPORT */
309 } /* os_prepare_sample */
310
311
312 /*
313 * os_start_sample
314 *
315 * Play the given sample at the given volume (ranging from 1 to 8 and
316 * 255 meaning a default volume). The sound is played once or several
317 * times in the background (255 meaning forever). The end_of_sound
318 * function is called as soon as the sound finishes.
319 *
320 */
321 void os_start_sample(int number, int volume, int repeats, zword eos)
322 {
323 #ifdef SOUND_SUPPORT
324 eos = eos; /* not used in DOS Frotz */
325
326 os_stop_sample(0);
327
328 /* Exit if the sound board isn't set up properly */
329 if (sample_data == NULL)
330 return;
331 if (sound_adr == 0)
332 return;
333
334 /* Load new sample */
335 os_prepare_sample(number);
336
337 /* Continue only if the sample's in memory now */
338 if (current_sample == number) {
339 play_count = repeats;
340
341 if (sound_ver < 6) { /* Set up SB pro mixer chip */
342 volume = (volume != 255) ? 7 + volume : 15;
343 outp(sound_adr + 4, 0x04);
344 outp(sound_adr + 5, (volume << 4) | volume);
345 outp(sound_adr + 4, 0x22);
346 outp(sound_adr + 5, 0xff);
347 } else { /* Set up SB16 mixer chip */
348 /* Many thanks to Linards Ticmanis for writing this part! */
349 volume = (volume != 255) ? 127 + 16 * volume : 255;
350 outp(sound_adr + 4, 0x32);
351 outp(sound_adr + 5, volume);
352 outp(sound_adr + 4, 0x33);
353 outp(sound_adr + 5, volume);
354 outp(sound_adr + 4, 0x30);
355 outp(sound_adr + 5, 0xff);
356 outp(sound_adr + 4, 0x31);
357 outp(sound_adr + 5, 0xff);
358 }
359
360 play_part = 1;
361 start_of_dma(sample_adr1, sample_len1);
362
363 }
364
365 #endif /* SOUND_SUPPORT */
366 } /* os_start_sample */
367
368
369 /*
370 * os_stop_sample
371 *
372 * Turn off the current sample.
373 *
374 */
375 void os_stop_sample(int UNUSED(id))
376 {
377 #ifdef SOUND_SUPPORT
378 play_part = 0;
379
380 /* Exit if the sound board isn't set up properly */
381 if (sample_data == NULL)
382 return;
383 if (sound_adr == 0)
384 return;
385
386 /* Tell DSP to stop the current sample */
387 WRITE_DSP(0xd0)
388 #endif /* SOUND_SUPPORT */
389 } /* os_stop_sample */
390
391
392 /*
393 * os_finish_with_sample
394 *
395 * Remove the current sample from memory (if any).
396 *
397 */
398 void os_finish_with_sample(int UNUSED(id))
399 {
400 #ifdef SOUND_SUPPORT
401
402 os_stop_sample(0); /* we keep 64KB allocated all the time */
403
404 #endif /* SOUND_SUPPORT */
405 } /* os_finish_with_sample */
0 /*
1 * owscreen.c - DOS interface (Open Watcom version), screen manipulation
2 *
3 * This file is part of Frotz.
4 *
5 * Frotz is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * Frotz is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 * Or visit http://www.fsf.org/
19 */
20
21 #include <conio.h>
22 #include <dos.h>
23 #include <mem.h>
24 #include "frotz.h"
25 #include "owfrotz.h"
26
27
28 /*
29 * get_scrnptr
30 *
31 * Return a pointer to the given line in video RAM.
32 *
33 */
34 volatile byte _far *get_scrnptr(int y)
35 {
36 if (display == _CGA_)
37 return MK_FP((y & 1) ? 0xba00 : 0xb800, 40 * (y & ~1));
38 else if (display == _MCGA_)
39 return MK_FP(0xa000, 320 * y);
40 else
41 return MK_FP(0xa000, 80 * y);
42 } /* get_scrnptr */
43
44
45 /*
46 * clear_byte
47 *
48 * Helper function for clear_line.
49 *
50 */
51 static void clear_byte(volatile byte _far * scrn, word mask)
52 {
53 if (display == _CGA_)
54 if (scrn_attr == 0)
55 *scrn &= ~mask;
56 else
57 *scrn |= mask;
58 else {
59 outpw(0x03ce, 0x0205);
60 outp(0x03ce, 0x08);
61 outp(0x03cf, mask);
62 video_latch(*scrn);
63 *scrn = scrn_attr;
64 }
65 } /* clear_byte */
66
67
68 /*
69 * clear_line
70 *
71 * Helper function for os_erase_area.
72 *
73 */ static void clear_line(int y, int left, int right)
74 {
75 volatile byte _far *scrn = get_scrnptr(y);
76
77 if (display == _MCGA_)
78 _fmemset((byte _far *)scrn + left, scrn_attr,
79 right - left + 1);
80 else {
81 word mask1 = 0x00ff >> (left & 7);
82 word mask2 = 0xff80 >> (right & 7);
83
84 int x = right / 8 - left / 8;
85
86 scrn += left / 8;
87
88 if (x == 0) {
89 mask1 &= mask2;
90 mask2 = 0;
91 }
92
93 /* Clear first byte */
94 clear_byte(scrn++, mask1);
95
96 /* Clear middle bytes */
97 if (display >= _EGA_)
98 outpw(0x03ce, 0xff08);
99
100 while (--x > 0)
101 *scrn++ = scrn_attr;
102
103 /* Clear last byte */
104 clear_byte(scrn, mask2);
105 }
106 } /* clear_line */
107
108
109 /*
110 * os_erase_area
111 *
112 * Fill a rectangular area of the screen with the current background
113 * colour. Top left coordinates are (1,1). The cursor does not move.
114 *
115 * The final argument gives the window being changed, -1 if only a
116 * portion of a window is being erased, or -2 if the whole screen is
117 * being erased. This is not relevant for the DOS interface, and so
118 * this function ignores that argument.
119 *
120 */
121 void os_erase_area(int top, int left, int bottom, int right, int win)
122 {
123 int y;
124
125 top--;
126 left--;
127 bottom--;
128 right--;
129
130 if (display <= _TEXT_) {
131 bios_video_ax_bh_ch_cl_dh_dl(0x0600, scrn_attr,
132 top, left, bottom, right);
133 } else
134 for (y = top; y <= bottom; y++)
135 clear_line(y, left, right);
136 } /* os_erase_area */
137
138
139 /*
140 * copy_byte
141 *
142 * Helper function for copy_line.
143 *
144 */
145 static void copy_byte(volatile byte _far * scrn1, volatile byte _far * scrn2,
146 byte mask)
147 {
148 int i;
149
150 if (display == _CGA_)
151 *scrn1 = (*scrn1 & ~mask) | (*scrn2 & mask);
152 else {
153 outpw(0x03ce, 0x0005);
154 outp(0x03ce, 0x08);
155 outp(0x03cf, mask);
156 outp(0x03ce, 0x04);
157 outp(0x03c4, 0x02);
158
159 for (i = 0; i < 4; i++) {
160 byte t;
161
162 outp(0x03cf, i);
163 outp(0x03c5, 1 << i);
164
165 t = *scrn2;
166 video_latch(*scrn1);
167 *scrn1 = t;
168 }
169 outp(0x03c5, 0x0f);
170 }
171 } /* copy_byte */
172
173
174 /*
175 * copy_line
176 *
177 * Helper function for os_scroll_area.
178 *
179 */
180 static void copy_line(int y1, int y2, int left, int right)
181 {
182 volatile byte _far *scrn1 = get_scrnptr(y1);
183 volatile byte _far *scrn2 = get_scrnptr(y2);
184
185 if (display == _MCGA_)
186 _fmemcpy((byte _far *)(scrn1 + left),
187 (byte _far *)(scrn2 + left), right - left + 1);
188 else {
189 word mask1 = 0x00ff >> (left & 7);
190 word mask2 = 0xff80 >> (right & 7);
191
192 int x = right / 8 - left / 8;
193
194 scrn1 += left / 8;
195 scrn2 += left / 8;
196
197 if (x == 0) {
198 mask1 &= mask2;
199 mask2 = 0;
200 }
201
202 /* Copy first byte */
203 copy_byte(scrn1++, scrn2++, mask1);
204
205 /* Copy middle bytes */
206 if (display >= _EGA_)
207 outpw(0x03ce, 0x0105);
208
209 while (--x > 0)
210 *scrn1++ = *scrn2++;
211
212 /* Copy last byte */
213 copy_byte(scrn1, scrn2, mask2);
214 }
215 } /* copy_line */
216
217
218 /*
219 * os_scroll_area
220 *
221 * Scroll a rectangular area of the screen up (units > 0) or down
222 * (units < 0) and fill the empty space with the current background
223 * colour. Top left coordinates are (1,1). The cursor stays put.
224 *
225 */
226 void os_scroll_area(int top, int left, int bottom, int right, int units)
227 {
228 int y;
229
230 top--;
231 left--;
232 bottom--;
233 right--;
234
235 if (display <= _TEXT_) {
236 word ax;
237 if (units > 0)
238 ax = 0x0600 | (byte)units;
239 else
240 ax = 0x0700 | (byte)-units;
241 bios_video_ax_bh_ch_cl_dh_dl(ax, scrn_attr, top, left,
242 bottom, right);
243 } else if (units > 0) {
244 for (y = top; y <= bottom; y++) {
245 if (y <= bottom - units)
246 copy_line(y, y + units, left, right);
247 else
248 clear_line(y, left, right);
249 }
250 } else {
251 for (y = bottom; y >= top; y--) {
252 if (y >= top - units)
253 copy_line(y, y + units, left, right);
254 else
255 clear_line(y, left, right);
256 }
257 }
258 } /* os_scroll_area */
259
260
261 bool os_repaint_window(int win, int ypos_old, int ypos_new, int xpos,
262 int ysize, int xsize)
263 {
264 return FALSE;
265 }
0 /*
1 * owtext.c - DOS interface (Open Watcom version), text functions
2 *
3 * This file is part of Frotz.
4 *
5 * Frotz is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * Frotz is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 * Or visit http://www.fsf.org/
19 */
20
21 #include <stdio.h>
22 #include <string.h>
23 #include <conio.h>
24 #include <dos.h>
25 #include "frotz.h"
26 #include "owfrotz.h"
27 #include "fontdata.h"
28
29 extern volatile byte _far *get_scrnptr(int);
30
31 int current_bg = 0;
32 int current_fg = 0;
33 int current_style = 0;
34 int current_font = 0;
35
36 byte text_bg = 0;
37 byte text_fg = 0;
38 byte bg = 0;
39 byte fg = 0;
40 byte scrn_attr = 0;
41
42 int cursor_x = 0;
43 int cursor_y = 0;
44
45 char latin1_to_ascii[] =
46 " ! c L >o<Y | S '' C a << not- R _ "
47 "^0 +/-^2 ^3 ' my P . , ^1 o >> 1/41/23/4? "
48 "A A A A Ae A AE C E E E E I I I I "
49 "Th N O O O O Oe * O U U U Ue Y Th ss "
50 "a a a a ae a ae c e e e e i i i i "
51 "th n o o o o oe : o u u u ue y th y ";
52
53 char latin1_to_ibm[] = {
54 0x20, 0xad, 0xbd, 0x9c, 0xcf, 0xbe, 0xdd, 0xf5,
55 0xf9, 0xb8, 0xa6, 0xae, 0xaa, 0xf0, 0xa9, 0xee,
56 0xf8, 0xf1, 0xfd, 0xfc, 0xef, 0xe6, 0xf4, 0xfa,
57 0xf7, 0xfb, 0xa7, 0xaf, 0xac, 0xab, 0xf3, 0xa8,
58 0xb7, 0xb5, 0xb6, 0xc7, 0x8e, 0x8f, 0x92, 0x80,
59 0xd4, 0x90, 0xd2, 0xd3, 0xde, 0xd6, 0xd7, 0xd8,
60 0xd1, 0xa5, 0xe3, 0xe0, 0xe2, 0xe5, 0x99, 0x9e,
61 0x9d, 0xeb, 0xe9, 0xea, 0x9a, 0xed, 0xe8, 0xe1,
62 0x85, 0xa0, 0x83, 0xc6, 0x84, 0x86, 0x91, 0x87,
63 0x8a, 0x82, 0x88, 0x89, 0x8d, 0xa1, 0x8c, 0x8b,
64 0xd0, 0xa4, 0x95, 0xa2, 0x93, 0xe4, 0x94, 0xf6,
65 0x9b, 0x97, 0xa3, 0x96, 0x81, 0xec, 0xe7, 0x98
66 };
67
68 static byte _far *graphics_font = NULL;
69 static byte _far *mcga_font = NULL;
70 static byte _far *mcga_width = NULL;
71 static word _far *serif_font = NULL;
72 static byte _far *serif_width = NULL;
73
74
75 /*
76 * load_fonts
77 *
78 * Load the proportional and graphics fonts. In the release version all
79 * font data is appended to the end of the executable.
80 *
81 */
82 void load_fonts(void)
83 {
84 static word chunk_offset[] = {
85 0x6660,
86 0x6300,
87 0x4A40,
88 0x3180,
89 0x18C0,
90 0x00
91 };
92
93 if (display == _MCGA_) {
94 mcga_font = font_data + chunk_offset[1];
95 mcga_width = (byte *) mcga_font + 0x300;
96 } else
97 graphics_font = font_data + chunk_offset[0];
98
99 if (display == _AMIGA_ && user_font != 0) {
100 serif_font = (word *) (font_data + chunk_offset[1 + user_font]);
101 serif_width = (byte *) serif_font + 0x1800;
102 }
103 } /* load_fonts */
104
105
106 /*
107 * os_font_data
108 *
109 * Return true if the given font is available. The font can be
110 *
111 * TEXT_FONT
112 * PICTURE_FONT
113 * GRAPHICS_FONT
114 * FIXED_WIDTH_FONT
115 *
116 * The font size should be stored in "height" and "width". If the given
117 * font is unavailable then these values must _not_ be changed.
118 *
119 */
120 int os_font_data(int font, int *height, int *width)
121 {
122 /* All fonts of this interface have the same size */
123 *height = z_header.font_height;
124 *width = z_header.font_width;
125
126 /* Not every font is available in every mode */
127 if (font == TEXT_FONT)
128 return TRUE;
129 if (font == GRAPHICS_FONT && (display == _CGA_ || display >= _EGA_))
130 return TRUE;
131 if (font == FIXED_WIDTH_FONT)
132 return TRUE;
133
134 /* Unavailable font */
135 return FALSE;
136 } /* os_font_data */
137
138
139 /*
140 * switch_scrn_attr
141 *
142 * Parts of the screen are usually erased to background colour. However,
143 * for deleting text in the input routine it can be useful to erase to
144 * the current text background colour. The two colours can be different,
145 * for example when the reverse text style is used. This helper function
146 * toggles between the two possible behaviours.
147 *
148 */
149 void switch_scrn_attr(bool flag)
150 {
151 byte scrn_bg;
152 byte scrn_fg;
153
154 if (flag) {
155 scrn_bg = text_bg;
156 scrn_fg = text_fg;
157 } else {
158 scrn_bg = bg;
159 scrn_fg = fg;
160 }
161
162 if (display <= _TEXT_)
163 scrn_attr = (scrn_bg << 4) | scrn_fg;
164 else if (display == _CGA_)
165 scrn_attr = (scrn_bg != BLACK) ? 0xff : 0x00;
166 else
167 scrn_attr = scrn_bg;
168 } /* switch_scrn_attr */
169
170
171 /*
172 * adjust_style
173 *
174 * Set the current colours. This combines the current colour selection
175 * and the current text style.
176 *
177 */
178 static void adjust_style(void)
179 {
180 static byte amiga_palette[][3] = {
181 {0x00, 0x00, 0x00},
182 {0x2a, 0x00, 0x00},
183 {0x00, 0x2a, 0x00},
184 {0x3f, 0x3f, 0x15},
185 {0x00, 0x00, 0x2a},
186 {0x2a, 0x00, 0x2a},
187 {0x00, 0x2a, 0x2a},
188 {0x3f, 0x3f, 0x3f},
189 {0x30, 0x30, 0x30},
190 {0x20, 0x20, 0x20},
191 {0x10, 0x10, 0x10},
192 };
193
194 static byte pc_colour[] = {
195 BLACK,
196 RED,
197 GREEN,
198 YELLOW,
199 BLUE,
200 MAGENTA,
201 CYAN,
202 WHITE,
203 DARKGRAY
204 };
205
206 static byte palette_bg = 0xff;
207 static byte palette_fg = 0xff;
208
209 fg = current_fg;
210 bg = current_bg;
211
212 /* V6 game, Amiga mode: Alter the palette registers if the colours
213 of window 0 have changed. DAC register #79 holds the foreground,
214 DAC register #64 the background colour. */
215
216 if (display == _AMIGA_ && z_header.version == V6 && cwin == 0) {
217 if (fg < 16 && fg != palette_fg) {
218 byte R = amiga_palette[fg - 2][0];
219 byte G = amiga_palette[fg - 2][1];
220 byte B = amiga_palette[fg - 2][2];
221
222 bios_video_ax_bx_dh_ch_cl(0x1010, 79, R, G, B);
223
224 palette_fg = fg;
225 }
226
227 if (bg < 16 && bg != palette_bg) {
228 byte R = amiga_palette[bg - 2][0];
229 byte G = amiga_palette[bg - 2][1];
230 byte B = amiga_palette[bg - 2][2];
231
232 bios_video_ax_bx_dh_ch_cl(0x1010, 64, R, G, B);
233
234 palette_bg = bg;
235
236 }
237
238 }
239
240 /* Handle colours */
241 if (fg < 16) {
242 if (display == _MONO_)
243 fg = (fg == WHITE_COLOUR) ? LIGHTGRAY : BLACK;
244 else if (z_header.version == V6 && display == _AMIGA_)
245 fg = (palette_fg == fg) ? 15 : 0;
246 else
247 fg = pc_colour[fg - 2];
248 } else
249 fg -= 16;
250
251 if (bg < 16) {
252 if (display == _MONO_)
253 bg = (bg == WHITE_COLOUR) ? LIGHTGRAY : BLACK;
254 else if (z_header.version == V6 && display == _AMIGA_)
255 bg = (palette_bg == bg) ? 0 : 15;
256 else
257 bg = pc_colour[bg - 2];
258
259 } else
260 bg -= 16;
261
262 /* Handle reverse text style */
263 if (current_style & REVERSE_STYLE) {
264 text_fg = (user_reverse_fg != -1) ? user_reverse_fg : bg;
265 text_bg = (user_reverse_bg != -1) ? user_reverse_bg : fg;
266 } else {
267 text_fg = fg;
268 text_bg = bg;
269 }
270
271 /* Handle emphasis style */
272 if (current_style & EMPHASIS_STYLE) {
273 if (display == _MONO_ && text_bg == BLACK)
274 text_fg = BLUE; /* blue in monochrome mode is underlined */
275 if (display == _TEXT_)
276 text_fg =
277 (user_emphasis != -1) ? user_emphasis : YELLOW;
278 }
279
280 /* Handle boldface style */
281 if (current_style & BOLDFACE_STYLE) {
282 if (display == _MONO_)
283 text_fg = WHITE;
284 if (display == _TEXT_)
285 text_fg ^= 8;
286
287 }
288
289 /* Set the screen attribute for scrolling and erasing */
290 switch_scrn_attr(FALSE);
291 } /* adjust_style */
292
293
294 /*
295 * os_set_colour
296 *
297 * Set the foreground and background colours which can be:
298 *
299 * DEFAULT_COLOUR
300 * BLACK_COLOUR
301 * RED_COLOUR
302 * GREEN_COLOUR
303 * YELLOW_COLOUR
304 * BLUE_COLOUR
305 * MAGENTA_COLOUR
306 * CYAN_COLOUR
307 * WHITE_COLOUR
308 *
309 * MS-DOS 320 columns MCGA mode only:
310 *
311 * GREY_COLOUR
312 *
313 * Amiga only:
314 *
315 * LIGHTGREY_COLOUR
316 * MEDIUMGREY_COLOUR
317 * DARKGREY_COLOUR
318 *
319 * There may be more colours in the range from 16 to 255; see the remarks
320 * on os_peek_colour.
321 *
322 */
323 void os_set_colour(int new_foreground, int new_background)
324 {
325 current_fg = new_foreground;
326 current_bg = new_background;
327
328 /* Apply changes */
329 adjust_style();
330
331 } /* os_set_colour */
332
333
334 /*
335 * os_set_text_style
336 *
337 * Set the current text style. Following flags can be set:
338 *
339 * REVERSE_STYLE
340 * BOLDFACE_STYLE
341 * EMPHASIS_STYLE (aka underline aka italics)
342 * FIXED_WIDTH_STYLE
343 *
344 */
345 void os_set_text_style(int new_style)
346 {
347 current_style = new_style;
348
349 /* Apply changes */
350 adjust_style();
351
352 } /* os_set_text_style */
353
354
355 /*
356 * os_set_font
357 *
358 * Set the font for text output. The interpreter takes care not to
359 * choose fonts which aren't supported by the interface.
360 *
361 */
362 void os_set_font(int new_font)
363 {
364 current_font = new_font;
365 } /* os_set_font */
366
367
368 /*
369 * write_pattern
370 *
371 * Helper function for drawing characters in EGA and Amiga mode.
372 *
373 */
374 void write_pattern(volatile byte _far * screen, byte val, byte mask)
375 {
376 byte bg = text_bg, fg = text_fg;
377 if (mask != 0) {
378 if (display == _CGA_) {
379 if (bg == BLACK)
380 *screen &= ~mask;
381 if (bg == WHITE)
382 *screen |= mask;
383 if (fg != bg)
384 *screen ^= val;
385 } else if (display == _MCGA_) {
386 byte i;
387
388 for (i = 0x80; (mask & i) != 0; i >>= 1)
389 *screen++ = (val & i) ? fg : bg;
390 } else {
391 outp(0x3cf, mask);
392 video_latch(*screen);
393 *screen = bg;
394
395 outp(0x3cf, val);
396 video_latch(*screen);
397 *screen = fg;
398 }
399 }
400 } /* write_pattern */
401
402
403 /*
404 * os_display_char
405 *
406 * Display a character of the current font using the current colours and
407 * text style. The cursor moves to the next position. Printable codes are
408 * all ASCII values from 32 to 126, ISO Latin-1 characters from 160 to
409 * 255, ZC_GAP (gap between two sentences) and ZC_INDENT (paragraph
410 * indentation). The screen should not be scrolled after printing to the
411 * bottom right corner.
412 *
413 */ void os_display_char(zchar c)
414 {
415 int width = os_char_width(c);
416
417 /* Handle accented characters */
418 if (c >= ZC_LATIN1_MIN
419 && (story_id != BEYOND_ZORK || (z_header.flags & GRAPHICS_FLAG)))
420 if (display == _CGA_ || display == _MCGA_) {
421 char *ptr = latin1_to_ascii + 3 * (c - ZC_LATIN1_MIN);
422
423 char c1 = *ptr++;
424 char c2 = *ptr++;
425 char c3 = *ptr++;
426
427 os_display_char(c1);
428
429 if (c2 != ' ')
430 os_display_char(c2);
431 if (c3 != ' ')
432 os_display_char(c3);
433
434 return;
435
436 } else if (display == _AMIGA_ && current_font == TEXT_FONT
437 && !(current_style & FIXED_WIDTH_STYLE)
438 && user_font != 0) {
439
440 if (c >= ZC_LATIN1_MIN)
441 c -= 32;
442 } else
443 c = latin1_to_ibm[c - ZC_LATIN1_MIN];
444
445 /* Handle special indentations */
446 if (c == ZC_INDENT) {
447 os_display_char(' ');
448 os_display_char(' ');
449 os_display_char(' ');
450 return;
451 }
452 if (c == ZC_GAP) {
453 os_display_char(' ');
454 os_display_char(' ');
455 return;
456 }
457
458 /* Display character */
459 if (display <= _TEXT_) {
460 bios_video_ah_bh_dh_dl(2, 0, cursor_y, cursor_x);
461 bios_video_ah_al_bh_bl_cx(9, c, 0, text_bg << 4 | text_fg, 1);
462 } else {
463
464 void _far *table;
465 word mask;
466 word val;
467 byte mask0;
468 byte mask1;
469 int align;
470 int underline;
471 int boldface;
472 int type;
473
474 int shift = (display != _MCGA_) ? cursor_x % 8 : 0;
475 int offset = (display != _MCGA_) ? cursor_x / 8 : cursor_x;
476
477 int i;
478
479 if (current_font == GRAPHICS_FONT) {
480 table = graphics_font + 8 * (c - 32);
481 mask = 0xff;
482 underline = -1;
483 boldface = -1;
484 align = 0;
485 type = 1;
486 } else if (display == _AMIGA_ && current_font == TEXT_FONT
487 && !(current_style & FIXED_WIDTH_STYLE)
488 && user_font != 0) {
489 table = serif_font + 16 * (c - 32);
490 mask = 0xffff << (16 - width);
491 underline = 14;
492 boldface = 1;
493 align = 0;
494 type = 2;
495 } else if (display == _CGA_) {
496 table = (byte _far *) MK_FP(0xf000, 0xfa6e) + 8 * c;
497 mask = 0xff;
498 underline = 7;
499 boldface = (user_bold_typing != -1) ? 1 : -1;
500 align = 0;
501 type = 3;
502 } else if (display >= _EGA_) {
503 table = (byte _far *) _dos_getvect(0x43) + z_header.font_height * c;
504 mask = 0xff;
505 underline = z_header.font_height - 1;
506 boldface = (user_bold_typing != -1) ? 1 : -1;
507 align = 0;
508 type = 3;
509 } else {
510 table = mcga_font + 8 * (c - 32);
511 mask = 0xff & (0xff << (8 - width));
512 underline = 7;
513 boldface = -1;
514 align = (width + 1 - mcga_width[c - 32]) / 2;
515 type = 3;
516 }
517
518 mask0 = mask >> shift;
519 mask1 = mask << (8 - shift);
520
521 if (!(current_style & BOLDFACE_STYLE))
522 boldface = -1;
523 if (!(current_style & EMPHASIS_STYLE))
524 underline = -1;
525
526 if (display >= _EGA_) {
527 outpw(0x03ce, 0x0205);
528 outpw(0x03ce, 0xff08);
529 }
530
531 for (i = 0; i < z_header.font_height; i++) {
532 volatile byte _far *screen =
533 get_scrnptr(cursor_y + i) + offset;
534
535 if (type == 1) {
536 val =
537 *((byte _far *) table +
538 8 * i / z_header.font_height);
539 }
540 if (type == 2)
541 val = *((word _far *) table + i);
542 if (type == 3)
543 val = *((byte _far *) table + i);
544
545 if (align != 0)
546 val >>= align;
547
548 if (boldface == 1)
549 val |= val >> 1;
550 if (underline == i)
551 val ^= mask;
552
553 if (type == 2)
554 write_pattern(screen++, val >> (8 + shift),
555 mask >> (8 + shift));
556
557 write_pattern(screen + 0, val >> shift, mask0);
558 write_pattern(screen + 1, val << (8 - shift), mask1);
559 }
560 }
561
562 /* Move cursor to next position */
563 cursor_x += width;
564 } /* os_display_char */
565
566
567 /*
568 * os_display_string
569 *
570 * Pass a string of characters to os_display_char.
571 *
572 */
573 void os_display_string(const zchar * s)
574 {
575 zchar c;
576
577 while ((c = *s++) != 0) {
578 if (c == ZC_NEW_FONT || c == ZC_NEW_STYLE) {
579
580 int arg = *s++;
581
582 if (c == ZC_NEW_FONT)
583 os_set_font(arg);
584 if (c == ZC_NEW_STYLE)
585 os_set_text_style(arg);
586
587 } else
588 os_display_char(c);
589 }
590 } /* os_display_string */
591
592
593 /*
594 * os_char_width
595 *
596 * Return the width of the character in screen units.
597 *
598 */
599
600 int os_char_width(zchar c)
601 {
602 /* Handle accented characters */
603 if (c >= ZC_LATIN1_MIN
604 && (story_id != BEYOND_ZORK || (z_header.flags & GRAPHICS_FLAG)))
605 if (display == _CGA_ || display == _MCGA_) {
606
607 const char *ptr =
608 latin1_to_ascii + 3 * (c - ZC_LATIN1_MIN);
609
610 int width = 0;
611
612 char c1 = *ptr++;
613 char c2 = *ptr++;
614 char c3 = *ptr++;
615
616 width = os_char_width(c1);
617
618 if (c2 != ' ')
619 width += os_char_width(c2);
620 if (c3 != ' ')
621 width += os_char_width(c3);
622
623 return width;
624
625 } else if (display == _AMIGA_ && current_font == TEXT_FONT
626 && !(current_style & FIXED_WIDTH_STYLE)
627 && user_font != 0)
628 if (c >= ZC_LATIN1_MIN)
629 c -= 32;
630
631 /* Handle special indentations */
632 if (c == ZC_INDENT)
633 return 3 * os_char_width(' ');
634 if (c == ZC_GAP)
635 return 2 * os_char_width(' ');
636
637 /* Calculate width */
638 if (display <= _TEXT_)
639 return 1;
640 if (display == _CGA_)
641 return 8;
642 if (display == _EGA_)
643 return 8;
644
645 if (current_font == GRAPHICS_FONT)
646 return 8;
647 if (current_font == FIXED_WIDTH_FONT
648 || (current_style & FIXED_WIDTH_STYLE) || (display == _AMIGA_
649 && user_font == 0))
650 return (display == _AMIGA_) ? 8 : 5;
651
652 if (display == _MCGA_)
653 return mcga_width[c - 32];
654 if (display == _AMIGA_)
655 return serif_width[c - 32] +
656 ((current_style & BOLDFACE_STYLE) ? 1 : 0);
657
658 return 0;
659 } /* os_char_width */
660
661
662 /*
663 * os_string_width
664 *
665 * Calculate the length of a word in screen units. Apart from letters,
666 * the word may contain special codes:
667 *
668 * ZC_NEW_STYLE - next character is a new text style
669 * ZC_NEW_FONT - next character is a new font
670 *
671 */
672 int os_string_width(const zchar * s)
673 {
674 int width = 0;
675
676 int saved_font = current_font;
677 int saved_style = current_style;
678
679 zchar c;
680
681 while ((c = *s++) != 0) {
682 if (c == ZC_NEW_STYLE || c == ZC_NEW_FONT) {
683
684 int arg = *s++;
685
686 if (c == ZC_NEW_FONT)
687 current_font = arg;
688 if (c == ZC_NEW_STYLE)
689 current_style = arg;
690
691 } else
692 width += os_char_width(c);
693 }
694 current_font = saved_font;
695 current_style = saved_style;
696
697 return width;
698 } /* os_string_width */
699
700
701 /*
702 * os_set_cursor
703 *
704 * Place the text cursor at the given coordinates. Top left is (1,1).
705 *
706 */
707 void os_set_cursor(int y, int x)
708 {
709 cursor_y = y - 1;
710 cursor_x = x - 1;
711 } /* os_set_cursor */
712
713
714 /*
715 * os_more_prompt
716 *
717 * Display a MORE prompt, wait for a keypress and remove the MORE
718 * prompt from the screen.
719 *
720 */
721 void os_more_prompt(void)
722 {
723 int saved_x;
724
725 /* Save text font and style */
726 int saved_font = current_font;
727 int saved_style = current_style;
728
729 /* Choose plain text style */
730 current_font = TEXT_FONT;
731 current_style = 0;
732
733 adjust_style();
734
735 /* Wait until the user presses a key */
736 saved_x = cursor_x;
737 os_display_string((zchar *) "[MORE]");
738 os_read_key(0, TRUE);
739
740 os_erase_area(cursor_y + 1,
741 saved_x + 1, cursor_y + z_header.font_height, cursor_x + 1, -1);
742
743 cursor_x = saved_x;
744
745 /* Restore text font and style */
746 current_font = saved_font;
747 current_style = saved_style;
748
749 adjust_style();
750 } /* os_more_prompt */
751
752 /*
753 * os_from_true_colour
754 *
755 * Given a true colour, return an appropriate colour index.
756 *
757 * This currently follows xfrotz's "pretty brain-dead" (but very much working)
758 * implementation.
759 *
760 */
761 int os_from_true_colour(zword colour)
762 {
763 if (colour == 0xfffe)
764 return 0;
765 else if (colour == 0xffff)
766 return 1;
767 else {
768 int r = colour & 0x001F;
769 int g = colour & 0x03E0;
770 int b = colour & 0x7C00;
771 int index = (r ? 4 : 0) | (g ? 2 : 0) | (b ? 1 : 0);
772
773 switch (index) {
774 case 0: return 2;
775 case 1: return 6;
776 case 2: return 4;
777 case 3: return 8;
778 case 4: return 3;
779 case 5: return 7;
780 case 6: return 5;
781 case 7: return 9;
782 default: return 1; /* Can't happen */
783 }
784 }
785 return 0;
786 }
787
788 /*
789 * os_to_true_colour
790 *
791 * Given a colour index, return the appropriate true colour.
792 *
793 * This currently follows xfrotz's implementation.
794 *
795 */
796 zword os_to_true_colour(int index)
797 {
798 switch (index) {
799 case 0: return -2;
800 case 1: return -1;
801 case 2: return 0x0000;
802 case 3: return 0x001D;
803 case 4: return 0x0340;
804 case 5: return 0x03BD;
805 case 6: return 0x59A0;
806 case 7: return 0x7C1F;
807 case 8: return 0x77A0;
808 case 9: return 0x7FFF;
809 case 10: return 0x5AD6;
810 case 11: return 0x4631;
811 case 12: return 0x2D6B;
812 default: return 0x0000;
813 }
814 }
0 unsigned char SF_font3_ttf[] = {
1 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00,
2 0x46, 0x46, 0x54, 0x4d, 0x6b, 0x99, 0x37, 0x27, 0x00, 0x00, 0x1d, 0x74,
3 0x00, 0x00, 0x00, 0x1c, 0x47, 0x44, 0x45, 0x46, 0x00, 0x91, 0x00, 0x26,
4 0x00, 0x00, 0x1d, 0x4c, 0x00, 0x00, 0x00, 0x28, 0x4f, 0x53, 0x2f, 0x32,
5 0x76, 0x8a, 0xbe, 0x98, 0x00, 0x00, 0x01, 0x88, 0x00, 0x00, 0x00, 0x56,
6 0x63, 0x6d, 0x61, 0x70, 0xcc, 0x91, 0xa0, 0xd9, 0x00, 0x00, 0x02, 0xac,
7 0x00, 0x00, 0x01, 0x42, 0x63, 0x76, 0x74, 0x20, 0x05, 0x00, 0x04, 0x46,
8 0x00, 0x00, 0x05, 0x04, 0x00, 0x00, 0x00, 0x12, 0x66, 0x70, 0x67, 0x6d,
9 0x32, 0x4a, 0x66, 0x98, 0x00, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 0xc7,
10 0x67, 0x61, 0x73, 0x70, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x1d, 0x40,
11 0x00, 0x00, 0x00, 0x0c, 0x67, 0x6c, 0x79, 0x66, 0x53, 0x1b, 0x77, 0x5c,
12 0x00, 0x00, 0x05, 0xe0, 0x00, 0x00, 0x11, 0x08, 0x68, 0x65, 0x61, 0x64,
13 0x18, 0x71, 0xec, 0x48, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0x00, 0x36,
14 0x68, 0x68, 0x65, 0x61, 0x05, 0x7a, 0x01, 0x95, 0x00, 0x00, 0x01, 0x44,
15 0x00, 0x00, 0x00, 0x24, 0x68, 0x6d, 0x74, 0x78, 0x14, 0x63, 0x15, 0x00,
16 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x00, 0xcc, 0x6c, 0x6f, 0x63, 0x61,
17 0xb4, 0x1a, 0xaf, 0xac, 0x00, 0x00, 0x05, 0x18, 0x00, 0x00, 0x00, 0xc6,
18 0x6d, 0x61, 0x78, 0x70, 0x01, 0x70, 0x00, 0x5e, 0x00, 0x00, 0x01, 0x68,
19 0x00, 0x00, 0x00, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0xc1, 0xe9, 0xbd, 0x84,
20 0x00, 0x00, 0x16, 0xe8, 0x00, 0x00, 0x05, 0x6d, 0x70, 0x6f, 0x73, 0x74,
21 0x09, 0x48, 0x09, 0x63, 0x00, 0x00, 0x1c, 0x58, 0x00, 0x00, 0x00, 0xe6,
22 0x70, 0x72, 0x65, 0x70, 0xed, 0xe3, 0x64, 0x62, 0x00, 0x00, 0x04, 0xb8,
23 0x00, 0x00, 0x00, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x33, 0x33,
24 0xc1, 0x06, 0xe6, 0x49, 0x5f, 0x0f, 0x3c, 0xf5, 0x00, 0x0b, 0x03, 0xe8,
25 0x00, 0x00, 0x00, 0x00, 0xdb, 0x7d, 0x3a, 0xec, 0x00, 0x00, 0x00, 0x00,
26 0xdb, 0x7d, 0x3a, 0xec, 0x00, 0x00, 0xff, 0x38, 0x02, 0x58, 0x03, 0x20,
27 0x00, 0x00, 0x00, 0x08, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
28 0x00, 0x01, 0x00, 0x00, 0x03, 0x20, 0xff, 0x38, 0x00, 0x00, 0x02, 0x58,
29 0x00, 0x00, 0x00, 0x00, 0x02, 0x58, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
30 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
31 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x00, 0x2e, 0x00, 0x03, 0x00, 0x00,
32 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00,
33 0x01, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x58,
34 0x01, 0x90, 0x00, 0x05, 0x00, 0x00, 0x02, 0x8a, 0x02, 0xbb, 0x00, 0x2f,
35 0x00, 0x8c, 0x02, 0x8a, 0x02, 0xbb, 0xff, 0x5d, 0x01, 0xdf, 0x00, 0x31,
36 0x01, 0x02, 0x00, 0x00, 0x02, 0x07, 0x04, 0x09, 0x02, 0x02, 0x05, 0x02,
37 0x04, 0x04, 0xe4, 0x00, 0x0e, 0xff, 0x40, 0x00, 0x79, 0xff, 0x00, 0x04,
38 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x47, 0x4e, 0x55, 0x20, 0x00, 0x40,
39 0x00, 0x20, 0x00, 0x7e, 0x03, 0x20, 0xff, 0x38, 0x00, 0x00, 0x03, 0x20,
40 0x00, 0xc8, 0x60, 0x00, 0x01, 0xbf, 0xdf, 0xf7, 0x00, 0x00, 0x00, 0x00,
41 0x02, 0x58, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x02, 0x58, 0x00, 0x00,
42 0x02, 0x58, 0x00, 0x00, 0x00, 0x29, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00,
43 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x18, 0x01, 0x18, 0x00, 0x00,
44 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x01, 0x18, 0x01, 0x18, 0x00, 0x00,
45 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
46 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2c, 0x00, 0x00, 0x00, 0x00,
47 0x00, 0x00, 0x00, 0x00, 0x01, 0x2c, 0x01, 0x2c, 0x00, 0x00, 0x00, 0x00,
48 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0d, 0x02, 0x0d,
49 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0d,
50 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
51 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0d, 0x00, 0x00, 0x00, 0x00,
52 0x00, 0x00, 0x00, 0xba, 0x00, 0xba, 0x00, 0xba, 0x00, 0x00, 0x00, 0x86,
53 0x00, 0xb8, 0x00, 0xa2, 0x00, 0xb0, 0x00, 0x12, 0x00, 0x6e, 0x00, 0xd1,
54 0x00, 0x12, 0x00, 0xa9, 0x01, 0x1e, 0x00, 0x33, 0x00, 0x33, 0x00, 0xd6,
55 0x00, 0x92, 0x00, 0xb0, 0x00, 0xb8, 0x00, 0x9d, 0x00, 0xa4, 0x00, 0xa2,
56 0x00, 0xb1, 0x00, 0x9f, 0x00, 0x47, 0x00, 0x1b, 0x00, 0xa9, 0x00, 0x9f,
57 0x00, 0x47, 0x00, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
58 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1c,
59 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x03, 0x00, 0x01,
60 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x20, 0x00, 0x00, 0x00, 0x04,
61 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x7e, 0xff, 0xff, 0x00, 0x00,
62 0x00, 0x20, 0xff, 0xff, 0xff, 0xe3, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
63 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
64 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
65 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
66 0x00, 0x00, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c,
67 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
68 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24,
69 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30,
70 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c,
71 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
72 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54,
73 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60,
74 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
75 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
76 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
77 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
78 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
79 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
80 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
81 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
82 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
83 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
84 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
85 0xb0, 0x00, 0x2c, 0xb0, 0x00, 0x13, 0x4b, 0xb0, 0x2a, 0x50, 0x58, 0xb0,
86 0x4a, 0x76, 0x59, 0xb0, 0x00, 0x23, 0x3f, 0x18, 0xb0, 0x06, 0x2b, 0x58,
87 0x3d, 0x59, 0x4b, 0xb0, 0x2a, 0x50, 0x58, 0x7d, 0x59, 0x20, 0xd4, 0xb0,
88 0x01, 0x13, 0x2e, 0x18, 0x2d, 0xb0, 0x01, 0x2c, 0x20, 0x20, 0xda, 0x2f,
89 0xb0, 0x07, 0x2b, 0x5c, 0x58, 0x20, 0x20, 0x47, 0x23, 0x46, 0x61, 0x6a,
90 0x20, 0x58, 0x20, 0x64, 0x62, 0x38, 0x1b, 0x21, 0x21, 0x59, 0x1b, 0x21,
91 0x59, 0x2d, 0xb0, 0x02, 0x2c, 0x4b, 0x52, 0x58, 0x45, 0x23, 0x59, 0x21,
92 0x2d, 0xb0, 0x03, 0x2c, 0x69, 0x18, 0x20, 0xb0, 0x40, 0x50, 0x58, 0x21,
93 0xb0, 0x40, 0x59, 0x2d, 0xb0, 0x04, 0x2c, 0xb0, 0x06, 0x2b, 0x58, 0x21,
94 0x23, 0x21, 0x7a, 0x58, 0xdd, 0x1b, 0xcd, 0x59, 0x1b, 0x4b, 0x52, 0x58,
95 0x58, 0xfd, 0x1b, 0xed, 0x59, 0x1b, 0x23, 0x21, 0xb0, 0x05, 0x2b, 0x58,
96 0xb0, 0x46, 0x76, 0x59, 0x58, 0xdd, 0x1b, 0xcd, 0x59, 0x59, 0x59, 0x18,
97 0x2d, 0xb0, 0x05, 0x2c, 0x0d, 0x5c, 0x5a, 0x2d, 0xb0, 0x06, 0x2c, 0xb1,
98 0x22, 0x01, 0x88, 0x50, 0x58, 0xb0, 0x20, 0x88, 0x5c, 0x5c, 0x1b, 0xb0,
99 0x00, 0x59, 0x2d, 0xb0, 0x07, 0x2c, 0xb1, 0x24, 0x01, 0x88, 0x50, 0x58,
100 0xb0, 0x40, 0x88, 0x5c, 0x5c, 0x1b, 0xb0, 0x00, 0x59, 0x2d, 0xb0, 0x08,
101 0x2c, 0x12, 0x11, 0x20, 0x39, 0x2f, 0x2d, 0x00, 0xb8, 0x01, 0xff, 0x85,
102 0x00, 0x4b, 0xb0, 0x08, 0x50, 0x58, 0xb1, 0x01, 0x01, 0x8e, 0x59, 0xb1,
103 0x46, 0x06, 0x2b, 0x58, 0x21, 0xb0, 0x10, 0x59, 0x4b, 0xb0, 0x14, 0x52,
104 0x58, 0x21, 0xb0, 0x80, 0x59, 0x1d, 0xb0, 0x06, 0x2b, 0x5c, 0x58, 0x00,
105 0xb0, 0x04, 0x20, 0x45, 0xb0, 0x03, 0x2b, 0x44, 0x01, 0xb0, 0x05, 0x20,
106 0x45, 0xb0, 0x03, 0x2b, 0x44, 0xb0, 0x06, 0x20, 0x45, 0xba, 0x00, 0x05,
107 0x7f, 0xff, 0x00, 0x02, 0x2b, 0xb1, 0x03, 0x46, 0x76, 0x2b, 0x44, 0x59,
108 0x00, 0x00, 0x01, 0xa1, 0x02, 0x33, 0x02, 0x5b, 0x00, 0x2b, 0x00, 0x29,
109 0x00, 0x29, 0x00, 0x21, 0x02, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a,
110 0x00, 0x2a, 0x00, 0x2a, 0x00, 0x2a, 0x00, 0x50, 0x00, 0x76, 0x00, 0x86,
111 0x00, 0x96, 0x00, 0x96, 0x00, 0xa4, 0x00, 0xb2, 0x00, 0xc0, 0x00, 0xce,
112 0x00, 0xe0, 0x00, 0xf2, 0x01, 0x06, 0x01, 0x18, 0x01, 0x28, 0x01, 0x38,
113 0x01, 0x48, 0x01, 0x58, 0x01, 0x70, 0x01, 0x86, 0x01, 0x9c, 0x01, 0xb2,
114 0x01, 0xc0, 0x01, 0xce, 0x01, 0xdc, 0x01, 0xea, 0x01, 0xf8, 0x02, 0x0c,
115 0x02, 0x20, 0x02, 0x34, 0x02, 0x48, 0x02, 0x56, 0x02, 0x64, 0x02, 0x72,
116 0x02, 0x80, 0x02, 0x96, 0x02, 0xaa, 0x02, 0xbe, 0x02, 0xd2, 0x02, 0xe0,
117 0x02, 0xec, 0x02, 0xf8, 0x03, 0x04, 0x03, 0x12, 0x03, 0x1e, 0x03, 0x2a,
118 0x03, 0x38, 0x03, 0x4a, 0x03, 0x5e, 0x03, 0x72, 0x03, 0x86, 0x03, 0x9a,
119 0x03, 0xae, 0x03, 0xc2, 0x03, 0xd6, 0x03, 0xe4, 0x03, 0xf2, 0x03, 0xfe,
120 0x04, 0x20, 0x04, 0x38, 0x04, 0x5c, 0x04, 0x80, 0x04, 0xba, 0x04, 0xce,
121 0x05, 0x0a, 0x05, 0x24, 0x05, 0x40, 0x05, 0x56, 0x05, 0x7a, 0x05, 0x92,
122 0x05, 0xaa, 0x05, 0xc8, 0x05, 0xe6, 0x05, 0xf4, 0x06, 0x16, 0x06, 0x3c,
123 0x06, 0x4e, 0x06, 0x6e, 0x06, 0x86, 0x06, 0xa4, 0x06, 0xba, 0x06, 0xcc,
124 0x06, 0xe4, 0x06, 0xf8, 0x07, 0x0e, 0x07, 0x20, 0x07, 0x3c, 0x07, 0x54,
125 0x07, 0x6c, 0x07, 0x8c, 0x07, 0xaa, 0x07, 0xd6, 0x08, 0x02, 0x08, 0x42,
126 0x08, 0x84, 0x00, 0x00, 0x00, 0x02, 0x00, 0x21, 0x00, 0x00, 0x01, 0x2a,
127 0x02, 0x9a, 0x00, 0x03, 0x00, 0x07, 0x00, 0x2e, 0xb1, 0x01, 0x00, 0x2f,
128 0x3c, 0xb2, 0x07, 0x04, 0x07, 0xed, 0x32, 0xb1, 0x06, 0x05, 0xdc, 0x3c,
129 0xb2, 0x03, 0x02, 0x07, 0xed, 0x32, 0x00, 0xb1, 0x03, 0x00, 0x2f, 0x3c,
130 0xb2, 0x05, 0x04, 0x07, 0xed, 0x32, 0xb2, 0x07, 0x06, 0x08, 0xfc, 0x3c,
131 0xb2, 0x01, 0x02, 0x07, 0xed, 0x32, 0x33, 0x11, 0x21, 0x11, 0x27, 0x33,
132 0x11, 0x23, 0x21, 0x01, 0x09, 0xe8, 0xc7, 0xc7, 0x02, 0x9a, 0xfd, 0x66,
133 0x21, 0x02, 0x58, 0x00, 0x00, 0x01, 0x00, 0x29, 0x00, 0xa7, 0x02, 0x10,
134 0x01, 0x8b, 0x00, 0x17, 0x00, 0x00, 0x25, 0x14, 0x06, 0x23, 0x22, 0x2f,
135 0x01, 0x37, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x0f, 0x01, 0x21, 0x32,
136 0x15, 0x14, 0x23, 0x21, 0x17, 0x16, 0x01, 0x0e, 0x0c, 0x08, 0x05, 0x08,
137 0xc4, 0xc5, 0x08, 0x04, 0x07, 0x0d, 0x0d, 0x60, 0x01, 0x54, 0x1b, 0x1b,
138 0xfe, 0xaa, 0x62, 0x0d, 0xbe, 0x07, 0x10, 0x05, 0x6d, 0x6d, 0x05, 0x0e,
139 0x08, 0x0b, 0x07, 0x35, 0x14, 0x15, 0x36, 0x07, 0x00, 0x01, 0x00, 0x36,
140 0x00, 0xa7, 0x02, 0x1d, 0x01, 0x8b, 0x00, 0x17, 0x00, 0x00, 0x25, 0x22,
141 0x26, 0x35, 0x34, 0x3f, 0x01, 0x21, 0x22, 0x35, 0x34, 0x33, 0x21, 0x27,
142 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x1f, 0x01, 0x07, 0x06, 0x01, 0x4c,
143 0x08, 0x0c, 0x0d, 0x62, 0xfe, 0xaa, 0x1b, 0x1b, 0x01, 0x54, 0x60, 0x0d,
144 0x0d, 0x07, 0x04, 0x08, 0xc5, 0xc4, 0x08, 0xa7, 0x10, 0x07, 0x0a, 0x07,
145 0x36, 0x15, 0x14, 0x35, 0x07, 0x0b, 0x07, 0x0f, 0x05, 0x6d, 0x6d, 0x05,
146 0x00, 0x01, 0x00, 0x00, 0xff, 0x38, 0x02, 0x58, 0x03, 0x20, 0x00, 0x03,
147 0x00, 0x00, 0x15, 0x01, 0x17, 0x01, 0x02, 0x36, 0x22, 0xfd, 0xca, 0xb4,
148 0x03, 0xd4, 0x14, 0xfc, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
149 0xff, 0x38, 0x02, 0x58, 0x03, 0x20, 0x00, 0x03, 0x00, 0x00, 0x05, 0x07,
150 0x01, 0x37, 0x02, 0x58, 0x22, 0xfd, 0xca, 0x22, 0xb4, 0x14, 0x03, 0xd4,
151 0x14, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x18, 0x02, 0x58,
152 0x01, 0x40, 0x00, 0x03, 0x00, 0x00, 0x11, 0x21, 0x15, 0x21, 0x02, 0x58,
153 0xfd, 0xa8, 0x01, 0x40, 0x28, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
154 0x01, 0x18, 0x02, 0x58, 0x01, 0x40, 0x00, 0x03, 0x00, 0x00, 0x11, 0x21,
155 0x15, 0x21, 0x02, 0x58, 0xfd, 0xa8, 0x01, 0x40, 0x28, 0x00, 0x00, 0x00,
156 0x00, 0x01, 0x01, 0x18, 0xff, 0x38, 0x01, 0x40, 0x03, 0x20, 0x00, 0x03,
157 0x00, 0x00, 0x01, 0x33, 0x11, 0x23, 0x01, 0x18, 0x28, 0x28, 0x03, 0x20,
158 0xfc, 0x18, 0x00, 0x00, 0x00, 0x01, 0x01, 0x18, 0xff, 0x38, 0x01, 0x40,
159 0x03, 0x20, 0x00, 0x03, 0x00, 0x00, 0x01, 0x33, 0x11, 0x23, 0x01, 0x18,
160 0x28, 0x28, 0x03, 0x20, 0xfc, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
161 0x01, 0x18, 0x02, 0x58, 0x03, 0x20, 0x00, 0x07, 0x00, 0x00, 0x11, 0x35,
162 0x21, 0x11, 0x33, 0x11, 0x21, 0x15, 0x01, 0x18, 0x28, 0x01, 0x18, 0x01,
163 0x18, 0x28, 0x01, 0xe0, 0xfe, 0x20, 0x28, 0x00, 0x00, 0x01, 0x00, 0x00,
164 0xff, 0x38, 0x02, 0x58, 0x01, 0x40, 0x00, 0x07, 0x00, 0x00, 0x11, 0x21,
165 0x15, 0x21, 0x11, 0x23, 0x11, 0x21, 0x02, 0x58, 0xfe, 0xe8, 0x28, 0xfe,
166 0xe8, 0x01, 0x40, 0x28, 0xfe, 0x20, 0x01, 0xe0, 0x00, 0x01, 0x01, 0x18,
167 0xff, 0x38, 0x02, 0x58, 0x03, 0x20, 0x00, 0x07, 0x00, 0x00, 0x05, 0x11,
168 0x33, 0x11, 0x21, 0x15, 0x21, 0x11, 0x01, 0x18, 0x28, 0x01, 0x18, 0xfe,
169 0xe8, 0xc8, 0x03, 0xe8, 0xfe, 0x20, 0x28, 0xfe, 0x20, 0x00, 0x00, 0x00,
170 0x00, 0x01, 0x00, 0x00, 0xff, 0x38, 0x01, 0x40, 0x03, 0x20, 0x00, 0x07,
171 0x00, 0x00, 0x05, 0x23, 0x11, 0x21, 0x35, 0x21, 0x11, 0x33, 0x01, 0x40,
172 0x28, 0xfe, 0xe8, 0x01, 0x18, 0x28, 0xc8, 0x01, 0xe0, 0x28, 0x01, 0xe0,
173 0x00, 0x01, 0x01, 0x18, 0x01, 0x18, 0x02, 0x58, 0x03, 0x20, 0x00, 0x05,
174 0x00, 0x00, 0x01, 0x11, 0x33, 0x11, 0x21, 0x15, 0x01, 0x18, 0x28, 0x01,
175 0x18, 0x01, 0x18, 0x02, 0x08, 0xfe, 0x20, 0x28, 0x00, 0x01, 0x01, 0x18,
176 0xff, 0x38, 0x02, 0x58, 0x01, 0x40, 0x00, 0x05, 0x00, 0x00, 0x01, 0x21,
177 0x15, 0x21, 0x11, 0x23, 0x01, 0x18, 0x01, 0x40, 0xfe, 0xe8, 0x28, 0x01,
178 0x40, 0x28, 0xfe, 0x20, 0x00, 0x01, 0x00, 0x00, 0xff, 0x38, 0x01, 0x40,
179 0x01, 0x40, 0x00, 0x05, 0x00, 0x00, 0x01, 0x11, 0x23, 0x11, 0x21, 0x35,
180 0x01, 0x40, 0x28, 0xfe, 0xe8, 0x01, 0x40, 0xfd, 0xf8, 0x01, 0xe0, 0x28,
181 0x00, 0x01, 0x00, 0x00, 0x01, 0x18, 0x01, 0x40, 0x03, 0x20, 0x00, 0x05,
182 0x00, 0x00, 0x01, 0x21, 0x35, 0x21, 0x11, 0x33, 0x01, 0x40, 0xfe, 0xc0,
183 0x01, 0x18, 0x28, 0x01, 0x18, 0x28, 0x01, 0xe0, 0x00, 0x01, 0x00, 0x00,
184 0xff, 0x38, 0x02, 0x58, 0x03, 0x20, 0x00, 0x08, 0x00, 0x00, 0x09, 0x01,
185 0x27, 0x01, 0x11, 0x33, 0x11, 0x21, 0x15, 0x01, 0x37, 0xfe, 0xeb, 0x22,
186 0x01, 0x18, 0x28, 0x01, 0x18, 0x01, 0x18, 0xfe, 0x20, 0x14, 0x01, 0xe5,
187 0x01, 0xef, 0xfe, 0x20, 0x28, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
188 0xff, 0x38, 0x02, 0x58, 0x03, 0x18, 0x00, 0x08, 0x00, 0x00, 0x01, 0x21,
189 0x15, 0x21, 0x11, 0x23, 0x11, 0x01, 0x37, 0x01, 0x37, 0x01, 0x21, 0xfe,
190 0xe8, 0x28, 0xfe, 0xe8, 0x22, 0x01, 0x40, 0x28, 0xfe, 0x20, 0x01, 0xe7,
191 0x01, 0xe5, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x38, 0x02, 0x58,
192 0x03, 0x20, 0x00, 0x08, 0x00, 0x00, 0x01, 0x11, 0x23, 0x11, 0x21, 0x35,
193 0x21, 0x01, 0x17, 0x01, 0x40, 0x28, 0xfe, 0xe8, 0x01, 0x21, 0x01, 0x15,
194 0x22, 0x01, 0x27, 0xfe, 0x11, 0x01, 0xe0, 0x28, 0x01, 0xe0, 0x14, 0x00,
195 0x00, 0x01, 0x00, 0x00, 0xff, 0x38, 0x02, 0x58, 0x03, 0x20, 0x00, 0x08,
196 0x00, 0x00, 0x05, 0x07, 0x01, 0x21, 0x35, 0x21, 0x11, 0x33, 0x11, 0x02,
197 0x58, 0x22, 0xfe, 0xeb, 0xfe, 0xdf, 0x01, 0x18, 0x28, 0xb4, 0x14, 0x01,
198 0xe0, 0x28, 0x01, 0xe0, 0xfe, 0x11, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
199 0xff, 0x38, 0x02, 0x58, 0x03, 0x20, 0x00, 0x03, 0x00, 0x00, 0x11, 0x21,
200 0x11, 0x21, 0x02, 0x58, 0xfd, 0xa8, 0x03, 0x20, 0xfc, 0x18, 0x00, 0x00,
201 0x00, 0x01, 0x00, 0x00, 0x01, 0x2c, 0x02, 0x58, 0x03, 0x20, 0x00, 0x03,
202 0x00, 0x00, 0x11, 0x21, 0x11, 0x21, 0x02, 0x58, 0xfd, 0xa8, 0x03, 0x20,
203 0xfe, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x38, 0x02, 0x58,
204 0x01, 0x2c, 0x00, 0x03, 0x00, 0x00, 0x11, 0x21, 0x11, 0x21, 0x02, 0x58,
205 0xfd, 0xa8, 0x01, 0x2c, 0xfe, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
206 0xff, 0x38, 0x01, 0x2c, 0x03, 0x20, 0x00, 0x03, 0x00, 0x00, 0x11, 0x21,
207 0x11, 0x21, 0x01, 0x2c, 0xfe, 0xd4, 0x03, 0x20, 0xfc, 0x18, 0x00, 0x00,
208 0x00, 0x01, 0x01, 0x2c, 0xff, 0x38, 0x02, 0x58, 0x03, 0x20, 0x00, 0x03,
209 0x00, 0x00, 0x01, 0x21, 0x11, 0x21, 0x01, 0x2c, 0x01, 0x2c, 0xfe, 0xd4,
210 0x03, 0x20, 0xfc, 0x18, 0x00, 0x01, 0x00, 0x00, 0xff, 0x38, 0x02, 0x58,
211 0x03, 0x20, 0x00, 0x07, 0x00, 0x00, 0x01, 0x33, 0x11, 0x21, 0x11, 0x21,
212 0x11, 0x21, 0x01, 0x18, 0x28, 0x01, 0x18, 0xfd, 0xa8, 0x01, 0x18, 0x03,
213 0x20, 0xfe, 0x0c, 0xfe, 0x0c, 0x01, 0xf4, 0x00, 0x00, 0x01, 0x00, 0x00,
214 0xff, 0x38, 0x02, 0x58, 0x03, 0x20, 0x00, 0x07, 0x00, 0x00, 0x01, 0x21,
215 0x11, 0x21, 0x11, 0x21, 0x11, 0x23, 0x01, 0x18, 0xfe, 0xe8, 0x02, 0x58,
216 0xfe, 0xe8, 0x28, 0x01, 0x2c, 0x01, 0xf4, 0xfe, 0x0c, 0xfe, 0x0c, 0x00,
217 0x00, 0x01, 0x00, 0x00, 0xff, 0x38, 0x02, 0x58, 0x03, 0x20, 0x00, 0x07,
218 0x00, 0x00, 0x11, 0x21, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x01, 0x2c,
219 0x01, 0x2c, 0xfe, 0xd4, 0xfe, 0xd4, 0x03, 0x20, 0xfe, 0x20, 0x28, 0xfe,
220 0x20, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x38, 0x02, 0x58,
221 0x03, 0x20, 0x00, 0x07, 0x00, 0x00, 0x01, 0x21, 0x11, 0x21, 0x11, 0x21,
222 0x35, 0x21, 0x01, 0x2c, 0x01, 0x2c, 0xfe, 0xd4, 0xfe, 0xd4, 0x01, 0x2c,
223 0x03, 0x20, 0xfc, 0x18, 0x01, 0xe0, 0x28, 0x00, 0x00, 0x01, 0x01, 0x2c,
224 0x01, 0x2c, 0x02, 0x58, 0x03, 0x20, 0x00, 0x03, 0x00, 0x00, 0x01, 0x21,
225 0x11, 0x21, 0x01, 0x2c, 0x01, 0x2c, 0xfe, 0xd4, 0x03, 0x20, 0xfe, 0x0c,
226 0x00, 0x01, 0x01, 0x2c, 0xff, 0x38, 0x02, 0x58, 0x01, 0x2c, 0x00, 0x03,
227 0x00, 0x00, 0x01, 0x21, 0x11, 0x21, 0x01, 0x2c, 0x01, 0x2c, 0xfe, 0xd4,
228 0x01, 0x2c, 0xfe, 0x0c, 0x00, 0x01, 0x00, 0x00, 0xff, 0x38, 0x01, 0x2c,
229 0x01, 0x2c, 0x00, 0x03, 0x00, 0x00, 0x11, 0x21, 0x11, 0x21, 0x01, 0x2c,
230 0xfe, 0xd4, 0x01, 0x2c, 0xfe, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
231 0x01, 0x2c, 0x01, 0x2c, 0x03, 0x20, 0x00, 0x03, 0x00, 0x00, 0x11, 0x21,
232 0x11, 0x21, 0x01, 0x2c, 0xfe, 0xd4, 0x03, 0x20, 0xfe, 0x0c, 0x00, 0x00,
233 0x00, 0x01, 0x00, 0x00, 0xff, 0x38, 0x02, 0x58, 0x03, 0x20, 0x00, 0x06,
234 0x00, 0x00, 0x09, 0x01, 0x27, 0x01, 0x11, 0x21, 0x11, 0x01, 0x43, 0xfe,
235 0xdf, 0x22, 0x01, 0x2c, 0x01, 0x2c, 0x01, 0x2c, 0xfe, 0x0c, 0x14, 0x02,
236 0x07, 0x01, 0xcd, 0xfe, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
237 0xff, 0x38, 0x02, 0x58, 0x03, 0x20, 0x00, 0x06, 0x00, 0x00, 0x01, 0x21,
238 0x11, 0x21, 0x11, 0x01, 0x37, 0x01, 0x43, 0x01, 0x15, 0xfe, 0xd4, 0xfe,
239 0xd4, 0x22, 0x01, 0x2c, 0xfe, 0x0c, 0x01, 0xcd, 0x02, 0x07, 0x14, 0x00,
240 0x00, 0x01, 0x00, 0x00, 0xff, 0x38, 0x02, 0x58, 0x03, 0x20, 0x00, 0x06,
241 0x00, 0x00, 0x01, 0x11, 0x21, 0x11, 0x21, 0x01, 0x17, 0x01, 0x2c, 0xfe,
242 0xd4, 0x01, 0x15, 0x01, 0x21, 0x22, 0x01, 0x05, 0xfe, 0x33, 0x01, 0xf4,
243 0x01, 0xf4, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x38, 0x02, 0x58,
244 0x03, 0x20, 0x00, 0x06, 0x00, 0x00, 0x05, 0x07, 0x01, 0x21, 0x11, 0x21,
245 0x11, 0x02, 0x58, 0x22, 0xfe, 0xdf, 0xfe, 0xeb, 0x01, 0x2c, 0xb4, 0x14,
246 0x01, 0xf4, 0x01, 0xf4, 0xfe, 0x33, 0x00, 0x00, 0x00, 0x01, 0x02, 0x0d,
247 0x02, 0xa3, 0x02, 0x58, 0x03, 0x20, 0x00, 0x03, 0x00, 0x00, 0x01, 0x35,
248 0x33, 0x15, 0x02, 0x0d, 0x4b, 0x02, 0xa3, 0x7d, 0x7d, 0x00, 0x00, 0x00,
249 0x00, 0x01, 0x02, 0x0d, 0xff, 0x38, 0x02, 0x58, 0xff, 0xb5, 0x00, 0x03,
250 0x00, 0x00, 0x05, 0x35, 0x33, 0x15, 0x02, 0x0d, 0x4b, 0xc8, 0x7d, 0x7d,
251 0x00, 0x01, 0x00, 0x00, 0xff, 0x38, 0x00, 0x4b, 0xff, 0xb5, 0x00, 0x03,
252 0x00, 0x00, 0x17, 0x23, 0x35, 0x33, 0x4b, 0x4b, 0x4b, 0xc8, 0x7d, 0x00,
253 0x00, 0x01, 0x00, 0x00, 0x02, 0xa3, 0x00, 0x4b, 0x03, 0x20, 0x00, 0x03,
254 0x00, 0x00, 0x13, 0x23, 0x35, 0x33, 0x4b, 0x4b, 0x4b, 0x02, 0xa3, 0x7d,
255 0x00, 0x01, 0x00, 0x00, 0x02, 0xa3, 0x02, 0x58, 0x03, 0x20, 0x00, 0x03,
256 0x00, 0x00, 0x11, 0x21, 0x15, 0x21, 0x02, 0x58, 0xfd, 0xa8, 0x03, 0x20,
257 0x7d, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x38, 0x02, 0x58,
258 0xff, 0xb5, 0x00, 0x03, 0x00, 0x00, 0x15, 0x21, 0x15, 0x21, 0x02, 0x58,
259 0xfd, 0xa8, 0x4b, 0x7d, 0x00, 0x01, 0x00, 0x00, 0xff, 0x38, 0x00, 0x4b,
260 0x03, 0x20, 0x00, 0x03, 0x00, 0x00, 0x11, 0x33, 0x11, 0x23, 0x4b, 0x4b,
261 0x03, 0x20, 0xfc, 0x18, 0x00, 0x01, 0x02, 0x0d, 0xff, 0x38, 0x02, 0x58,
262 0x03, 0x20, 0x00, 0x03, 0x00, 0x00, 0x01, 0x33, 0x11, 0x23, 0x02, 0x0d,
263 0x4b, 0x4b, 0x03, 0x20, 0xfc, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
264 0xff, 0x9c, 0x02, 0x58, 0x02, 0xbc, 0x00, 0x03, 0x00, 0x07, 0x00, 0x00,
265 0x31, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x21, 0x02, 0x58, 0xfd, 0xa8,
266 0x02, 0x58, 0xfd, 0xa8, 0x64, 0x03, 0x20, 0x64, 0x00, 0x01, 0x00, 0x00,
267 0xff, 0x9c, 0x02, 0x58, 0x02, 0xbc, 0x00, 0x07, 0x00, 0x00, 0x13, 0x11,
268 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x4b, 0x02, 0x0d, 0xfd, 0xa8, 0x02,
269 0x58, 0x02, 0x58, 0xfd, 0xa8, 0x64, 0x03, 0x20, 0x64, 0x00, 0x00, 0x00,
270 0x00, 0x01, 0x00, 0x00, 0xff, 0x9c, 0x02, 0x58, 0x02, 0xbc, 0x00, 0x07,
271 0x00, 0x00, 0x13, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x96, 0x01,
272 0xc2, 0xfd, 0xa8, 0x02, 0x58, 0x02, 0x58, 0xfd, 0xa8, 0x64, 0x03, 0x20,
273 0x64, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x9c, 0x02, 0x58,
274 0x02, 0xbc, 0x00, 0x07, 0x00, 0x00, 0x13, 0x11, 0x21, 0x15, 0x21, 0x11,
275 0x21, 0x15, 0xe1, 0x01, 0x77, 0xfd, 0xa8, 0x02, 0x58, 0x02, 0x58, 0xfd,
276 0xa8, 0x64, 0x03, 0x20, 0x64, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
277 0xff, 0x9c, 0x02, 0x58, 0x02, 0xbc, 0x00, 0x07, 0x00, 0x00, 0x01, 0x11,
278 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x01, 0x2c, 0x01, 0x2c, 0xfd, 0xa8,
279 0x02, 0x58, 0x02, 0x58, 0xfd, 0xa8, 0x64, 0x03, 0x20, 0x64, 0x00, 0x00,
280 0x00, 0x01, 0x00, 0x00, 0xff, 0x9c, 0x02, 0x58, 0x02, 0xbc, 0x00, 0x07,
281 0x00, 0x00, 0x01, 0x11, 0x33, 0x15, 0x21, 0x11, 0x21, 0x15, 0x01, 0x77,
282 0xe1, 0xfd, 0xa8, 0x02, 0x58, 0x02, 0x58, 0xfd, 0xa8, 0x64, 0x03, 0x20,
283 0x64, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x9c, 0x02, 0x58,
284 0x02, 0xbc, 0x00, 0x07, 0x00, 0x00, 0x01, 0x11, 0x33, 0x15, 0x21, 0x11,
285 0x21, 0x15, 0x01, 0xc2, 0x96, 0xfd, 0xa8, 0x02, 0x58, 0x02, 0x58, 0xfd,
286 0xa8, 0x64, 0x03, 0x20, 0x64, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
287 0xff, 0x9c, 0x02, 0x58, 0x02, 0xbc, 0x00, 0x07, 0x00, 0x00, 0x01, 0x11,
288 0x33, 0x15, 0x21, 0x11, 0x21, 0x15, 0x02, 0x0d, 0x4b, 0xfd, 0xa8, 0x02,
289 0x58, 0x02, 0x58, 0xfd, 0xa8, 0x64, 0x03, 0x20, 0x64, 0x00, 0x00, 0x00,
290 0x00, 0x01, 0x00, 0x00, 0xff, 0x9c, 0x02, 0x58, 0x02, 0xbc, 0x00, 0x03,
291 0x00, 0x00, 0x11, 0x21, 0x11, 0x21, 0x02, 0x58, 0xfd, 0xa8, 0x02, 0xbc,
292 0xfc, 0xe0, 0x00, 0x00, 0x00, 0x01, 0x02, 0x0d, 0xff, 0x9c, 0x02, 0x58,
293 0x02, 0xbc, 0x00, 0x03, 0x00, 0x00, 0x01, 0x33, 0x11, 0x23, 0x02, 0x0d,
294 0x4b, 0x4b, 0x02, 0xbc, 0xfc, 0xe0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
295 0xff, 0x9c, 0x00, 0x4b, 0x02, 0xbc, 0x00, 0x03, 0x00, 0x00, 0x11, 0x33,
296 0x11, 0x23, 0x4b, 0x4b, 0x02, 0xbc, 0xfc, 0xe0, 0x00, 0x01, 0x00, 0x00,
297 0xff, 0x38, 0x02, 0x58, 0x03, 0x20, 0x00, 0x0b, 0x00, 0x00, 0x05, 0x07,
298 0x09, 0x01, 0x27, 0x09, 0x01, 0x37, 0x09, 0x01, 0x17, 0x01, 0x02, 0x58,
299 0x22, 0xfe, 0xf6, 0xfe, 0xf6, 0x22, 0x01, 0x15, 0xfe, 0xeb, 0x22, 0x01,
300 0x0a, 0x01, 0x0a, 0x22, 0xfe, 0xeb, 0xb4, 0x14, 0x01, 0xcd, 0xfe, 0x33,
301 0x14, 0x01, 0xe0, 0x01, 0xe0, 0x14, 0xfe, 0x33, 0x01, 0xcd, 0x14, 0xfe,
302 0x20, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x38, 0x02, 0x58,
303 0x03, 0x20, 0x00, 0x0b, 0x00, 0x00, 0x01, 0x21, 0x35, 0x21, 0x11, 0x33,
304 0x11, 0x21, 0x15, 0x21, 0x11, 0x23, 0x01, 0x18, 0xfe, 0xe8, 0x01, 0x18,
305 0x28, 0x01, 0x18, 0xfe, 0xe8, 0x28, 0x01, 0x18, 0x28, 0x01, 0xe0, 0xfe,
306 0x20, 0x28, 0xfe, 0x20, 0x00, 0x01, 0x00, 0xba, 0x00, 0x26, 0x01, 0x9e,
307 0x02, 0x0c, 0x00, 0x15, 0x00, 0x00, 0x01, 0x14, 0x06, 0x22, 0x2f, 0x01,
308 0x11, 0x14, 0x23, 0x22, 0x35, 0x11, 0x07, 0x06, 0x23, 0x22, 0x26, 0x35,
309 0x34, 0x3f, 0x01, 0x17, 0x01, 0x9e, 0x0d, 0x12, 0x09, 0x34, 0x14, 0x16,
310 0x36, 0x06, 0x0a, 0x0c, 0x0c, 0x06, 0x6c, 0x6e, 0x01, 0x3c, 0x06, 0x0e,
311 0x0c, 0x60, 0xfe, 0xac, 0x1a, 0x1a, 0x01, 0x56, 0x62, 0x0c, 0x0f, 0x05,
312 0x06, 0x06, 0xc4, 0xc4, 0x00, 0x01, 0x00, 0xba, 0x00, 0x26, 0x01, 0x9e,
313 0x02, 0x0c, 0x00, 0x15, 0x00, 0x00, 0x37, 0x34, 0x36, 0x33, 0x32, 0x1f,
314 0x01, 0x11, 0x34, 0x33, 0x32, 0x15, 0x11, 0x37, 0x36, 0x32, 0x16, 0x15,
315 0x0f, 0x01, 0x27, 0x26, 0xba, 0x0c, 0x0c, 0x0a, 0x06, 0x36, 0x16, 0x14,
316 0x34, 0x09, 0x12, 0x0d, 0x04, 0x6e, 0x6c, 0x06, 0xf6, 0x05, 0x0f, 0x0c,
317 0x62, 0x01, 0x56, 0x1a, 0x1a, 0xfe, 0xac, 0x60, 0x0c, 0x0d, 0x07, 0x0c,
318 0xc4, 0xc4, 0x06, 0x00, 0x00, 0x01, 0x00, 0xba, 0x00, 0x06, 0x01, 0x9e,
319 0x02, 0x2c, 0x00, 0x25, 0x00, 0x00, 0x37, 0x34, 0x36, 0x33, 0x32, 0x1f,
320 0x01, 0x11, 0x07, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x3f, 0x01, 0x17,
321 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x2f, 0x01, 0x11, 0x37, 0x36, 0x33,
322 0x32, 0x16, 0x15, 0x14, 0x0f, 0x01, 0x27, 0x26, 0xba, 0x10, 0x07, 0x0a,
323 0x07, 0x36, 0x36, 0x07, 0x0a, 0x07, 0x10, 0x05, 0x6d, 0x6d, 0x05, 0x0e,
324 0x08, 0x0b, 0x07, 0x35, 0x35, 0x07, 0x0b, 0x07, 0x0f, 0x05, 0x6d, 0x6d,
325 0x05, 0xd7, 0x08, 0x0c, 0x0d, 0x62, 0x01, 0x3a, 0x62, 0x0d, 0x0c, 0x08,
326 0x05, 0x08, 0xc4, 0xc5, 0x08, 0x04, 0x07, 0x0d, 0x0d, 0x60, 0xfe, 0xca,
327 0x60, 0x0d, 0x0d, 0x07, 0x04, 0x08, 0xc5, 0xc4, 0x08, 0x00, 0x00, 0x00,
328 0x00, 0x02, 0x00, 0x00, 0xff, 0x38, 0x02, 0x58, 0x03, 0x20, 0x00, 0x03,
329 0x00, 0x07, 0x00, 0x00, 0x15, 0x11, 0x21, 0x11, 0x25, 0x21, 0x11, 0x21,
330 0x02, 0x58, 0xfd, 0xf3, 0x01, 0xc2, 0xfe, 0x3e, 0xc8, 0x03, 0xe8, 0xfc,
331 0x18, 0x7d, 0x02, 0xee, 0x00, 0x02, 0x00, 0x86, 0xff, 0xf1, 0x01, 0xe7,
332 0x02, 0x41, 0x00, 0x1d, 0x00, 0x29, 0x00, 0x00, 0x13, 0x3e, 0x02, 0x33,
333 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, 0x15, 0x14, 0x23, 0x22, 0x3d, 0x01,
334 0x3e, 0x01, 0x35, 0x34, 0x26, 0x23, 0x22, 0x07, 0x15, 0x14, 0x23, 0x22,
335 0x35, 0x13, 0x33, 0x32, 0x16, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x34,
336 0x36, 0x86, 0x0a, 0x3e, 0x3f, 0x28, 0x50, 0x62, 0x47, 0x5e, 0x14, 0x15,
337 0x58, 0x4d, 0x50, 0x3e, 0x3d, 0x44, 0x14, 0x15, 0x99, 0x1b, 0x1a, 0x1f,
338 0x20, 0x19, 0x1b, 0x1a, 0x1f, 0x1f, 0x02, 0x11, 0x03, 0x1d, 0x10, 0x55,
339 0x45, 0x38, 0x4c, 0x2c, 0x29, 0x1b, 0x1b, 0x44, 0x25, 0x45, 0x2b, 0x32,
340 0x3f, 0x22, 0x29, 0x1b, 0x1b, 0xfe, 0x88, 0x1c, 0x2c, 0x1c, 0x1c, 0x2c,
341 0x1c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xb8, 0xff, 0x98, 0x01, 0xa0,
342 0x03, 0x1c, 0x00, 0x0c, 0x00, 0x00, 0x01, 0x07, 0x27, 0x15, 0x17, 0x07,
343 0x27, 0x11, 0x23, 0x11, 0x33, 0x17, 0x37, 0x01, 0xa0, 0x73, 0x5a, 0x61,
344 0x0f, 0x52, 0x1b, 0x1b, 0x5a, 0x64, 0x03, 0x00, 0x59, 0x45, 0x41, 0x4c,
345 0x1a, 0x40, 0xfd, 0x13, 0x03, 0x7b, 0x45, 0x4e, 0x00, 0x02, 0x00, 0xa2,
346 0xff, 0x99, 0x01, 0xb6, 0x03, 0x14, 0x00, 0x06, 0x00, 0x0b, 0x00, 0x00,
347 0x25, 0x03, 0x23, 0x11, 0x33, 0x13, 0x07, 0x37, 0x27, 0x11, 0x37, 0x27,
348 0x01, 0xb6, 0xf8, 0x1c, 0x1c, 0xf8, 0x83, 0x5b, 0xd0, 0xcf, 0x85, 0xbc,
349 0xfe, 0xdd, 0x03, 0x7b, 0xfe, 0xdd, 0x9a, 0x9b, 0xf4, 0xfc, 0xe1, 0xf4,
350 0x9c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xb0, 0xff, 0x99, 0x01, 0xa8,
351 0x03, 0x14, 0x00, 0x09, 0x00, 0x00, 0x01, 0x27, 0x11, 0x23, 0x27, 0x35,
352 0x17, 0x11, 0x33, 0x17, 0x01, 0xa8, 0x6f, 0x1b, 0x6e, 0x6e, 0x1b, 0x6f,
353 0x02, 0x63, 0x82, 0xfc, 0xb4, 0x82, 0x2e, 0x81, 0x03, 0x4c, 0x82, 0x00,
354 0x00, 0x03, 0x00, 0x12, 0xff, 0x99, 0x02, 0x46, 0x03, 0x14, 0x00, 0x09,
355 0x00, 0x0c, 0x00, 0x0f, 0x00, 0x00, 0x05, 0x23, 0x0b, 0x01, 0x23, 0x11,
356 0x33, 0x1b, 0x01, 0x33, 0x03, 0x11, 0x03, 0x23, 0x03, 0x11, 0x02, 0x46,
357 0x20, 0xfa, 0xfa, 0x20, 0x20, 0xfa, 0xfa, 0x20, 0x1c, 0xee, 0x1f, 0xef,
358 0x67, 0x01, 0xa3, 0xfe, 0x5d, 0x03, 0x7b, 0xfe, 0x5d, 0x01, 0xa3, 0xfc,
359 0xb3, 0x03, 0x1f, 0xfe, 0x71, 0x01, 0x8f, 0xfc, 0xe1, 0x00, 0x00, 0x00,
360 0x00, 0x01, 0x00, 0x6e, 0xff, 0x99, 0x01, 0xea, 0x03, 0x14, 0x00, 0x0b,
361 0x00, 0x00, 0x05, 0x23, 0x11, 0x07, 0x27, 0x11, 0x23, 0x11, 0x33, 0x17,
362 0x37, 0x33, 0x01, 0xea, 0x1b, 0xa3, 0xa3, 0x1b, 0x1b, 0xa3, 0xa3, 0x1b,
363 0x67, 0x03, 0x4f, 0xc1, 0xc1, 0xfc, 0xb1, 0x03, 0x7b, 0xbe, 0xbe, 0x00,
364 0x00, 0x01, 0x00, 0xd1, 0xff, 0x99, 0x01, 0x87, 0x03, 0x14, 0x00, 0x0b,
365 0x00, 0x00, 0x01, 0x07, 0x11, 0x23, 0x11, 0x33, 0x15, 0x37, 0x15, 0x07,
366 0x15, 0x37, 0x01, 0x87, 0x9a, 0x1c, 0x1c, 0x9a, 0x9a, 0x9a, 0x02, 0x40,
367 0xb6, 0xfe, 0x0f, 0x03, 0x7b, 0xb6, 0xb6, 0x2f, 0xb6, 0x76, 0xb6, 0x00,
368 0x00, 0x01, 0x00, 0x12, 0xff, 0x99, 0x02, 0x46, 0x03, 0x14, 0x00, 0x0b,
369 0x00, 0x00, 0x05, 0x23, 0x0b, 0x01, 0x23, 0x09, 0x01, 0x33, 0x1b, 0x01,
370 0x33, 0x01, 0x02, 0x46, 0x20, 0xfa, 0xfa, 0x20, 0x01, 0x0b, 0xfe, 0xf5,
371 0x20, 0xfa, 0xfa, 0x20, 0xfe, 0xf6, 0x67, 0x01, 0xa3, 0xfe, 0x5d, 0x01,
372 0xbe, 0x01, 0xbd, 0xfe, 0x5d, 0x01, 0xa3, 0xfe, 0x43, 0x00, 0x00, 0x00,
373 0x00, 0x02, 0x00, 0xa9, 0xff, 0x99, 0x01, 0xaf, 0x03, 0x14, 0x00, 0x0b,
374 0x00, 0x0f, 0x00, 0x00, 0x05, 0x23, 0x35, 0x27, 0x11, 0x23, 0x11, 0x33,
375 0x15, 0x17, 0x11, 0x33, 0x03, 0x35, 0x27, 0x15, 0x01, 0xaf, 0x1c, 0xce,
376 0x1c, 0x1c, 0xce, 0x1c, 0x1c, 0xce, 0x67, 0xd3, 0xf3, 0xfe, 0x3a, 0x03,
377 0x7b, 0xd0, 0xf5, 0x01, 0xc5, 0xfd, 0x87, 0x87, 0xf4, 0x8a, 0x00, 0x00,
378 0x00, 0x01, 0x01, 0x1e, 0xff, 0x99, 0x01, 0x3a, 0x03, 0x14, 0x00, 0x03,
379 0x00, 0x00, 0x05, 0x23, 0x11, 0x33, 0x01, 0x3a, 0x1c, 0x1c, 0x67, 0x03,
380 0x7b, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x33, 0xff, 0x99, 0x02, 0x25,
381 0x03, 0x14, 0x00, 0x09, 0x00, 0x0c, 0x00, 0x0f, 0x00, 0x00, 0x01, 0x03,
382 0x15, 0x23, 0x35, 0x03, 0x13, 0x35, 0x33, 0x15, 0x13, 0x27, 0x11, 0x23,
383 0x11, 0x07, 0x02, 0x25, 0xeb, 0x1c, 0xeb, 0xeb, 0x1c, 0xc4, 0xc4, 0x1c,
384 0xc4, 0x01, 0x4e, 0xfe, 0xeb, 0xa0, 0xa0, 0x01, 0x15, 0x01, 0x16, 0xb0,
385 0xb0, 0xfe, 0xea, 0xe7, 0xfe, 0x32, 0x01, 0xce, 0xe7, 0x00, 0x00, 0x00,
386 0x00, 0x01, 0x00, 0x33, 0xff, 0x99, 0x02, 0x25, 0x03, 0x14, 0x00, 0x16,
387 0x00, 0x00, 0x17, 0x34, 0x3e, 0x03, 0x37, 0x11, 0x33, 0x11, 0x1e, 0x01,
388 0x15, 0x23, 0x34, 0x26, 0x27, 0x11, 0x23, 0x11, 0x0e, 0x01, 0x15, 0x33,
389 0x27, 0x38, 0x45, 0x35, 0x14, 0x1b, 0x65, 0x85, 0x1c, 0x76, 0x58, 0x1b,
390 0x5b, 0x76, 0x65, 0x41, 0x6a, 0x3e, 0x2a, 0x10, 0x01, 0x02, 0x55, 0xfd,
391 0xab, 0x08, 0xab, 0x71, 0x65, 0x96, 0x09, 0xfe, 0xfa, 0x01, 0x06, 0x06,
392 0x99, 0x65, 0x00, 0x00, 0x00, 0x01, 0x00, 0xd6, 0xff, 0x99, 0x01, 0x82,
393 0x03, 0x14, 0x00, 0x06, 0x00, 0x00, 0x01, 0x27, 0x11, 0x23, 0x11, 0x33,
394 0x17, 0x01, 0x82, 0x91, 0x1b, 0x1b, 0x91, 0x02, 0x3c, 0xac, 0xfc, 0xb1,
395 0x03, 0x7b, 0xa9, 0x00, 0x00, 0x01, 0x00, 0x92, 0xff, 0x99, 0x01, 0xc6,
396 0x03, 0x14, 0x00, 0x11, 0x00, 0x00, 0x05, 0x23, 0x11, 0x07, 0x17, 0x15,
397 0x27, 0x07, 0x35, 0x37, 0x27, 0x11, 0x23, 0x11, 0x33, 0x17, 0x37, 0x33,
398 0x01, 0xc6, 0x1c, 0x6a, 0x43, 0x57, 0x57, 0x43, 0x6a, 0x1c, 0x1c, 0x7e,
399 0x7e, 0x1c, 0x67, 0x03, 0x4f, 0x7f, 0x4f, 0x2f, 0x67, 0x67, 0x2f, 0x4f,
400 0x7f, 0xfc, 0xb1, 0x03, 0x7b, 0x94, 0x94, 0x00, 0x00, 0x01, 0x00, 0xb0,
401 0xff, 0x99, 0x01, 0xa8, 0x03, 0x14, 0x00, 0x0b, 0x00, 0x00, 0x25, 0x27,
402 0x11, 0x23, 0x11, 0x27, 0x35, 0x17, 0x11, 0x33, 0x11, 0x17, 0x01, 0xa8,
403 0x6f, 0x1b, 0x6e, 0x6e, 0x1b, 0x6f, 0x9d, 0x84, 0xfe, 0x78, 0x01, 0xa8,
404 0x81, 0x2f, 0x82, 0x01, 0xa5, 0xfe, 0x3a, 0x82, 0x00, 0x01, 0x00, 0xb8,
405 0xff, 0x98, 0x01, 0xa0, 0x03, 0x1c, 0x00, 0x0e, 0x00, 0x00, 0x01, 0x07,
406 0x27, 0x11, 0x23, 0x11, 0x33, 0x17, 0x37, 0x17, 0x07, 0x27, 0x15, 0x17,
407 0x37, 0x01, 0xa0, 0x73, 0x5a, 0x1b, 0x1b, 0x5a, 0x64, 0x0f, 0x73, 0x5a,
408 0x5a, 0x64, 0x02, 0x9a, 0x5b, 0x46, 0xfd, 0x13, 0x03, 0x7b, 0x45, 0x4e,
409 0x1c, 0x59, 0x45, 0x41, 0x45, 0x4e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x9d,
410 0xff, 0x99, 0x01, 0xbb, 0x03, 0x14, 0x00, 0x09, 0x00, 0x00, 0x13, 0x30,
411 0x11, 0x37, 0x17, 0x15, 0x27, 0x07, 0x23, 0x11, 0xb8, 0x84, 0x7f, 0x7f,
412 0x84, 0x1b, 0x03, 0x14, 0xfc, 0xb4, 0x9b, 0x96, 0x2f, 0x96, 0x9b, 0x03,
413 0x7b, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xa4, 0xff, 0x99, 0x01, 0xb4,
414 0x03, 0x14, 0x00, 0x07, 0x00, 0x00, 0x05, 0x23, 0x27, 0x15, 0x23, 0x11,
415 0x33, 0x11, 0x01, 0xb4, 0x27, 0xce, 0x1b, 0x1b, 0x67, 0xf3, 0xf3, 0x03,
416 0x7b, 0xfd, 0xa6, 0x00, 0x00, 0x01, 0x00, 0xa2, 0xff, 0x99, 0x01, 0xb6,
417 0x03, 0x14, 0x00, 0x0a, 0x00, 0x00, 0x01, 0x07, 0x17, 0x15, 0x27, 0x37,
418 0x27, 0x11, 0x23, 0x11, 0x33, 0x01, 0xb6, 0xaf, 0xa5, 0xcd, 0xaf, 0xd0,
419 0x1c, 0x1c, 0x01, 0xf1, 0xcd, 0xc4, 0x2d, 0xf0, 0xcf, 0xf4, 0xfc, 0xb3,
420 0x03, 0x7b, 0x00, 0x00, 0x00, 0x01, 0x00, 0xb1, 0xff, 0x99, 0x01, 0xa7,
421 0x03, 0x15, 0x00, 0x07, 0x00, 0x00, 0x05, 0x23, 0x11, 0x03, 0x11, 0x33,
422 0x11, 0x13, 0x01, 0xa7, 0x1c, 0xda, 0x1c, 0xda, 0x67, 0x02, 0x37, 0xfe,
423 0xfe, 0x02, 0x47, 0xfe, 0x07, 0x01, 0x02, 0x00, 0x00, 0x01, 0x00, 0x9f,
424 0xff, 0x99, 0x01, 0xb9, 0x03, 0x14, 0x00, 0x09, 0x00, 0x00, 0x01, 0x27,
425 0x11, 0x23, 0x11, 0x07, 0x35, 0x37, 0x33, 0x17, 0x01, 0xb9, 0x91, 0x1b,
426 0x6e, 0x6e, 0x1b, 0x91, 0x02, 0x3c, 0xac, 0xfc, 0xb1, 0x03, 0x4c, 0x83,
427 0x2d, 0x85, 0xa9, 0x00, 0x00, 0x01, 0x00, 0x47, 0xff, 0x99, 0x02, 0x11,
428 0x03, 0x14, 0x00, 0x06, 0x00, 0x00, 0x05, 0x23, 0x01, 0x11, 0x23, 0x11,
429 0x33, 0x02, 0x11, 0x2b, 0xfe, 0x7d, 0x1c, 0x1c, 0x67, 0x03, 0x4f, 0xfc,
430 0xb1, 0x03, 0x7b, 0x00, 0x00, 0x01, 0x00, 0x1b, 0xff, 0x99, 0x02, 0x3d,
431 0x03, 0x14, 0x00, 0x0d, 0x00, 0x00, 0x01, 0x15, 0x07, 0x27, 0x11, 0x23,
432 0x11, 0x07, 0x27, 0x37, 0x17, 0x37, 0x33, 0x17, 0x02, 0x3d, 0x80, 0x83,
433 0x1b, 0x84, 0x80, 0x01, 0x7f, 0x84, 0x1b, 0x84, 0x03, 0x0f, 0x2f, 0x96,
434 0x9b, 0xfc, 0xb4, 0x03, 0x4c, 0x9b, 0x97, 0x2e, 0x96, 0x9b, 0x9b, 0x00,
435 0x00, 0x02, 0x00, 0xa9, 0xff, 0x99, 0x01, 0xaf, 0x03, 0x14, 0x00, 0x06,
436 0x00, 0x09, 0x00, 0x00, 0x01, 0x03, 0x11, 0x23, 0x11, 0x33, 0x30, 0x13,
437 0x27, 0x11, 0x01, 0xaf, 0xeb, 0x1b, 0x1b, 0xc4, 0xc4, 0x01, 0xfe, 0xfe,
438 0xeb, 0xfe, 0xb0, 0x03, 0x7b, 0xfe, 0xea, 0xe8, 0xfe, 0x30, 0x00, 0x00,
439 0x00, 0x01, 0x00, 0x9f, 0xff, 0x99, 0x01, 0xb9, 0x03, 0x14, 0x00, 0x0b,
440 0x00, 0x00, 0x01, 0x07, 0x11, 0x23, 0x11, 0x27, 0x35, 0x17, 0x35, 0x33,
441 0x15, 0x37, 0x01, 0xb9, 0x91, 0x1b, 0x6e, 0x6e, 0x1b, 0x91, 0x02, 0xbf,
442 0xab, 0xfd, 0x85, 0x02, 0x7c, 0x82, 0x2d, 0x80, 0xd0, 0xd2, 0xac, 0x00,
443 0x00, 0x01, 0x00, 0x47, 0xff, 0x99, 0x02, 0x11, 0x03, 0x14, 0x00, 0x12,
444 0x00, 0x00, 0x05, 0x23, 0x01, 0x11, 0x33, 0x32, 0x16, 0x15, 0x11, 0x23,
445 0x11, 0x34, 0x26, 0x2b, 0x01, 0x11, 0x23, 0x11, 0x33, 0x02, 0x11, 0x2b,
446 0xfe, 0x7d, 0x31, 0x21, 0x2c, 0x1b, 0x1d, 0x15, 0x31, 0x1c, 0x1c, 0x67,
447 0x03, 0x4f, 0xfe, 0xc2, 0x36, 0x25, 0xfe, 0x4a, 0x01, 0xb6, 0x17, 0x24,
448 0xfe, 0x0f, 0x03, 0x7b, 0x00, 0x02, 0x00, 0x69, 0xff, 0xfc, 0x01, 0xef,
449 0x02, 0x7f, 0x00, 0x09, 0x00, 0x0d, 0x00, 0x00, 0x01, 0x07, 0x17, 0x23,
450 0x27, 0x07, 0x23, 0x37, 0x27, 0x37, 0x17, 0x27, 0x07, 0x17, 0x01, 0xef,
451 0xb0, 0xb0, 0x27, 0x9e, 0x99, 0x27, 0xad, 0xae, 0xc3, 0x9b, 0x9b, 0x9b,
452 0x9b, 0x01, 0x9a, 0xd0, 0xce, 0xba, 0xb5, 0xcc, 0xcd, 0xe5, 0xe6, 0xb7,
453 0xb6, 0xb7, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x38, 0x02, 0x58,
454 0x03, 0x20, 0x00, 0x03, 0x00, 0x19, 0x00, 0x00, 0x11, 0x21, 0x11, 0x21,
455 0x01, 0x2f, 0x01, 0x07, 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, 0x3f, 0x01,
456 0x11, 0x14, 0x33, 0x32, 0x35, 0x11, 0x17, 0x16, 0x32, 0x36, 0x02, 0x58,
457 0xfd, 0xa8, 0x01, 0x9e, 0x04, 0x6e, 0x6c, 0x06, 0x0c, 0x0c, 0x0a, 0x06,
458 0x36, 0x16, 0x14, 0x34, 0x09, 0x12, 0x0d, 0x03, 0x20, 0xfc, 0x18, 0x02,
459 0x04, 0x0c, 0xc4, 0xc4, 0x06, 0x06, 0x05, 0x0f, 0x0c, 0x62, 0xfe, 0xaa,
460 0x1a, 0x1a, 0x01, 0x54, 0x60, 0x0c, 0x0e, 0x00, 0x00, 0x02, 0x00, 0x00,
461 0xff, 0x38, 0x02, 0x58, 0x03, 0x20, 0x00, 0x03, 0x00, 0x19, 0x00, 0x00,
462 0x11, 0x21, 0x11, 0x21, 0x13, 0x14, 0x1f, 0x01, 0x3f, 0x01, 0x34, 0x26,
463 0x22, 0x0f, 0x01, 0x11, 0x34, 0x23, 0x22, 0x15, 0x11, 0x27, 0x26, 0x23,
464 0x22, 0x06, 0x02, 0x58, 0xfd, 0xa8, 0xba, 0x06, 0x6c, 0x6e, 0x04, 0x0d,
465 0x12, 0x09, 0x34, 0x14, 0x16, 0x36, 0x06, 0x0a, 0x0c, 0x0c, 0x03, 0x20,
466 0xfc, 0x18, 0x01, 0xbe, 0x06, 0x06, 0xc4, 0xc4, 0x0c, 0x07, 0x0d, 0x0c,
467 0x60, 0x01, 0x54, 0x1a, 0x1a, 0xfe, 0xaa, 0x62, 0x0c, 0x0f, 0x00, 0x00,
468 0x00, 0x02, 0x00, 0x00, 0xff, 0x38, 0x02, 0x58, 0x03, 0x20, 0x00, 0x03,
469 0x00, 0x29, 0x00, 0x00, 0x11, 0x21, 0x11, 0x21, 0x13, 0x14, 0x1f, 0x01,
470 0x37, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x0f, 0x01, 0x11, 0x17, 0x16,
471 0x33, 0x32, 0x36, 0x35, 0x34, 0x2f, 0x01, 0x07, 0x06, 0x15, 0x14, 0x16,
472 0x33, 0x32, 0x3f, 0x01, 0x11, 0x27, 0x26, 0x23, 0x22, 0x06, 0x02, 0x58,
473 0xfd, 0xa8, 0xba, 0x05, 0x6d, 0x6d, 0x05, 0x0f, 0x07, 0x0b, 0x07, 0x35,
474 0x35, 0x07, 0x0b, 0x08, 0x0e, 0x05, 0x6d, 0x6d, 0x05, 0x10, 0x07, 0x0a,
475 0x07, 0x36, 0x36, 0x07, 0x0a, 0x07, 0x10, 0x03, 0x20, 0xfc, 0x18, 0x01,
476 0x9f, 0x05, 0x08, 0xc4, 0xc5, 0x08, 0x04, 0x07, 0x0d, 0x0d, 0x60, 0x01,
477 0x36, 0x60, 0x0d, 0x0d, 0x07, 0x04, 0x08, 0xc5, 0xc4, 0x08, 0x05, 0x08,
478 0x0c, 0x0d, 0x62, 0xfe, 0xc6, 0x62, 0x0d, 0x0c, 0x00, 0x03, 0x00, 0x00,
479 0xff, 0x38, 0x02, 0x58, 0x03, 0x20, 0x00, 0x03, 0x00, 0x21, 0x00, 0x2d,
480 0x00, 0x00, 0x11, 0x21, 0x11, 0x21, 0x13, 0x15, 0x14, 0x33, 0x32, 0x3d,
481 0x01, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, 0x15, 0x14, 0x33,
482 0x32, 0x3d, 0x01, 0x3e, 0x01, 0x35, 0x34, 0x26, 0x23, 0x22, 0x0e, 0x01,
483 0x13, 0x22, 0x06, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x34, 0x26, 0x23,
484 0x02, 0x58, 0xfd, 0xa8, 0x86, 0x15, 0x14, 0x44, 0x3d, 0x3e, 0x50, 0x4d,
485 0x58, 0x15, 0x14, 0x5e, 0x47, 0x62, 0x50, 0x28, 0x3f, 0x3e, 0x8f, 0x1a,
486 0x1f, 0x1f, 0x1a, 0x1b, 0x19, 0x20, 0x1f, 0x1a, 0x03, 0x20, 0xfc, 0x18,
487 0x02, 0xd9, 0x44, 0x1b, 0x1b, 0x29, 0x22, 0x3f, 0x32, 0x2b, 0x45, 0x25,
488 0x44, 0x1b, 0x1b, 0x29, 0x2c, 0x4c, 0x38, 0x45, 0x55, 0x10, 0x1d, 0xfe,
489 0x41, 0x1c, 0x2c, 0x1c, 0x1c, 0x2c, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x12,
490 0x00, 0xde, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39,
491 0x00, 0x74, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x09,
492 0x00, 0xc2, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06,
493 0x00, 0xda, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x37,
494 0x01, 0x51, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x1c,
495 0x01, 0xc3, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x19,
496 0x02, 0x14, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x09,
497 0x02, 0x42, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x03,
498 0x02, 0x54, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0xbc,
499 0x03, 0xd2, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x00, 0x00, 0x72,
500 0x00, 0x00, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x01, 0x00, 0x12,
501 0x00, 0xae, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x02, 0x00, 0x0c,
502 0x00, 0xcc, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x03, 0x00, 0x6e,
503 0x00, 0xe1, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x04, 0x00, 0x38,
504 0x01, 0x89, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x05, 0x00, 0x32,
505 0x01, 0xe0, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x06, 0x00, 0x12,
506 0x02, 0x2e, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x08, 0x00, 0x06,
507 0x02, 0x4c, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x0d, 0x01, 0x78,
508 0x02, 0x58, 0x00, 0x43, 0x00, 0x6f, 0x00, 0x70, 0x00, 0x79, 0x00, 0x6c,
509 0x00, 0x65, 0x00, 0x66, 0x00, 0x74, 0x00, 0x20, 0x00, 0x32, 0x00, 0x30,
510 0x00, 0x30, 0x00, 0x32, 0x00, 0x2c, 0x00, 0x20, 0x00, 0x32, 0x00, 0x30,
511 0x00, 0x30, 0x00, 0x33, 0x00, 0x2c, 0x00, 0x20, 0x00, 0x32, 0x00, 0x30,
512 0x00, 0x30, 0x00, 0x35, 0x00, 0x2c, 0x00, 0x20, 0x00, 0x32, 0x00, 0x30,
513 0x00, 0x30, 0x00, 0x38, 0x00, 0x20, 0x00, 0x46, 0x00, 0x72, 0x00, 0x65,
514 0x00, 0x65, 0x00, 0x20, 0x00, 0x53, 0x00, 0x6f, 0x00, 0x66, 0x00, 0x74,
515 0x00, 0x77, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x20, 0x00, 0x46,
516 0x00, 0x6f, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74,
517 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x2e, 0x00, 0x00, 0x43, 0x6f,
518 0x70, 0x79, 0x6c, 0x65, 0x66, 0x74, 0x20, 0x32, 0x30, 0x30, 0x32, 0x2c,
519 0x20, 0x32, 0x30, 0x30, 0x33, 0x2c, 0x20, 0x32, 0x30, 0x30, 0x35, 0x2c,
520 0x20, 0x32, 0x30, 0x30, 0x38, 0x20, 0x46, 0x72, 0x65, 0x65, 0x20, 0x53,
521 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x46, 0x6f, 0x75, 0x6e,
522 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x00, 0x00, 0x46, 0x00, 0x72,
523 0x00, 0x65, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x74,
524 0x00, 0x33, 0x00, 0x00, 0x46, 0x72, 0x65, 0x65, 0x46, 0x6f, 0x6e, 0x74,
525 0x33, 0x00, 0x00, 0x4d, 0x00, 0x65, 0x00, 0x64, 0x00, 0x69, 0x00, 0x75,
526 0x00, 0x6d, 0x00, 0x00, 0x4d, 0x65, 0x64, 0x69, 0x75, 0x6d, 0x00, 0x00,
527 0x46, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x46, 0x00, 0x6f, 0x00,
528 0x72, 0x00, 0x67, 0x00, 0x65, 0x00, 0x20, 0x00, 0x32, 0x00, 0x2e, 0x00,
529 0x30, 0x00, 0x20, 0x00, 0x3a, 0x00, 0x20, 0x00, 0x46, 0x00, 0x72, 0x00,
530 0x65, 0x00, 0x65, 0x00, 0x20, 0x00, 0x5a, 0x00, 0x2d, 0x00, 0x4d, 0x00,
531 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x65, 0x00,
532 0x20, 0x00, 0x47, 0x00, 0x72, 0x00, 0x61, 0x00, 0x70, 0x00, 0x68, 0x00,
533 0x69, 0x00, 0x63, 0x00, 0x73, 0x00, 0x20, 0x00, 0x46, 0x00, 0x6f, 0x00,
534 0x6e, 0x00, 0x74, 0x00, 0x20, 0x00, 0x3a, 0x00, 0x20, 0x00, 0x38, 0x00,
535 0x2d, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x32, 0x00, 0x30, 0x00, 0x32, 0x00,
536 0x30, 0x00, 0x00, 0x46, 0x6f, 0x6e, 0x74, 0x46, 0x6f, 0x72, 0x67, 0x65,
537 0x20, 0x32, 0x2e, 0x30, 0x20, 0x3a, 0x20, 0x46, 0x72, 0x65, 0x65, 0x20,
538 0x5a, 0x2d, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x20, 0x47, 0x72,
539 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x20, 0x46, 0x6f, 0x6e, 0x74, 0x20,
540 0x3a, 0x20, 0x38, 0x2d, 0x39, 0x2d, 0x32, 0x30, 0x32, 0x30, 0x00, 0x00,
541 0x46, 0x00, 0x72, 0x00, 0x65, 0x00, 0x65, 0x00, 0x20, 0x00, 0x5a, 0x00,
542 0x2d, 0x00, 0x4d, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x69, 0x00,
543 0x6e, 0x00, 0x65, 0x00, 0x20, 0x00, 0x47, 0x00, 0x72, 0x00, 0x61, 0x00,
544 0x70, 0x00, 0x68, 0x00, 0x69, 0x00, 0x63, 0x00, 0x73, 0x00, 0x20, 0x00,
545 0x46, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x00, 0x46, 0x72, 0x65,
546 0x65, 0x20, 0x5a, 0x2d, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x20,
547 0x47, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x20, 0x46, 0x6f, 0x6e,
548 0x74, 0x00, 0x00, 0x56, 0x00, 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x69,
549 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x24, 0x00, 0x52, 0x00, 0x65,
550 0x00, 0x76, 0x00, 0x69, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e,
551 0x00, 0x3a, 0x00, 0x20, 0x00, 0x31, 0x00, 0x2e, 0x00, 0x32, 0x00, 0x20,
552 0x00, 0x24, 0x00, 0x20, 0x00, 0x00, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
553 0x6e, 0x20, 0x24, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x3a,
554 0x20, 0x31, 0x2e, 0x32, 0x20, 0x24, 0x20, 0x00, 0x00, 0x46, 0x00, 0x72,
555 0x00, 0x65, 0x00, 0x65, 0x00, 0x46, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x74,
556 0x00, 0x33, 0x00, 0x00, 0x46, 0x72, 0x65, 0x65, 0x46, 0x6f, 0x6e, 0x74,
557 0x33, 0x00, 0x00, 0x47, 0x00, 0x4e, 0x00, 0x55, 0x00, 0x00, 0x47, 0x4e,
558 0x55, 0x00, 0x00, 0x54, 0x00, 0x68, 0x00, 0x65, 0x00, 0x20, 0x00, 0x75,
559 0x00, 0x73, 0x00, 0x65, 0x00, 0x20, 0x00, 0x6f, 0x00, 0x66, 0x00, 0x20,
560 0x00, 0x74, 0x00, 0x68, 0x00, 0x69, 0x00, 0x73, 0x00, 0x20, 0x00, 0x66,
561 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x20, 0x00, 0x69, 0x00, 0x73,
562 0x00, 0x20, 0x00, 0x67, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x74,
563 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x73, 0x00, 0x75, 0x00, 0x62,
564 0x00, 0x6a, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x20, 0x00, 0x74,
565 0x00, 0x6f, 0x00, 0x20, 0x00, 0x47, 0x00, 0x4e, 0x00, 0x55, 0x00, 0x20,
566 0x00, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61,
567 0x00, 0x6c, 0x00, 0x20, 0x00, 0x50, 0x00, 0x75, 0x00, 0x62, 0x00, 0x6c,
568 0x00, 0x69, 0x00, 0x63, 0x00, 0x20, 0x00, 0x4c, 0x00, 0x69, 0x00, 0x63,
569 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x20, 0x00, 0x61,
570 0x00, 0x73, 0x00, 0x20, 0x00, 0x70, 0x00, 0x75, 0x00, 0x62, 0x00, 0x6c,
571 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20,
572 0x00, 0x62, 0x00, 0x79, 0x00, 0x20, 0x00, 0x74, 0x00, 0x68, 0x00, 0x65,
573 0x00, 0x20, 0x00, 0x46, 0x00, 0x72, 0x00, 0x65, 0x00, 0x65, 0x00, 0x20,
574 0x00, 0x53, 0x00, 0x6f, 0x00, 0x66, 0x00, 0x74, 0x00, 0x77, 0x00, 0x61,
575 0x00, 0x72, 0x00, 0x65, 0x00, 0x20, 0x00, 0x46, 0x00, 0x6f, 0x00, 0x75,
576 0x00, 0x6e, 0x00, 0x64, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6f,
577 0x00, 0x6e, 0x00, 0x3b, 0x00, 0x20, 0x00, 0x65, 0x00, 0x69, 0x00, 0x74,
578 0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x20, 0x00, 0x76, 0x00, 0x65,
579 0x00, 0x72, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x20,
580 0x00, 0x32, 0x00, 0x20, 0x00, 0x6f, 0x00, 0x66, 0x00, 0x20, 0x00, 0x74,
581 0x00, 0x68, 0x00, 0x65, 0x00, 0x20, 0x00, 0x4c, 0x00, 0x69, 0x00, 0x63,
582 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x2c, 0x00, 0x20,
583 0x00, 0x6f, 0x00, 0x72, 0x00, 0x20, 0x00, 0x28, 0x00, 0x61, 0x00, 0x74,
584 0x00, 0x20, 0x00, 0x79, 0x00, 0x6f, 0x00, 0x75, 0x00, 0x72, 0x00, 0x20,
585 0x00, 0x6f, 0x00, 0x70, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e,
586 0x00, 0x29, 0x00, 0x20, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x79, 0x00, 0x20,
587 0x00, 0x6c, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x20,
588 0x00, 0x76, 0x00, 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6f,
589 0x00, 0x6e, 0x00, 0x2e, 0x00, 0x0a, 0x00, 0x00, 0x54, 0x68, 0x65, 0x20,
590 0x75, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20,
591 0x66, 0x6f, 0x6e, 0x74, 0x20, 0x69, 0x73, 0x20, 0x67, 0x72, 0x61, 0x6e,
592 0x74, 0x65, 0x64, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20,
593 0x74, 0x6f, 0x20, 0x47, 0x4e, 0x55, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72,
594 0x61, 0x6c, 0x20, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x20, 0x4c, 0x69,
595 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x61, 0x73, 0x20, 0x70, 0x75, 0x62,
596 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68,
597 0x65, 0x20, 0x46, 0x72, 0x65, 0x65, 0x20, 0x53, 0x6f, 0x66, 0x74, 0x77,
598 0x61, 0x72, 0x65, 0x20, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x74, 0x69,
599 0x6f, 0x6e, 0x3b, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x76,
600 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x32, 0x20, 0x6f, 0x66, 0x20,
601 0x74, 0x68, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c,
602 0x20, 0x6f, 0x72, 0x20, 0x28, 0x61, 0x74, 0x20, 0x79, 0x6f, 0x75, 0x72,
603 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x20, 0x61, 0x6e, 0x79,
604 0x20, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69,
605 0x6f, 0x6e, 0x2e, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
606 0x00, 0x00, 0x00, 0x00, 0xff, 0x83, 0x00, 0x32, 0x00, 0x00, 0x00, 0x01,
607 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
608 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02,
609 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, 0x08,
610 0x00, 0x09, 0x00, 0x0a, 0x00, 0x0b, 0x00, 0x0c, 0x00, 0x0d, 0x00, 0x0e,
611 0x00, 0x0f, 0x00, 0x10, 0x00, 0x11, 0x00, 0x12, 0x00, 0x13, 0x00, 0x14,
612 0x00, 0x15, 0x00, 0x16, 0x00, 0x17, 0x00, 0x18, 0x00, 0x19, 0x00, 0x1a,
613 0x00, 0x1b, 0x00, 0x1c, 0x00, 0x1d, 0x00, 0x1e, 0x00, 0x1f, 0x00, 0x20,
614 0x00, 0x21, 0x00, 0x22, 0x00, 0x23, 0x00, 0x24, 0x00, 0x25, 0x00, 0x26,
615 0x00, 0x27, 0x00, 0x28, 0x00, 0x29, 0x00, 0x2a, 0x00, 0x2b, 0x00, 0x2c,
616 0x00, 0x2d, 0x00, 0x2e, 0x00, 0x2f, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32,
617 0x00, 0x33, 0x00, 0x34, 0x00, 0x35, 0x00, 0x36, 0x00, 0x37, 0x00, 0x38,
618 0x00, 0x39, 0x00, 0x3a, 0x00, 0x3b, 0x00, 0x3c, 0x00, 0x3d, 0x00, 0x3e,
619 0x00, 0x3f, 0x00, 0x40, 0x00, 0x41, 0x00, 0x42, 0x00, 0x43, 0x00, 0x44,
620 0x00, 0x45, 0x00, 0x46, 0x00, 0x47, 0x00, 0x48, 0x00, 0x49, 0x00, 0x4a,
621 0x00, 0x4b, 0x00, 0x4c, 0x00, 0x4d, 0x00, 0x4e, 0x00, 0x4f, 0x00, 0x50,
622 0x00, 0x51, 0x00, 0x52, 0x00, 0x53, 0x00, 0x54, 0x00, 0x55, 0x00, 0x56,
623 0x00, 0x57, 0x00, 0x58, 0x00, 0x59, 0x00, 0x5a, 0x00, 0x5b, 0x00, 0x5c,
624 0x00, 0x5d, 0x00, 0x5e, 0x00, 0x5f, 0x00, 0x60, 0x00, 0x61, 0x00, 0x00,
625 0x00, 0x00, 0x00, 0x02, 0x00, 0x08, 0x00, 0x02, 0xff, 0xff, 0x00, 0x03,
626 0x00, 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x20,
627 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x03, 0x00, 0x61, 0x00, 0x01,
628 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
629 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
630 0xcc, 0x3d, 0xa2, 0xcf, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xde, 0x59, 0xef,
631 0x00, 0x00, 0x00, 0x00, 0xdb, 0x7d, 0x3a, 0x68
632 };
958958 ttfontsdone();
959959 /* now set the graphics font */
960960 if (!myfonts[8]) {
961 if (myfonts[4]->height(myfonts[4]) < 16)
961 if (!m_vga_fonts && m_fontfiles[FIXED_WIDTH_FONT]) {
962 int err;
963 SFONT *b = ttfontloader("<builtin_font3>",
964 myfonts[FIXED_WIDTH_FONT], &err);
965 setfontk(8, b);
966 b->refcount = 1;
967 } else if (myfonts[4]->height(myfonts[4]) < 16)
962968 myfonts[8] = SF_font3;
963969 else
964970 myfonts[8] = SF_font3double;
2929 #include FT_FREETYPE_H
3030 #include <freetype2/freetype/freetype.h>
3131
32 #include "sf_font3ttf.h"
33
3234 /***************************************************************/
3335
3436 typedef struct {
249251 return NULL;
250252 }
251253
252 *err = FT_New_Face(library, fname, 0, &face); /* create face object */
254 /* create face object */
255 if (strcmp(fname, "<builtin_font3>"))
256 *err = FT_New_Face(library, fname, 0, &face);
257 else
258 *err = FT_New_Memory_Face(library, SF_font3_ttf,
259 sizeof(SF_font3_ttf), 0, &face);
253260 if (*err) {
254261 res->sfont.destroy(&res->sfont);
255262 return NULL;
258265
259266 if (like) {
260267 SF_glyph *zero = like->getglyph(like, '0', TRUE);
261 *err = FT_Set_Pixel_Sizes(face, zero->dx, like->height(like));
268 *err = FT_Set_Pixel_Sizes(face, 0, like->height(like));
269
270 FT_Matrix tmat;
271 tmat.xy = tmat.yx = 0;
272 tmat.yy = 1<<16;
273 tmat.xx = (zero->dx << 16)/(face->size->metrics.max_advance >>6);
274 FT_Set_Transform(face, &tmat, NULL);
262275 } else
263276 *err = FT_Set_Pixel_Sizes(face, size, size);
264277 if (*err) {
294307 {
295308 char buf[FILENAME_MAX], *fn, *at, *fenv;
296309 int size = DEFSIZE, fnlen = -1;
310
311 if (!strcmp(fspec, "<builtin_font3>"))
312 return loadftype(fspec, size, like, err);
297313
298314 at = strchr(fspec, '@');
299315 if (at) {
7878
7979 int AcWidth = 640, AcHeight = 400;
8080 int option_scrollback_buffer = 0;
81 bool option_disable_color = 0;
8182 bool m_adaptiveMode = FALSE;
8283
8384 static void checkwidths()
411412 ResPict = sf_GetProfileString("Resources", "Pict", ResPict);
412413 ResSnd = sf_GetProfileString("Resources", "Snd", ResSnd);
413414
414 if (f_setup.interpreter_number == 0) {
415 z_header.interpreter_number =
416 sf_GetProfileInt("Interpreter", "Number", INTERP_AMIGA);
417 } else
418 z_header.interpreter_number = f_setup.interpreter_number;
415 z_header.interpreter_number = sf_GetProfileInt("Interpreter", "Number", INTERP_AMIGA);
419416
420417 f_setup.err_report_mode =
421418 sf_GetProfileInt("Interpreter", "Error Reporting", ERR_REPORT_ONCE);
438435 m_v6scale = sf_GetProfileInt("Display", "Infocom V6 Scaling", 2);
439436 m_gfxScale_w = 1.0;
440437 m_gfxScale_h = 1.0;
441 m_defaultFore = (sf_GetProfileInt("Display", "Foreground", 0xffffff));
442 m_defaultBack = (sf_GetProfileInt("Display", "Background", 0x800000));
438 sf_initcolours();
439 m_defaultFore = (sf_GetProfileInt("Display", "Foreground", m_colours[7]));
440 m_defaultBack = (sf_GetProfileInt("Display", "Background", m_colours[10]));
443441 m_morePrompts =
444442 sf_GetProfileInt("Display", "Show More Prompts", 1) ? true : false;
445443 m_gamma = sf_GetProfileDouble("Display", "Gamma", DEFAULT_GAMMA);
713711 z_header.flags &= ~SOUND_FLAG;
714712 }
715713
714 if (option_disable_color) {
715 z_header.default_foreground = WHITE_COLOUR;
716 z_header.default_background = BLACK_COLOUR;
717 if (z_header.flags & COLOUR_FLAG) z_header.flags &= ~COLOUR_FLAG;
718 }
719
716720 if (z_header.version >= V5) {
717721 zword mask = 0;
718722 if (z_header.version == V6)
725729 hx_back_colour = TrueToRGB5(sf_GetDefaultColour(false));
726730 }
727731 }
732
733
734 static void print_c_string (const char *s)
735 {
736 zchar c;
737
738 while ((c = *s++) != 0)
739 os_display_char (c);
740 } /* print_c_string */
728741
729742
730743 /*
745758
746759 if (sdl_active) {
747760 os_set_text_style(0);
748 os_display_string((zchar *) "\n\n");
761 print_c_string("\n\n");
749762 os_beep(BEEP_HIGH);
750763 os_set_text_style(BOLDFACE_STYLE);
751
752 os_display_string((zchar *) "Fatal error: ");
764 print_c_string("Fatal error: ");
753765 os_set_text_style(0);
754 os_display_string((zchar *) s);
755 os_display_string((zchar *) "\n\n");
756 new_line();
757 flush_buffer();
766 print_c_string(s);
758767 }
759768
760769 if (f_setup.ignore_errors) {
772781 SDL_Quit();
773782 }
774783 sf_cleanup_all();
775 exit(EXIT_FAILURE);
784 os_quit(EXIT_FAILURE);
776785 }
777786
778787
138138 static char user_names_format = 0;
139139 extern char *m_reslist_file;
140140 extern int option_scrollback_buffer;
141 extern bool option_disable_color;
141142
142143 static char *info_header =
143144 "FROTZ V%s - SDL graphics and audio interface.\n"
144145 "An interpreter for all Infocom and other Z-Machine games.\n\n"
145 "Syntax: sfrotz [options] story-file\n";
146 "Syntax: sfrotz [options] story-file [blorb file]\n";
146147
147148 static char *info[] = {
148149 "-a watch attribute setting",
149150 "-A watch attribute testing",
150151 "-b <colourname> background colour",
151152 "-c # context lines",
153 "-d disable color",
152154 "-f <colorname> foreground colour",
153155 "-F fullscreen mode",
154156 "-H # screen height",
252254
253255 extern int m_timerinterval;
254256
255 static char *options = "@:%aAb:B:c:f:FH:iI:l:L:m:N:oOPqr:s:S:tTu:vVW:xXZ:";
257 static char *options = "@:%aAb:B:c:df:FH:iI:l:L:m:N:oOPqr:s:S:tTu:vVW:xXZ:";
256258
257259 static int limit(int v, int m, int M)
258260 {
290292 option_scrollback_buffer = num;
291293 if (c == 'c')
292294 f_setup.context_lines = num;
295 if (c == 'd')
296 option_disable_color = 1;
293297 if (c == 'm')
294298 m_timerinterval = limit(num, 10, 1000000);
295299 if (c == 'N')
304308 user_screen_height = num;
305309 if (c == 'i')
306310 f_setup.ignore_errors = 1;
307 if (c == 'I')
311 if (c == 'I') {
308312 f_setup.interpreter_number = num;
313 z_header.interpreter_number = num;
314 }
309315 if (c == 'l')
310316 f_setup.left_margin = num;
311317 if (c == 'L') {
362368 printf("Git commit: %s\n", GIT_HASH);
363369 printf("Notes: %s\n", RELEASE_NOTES);
364370 printf(" Frotz was originally written by Stefan Jokisch.\n");
365 printf
366 (" It complies with standard 1.0 of Graham Nelson's specification.\n");
371 printf(" It complies with standard 1.0 of Graham Nelson's specification.\n");
367372 printf(" It was ported to Unix by Galen Hazelwood.\n");
368 printf
369 (" The core and SDL port are maintained by David Griffith.\n");
373 printf(" It is distributed under the GNU General Public License version 2 or\n");
374 printf(" (at your option) any later version.\n");
375 printf(" This software is offered as-is with no warranty or liability.\n");
376 printf(" The core and SDL port are maintained by David Griffith.\n");
370377 printf(" Frotz's homepage is https://661.org/proj/if/frotz/\n\n");
371378 os_quit(EXIT_SUCCESS);
372379 }
446453 f_setup.story_path = new_dirname(argv[zoptind]);
447454
448455 /* Create nice default file names */
449 f_setup.script_name =
450 malloc((strlen(f_setup.story_name) +
451 strlen(EXT_SCRIPT)) * sizeof(char) + 1);
452 memcpy(f_setup.script_name, f_setup.story_name, strlen(f_setup.story_name) * sizeof(char));
453 strncat(f_setup.script_name, EXT_SCRIPT, strlen(EXT_SCRIPT) + 1);
454
455 f_setup.command_name =
456 malloc((strlen(f_setup.story_name) +
457 strlen(EXT_COMMAND)) * sizeof(char) + 1);
458 memcpy(f_setup.command_name, f_setup.story_name, strlen(f_setup.story_name) * sizeof(char));
459 strncat(f_setup.command_name, EXT_COMMAND, strlen(EXT_COMMAND) + 1);
456 f_setup.script_name = malloc((strlen(f_setup.story_name) + strlen(EXT_SCRIPT) + 1) * sizeof(char));
457 memcpy(f_setup.script_name, f_setup.story_name, (strlen(f_setup.story_name) + strlen(EXT_SCRIPT)) * sizeof(char));
458 strncat(f_setup.script_name, EXT_SCRIPT, strlen(EXT_SCRIPT)+1);
459
460 f_setup.command_name = malloc((strlen(f_setup.story_name) + strlen(EXT_COMMAND) + 1) * sizeof(char));
461 memcpy(f_setup.command_name, f_setup.story_name, (strlen(f_setup.story_name) + strlen(EXT_COMMAND)) * sizeof(char));
462 strncat(f_setup.command_name, EXT_COMMAND, strlen(EXT_COMMAND)+1);
460463
461464 if (!f_setup.restore_mode) {
462 f_setup.save_name =
463 malloc((strlen(f_setup.story_name) +
464 strlen(EXT_SAVE)) * sizeof(char) + 1);
465 memcpy(f_setup.save_name, f_setup.story_name, strlen(f_setup.story_name) * sizeof(char));
465 f_setup.save_name = malloc((strlen(f_setup.story_name) + strlen(EXT_SAVE) + 1) * sizeof(char));
466 memcpy(f_setup.save_name, f_setup.story_name, (strlen(f_setup.story_name) + strlen(EXT_SAVE)) * sizeof(char));
466467 strncat(f_setup.save_name, EXT_SAVE, strlen(EXT_SAVE) + 1);
467468 } else { /* Set our auto load save as the name_save */
468 f_setup.save_name =
469 malloc((strlen(f_setup.tmp_save_name) +
470 strlen(EXT_SAVE)) * sizeof(char) + 1);
471 memcpy(f_setup.save_name, f_setup.tmp_save_name, strlen(f_setup.tmp_save_name) * sizeof(char));
469 f_setup.save_name = malloc((strlen(f_setup.tmp_save_name) + strlen(EXT_SAVE) + 1) * sizeof(char));
470 memcpy(f_setup.save_name, f_setup.tmp_save_name, (strlen(f_setup.story_name) + strlen(EXT_SAVE)) * sizeof(char));
472471 free(f_setup.tmp_save_name);
473472 }
474473
475 f_setup.aux_name =
476 malloc((strlen(f_setup.story_name) +
477 strlen(EXT_AUX)) * sizeof(char) + 1);
478 memcpy(f_setup.aux_name, f_setup.story_name, strlen(f_setup.story_name) * sizeof(char));
474 f_setup.aux_name = malloc((strlen(f_setup.story_name) + strlen(EXT_AUX) + 1) * sizeof(char));
475 memcpy(f_setup.aux_name, f_setup.story_name, (strlen(f_setup.story_name) + strlen(EXT_AUX)) * sizeof(char));
479476 strncat(f_setup.aux_name, EXT_AUX, strlen(EXT_AUX) + 1);
480477
481478 /* Save the executable file name */
737737 if (true) {
738738 mouse_button = e->button.button;
739739 set_mouse_xy(e->button.x, e->button.y);
740 return ZC_SINGLE_CLICK;
740 return (e->button.clicks == 1 ? ZC_SINGLE_CLICK : ZC_DOUBLE_CLICK);
741741 } else
742742 return 0;
743743 case SDL_KEYDOWN:
0 # For GNU Make.
1
2 SOURCES = x_init.c x_input.c x_pic.c x_sample.c x_screen.c x_text.c x_blorb.c
3 OBJECTS = $(SOURCES:.c=.o)
4 HEADERS = x_frotz.h x_setup.h x_blorb.h
5
6 ZFONTSBDF = Zork_r400-10.bdf Zork_r400-11.bdf Zork_r400-13.bdf Zork_r400-16.bdf Zork_r400-20.bdf
7 ZFONTSPCF = $(ZFONTSBDF:.bdf=.pcf)
8
9 TARGET = frotz_x11.a
10
11 ARFLAGS = rc
12
13 SOUND ?= ao
14
15 CFLAGS += -DNO_SOUND
16
17 .PHONY: clean
18 .SUFFIXES: .bdf .c .o .pcf
19 .DELETE_ON_ERROR:
20
21 $(TARGET): $(OBJECTS) $(ZFONTSPCF)
22 $(AR) $(ARFLAGS) $(TARGET) $(OBJECTS) $?
23 $(RANLIB) $@
24 @echo "** Done with X11 interface."
25
26 clean:
27 rm -f $(TARGET) $(OBJECTS) $(ZFONTSPCF)
28
29 %.o: %.c
30 $(CC) $(CFLAGS) -fPIC -fpic -o $@ -c $<
31
32 .bdf.pcf:
33 bdftopcf -t $< -o $@
34
0 STARTFONT 2.1
1 FONT -windows-Zork-medium-r-normal--10-100-72-72-c-60-misc-fontspecific
2 SIZE 10 96 96
3 FONTBOUNDINGBOX 6 10 0 -1
4 STARTPROPERTIES 4
5 FONT_ASCENT 9
6 FONT_DESCENT 1
7 CAP_HEIGHT 9
8 DEFAULT_CHAR 8224
9 ENDPROPERTIES
10 CHARS 96
11 STARTCHAR 0
12 ENCODING 32
13 SWIDTH 6000 0
14 DWIDTH 6 0
15 BBX 6 10 0 -1
16 BITMAP
17 00
18 00
19 00
20 00
21 00
22 00
23 00
24 00
25 00
26 00
27 ENDCHAR
28 STARTCHAR 1
29 ENCODING 33
30 SWIDTH 6000 0
31 DWIDTH 6 0
32 BBX 6 10 0 -1
33 BITMAP
34 00
35 00
36 00
37 20
38 60
39 FC
40 60
41 20
42 00
43 00
44 ENDCHAR
45 STARTCHAR 2
46 ENCODING 34
47 SWIDTH 6000 0
48 DWIDTH 6 0
49 BBX 6 10 0 -1
50 BITMAP
51 00
52 00
53 00
54 10
55 18
56 FC
57 18
58 10
59 00
60 00
61 ENDCHAR
62 STARTCHAR 3
63 ENCODING 35
64 SWIDTH 6000 0
65 DWIDTH 6 0
66 BBX 6 10 0 -1
67 BITMAP
68 04
69 08
70 08
71 10
72 10
73 20
74 20
75 40
76 40
77 80
78 ENDCHAR
79 STARTCHAR 4
80 ENCODING 36
81 SWIDTH 6000 0
82 DWIDTH 6 0
83 BBX 6 10 0 -1
84 BITMAP
85 80
86 40
87 40
88 20
89 20
90 10
91 08
92 08
93 04
94 04
95 ENDCHAR
96 STARTCHAR 5
97 ENCODING 37
98 SWIDTH 6000 0
99 DWIDTH 6 0
100 BBX 6 10 0 -1
101 BITMAP
102 00
103 00
104 00
105 00
106 00
107 00
108 00
109 00
110 00
111 00
112 ENDCHAR
113 STARTCHAR 6
114 ENCODING 38
115 SWIDTH 6000 0
116 DWIDTH 6 0
117 BBX 6 10 0 -1
118 BITMAP
119 00
120 00
121 00
122 00
123 00
124 FC
125 00
126 00
127 00
128 00
129 ENDCHAR
130 STARTCHAR 7
131 ENCODING 39
132 SWIDTH 6000 0
133 DWIDTH 6 0
134 BBX 6 10 0 -1
135 BITMAP
136 00
137 00
138 00
139 00
140 FC
141 00
142 00
143 00
144 00
145 00
146 ENDCHAR
147 STARTCHAR 8
148 ENCODING 40
149 SWIDTH 6000 0
150 DWIDTH 6 0
151 BBX 6 10 0 -1
152 BITMAP
153 10
154 10
155 10
156 10
157 10
158 10
159 10
160 10
161 10
162 10
163 ENDCHAR
164 STARTCHAR 9
165 ENCODING 41
166 SWIDTH 6000 0
167 DWIDTH 6 0
168 BBX 6 10 0 -1
169 BITMAP
170 20
171 20
172 20
173 20
174 20
175 20
176 20
177 20
178 20
179 20
180 ENDCHAR
181 STARTCHAR 10
182 ENCODING 42
183 SWIDTH 6000 0
184 DWIDTH 6 0
185 BBX 6 10 0 -1
186 BITMAP
187 10
188 10
189 10
190 10
191 FC
192 00
193 00
194 00
195 00
196 00
197 ENDCHAR
198 STARTCHAR 11
199 ENCODING 43
200 SWIDTH 6000 0
201 DWIDTH 6 0
202 BBX 6 10 0 -1
203 BITMAP
204 00
205 00
206 00
207 00
208 00
209 FC
210 10
211 10
212 10
213 10
214 ENDCHAR
215 STARTCHAR 12
216 ENCODING 44
217 SWIDTH 6000 0
218 DWIDTH 6 0
219 BBX 6 10 0 -1
220 BITMAP
221 10
222 10
223 10
224 10
225 10
226 1C
227 10
228 10
229 10
230 10
231 ENDCHAR
232 STARTCHAR 13
233 ENCODING 45
234 SWIDTH 6000 0
235 DWIDTH 6 0
236 BBX 6 10 0 -1
237 BITMAP
238 20
239 20
240 20
241 20
242 20
243 E0
244 20
245 20
246 20
247 20
248 ENDCHAR
249 STARTCHAR 14
250 ENCODING 46
251 SWIDTH 6000 0
252 DWIDTH 6 0
253 BBX 6 10 0 -1
254 BITMAP
255 20
256 20
257 20
258 20
259 20
260 3C
261 00
262 00
263 00
264 00
265 ENDCHAR
266 STARTCHAR 15
267 ENCODING 47
268 SWIDTH 6000 0
269 DWIDTH 6 0
270 BBX 6 10 0 -1
271 BITMAP
272 00
273 00
274 00
275 00
276 3C
277 20
278 20
279 20
280 20
281 20
282 ENDCHAR
283 STARTCHAR 16
284 ENCODING 48
285 SWIDTH 6000 0
286 DWIDTH 6 0
287 BBX 6 10 0 -1
288 BITMAP
289 00
290 00
291 00
292 00
293 F0
294 10
295 10
296 10
297 10
298 10
299 ENDCHAR
300 STARTCHAR 17
301 ENCODING 49
302 SWIDTH 6000 0
303 DWIDTH 6 0
304 BBX 6 10 0 -1
305 BITMAP
306 10
307 10
308 10
309 10
310 10
311 F0
312 00
313 00
314 00
315 00
316 ENDCHAR
317 STARTCHAR 18
318 ENCODING 50
319 SWIDTH 6000 0
320 DWIDTH 6 0
321 BBX 6 10 0 -1
322 BITMAP
323 20
324 20
325 20
326 20
327 20
328 3C
329 20
330 40
331 40
332 80
333 ENDCHAR
334 STARTCHAR 19
335 ENCODING 51
336 SWIDTH 6000 0
337 DWIDTH 6 0
338 BBX 6 10 0 -1
339 BITMAP
340 80
341 80
342 40
343 40
344 3C
345 20
346 20
347 20
348 20
349 20
350 ENDCHAR
351 STARTCHAR 20
352 ENCODING 52
353 SWIDTH 6000 0
354 DWIDTH 6 0
355 BBX 6 10 0 -1
356 BITMAP
357 04
358 08
359 08
360 F0
361 10
362 10
363 10
364 10
365 10
366 10
367 ENDCHAR
368 STARTCHAR 21
369 ENCODING 53
370 SWIDTH 6000 0
371 DWIDTH 6 0
372 BBX 6 10 0 -1
373 BITMAP
374 10
375 10
376 10
377 10
378 10
379 F0
380 10
381 08
382 08
383 04
384 ENDCHAR
385 STARTCHAR 22
386 ENCODING 54
387 SWIDTH 6000 0
388 DWIDTH 6 0
389 BBX 6 10 0 -1
390 BITMAP
391 FC
392 FC
393 FC
394 FC
395 FC
396 FC
397 FC
398 FC
399 FC
400 FC
401 ENDCHAR
402 STARTCHAR 23
403 ENCODING 55
404 SWIDTH 6000 0
405 DWIDTH 6 0
406 BBX 6 10 0 -1
407 BITMAP
408 FC
409 FC
410 FC
411 FC
412 FC
413 FC
414 00
415 00
416 00
417 00
418 ENDCHAR
419 STARTCHAR 24
420 ENCODING 56
421 SWIDTH 6000 0
422 DWIDTH 6 0
423 BBX 6 10 0 -1
424 BITMAP
425 00
426 00
427 00
428 00
429 FC
430 FC
431 FC
432 FC
433 FC
434 FC
435 ENDCHAR
436 STARTCHAR 25
437 ENCODING 57
438 SWIDTH 6000 0
439 DWIDTH 6 0
440 BBX 6 10 0 -1
441 BITMAP
442 F0
443 F0
444 F0
445 F0
446 F0
447 F0
448 F0
449 F0
450 F0
451 F0
452 ENDCHAR
453 STARTCHAR 26
454 ENCODING 58
455 SWIDTH 6000 0
456 DWIDTH 6 0
457 BBX 6 10 0 -1
458 BITMAP
459 3C
460 3C
461 3C
462 3C
463 3C
464 3C
465 3C
466 3C
467 3C
468 3C
469 ENDCHAR
470 STARTCHAR 27
471 ENCODING 59
472 SWIDTH 6000 0
473 DWIDTH 6 0
474 BBX 6 10 0 -1
475 BITMAP
476 10
477 10
478 10
479 10
480 FC
481 FC
482 FC
483 FC
484 FC
485 FC
486 ENDCHAR
487 STARTCHAR 28
488 ENCODING 60
489 SWIDTH 6000 0
490 DWIDTH 6 0
491 BBX 6 10 0 -1
492 BITMAP
493 FC
494 FC
495 FC
496 FC
497 FC
498 FC
499 10
500 10
501 10
502 10
503 ENDCHAR
504 STARTCHAR 29
505 ENCODING 61
506 SWIDTH 6000 0
507 DWIDTH 6 0
508 BBX 6 10 0 -1
509 BITMAP
510 F0
511 F0
512 F0
513 F0
514 F0
515 FC
516 F0
517 F0
518 F0
519 F0
520 ENDCHAR
521 STARTCHAR 30
522 ENCODING 62
523 SWIDTH 6000 0
524 DWIDTH 6 0
525 BBX 6 10 0 -1
526 BITMAP
527 3C
528 3C
529 3C
530 3C
531 3C
532 FC
533 3C
534 3C
535 3C
536 3C
537 ENDCHAR
538 STARTCHAR 31
539 ENCODING 63
540 SWIDTH 6000 0
541 DWIDTH 6 0
542 BBX 6 10 0 -1
543 BITMAP
544 3C
545 3C
546 3C
547 3C
548 3C
549 3C
550 00
551 00
552 00
553 00
554 ENDCHAR
555 STARTCHAR 32
556 ENCODING 64
557 SWIDTH 6000 0
558 DWIDTH 6 0
559 BBX 6 10 0 -1
560 BITMAP
561 00
562 00
563 00
564 00
565 3C
566 3C
567 3C
568 3C
569 3C
570 3C
571 ENDCHAR
572 STARTCHAR 33
573 ENCODING 65
574 SWIDTH 6000 0
575 DWIDTH 6 0
576 BBX 6 10 0 -1
577 BITMAP
578 00
579 00
580 00
581 00
582 00
583 F0
584 F0
585 F0
586 F0
587 F0
588 ENDCHAR
589 STARTCHAR 34
590 ENCODING 66
591 SWIDTH 6000 0
592 DWIDTH 6 0
593 BBX 6 10 0 -1
594 BITMAP
595 F0
596 F0
597 F0
598 F0
599 F0
600 F0
601 00
602 00
603 00
604 00
605 ENDCHAR
606 STARTCHAR 35
607 ENCODING 67
608 SWIDTH 6000 0
609 DWIDTH 6 0
610 BBX 6 10 0 -1
611 BITMAP
612 3C
613 3C
614 3C
615 3C
616 3C
617 3C
618 20
619 40
620 40
621 80
622 ENDCHAR
623 STARTCHAR 36
624 ENCODING 68
625 SWIDTH 6000 0
626 DWIDTH 6 0
627 BBX 6 10 0 -1
628 BITMAP
629 80
630 80
631 40
632 40
633 3C
634 3C
635 3C
636 3C
637 3C
638 3C
639 ENDCHAR
640 STARTCHAR 37
641 ENCODING 69
642 SWIDTH 6000 0
643 DWIDTH 6 0
644 BBX 6 10 0 -1
645 BITMAP
646 04
647 04
648 08
649 08
650 F0
651 F0
652 F0
653 F0
654 F0
655 F0
656 ENDCHAR
657 STARTCHAR 38
658 ENCODING 70
659 SWIDTH 6000 0
660 DWIDTH 6 0
661 BBX 6 10 0 -1
662 BITMAP
663 F0
664 F0
665 F0
666 F0
667 F0
668 F0
669 08
670 08
671 04
672 04
673 ENDCHAR
674 STARTCHAR 39
675 ENCODING 71
676 SWIDTH 6000 0
677 DWIDTH 6 0
678 BBX 6 10 0 -1
679 BITMAP
680 04
681 00
682 00
683 00
684 00
685 00
686 00
687 00
688 00
689 00
690 ENDCHAR
691 STARTCHAR 40
692 ENCODING 72
693 SWIDTH 6000 0
694 DWIDTH 6 0
695 BBX 6 10 0 -1
696 BITMAP
697 00
698 00
699 00
700 00
701 00
702 00
703 00
704 00
705 00
706 04
707 ENDCHAR
708 STARTCHAR 41
709 ENCODING 73
710 SWIDTH 6000 0
711 DWIDTH 6 0
712 BBX 6 10 0 -1
713 BITMAP
714 00
715 00
716 00
717 00
718 00
719 00
720 00
721 00
722 00
723 80
724 ENDCHAR
725 STARTCHAR 42
726 ENCODING 74
727 SWIDTH 6000 0
728 DWIDTH 6 0
729 BBX 6 10 0 -1
730 BITMAP
731 80
732 00
733 00
734 00
735 00
736 00
737 00
738 00
739 00
740 00
741 ENDCHAR
742 STARTCHAR 43
743 ENCODING 75
744 SWIDTH 6000 0
745 DWIDTH 6 0
746 BBX 6 10 0 -1
747 BITMAP
748 FC
749 00
750 00
751 00
752 00
753 00
754 00
755 00
756 00
757 00
758 ENDCHAR
759 STARTCHAR 44
760 ENCODING 76
761 SWIDTH 6000 0
762 DWIDTH 6 0
763 BBX 6 10 0 -1
764 BITMAP
765 00
766 00
767 00
768 00
769 00
770 00
771 00
772 00
773 00
774 FC
775 ENDCHAR
776 STARTCHAR 45
777 ENCODING 77
778 SWIDTH 6000 0
779 DWIDTH 6 0
780 BBX 6 10 0 -1
781 BITMAP
782 80
783 80
784 80
785 80
786 80
787 80
788 80
789 80
790 80
791 80
792 ENDCHAR
793 STARTCHAR 46
794 ENCODING 78
795 SWIDTH 6000 0
796 DWIDTH 6 0
797 BBX 6 10 0 -1
798 BITMAP
799 04
800 04
801 04
802 04
803 04
804 04
805 04
806 04
807 04
808 04
809 ENDCHAR
810 STARTCHAR 47
811 ENCODING 79
812 SWIDTH 6000 0
813 DWIDTH 6 0
814 BBX 6 10 0 -1
815 BITMAP
816 00
817 FC
818 00
819 00
820 00
821 00
822 00
823 00
824 FC
825 00
826 ENDCHAR
827 STARTCHAR 48
828 ENCODING 80
829 SWIDTH 6000 0
830 DWIDTH 6 0
831 BBX 6 10 0 -1
832 BITMAP
833 00
834 FC
835 80
836 80
837 80
838 80
839 80
840 80
841 FC
842 00
843 ENDCHAR
844 STARTCHAR 49
845 ENCODING 81
846 SWIDTH 6000 0
847 DWIDTH 6 0
848 BBX 6 10 0 -1
849 BITMAP
850 00
851 FC
852 C0
853 C0
854 C0
855 C0
856 C0
857 C0
858 FC
859 00
860 ENDCHAR
861 STARTCHAR 50
862 ENCODING 82
863 SWIDTH 6000 0
864 DWIDTH 6 0
865 BBX 6 10 0 -1
866 BITMAP
867 00
868 FC
869 C0
870 C0
871 C0
872 C0
873 C0
874 C0
875 FC
876 00
877 ENDCHAR
878 STARTCHAR 51
879 ENCODING 83
880 SWIDTH 6000 0
881 DWIDTH 6 0
882 BBX 6 10 0 -1
883 BITMAP
884 00
885 FC
886 E0
887 E0
888 E0
889 E0
890 E0
891 E0
892 FC
893 00
894 ENDCHAR
895 STARTCHAR 52
896 ENCODING 84
897 SWIDTH 6000 0
898 DWIDTH 6 0
899 BBX 6 10 0 -1
900 BITMAP
901 00
902 FC
903 F0
904 F0
905 F0
906 F0
907 F0
908 F0
909 FC
910 00
911 ENDCHAR
912 STARTCHAR 53
913 ENCODING 85
914 SWIDTH 6000 0
915 DWIDTH 6 0
916 BBX 6 10 0 -1
917 BITMAP
918 00
919 FC
920 F0
921 F0
922 F0
923 F0
924 F0
925 F0
926 FC
927 00
928 ENDCHAR
929 STARTCHAR 54
930 ENCODING 86
931 SWIDTH 6000 0
932 DWIDTH 6 0
933 BBX 6 10 0 -1
934 BITMAP
935 00
936 FC
937 F8
938 F8
939 F8
940 F8
941 F8
942 F8
943 FC
944 00
945 ENDCHAR
946 STARTCHAR 55
947 ENCODING 87
948 SWIDTH 6000 0
949 DWIDTH 6 0
950 BBX 6 10 0 -1
951 BITMAP
952 00
953 FC
954 FC
955 FC
956 FC
957 FC
958 FC
959 FC
960 FC
961 00
962 ENDCHAR
963 STARTCHAR 56
964 ENCODING 88
965 SWIDTH 6000 0
966 DWIDTH 6 0
967 BBX 6 10 0 -1
968 BITMAP
969 00
970 04
971 04
972 04
973 04
974 04
975 04
976 04
977 04
978 00
979 ENDCHAR
980 STARTCHAR 57
981 ENCODING 89
982 SWIDTH 6000 0
983 DWIDTH 6 0
984 BBX 6 10 0 -1
985 BITMAP
986 00
987 80
988 80
989 80
990 80
991 80
992 80
993 80
994 80
995 00
996 ENDCHAR
997 STARTCHAR 58
998 ENCODING 90
999 SWIDTH 6000 0
1000 DWIDTH 6 0
1001 BBX 6 10 0 -1
1002 BITMAP
1003 84
1004 48
1005 48
1006 30
1007 30
1008 30
1009 30
1010 48
1011 48
1012 84
1013 ENDCHAR
1014 STARTCHAR 59
1015 ENCODING 91
1016 SWIDTH 6000 0
1017 DWIDTH 6 0
1018 BBX 6 10 0 -1
1019 BITMAP
1020 10
1021 10
1022 10
1023 10
1024 10
1025 FC
1026 10
1027 10
1028 10
1029 10
1030 ENDCHAR
1031 STARTCHAR 60
1032 ENCODING 92
1033 SWIDTH 6000 0
1034 DWIDTH 6 0
1035 BBX 6 10 0 -1
1036 BITMAP
1037 10
1038 38
1039 7C
1040 10
1041 10
1042 10
1043 10
1044 10
1045 10
1046 10
1047 ENDCHAR
1048 STARTCHAR 61
1049 ENCODING 93
1050 SWIDTH 6000 0
1051 DWIDTH 6 0
1052 BBX 6 10 0 -1
1053 BITMAP
1054 10
1055 10
1056 10
1057 10
1058 10
1059 10
1060 10
1061 7C
1062 38
1063 10
1064 ENDCHAR
1065 STARTCHAR 62
1066 ENCODING 94
1067 SWIDTH 6000 0
1068 DWIDTH 6 0
1069 BBX 6 10 0 -1
1070 BITMAP
1071 10
1072 38
1073 7C
1074 10
1075 10
1076 10
1077 10
1078 7C
1079 38
1080 10
1081 ENDCHAR
1082 STARTCHAR 63
1083 ENCODING 95
1084 SWIDTH 6000 0
1085 DWIDTH 6 0
1086 BBX 6 10 0 -1
1087 BITMAP
1088 FC
1089 84
1090 84
1091 84
1092 84
1093 84
1094 84
1095 84
1096 84
1097 FC
1098 ENDCHAR
1099 STARTCHAR 64
1100 ENCODING 96
1101 SWIDTH 6000 0
1102 DWIDTH 6 0
1103 BBX 6 10 0 -1
1104 BITMAP
1105 30
1106 48
1107 08
1108 08
1109 10
1110 10
1111 10
1112 00
1113 00
1114 10
1115 ENDCHAR
1116 STARTCHAR 65
1117 ENCODING 97
1118 SWIDTH 6000 0
1119 DWIDTH 6 0
1120 BBX 6 10 0 -1
1121 BITMAP
1122 00
1123 C4
1124 A8
1125 90
1126 80
1127 C0
1128 A0
1129 90
1130 80
1131 80
1132 ENDCHAR
1133 STARTCHAR 66
1134 ENCODING 98
1135 SWIDTH 6000 0
1136 DWIDTH 6 0
1137 BBX 6 10 0 -1
1138 BITMAP
1139 00
1140 E0
1141 90
1142 88
1143 88
1144 F8
1145 88
1146 88
1147 90
1148 E0
1149 ENDCHAR
1150 STARTCHAR 67
1151 ENCODING 99
1152 SWIDTH 6000 0
1153 DWIDTH 6 0
1154 BBX 6 10 0 -1
1155 BITMAP
1156 00
1157 20
1158 30
1159 28
1160 20
1161 20
1162 20
1163 A0
1164 60
1165 20
1166 ENDCHAR
1167 STARTCHAR 68
1168 ENCODING 100
1169 SWIDTH 6000 0
1170 DWIDTH 6 0
1171 BBX 6 10 0 -1
1172 BITMAP
1173 00
1174 84
1175 CC
1176 CC
1177 B4
1178 B4
1179 B4
1180 CC
1181 CC
1182 84
1183 ENDCHAR
1184 STARTCHAR 69
1185 ENCODING 101
1186 SWIDTH 6000 0
1187 DWIDTH 6 0
1188 BBX 6 10 0 -1
1189 BITMAP
1190 00
1191 88
1192 D8
1193 A8
1194 88
1195 88
1196 88
1197 88
1198 88
1199 88
1200 ENDCHAR
1201 STARTCHAR 70
1202 ENCODING 102
1203 SWIDTH 6000 0
1204 DWIDTH 6 0
1205 BBX 6 10 0 -1
1206 BITMAP
1207 00
1208 A8
1209 A8
1210 D0
1211 D0
1212 A0
1213 A0
1214 C0
1215 C0
1216 80
1217 ENDCHAR
1218 STARTCHAR 71
1219 ENCODING 103
1220 SWIDTH 6000 0
1221 DWIDTH 6 0
1222 BBX 6 10 0 -1
1223 BITMAP
1224 00
1225 88
1226 88
1227 50
1228 50
1229 A8
1230 A8
1231 50
1232 50
1233 88
1234 ENDCHAR
1235 STARTCHAR 72
1236 ENCODING 104
1237 SWIDTH 6000 0
1238 DWIDTH 6 0
1239 BBX 6 10 0 -1
1240 BITMAP
1241 00
1242 C8
1243 A8
1244 A8
1245 98
1246 88
1247 C8
1248 C8
1249 A8
1250 98
1251 ENDCHAR
1252 STARTCHAR 73
1253 ENCODING 105
1254 SWIDTH 6000 0
1255 DWIDTH 6 0
1256 BBX 6 10 0 -1
1257 BITMAP
1258 00
1259 20
1260 20
1261 20
1262 20
1263 20
1264 20
1265 20
1266 20
1267 20
1268 ENDCHAR
1269 STARTCHAR 74
1270 ENCODING 106
1271 SWIDTH 6000 0
1272 DWIDTH 6 0
1273 BBX 6 10 0 -1
1274 BITMAP
1275 00
1276 20
1277 20
1278 70
1279 70
1280 A8
1281 A8
1282 70
1283 70
1284 20
1285 ENDCHAR
1286 STARTCHAR 75
1287 ENCODING 107
1288 SWIDTH 6000 0
1289 DWIDTH 6 0
1290 BBX 6 10 0 -1
1291 BITMAP
1292 00
1293 80
1294 80
1295 C0
1296 C0
1297 A0
1298 90
1299 90
1300 88
1301 88
1302 ENDCHAR
1303 STARTCHAR 76
1304 ENCODING 108
1305 SWIDTH 6000 0
1306 DWIDTH 6 0
1307 BBX 6 10 0 -1
1308 BITMAP
1309 00
1310 C0
1311 C0
1312 A0
1313 A0
1314 90
1315 80
1316 80
1317 80
1318 80
1319 ENDCHAR
1320 STARTCHAR 77
1321 ENCODING 109
1322 SWIDTH 6000 0
1323 DWIDTH 6 0
1324 BBX 6 10 0 -1
1325 BITMAP
1326 00
1327 88
1328 D8
1329 A8
1330 A8
1331 D8
1332 88
1333 88
1334 88
1335 88
1336 ENDCHAR
1337 STARTCHAR 78
1338 ENCODING 110
1339 SWIDTH 6000 0
1340 DWIDTH 6 0
1341 BBX 6 10 0 -1
1342 BITMAP
1343 00
1344 A0
1345 A0
1346 60
1347 60
1348 20
1349 20
1350 30
1351 30
1352 28
1353 ENDCHAR
1354 STARTCHAR 79
1355 ENCODING 111
1356 SWIDTH 6000 0
1357 DWIDTH 6 0
1358 BBX 6 10 0 -1
1359 BITMAP
1360 00
1361 C8
1362 B8
1363 88
1364 88
1365 C8
1366 B0
1367 80
1368 80
1369 80
1370 ENDCHAR
1371 STARTCHAR 80
1372 ENCODING 112
1373 SWIDTH 6000 0
1374 DWIDTH 6 0
1375 BBX 6 10 0 -1
1376 BITMAP
1377 00
1378 80
1379 80
1380 80
1381 80
1382 88
1383 98
1384 A8
1385 A8
1386 C8
1387 ENDCHAR
1388 STARTCHAR 81
1389 ENCODING 113
1390 SWIDTH 6000 0
1391 DWIDTH 6 0
1392 BBX 6 10 0 -1
1393 BITMAP
1394 00
1395 A8
1396 70
1397 20
1398 20
1399 20
1400 20
1401 20
1402 20
1403 20
1404 ENDCHAR
1405 STARTCHAR 82
1406 ENCODING 114
1407 SWIDTH 6000 0
1408 DWIDTH 6 0
1409 BBX 6 10 0 -1
1410 BITMAP
1411 00
1412 E0
1413 90
1414 88
1415 90
1416 E0
1417 90
1418 90
1419 88
1420 88
1421 ENDCHAR
1422 STARTCHAR 83
1423 ENCODING 115
1424 SWIDTH 6000 0
1425 DWIDTH 6 0
1426 BBX 6 10 0 -1
1427 BITMAP
1428 00
1429 80
1430 88
1431 98
1432 98
1433 A8
1434 C8
1435 C8
1436 88
1437 08
1438 ENDCHAR
1439 STARTCHAR 84
1440 ENCODING 116
1441 SWIDTH 6000 0
1442 DWIDTH 6 0
1443 BBX 6 10 0 -1
1444 BITMAP
1445 00
1446 70
1447 A8
1448 20
1449 20
1450 20
1451 20
1452 20
1453 20
1454 20
1455 ENDCHAR
1456 STARTCHAR 85
1457 ENCODING 117
1458 SWIDTH 6000 0
1459 DWIDTH 6 0
1460 BBX 6 10 0 -1
1461 BITMAP
1462 00
1463 40
1464 60
1465 60
1466 50
1467 48
1468 48
1469 48
1470 48
1471 48
1472 ENDCHAR
1473 STARTCHAR 86
1474 ENCODING 118
1475 SWIDTH 6000 0
1476 DWIDTH 6 0
1477 BBX 6 10 0 -1
1478 BITMAP
1479 00
1480 20
1481 50
1482 50
1483 20
1484 20
1485 50
1486 50
1487 88
1488 88
1489 ENDCHAR
1490 STARTCHAR 87
1491 ENCODING 119
1492 SWIDTH 6000 0
1493 DWIDTH 6 0
1494 BBX 6 10 0 -1
1495 BITMAP
1496 00
1497 70
1498 48
1499 48
1500 48
1501 70
1502 40
1503 40
1504 40
1505 40
1506 ENDCHAR
1507 STARTCHAR 88
1508 ENCODING 120
1509 SWIDTH 6000 0
1510 DWIDTH 6 0
1511 BBX 6 10 0 -1
1512 BITMAP
1513 00
1514 20
1515 20
1516 20
1517 20
1518 70
1519 A8
1520 A8
1521 A8
1522 A8
1523 ENDCHAR
1524 STARTCHAR 89
1525 ENCODING 121
1526 SWIDTH 6000 0
1527 DWIDTH 6 0
1528 BBX 6 10 0 -1
1529 BITMAP
1530 00
1531 E0
1532 B0
1533 A8
1534 A8
1535 E8
1536 A8
1537 B8
1538 A8
1539 A8
1540 ENDCHAR
1541 STARTCHAR 90
1542 ENCODING 122
1543 SWIDTH 6000 0
1544 DWIDTH 6 0
1545 BBX 6 10 0 -1
1546 BITMAP
1547 00
1548 78
1549 80
1550 80
1551 80
1552 80
1553 40
1554 40
1555 20
1556 38
1557 ENDCHAR
1558 STARTCHAR 91
1559 ENCODING 123
1560 SWIDTH 6000 0
1561 DWIDTH 6 0
1562 BBX 6 10 0 -1
1563 BITMAP
1564 DC
1565 8C
1566 04
1567 DC
1568 DC
1569 DC
1570 DC
1571 DC
1572 DC
1573 DC
1574 ENDCHAR
1575 STARTCHAR 92
1576 ENCODING 124
1577 SWIDTH 6000 0
1578 DWIDTH 6 0
1579 BBX 6 10 0 -1
1580 BITMAP
1581 DC
1582 DC
1583 DC
1584 DC
1585 DC
1586 DC
1587 DC
1588 04
1589 8C
1590 DC
1591 ENDCHAR
1592 STARTCHAR 93
1593 ENCODING 125
1594 SWIDTH 6000 0
1595 DWIDTH 6 0
1596 BBX 6 10 0 -1
1597 BITMAP
1598 DC
1599 8C
1600 04
1601 DC
1602 DC
1603 DC
1604 DC
1605 04
1606 8C
1607 DC
1608 ENDCHAR
1609 STARTCHAR 94
1610 ENCODING 126
1611 SWIDTH 6000 0
1612 DWIDTH 6 0
1613 BBX 6 10 0 -1
1614 BITMAP
1615 CC
1616 B4
1617 F8
1618 F8
1619 F8
1620 F4
1621 EC
1622 DC
1623 FC
1624 DC
1625 ENDCHAR
1626 STARTCHAR 95
1627 ENCODING 127
1628 SWIDTH 6000 0
1629 DWIDTH 6 0
1630 BBX 6 10 0 -1
1631 BITMAP
1632 00
1633 00
1634 00
1635 00
1636 00
1637 00
1638 00
1639 00
1640 00
1641 00
1642 ENDCHAR
1643 ENDFONT
0 STARTFONT 2.1
1 FONT -windows-Zork-medium-r-normal--11-110-72-72-c-70-misc-fontspecific
2 SIZE 11 96 96
3 FONTBOUNDINGBOX 7 11 0 -1
4 STARTPROPERTIES 4
5 FONT_ASCENT 10
6 FONT_DESCENT 1
7 CAP_HEIGHT 10
8 DEFAULT_CHAR 8224
9 ENDPROPERTIES
10 CHARS 96
11 STARTCHAR 0
12 ENCODING 32
13 SWIDTH 7000 0
14 DWIDTH 7 0
15 BBX 7 11 0 -1
16 BITMAP
17 00
18 00
19 00
20 00
21 00
22 00
23 00
24 00
25 00
26 00
27 00
28 ENDCHAR
29 STARTCHAR 1
30 ENCODING 33
31 SWIDTH 7000 0
32 DWIDTH 7 0
33 BBX 7 11 0 -1
34 BITMAP
35 00
36 00
37 00
38 20
39 60
40 FE
41 60
42 20
43 00
44 00
45 00
46 ENDCHAR
47 STARTCHAR 2
48 ENCODING 34
49 SWIDTH 7000 0
50 DWIDTH 7 0
51 BBX 7 11 0 -1
52 BITMAP
53 00
54 00
55 00
56 08
57 0C
58 FE
59 0C
60 08
61 00
62 00
63 00
64 ENDCHAR
65 STARTCHAR 3
66 ENCODING 35
67 SWIDTH 7000 0
68 DWIDTH 7 0
69 BBX 7 11 0 -1
70 BITMAP
71 02
72 04
73 04
74 08
75 08
76 10
77 20
78 20
79 40
80 40
81 80
82 ENDCHAR
83 STARTCHAR 4
84 ENCODING 36
85 SWIDTH 7000 0
86 DWIDTH 7 0
87 BBX 7 11 0 -1
88 BITMAP
89 80
90 40
91 40
92 20
93 20
94 10
95 08
96 08
97 04
98 04
99 02
100 ENDCHAR
101 STARTCHAR 5
102 ENCODING 37
103 SWIDTH 7000 0
104 DWIDTH 7 0
105 BBX 7 11 0 -1
106 BITMAP
107 00
108 00
109 00
110 00
111 00
112 00
113 00
114 00
115 00
116 00
117 00
118 ENDCHAR
119 STARTCHAR 6
120 ENCODING 38
121 SWIDTH 7000 0
122 DWIDTH 7 0
123 BBX 7 11 0 -1
124 BITMAP
125 00
126 00
127 00
128 00
129 00
130 FE
131 00
132 00
133 00
134 00
135 00
136 ENDCHAR
137 STARTCHAR 7
138 ENCODING 39
139 SWIDTH 7000 0
140 DWIDTH 7 0
141 BBX 7 11 0 -1
142 BITMAP
143 00
144 00
145 00
146 00
147 FE
148 00
149 00
150 00
151 00
152 00
153 00
154 ENDCHAR
155 STARTCHAR 8
156 ENCODING 40
157 SWIDTH 7000 0
158 DWIDTH 7 0
159 BBX 7 11 0 -1
160 BITMAP
161 10
162 10
163 10
164 10
165 10
166 10
167 10
168 10
169 10
170 10
171 10
172 ENDCHAR
173 STARTCHAR 9
174 ENCODING 41
175 SWIDTH 7000 0
176 DWIDTH 7 0
177 BBX 7 11 0 -1
178 BITMAP
179 20
180 20
181 20
182 20
183 20
184 20
185 20
186 20
187 20
188 20
189 20
190 ENDCHAR
191 STARTCHAR 10
192 ENCODING 42
193 SWIDTH 7000 0
194 DWIDTH 7 0
195 BBX 7 11 0 -1
196 BITMAP
197 10
198 10
199 10
200 10
201 FE
202 00
203 00
204 00
205 00
206 00
207 00
208 ENDCHAR
209 STARTCHAR 11
210 ENCODING 43
211 SWIDTH 7000 0
212 DWIDTH 7 0
213 BBX 7 11 0 -1
214 BITMAP
215 00
216 00
217 00
218 00
219 00
220 FE
221 10
222 10
223 10
224 10
225 10
226 ENDCHAR
227 STARTCHAR 12
228 ENCODING 44
229 SWIDTH 7000 0
230 DWIDTH 7 0
231 BBX 7 11 0 -1
232 BITMAP
233 10
234 10
235 10
236 10
237 10
238 1E
239 10
240 10
241 10
242 10
243 10
244 ENDCHAR
245 STARTCHAR 13
246 ENCODING 45
247 SWIDTH 7000 0
248 DWIDTH 7 0
249 BBX 7 11 0 -1
250 BITMAP
251 20
252 20
253 20
254 20
255 20
256 E0
257 20
258 20
259 20
260 20
261 20
262 ENDCHAR
263 STARTCHAR 14
264 ENCODING 46
265 SWIDTH 7000 0
266 DWIDTH 7 0
267 BBX 7 11 0 -1
268 BITMAP
269 20
270 20
271 20
272 20
273 20
274 3E
275 00
276 00
277 00
278 00
279 00
280 ENDCHAR
281 STARTCHAR 15
282 ENCODING 47
283 SWIDTH 7000 0
284 DWIDTH 7 0
285 BBX 7 11 0 -1
286 BITMAP
287 00
288 00
289 00
290 00
291 3E
292 20
293 20
294 20
295 20
296 20
297 20
298 ENDCHAR
299 STARTCHAR 16
300 ENCODING 48
301 SWIDTH 7000 0
302 DWIDTH 7 0
303 BBX 7 11 0 -1
304 BITMAP
305 00
306 00
307 00
308 00
309 F0
310 10
311 10
312 10
313 10
314 10
315 10
316 ENDCHAR
317 STARTCHAR 17
318 ENCODING 49
319 SWIDTH 7000 0
320 DWIDTH 7 0
321 BBX 7 11 0 -1
322 BITMAP
323 10
324 10
325 10
326 10
327 10
328 F0
329 00
330 00
331 00
332 00
333 00
334 ENDCHAR
335 STARTCHAR 18
336 ENCODING 50
337 SWIDTH 7000 0
338 DWIDTH 7 0
339 BBX 7 11 0 -1
340 BITMAP
341 20
342 20
343 20
344 20
345 20
346 3E
347 20
348 40
349 40
350 80
351 80
352 ENDCHAR
353 STARTCHAR 19
354 ENCODING 51
355 SWIDTH 7000 0
356 DWIDTH 7 0
357 BBX 7 11 0 -1
358 BITMAP
359 80
360 80
361 40
362 40
363 3E
364 20
365 20
366 20
367 20
368 20
369 20
370 ENDCHAR
371 STARTCHAR 20
372 ENCODING 52
373 SWIDTH 7000 0
374 DWIDTH 7 0
375 BBX 7 11 0 -1
376 BITMAP
377 02
378 04
379 04
380 08
381 F0
382 10
383 10
384 10
385 10
386 10
387 10
388 ENDCHAR
389 STARTCHAR 21
390 ENCODING 53
391 SWIDTH 7000 0
392 DWIDTH 7 0
393 BBX 7 11 0 -1
394 BITMAP
395 10
396 10
397 10
398 10
399 10
400 F0
401 08
402 08
403 04
404 04
405 02
406 ENDCHAR
407 STARTCHAR 22
408 ENCODING 54
409 SWIDTH 7000 0
410 DWIDTH 7 0
411 BBX 7 11 0 -1
412 BITMAP
413 FE
414 FE
415 FE
416 FE
417 FE
418 FE
419 FE
420 FE
421 FE
422 FE
423 FE
424 ENDCHAR
425 STARTCHAR 23
426 ENCODING 55
427 SWIDTH 7000 0
428 DWIDTH 7 0
429 BBX 7 11 0 -1
430 BITMAP
431 FE
432 FE
433 FE
434 FE
435 FE
436 FE
437 00
438 00
439 00
440 00
441 00
442 ENDCHAR
443 STARTCHAR 24
444 ENCODING 56
445 SWIDTH 7000 0
446 DWIDTH 7 0
447 BBX 7 11 0 -1
448 BITMAP
449 00
450 00
451 00
452 00
453 FE
454 FE
455 FE
456 FE
457 FE
458 FE
459 FE
460 ENDCHAR
461 STARTCHAR 25
462 ENCODING 57
463 SWIDTH 7000 0
464 DWIDTH 7 0
465 BBX 7 11 0 -1
466 BITMAP
467 F0
468 F0
469 F0
470 F0
471 F0
472 F0
473 F0
474 F0
475 F0
476 F0
477 F0
478 ENDCHAR
479 STARTCHAR 26
480 ENCODING 58
481 SWIDTH 7000 0
482 DWIDTH 7 0
483 BBX 7 11 0 -1
484 BITMAP
485 3E
486 3E
487 3E
488 3E
489 3E
490 3E
491 3E
492 3E
493 3E
494 3E
495 3E
496 ENDCHAR
497 STARTCHAR 27
498 ENCODING 59
499 SWIDTH 7000 0
500 DWIDTH 7 0
501 BBX 7 11 0 -1
502 BITMAP
503 10
504 10
505 10
506 10
507 FE
508 FE
509 FE
510 FE
511 FE
512 FE
513 FE
514 ENDCHAR
515 STARTCHAR 28
516 ENCODING 60
517 SWIDTH 7000 0
518 DWIDTH 7 0
519 BBX 7 11 0 -1
520 BITMAP
521 FE
522 FE
523 FE
524 FE
525 FE
526 FE
527 10
528 10
529 10
530 10
531 10
532 ENDCHAR
533 STARTCHAR 29
534 ENCODING 61
535 SWIDTH 7000 0
536 DWIDTH 7 0
537 BBX 7 11 0 -1
538 BITMAP
539 F0
540 F0
541 F0
542 F0
543 F0
544 FE
545 F0
546 F0
547 F0
548 F0
549 F0
550 ENDCHAR
551 STARTCHAR 30
552 ENCODING 62
553 SWIDTH 7000 0
554 DWIDTH 7 0
555 BBX 7 11 0 -1
556 BITMAP
557 3E
558 3E
559 3E
560 3E
561 3E
562 FE
563 3E
564 3E
565 3E
566 3E
567 3E
568 ENDCHAR
569 STARTCHAR 31
570 ENCODING 63
571 SWIDTH 7000 0
572 DWIDTH 7 0
573 BBX 7 11 0 -1
574 BITMAP
575 3E
576 3E
577 3E
578 3E
579 3E
580 3E
581 00
582 00
583 00
584 00
585 00
586 ENDCHAR
587 STARTCHAR 32
588 ENCODING 64
589 SWIDTH 7000 0
590 DWIDTH 7 0
591 BBX 7 11 0 -1
592 BITMAP
593 00
594 00
595 00
596 00
597 3E
598 3E
599 3E
600 3E
601 3E
602 3E
603 3E
604 ENDCHAR
605 STARTCHAR 33
606 ENCODING 65
607 SWIDTH 7000 0
608 DWIDTH 7 0
609 BBX 7 11 0 -1
610 BITMAP
611 00
612 00
613 00
614 00
615 F0
616 F0
617 F0
618 F0
619 F0
620 F0
621 F0
622 ENDCHAR
623 STARTCHAR 34
624 ENCODING 66
625 SWIDTH 7000 0
626 DWIDTH 7 0
627 BBX 7 11 0 -1
628 BITMAP
629 F0
630 F0
631 F0
632 F0
633 F0
634 F0
635 00
636 00
637 00
638 00
639 00
640 ENDCHAR
641 STARTCHAR 35
642 ENCODING 67
643 SWIDTH 7000 0
644 DWIDTH 7 0
645 BBX 7 11 0 -1
646 BITMAP
647 3E
648 3E
649 3E
650 3E
651 3E
652 3E
653 20
654 40
655 40
656 80
657 80
658 ENDCHAR
659 STARTCHAR 36
660 ENCODING 68
661 SWIDTH 7000 0
662 DWIDTH 7 0
663 BBX 7 11 0 -1
664 BITMAP
665 80
666 80
667 40
668 40
669 3E
670 3E
671 3E
672 3E
673 3E
674 3E
675 3E
676 ENDCHAR
677 STARTCHAR 37
678 ENCODING 69
679 SWIDTH 7000 0
680 DWIDTH 7 0
681 BBX 7 11 0 -1
682 BITMAP
683 02
684 04
685 04
686 08
687 F0
688 F0
689 F0
690 F0
691 F0
692 F0
693 F0
694 ENDCHAR
695 STARTCHAR 38
696 ENCODING 70
697 SWIDTH 7000 0
698 DWIDTH 7 0
699 BBX 7 11 0 -1
700 BITMAP
701 F0
702 F0
703 F0
704 F0
705 F0
706 F0
707 08
708 08
709 04
710 02
711 02
712 ENDCHAR
713 STARTCHAR 39
714 ENCODING 71
715 SWIDTH 7000 0
716 DWIDTH 7 0
717 BBX 7 11 0 -1
718 BITMAP
719 02
720 00
721 00
722 00
723 00
724 00
725 00
726 00
727 00
728 00
729 00
730 ENDCHAR
731 STARTCHAR 40
732 ENCODING 72
733 SWIDTH 7000 0
734 DWIDTH 7 0
735 BBX 7 11 0 -1
736 BITMAP
737 00
738 00
739 00
740 00
741 00
742 00
743 00
744 00
745 00
746 00
747 02
748 ENDCHAR
749 STARTCHAR 41
750 ENCODING 73
751 SWIDTH 7000 0
752 DWIDTH 7 0
753 BBX 7 11 0 -1
754 BITMAP
755 00
756 00
757 00
758 00
759 00
760 00
761 00
762 00
763 00
764 00
765 80
766 ENDCHAR
767 STARTCHAR 42
768 ENCODING 74
769 SWIDTH 7000 0
770 DWIDTH 7 0
771 BBX 7 11 0 -1
772 BITMAP
773 80
774 00
775 00
776 00
777 00
778 00
779 00
780 00
781 00
782 00
783 00
784 ENDCHAR
785 STARTCHAR 43
786 ENCODING 75
787 SWIDTH 7000 0
788 DWIDTH 7 0
789 BBX 7 11 0 -1
790 BITMAP
791 FE
792 00
793 00
794 00
795 00
796 00
797 00
798 00
799 00
800 00
801 00
802 ENDCHAR
803 STARTCHAR 44
804 ENCODING 76
805 SWIDTH 7000 0
806 DWIDTH 7 0
807 BBX 7 11 0 -1
808 BITMAP
809 00
810 00
811 00
812 00
813 00
814 00
815 00
816 00
817 00
818 00
819 FE
820 ENDCHAR
821 STARTCHAR 45
822 ENCODING 77
823 SWIDTH 7000 0
824 DWIDTH 7 0
825 BBX 7 11 0 -1
826 BITMAP
827 80
828 80
829 80
830 80
831 80
832 80
833 80
834 80
835 80
836 80
837 80
838 ENDCHAR
839 STARTCHAR 46
840 ENCODING 78
841 SWIDTH 7000 0
842 DWIDTH 7 0
843 BBX 7 11 0 -1
844 BITMAP
845 02
846 02
847 02
848 02
849 02
850 02
851 02
852 02
853 02
854 02
855 02
856 ENDCHAR
857 STARTCHAR 47
858 ENCODING 79
859 SWIDTH 7000 0
860 DWIDTH 7 0
861 BBX 7 11 0 -1
862 BITMAP
863 00
864 FE
865 00
866 00
867 00
868 00
869 00
870 00
871 00
872 FE
873 00
874 ENDCHAR
875 STARTCHAR 48
876 ENCODING 80
877 SWIDTH 7000 0
878 DWIDTH 7 0
879 BBX 7 11 0 -1
880 BITMAP
881 00
882 FE
883 80
884 80
885 80
886 80
887 80
888 80
889 80
890 FE
891 00
892 ENDCHAR
893 STARTCHAR 49
894 ENCODING 81
895 SWIDTH 7000 0
896 DWIDTH 7 0
897 BBX 7 11 0 -1
898 BITMAP
899 00
900 FE
901 C0
902 C0
903 C0
904 C0
905 C0
906 C0
907 C0
908 FE
909 00
910 ENDCHAR
911 STARTCHAR 50
912 ENCODING 82
913 SWIDTH 7000 0
914 DWIDTH 7 0
915 BBX 7 11 0 -1
916 BITMAP
917 00
918 FE
919 E0
920 E0
921 E0
922 E0
923 E0
924 E0
925 E0
926 FE
927 00
928 ENDCHAR
929 STARTCHAR 51
930 ENCODING 83
931 SWIDTH 7000 0
932 DWIDTH 7 0
933 BBX 7 11 0 -1
934 BITMAP
935 00
936 FE
937 E0
938 E0
939 E0
940 E0
941 E0
942 E0
943 E0
944 FE
945 00
946 ENDCHAR
947 STARTCHAR 52
948 ENCODING 84
949 SWIDTH 7000 0
950 DWIDTH 7 0
951 BBX 7 11 0 -1
952 BITMAP
953 00
954 FE
955 F0
956 F0
957 F0
958 F0
959 F0
960 F0
961 F0
962 FE
963 00
964 ENDCHAR
965 STARTCHAR 53
966 ENCODING 85
967 SWIDTH 7000 0
968 DWIDTH 7 0
969 BBX 7 11 0 -1
970 BITMAP
971 00
972 FE
973 F8
974 F8
975 F8
976 F8
977 F8
978 F8
979 F8
980 FE
981 00
982 ENDCHAR
983 STARTCHAR 54
984 ENCODING 86
985 SWIDTH 7000 0
986 DWIDTH 7 0
987 BBX 7 11 0 -1
988 BITMAP
989 00
990 FE
991 FC
992 FC
993 FC
994 FC
995 FC
996 FC
997 FC
998 FE
999 00
1000 ENDCHAR
1001 STARTCHAR 55
1002 ENCODING 87
1003 SWIDTH 7000 0
1004 DWIDTH 7 0
1005 BBX 7 11 0 -1
1006 BITMAP
1007 00
1008 FE
1009 FE
1010 FE
1011 FE
1012 FE
1013 FE
1014 FE
1015 FE
1016 FE
1017 00
1018 ENDCHAR
1019 STARTCHAR 56
1020 ENCODING 88
1021 SWIDTH 7000 0
1022 DWIDTH 7 0
1023 BBX 7 11 0 -1
1024 BITMAP
1025 00
1026 02
1027 02
1028 02
1029 02
1030 02
1031 02
1032 02
1033 02
1034 02
1035 00
1036 ENDCHAR
1037 STARTCHAR 57
1038 ENCODING 89
1039 SWIDTH 7000 0
1040 DWIDTH 7 0
1041 BBX 7 11 0 -1
1042 BITMAP
1043 00
1044 80
1045 80
1046 80
1047 80
1048 80
1049 80
1050 80
1051 80
1052 80
1053 00
1054 ENDCHAR
1055 STARTCHAR 58
1056 ENCODING 90
1057 SWIDTH 7000 0
1058 DWIDTH 7 0
1059 BBX 7 11 0 -1
1060 BITMAP
1061 82
1062 44
1063 44
1064 28
1065 28
1066 10
1067 28
1068 28
1069 44
1070 44
1071 82
1072 ENDCHAR
1073 STARTCHAR 59
1074 ENCODING 91
1075 SWIDTH 7000 0
1076 DWIDTH 7 0
1077 BBX 7 11 0 -1
1078 BITMAP
1079 10
1080 10
1081 10
1082 10
1083 10
1084 FE
1085 10
1086 10
1087 10
1088 10
1089 10
1090 ENDCHAR
1091 STARTCHAR 60
1092 ENCODING 92
1093 SWIDTH 7000 0
1094 DWIDTH 7 0
1095 BBX 7 11 0 -1
1096 BITMAP
1097 10
1098 38
1099 7C
1100 10
1101 10
1102 10
1103 10
1104 10
1105 10
1106 10
1107 10
1108 ENDCHAR
1109 STARTCHAR 61
1110 ENCODING 93
1111 SWIDTH 7000 0
1112 DWIDTH 7 0
1113 BBX 7 11 0 -1
1114 BITMAP
1115 10
1116 10
1117 10
1118 10
1119 10
1120 10
1121 10
1122 10
1123 7C
1124 38
1125 10
1126 ENDCHAR
1127 STARTCHAR 62
1128 ENCODING 94
1129 SWIDTH 7000 0
1130 DWIDTH 7 0
1131 BBX 7 11 0 -1
1132 BITMAP
1133 10
1134 38
1135 7C
1136 10
1137 10
1138 10
1139 10
1140 10
1141 7C
1142 38
1143 10
1144 ENDCHAR
1145 STARTCHAR 63
1146 ENCODING 95
1147 SWIDTH 7000 0
1148 DWIDTH 7 0
1149 BBX 7 11 0 -1
1150 BITMAP
1151 FE
1152 82
1153 82
1154 82
1155 82
1156 82
1157 82
1158 82
1159 82
1160 82
1161 FE
1162 ENDCHAR
1163 STARTCHAR 64
1164 ENCODING 96
1165 SWIDTH 7000 0
1166 DWIDTH 7 0
1167 BBX 7 11 0 -1
1168 BITMAP
1169 38
1170 44
1171 04
1172 08
1173 10
1174 10
1175 10
1176 10
1177 00
1178 00
1179 10
1180 ENDCHAR
1181 STARTCHAR 65
1182 ENCODING 97
1183 SWIDTH 7000 0
1184 DWIDTH 7 0
1185 BBX 7 11 0 -1
1186 BITMAP
1187 00
1188 C4
1189 A8
1190 90
1191 80
1192 80
1193 C0
1194 A0
1195 90
1196 80
1197 80
1198 ENDCHAR
1199 STARTCHAR 66
1200 ENCODING 98
1201 SWIDTH 7000 0
1202 DWIDTH 7 0
1203 BBX 7 11 0 -1
1204 BITMAP
1205 00
1206 E0
1207 90
1208 88
1209 84
1210 84
1211 FC
1212 84
1213 88
1214 90
1215 E0
1216 ENDCHAR
1217 STARTCHAR 67
1218 ENCODING 99
1219 SWIDTH 7000 0
1220 DWIDTH 7 0
1221 BBX 7 11 0 -1
1222 BITMAP
1223 00
1224 10
1225 18
1226 14
1227 12
1228 10
1229 10
1230 90
1231 50
1232 30
1233 10
1234 ENDCHAR
1235 STARTCHAR 68
1236 ENCODING 100
1237 SWIDTH 7000 0
1238 DWIDTH 7 0
1239 BBX 7 11 0 -1
1240 BITMAP
1241 00
1242 82
1243 C6
1244 C6
1245 AA
1246 92
1247 92
1248 AA
1249 C6
1250 C6
1251 82
1252 ENDCHAR
1253 STARTCHAR 69
1254 ENCODING 101
1255 SWIDTH 7000 0
1256 DWIDTH 7 0
1257 BBX 7 11 0 -1
1258 BITMAP
1259 00
1260 82
1261 C6
1262 AA
1263 92
1264 82
1265 82
1266 82
1267 82
1268 82
1269 82
1270 ENDCHAR
1271 STARTCHAR 70
1272 ENCODING 102
1273 SWIDTH 7000 0
1274 DWIDTH 7 0
1275 BBX 7 11 0 -1
1276 BITMAP
1277 00
1278 92
1279 A4
1280 C8
1281 90
1282 A0
1283 C0
1284 80
1285 80
1286 80
1287 80
1288 ENDCHAR
1289 STARTCHAR 71
1290 ENCODING 103
1291 SWIDTH 7000 0
1292 DWIDTH 7 0
1293 BBX 7 11 0 -1
1294 BITMAP
1295 00
1296 84
1297 48
1298 48
1299 BC
1300 B4
1301 78
1302 30
1303 48
1304 48
1305 84
1306 ENDCHAR
1307 STARTCHAR 72
1308 ENCODING 104
1309 SWIDTH 7000 0
1310 DWIDTH 7 0
1311 BBX 7 11 0 -1
1312 BITMAP
1313 00
1314 C4
1315 A4
1316 94
1317 94
1318 8C
1319 C4
1320 A4
1321 A4
1322 94
1323 8C
1324 ENDCHAR
1325 STARTCHAR 73
1326 ENCODING 105
1327 SWIDTH 7000 0
1328 DWIDTH 7 0
1329 BBX 7 11 0 -1
1330 BITMAP
1331 00
1332 20
1333 20
1334 20
1335 20
1336 20
1337 20
1338 20
1339 20
1340 20
1341 20
1342 ENDCHAR
1343 STARTCHAR 74
1344 ENCODING 106
1345 SWIDTH 7000 0
1346 DWIDTH 7 0
1347 BBX 7 11 0 -1
1348 BITMAP
1349 00
1350 18
1351 38
1352 34
1353 54
1354 92
1355 56
1356 54
1357 38
1358 38
1359 10
1360 ENDCHAR
1361 STARTCHAR 75
1362 ENCODING 107
1363 SWIDTH 7000 0
1364 DWIDTH 7 0
1365 BBX 7 11 0 -1
1366 BITMAP
1367 00
1368 40
1369 40
1370 40
1371 60
1372 50
1373 50
1374 48
1375 44
1376 44
1377 44
1378 ENDCHAR
1379 STARTCHAR 76
1380 ENCODING 108
1381 SWIDTH 7000 0
1382 DWIDTH 7 0
1383 BBX 7 11 0 -1
1384 BITMAP
1385 00
1386 60
1387 50
1388 48
1389 44
1390 40
1391 40
1392 40
1393 40
1394 40
1395 40
1396 ENDCHAR
1397 STARTCHAR 77
1398 ENCODING 109
1399 SWIDTH 7000 0
1400 DWIDTH 7 0
1401 BBX 7 11 0 -1
1402 BITMAP
1403 00
1404 CC
1405 B4
1406 B4
1407 B4
1408 CC
1409 CC
1410 84
1411 84
1412 84
1413 84
1414 ENDCHAR
1415 STARTCHAR 78
1416 ENCODING 110
1417 SWIDTH 7000 0
1418 DWIDTH 7 0
1419 BBX 7 11 0 -1
1420 BITMAP
1421 00
1422 90
1423 50
1424 50
1425 30
1426 30
1427 10
1428 18
1429 18
1430 14
1431 14
1432 ENDCHAR
1433 STARTCHAR 79
1434 ENCODING 111
1435 SWIDTH 7000 0
1436 DWIDTH 7 0
1437 BBX 7 11 0 -1
1438 BITMAP
1439 00
1440 C6
1441 AA
1442 92
1443 82
1444 C4
1445 A8
1446 90
1447 80
1448 80
1449 80
1450 ENDCHAR
1451 STARTCHAR 80
1452 ENCODING 112
1453 SWIDTH 7000 0
1454 DWIDTH 7 0
1455 BBX 7 11 0 -1
1456 BITMAP
1457 00
1458 40
1459 40
1460 40
1461 40
1462 44
1463 4C
1464 54
1465 54
1466 64
1467 44
1468 ENDCHAR
1469 STARTCHAR 81
1470 ENCODING 113
1471 SWIDTH 7000 0
1472 DWIDTH 7 0
1473 BBX 7 11 0 -1
1474 BITMAP
1475 00
1476 BE
1477 54
1478 10
1479 10
1480 10
1481 10
1482 10
1483 10
1484 10
1485 10
1486 ENDCHAR
1487 STARTCHAR 82
1488 ENCODING 114
1489 SWIDTH 7000 0
1490 DWIDTH 7 0
1491 BBX 7 11 0 -1
1492 BITMAP
1493 00
1494 78
1495 44
1496 44
1497 44
1498 78
1499 48
1500 48
1501 44
1502 44
1503 44
1504 ENDCHAR
1505 STARTCHAR 83
1506 ENCODING 115
1507 SWIDTH 7000 0
1508 DWIDTH 7 0
1509 BBX 7 11 0 -1
1510 BITMAP
1511 00
1512 80
1513 84
1514 8C
1515 94
1516 94
1517 A4
1518 C4
1519 84
1520 04
1521 04
1522 ENDCHAR
1523 STARTCHAR 84
1524 ENCODING 116
1525 SWIDTH 7000 0
1526 DWIDTH 7 0
1527 BBX 7 11 0 -1
1528 BITMAP
1529 00
1530 38
1531 54
1532 92
1533 10
1534 10
1535 10
1536 10
1537 10
1538 10
1539 10
1540 ENDCHAR
1541 STARTCHAR 85
1542 ENCODING 117
1543 SWIDTH 7000 0
1544 DWIDTH 7 0
1545 BBX 7 11 0 -1
1546 BITMAP
1547 00
1548 40
1549 60
1550 50
1551 48
1552 48
1553 48
1554 48
1555 48
1556 48
1557 48
1558 ENDCHAR
1559 STARTCHAR 86
1560 ENCODING 118
1561 SWIDTH 7000 0
1562 DWIDTH 7 0
1563 BBX 7 11 0 -1
1564 BITMAP
1565 00
1566 30
1567 48
1568 48
1569 30
1570 30
1571 30
1572 30
1573 48
1574 48
1575 84
1576 ENDCHAR
1577 STARTCHAR 87
1578 ENCODING 119
1579 SWIDTH 7000 0
1580 DWIDTH 7 0
1581 BBX 7 11 0 -1
1582 BITMAP
1583 00
1584 78
1585 44
1586 44
1587 44
1588 78
1589 40
1590 40
1591 40
1592 40
1593 40
1594 ENDCHAR
1595 STARTCHAR 88
1596 ENCODING 120
1597 SWIDTH 7000 0
1598 DWIDTH 7 0
1599 BBX 7 11 0 -1
1600 BITMAP
1601 00
1602 10
1603 10
1604 38
1605 38
1606 54
1607 54
1608 92
1609 92
1610 92
1611 92
1612 ENDCHAR
1613 STARTCHAR 89
1614 ENCODING 121
1615 SWIDTH 7000 0
1616 DWIDTH 7 0
1617 BBX 7 11 0 -1
1618 BITMAP
1619 00
1620 F0
1621 98
1622 D8
1623 D4
1624 BA
1625 BA
1626 96
1627 92
1628 92
1629 92
1630 ENDCHAR
1631 STARTCHAR 90
1632 ENCODING 122
1633 SWIDTH 7000 0
1634 DWIDTH 7 0
1635 BBX 7 11 0 -1
1636 BITMAP
1637 00
1638 3C
1639 40
1640 80
1641 80
1642 40
1643 40
1644 40
1645 20
1646 20
1647 1C
1648 ENDCHAR
1649 STARTCHAR 91
1650 ENCODING 123
1651 SWIDTH 7000 0
1652 DWIDTH 7 0
1653 BBX 7 11 0 -1
1654 BITMAP
1655 EE
1656 C6
1657 82
1658 EE
1659 EE
1660 EE
1661 EE
1662 EE
1663 EE
1664 EE
1665 EE
1666 ENDCHAR
1667 STARTCHAR 92
1668 ENCODING 124
1669 SWIDTH 7000 0
1670 DWIDTH 7 0
1671 BBX 7 11 0 -1
1672 BITMAP
1673 EE
1674 EE
1675 EE
1676 EE
1677 EE
1678 EE
1679 EE
1680 EE
1681 82
1682 C6
1683 EE
1684 ENDCHAR
1685 STARTCHAR 93
1686 ENCODING 125
1687 SWIDTH 7000 0
1688 DWIDTH 7 0
1689 BBX 7 11 0 -1
1690 BITMAP
1691 EE
1692 C6
1693 82
1694 EE
1695 EE
1696 EE
1697 EE
1698 EE
1699 82
1700 C6
1701 EE
1702 ENDCHAR
1703 STARTCHAR 94
1704 ENCODING 126
1705 SWIDTH 7000 0
1706 DWIDTH 7 0
1707 BBX 7 11 0 -1
1708 BITMAP
1709 C6
1710 BA
1711 FC
1712 FC
1713 FC
1714 FA
1715 F6
1716 EE
1717 EE
1718 FE
1719 EE
1720 ENDCHAR
1721 STARTCHAR 95
1722 ENCODING 127
1723 SWIDTH 7000 0
1724 DWIDTH 7 0
1725 BBX 7 11 0 -1
1726 BITMAP
1727 00
1728 00
1729 00
1730 00
1731 00
1732 00
1733 00
1734 00
1735 00
1736 00
1737 00
1738 ENDCHAR
1739 ENDFONT
0 STARTFONT 2.1
1 FONT -windows-Zork-medium-r-normal--13-130-72-72-c-80-misc-fontspecific
2 SIZE 13 96 96
3 FONTBOUNDINGBOX 8 13 0 -1
4 STARTPROPERTIES 4
5 FONT_ASCENT 12
6 FONT_DESCENT 1
7 CAP_HEIGHT 12
8 DEFAULT_CHAR 32
9 ENDPROPERTIES
10 CHARS 96
11 STARTCHAR 0
12 ENCODING 32
13 SWIDTH 8000 0
14 DWIDTH 8 0
15 BBX 8 13 0 -1
16 BITMAP
17 00
18 00
19 00
20 00
21 00
22 00
23 00
24 00
25 00
26 00
27 00
28 00
29 00
30 ENDCHAR
31 STARTCHAR 1
32 ENCODING 33
33 SWIDTH 8000 0
34 DWIDTH 8 0
35 BBX 8 13 0 -1
36 BITMAP
37 00
38 00
39 00
40 20
41 60
42 FF
43 60
44 20
45 00
46 00
47 00
48 00
49 00
50 ENDCHAR
51 STARTCHAR 2
52 ENCODING 34
53 SWIDTH 8000 0
54 DWIDTH 8 0
55 BBX 8 13 0 -1
56 BITMAP
57 00
58 00
59 00
60 04
61 06
62 FF
63 06
64 04
65 00
66 00
67 00
68 00
69 00
70 ENDCHAR
71 STARTCHAR 3
72 ENCODING 35
73 SWIDTH 8000 0
74 DWIDTH 8 0
75 BBX 8 13 0 -1
76 BITMAP
77 01
78 02
79 02
80 04
81 04
82 08
83 08
84 10
85 20
86 20
87 40
88 40
89 80
90 ENDCHAR
91 STARTCHAR 4
92 ENCODING 36
93 SWIDTH 8000 0
94 DWIDTH 8 0
95 BBX 8 13 0 -1
96 BITMAP
97 80
98 40
99 40
100 20
101 20
102 10
103 10
104 08
105 04
106 04
107 02
108 02
109 01
110 ENDCHAR
111 STARTCHAR 5
112 ENCODING 37
113 SWIDTH 8000 0
114 DWIDTH 8 0
115 BBX 8 13 0 -1
116 BITMAP
117 00
118 00
119 00
120 00
121 00
122 00
123 00
124 00
125 00
126 00
127 00
128 00
129 00
130 ENDCHAR
131 STARTCHAR 6
132 ENCODING 38
133 SWIDTH 8000 0
134 DWIDTH 8 0
135 BBX 8 13 0 -1
136 BITMAP
137 00
138 00
139 00
140 00
141 00
142 00
143 FF
144 00
145 00
146 00
147 00
148 00
149 00
150 ENDCHAR
151 STARTCHAR 7
152 ENCODING 39
153 SWIDTH 8000 0
154 DWIDTH 8 0
155 BBX 8 13 0 -1
156 BITMAP
157 00
158 00
159 00
160 00
161 00
162 FF
163 00
164 00
165 00
166 00
167 00
168 00
169 00
170 ENDCHAR
171 STARTCHAR 8
172 ENCODING 40
173 SWIDTH 8000 0
174 DWIDTH 8 0
175 BBX 8 13 0 -1
176 BITMAP
177 08
178 08
179 08
180 08
181 08
182 08
183 08
184 08
185 08
186 08
187 08
188 08
189 08
190 ENDCHAR
191 STARTCHAR 9
192 ENCODING 41
193 SWIDTH 8000 0
194 DWIDTH 8 0
195 BBX 8 13 0 -1
196 BITMAP
197 10
198 10
199 10
200 10
201 10
202 10
203 10
204 10
205 10
206 10
207 10
208 10
209 10
210 ENDCHAR
211 STARTCHAR 10
212 ENCODING 42
213 SWIDTH 8000 0
214 DWIDTH 8 0
215 BBX 8 13 0 -1
216 BITMAP
217 08
218 08
219 08
220 08
221 08
222 FF
223 00
224 00
225 00
226 00
227 00
228 00
229 00
230 ENDCHAR
231 STARTCHAR 11
232 ENCODING 43
233 SWIDTH 8000 0
234 DWIDTH 8 0
235 BBX 8 13 0 -1
236 BITMAP
237 00
238 00
239 00
240 00
241 00
242 00
243 FF
244 08
245 08
246 08
247 08
248 08
249 08
250 ENDCHAR
251 STARTCHAR 12
252 ENCODING 44
253 SWIDTH 8000 0
254 DWIDTH 8 0
255 BBX 8 13 0 -1
256 BITMAP
257 08
258 08
259 08
260 08
261 08
262 08
263 0F
264 08
265 08
266 08
267 08
268 08
269 08
270 ENDCHAR
271 STARTCHAR 13
272 ENCODING 45
273 SWIDTH 8000 0
274 DWIDTH 8 0
275 BBX 8 13 0 -1
276 BITMAP
277 10
278 10
279 10
280 10
281 10
282 10
283 F0
284 10
285 10
286 10
287 10
288 10
289 10
290 ENDCHAR
291 STARTCHAR 14
292 ENCODING 46
293 SWIDTH 8000 0
294 DWIDTH 8 0
295 BBX 8 13 0 -1
296 BITMAP
297 10
298 10
299 10
300 10
301 10
302 10
303 1F
304 00
305 00
306 00
307 00
308 00
309 00
310 ENDCHAR
311 STARTCHAR 15
312 ENCODING 47
313 SWIDTH 8000 0
314 DWIDTH 8 0
315 BBX 8 13 0 -1
316 BITMAP
317 00
318 00
319 00
320 00
321 00
322 1F
323 10
324 10
325 10
326 10
327 10
328 10
329 10
330 ENDCHAR
331 STARTCHAR 16
332 ENCODING 48
333 SWIDTH 8000 0
334 DWIDTH 8 0
335 BBX 8 13 0 -1
336 BITMAP
337 00
338 00
339 00
340 00
341 00
342 F8
343 08
344 08
345 08
346 08
347 08
348 08
349 08
350 ENDCHAR
351 STARTCHAR 17
352 ENCODING 49
353 SWIDTH 8000 0
354 DWIDTH 8 0
355 BBX 8 13 0 -1
356 BITMAP
357 08
358 08
359 08
360 08
361 08
362 08
363 F8
364 00
365 00
366 00
367 00
368 00
369 00
370 ENDCHAR
371 STARTCHAR 18
372 ENCODING 50
373 SWIDTH 8000 0
374 DWIDTH 8 0
375 BBX 8 13 0 -1
376 BITMAP
377 10
378 10
379 10
380 10
381 10
382 10
383 1F
384 20
385 20
386 40
387 40
388 80
389 80
390 ENDCHAR
391 STARTCHAR 19
392 ENCODING 51
393 SWIDTH 8000 0
394 DWIDTH 8 0
395 BBX 8 13 0 -1
396 BITMAP
397 80
398 80
399 40
400 40
401 20
402 1F
403 10
404 10
405 10
406 10
407 10
408 10
409 10
410 ENDCHAR
411 STARTCHAR 20
412 ENCODING 52
413 SWIDTH 8000 0
414 DWIDTH 8 0
415 BBX 8 13 0 -1
416 BITMAP
417 01
418 02
419 02
420 04
421 04
422 F8
423 08
424 08
425 08
426 08
427 08
428 08
429 08
430 ENDCHAR
431 STARTCHAR 21
432 ENCODING 53
433 SWIDTH 8000 0
434 DWIDTH 8 0
435 BBX 8 13 0 -1
436 BITMAP
437 08
438 08
439 08
440 08
441 08
442 08
443 F8
444 04
445 04
446 02
447 02
448 01
449 01
450 ENDCHAR
451 STARTCHAR 22
452 ENCODING 54
453 SWIDTH 8000 0
454 DWIDTH 8 0
455 BBX 8 13 0 -1
456 BITMAP
457 FF
458 FF
459 FF
460 FF
461 FF
462 FF
463 FF
464 FF
465 FF
466 FF
467 FF
468 FF
469 FF
470 ENDCHAR
471 STARTCHAR 23
472 ENCODING 55
473 SWIDTH 8000 0
474 DWIDTH 8 0
475 BBX 8 13 0 -1
476 BITMAP
477 FF
478 FF
479 FF
480 FF
481 FF
482 FF
483 FF
484 00
485 00
486 00
487 00
488 00
489 00
490 ENDCHAR
491 STARTCHAR 24
492 ENCODING 56
493 SWIDTH 8000 0
494 DWIDTH 8 0
495 BBX 8 13 0 -1
496 BITMAP
497 00
498 00
499 00
500 00
501 00
502 FF
503 FF
504 FF
505 FF
506 FF
507 FF
508 FF
509 FF
510 ENDCHAR
511 STARTCHAR 25
512 ENCODING 57
513 SWIDTH 8000 0
514 DWIDTH 8 0
515 BBX 8 13 0 -1
516 BITMAP
517 F8
518 F8
519 F8
520 F8
521 F8
522 F8
523 F8
524 F8
525 F8
526 F8
527 F8
528 F8
529 F8
530 ENDCHAR
531 STARTCHAR 26
532 ENCODING 58
533 SWIDTH 8000 0
534 DWIDTH 8 0
535 BBX 8 13 0 -1
536 BITMAP
537 1F
538 1F
539 1F
540 1F
541 1F
542 1F
543 1F
544 1F
545 1F
546 1F
547 1F
548 1F
549 1F
550 ENDCHAR
551 STARTCHAR 27
552 ENCODING 59
553 SWIDTH 8000 0
554 DWIDTH 8 0
555 BBX 8 13 0 -1
556 BITMAP
557 08
558 08
559 08
560 08
561 08
562 FF
563 FF
564 FF
565 FF
566 FF
567 FF
568 FF
569 FF
570 ENDCHAR
571 STARTCHAR 28
572 ENCODING 60
573 SWIDTH 8000 0
574 DWIDTH 8 0
575 BBX 8 13 0 -1
576 BITMAP
577 FF
578 FF
579 FF
580 FF
581 FF
582 FF
583 FF
584 08
585 08
586 08
587 08
588 08
589 08
590 ENDCHAR
591 STARTCHAR 29
592 ENCODING 61
593 SWIDTH 8000 0
594 DWIDTH 8 0
595 BBX 8 13 0 -1
596 BITMAP
597 F8
598 F8
599 F8
600 F8
601 F8
602 F8
603 FF
604 F8
605 F8
606 F8
607 F8
608 F8
609 F8
610 ENDCHAR
611 STARTCHAR 30
612 ENCODING 62
613 SWIDTH 8000 0
614 DWIDTH 8 0
615 BBX 8 13 0 -1
616 BITMAP
617 1F
618 1F
619 1F
620 1F
621 1F
622 1F
623 FF
624 1F
625 1F
626 1F
627 1F
628 1F
629 1F
630 ENDCHAR
631 STARTCHAR 31
632 ENCODING 63
633 SWIDTH 8000 0
634 DWIDTH 8 0
635 BBX 8 13 0 -1
636 BITMAP
637 1F
638 1F
639 1F
640 1F
641 1F
642 1F
643 1F
644 00
645 00
646 00
647 00
648 00
649 00
650 ENDCHAR
651 STARTCHAR 32
652 ENCODING 64
653 SWIDTH 8000 0
654 DWIDTH 8 0
655 BBX 8 13 0 -1
656 BITMAP
657 00
658 00
659 00
660 00
661 00
662 1F
663 1F
664 1F
665 1F
666 1F
667 1F
668 1F
669 1F
670 ENDCHAR
671 STARTCHAR 33
672 ENCODING 65
673 SWIDTH 8000 0
674 DWIDTH 8 0
675 BBX 8 13 0 -1
676 BITMAP
677 00
678 00
679 00
680 00
681 00
682 F8
683 F8
684 F8
685 F8
686 F8
687 F8
688 F8
689 F8
690 ENDCHAR
691 STARTCHAR 34
692 ENCODING 66
693 SWIDTH 8000 0
694 DWIDTH 8 0
695 BBX 8 13 0 -1
696 BITMAP
697 F8
698 F8
699 F8
700 F8
701 F8
702 F8
703 F8
704 00
705 00
706 00
707 00
708 00
709 00
710 ENDCHAR
711 STARTCHAR 35
712 ENCODING 67
713 SWIDTH 8000 0
714 DWIDTH 8 0
715 BBX 8 13 0 -1
716 BITMAP
717 1F
718 1F
719 1F
720 1F
721 1F
722 1F
723 1F
724 10
725 20
726 20
727 40
728 40
729 80
730 ENDCHAR
731 STARTCHAR 36
732 ENCODING 68
733 SWIDTH 8000 0
734 DWIDTH 8 0
735 BBX 8 13 0 -1
736 BITMAP
737 80
738 40
739 40
740 20
741 20
742 1F
743 1F
744 1F
745 1F
746 1F
747 1F
748 1F
749 1F
750 ENDCHAR
751 STARTCHAR 37
752 ENCODING 69
753 SWIDTH 8000 0
754 DWIDTH 8 0
755 BBX 8 13 0 -1
756 BITMAP
757 01
758 02
759 02
760 04
761 04
762 F8
763 F8
764 F8
765 F8
766 F8
767 F8
768 F8
769 F8
770 ENDCHAR
771 STARTCHAR 38
772 ENCODING 70
773 SWIDTH 8000 0
774 DWIDTH 8 0
775 BBX 8 13 0 -1
776 BITMAP
777 F8
778 F8
779 F8
780 F8
781 F8
782 F8
783 F8
784 08
785 04
786 04
787 02
788 02
789 01
790 ENDCHAR
791 STARTCHAR 39
792 ENCODING 71
793 SWIDTH 8000 0
794 DWIDTH 8 0
795 BBX 8 13 0 -1
796 BITMAP
797 01
798 00
799 00
800 00
801 00
802 00
803 00
804 00
805 00
806 00
807 00
808 00
809 00
810 ENDCHAR
811 STARTCHAR 40
812 ENCODING 72
813 SWIDTH 8000 0
814 DWIDTH 8 0
815 BBX 8 13 0 -1
816 BITMAP
817 00
818 00
819 00
820 00
821 00
822 00
823 00
824 00
825 00
826 00
827 00
828 00
829 01
830 ENDCHAR
831 STARTCHAR 41
832 ENCODING 73
833 SWIDTH 8000 0
834 DWIDTH 8 0
835 BBX 8 13 0 -1
836 BITMAP
837 00
838 00
839 00
840 00
841 00
842 00
843 00
844 00
845 00
846 00
847 00
848 00
849 80
850 ENDCHAR
851 STARTCHAR 42
852 ENCODING 74
853 SWIDTH 8000 0
854 DWIDTH 8 0
855 BBX 8 13 0 -1
856 BITMAP
857 80
858 00
859 00
860 00
861 00
862 00
863 00
864 00
865 00
866 00
867 00
868 00
869 00
870 ENDCHAR
871 STARTCHAR 43
872 ENCODING 75
873 SWIDTH 8000 0
874 DWIDTH 8 0
875 BBX 8 13 0 -1
876 BITMAP
877 FF
878 00
879 00
880 00
881 00
882 00
883 00
884 00
885 00
886 00
887 00
888 00
889 00
890 ENDCHAR
891 STARTCHAR 44
892 ENCODING 76
893 SWIDTH 8000 0
894 DWIDTH 8 0
895 BBX 8 13 0 -1
896 BITMAP
897 00
898 00
899 00
900 00
901 00
902 00
903 00
904 00
905 00
906 00
907 00
908 00
909 FF
910 ENDCHAR
911 STARTCHAR 45
912 ENCODING 77
913 SWIDTH 8000 0
914 DWIDTH 8 0
915 BBX 8 13 0 -1
916 BITMAP
917 80
918 80
919 80
920 80
921 80
922 80
923 80
924 80
925 80
926 80
927 80
928 80
929 80
930 ENDCHAR
931 STARTCHAR 46
932 ENCODING 78
933 SWIDTH 8000 0
934 DWIDTH 8 0
935 BBX 8 13 0 -1
936 BITMAP
937 01
938 01
939 01
940 01
941 01
942 01
943 01
944 01
945 01
946 01
947 01
948 01
949 01
950 ENDCHAR
951 STARTCHAR 47
952 ENCODING 79
953 SWIDTH 8000 0
954 DWIDTH 8 0
955 BBX 8 13 0 -1
956 BITMAP
957 00
958 FF
959 00
960 00
961 00
962 00
963 00
964 00
965 00
966 00
967 00
968 FF
969 00
970 ENDCHAR
971 STARTCHAR 48
972 ENCODING 80
973 SWIDTH 8000 0
974 DWIDTH 8 0
975 BBX 8 13 0 -1
976 BITMAP
977 00
978 FF
979 80
980 80
981 80
982 80
983 80
984 80
985 80
986 80
987 80
988 FF
989 00
990 ENDCHAR
991 STARTCHAR 49
992 ENCODING 81
993 SWIDTH 8000 0
994 DWIDTH 8 0
995 BBX 8 13 0 -1
996 BITMAP
997 00
998 FF
999 C0
1000 C0
1001 C0
1002 C0
1003 C0
1004 C0
1005 C0
1006 C0
1007 C0
1008 FF
1009 00
1010 ENDCHAR
1011 STARTCHAR 50
1012 ENCODING 82
1013 SWIDTH 8000 0
1014 DWIDTH 8 0
1015 BBX 8 13 0 -1
1016 BITMAP
1017 00
1018 FF
1019 E0
1020 E0
1021 E0
1022 E0
1023 E0
1024 E0
1025 E0
1026 E0
1027 E0
1028 FF
1029 00
1030 ENDCHAR
1031 STARTCHAR 51
1032 ENCODING 83
1033 SWIDTH 8000 0
1034 DWIDTH 8 0
1035 BBX 8 13 0 -1
1036 BITMAP
1037 00
1038 FF
1039 F0
1040 F0
1041 F0
1042 F0
1043 F0
1044 F0
1045 F0
1046 F0
1047 F0
1048 FF
1049 00
1050 ENDCHAR
1051 STARTCHAR 52
1052 ENCODING 84
1053 SWIDTH 8000 0
1054 DWIDTH 8 0
1055 BBX 8 13 0 -1
1056 BITMAP
1057 00
1058 FF
1059 F8
1060 F8
1061 F8
1062 F8
1063 F8
1064 F8
1065 F8
1066 F8
1067 F8
1068 FF
1069 00
1070 ENDCHAR
1071 STARTCHAR 53
1072 ENCODING 85
1073 SWIDTH 8000 0
1074 DWIDTH 8 0
1075 BBX 8 13 0 -1
1076 BITMAP
1077 00
1078 FF
1079 FC
1080 FC
1081 FC
1082 FC
1083 FC
1084 FC
1085 FC
1086 FC
1087 FC
1088 FF
1089 00
1090 ENDCHAR
1091 STARTCHAR 54
1092 ENCODING 86
1093 SWIDTH 8000 0
1094 DWIDTH 8 0
1095 BBX 8 13 0 -1
1096 BITMAP
1097 00
1098 FF
1099 FE
1100 FE
1101 FE
1102 FE
1103 FE
1104 FE
1105 FE
1106 FE
1107 FE
1108 FF
1109 00
1110 ENDCHAR
1111 STARTCHAR 55
1112 ENCODING 87
1113 SWIDTH 8000 0
1114 DWIDTH 8 0
1115 BBX 8 13 0 -1
1116 BITMAP
1117 00
1118 FF
1119 FF
1120 FF
1121 FF
1122 FF
1123 FF
1124 FF
1125 FF
1126 FF
1127 FF
1128 FF
1129 00
1130 ENDCHAR
1131 STARTCHAR 56
1132 ENCODING 88
1133 SWIDTH 8000 0
1134 DWIDTH 8 0
1135 BBX 8 13 0 -1
1136 BITMAP
1137 00
1138 01
1139 01
1140 01
1141 01
1142 01
1143 01
1144 01
1145 01
1146 01
1147 01
1148 01
1149 00
1150 ENDCHAR
1151 STARTCHAR 57
1152 ENCODING 89
1153 SWIDTH 8000 0
1154 DWIDTH 8 0
1155 BBX 8 13 0 -1
1156 BITMAP
1157 00
1158 80
1159 80
1160 80
1161 80
1162 80
1163 80
1164 80
1165 80
1166 80
1167 80
1168 80
1169 00
1170 ENDCHAR
1171 STARTCHAR 58
1172 ENCODING 90
1173 SWIDTH 8000 0
1174 DWIDTH 8 0
1175 BBX 8 13 0 -1
1176 BITMAP
1177 81
1178 42
1179 42
1180 24
1181 24
1182 18
1183 18
1184 18
1185 24
1186 24
1187 42
1188 42
1189 81
1190 ENDCHAR
1191 STARTCHAR 59
1192 ENCODING 91
1193 SWIDTH 8000 0
1194 DWIDTH 8 0
1195 BBX 8 13 0 -1
1196 BITMAP
1197 08
1198 08
1199 08
1200 08
1201 08
1202 08
1203 FF
1204 08
1205 08
1206 08
1207 08
1208 08
1209 08
1210 ENDCHAR
1211 STARTCHAR 60
1212 ENCODING 92
1213 SWIDTH 8000 0
1214 DWIDTH 8 0
1215 BBX 8 13 0 -1
1216 BITMAP
1217 08
1218 1C
1219 3E
1220 08
1221 08
1222 08
1223 08
1224 08
1225 08
1226 08
1227 08
1228 08
1229 08
1230 ENDCHAR
1231 STARTCHAR 61
1232 ENCODING 93
1233 SWIDTH 8000 0
1234 DWIDTH 8 0
1235 BBX 8 13 0 -1
1236 BITMAP
1237 08
1238 08
1239 08
1240 08
1241 08
1242 08
1243 08
1244 08
1245 08
1246 08
1247 3E
1248 1C
1249 08
1250 ENDCHAR
1251 STARTCHAR 62
1252 ENCODING 94
1253 SWIDTH 8000 0
1254 DWIDTH 8 0
1255 BBX 8 13 0 -1
1256 BITMAP
1257 08
1258 1C
1259 3E
1260 08
1261 08
1262 08
1263 08
1264 08
1265 08
1266 08
1267 3E
1268 1C
1269 08
1270 ENDCHAR
1271 STARTCHAR 63
1272 ENCODING 95
1273 SWIDTH 8000 0
1274 DWIDTH 8 0
1275 BBX 8 13 0 -1
1276 BITMAP
1277 FF
1278 81
1279 81
1280 81
1281 81
1282 81
1283 81
1284 81
1285 81
1286 81
1287 81
1288 81
1289 FF
1290 ENDCHAR
1291 STARTCHAR 64
1292 ENCODING 96
1293 SWIDTH 8000 0
1294 DWIDTH 8 0
1295 BBX 8 13 0 -1
1296 BITMAP
1297 38
1298 44
1299 82
1300 02
1301 02
1302 04
1303 08
1304 10
1305 10
1306 10
1307 00
1308 00
1309 10
1310 ENDCHAR
1311 STARTCHAR 65
1312 ENCODING 97
1313 SWIDTH 8000 0
1314 DWIDTH 8 0
1315 BBX 8 13 0 -1
1316 BITMAP
1317 00
1318 C4
1319 A8
1320 90
1321 80
1322 C0
1323 A0
1324 90
1325 80
1326 80
1327 80
1328 80
1329 80
1330 ENDCHAR
1331 STARTCHAR 66
1332 ENCODING 98
1333 SWIDTH 8000 0
1334 DWIDTH 8 0
1335 BBX 8 13 0 -1
1336 BITMAP
1337 00
1338 E0
1339 90
1340 88
1341 88
1342 84
1343 FC
1344 84
1345 88
1346 88
1347 90
1348 90
1349 E0
1350 ENDCHAR
1351 STARTCHAR 67
1352 ENCODING 99
1353 SWIDTH 8000 0
1354 DWIDTH 8 0
1355 BBX 8 13 0 -1
1356 BITMAP
1357 00
1358 10
1359 18
1360 14
1361 12
1362 10
1363 10
1364 10
1365 10
1366 90
1367 50
1368 30
1369 10
1370 ENDCHAR
1371 STARTCHAR 68
1372 ENCODING 100
1373 SWIDTH 8000 0
1374 DWIDTH 8 0
1375 BBX 8 13 0 -1
1376 BITMAP
1377 00
1378 82
1379 C6
1380 C6
1381 AA
1382 AA
1383 92
1384 92
1385 AA
1386 AA
1387 C6
1388 C6
1389 82
1390 ENDCHAR
1391 STARTCHAR 69
1392 ENCODING 101
1393 SWIDTH 8000 0
1394 DWIDTH 8 0
1395 BBX 8 13 0 -1
1396 BITMAP
1397 00
1398 C2
1399 C6
1400 A6
1401 AA
1402 9A
1403 92
1404 82
1405 82
1406 82
1407 82
1408 82
1409 82
1410 ENDCHAR
1411 STARTCHAR 70
1412 ENCODING 102
1413 SWIDTH 8000 0
1414 DWIDTH 8 0
1415 BBX 8 13 0 -1
1416 BITMAP
1417 00
1418 92
1419 92
1420 A4
1421 A4
1422 C8
1423 C8
1424 90
1425 90
1426 A0
1427 A0
1428 C0
1429 C0
1430 ENDCHAR
1431 STARTCHAR 71
1432 ENCODING 103
1433 SWIDTH 8000 0
1434 DWIDTH 8 0
1435 BBX 8 13 0 -1
1436 BITMAP
1437 00
1438 82
1439 44
1440 44
1441 28
1442 6C
1443 92
1444 54
1445 28
1446 28
1447 44
1448 44
1449 82
1450 ENDCHAR
1451 STARTCHAR 72
1452 ENCODING 104
1453 SWIDTH 8000 0
1454 DWIDTH 8 0
1455 BBX 8 13 0 -1
1456 BITMAP
1457 00
1458 C2
1459 A2
1460 A2
1461 92
1462 8A
1463 8A
1464 C6
1465 A2
1466 92
1467 92
1468 8A
1469 86
1470 ENDCHAR
1471 STARTCHAR 73
1472 ENCODING 105
1473 SWIDTH 8000 0
1474 DWIDTH 8 0
1475 BBX 8 13 0 -1
1476 BITMAP
1477 00
1478 10
1479 10
1480 10
1481 10
1482 10
1483 10
1484 10
1485 10
1486 10
1487 10
1488 10
1489 10
1490 ENDCHAR
1491 STARTCHAR 74
1492 ENCODING 106
1493 SWIDTH 8000 0
1494 DWIDTH 8 0
1495 BBX 8 13 0 -1
1496 BITMAP
1497 00
1498 10
1499 38
1500 38
1501 54
1502 54
1503 92
1504 92
1505 54
1506 54
1507 38
1508 38
1509 10
1510 ENDCHAR
1511 STARTCHAR 75
1512 ENCODING 107
1513 SWIDTH 8000 0
1514 DWIDTH 8 0
1515 BBX 8 13 0 -1
1516 BITMAP
1517 00
1518 80
1519 80
1520 80
1521 C0
1522 C0
1523 A0
1524 90
1525 88
1526 88
1527 84
1528 84
1529 84
1530 ENDCHAR
1531 STARTCHAR 76
1532 ENCODING 108
1533 SWIDTH 8000 0
1534 DWIDTH 8 0
1535 BBX 8 13 0 -1
1536 BITMAP
1537 00
1538 C0
1539 A0
1540 90
1541 90
1542 88
1543 84
1544 80
1545 80
1546 80
1547 80
1548 80
1549 80
1550 ENDCHAR
1551 STARTCHAR 77
1552 ENCODING 109
1553 SWIDTH 8000 0
1554 DWIDTH 8 0
1555 BBX 8 13 0 -1
1556 BITMAP
1557 00
1558 C6
1559 AA
1560 AA
1561 92
1562 92
1563 AA
1564 AA
1565 C6
1566 82
1567 82
1568 82
1569 82
1570 ENDCHAR
1571 STARTCHAR 78
1572 ENCODING 110
1573 SWIDTH 8000 0
1574 DWIDTH 8 0
1575 BBX 8 13 0 -1
1576 BITMAP
1577 00
1578 90
1579 50
1580 50
1581 30
1582 30
1583 10
1584 10
1585 18
1586 18
1587 14
1588 14
1589 12
1590 ENDCHAR
1591 STARTCHAR 79
1592 ENCODING 111
1593 SWIDTH 8000 0
1594 DWIDTH 8 0
1595 BBX 8 13 0 -1
1596 BITMAP
1597 00
1598 C6
1599 AA
1600 92
1601 82
1602 C4
1603 A8
1604 90
1605 80
1606 80
1607 80
1608 80
1609 80
1610 ENDCHAR
1611 STARTCHAR 80
1612 ENCODING 112
1613 SWIDTH 8000 0
1614 DWIDTH 8 0
1615 BBX 8 13 0 -1
1616 BITMAP
1617 00
1618 80
1619 80
1620 80
1621 80
1622 80
1623 84
1624 8C
1625 94
1626 94
1627 A4
1628 C4
1629 84
1630 ENDCHAR
1631 STARTCHAR 81
1632 ENCODING 113
1633 SWIDTH 8000 0
1634 DWIDTH 8 0
1635 BBX 8 13 0 -1
1636 BITMAP
1637 00
1638 BA
1639 54
1640 10
1641 10
1642 10
1643 10
1644 10
1645 10
1646 10
1647 10
1648 10
1649 10
1650 ENDCHAR
1651 STARTCHAR 82
1652 ENCODING 114
1653 SWIDTH 8000 0
1654 DWIDTH 8 0
1655 BBX 8 13 0 -1
1656 BITMAP
1657 00
1658 70
1659 48
1660 44
1661 44
1662 44
1663 48
1664 70
1665 48
1666 48
1667 44
1668 44
1669 42
1670 ENDCHAR
1671 STARTCHAR 83
1672 ENCODING 115
1673 SWIDTH 8000 0
1674 DWIDTH 8 0
1675 BBX 8 13 0 -1
1676 BITMAP
1677 00
1678 80
1679 86
1680 86
1681 8A
1682 8A
1683 92
1684 92
1685 A2
1686 A2
1687 C2
1688 02
1689 02
1690 ENDCHAR
1691 STARTCHAR 84
1692 ENCODING 116
1693 SWIDTH 8000 0
1694 DWIDTH 8 0
1695 BBX 8 13 0 -1
1696 BITMAP
1697 00
1698 38
1699 54
1700 92
1701 10
1702 10
1703 10
1704 10
1705 10
1706 10
1707 10
1708 10
1709 10
1710 ENDCHAR
1711 STARTCHAR 85
1712 ENCODING 117
1713 SWIDTH 8000 0
1714 DWIDTH 8 0
1715 BBX 8 13 0 -1
1716 BITMAP
1717 00
1718 40
1719 60
1720 50
1721 50
1722 48
1723 44
1724 44
1725 44
1726 44
1727 44
1728 44
1729 44
1730 ENDCHAR
1731 STARTCHAR 86
1732 ENCODING 118
1733 SWIDTH 8000 0
1734 DWIDTH 8 0
1735 BBX 8 13 0 -1
1736 BITMAP
1737 00
1738 38
1739 44
1740 44
1741 28
1742 28
1743 10
1744 10
1745 28
1746 28
1747 44
1748 44
1749 82
1750 ENDCHAR
1751 STARTCHAR 87
1752 ENCODING 119
1753 SWIDTH 8000 0
1754 DWIDTH 8 0
1755 BBX 8 13 0 -1
1756 BITMAP
1757 00
1758 70
1759 48
1760 44
1761 44
1762 48
1763 70
1764 40
1765 40
1766 40
1767 40
1768 40
1769 40
1770 ENDCHAR
1771 STARTCHAR 88
1772 ENCODING 120
1773 SWIDTH 8000 0
1774 DWIDTH 8 0
1775 BBX 8 13 0 -1
1776 BITMAP
1777 00
1778 10
1779 10
1780 10
1781 10
1782 10
1783 38
1784 54
1785 54
1786 54
1787 92
1788 92
1789 92
1790 ENDCHAR
1791 STARTCHAR 89
1792 ENCODING 121
1793 SWIDTH 8000 0
1794 DWIDTH 8 0
1795 BBX 8 13 0 -1
1796 BITMAP
1797 00
1798 90
1799 D8
1800 D8
1801 B4
1802 B4
1803 92
1804 92
1805 9A
1806 9A
1807 96
1808 96
1809 92
1810 ENDCHAR
1811 STARTCHAR 90
1812 ENCODING 122
1813 SWIDTH 8000 0
1814 DWIDTH 8 0
1815 BBX 8 13 0 -1
1816 BITMAP
1817 00
1818 3E
1819 20
1820 40
1821 40
1822 80
1823 80
1824 40
1825 40
1826 20
1827 10
1828 10
1829 0E
1830 ENDCHAR
1831 STARTCHAR 91
1832 ENCODING 123
1833 SWIDTH 8000 0
1834 DWIDTH 8 0
1835 BBX 8 13 0 -1
1836 BITMAP
1837 F7
1838 E3
1839 C1
1840 F7
1841 F7
1842 F7
1843 F7
1844 F7
1845 F7
1846 F7
1847 F7
1848 F7
1849 F7
1850 ENDCHAR
1851 STARTCHAR 92
1852 ENCODING 124
1853 SWIDTH 8000 0
1854 DWIDTH 8 0
1855 BBX 8 13 0 -1
1856 BITMAP
1857 F7
1858 F7
1859 F7
1860 F7
1861 F7
1862 F7
1863 F7
1864 F7
1865 F7
1866 F7
1867 C1
1868 E3
1869 F7
1870 ENDCHAR
1871 STARTCHAR 93
1872 ENCODING 125
1873 SWIDTH 8000 0
1874 DWIDTH 8 0
1875 BBX 8 13 0 -1
1876 BITMAP
1877 F7
1878 E3
1879 C1
1880 F7
1881 F7
1882 F7
1883 F7
1884 F7
1885 F7
1886 F7
1887 C1
1888 E3
1889 F7
1890 ENDCHAR
1891 STARTCHAR 94
1892 ENCODING 126
1893 SWIDTH 8000 0
1894 DWIDTH 8 0
1895 BBX 8 13 0 -1
1896 BITMAP
1897 C7
1898 BB
1899 7D
1900 FD
1901 FD
1902 FB
1903 F7
1904 EF
1905 EF
1906 EF
1907 FF
1908 FF
1909 EF
1910 ENDCHAR
1911 STARTCHAR 95
1912 ENCODING 127
1913 SWIDTH 8000 0
1914 DWIDTH 8 0
1915 BBX 8 13 0 -1
1916 BITMAP
1917 00
1918 00
1919 00
1920 00
1921 00
1922 00
1923 00
1924 00
1925 00
1926 00
1927 00
1928 00
1929 00
1930 ENDCHAR
1931 ENDFONT
0 STARTFONT 2.1
1 FONT -windows-Zork-medium-r-normal--16-160-72-72-c-90-misc-fontspecific
2 SIZE 16 96 96
3 FONTBOUNDINGBOX 9 16 0 -1
4 STARTPROPERTIES 4
5 FONT_ASCENT 15
6 FONT_DESCENT 1
7 CAP_HEIGHT 15
8 DEFAULT_CHAR 32
9 ENDPROPERTIES
10 CHARS 96
11 STARTCHAR 0
12 ENCODING 32
13 SWIDTH 9000 0
14 DWIDTH 9 0
15 BBX 9 16 0 -1
16 BITMAP
17 0000
18 0000
19 0000
20 0000
21 0000
22 0000
23 0000
24 0000
25 0000
26 0000
27 0000
28 0000
29 0000
30 0000
31 0000
32 0000
33 ENDCHAR
34 STARTCHAR 1
35 ENCODING 33
36 SWIDTH 9000 0
37 DWIDTH 9 0
38 BBX 9 16 0 -1
39 BITMAP
40 0000
41 0000
42 0000
43 0000
44 1000
45 3000
46 7000
47 FF80
48 7000
49 3000
50 1000
51 0000
52 0000
53 0000
54 0000
55 0000
56 ENDCHAR
57 STARTCHAR 2
58 ENCODING 34
59 SWIDTH 9000 0
60 DWIDTH 9 0
61 BBX 9 16 0 -1
62 BITMAP
63 0000
64 0000
65 0000
66 0000
67 0400
68 0600
69 0700
70 FF80
71 0700
72 0600
73 0400
74 0000
75 0000
76 0000
77 0000
78 0000
79 ENDCHAR
80 STARTCHAR 3
81 ENCODING 35
82 SWIDTH 9000 0
83 DWIDTH 9 0
84 BBX 9 16 0 -1
85 BITMAP
86 0080
87 0100
88 0100
89 0200
90 0200
91 0400
92 0400
93 0800
94 0800
95 1000
96 1000
97 2000
98 2000
99 4000
100 4000
101 8000
102 ENDCHAR
103 STARTCHAR 4
104 ENCODING 36
105 SWIDTH 9000 0
106 DWIDTH 9 0
107 BBX 9 16 0 -1
108 BITMAP
109 8000
110 4000
111 4000
112 2000
113 2000
114 1000
115 1000
116 0800
117 0800
118 0400
119 0400
120 0200
121 0200
122 0100
123 0100
124 0080
125 ENDCHAR
126 STARTCHAR 5
127 ENCODING 37
128 SWIDTH 9000 0
129 DWIDTH 9 0
130 BBX 9 16 0 -1
131 BITMAP
132 0000
133 0000
134 0000
135 0000
136 0000
137 0000
138 0000
139 0000
140 0000
141 0000
142 0000
143 0000
144 0000
145 0000
146 0000
147 0000
148 ENDCHAR
149 STARTCHAR 6
150 ENCODING 38
151 SWIDTH 9000 0
152 DWIDTH 9 0
153 BBX 9 16 0 -1
154 BITMAP
155 0000
156 0000
157 0000
158 0000
159 0000
160 0000
161 0000
162 0000
163 FF80
164 0000
165 0000
166 0000
167 0000
168 0000
169 0000
170 0000
171 ENDCHAR
172 STARTCHAR 7
173 ENCODING 39
174 SWIDTH 9000 0
175 DWIDTH 9 0
176 BBX 9 16 0 -1
177 BITMAP
178 0000
179 0000
180 0000
181 0000
182 0000
183 0000
184 FF80
185 0000
186 0000
187 0000
188 0000
189 0000
190 0000
191 0000
192 0000
193 0000
194 ENDCHAR
195 STARTCHAR 8
196 ENCODING 40
197 SWIDTH 9000 0
198 DWIDTH 9 0
199 BBX 9 16 0 -1
200 BITMAP
201 0800
202 0800
203 0800
204 0800
205 0800
206 0800
207 0800
208 0800
209 0800
210 0800
211 0800
212 0800
213 0800
214 0800
215 0800
216 0800
217 ENDCHAR
218 STARTCHAR 9
219 ENCODING 41
220 SWIDTH 9000 0
221 DWIDTH 9 0
222 BBX 9 16 0 -1
223 BITMAP
224 0800
225 0800
226 0800
227 0800
228 0800
229 0800
230 0800
231 0800
232 0800
233 0800
234 0800
235 0800
236 0800
237 0800
238 0800
239 0800
240 ENDCHAR
241 STARTCHAR 10
242 ENCODING 42
243 SWIDTH 9000 0
244 DWIDTH 9 0
245 BBX 9 16 0 -1
246 BITMAP
247 0800
248 0800
249 0800
250 0800
251 0800
252 0800
253 FF80
254 0000
255 0000
256 0000
257 0000
258 0000
259 0000
260 0000
261 0000
262 0000
263 ENDCHAR
264 STARTCHAR 11
265 ENCODING 43
266 SWIDTH 9000 0
267 DWIDTH 9 0
268 BBX 9 16 0 -1
269 BITMAP
270 0000
271 0000
272 0000
273 0000
274 0000
275 0000
276 0000
277 0000
278 FF80
279 0800
280 0800
281 0800
282 0800
283 0800
284 0800
285 0800
286 ENDCHAR
287 STARTCHAR 12
288 ENCODING 44
289 SWIDTH 9000 0
290 DWIDTH 9 0
291 BBX 9 16 0 -1
292 BITMAP
293 0800
294 0800
295 0800
296 0800
297 0800
298 0800
299 0800
300 0800
301 0F80
302 0800
303 0800
304 0800
305 0800
306 0800
307 0800
308 0800
309 ENDCHAR
310 STARTCHAR 13
311 ENCODING 45
312 SWIDTH 9000 0
313 DWIDTH 9 0
314 BBX 9 16 0 -1
315 BITMAP
316 0800
317 0800
318 0800
319 0800
320 0800
321 0800
322 0800
323 0800
324 F800
325 0800
326 0800
327 0800
328 0800
329 0800
330 0800
331 0800
332 ENDCHAR
333 STARTCHAR 14
334 ENCODING 46
335 SWIDTH 9000 0
336 DWIDTH 9 0
337 BBX 9 16 0 -1
338 BITMAP
339 0800
340 0800
341 0800
342 0800
343 0800
344 0800
345 0800
346 0800
347 0F80
348 0000
349 0000
350 0000
351 0000
352 0000
353 0000
354 0000
355 ENDCHAR
356 STARTCHAR 15
357 ENCODING 47
358 SWIDTH 9000 0
359 DWIDTH 9 0
360 BBX 9 16 0 -1
361 BITMAP
362 0000
363 0000
364 0000
365 0000
366 0000
367 0000
368 0F80
369 0800
370 0800
371 0800
372 0800
373 0800
374 0800
375 0800
376 0800
377 0800
378 ENDCHAR
379 STARTCHAR 16
380 ENCODING 48
381 SWIDTH 9000 0
382 DWIDTH 9 0
383 BBX 9 16 0 -1
384 BITMAP
385 0000
386 0000
387 0000
388 0000
389 0000
390 0000
391 F800
392 0800
393 0800
394 0800
395 0800
396 0800
397 0800
398 0800
399 0800
400 0800
401 ENDCHAR
402 STARTCHAR 17
403 ENCODING 49
404 SWIDTH 9000 0
405 DWIDTH 9 0
406 BBX 9 16 0 -1
407 BITMAP
408 0800
409 0800
410 0800
411 0800
412 0800
413 0800
414 0800
415 0800
416 F800
417 0000
418 0000
419 0000
420 0000
421 0000
422 0000
423 0000
424 ENDCHAR
425 STARTCHAR 18
426 ENCODING 50
427 SWIDTH 9000 0
428 DWIDTH 9 0
429 BBX 9 16 0 -1
430 BITMAP
431 0800
432 0800
433 0800
434 0800
435 0800
436 0800
437 0800
438 0800
439 0F80
440 1000
441 1000
442 2000
443 2000
444 4000
445 4000
446 8000
447 ENDCHAR
448 STARTCHAR 19
449 ENCODING 51
450 SWIDTH 9000 0
451 DWIDTH 9 0
452 BBX 9 16 0 -1
453 BITMAP
454 8000
455 4000
456 4000
457 2000
458 1000
459 1000
460 0F80
461 0800
462 0800
463 0800
464 0800
465 0800
466 0800
467 0800
468 0800
469 0800
470 ENDCHAR
471 STARTCHAR 20
472 ENCODING 52
473 SWIDTH 9000 0
474 DWIDTH 9 0
475 BBX 9 16 0 -1
476 BITMAP
477 0080
478 0100
479 0100
480 0200
481 0400
482 0400
483 F800
484 0800
485 0800
486 0800
487 0800
488 0800
489 0800
490 0800
491 0800
492 0800
493 ENDCHAR
494 STARTCHAR 21
495 ENCODING 53
496 SWIDTH 9000 0
497 DWIDTH 9 0
498 BBX 9 16 0 -1
499 BITMAP
500 0800
501 0800
502 0800
503 0800
504 0800
505 0800
506 0800
507 0800
508 F800
509 0400
510 0400
511 0200
512 0200
513 0100
514 0100
515 0080
516 ENDCHAR
517 STARTCHAR 22
518 ENCODING 54
519 SWIDTH 9000 0
520 DWIDTH 9 0
521 BBX 9 16 0 -1
522 BITMAP
523 FF80
524 FF80
525 FF80
526 FF80
527 FF80
528 FF80
529 FF80
530 FF80
531 FF80
532 FF80
533 FF80
534 FF80
535 FF80
536 FF80
537 FF80
538 FF80
539 ENDCHAR
540 STARTCHAR 23
541 ENCODING 55
542 SWIDTH 9000 0
543 DWIDTH 9 0
544 BBX 9 16 0 -1
545 BITMAP
546 FF80
547 FF80
548 FF80
549 FF80
550 FF80
551 FF80
552 FF80
553 FF80
554 FF80
555 0000
556 0000
557 0000
558 0000
559 0000
560 0000
561 0000
562 ENDCHAR
563 STARTCHAR 24
564 ENCODING 56
565 SWIDTH 9000 0
566 DWIDTH 9 0
567 BBX 9 16 0 -1
568 BITMAP
569 0000
570 0000
571 0000
572 0000
573 0000
574 0000
575 FF80
576 FF80
577 FF80
578 FF80
579 FF80
580 FF80
581 FF80
582 FF80
583 FF80
584 FF80
585 ENDCHAR
586 STARTCHAR 25
587 ENCODING 57
588 SWIDTH 9000 0
589 DWIDTH 9 0
590 BBX 9 16 0 -1
591 BITMAP
592 F800
593 F800
594 F800
595 F800
596 F800
597 F800
598 F800
599 F800
600 F800
601 F800
602 F800
603 F800
604 F800
605 F800
606 F800
607 F800
608 ENDCHAR
609 STARTCHAR 26
610 ENCODING 58
611 SWIDTH 9000 0
612 DWIDTH 9 0
613 BBX 9 16 0 -1
614 BITMAP
615 0F80
616 0F80
617 0F80
618 0F80
619 0F80
620 0F80
621 0F80
622 0F80
623 0F80
624 0F80
625 0F80
626 0F80
627 0F80
628 0F80
629 0F80
630 0F80
631 ENDCHAR
632 STARTCHAR 27
633 ENCODING 59
634 SWIDTH 9000 0
635 DWIDTH 9 0
636 BBX 9 16 0 -1
637 BITMAP
638 0800
639 0800
640 0800
641 0800
642 0800
643 0800
644 FF80
645 FF80
646 FF80
647 FF80
648 FF80
649 FF80
650 FF80
651 FF80
652 FF80
653 FF80
654 ENDCHAR
655 STARTCHAR 28
656 ENCODING 60
657 SWIDTH 9000 0
658 DWIDTH 9 0
659 BBX 9 16 0 -1
660 BITMAP
661 FF80
662 FF80
663 FF80
664 FF80
665 FF80
666 FF80
667 FF80
668 FF80
669 FF80
670 0800
671 0800
672 0800
673 0800
674 0800
675 0800
676 0800
677 ENDCHAR
678 STARTCHAR 29
679 ENCODING 61
680 SWIDTH 9000 0
681 DWIDTH 9 0
682 BBX 9 16 0 -1
683 BITMAP
684 F800
685 F800
686 F800
687 F800
688 F800
689 F800
690 F800
691 F800
692 FF80
693 F800
694 F800
695 F800
696 F800
697 F800
698 F800
699 F800
700 ENDCHAR
701 STARTCHAR 30
702 ENCODING 62
703 SWIDTH 9000 0
704 DWIDTH 9 0
705 BBX 9 16 0 -1
706 BITMAP
707 0F80
708 0F80
709 0F80
710 0F80
711 0F80
712 0F80
713 0F80
714 0F80
715 FF80
716 0F80
717 0F80
718 0F80
719 0F80
720 0F80
721 0F80
722 0F80
723 ENDCHAR
724 STARTCHAR 31
725 ENCODING 63
726 SWIDTH 9000 0
727 DWIDTH 9 0
728 BBX 9 16 0 -1
729 BITMAP
730 0F80
731 0F80
732 0F80
733 0F80
734 0F80
735 0F80
736 0F80
737 0F80
738 0F80
739 0000
740 0000
741 0000
742 0000
743 0000
744 0000
745 0000
746 ENDCHAR
747 STARTCHAR 32
748 ENCODING 64
749 SWIDTH 9000 0
750 DWIDTH 9 0
751 BBX 9 16 0 -1
752 BITMAP
753 0000
754 0000
755 0000
756 0000
757 0000
758 0000
759 0F80
760 0F80
761 0F80
762 0F80
763 0F80
764 0F80
765 0F80
766 0F80
767 0F80
768 0F80
769 ENDCHAR
770 STARTCHAR 33
771 ENCODING 65
772 SWIDTH 9000 0
773 DWIDTH 9 0
774 BBX 9 16 0 -1
775 BITMAP
776 0000
777 0000
778 0000
779 0000
780 0000
781 0000
782 F800
783 F800
784 F800
785 F800
786 F800
787 F800
788 F800
789 F800
790 F800
791 F800
792 ENDCHAR
793 STARTCHAR 34
794 ENCODING 66
795 SWIDTH 9000 0
796 DWIDTH 9 0
797 BBX 9 16 0 -1
798 BITMAP
799 F800
800 F800
801 F800
802 F800
803 F800
804 F800
805 F800
806 F800
807 F800
808 0000
809 0000
810 0000
811 0000
812 0000
813 0000
814 0000
815 ENDCHAR
816 STARTCHAR 35
817 ENCODING 67
818 SWIDTH 9000 0
819 DWIDTH 9 0
820 BBX 9 16 0 -1
821 BITMAP
822 0F80
823 0F80
824 0F80
825 0F80
826 0F80
827 0F80
828 0F80
829 0F80
830 0F80
831 1000
832 1000
833 2000
834 2000
835 4000
836 4000
837 8000
838 ENDCHAR
839 STARTCHAR 36
840 ENCODING 68
841 SWIDTH 9000 0
842 DWIDTH 9 0
843 BBX 9 16 0 -1
844 BITMAP
845 8000
846 4000
847 4000
848 2000
849 1000
850 1000
851 0F80
852 0F80
853 0F80
854 0F80
855 0F80
856 0F80
857 0F80
858 0F80
859 0F80
860 0F80
861 ENDCHAR
862 STARTCHAR 37
863 ENCODING 69
864 SWIDTH 9000 0
865 DWIDTH 9 0
866 BBX 9 16 0 -1
867 BITMAP
868 0080
869 0100
870 0100
871 0200
872 0400
873 0400
874 F800
875 F800
876 F800
877 F800
878 F800
879 F800
880 F800
881 F800
882 F800
883 F800
884 ENDCHAR
885 STARTCHAR 38
886 ENCODING 70
887 SWIDTH 9000 0
888 DWIDTH 9 0
889 BBX 9 16 0 -1
890 BITMAP
891 F800
892 F800
893 F800
894 F800
895 F800
896 F800
897 F800
898 F800
899 F800
900 0400
901 0400
902 0200
903 0200
904 0100
905 0080
906 0080
907 ENDCHAR
908 STARTCHAR 39
909 ENCODING 71
910 SWIDTH 9000 0
911 DWIDTH 9 0
912 BBX 9 16 0 -1
913 BITMAP
914 0080
915 0000
916 0000
917 0000
918 0000
919 0000
920 0000
921 0000
922 0000
923 0000
924 0000
925 0000
926 0000
927 0000
928 0000
929 0000
930 ENDCHAR
931 STARTCHAR 40
932 ENCODING 72
933 SWIDTH 9000 0
934 DWIDTH 9 0
935 BBX 9 16 0 -1
936 BITMAP
937 0000
938 0000
939 0000
940 0000
941 0000
942 0000
943 0000
944 0000
945 0000
946 0000
947 0000
948 0000
949 0000
950 0000
951 0000
952 0080
953 ENDCHAR
954 STARTCHAR 41
955 ENCODING 73
956 SWIDTH 9000 0
957 DWIDTH 9 0
958 BBX 9 16 0 -1
959 BITMAP
960 0000
961 0000
962 0000
963 0000
964 0000
965 0000
966 0000
967 0000
968 0000
969 0000
970 0000
971 0000
972 0000
973 0000
974 0000
975 8000
976 ENDCHAR
977 STARTCHAR 42
978 ENCODING 74
979 SWIDTH 9000 0
980 DWIDTH 9 0
981 BBX 9 16 0 -1
982 BITMAP
983 8000
984 0000
985 0000
986 0000
987 0000
988 0000
989 0000
990 0000
991 0000
992 0000
993 0000
994 0000
995 0000
996 0000
997 0000
998 0000
999 ENDCHAR
1000 STARTCHAR 43
1001 ENCODING 75
1002 SWIDTH 9000 0
1003 DWIDTH 9 0
1004 BBX 9 16 0 -1
1005 BITMAP
1006 FF80
1007 0000
1008 0000
1009 0000
1010 0000
1011 0000
1012 0000
1013 0000
1014 0000
1015 0000
1016 0000
1017 0000
1018 0000
1019 0000
1020 0000
1021 0000
1022 ENDCHAR
1023 STARTCHAR 44
1024 ENCODING 76
1025 SWIDTH 9000 0
1026 DWIDTH 9 0
1027 BBX 9 16 0 -1
1028 BITMAP
1029 0000
1030 0000
1031 0000
1032 0000
1033 0000
1034 0000
1035 0000
1036 0000
1037 0000
1038 0000
1039 0000
1040 0000
1041 0000
1042 0000
1043 0000
1044 FF80
1045 ENDCHAR
1046 STARTCHAR 45
1047 ENCODING 77
1048 SWIDTH 9000 0
1049 DWIDTH 9 0
1050 BBX 9 16 0 -1
1051 BITMAP
1052 8000
1053 8000
1054 8000
1055 8000
1056 8000
1057 8000
1058 8000
1059 8000
1060 8000
1061 8000
1062 8000
1063 8000
1064 8000
1065 8000
1066 8000
1067 8000
1068 ENDCHAR
1069 STARTCHAR 46
1070 ENCODING 78
1071 SWIDTH 9000 0
1072 DWIDTH 9 0
1073 BBX 9 16 0 -1
1074 BITMAP
1075 0080
1076 0080
1077 0080
1078 0080
1079 0080
1080 0080
1081 0080
1082 0080
1083 0080
1084 0080
1085 0080
1086 0080
1087 0080
1088 0080
1089 0080
1090 0080
1091 ENDCHAR
1092 STARTCHAR 47
1093 ENCODING 79
1094 SWIDTH 9000 0
1095 DWIDTH 9 0
1096 BBX 9 16 0 -1
1097 BITMAP
1098 0000
1099 FF80
1100 0000
1101 0000
1102 0000
1103 0000
1104 0000
1105 0000
1106 0000
1107 0000
1108 0000
1109 0000
1110 0000
1111 0000
1112 FF80
1113 0000
1114 ENDCHAR
1115 STARTCHAR 48
1116 ENCODING 80
1117 SWIDTH 9000 0
1118 DWIDTH 9 0
1119 BBX 9 16 0 -1
1120 BITMAP
1121 0000
1122 FF80
1123 8000
1124 8000
1125 8000
1126 8000
1127 8000
1128 8000
1129 8000
1130 8000
1131 8000
1132 8000
1133 8000
1134 8000
1135 FF80
1136 0000
1137 ENDCHAR
1138 STARTCHAR 49
1139 ENCODING 81
1140 SWIDTH 9000 0
1141 DWIDTH 9 0
1142 BBX 9 16 0 -1
1143 BITMAP
1144 0000
1145 FF80
1146 C000
1147 C000
1148 C000
1149 C000
1150 C000
1151 C000
1152 C000
1153 C000
1154 C000
1155 C000
1156 C000
1157 C000
1158 FF80
1159 0000
1160 ENDCHAR
1161 STARTCHAR 50
1162 ENCODING 82
1163 SWIDTH 9000 0
1164 DWIDTH 9 0
1165 BBX 9 16 0 -1
1166 BITMAP
1167 0000
1168 FF80
1169 E000
1170 E000
1171 E000
1172 E000
1173 E000
1174 E000
1175 E000
1176 E000
1177 E000
1178 E000
1179 E000
1180 E000
1181 FF80
1182 0000
1183 ENDCHAR
1184 STARTCHAR 51
1185 ENCODING 83
1186 SWIDTH 9000 0
1187 DWIDTH 9 0
1188 BBX 9 16 0 -1
1189 BITMAP
1190 0000
1191 FF80
1192 F000
1193 F000
1194 F000
1195 F000
1196 F000
1197 F000
1198 F000
1199 F000
1200 F000
1201 F000
1202 F000
1203 F000
1204 FF80
1205 0000
1206 ENDCHAR
1207 STARTCHAR 52
1208 ENCODING 84
1209 SWIDTH 9000 0
1210 DWIDTH 9 0
1211 BBX 9 16 0 -1
1212 BITMAP
1213 0000
1214 FF80
1215 FC00
1216 FC00
1217 FC00
1218 FC00
1219 FC00
1220 FC00
1221 FC00
1222 FC00
1223 FC00
1224 FC00
1225 FC00
1226 FC00
1227 FF80
1228 0000
1229 ENDCHAR
1230 STARTCHAR 53
1231 ENCODING 85
1232 SWIDTH 9000 0
1233 DWIDTH 9 0
1234 BBX 9 16 0 -1
1235 BITMAP
1236 0000
1237 FF80
1238 FE00
1239 FE00
1240 FE00
1241 FE00
1242 FE00
1243 FE00
1244 FE00
1245 FE00
1246 FE00
1247 FE00
1248 FE00
1249 FE00
1250 FF80
1251 0000
1252 ENDCHAR
1253 STARTCHAR 54
1254 ENCODING 86
1255 SWIDTH 9000 0
1256 DWIDTH 9 0
1257 BBX 9 16 0 -1
1258 BITMAP
1259 0000
1260 FF80
1261 FF00
1262 FF00
1263 FF00
1264 FF00
1265 FF00
1266 FF00
1267 FF00
1268 FF00
1269 FF00
1270 FF00
1271 FF00
1272 FF00
1273 FF80
1274 0000
1275 ENDCHAR
1276 STARTCHAR 55
1277 ENCODING 87
1278 SWIDTH 9000 0
1279 DWIDTH 9 0
1280 BBX 9 16 0 -1
1281 BITMAP
1282 0000
1283 FF80
1284 FF80
1285 FF80
1286 FF80
1287 FF80
1288 FF80
1289 FF80
1290 FF80
1291 FF80
1292 FF80
1293 FF80
1294 FF80
1295 FF80
1296 FF80
1297 0000
1298 ENDCHAR
1299 STARTCHAR 56
1300 ENCODING 88
1301 SWIDTH 9000 0
1302 DWIDTH 9 0
1303 BBX 9 16 0 -1
1304 BITMAP
1305 0000
1306 0080
1307 0080
1308 0080
1309 0080
1310 0080
1311 0080
1312 0080
1313 0080
1314 0080
1315 0080
1316 0080
1317 0080
1318 0080
1319 0080
1320 0000
1321 ENDCHAR
1322 STARTCHAR 57
1323 ENCODING 89
1324 SWIDTH 9000 0
1325 DWIDTH 9 0
1326 BBX 9 16 0 -1
1327 BITMAP
1328 0000
1329 8000
1330 8000
1331 8000
1332 8000
1333 8000
1334 8000
1335 8000
1336 8000
1337 8000
1338 8000
1339 8000
1340 8000
1341 8000
1342 8000
1343 0000
1344 ENDCHAR
1345 STARTCHAR 58
1346 ENCODING 90
1347 SWIDTH 9000 0
1348 DWIDTH 9 0
1349 BBX 9 16 0 -1
1350 BITMAP
1351 8080
1352 4100
1353 4100
1354 2200
1355 2200
1356 1400
1357 1400
1358 0800
1359 0800
1360 1400
1361 1200
1362 2200
1363 2100
1364 4100
1365 4080
1366 8080
1367 ENDCHAR
1368 STARTCHAR 59
1369 ENCODING 91
1370 SWIDTH 9000 0
1371 DWIDTH 9 0
1372 BBX 9 16 0 -1
1373 BITMAP
1374 0800
1375 0800
1376 0800
1377 0800
1378 0800
1379 0800
1380 0800
1381 0800
1382 FF80
1383 0800
1384 0800
1385 0800
1386 0800
1387 0800
1388 0800
1389 0800
1390 ENDCHAR
1391 STARTCHAR 60
1392 ENCODING 92
1393 SWIDTH 9000 0
1394 DWIDTH 9 0
1395 BBX 9 16 0 -1
1396 BITMAP
1397 0800
1398 1C00
1399 1C00
1400 3E00
1401 7F00
1402 0800
1403 0800
1404 0800
1405 0800
1406 0800
1407 0800
1408 0800
1409 0800
1410 0800
1411 0800
1412 0800
1413 ENDCHAR
1414 STARTCHAR 61
1415 ENCODING 93
1416 SWIDTH 9000 0
1417 DWIDTH 9 0
1418 BBX 9 16 0 -1
1419 BITMAP
1420 0800
1421 0800
1422 0800
1423 0800
1424 0800
1425 0800
1426 0800
1427 0800
1428 0800
1429 0800
1430 0800
1431 7F00
1432 3E00
1433 1C00
1434 1C00
1435 0800
1436 ENDCHAR
1437 STARTCHAR 62
1438 ENCODING 94
1439 SWIDTH 9000 0
1440 DWIDTH 9 0
1441 BBX 9 16 0 -1
1442 BITMAP
1443 0800
1444 1C00
1445 1C00
1446 3E00
1447 7F00
1448 0800
1449 0800
1450 0800
1451 0800
1452 0800
1453 0800
1454 7F00
1455 3E00
1456 1C00
1457 1C00
1458 0800
1459 ENDCHAR
1460 STARTCHAR 63
1461 ENCODING 95
1462 SWIDTH 9000 0
1463 DWIDTH 9 0
1464 BBX 9 16 0 -1
1465 BITMAP
1466 FF80
1467 8080
1468 8080
1469 8080
1470 8080
1471 8080
1472 8080
1473 8080
1474 8080
1475 8080
1476 8080
1477 8080
1478 8080
1479 8080
1480 8080
1481 FF80
1482 ENDCHAR
1483 STARTCHAR 64
1484 ENCODING 96
1485 SWIDTH 9000 0
1486 DWIDTH 9 0
1487 BBX 9 16 0 -1
1488 BITMAP
1489 1C00
1490 2200
1491 4100
1492 4100
1493 0100
1494 0100
1495 0200
1496 0400
1497 0800
1498 0800
1499 0800
1500 0800
1501 0800
1502 0000
1503 0800
1504 0800
1505 ENDCHAR
1506 STARTCHAR 65
1507 ENCODING 97
1508 SWIDTH 9000 0
1509 DWIDTH 9 0
1510 BBX 9 16 0 -1
1511 BITMAP
1512 0000
1513 C100
1514 A200
1515 A200
1516 9400
1517 8800
1518 8000
1519 E100
1520 9200
1521 8C00
1522 8000
1523 8000
1524 8000
1525 8000
1526 8000
1527 8000
1528 ENDCHAR
1529 STARTCHAR 66
1530 ENCODING 98
1531 SWIDTH 9000 0
1532 DWIDTH 9 0
1533 BBX 9 16 0 -1
1534 BITMAP
1535 0000
1536 7000
1537 4800
1538 4800
1539 4400
1540 4400
1541 4200
1542 4200
1543 7E00
1544 4200
1545 4200
1546 4400
1547 4400
1548 4800
1549 4800
1550 7000
1551 ENDCHAR
1552 STARTCHAR 67
1553 ENCODING 99
1554 SWIDTH 9000 0
1555 DWIDTH 9 0
1556 BBX 9 16 0 -1
1557 BITMAP
1558 0000
1559 0C00
1560 0A00
1561 0A00
1562 0900
1563 0900
1564 0880
1565 0800
1566 0800
1567 0800
1568 8800
1569 4800
1570 4800
1571 2800
1572 2800
1573 1800
1574 ENDCHAR
1575 STARTCHAR 68
1576 ENCODING 100
1577 SWIDTH 9000 0
1578 DWIDTH 9 0
1579 BBX 9 16 0 -1
1580 BITMAP
1581 0000
1582 C100
1583 C100
1584 A300
1585 A300
1586 9500
1587 9500
1588 8900
1589 8900
1590 9900
1591 9500
1592 A500
1593 A300
1594 C300
1595 C100
1596 8100
1597 ENDCHAR
1598 STARTCHAR 69
1599 ENCODING 101
1600 SWIDTH 9000 0
1601 DWIDTH 9 0
1602 BBX 9 16 0 -1
1603 BITMAP
1604 0000
1605 C300
1606 C300
1607 A500
1608 A500
1609 9900
1610 9900
1611 8100
1612 8100
1613 8100
1614 8100
1615 8100
1616 8100
1617 8100
1618 8100
1619 8100
1620 ENDCHAR
1621 STARTCHAR 70
1622 ENCODING 102
1623 SWIDTH 9000 0
1624 DWIDTH 9 0
1625 BBX 9 16 0 -1
1626 BITMAP
1627 0000
1628 8900
1629 8900
1630 9200
1631 9200
1632 A400
1633 A400
1634 C800
1635 C800
1636 9000
1637 9000
1638 A000
1639 A000
1640 C000
1641 C000
1642 8000
1643 ENDCHAR
1644 STARTCHAR 71
1645 ENCODING 103
1646 SWIDTH 9000 0
1647 DWIDTH 9 0
1648 BBX 9 16 0 -1
1649 BITMAP
1650 0000
1651 8100
1652 8100
1653 4200
1654 4200
1655 2400
1656 2400
1657 7E00
1658 9900
1659 7E00
1660 1800
1661 2400
1662 2400
1663 4200
1664 4200
1665 8100
1666 ENDCHAR
1667 STARTCHAR 72
1668 ENCODING 104
1669 SWIDTH 9000 0
1670 DWIDTH 9 0
1671 BBX 9 16 0 -1
1672 BITMAP
1673 0000
1674 C100
1675 A100
1676 A100
1677 9100
1678 9100
1679 8900
1680 8500
1681 8500
1682 C300
1683 A100
1684 9100
1685 9100
1686 8900
1687 8500
1688 8300
1689 ENDCHAR
1690 STARTCHAR 73
1691 ENCODING 105
1692 SWIDTH 9000 0
1693 DWIDTH 9 0
1694 BBX 9 16 0 -1
1695 BITMAP
1696 0000
1697 0800
1698 0800
1699 0800
1700 0800
1701 0800
1702 0800
1703 0800
1704 0800
1705 0800
1706 0800
1707 0800
1708 0800
1709 0800
1710 0800
1711 0800
1712 ENDCHAR
1713 STARTCHAR 74
1714 ENCODING 106
1715 SWIDTH 9000 0
1716 DWIDTH 9 0
1717 BBX 9 16 0 -1
1718 BITMAP
1719 0000
1720 0C00
1721 1C00
1722 1A00
1723 2A00
1724 2900
1725 4900
1726 4880
1727 8880
1728 4900
1729 4900
1730 2A00
1731 2A00
1732 1C00
1733 1C00
1734 0800
1735 ENDCHAR
1736 STARTCHAR 75
1737 ENCODING 107
1738 SWIDTH 9000 0
1739 DWIDTH 9 0
1740 BBX 9 16 0 -1
1741 BITMAP
1742 0000
1743 4000
1744 4000
1745 4000
1746 4000
1747 6000
1748 6000
1749 5000
1750 5000
1751 4800
1752 4800
1753 4400
1754 4400
1755 4200
1756 4200
1757 4200
1758 ENDCHAR
1759 STARTCHAR 76
1760 ENCODING 108
1761 SWIDTH 9000 0
1762 DWIDTH 9 0
1763 BBX 9 16 0 -1
1764 BITMAP
1765 0000
1766 6000
1767 5000
1768 5000
1769 4800
1770 4800
1771 4400
1772 4400
1773 4200
1774 4000
1775 4000
1776 4000
1777 4000
1778 4000
1779 4000
1780 4000
1781 ENDCHAR
1782 STARTCHAR 77
1783 ENCODING 109
1784 SWIDTH 9000 0
1785 DWIDTH 9 0
1786 BBX 9 16 0 -1
1787 BITMAP
1788 0000
1789 C300
1790 C300
1791 A500
1792 A500
1793 9900
1794 9900
1795 9900
1796 9900
1797 A500
1798 A500
1799 C300
1800 C300
1801 8100
1802 8100
1803 8100
1804 ENDCHAR
1805 STARTCHAR 78
1806 ENCODING 110
1807 SWIDTH 9000 0
1808 DWIDTH 9 0
1809 BBX 9 16 0 -1
1810 BITMAP
1811 0000
1812 8800
1813 4800
1814 4800
1815 2800
1816 2800
1817 1800
1818 1800
1819 0800
1820 0800
1821 0C00
1822 0C00
1823 0A00
1824 0A00
1825 0900
1826 0900
1827 ENDCHAR
1828 STARTCHAR 79
1829 ENCODING 111
1830 SWIDTH 9000 0
1831 DWIDTH 9 0
1832 BBX 9 16 0 -1
1833 BITMAP
1834 0000
1835 C300
1836 A500
1837 A500
1838 9900
1839 8100
1840 8100
1841 C300
1842 C200
1843 A400
1844 9800
1845 8000
1846 8000
1847 8000
1848 8000
1849 8000
1850 ENDCHAR
1851 STARTCHAR 80
1852 ENCODING 112
1853 SWIDTH 9000 0
1854 DWIDTH 9 0
1855 BBX 9 16 0 -1
1856 BITMAP
1857 0000
1858 8000
1859 8000
1860 8000
1861 8000
1862 8000
1863 8000
1864 8000
1865 8400
1866 8C00
1867 8C00
1868 9400
1869 9400
1870 A400
1871 A400
1872 C400
1873 ENDCHAR
1874 STARTCHAR 81
1875 ENCODING 113
1876 SWIDTH 9000 0
1877 DWIDTH 9 0
1878 BBX 9 16 0 -1
1879 BITMAP
1880 0000
1881 9C80
1882 6B00
1883 0800
1884 0800
1885 0800
1886 0800
1887 0800
1888 0800
1889 0800
1890 0800
1891 0800
1892 0800
1893 0800
1894 0800
1895 0800
1896 ENDCHAR
1897 STARTCHAR 82
1898 ENCODING 114
1899 SWIDTH 9000 0
1900 DWIDTH 9 0
1901 BBX 9 16 0 -1
1902 BITMAP
1903 0000
1904 7800
1905 4400
1906 4200
1907 4200
1908 4200
1909 4200
1910 4200
1911 4400
1912 7800
1913 4400
1914 4400
1915 4400
1916 4200
1917 4200
1918 4200
1919 ENDCHAR
1920 STARTCHAR 83
1921 ENCODING 115
1922 SWIDTH 9000 0
1923 DWIDTH 9 0
1924 BBX 9 16 0 -1
1925 BITMAP
1926 0000
1927 8000
1928 8000
1929 8300
1930 8300
1931 8500
1932 8500
1933 8900
1934 8900
1935 9100
1936 9100
1937 A100
1938 A100
1939 C100
1940 0100
1941 0100
1942 ENDCHAR
1943 STARTCHAR 84
1944 ENCODING 116
1945 SWIDTH 9000 0
1946 DWIDTH 9 0
1947 BBX 9 16 0 -1
1948 BITMAP
1949 0000
1950 1C00
1951 2A00
1952 2A00
1953 4900
1954 8880
1955 0800
1956 0800
1957 0800
1958 0800
1959 0800
1960 0800
1961 0800
1962 0800
1963 0800
1964 0800
1965 ENDCHAR
1966 STARTCHAR 85
1967 ENCODING 117
1968 SWIDTH 9000 0
1969 DWIDTH 9 0
1970 BBX 9 16 0 -1
1971 BITMAP
1972 0000
1973 6000
1974 5000
1975 5000
1976 4800
1977 4800
1978 4400
1979 4400
1980 4200
1981 4200
1982 4200
1983 4200
1984 4200
1985 4200
1986 4200
1987 4200
1988 ENDCHAR
1989 STARTCHAR 86
1990 ENCODING 118
1991 SWIDTH 9000 0
1992 DWIDTH 9 0
1993 BBX 9 16 0 -1
1994 BITMAP
1995 0000
1996 3C00
1997 4200
1998 4200
1999 2400
2000 2400
2001 1800
2002 1800
2003 1800
2004 1800
2005 2400
2006 2400
2007 4200
2008 4200
2009 8100
2010 8100
2011 ENDCHAR
2012 STARTCHAR 87
2013 ENCODING 119
2014 SWIDTH 9000 0
2015 DWIDTH 9 0
2016 BBX 9 16 0 -1
2017 BITMAP
2018 0000
2019 7800
2020 4400
2021 4200
2022 4200
2023 4200
2024 4200
2025 4200
2026 4400
2027 7800
2028 4000
2029 4000
2030 4000
2031 4000
2032 4000
2033 4000
2034 ENDCHAR
2035 STARTCHAR 88
2036 ENCODING 120
2037 SWIDTH 9000 0
2038 DWIDTH 9 0
2039 BBX 9 16 0 -1
2040 BITMAP
2041 0000
2042 0800
2043 0800
2044 0800
2045 0800
2046 0800
2047 0800
2048 0800
2049 1C00
2050 2A00
2051 4900
2052 8880
2053 8880
2054 8880
2055 8880
2056 8880
2057 ENDCHAR
2058 STARTCHAR 89
2059 ENCODING 121
2060 SWIDTH 9000 0
2061 DWIDTH 9 0
2062 BBX 9 16 0 -1
2063 BITMAP
2064 0000
2065 F800
2066 8C00
2067 8C00
2068 8A00
2069 CA00
2070 C900
2071 A900
2072 A880
2073 9880
2074 8C80
2075 8C80
2076 8A80
2077 8A80
2078 8980
2079 8980
2080 ENDCHAR
2081 STARTCHAR 90
2082 ENCODING 122
2083 SWIDTH 9000 0
2084 DWIDTH 9 0
2085 BBX 9 16 0 -1
2086 BITMAP
2087 0000
2088 3F00
2089 2000
2090 4000
2091 4000
2092 8000
2093 8000
2094 4000
2095 4000
2096 2000
2097 2000
2098 1000
2099 1000
2100 0800
2101 0800
2102 0700
2103 ENDCHAR
2104 STARTCHAR 91
2105 ENCODING 123
2106 SWIDTH 9000 0
2107 DWIDTH 9 0
2108 BBX 9 16 0 -1
2109 BITMAP
2110 F780
2111 E380
2112 E380
2113 C180
2114 8080
2115 F780
2116 F780
2117 F780
2118 F780
2119 F780
2120 F780
2121 F780
2122 F780
2123 F780
2124 F780
2125 F780
2126 ENDCHAR
2127 STARTCHAR 92
2128 ENCODING 124
2129 SWIDTH 9000 0
2130 DWIDTH 9 0
2131 BBX 9 16 0 -1
2132 BITMAP
2133 F780
2134 F780
2135 F780
2136 F780
2137 F780
2138 F780
2139 F780
2140 F780
2141 F780
2142 F780
2143 F780
2144 8080
2145 C180
2146 E380
2147 E380
2148 F780
2149 ENDCHAR
2150 STARTCHAR 93
2151 ENCODING 125
2152 SWIDTH 9000 0
2153 DWIDTH 9 0
2154 BBX 9 16 0 -1
2155 BITMAP
2156 F780
2157 E380
2158 E380
2159 C180
2160 8080
2161 F780
2162 F780
2163 F780
2164 F780
2165 F780
2166 F780
2167 8080
2168 C180
2169 E380
2170 E380
2171 F780
2172 ENDCHAR
2173 STARTCHAR 94
2174 ENCODING 126
2175 SWIDTH 9000 0
2176 DWIDTH 9 0
2177 BBX 9 16 0 -1
2178 BITMAP
2179 E380
2180 DD80
2181 BE80
2182 BE80
2183 FE80
2184 FE80
2185 FD80
2186 FB80
2187 F780
2188 F780
2189 F780
2190 F780
2191 F780
2192 FF80
2193 F780
2194 F780
2195 ENDCHAR
2196 STARTCHAR 95
2197 ENCODING 127
2198 SWIDTH 9000 0
2199 DWIDTH 9 0
2200 BBX 9 16 0 -1
2201 BITMAP
2202 0000
2203 0000
2204 0000
2205 0000
2206 0000
2207 0000
2208 0000
2209 0000
2210 0000
2211 0000
2212 0000
2213 0000
2214 0000
2215 0000
2216 0000
2217 0000
2218 ENDCHAR
2219 ENDFONT
0 STARTFONT 2.1
1 FONT -windows-Zork-medium-r-normal--20-200-72-72-c-120-misc-fontspecific
2 SIZE 20 96 96
3 FONTBOUNDINGBOX 12 20 0 -1
4 STARTPROPERTIES 4
5 FONT_ASCENT 19
6 FONT_DESCENT 1
7 CAP_HEIGHT 19
8 DEFAULT_CHAR 8224
9 ENDPROPERTIES
10 CHARS 96
11 STARTCHAR 0
12 ENCODING 32
13 SWIDTH 12000 0
14 DWIDTH 12 0
15 BBX 12 20 0 -1
16 BITMAP
17 0000
18 0000
19 0000
20 0000
21 0000
22 0000
23 0000
24 0000
25 0000
26 0000
27 0000
28 0000
29 0000
30 0000
31 0000
32 0000
33 0000
34 0000
35 0000
36 0000
37 ENDCHAR
38 STARTCHAR 1
39 ENCODING 33
40 SWIDTH 12000 0
41 DWIDTH 12 0
42 BBX 12 20 0 -1
43 BITMAP
44 0000
45 0000
46 0000
47 0000
48 0000
49 0000
50 0000
51 1000
52 3000
53 7000
54 FFF0
55 7000
56 3000
57 1000
58 0000
59 0000
60 0000
61 0000
62 0000
63 0000
64 ENDCHAR
65 STARTCHAR 2
66 ENCODING 34
67 SWIDTH 12000 0
68 DWIDTH 12 0
69 BBX 12 20 0 -1
70 BITMAP
71 0000
72 0000
73 0000
74 0000
75 0000
76 0000
77 0000
78 0080
79 00C0
80 00E0
81 FFF0
82 00E0
83 00C0
84 0080
85 0000
86 0000
87 0000
88 0000
89 0000
90 0000
91 ENDCHAR
92 STARTCHAR 3
93 ENCODING 35
94 SWIDTH 12000 0
95 DWIDTH 12 0
96 BBX 12 20 0 -1
97 BITMAP
98 0010
99 0020
100 0020
101 0040
102 0040
103 0080
104 0080
105 0100
106 0200
107 0200
108 0400
109 0400
110 0800
111 1000
112 1000
113 2000
114 2000
115 4000
116 4000
117 8000
118 ENDCHAR
119 STARTCHAR 4
120 ENCODING 36
121 SWIDTH 12000 0
122 DWIDTH 12 0
123 BBX 12 20 0 -1
124 BITMAP
125 8000
126 4000
127 4000
128 2000
129 2000
130 1000
131 1000
132 0800
133 0400
134 0400
135 0200
136 0200
137 0100
138 0080
139 0080
140 0040
141 0040
142 0020
143 0020
144 0010
145 ENDCHAR
146 STARTCHAR 5
147 ENCODING 37
148 SWIDTH 12000 0
149 DWIDTH 12 0
150 BBX 12 20 0 -1
151 BITMAP
152 0000
153 0000
154 0000
155 0000
156 0000
157 0000
158 0000
159 0000
160 0000
161 0000
162 0000
163 0000
164 0000
165 0000
166 0000
167 0000
168 0000
169 0000
170 0000
171 0000
172 ENDCHAR
173 STARTCHAR 6
174 ENCODING 38
175 SWIDTH 12000 0
176 DWIDTH 12 0
177 BBX 12 20 0 -1
178 BITMAP
179 0000
180 0000
181 0000
182 0000
183 0000
184 0000
185 0000
186 0000
187 0000
188 0000
189 FFF0
190 0000
191 0000
192 0000
193 0000
194 0000
195 0000
196 0000
197 0000
198 0000
199 ENDCHAR
200 STARTCHAR 7
201 ENCODING 39
202 SWIDTH 12000 0
203 DWIDTH 12 0
204 BBX 12 20 0 -1
205 BITMAP
206 0000
207 0000
208 0000
209 0000
210 0000
211 0000
212 0000
213 0000
214 0000
215 FFF0
216 0000
217 0000
218 0000
219 0000
220 0000
221 0000
222 0000
223 0000
224 0000
225 0000
226 ENDCHAR
227 STARTCHAR 8
228 ENCODING 40
229 SWIDTH 12000 0
230 DWIDTH 12 0
231 BBX 12 20 0 -1
232 BITMAP
233 0200
234 0200
235 0200
236 0200
237 0200
238 0200
239 0200
240 0200
241 0200
242 0200
243 0200
244 0200
245 0200
246 0200
247 0200
248 0200
249 0200
250 0200
251 0200
252 0200
253 ENDCHAR
254 STARTCHAR 9
255 ENCODING 41
256 SWIDTH 12000 0
257 DWIDTH 12 0
258 BBX 12 20 0 -1
259 BITMAP
260 0400
261 0400
262 0400
263 0400
264 0400
265 0400
266 0400
267 0400
268 0400
269 0400
270 0400
271 0400
272 0400
273 0400
274 0400
275 0400
276 0400
277 0400
278 0400
279 0400
280 ENDCHAR
281 STARTCHAR 10
282 ENCODING 42
283 SWIDTH 12000 0
284 DWIDTH 12 0
285 BBX 12 20 0 -1
286 BITMAP
287 0200
288 0200
289 0200
290 0200
291 0200
292 0200
293 0200
294 0200
295 0200
296 FFF0
297 0000
298 0000
299 0000
300 0000
301 0000
302 0000
303 0000
304 0000
305 0000
306 0000
307 ENDCHAR
308 STARTCHAR 11
309 ENCODING 43
310 SWIDTH 12000 0
311 DWIDTH 12 0
312 BBX 12 20 0 -1
313 BITMAP
314 0000
315 0000
316 0000
317 0000
318 0000
319 0000
320 0000
321 0000
322 0000
323 0000
324 FFF0
325 0200
326 0200
327 0200
328 0200
329 0200
330 0200
331 0200
332 0200
333 0200
334 ENDCHAR
335 STARTCHAR 12
336 ENCODING 44
337 SWIDTH 12000 0
338 DWIDTH 12 0
339 BBX 12 20 0 -1
340 BITMAP
341 0200
342 0200
343 0200
344 0200
345 0200
346 0200
347 0200
348 0200
349 0200
350 0200
351 03F0
352 0200
353 0200
354 0200
355 0200
356 0200
357 0200
358 0200
359 0200
360 0200
361 ENDCHAR
362 STARTCHAR 13
363 ENCODING 45
364 SWIDTH 12000 0
365 DWIDTH 12 0
366 BBX 12 20 0 -1
367 BITMAP
368 0400
369 0400
370 0400
371 0400
372 0400
373 0400
374 0400
375 0400
376 0400
377 0400
378 FC00
379 0400
380 0400
381 0400
382 0400
383 0400
384 0400
385 0400
386 0400
387 0400
388 ENDCHAR
389 STARTCHAR 14
390 ENCODING 46
391 SWIDTH 12000 0
392 DWIDTH 12 0
393 BBX 12 20 0 -1
394 BITMAP
395 0400
396 0400
397 0400
398 0400
399 0400
400 0400
401 0400
402 0400
403 0400
404 0400
405 07F0
406 0000
407 0000
408 0000
409 0000
410 0000
411 0000
412 0000
413 0000
414 0000
415 ENDCHAR
416 STARTCHAR 15
417 ENCODING 47
418 SWIDTH 12000 0
419 DWIDTH 12 0
420 BBX 12 20 0 -1
421 BITMAP
422 0000
423 0000
424 0000
425 0000
426 0000
427 0000
428 0000
429 0000
430 0000
431 07F0
432 0400
433 0400
434 0400
435 0400
436 0400
437 0400
438 0400
439 0400
440 0400
441 0400
442 ENDCHAR
443 STARTCHAR 16
444 ENCODING 48
445 SWIDTH 12000 0
446 DWIDTH 12 0
447 BBX 12 20 0 -1
448 BITMAP
449 0000
450 0000
451 0000
452 0000
453 0000
454 0000
455 0000
456 0000
457 0000
458 FE00
459 0200
460 0200
461 0200
462 0200
463 0200
464 0200
465 0200
466 0200
467 0200
468 0200
469 ENDCHAR
470 STARTCHAR 17
471 ENCODING 49
472 SWIDTH 12000 0
473 DWIDTH 12 0
474 BBX 12 20 0 -1
475 BITMAP
476 0200
477 0200
478 0200
479 0200
480 0200
481 0200
482 0200
483 0200
484 0200
485 0200
486 FE00
487 0000
488 0000
489 0000
490 0000
491 0000
492 0000
493 0000
494 0000
495 0000
496 ENDCHAR
497 STARTCHAR 18
498 ENCODING 50
499 SWIDTH 12000 0
500 DWIDTH 12 0
501 BBX 12 20 0 -1
502 BITMAP
503 0400
504 0400
505 0400
506 0400
507 0400
508 0400
509 0400
510 0400
511 0400
512 0400
513 07F0
514 0800
515 0800
516 1000
517 1000
518 2000
519 2000
520 4000
521 4000
522 8000
523 ENDCHAR
524 STARTCHAR 19
525 ENCODING 51
526 SWIDTH 12000 0
527 DWIDTH 12 0
528 BBX 12 20 0 -1
529 BITMAP
530 8000
531 4000
532 4000
533 2000
534 2000
535 1000
536 1000
537 0800
538 0800
539 07F0
540 0400
541 0400
542 0400
543 0400
544 0400
545 0400
546 0400
547 0400
548 0400
549 0400
550 ENDCHAR
551 STARTCHAR 20
552 ENCODING 52
553 SWIDTH 12000 0
554 DWIDTH 12 0
555 BBX 12 20 0 -1
556 BITMAP
557 0010
558 0020
559 0020
560 0040
561 0040
562 0080
563 0080
564 0100
565 0100
566 FE00
567 0200
568 0200
569 0200
570 0200
571 0200
572 0200
573 0200
574 0200
575 0200
576 0200
577 ENDCHAR
578 STARTCHAR 21
579 ENCODING 53
580 SWIDTH 12000 0
581 DWIDTH 12 0
582 BBX 12 20 0 -1
583 BITMAP
584 0200
585 0200
586 0200
587 0200
588 0200
589 0200
590 0200
591 0200
592 0200
593 0200
594 FE00
595 0100
596 0100
597 0080
598 0080
599 0040
600 0040
601 0020
602 0020
603 0010
604 ENDCHAR
605 STARTCHAR 22
606 ENCODING 54
607 SWIDTH 12000 0
608 DWIDTH 12 0
609 BBX 12 20 0 -1
610 BITMAP
611 FFF0
612 FFF0
613 FFF0
614 FFF0
615 FFF0
616 FFF0
617 FFF0
618 FFF0
619 FFF0
620 FFF0
621 FFF0
622 FFF0
623 FFF0
624 FFF0
625 FFF0
626 FFF0
627 FFF0
628 FFF0
629 FFF0
630 FFF0
631 ENDCHAR
632 STARTCHAR 23
633 ENCODING 55
634 SWIDTH 12000 0
635 DWIDTH 12 0
636 BBX 12 20 0 -1
637 BITMAP
638 FFF0
639 FFF0
640 FFF0
641 FFF0
642 FFF0
643 FFF0
644 FFF0
645 FFF0
646 FFF0
647 FFF0
648 FFF0
649 0000
650 0000
651 0000
652 0000
653 0000
654 0000
655 0000
656 0000
657 0000
658 ENDCHAR
659 STARTCHAR 24
660 ENCODING 56
661 SWIDTH 12000 0
662 DWIDTH 12 0
663 BBX 12 20 0 -1
664 BITMAP
665 0000
666 0000
667 0000
668 0000
669 0000
670 0000
671 0000
672 0000
673 0000
674 FFF0
675 FFF0
676 FFF0
677 FFF0
678 FFF0
679 FFF0
680 FFF0
681 FFF0
682 FFF0
683 FFF0
684 FFF0
685 ENDCHAR
686 STARTCHAR 25
687 ENCODING 57
688 SWIDTH 12000 0
689 DWIDTH 12 0
690 BBX 12 20 0 -1
691 BITMAP
692 FC00
693 FC00
694 FC00
695 FC00
696 FC00
697 FC00
698 FC00
699 FC00
700 FC00
701 FC00
702 FC00
703 FC00
704 FC00
705 FC00
706 FC00
707 FC00
708 FC00
709 FC00
710 FC00
711 FC00
712 ENDCHAR
713 STARTCHAR 26
714 ENCODING 58
715 SWIDTH 12000 0
716 DWIDTH 12 0
717 BBX 12 20 0 -1
718 BITMAP
719 07F0
720 07F0
721 07F0
722 07F0
723 07F0
724 07F0
725 07F0
726 07F0
727 07F0
728 07F0
729 07F0
730 07F0
731 07F0
732 07F0
733 07F0
734 07F0
735 07F0
736 07F0
737 07F0
738 07F0
739 ENDCHAR
740 STARTCHAR 27
741 ENCODING 59
742 SWIDTH 12000 0
743 DWIDTH 12 0
744 BBX 12 20 0 -1
745 BITMAP
746 0200
747 0200
748 0200
749 0200
750 0200
751 0200
752 0200
753 0200
754 0200
755 FFF0
756 FFF0
757 FFF0
758 FFF0
759 FFF0
760 FFF0
761 FFF0
762 FFF0
763 FFF0
764 FFF0
765 FFF0
766 ENDCHAR
767 STARTCHAR 28
768 ENCODING 60
769 SWIDTH 12000 0
770 DWIDTH 12 0
771 BBX 12 20 0 -1
772 BITMAP
773 FFF0
774 FFF0
775 FFF0
776 FFF0
777 FFF0
778 FFF0
779 FFF0
780 FFF0
781 FFF0
782 FFF0
783 FFF0
784 0200
785 0200
786 0200
787 0200
788 0200
789 0200
790 0200
791 0200
792 0200
793 ENDCHAR
794 STARTCHAR 29
795 ENCODING 61
796 SWIDTH 12000 0
797 DWIDTH 12 0
798 BBX 12 20 0 -1
799 BITMAP
800 FE00
801 FE00
802 FE00
803 FE00
804 FE00
805 FE00
806 FE00
807 FE00
808 FE00
809 FE00
810 FFF0
811 FE00
812 FE00
813 FE00
814 FE00
815 FE00
816 FE00
817 FE00
818 FE00
819 FE00
820 ENDCHAR
821 STARTCHAR 30
822 ENCODING 62
823 SWIDTH 12000 0
824 DWIDTH 12 0
825 BBX 12 20 0 -1
826 BITMAP
827 07F0
828 07F0
829 07F0
830 07F0
831 07F0
832 07F0
833 07F0
834 07F0
835 07F0
836 07F0
837 FFF0
838 07F0
839 07F0
840 07F0
841 07F0
842 07F0
843 07F0
844 07F0
845 07F0
846 07F0
847 ENDCHAR
848 STARTCHAR 31
849 ENCODING 63
850 SWIDTH 12000 0
851 DWIDTH 12 0
852 BBX 12 20 0 -1
853 BITMAP
854 07F0
855 07F0
856 07F0
857 07F0
858 07F0
859 07F0
860 07F0
861 07F0
862 07F0
863 07F0
864 07F0
865 0000
866 0000
867 0000
868 0000
869 0000
870 0000
871 0000
872 0000
873 0000
874 ENDCHAR
875 STARTCHAR 32
876 ENCODING 64
877 SWIDTH 12000 0
878 DWIDTH 12 0
879 BBX 12 20 0 -1
880 BITMAP
881 0000
882 0000
883 0000
884 0000
885 0000
886 0000
887 0000
888 0000
889 0000
890 07F0
891 07F0
892 07F0
893 07F0
894 07F0
895 07F0
896 07F0
897 07F0
898 07F0
899 07F0
900 07F0
901 ENDCHAR
902 STARTCHAR 33
903 ENCODING 65
904 SWIDTH 12000 0
905 DWIDTH 12 0
906 BBX 12 20 0 -1
907 BITMAP
908 0000
909 0000
910 0000
911 0000
912 0000
913 0000
914 0000
915 0000
916 0000
917 FE00
918 FE00
919 FE00
920 FE00
921 FE00
922 FE00
923 FE00
924 FE00
925 FE00
926 FE00
927 FE00
928 ENDCHAR
929 STARTCHAR 34
930 ENCODING 66
931 SWIDTH 12000 0
932 DWIDTH 12 0
933 BBX 12 20 0 -1
934 BITMAP
935 FE00
936 FE00
937 FE00
938 FE00
939 FE00
940 FE00
941 FE00
942 FE00
943 FE00
944 FE00
945 FE00
946 0000
947 0000
948 0000
949 0000
950 0000
951 0000
952 0000
953 0000
954 0000
955 ENDCHAR
956 STARTCHAR 35
957 ENCODING 67
958 SWIDTH 12000 0
959 DWIDTH 12 0
960 BBX 12 20 0 -1
961 BITMAP
962 07F0
963 07F0
964 07F0
965 07F0
966 07F0
967 07F0
968 07F0
969 07F0
970 07F0
971 07F0
972 07F0
973 0800
974 0800
975 1000
976 1000
977 2000
978 2000
979 4000
980 4000
981 8000
982 ENDCHAR
983 STARTCHAR 36
984 ENCODING 68
985 SWIDTH 12000 0
986 DWIDTH 12 0
987 BBX 12 20 0 -1
988 BITMAP
989 8000
990 4000
991 4000
992 2000
993 2000
994 1000
995 1000
996 0800
997 0800
998 07F0
999 07F0
1000 07F0
1001 07F0
1002 07F0
1003 07F0
1004 07F0
1005 07F0
1006 07F0
1007 07F0
1008 07F0
1009 ENDCHAR
1010 STARTCHAR 37
1011 ENCODING 69
1012 SWIDTH 12000 0
1013 DWIDTH 12 0
1014 BBX 12 20 0 -1
1015 BITMAP
1016 0010
1017 0020
1018 0020
1019 0040
1020 0040
1021 0080
1022 0080
1023 0100
1024 0100
1025 FE00
1026 FE00
1027 FE00
1028 FE00
1029 FE00
1030 FE00
1031 FE00
1032 FE00
1033 FE00
1034 FE00
1035 FE00
1036 ENDCHAR
1037 STARTCHAR 38
1038 ENCODING 70
1039 SWIDTH 12000 0
1040 DWIDTH 12 0
1041 BBX 12 20 0 -1
1042 BITMAP
1043 FE00
1044 FE00
1045 FE00
1046 FE00
1047 FE00
1048 FE00
1049 FE00
1050 FE00
1051 FE00
1052 FE00
1053 FE00
1054 0100
1055 0100
1056 0080
1057 0080
1058 0040
1059 0040
1060 0020
1061 0020
1062 0010
1063 ENDCHAR
1064 STARTCHAR 39
1065 ENCODING 71
1066 SWIDTH 12000 0
1067 DWIDTH 12 0
1068 BBX 12 20 0 -1
1069 BITMAP
1070 0030
1071 0030
1072 0000
1073 0000
1074 0000
1075 0000
1076 0000
1077 0000
1078 0000
1079 0000
1080 0000
1081 0000
1082 0000
1083 0000
1084 0000
1085 0000
1086 0000
1087 0000
1088 0000
1089 0000
1090 ENDCHAR
1091 STARTCHAR 40
1092 ENCODING 72
1093 SWIDTH 12000 0
1094 DWIDTH 12 0
1095 BBX 12 20 0 -1
1096 BITMAP
1097 0000
1098 0000
1099 0000
1100 0000
1101 0000
1102 0000
1103 0000
1104 0000
1105 0000
1106 0000
1107 0000
1108 0000
1109 0000
1110 0000
1111 0000
1112 0000
1113 0000
1114 0000
1115 0030
1116 0030
1117 ENDCHAR
1118 STARTCHAR 41
1119 ENCODING 73
1120 SWIDTH 12000 0
1121 DWIDTH 12 0
1122 BBX 12 20 0 -1
1123 BITMAP
1124 0000
1125 0000
1126 0000
1127 0000
1128 0000
1129 0000
1130 0000
1131 0000
1132 0000
1133 0000
1134 0000
1135 0000
1136 0000
1137 0000
1138 0000
1139 0000
1140 0000
1141 0000
1142 C000
1143 C000
1144 ENDCHAR
1145 STARTCHAR 42
1146 ENCODING 74
1147 SWIDTH 12000 0
1148 DWIDTH 12 0
1149 BBX 12 20 0 -1
1150 BITMAP
1151 C000
1152 C000
1153 0000
1154 0000
1155 0000
1156 0000
1157 0000
1158 0000
1159 0000
1160 0000
1161 0000
1162 0000
1163 0000
1164 0000
1165 0000
1166 0000
1167 0000
1168 0000
1169 0000
1170 0000
1171 ENDCHAR
1172 STARTCHAR 43
1173 ENCODING 75
1174 SWIDTH 12000 0
1175 DWIDTH 12 0
1176 BBX 12 20 0 -1
1177 BITMAP
1178 FFF0
1179 0000
1180 0000
1181 0000
1182 0000
1183 0000
1184 0000
1185 0000
1186 0000
1187 0000
1188 0000
1189 0000
1190 0000
1191 0000
1192 0000
1193 0000
1194 0000
1195 0000
1196 0000
1197 0000
1198 ENDCHAR
1199 STARTCHAR 44
1200 ENCODING 76
1201 SWIDTH 12000 0
1202 DWIDTH 12 0
1203 BBX 12 20 0 -1
1204 BITMAP
1205 0000
1206 0000
1207 0000
1208 0000
1209 0000
1210 0000
1211 0000
1212 0000
1213 0000
1214 0000
1215 0000
1216 0000
1217 0000
1218 0000
1219 0000
1220 0000
1221 0000
1222 0000
1223 0000
1224 FFF0
1225 ENDCHAR
1226 STARTCHAR 45
1227 ENCODING 77
1228 SWIDTH 12000 0
1229 DWIDTH 12 0
1230 BBX 12 20 0 -1
1231 BITMAP
1232 8000
1233 8000
1234 8000
1235 8000
1236 8000
1237 8000
1238 8000
1239 8000
1240 8000
1241 8000
1242 8000
1243 8000
1244 8000
1245 8000
1246 8000
1247 8000
1248 8000
1249 8000
1250 8000
1251 8000
1252 ENDCHAR
1253 STARTCHAR 46
1254 ENCODING 78
1255 SWIDTH 12000 0
1256 DWIDTH 12 0
1257 BBX 12 20 0 -1
1258 BITMAP
1259 0010
1260 0010
1261 0010
1262 0010
1263 0010
1264 0010
1265 0010
1266 0010
1267 0010
1268 0010
1269 0010
1270 0010
1271 0010
1272 0010
1273 0010
1274 0010
1275 0010
1276 0010
1277 0010
1278 0010
1279 ENDCHAR
1280 STARTCHAR 47
1281 ENCODING 79
1282 SWIDTH 12000 0
1283 DWIDTH 12 0
1284 BBX 12 20 0 -1
1285 BITMAP
1286 0000
1287 0000
1288 FFF0
1289 0000
1290 0000
1291 0000
1292 0000
1293 0000
1294 0000
1295 0000
1296 0000
1297 0000
1298 0000
1299 0000
1300 0000
1301 0000
1302 0000
1303 FFF0
1304 0000
1305 0000
1306 ENDCHAR
1307 STARTCHAR 48
1308 ENCODING 80
1309 SWIDTH 12000 0
1310 DWIDTH 12 0
1311 BBX 12 20 0 -1
1312 BITMAP
1313 0000
1314 0000
1315 FFF0
1316 8000
1317 8000
1318 8000
1319 8000
1320 8000
1321 8000
1322 8000
1323 8000
1324 8000
1325 8000
1326 8000
1327 8000
1328 8000
1329 8000
1330 FFF0
1331 0000
1332 0000
1333 ENDCHAR
1334 STARTCHAR 49
1335 ENCODING 81
1336 SWIDTH 12000 0
1337 DWIDTH 12 0
1338 BBX 12 20 0 -1
1339 BITMAP
1340 0000
1341 0000
1342 FFF0
1343 E000
1344 E000
1345 E000
1346 E000
1347 E000
1348 E000
1349 E000
1350 E000
1351 E000
1352 E000
1353 E000
1354 E000
1355 E000
1356 E000
1357 FFF0
1358 0000
1359 0000
1360 ENDCHAR
1361 STARTCHAR 50
1362 ENCODING 82
1363 SWIDTH 12000 0
1364 DWIDTH 12 0
1365 BBX 12 20 0 -1
1366 BITMAP
1367 0000
1368 0000
1369 FFF0
1370 F000
1371 F000
1372 F000
1373 F000
1374 F000
1375 F000
1376 F000
1377 F000
1378 F000
1379 F000
1380 F000
1381 F000
1382 F000
1383 F000
1384 FFF0
1385 0000
1386 0000
1387 ENDCHAR
1388 STARTCHAR 51
1389 ENCODING 83
1390 SWIDTH 12000 0
1391 DWIDTH 12 0
1392 BBX 12 20 0 -1
1393 BITMAP
1394 0000
1395 0000
1396 FFF0
1397 FC00
1398 FC00
1399 FC00
1400 FC00
1401 FC00
1402 FC00
1403 FC00
1404 FC00
1405 FC00
1406 FC00
1407 FC00
1408 FC00
1409 FC00
1410 FC00
1411 FFF0
1412 0000
1413 0000
1414 ENDCHAR
1415 STARTCHAR 52
1416 ENCODING 84
1417 SWIDTH 12000 0
1418 DWIDTH 12 0
1419 BBX 12 20 0 -1
1420 BITMAP
1421 0000
1422 0000
1423 FFF0
1424 FE00
1425 FE00
1426 FE00
1427 FE00
1428 FE00
1429 FE00
1430 FE00
1431 FE00
1432 FE00
1433 FE00
1434 FE00
1435 FE00
1436 FE00
1437 FE00
1438 FFF0
1439 0000
1440 0000
1441 ENDCHAR
1442 STARTCHAR 53
1443 ENCODING 85
1444 SWIDTH 12000 0
1445 DWIDTH 12 0
1446 BBX 12 20 0 -1
1447 BITMAP
1448 0000
1449 0000
1450 FFF0
1451 FF80
1452 FF80
1453 FF80
1454 FF80
1455 FF80
1456 FF80
1457 FF80
1458 FF80
1459 FF80
1460 FF80
1461 FF80
1462 FF80
1463 FF80
1464 FF80
1465 FFF0
1466 0000
1467 0000
1468 ENDCHAR
1469 STARTCHAR 54
1470 ENCODING 86
1471 SWIDTH 12000 0
1472 DWIDTH 12 0
1473 BBX 12 20 0 -1
1474 BITMAP
1475 0000
1476 0000
1477 FFF0
1478 FFC0
1479 FFC0
1480 FFC0
1481 FFC0
1482 FFC0
1483 FFC0
1484 FFC0
1485 FFC0
1486 FFC0
1487 FFC0
1488 FFC0
1489 FFC0
1490 FFC0
1491 FFC0
1492 FFF0
1493 0000
1494 0000
1495 ENDCHAR
1496 STARTCHAR 55
1497 ENCODING 87
1498 SWIDTH 12000 0
1499 DWIDTH 12 0
1500 BBX 12 20 0 -1
1501 BITMAP
1502 0000
1503 0000
1504 FFF0
1505 FFF0
1506 FFF0
1507 FFF0
1508 FFF0
1509 FFF0
1510 FFF0
1511 FFF0
1512 FFF0
1513 FFF0
1514 FFF0
1515 FFF0
1516 FFF0
1517 FFF0
1518 FFF0
1519 FFF0
1520 0000
1521 0000
1522 ENDCHAR
1523 STARTCHAR 56
1524 ENCODING 88
1525 SWIDTH 12000 0
1526 DWIDTH 12 0
1527 BBX 12 20 0 -1
1528 BITMAP
1529 0000
1530 0010
1531 0010
1532 0010
1533 0010
1534 0010
1535 0010
1536 0010
1537 0010
1538 0010
1539 0010
1540 0010
1541 0010
1542 0010
1543 0010
1544 0010
1545 0010
1546 0010
1547 0010
1548 0000
1549 ENDCHAR
1550 STARTCHAR 57
1551 ENCODING 89
1552 SWIDTH 12000 0
1553 DWIDTH 12 0
1554 BBX 12 20 0 -1
1555 BITMAP
1556 0000
1557 8000
1558 8000
1559 8000
1560 8000
1561 8000
1562 8000
1563 8000
1564 8000
1565 8000
1566 8000
1567 8000
1568 8000
1569 8000
1570 8000
1571 8000
1572 8000
1573 8000
1574 8000
1575 0000
1576 ENDCHAR
1577 STARTCHAR 58
1578 ENCODING 90
1579 SWIDTH 12000 0
1580 DWIDTH 12 0
1581 BBX 12 20 0 -1
1582 BITMAP
1583 8010
1584 4020
1585 4020
1586 2040
1587 2040
1588 1080
1589 1080
1590 0900
1591 0600
1592 0600
1593 0600
1594 0600
1595 0900
1596 1080
1597 1080
1598 2040
1599 2040
1600 4020
1601 4020
1602 8010
1603 ENDCHAR
1604 STARTCHAR 59
1605 ENCODING 91
1606 SWIDTH 12000 0
1607 DWIDTH 12 0
1608 BBX 12 20 0 -1
1609 BITMAP
1610 0200
1611 0200
1612 0200
1613 0200
1614 0200
1615 0200
1616 0200
1617 0200
1618 0200
1619 0200
1620 FFF0
1621 0200
1622 0200
1623 0200
1624 0200
1625 0200
1626 0200
1627 0200
1628 0200
1629 0200
1630 ENDCHAR
1631 STARTCHAR 60
1632 ENCODING 92
1633 SWIDTH 12000 0
1634 DWIDTH 12 0
1635 BBX 12 20 0 -1
1636 BITMAP
1637 0200
1638 0700
1639 0F80
1640 1FC0
1641 0200
1642 0200
1643 0200
1644 0200
1645 0200
1646 0200
1647 0200
1648 0200
1649 0200
1650 0200
1651 0200
1652 0200
1653 0200
1654 0200
1655 0200
1656 0200
1657 ENDCHAR
1658 STARTCHAR 61
1659 ENCODING 93
1660 SWIDTH 12000 0
1661 DWIDTH 12 0
1662 BBX 12 20 0 -1
1663 BITMAP
1664 0200
1665 0200
1666 0200
1667 0200
1668 0200
1669 0200
1670 0200
1671 0200
1672 0200
1673 0200
1674 0200
1675 0200
1676 0200
1677 0200
1678 0200
1679 0200
1680 1FC0
1681 0F80
1682 0700
1683 0200
1684 ENDCHAR
1685 STARTCHAR 62
1686 ENCODING 94
1687 SWIDTH 12000 0
1688 DWIDTH 12 0
1689 BBX 12 20 0 -1
1690 BITMAP
1691 0200
1692 0700
1693 0F80
1694 1FC0
1695 0200
1696 0200
1697 0200
1698 0200
1699 0200
1700 0200
1701 0200
1702 0200
1703 0200
1704 0200
1705 0200
1706 0200
1707 1FC0
1708 0F80
1709 0700
1710 0200
1711 ENDCHAR
1712 STARTCHAR 63
1713 ENCODING 95
1714 SWIDTH 12000 0
1715 DWIDTH 12 0
1716 BBX 12 20 0 -1
1717 BITMAP
1718 FFF0
1719 8010
1720 8010
1721 8010
1722 8010
1723 8010
1724 8010
1725 8010
1726 8010
1727 8010
1728 8010
1729 8010
1730 8010
1731 8010
1732 8010
1733 8010
1734 8010
1735 8010
1736 8010
1737 FFF0
1738 ENDCHAR
1739 STARTCHAR 64
1740 ENCODING 96
1741 SWIDTH 12000 0
1742 DWIDTH 12 0
1743 BBX 12 20 0 -1
1744 BITMAP
1745 0000
1746 1F00
1747 3FC0
1748 70C0
1749 E060
1750 C060
1751 0060
1752 00C0
1753 01C0
1754 0380
1755 0600
1756 0C00
1757 0C00
1758 0C00
1759 0000
1760 0000
1761 0C00
1762 0C00
1763 0000
1764 0000
1765 ENDCHAR
1766 STARTCHAR 65
1767 ENCODING 97
1768 SWIDTH 12000 0
1769 DWIDTH 12 0
1770 BBX 12 20 0 -1
1771 BITMAP
1772 0000
1773 E040
1774 9040
1775 9080
1776 8880
1777 8500
1778 8500
1779 8200
1780 C000
1781 A000
1782 9000
1783 9000
1784 8800
1785 8400
1786 8200
1787 8000
1788 8000
1789 8000
1790 8000
1791 8000
1792 ENDCHAR
1793 STARTCHAR 66
1794 ENCODING 98
1795 SWIDTH 12000 0
1796 DWIDTH 12 0
1797 BBX 12 20 0 -1
1798 BITMAP
1799 0000
1800 7C00
1801 4200
1802 4200
1803 4100
1804 4100
1805 4100
1806 4080
1807 4080
1808 7F80
1809 4080
1810 4080
1811 4080
1812 4100
1813 4100
1814 4100
1815 4200
1816 4200
1817 4400
1818 7800
1819 ENDCHAR
1820 STARTCHAR 67
1821 ENCODING 99
1822 SWIDTH 12000 0
1823 DWIDTH 12 0
1824 BBX 12 20 0 -1
1825 BITMAP
1826 0000
1827 0300
1828 0280
1829 0280
1830 0240
1831 0220
1832 0220
1833 0210
1834 0200
1835 0200
1836 0200
1837 0200
1838 0200
1839 8200
1840 4200
1841 2200
1842 2200
1843 1200
1844 0A00
1845 0600
1846 ENDCHAR
1847 STARTCHAR 68
1848 ENCODING 100
1849 SWIDTH 12000 0
1850 DWIDTH 12 0
1851 BBX 12 20 0 -1
1852 BITMAP
1853 0000
1854 8010
1855 C030
1856 C030
1857 A050
1858 A050
1859 9090
1860 8910
1861 8910
1862 8610
1863 8610
1864 8610
1865 8910
1866 8910
1867 9090
1868 A050
1869 A050
1870 C030
1871 C030
1872 8010
1873 ENDCHAR
1874 STARTCHAR 69
1875 ENCODING 101
1876 SWIDTH 12000 0
1877 DWIDTH 12 0
1878 BBX 12 20 0 -1
1879 BITMAP
1880 0000
1881 8020
1882 C060
1883 A0A0
1884 9120
1885 8A20
1886 8420
1887 8020
1888 8020
1889 8020
1890 8020
1891 8020
1892 8020
1893 8020
1894 8020
1895 8020
1896 8020
1897 8020
1898 8020
1899 8020
1900 ENDCHAR
1901 STARTCHAR 70
1902 ENCODING 102
1903 SWIDTH 12000 0
1904 DWIDTH 12 0
1905 BBX 12 20 0 -1
1906 BITMAP
1907 0000
1908 8210
1909 8220
1910 8420
1911 8440
1912 8840
1913 8880
1914 9080
1915 9100
1916 A100
1917 A200
1918 C400
1919 C400
1920 8800
1921 8800
1922 9000
1923 9000
1924 A000
1925 A000
1926 C000
1927 ENDCHAR
1928 STARTCHAR 71
1929 ENCODING 103
1930 SWIDTH 12000 0
1931 DWIDTH 12 0
1932 BBX 12 20 0 -1
1933 BITMAP
1934 0000
1935 8020
1936 4040
1937 4040
1938 2080
1939 2080
1940 1100
1941 1100
1942 3F80
1943 4A40
1944 8420
1945 4A40
1946 3F80
1947 1100
1948 1100
1949 2080
1950 2080
1951 4040
1952 4040
1953 8020
1954 ENDCHAR
1955 STARTCHAR 72
1956 ENCODING 104
1957 SWIDTH 12000 0
1958 DWIDTH 12 0
1959 BBX 12 20 0 -1
1960 BITMAP
1961 0000
1962 C080
1963 A080
1964 A080
1965 9080
1966 8880
1967 8880
1968 8480
1969 8280
1970 8280
1971 C180
1972 A080
1973 A080
1974 9080
1975 8880
1976 8880
1977 8480
1978 8280
1979 8280
1980 8180
1981 ENDCHAR
1982 STARTCHAR 73
1983 ENCODING 105
1984 SWIDTH 12000 0
1985 DWIDTH 12 0
1986 BBX 12 20 0 -1
1987 BITMAP
1988 0000
1989 0400
1990 0400
1991 0400
1992 0400
1993 0400
1994 0400
1995 0400
1996 0400
1997 0400
1998 0400
1999 0400
2000 0400
2001 0400
2002 0400
2003 0400
2004 0400
2005 0400
2006 0400
2007 0400
2008 ENDCHAR
2009 STARTCHAR 74
2010 ENCODING 106
2011 SWIDTH 12000 0
2012 DWIDTH 12 0
2013 BBX 12 20 0 -1
2014 BITMAP
2015 0000
2016 0400
2017 0E00
2018 0E00
2019 1500
2020 1500
2021 2480
2022 2480
2023 4440
2024 4440
2025 8420
2026 4440
2027 4440
2028 2480
2029 2480
2030 1500
2031 1500
2032 0E00
2033 0E00
2034 0400
2035 ENDCHAR
2036 STARTCHAR 75
2037 ENCODING 107
2038 SWIDTH 12000 0
2039 DWIDTH 12 0
2040 BBX 12 20 0 -1
2041 BITMAP
2042 0000
2043 4000
2044 6000
2045 6000
2046 5000
2047 5000
2048 4800
2049 4800
2050 4400
2051 4400
2052 4200
2053 4200
2054 4100
2055 4100
2056 4080
2057 4080
2058 4040
2059 4040
2060 4040
2061 4040
2062 ENDCHAR
2063 STARTCHAR 76
2064 ENCODING 108
2065 SWIDTH 12000 0
2066 DWIDTH 12 0
2067 BBX 12 20 0 -1
2068 BITMAP
2069 0000
2070 0000
2071 6000
2072 5000
2073 5000
2074 4800
2075 4400
2076 4200
2077 4200
2078 4100
2079 4080
2080 4000
2081 4000
2082 4000
2083 4000
2084 4000
2085 4000
2086 4000
2087 4000
2088 4000
2089 ENDCHAR
2090 STARTCHAR 77
2091 ENCODING 109
2092 SWIDTH 12000 0
2093 DWIDTH 12 0
2094 BBX 12 20 0 -1
2095 BITMAP
2096 0000
2097 C060
2098 A0A0
2099 A0A0
2100 9120
2101 8A20
2102 8A20
2103 8420
2104 8420
2105 8A20
2106 9120
2107 9120
2108 A0A0
2109 C060
2110 C060
2111 8020
2112 8020
2113 8020
2114 8020
2115 8020
2116 ENDCHAR
2117 STARTCHAR 78
2118 ENCODING 110
2119 SWIDTH 12000 0
2120 DWIDTH 12 0
2121 BBX 12 20 0 -1
2122 BITMAP
2123 0000
2124 8400
2125 4400
2126 4400
2127 2400
2128 2400
2129 1400
2130 1400
2131 0C00
2132 0C00
2133 0400
2134 0600
2135 0600
2136 0500
2137 0500
2138 0480
2139 0480
2140 0440
2141 0440
2142 0420
2143 ENDCHAR
2144 STARTCHAR 79
2145 ENCODING 111
2146 SWIDTH 12000 0
2147 DWIDTH 12 0
2148 BBX 12 20 0 -1
2149 BITMAP
2150 0000
2151 C060
2152 A0A0
2153 9120
2154 8A20
2155 8420
2156 8020
2157 8020
2158 C040
2159 A080
2160 9100
2161 8A00
2162 8400
2163 8000
2164 8000
2165 8000
2166 8000
2167 8000
2168 8000
2169 8000
2170 ENDCHAR
2171 STARTCHAR 80
2172 ENCODING 112
2173 SWIDTH 12000 0
2174 DWIDTH 12 0
2175 BBX 12 20 0 -1
2176 BITMAP
2177 0000
2178 4000
2179 4000
2180 4000
2181 4000
2182 4000
2183 4000
2184 4000
2185 4000
2186 40C0
2187 4140
2188 4140
2189 4240
2190 4240
2191 4440
2192 4840
2193 4840
2194 5040
2195 5040
2196 6040
2197 ENDCHAR
2198 STARTCHAR 81
2199 ENCODING 113
2200 SWIDTH 12000 0
2201 DWIDTH 12 0
2202 BBX 12 20 0 -1
2203 BITMAP
2204 0000
2205 8E20
2206 5540
2207 5540
2208 2480
2209 0400
2210 0400
2211 0400
2212 0400
2213 0400
2214 0400
2215 0400
2216 0400
2217 0400
2218 0400
2219 0400
2220 0400
2221 0400
2222 0400
2223 0400
2224 ENDCHAR
2225 STARTCHAR 82
2226 ENCODING 114
2227 SWIDTH 12000 0
2228 DWIDTH 12 0
2229 BBX 12 20 0 -1
2230 BITMAP
2231 0000
2232 7800
2233 4600
2234 4100
2235 4080
2236 4080
2237 4080
2238 4080
2239 4100
2240 4600
2241 7E00
2242 4200
2243 4200
2244 4100
2245 4100
2246 4100
2247 4100
2248 4080
2249 4080
2250 4080
2251 ENDCHAR
2252 STARTCHAR 83
2253 ENCODING 115
2254 SWIDTH 12000 0
2255 DWIDTH 12 0
2256 BBX 12 20 0 -1
2257 BITMAP
2258 0000
2259 8000
2260 8000
2261 8000
2262 8000
2263 8060
2264 80A0
2265 80A0
2266 8120
2267 8220
2268 8420
2269 8420
2270 8820
2271 9020
2272 A020
2273 A020
2274 C020
2275 0020
2276 0020
2277 0020
2278 ENDCHAR
2279 STARTCHAR 84
2280 ENCODING 116
2281 SWIDTH 12000 0
2282 DWIDTH 12 0
2283 BBX 12 20 0 -1
2284 BITMAP
2285 0000
2286 0E00
2287 1500
2288 2480
2289 2480
2290 4440
2291 8420
2292 0400
2293 0400
2294 0400
2295 0400
2296 0400
2297 0400
2298 0400
2299 0400
2300 0400
2301 0400
2302 0400
2303 0400
2304 0400
2305 ENDCHAR
2306 STARTCHAR 85
2307 ENCODING 117
2308 SWIDTH 12000 0
2309 DWIDTH 12 0
2310 BBX 12 20 0 -1
2311 BITMAP
2312 0000
2313 6000
2314 5000
2315 4800
2316 4400
2317 4400
2318 4200
2319 4100
2320 4080
2321 4040
2322 4040
2323 4040
2324 4040
2325 4040
2326 4040
2327 4040
2328 4040
2329 4040
2330 4040
2331 4040
2332 ENDCHAR
2333 STARTCHAR 86
2334 ENCODING 118
2335 SWIDTH 12000 0
2336 DWIDTH 12 0
2337 BBX 12 20 0 -1
2338 BITMAP
2339 0000
2340 1F00
2341 2080
2342 2080
2343 2080
2344 1100
2345 1100
2346 0A00
2347 0A00
2348 0400
2349 0400
2350 0A00
2351 0A00
2352 1100
2353 1100
2354 2080
2355 2080
2356 4040
2357 4040
2358 8020
2359 ENDCHAR
2360 STARTCHAR 87
2361 ENCODING 119
2362 SWIDTH 12000 0
2363 DWIDTH 12 0
2364 BBX 12 20 0 -1
2365 BITMAP
2366 0000
2367 7800
2368 4600
2369 4100
2370 4100
2371 4080
2372 4080
2373 4100
2374 4100
2375 4600
2376 7800
2377 4000
2378 4000
2379 4000
2380 4000
2381 4000
2382 4000
2383 4000
2384 4000
2385 4000
2386 ENDCHAR
2387 STARTCHAR 88
2388 ENCODING 120
2389 SWIDTH 12000 0
2390 DWIDTH 12 0
2391 BBX 12 20 0 -1
2392 BITMAP
2393 0000
2394 0400
2395 0400
2396 0400
2397 0400
2398 0400
2399 0400
2400 0400
2401 0400
2402 0400
2403 0E00
2404 1500
2405 2480
2406 4440
2407 8420
2408 8420
2409 8420
2410 8420
2411 8420
2412 8420
2413 ENDCHAR
2414 STARTCHAR 89
2415 ENCODING 121
2416 SWIDTH 12000 0
2417 DWIDTH 12 0
2418 BBX 12 20 0 -1
2419 BITMAP
2420 0000
2421 FC00
2422 8600
2423 C600
2424 C500
2425 A500
2426 A480
2427 9440
2428 9440
2429 8C20
2430 8620
2431 8620
2432 8520
2433 8520
2434 84A0
2435 84A0
2436 8460
2437 8420
2438 8420
2439 8420
2440 ENDCHAR
2441 STARTCHAR 90
2442 ENCODING 122
2443 SWIDTH 12000 0
2444 DWIDTH 12 0
2445 BBX 12 20 0 -1
2446 BITMAP
2447 0000
2448 1FE0
2449 1000
2450 2000
2451 2000
2452 4000
2453 4000
2454 8000
2455 8000
2456 4000
2457 4000
2458 2000
2459 2000
2460 2000
2461 1000
2462 1000
2463 0800
2464 0800
2465 0400
2466 07E0
2467 ENDCHAR
2468 STARTCHAR 91
2469 ENCODING 123
2470 SWIDTH 12000 0
2471 DWIDTH 12 0
2472 BBX 12 20 0 -1
2473 BITMAP
2474 FBF0
2475 F1F0
2476 E0F0
2477 C070
2478 FBF0
2479 FBF0
2480 FBF0
2481 FBF0
2482 FBF0
2483 FBF0
2484 FBF0
2485 FBF0
2486 FBF0
2487 FBF0
2488 FBF0
2489 FBF0
2490 FBF0
2491 FBF0
2492 FBF0
2493 FBF0
2494 ENDCHAR
2495 STARTCHAR 92
2496 ENCODING 124
2497 SWIDTH 12000 0
2498 DWIDTH 12 0
2499 BBX 12 20 0 -1
2500 BITMAP
2501 FBF0
2502 FBF0
2503 FBF0
2504 FBF0
2505 FBF0
2506 FBF0
2507 FBF0
2508 FBF0
2509 FBF0
2510 FBF0
2511 FBF0
2512 FBF0
2513 FBF0
2514 FBF0
2515 FBF0
2516 FBF0
2517 C070
2518 E0F0
2519 F1F0
2520 FBF0
2521 ENDCHAR
2522 STARTCHAR 93
2523 ENCODING 125
2524 SWIDTH 12000 0
2525 DWIDTH 12 0
2526 BBX 12 20 0 -1
2527 BITMAP
2528 FBF0
2529 F1F0
2530 E0F0
2531 C070
2532 FBF0
2533 FBF0
2534 FBF0
2535 FBF0
2536 FBF0
2537 FBF0
2538 FBF0
2539 FBF0
2540 FBF0
2541 FBF0
2542 FBF0
2543 FBF0
2544 C070
2545 E0F0
2546 F1F0
2547 FBF0
2548 ENDCHAR
2549 STARTCHAR 94
2550 ENCODING 126
2551 SWIDTH 12000 0
2552 DWIDTH 12 0
2553 BBX 12 20 0 -1
2554 BITMAP
2555 FFF0
2556 E070
2557 C030
2558 8F10
2559 1F90
2560 3F90
2561 FF90
2562 FF10
2563 FE30
2564 FC70
2565 F1F0
2566 F3F0
2567 F3F0
2568 F3F0
2569 FFF0
2570 FFF0
2571 F3F0
2572 F3F0
2573 FFF0
2574 FFF0
2575 ENDCHAR
2576 STARTCHAR 95
2577 ENCODING 127
2578 SWIDTH 12000 0
2579 DWIDTH 12 0
2580 BBX 12 20 0 -1
2581 BITMAP
2582 0000
2583 0000
2584 0000
2585 0000
2586 0000
2587 0000
2588 0000
2589 0000
2590 0000
2591 0000
2592 0000
2593 0000
2594 0000
2595 0000
2596 0000
2597 0000
2598 0000
2599 0000
2600 0000
2601 0000
2602 ENDCHAR
2603 ENDFONT
0 /*
1 * x_blorb.c - Blorb routines
2 *
3 * This file is part of Frotz.
4 *
5 * Frotz is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * Frotz is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
18 * Or visit http://www.fsf.org/
19 *
20 */
21
22
23 #include "x_frotz.h"
24 #include "x_blorb.h"
25
26 #include <stdio.h>
27 #include <stdlib.h>
28 #include <string.h>
29
30 #include <unistd.h>
31 #include <math.h>
32
33 #ifndef NO_BLORB
34
35 extern f_setup_t f_setup;
36
37 FILE *blorb_fp;
38 bb_result_t blorb_res;
39 bb_map_t *blorb_map;
40
41 static int isblorb(FILE *);
42
43 #define UnsignedToFloat(u) (((double)((long)(u - 2147483647L - 1))) + 2147483648.0)
44
45
46 /*
47 * x_blorb_init
48 *
49 * Check if we're opening a Blorb file directly. If not, check
50 * to see if there's a separate Blorb file that looks like it goes
51 * along with this Zcode file. If we have a Blorb file one way or the
52 * other, make a Blorb map. If we opened a Blorb file directly, that
53 * means that our executable is in that file and therefore we will look
54 * for a ZCOD chunk and record its location so os_load_story() can find it.
55 * Make sure the Blorb file is opened and with the file pointer blorb_fp.
56 */
57 bb_err_t x_blorb_init(char *filename)
58 {
59 FILE *fp;
60 char *p;
61 char *mystring;
62 int len1;
63 int len2;
64
65 bb_err_t blorb_err;
66
67 if ((fp = fopen(filename, "rb")) == NULL)
68 return bb_err_Read;
69
70 /* Is this really a Blorb file?
71 * If not, maybe we're loading a naked zcode file
72 * and our resources are in a separate blorb file.
73 */
74 if (isblorb(fp)) { /* Now we know to look */
75 f_setup.exec_in_blorb = 1; /* for zcode in the blorb */
76 blorb_fp = fp;
77 } else {
78 fclose(fp);
79 len1 = strlen(filename) + strlen(EXT_BLORB);
80 len2 = strlen(filename) + strlen(EXT_BLORB3);
81 if (f_setup.blorb_file != NULL)
82 mystring = strdup(f_setup.blorb_file);
83 else {
84 mystring = malloc(MAX(len1, len2) * sizeof(char) + 1);
85 memcpy(mystring, filename, MAX(len1, len2) * sizeof(char));
86 p = strrchr(mystring, '.');
87 if (p != NULL) *p = '\0';
88 strncat(mystring, EXT_BLORB, len1);
89 }
90
91 /* Check if foo.blb is there. */
92 if ((fp = fopen(mystring, "rb")) == NULL) {
93 p = strrchr(mystring, '.');
94 if (p != NULL) *p = '\0';
95 strncat(mystring, EXT_BLORB3, len2);
96 if (!(fp = fopen(mystring, "rb")))
97 return bb_err_NoBlorb;
98 }
99 if (!isblorb(fp)) {
100 fclose(fp);
101 return bb_err_NoBlorb;
102 }
103 /* At this point we know that we're using a naked zcode file */
104 /* with resources in a separate Blorb file. */
105 blorb_fp = fp;
106 f_setup.use_blorb = 1;
107 /*
108 if (f_setup.blorb_file == NULL)
109 printf("Found Blorb file named %s.\n", mystring);
110 */
111 }
112
113 /* Create a Blorb map from this file.
114 * This will fail if the file is not a valid Blorb file.
115 * From this map, we can now pick out any resource we need.
116 */
117 blorb_err = bb_create_map(blorb_fp, &blorb_map);
118 if (blorb_err != bb_err_None)
119 return bb_err_Format;
120
121 /* Locate the EXEC chunk within the blorb file and record its
122 * location so os_load_story() can find it.
123 */
124 if (f_setup.exec_in_blorb) {
125 blorb_err = bb_load_chunk_by_type(blorb_map, bb_method_FilePos,
126 &blorb_res, bb_ID_ZCOD, 0);
127 f_setup.exec_in_blorb = 1;
128 /* printf("Found zcode chunk in Blorb file.\n"); */
129 }
130
131 return blorb_err;
132 }
133
134
135 /*
136 * isblorb
137 *
138 * Returns 1 if this file is a Blorb file, 0 if not.
139 *
140 */
141 static int isblorb(FILE *fp)
142 {
143 char mybuf[4];
144
145 if (fp == NULL)
146 return 0;
147
148 fread(mybuf, 1, 4, fp);
149 if (strncmp(mybuf, "FORM", 4))
150 return 0;
151
152 fseek(fp, 4, SEEK_CUR);
153 fread(mybuf, 1, 4, fp);
154
155 if (strncmp(mybuf, "IFRS", 4))
156 return 0;
157
158 return 1;
159 }
160
161 #endif /* NO_BLORB */
0 /*
1 * x_blorb.h
2 *
3 * Blorb related functions specific to the X11 interface.
4 *
5 */
6
7 #ifndef X_DBLORB_H
8 #define X_DBLORB_H
9
10 #ifndef NO_BLORB
11
12 #include "../blorb/blorb.h"
13 #include "../blorb/blorblow.h"
14
15
16 typedef struct sampledata_struct {
17 unsigned short channels;
18 unsigned long samples;
19 unsigned short bits;
20 double rate;
21 } sampledata_t;
22
23
24 /*
25 * The bb_result_t struct lacks a few members that would make things a
26 * bit easier. The myresource struct takes encapsulates the bb_result_t
27 * struct and adds a type member and a filepointer. I would like to
28 * convince Andrew Plotkin to make a change in the reference Blorb code
29 * to add these members.
30 *
31 */
32 typedef struct {
33 bb_result_t bbres;
34 unsigned long type;
35 FILE *fp;
36 } myresource;
37
38 /* These are used only locally */
39 /*
40 extern bb_err_t blorb_err;
41 extern bb_map_t *blorb_map;
42 extern FILE *blorb_fp;
43 */
44 extern bb_result_t blorb_res;
45
46 bb_err_t x_blorb_init(char *);
47 void x_blorb_stop(void);
48
49 #endif
50 #endif
0 /*
1 * x_frotz.h
2 *
3 * X interface, declarations
4 *
5 * Copyright (c) 1998-2000 Daniel Schepler
6 *
7 */
8
9 #ifndef X_FROTZ_H
10 #define X_FROTZ_H
11
12 #ifdef HAVE_CONFIG_H
13 #include <config.h>
14 #endif
15
16 #include "../common/frotz.h"
17 #include "x_setup.h"
18
19 #include <X11/Xlib.h>
20
21 #define DCLICKTIME 400
22
23 /* Xfrotz currently only supports a fixed sized window */
24 #define X_WIDTH 800
25 #define X_HEIGHT 600
26
27 #ifndef MAX
28 #define MAX(x,y) ((x)>(y)) ? (x) : (y)
29 #endif
30 /* X connection */
31 extern Display *dpy;
32
33 /* Window to draw into */
34 extern Window main_window;
35
36 extern char *x_class, *x_name;
37
38 /* The font resource for displaying text */
39 extern const XFontStruct *current_font_info;
40 extern GC current_gc, normal_gc, reversed_gc, bw_gc, cursor_gc;
41 extern char *font_names[9];
42
43 extern int curr_x, curr_y;
44
45 extern unsigned long bg_pixel, fg_pixel;
46 extern unsigned long def_bg_pixel, def_fg_pixel;
47
48 const XFontStruct * get_font(int font, int style);
49
50 void x_init_colour(char *bg_name, char *fg_name);
51
52 #endif
0 /*
1 * x_info.h
2 *
3 * Usage info
4 *
5 */
6
7 #ifndef X_INFO_H
8 #define X_INFO_H
9
10 #define INFORMATION "\
11 -aa watch attribute setting \t -rm # right margin\n\
12 -at watch attribute testing \t -rs # random number seed value\n\
13 -bg <colorname> background color\t -sc # transcript width\n\
14 -c # context lines \t -t set Tandy bit\n\
15 -fg <colorname> foreground color\t -u # slots for multiple undo\n\
16 -fn <fontname> set font name \t -v show version information\n\
17 -i ignore fatal errors \t -w # text width\n\
18 -lm # left margin \t -x expand abbreviations g/x/z\n\
19 -ol watch object movement \t -xrm <resources> Set X11 resources\n\
20 -om watch object locating \t -zs # error checking (see below)\n\
21 -P alter piracy opcode\n"
22
23 #define INFO2 "\
24 Error checking: 0 none, 1 first only (default), 2 all, 3 exit after any error.\n\
25 For more options and explanations, please read the manual page.\n"
26
27 #endif
0 /*
1 * x_init.c
2 *
3 * X interface, initialisation
4 *
5 * This file is part of Frotz.
6 *
7 * Frotz is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * Frotz is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 * Or visit http://www.fsf.org/
21 *
22 * Copyright (c) 1998-2000 Daniel Schepler
23 *
24 */
25
26 #include "x_frotz.h"
27 #include "x_info.h"
28 #include "x_blorb.h"
29
30 #include <stdarg.h>
31 #include <stdio.h>
32 #include <stdlib.h>
33 #include <strings.h>
34 #include <time.h>
35 #include <libgen.h>
36 #include <X11/Intrinsic.h>
37
38 x_setup_t x_setup;
39
40 /* Variables to save from os_process_arguments for use in os_init_screen */
41 static int saved_argc;
42 static char **saved_argv;
43 static char *user_bg, *user_fg;
44 static int user_tandy_bit;
45 static int user_random_seed = -1;
46 char *x_class;
47 char *x_name;
48
49
50 static void print_c_string(const char *s)
51 {
52 zchar c;
53
54 while ((c = *s++) != 0)
55 os_display_char(c);
56 } /* print_c_string */
57
58
59 /*
60 * os_fatal
61 *
62 * Display error message and exit program.
63 *
64 */
65 void os_fatal(const char *s, ...)
66 {
67 va_list m;
68
69 fprintf(stderr, "\nFatal Error: ");
70 va_start(m, s);
71 vfprintf(stderr, s, m);
72 print_c_string(s);
73 va_end(m);
74 fprintf(stderr, "\n");
75
76 if (f_setup.ignore_errors) {
77 os_display_string((zchar *) "Continuing anyway...");
78 new_line();
79 new_line();
80 }
81
82
83
84 os_quit(EXIT_FAILURE);
85 } /* os_fatal */
86
87
88 /*
89 * os_process_arguments
90 *
91 * Handle command line switches. Some variables may be set to activate
92 * special features of Frotz:
93 *
94 * option_attribute_assignment
95 * option_attribute_testing
96 * option_context_lines
97 * option_object_locating
98 * option_object_movement
99 * option_left_margin
100 * option_right_margin
101 * option_ignore_errors
102 * option_piracy
103 * option_undo_slots
104 * option_expand_abbreviations
105 * option_script_cols
106 *
107 * The global pointer "story_name" is set to the story file name.
108 *
109 */
110 static void parse_boolean(char *value, void *parsed)
111 {
112 int *parsed_var = (int *)parsed;
113
114 if (!strcasecmp(value, "on") || !strcasecmp(value, "true") ||
115 !strcasecmp(value, "yes"))
116 *parsed_var = 1;
117 else if (!strcasecmp(value, "off") || !strcasecmp(value, "false") ||
118 !strcasecmp(value, "no"))
119 *parsed_var = 0;
120 else
121 fprintf(stderr, "Warning: invalid boolean resource `%s'\n",
122 value);
123 }
124
125
126 static void parse_int(char *value, void *parsed)
127 {
128 int *parsed_var = (int *)parsed;
129 char *parse_end;
130
131 int result = (int)strtol(value, &parse_end, 10);
132 if (*parse_end || !(*value))
133 fprintf(stderr, "Warning: invalid integer resource `%s'\n",
134 value);
135 else
136 *parsed_var = result;
137 }
138
139
140 static void parse_zstrict(char *value, void *parsed)
141 {
142 int *parsed_var = (int *)parsed;
143
144 if (!strcasecmp(value, "on") || !strcasecmp(value, "true") ||
145 !strcasecmp(value, "yes") || !strcasecmp(value, "always"))
146 *parsed_var = ERR_REPORT_ALWAYS;
147 else if (!strcasecmp(value, "off") || !strcasecmp(value, "false") ||
148 !strcasecmp(value, "no") || !strcasecmp(value, "never"))
149 *parsed_var = ERR_REPORT_NEVER;
150 else if (!strcasecmp(value, "once"))
151 *parsed_var = ERR_REPORT_ONCE;
152 else if (!strcasecmp(value, "fatal"))
153 *parsed_var = ERR_REPORT_FATAL;
154 else {
155 char *parse_end;
156 int result = (int)strtol(value, &parse_end, 10);
157
158 if (*parse_end || !(*value) || result < ERR_REPORT_NEVER ||
159 result > ERR_REPORT_FATAL)
160 fprintf(stderr,
161 "Warning: invalid zstrict level resource `%s'\n",
162 value);
163 else
164 *parsed_var = result;
165 }
166 }
167
168
169 static void parse_string(char *value, void *parsed)
170 {
171 *((char **)parsed) = value;
172 }
173
174
175 void os_process_arguments(int argc, char *argv[])
176 {
177 static bool show_version;
178 static XrmOptionDescRec options[] = {
179 {"-aa", ".watchAttrAssign", XrmoptionNoArg, (void *)"true"},
180 {"+aa", ".watchAttrAssign", XrmoptionNoArg, (void *)"false"},
181 {"-at", ".watchAttrTest", XrmoptionNoArg, (void *)"true"},
182 {"+at", ".watchAttrTest", XrmoptionNoArg, (void *)"false"},
183 {"-c", ".contextLines", XrmoptionSepArg, (void *)NULL},
184 {"-ol", ".watchObjLocating", XrmoptionNoArg, (void *)"true"},
185 {"+ol", ".watchObjLocating", XrmoptionNoArg, (void *)"false"},
186 {"-om", ".watchObjMovement", XrmoptionNoArg, (void *)"true"},
187 {"+om", ".watchObjMovement", XrmoptionNoArg, (void *)"false"},
188 {"-lm", ".leftMargin", XrmoptionSepArg, (void *)NULL},
189 {"-rm", ".rightMargin", XrmoptionSepArg, (void *)NULL},
190 {"-e", ".ignoreErrors", XrmoptionNoArg, (void *)"true"},
191 {"+e", ".ignoreErrors", XrmoptionNoArg, (void *)"false"},
192 {"-p", ".piracy", XrmoptionNoArg, (void *)"true"},
193 {"+p", ".piracy", XrmoptionNoArg, (void *)"false"},
194 {"-t", ".tandy", XrmoptionNoArg, (void *)"true"},
195 {"+t", ".tandy", XrmoptionNoArg, (void *)"false"},
196 {"-u", ".undoSlots", XrmoptionSepArg, (void *)NULL},
197 {"-v", ".showVersion", XrmoptionNoArg, (void *)"true"},
198 {"-x", ".expandAbbrevs", XrmoptionNoArg, (void *)"true"},
199 {"+x", ".expandAbbrevs", XrmoptionNoArg, (void *)"false"},
200 {"-sc", ".scriptColumns", XrmoptionSepArg, (void *)NULL},
201 {"-rs", ".randomSeed", XrmoptionSepArg, (void *)NULL},
202 {"-zs", ".zStrict", XrmoptionSepArg, (void *)NULL},
203 /* I can never remember whether it's zstrict or strictz */
204 {"-sz", ".zStrict", XrmoptionSepArg, (void *)NULL},
205 {"-fn-b", ".fontB", XrmoptionSepArg, (void *)NULL},
206 {"-fn-i", ".fontI", XrmoptionSepArg, (void *)NULL},
207 {"-fn-bi", ".fontBI", XrmoptionSepArg, (void *)NULL},
208 {"-fn-f", ".fontF", XrmoptionSepArg, (void *)NULL},
209 {"-fn-fb", ".fontFB", XrmoptionSepArg, (void *)NULL},
210 {"-fn-fi", ".fontFI", XrmoptionSepArg, (void *)NULL},
211 {"-fn-fbi", ".fontFBI", XrmoptionSepArg, (void *)NULL},
212 {"-fn-z", ".fontZ", XrmoptionSepArg, (void *)NULL}
213 };
214 static struct {
215 char *class;
216 char *name;
217 void (*parser)(char *, void *);
218 void *ptr;
219 } vars[] = {
220 {".WatchAttribute", ".watchAttrAssign", parse_boolean,
221 &f_setup.attribute_assignment},
222 {".WatchAttribute", ".watchAttrTest", parse_boolean,
223 &f_setup.attribute_testing},
224 {".ContextLines", ".contextLines", parse_int,
225 &f_setup.context_lines},
226 {".WatchObject", ".watchObjLocating", parse_boolean,
227 &f_setup.object_locating},
228 {".WatchObject", ".watchObjMovement", parse_boolean,
229 &f_setup.object_movement},
230 {".Margin", ".leftMargin", parse_int,
231 &f_setup.left_margin},
232 {".Margin", ".rightMargin", parse_int,
233 &f_setup.right_margin},
234 {".IgnoreErrors", ".ignoreErrors", parse_boolean,
235 &f_setup.ignore_errors},
236 {".Piracy", ".piracy", parse_boolean,
237 &f_setup.piracy},
238 {".Tandy", ".tandy", parse_boolean,
239 &x_setup.tandy_bit},
240 {".UndoSlots", ".undoSlots", parse_int,
241 &f_setup.undo_slots},
242 {".ShowVersion", ".showVersion", parse_boolean,
243 &show_version},
244 {".ExpandAbbrevs", ".expandAbbrevs", parse_boolean,
245 &f_setup.expand_abbreviations},
246 {".ScriptColumns", ".scriptColumns", parse_int,
247 &f_setup.script_cols},
248 {".RandomSeed", ".randomSeed", parse_int,
249 &x_setup.random_seed},
250 {".ZStrict", ".zStrict", parse_zstrict,
251 &f_setup.err_report_mode},
252 {".Background", ".background", parse_string,
253 &user_bg},
254 {".Foreground", ".foreground", parse_string,
255 &user_fg},
256 {".Font", ".font", parse_string,
257 &font_names[0]},
258 {".Font", ".fontB", parse_string,
259 &font_names[1]},
260 {".Font", ".fontI", parse_string,
261 &font_names[2]},
262 {".Font", ".fontBI", parse_string,
263 &font_names[3]},
264 {".Font", ".fontF", parse_string,
265 &font_names[4]},
266 {".Font", ".fontFB", parse_string,
267 &font_names[5]},
268 {".Font", ".fontFI", parse_string,
269 &font_names[6]},
270 {".Font", ".fontFBI", parse_string,
271 &font_names[7]},
272 {".Font", ".fontZ", parse_string,
273 &font_names[8]}
274 };
275 XtAppContext app_context;
276 char *str_type_return;
277 char *class_buf, *name_buf, *class_append, *name_append;
278 char *p;
279 int i;
280 XrmValue value;
281
282 saved_argv = malloc(sizeof(char *) * argc);
283 memcpy(saved_argv, argv, sizeof(char *) * argc);
284 saved_argc = argc;
285 app_context = XtCreateApplicationContext();
286 dpy = XtOpenDisplay(app_context, NULL, NULL, "XFrotz",
287 options, XtNumber(options), &argc, argv);
288 if (dpy == NULL)
289 os_fatal("Could not open display.");
290
291 XtGetApplicationNameAndClass(dpy, &x_name, &x_class);
292
293 class_buf = malloc(strlen(x_class) + 20);
294 strcpy(class_buf, x_class);
295 class_append = strchr(class_buf, 0);
296 name_buf = malloc(strlen(x_name) + 20);
297 strcpy(name_buf, x_name);
298 name_append = strchr(name_buf, 0);
299
300 for (i = 0; i < XtNumber(vars); i++) {
301 strcpy(class_append, vars[i].class);
302 strcpy(name_append, vars[i].name);
303 if (XrmGetResource(XtDatabase(dpy), name_buf, class_buf,
304 &str_type_return, &value))
305 vars[i].parser((char *)value.addr, vars[i].ptr);
306 }
307
308 if (show_version) {
309 printf("FROTZ V%s - X11 interface.\n", VERSION);
310 printf("Commit date: %s\n", GIT_DATE);
311 printf("Git commit: %s\n", GIT_HASH);
312 printf("Notes: %s\n", RELEASE_NOTES);
313 printf(" Frotz was originally written by Stefan Jokisch.\n");
314 printf(" It complies with standard 1.0 of Graham Nelson's specification.\n");
315 printf(" The X11 interface code was done by Daniel Schepler,\n");
316 printf(" It is distributed under the GNU General Public License version 2 or\n");
317 printf(" (at your option) any later version.\n");
318 printf(" This software is offered as-is with no warranty or liability.\n");
319 printf(" The core and X11 port are maintained by David Griffith.\n");
320 printf(" Frotz's homepage is https://661.org/proj/if/frotz.\n\n");
321 os_quit(EXIT_SUCCESS);
322 }
323
324 if (argc < 2) {
325 printf("FROTZ V%s - X11 interface.\n", VERSION);
326 puts(INFORMATION);
327 puts(INFO2);
328 os_quit(EXIT_SUCCESS);
329 }
330
331 f_setup.story_file = strdup(argv[1]);
332 f_setup.story_name = strdup(basename(argv[1]));
333
334 if (argc > 2)
335 f_setup.blorb_file = strdup(argv[2]);
336
337 /* Now strip off the extension */
338 p = strrchr(f_setup.story_name, '.');
339 if (p != NULL)
340 *p = '\0'; /* extension removed */
341
342 /* Create nice default file names */
343 f_setup.script_name =
344 malloc((strlen(f_setup.story_name) +
345 strlen(EXT_SCRIPT)) * sizeof(char) + 1);
346 memcpy(f_setup.script_name, f_setup.story_name,
347 (strlen(f_setup.story_name) +
348 strlen(EXT_SCRIPT)) * sizeof(char));
349 strncat(f_setup.script_name, EXT_SCRIPT, strlen(EXT_SCRIPT) + 1);
350
351 f_setup.command_name =
352 malloc((strlen(f_setup.story_name) +
353 strlen(EXT_COMMAND)) * sizeof(char) + 1);
354 memcpy(f_setup.command_name, f_setup.story_name,
355 (strlen(f_setup.story_name) +
356 strlen(EXT_COMMAND)) * sizeof(char));
357 strncat(f_setup.command_name, EXT_COMMAND, strlen(EXT_COMMAND) + 1);
358
359 if (!f_setup.restore_mode) {
360 f_setup.save_name =
361 malloc((strlen(f_setup.story_name) +
362 strlen(EXT_SAVE)) * sizeof(char) + 1);
363 memcpy(f_setup.save_name, f_setup.story_name,
364 (strlen(f_setup.story_name) +
365 strlen(EXT_SAVE)) * sizeof(char));
366 strncat(f_setup.save_name, EXT_SAVE, strlen(EXT_SAVE) + 1);
367 } else { /*Set our auto load save as the name_save */
368 f_setup.save_name =
369 malloc((strlen(f_setup.tmp_save_name) +
370 strlen(EXT_SAVE)) * sizeof(char) + 1);
371 memcpy(f_setup.save_name, f_setup.tmp_save_name,
372 (strlen(f_setup.tmp_save_name) +
373 strlen(EXT_SAVE)) * sizeof(char));
374 free(f_setup.tmp_save_name);
375 }
376
377 f_setup.aux_name =
378 malloc((strlen(f_setup.story_name) +
379 strlen(EXT_AUX)) * sizeof(char) + 1);
380 memcpy(f_setup.aux_name, f_setup.story_name,
381 (strlen(f_setup.story_name) + strlen(EXT_AUX)) * sizeof(char));
382 strncat(f_setup.aux_name, EXT_AUX, strlen(EXT_AUX) + 1);
383
384 } /* os_process_arguments */
385
386
387 /*
388 * os_init_screen
389 *
390 * Initialise the IO interface. Prepare the screen and other devices
391 * (mouse, sound board). Set various OS depending story file header
392 * entries:
393 *
394 * z_header.config (aka flags 1)
395 * z_header.flags (aka flags 2)
396 * z_header.screen_cols (aka screen width in characters)
397 * z_header.screen_rows (aka screen height in lines)
398 * z_header.screen_width
399 * z_header.screen_height
400 * z_header.font_height (defaults to 1)
401 * z_header.font_width (defaults to 1)
402 * z_header.default_foreground
403 * z_header.default_background
404 * z_header.interpreter_number
405 * z_header.interpreter_version
406 *
407 * Finally, set reserve_mem to the amount of memory (in bytes) that
408 * should not be used for multiple undo and reserved for later use.
409 *
410 * (Unix has a non brain-damaged memory model which dosen't require such
411 * ugly hacks, neener neener neener. --GH :)
412 *
413 */
414 Display *dpy;
415 Window main_window = 0;
416 const XFontStruct *current_font_info;
417 GC normal_gc, reversed_gc, bw_gc, cursor_gc, current_gc;
418 Pixmap bgpm;
419
420 void os_init_screen(void)
421 {
422 XSetWindowAttributes window_attrs;
423 XSizeHints *size_hints;
424 XWMHints *wm_hints;
425 XClassHint *class_hint;
426 const char *story_basename;
427 char *window_title;
428 int font_width, font_height;
429 XGCValues gc_setup;
430
431 /* First, configuration parameters get set up */
432 if (z_header.version == V3 && user_tandy_bit != 0)
433 z_header.config |= CONFIG_TANDY;
434 if (z_header.version == V3)
435 z_header.config |= CONFIG_SPLITSCREEN | CONFIG_PROPORTIONAL;
436 if (z_header.version >= V4)
437 z_header.config |=
438 CONFIG_BOLDFACE | CONFIG_EMPHASIS | CONFIG_FIXED;
439 if (z_header.version >= V5) {
440 z_header.flags |=
441 GRAPHICS_FLAG | UNDO_FLAG | MOUSE_FLAG | COLOUR_FLAG;
442 #ifdef NO_SOUND
443 z_header.flags &= ~SOUND_FLAG;
444 #else
445 z_header.flags |= SOUND_FLAG;
446 #endif
447 }
448 if (z_header.version >= V6) {
449 z_header.config |= CONFIG_PICTURES;
450 z_header.flags &= ~MENU_FLAG;
451 }
452
453 if (z_header.version >= V5 && (z_header.flags & UNDO_FLAG)
454 && f_setup.undo_slots == 0)
455 z_header.flags &= ~UNDO_FLAG;
456
457 z_header.interpreter_number = INTERP_DEC_20;
458 z_header.interpreter_version = 'F';
459
460 x_init_colour(user_bg, user_fg);
461
462 window_attrs.background_pixel = def_bg_pixel;
463 window_attrs.backing_store = Always /* NotUseful */ ;
464 window_attrs.save_under = FALSE;
465 window_attrs.event_mask = ExposureMask | KeyPressMask | ButtonPressMask | StructureNotifyMask;;
466 window_attrs.override_redirect = FALSE;
467 main_window = XCreateWindow(dpy, DefaultRootWindow(dpy),
468 0, 0, X_WIDTH, X_HEIGHT, 0, CopyFromParent,
469 InputOutput, CopyFromParent,
470 CWBackPixel | CWBackingStore |
471 CWOverrideRedirect | CWSaveUnder |
472 CWEventMask, &window_attrs);
473
474 size_hints = XAllocSizeHints();
475 size_hints->min_width = size_hints->max_width = size_hints->base_width =
476 X_WIDTH;
477 size_hints->min_height = size_hints->max_height =
478 size_hints->base_height = X_HEIGHT;
479 size_hints->flags = PMinSize | PMaxSize | PBaseSize;
480
481 wm_hints = XAllocWMHints();
482 wm_hints->input = TRUE;
483 wm_hints->initial_state = NormalState;
484 wm_hints->flags = InputHint | StateHint;
485
486 class_hint = XAllocClassHint();
487 class_hint->res_name = x_name;
488 class_hint->res_class = x_class;
489
490 /* printf("%s\n\n", f_setup.story_name); */
491
492 story_basename = strrchr(f_setup.story_name, '/');
493 if (story_basename == NULL)
494 story_basename = f_setup.story_name;
495 else
496 story_basename++;
497 window_title = malloc(strlen(story_basename) + 14);
498 sprintf(window_title, "XFrotz (V%d): %s", z_header.version,
499 story_basename);
500
501 XmbSetWMProperties(dpy, main_window, window_title, story_basename,
502 saved_argv, saved_argc, size_hints, wm_hints,
503 class_hint);
504
505 XMapWindow(dpy, main_window);
506 free(window_title);
507
508 current_font_info = get_font(TEXT_FONT, 0);
509 if (!current_font_info)
510 os_fatal("Could not open default font");
511
512 z_header.screen_width = X_WIDTH;
513 z_header.screen_height = X_HEIGHT;
514 os_font_data(FIXED_WIDTH_FONT, &font_height, &font_width);
515 z_header.font_height = font_height;
516 z_header.font_width = font_width;
517 z_header.screen_cols = X_WIDTH / z_header.font_width;
518 z_header.screen_rows = X_HEIGHT / z_header.font_height;
519
520 fg_pixel = def_fg_pixel;
521 bg_pixel = def_bg_pixel;
522
523 gc_setup.function = GXcopy;
524 gc_setup.foreground = fg_pixel;
525 gc_setup.background = bg_pixel;
526 gc_setup.fill_style = FillSolid;
527 gc_setup.font = current_font_info->fid;
528 normal_gc = XCreateGC(dpy, main_window,
529 GCFunction | GCForeground | GCBackground |
530 GCFillStyle | GCFont, &gc_setup);
531 gc_setup.foreground = bg_pixel;
532 gc_setup.background = fg_pixel;
533 reversed_gc = XCreateGC(dpy, main_window,
534 GCFunction | GCForeground | GCBackground |
535 GCFillStyle | GCFont, &gc_setup);
536 gc_setup.foreground = ~0UL;
537 gc_setup.background = 0UL;
538 bw_gc = XCreateGC(dpy, main_window,
539 GCFunction | GCForeground | GCBackground |
540 GCFillStyle | GCFont, &gc_setup);
541 gc_setup.background = 0UL;
542 gc_setup.foreground = bg_pixel ^ fg_pixel;
543 gc_setup.function = GXxor;
544 cursor_gc = XCreateGC(dpy, main_window,
545 GCFunction | GCForeground | GCBackground |
546 GCFillStyle, &gc_setup);
547
548 for(;;) {
549 XEvent e;
550 XNextEvent(dpy, &e);
551 if (e.type == MapNotify)
552 break;
553 }
554 bgpm = XCreatePixmap(dpy, main_window, X_WIDTH, X_HEIGHT, DefaultDepth(dpy,DefaultScreen(dpy)));
555 XSetWindowBackgroundPixmap(dpy, main_window, bgpm);
556
557 } /* os_init_screen */
558
559
560 /*
561 * os_reset_screen
562 *
563 * Reset the screen before the program stops.
564 *
565 */
566 void os_reset_screen(void)
567 {
568 os_set_text_style(0);
569 print_string("[Hit any key to exit.]");
570 flush_buffer();
571 os_read_key(0, FALSE);
572 } /* os_reset_screen */
573
574
575 /*
576 * os_quit
577 *
578 * Immediately and cleanly exit, passing along exit status.
579 *
580 */
581 void os_quit(int status)
582 {
583 exit(status);
584 } /* os_quit */
585
586
587 /*
588 * os_restart_game
589 *
590 * This routine allows the interface to interfere with the process of
591 * restarting a game at various stages:
592 *
593 * RESTART_BEGIN - restart has just begun
594 * RESTART_WPROP_SET - window properties have been initialised
595 * RESTART_END - restart is complete
596 *
597 */
598 void os_restart_game(int stage)
599 {
600 /* Show Beyond Zork's title screen */
601 if ((stage == RESTART_END) && (story_id == BEYOND_ZORK)) {
602 int w, h;
603 if (os_picture_data(1, &h, &w)) {
604 os_draw_picture(1, 1, 1);
605 os_read_key(0, 0);
606 }
607 }
608 }
609
610
611 /*
612 * os_random_seed
613 *
614 * Return an appropriate random seed value in the range from 0 to
615 * 32767, possibly by using the current system time.
616 *
617 */
618 int os_random_seed(void)
619 {
620 if (user_random_seed == -1)
621 return time(0) & 0x7fff;
622 else
623 return user_random_seed;
624 } /* os_random_seed */
625
626
627 void os_init_setup(void)
628 {
629 return;
630 }
631
632
633 /*
634 * os_load_story
635 *
636 * This is different from os_path_open() because we need to see if the
637 * story file is actually a chunk inside a blorb file. Right now we're
638 * looking only at the exact path we're given on the command line.
639 *
640 */
641
642 FILE *os_load_story(void)
643 {
644 FILE *fp;
645
646 #ifndef NO_BLORB
647 switch (x_blorb_init(f_setup.story_file)) {
648 case bb_err_NoBlorb:
649 /* printf("No blorb file found.\n\n"); */
650 break;
651 case bb_err_Format:
652 printf("Blorb file loaded, but unable to build map.\n\n");
653 break;
654 case bb_err_NotFound:
655 printf("Blorb file loaded, but lacks ZCOD executable chunk.\n\n");
656 break;
657 case bb_err_None:
658 /* printf("No blorb errors.\n\n"); */
659 break;
660 }
661
662 fp = fopen(f_setup.story_file, "rb");
663
664 /* Is this a Blorb file containing Zcode? */
665 if (f_setup.exec_in_blorb)
666 fseek(fp, blorb_res.data.startpos, SEEK_SET);
667 #else
668
669 fp = fopen(f_setup.story_file, "rb");
670 #endif
671 return fp;
672 }
673
674
675 int os_storyfile_seek(FILE * fp, long offset, int whence)
676 {
677 #ifndef NO_BLORB
678 /* Is this a Blorb file containing Zcode? */
679 if (f_setup.exec_in_blorb) {
680 switch (whence) {
681 case SEEK_END:
682 return fseek(fp, blorb_res.data.startpos + blorb_res.length + offset, SEEK_SET);
683 break;
684 case SEEK_CUR:
685 return fseek(fp, offset, SEEK_CUR);
686 break;
687 case SEEK_SET:
688 /* SEEK_SET falls through to default */
689 default:
690 return fseek(fp, blorb_res.data.startpos + offset, SEEK_SET);
691 break;
692 }
693 } else
694 return fseek(fp, offset, whence);
695 #else
696 return fseek(fp, offset, whence);
697 #endif
698 }
699
700
701 int os_storyfile_tell(FILE * fp)
702 {
703 #ifndef NO_BLORB
704 /* Is this a Blorb file containing Zcode? */
705 if (f_setup.exec_in_blorb)
706 return ftell(fp) - blorb_res.data.startpos;
707 else
708 return ftell(fp);
709 #else
710 return ftell(fp);
711 #endif
712 }
0 /*
1 * x_input.c
2 *
3 * X interface, input functions
4 *
5 * This file is part of Frotz.
6 *
7 * Frotz is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * Frotz is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 * Or visit http://www.fsf.org/
21 *
22 * Copyright (c) 1998-2000 Daniel Schepler
23 *
24 */
25
26 #include "x_frotz.h"
27 #include <X11/Xutil.h>
28 #define XK_MISCELLANY
29 #include <X11/keysymdef.h>
30 #undef XK_MISCELLANY
31 #include <stdio.h>
32 #include <string.h>
33 #include <ctype.h>
34
35 extern bool is_terminator(zchar key);
36 extern void x_del_char(zchar c);
37 extern Pixmap bgpm;
38
39
40 /*
41 * os_read_line
42 *
43 * Read a line of input from the keyboard into a buffer. The buffer
44 * may already be primed with some text. In this case, the "initial"
45 * text is already displayed on the screen. After the input action
46 * is complete, the function returns with the terminating key value.
47 * The length of the input should not exceed "max" characters plus
48 * an extra 0 terminator.
49 *
50 * Terminating keys are the return key (13) and all function keys
51 * (see the Specification of the Z-machine) which are accepted by
52 * the is_terminator function. Mouse clicks behave like function
53 * keys except that the mouse position is stored in global variables
54 * "mouse_x" and "mouse_y" (top left coordinates are (1,1)).
55 *
56 * Furthermore, Frotz introduces some special terminating keys:
57 *
58 * ZC_HKEY_KEY_PLAYBACK (Alt-P)
59 * ZC_HKEY_RECORD (Alt-R)
60 * ZC_HKEY_SEED (Alt-S)
61 * ZC_HKEY_UNDO (Alt-U)
62 * ZC_HKEY_RESTART (Alt-N, "new game")
63 * ZC_HKEY_QUIT (Alt-X, "exit game")
64 * ZC_HKEY_DEBUGGING (Alt-D)
65 * ZC_HKEY_HELP (Alt-H)
66 *
67 * If the timeout argument is not zero, the input gets interrupted
68 * after timeout/10 seconds (and the return value is 0).
69 *
70 * The complete input line including the cursor must fit in "width"
71 * screen units.
72 *
73 * The function may be called once again to continue after timeouts,
74 * misplaced mouse clicks or hot keys. In this case the "continued"
75 * flag will be set. This information can be useful if the interface
76 * implements input line history.
77 *
78 * The screen is not scrolled after the return key was pressed. The
79 * cursor is at the end of the input line when the function returns.
80 *
81 * Since Inform 2.2 the helper function "completion" can be called
82 * to implement word completion (similar to tcsh under Unix).
83 *
84 */
85 zchar os_read_line(int max, zchar * buf, int timeout, int width, int continued)
86 {
87 zchar c;
88 int index;
89
90 index = 0;
91 while (buf[index] != 0)
92 index++;
93 for (;;) {
94 c = os_read_key(timeout, TRUE);
95 if (is_terminator(c))
96 return c;
97 if (c == ZC_BACKSPACE) {
98 if (index == 0)
99 os_beep(1);
100 else {
101 index--;
102 x_del_char(buf[index]);
103 buf[index] = 0;
104 }
105 } else if (index == max)
106 os_beep(1);
107 else {
108 os_display_char(c);
109 buf[index++] = c;
110 buf[index] = 0;
111 }
112 }
113 } /* os_read_line */
114
115
116 /*
117 * os_read_key
118 *
119 * Read a single character from the keyboard (or a mouse click) and
120 * return it. Input aborts after timeout/10 seconds.
121 *
122 */
123 zchar os_read_key(int timeout, int cursor)
124 {
125 XEvent ev;
126 char result[2];
127 int size;
128 KeySym symbol;
129 int text_height;
130 static Time lastclicktime=0;
131
132 text_height = current_font_info->ascent + current_font_info->descent;
133 if (cursor)
134 XFillRectangle(dpy, main_window, cursor_gc,
135 curr_x, curr_y, 2, text_height);
136 XCopyArea(dpy, main_window, bgpm, current_gc, 0, 0, X_WIDTH, X_HEIGHT, 0, 0);
137 for (;;) {
138 XNextEvent(dpy, &ev);
139 if (ev.type == KeyPress) {
140 XKeyEvent *key_ev = (XKeyEvent *) & ev;
141
142 if (cursor)
143 XFillRectangle(dpy, main_window, cursor_gc,
144 curr_x, curr_y, 2, text_height);
145 size = XLookupString(key_ev, result, sizeof result,
146 &symbol, NULL);
147 if (size == 1) {
148 if (key_ev->state & Mod1Mask)
149 switch (result[0]) {
150 case 'r':
151 return ZC_HKEY_RECORD;
152 case 'p':
153 return ZC_HKEY_PLAYBACK;
154 case 's':
155 return ZC_HKEY_SEED;
156 case 'u':
157 return ZC_HKEY_UNDO;
158 case 'n':
159 return ZC_HKEY_RESTART;
160 case 'x':
161 return ZC_HKEY_QUIT;
162 case 'd':
163 return ZC_HKEY_DEBUG;
164 case 'h':
165 return ZC_HKEY_HELP;
166 default:
167 os_beep(1);
168 } else
169 return result[0] == 10 ? 13 : result[0];
170 } else {
171 switch (symbol) {
172 case XK_Left:
173 case XK_KP_Left:
174 return ZC_ARROW_LEFT;
175 case XK_Up:
176 case XK_KP_Up:
177 return ZC_ARROW_UP;
178 case XK_Right:
179 case XK_KP_Right:
180 return ZC_ARROW_RIGHT;
181 case XK_Down:
182 case XK_KP_Down:
183 return ZC_ARROW_DOWN;
184 default:
185 if (symbol >= XK_F1 && symbol <= XK_F12)
186 return (ZC_FKEY_MIN - XK_F1) +
187 symbol;
188 }
189 }
190 if (cursor)
191 XFillRectangle(dpy, main_window, cursor_gc,
192 curr_x, curr_y, 2, text_height);
193 } else if (ev.type == ButtonPress) {
194 XButtonEvent *button_ev = (XButtonEvent *) & ev;
195
196 if (cursor)
197 XFillRectangle(dpy, main_window, cursor_gc,
198 curr_x, curr_y, 2, text_height);
199 mouse_x = button_ev->x + 1;
200 mouse_y = button_ev->y + 1;
201
202 if (button_ev->time - lastclicktime < DCLICKTIME)
203 return ZC_DOUBLE_CLICK;
204
205 lastclicktime = button_ev->time;
206 return ZC_SINGLE_CLICK;
207 }
208 }
209 } /* os_read_key */
210
211
212 /*
213 * os_read_file_name
214 *
215 * Return the name of a file. Flag can be one of:
216 *
217 * FILE_SAVE - Save game file
218 * FILE_RESTORE - Restore game file
219 * FILE_SCRIPT - Transscript file
220 * FILE_RECORD - Command file for recording
221 * FILE_PLAYBACK - Command file for playback
222 * FILE_SAVE_AUX - Save auxilary ("preferred settings") file
223 * FILE_LOAD_AUX - Load auxilary ("preferred settings") file
224 *
225 * The length of the file name is limited by MAX_FILE_NAME. Ideally
226 * an interpreter should open a file requester to ask for the file
227 * name. If it is unable to do that then this function should call
228 * print_string and read_string to ask for a file name.
229 *
230 * Return value is NULL if there was a problem.
231 *
232 */
233 extern void read_string(int, zchar *);
234
235 char *os_read_file_name(const char *default_name, int flag)
236 {
237 FILE *fp;
238 int saved_replay = istream_replay;
239 int saved_record = ostream_record;
240 char file_name[FILENAME_MAX + 1];
241 zchar answer[4];
242
243 /* Turn off playback and recording temporarily */
244 istream_replay = 0;
245 ostream_record = 0;
246
247 print_string("Enter a file name.\nDefault is \"");
248 print_string(default_name);
249 print_string("\": ");
250
251 read_string(MAX_FILE_NAME, (zchar *) file_name);
252
253 /* Use the default name if nothing was typed */
254 if (file_name[0] == 0)
255 strcpy(file_name, default_name);
256
257 /* Warn if overwriting a file. */
258 if ((flag == FILE_SAVE || flag == FILE_SAVE_AUX ||
259 flag == FILE_RECORD || flag == FILE_SCRIPT)
260 && ((fp = fopen(file_name, "rb")) != NULL)) {
261 fclose (fp);
262 print_string("Overwrite existing file? ");
263 read_string(4, answer);
264 if (tolower(answer[0] != 'y'))
265 return NULL;
266 }
267
268 /* Restore state of playback and recording */
269 istream_replay = saved_replay;
270 ostream_record = saved_record;
271
272 return strdup(file_name);
273 } /* os_read_file_name */
274
275
276 void os_tick(void)
277 {
278 }
0 -aa watch attribute setting
1 -at watch attribute testing
2 -bg <colorname> background color
3 -c # context lines
4 -fg <colorname> foreground color
5 -fn <fontname> set font name
6 -i ignore fatal errors
7 -lm # left margin
8 -ol watch object movement
9 -om watch object locating
10 -P alter piracy opcode
11 -rm # right margin
12 -rs # random number seed value
13 -sc # transcript width
14 -t set Tandy bit
15 -u # slots for multiple undo
16 -v show version information
17 -w # text width
18 -x expand abbreviations g/x/z
19 -xrm <resources> Set X11 resources
20 -zs # error checking (see below)
0 /*
1 * x_pic.c
2 *
3 * X interface, stubs for picture functions
4 *
5 * This file is part of Frotz.
6 *
7 * Frotz is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * Frotz is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 * Or visit http://www.fsf.org/
21 *
22 * Copyright (c) 1998-2000 Daniel Schepler
23 *
24 */
25
26 #include "x_frotz.h"
27 #include <X11/Xutil.h>
28 #include <stdio.h>
29 #include <stdlib.h>
30 #include <string.h>
31
32 struct picture_data {
33 int number, width, height, flags, data, colour;
34 };
35
36
37 static FILE *graphics_fp = NULL;
38 static struct {
39 int fileno, flags, unused1, images, link, entry_size,
40 padding, checksum, unused2, version;
41 } gheader;
42 struct picture_data *gtable;
43
44
45 static int read_word(FILE * fp)
46 {
47 int result;
48
49 result = fgetc(fp);
50 result |= fgetc(fp) << 8;
51 return result;
52 }
53
54
55 static int open_graphics_file(void)
56 {
57 char *graphics_name;
58 const char *base_start, *base_end;
59 int i;
60
61 base_start = strrchr(f_setup.story_name, '/');
62 if (base_start)
63 base_start++;
64 else
65 base_start = f_setup.story_name;
66 base_end = strrchr(base_start, '.');
67 if (!base_end)
68 base_end = strchr(base_start, 0);
69
70 if (f_setup.blorb_file == NULL) {
71 graphics_name = malloc(base_end - f_setup.story_name + 5);
72 sprintf(graphics_name, "%.*s.mg1", (int)(base_end - f_setup.story_name),
73 f_setup.story_name);
74 } else
75 graphics_name = f_setup.blorb_file;
76
77 if ((graphics_fp = fopen(graphics_name, "r")) == NULL)
78 os_fatal("Unable to open graphics file: %s", graphics_name);
79
80 gheader.fileno = fgetc(graphics_fp);
81 gheader.flags = fgetc(graphics_fp);
82 gheader.unused1 = read_word(graphics_fp);
83 gheader.images = read_word(graphics_fp);
84 gheader.link = read_word(graphics_fp);
85 gheader.entry_size = fgetc(graphics_fp);
86 gheader.padding = fgetc(graphics_fp);
87 gheader.checksum = read_word(graphics_fp);
88 gheader.unused2 = read_word(graphics_fp);
89 gheader.version = read_word(graphics_fp);
90
91 gtable = malloc(sizeof(struct picture_data) * gheader.images);
92 for (i = 0; i < gheader.images; i++) {
93 gtable[i].number = read_word(graphics_fp);
94 gtable[i].width = read_word(graphics_fp);
95 gtable[i].height = read_word(graphics_fp);
96 gtable[i].flags = read_word(graphics_fp);
97 gtable[i].data = fgetc(graphics_fp) << 16;
98 gtable[i].data |= fgetc(graphics_fp) << 8;
99 gtable[i].data |= fgetc(graphics_fp);
100 if (gheader.entry_size >= 14) {
101 gtable[i].colour = fgetc(graphics_fp) << 16;
102 gtable[i].colour |= fgetc(graphics_fp) << 8;
103 gtable[i].colour |= fgetc(graphics_fp);
104 } else
105 gtable[i].colour = 0;
106 fseek(graphics_fp,
107 gheader.entry_size - (gheader.entry_size >= 14 ? 14 : 11),
108 SEEK_CUR);
109 }
110
111 return 1;
112 }
113
114
115 static struct picture_data *find_picture(int picture)
116 {
117 int i;
118
119 for (i = 0; i < gheader.images; i++)
120 if (gtable[i].number == picture)
121 return gtable + i;
122 return NULL;
123 }
124
125
126 static unsigned long colourmap[16];
127 static unsigned long ega_colourmap[16];
128 static int old_colourmap_pos = -1;
129
130 void load_colourmap(int pos)
131 {
132 XColor color_dat;
133 int num_colours, i;
134
135 /* if (pos == old_colourmap_pos) */
136 if (pos == old_colourmap_pos || (pos == 0 && old_colourmap_pos != -1))
137 return;
138 if (old_colourmap_pos == -1) {
139 for (i = 0; i < 16; i++) {
140 if (i & 1)
141 color_dat.blue = 0xaaaa;
142 else
143 color_dat.blue = 0x0000;
144 if (i & 2)
145 color_dat.green = 0xaaaa;
146 else
147 color_dat.green = 0x0000;
148 if (i & 4)
149 color_dat.red = 0xaaaa;
150 else
151 color_dat.red = 0x0000;
152 if (i & 8) {
153 color_dat.blue += 0x5555;
154 color_dat.green += 0x5555;
155 color_dat.red += 0x5555;
156 }
157 XAllocColor(dpy,
158 DefaultColormap(dpy, DefaultScreen(dpy)),
159 &color_dat);
160 ega_colourmap[i] = color_dat.pixel;
161 }
162 }
163
164 old_colourmap_pos = pos;
165
166 memcpy(colourmap, ega_colourmap, sizeof(colourmap));
167 if (pos == 0)
168 return;
169
170 fseek(graphics_fp, pos, SEEK_SET);
171
172 num_colours = fgetc(graphics_fp);
173 if (num_colours > 14)
174 num_colours = 14;
175
176 for (i = 0; i < num_colours; i++) {
177 color_dat.red = fgetc(graphics_fp) * 0x101;
178 color_dat.green = fgetc(graphics_fp) * 0x101;
179 color_dat.blue = fgetc(graphics_fp) * 0x101;
180 XAllocColor(dpy, DefaultColormap(dpy, DefaultScreen(dpy)),
181 &color_dat);
182 colourmap[i + 2] = color_dat.pixel;
183 }
184 }
185
186
187 static unsigned char last[3840];
188 static int prev_seq[3840];
189 static int current_code, prev_code;
190 static int bits_left, byte_read, bits_per_code;
191 static unsigned char buf[512];
192 static int bufpos;
193
194
195 static void init_decompress(void)
196 {
197 bufpos = 0;
198 bits_per_code = 9;
199 bits_left = 0;
200 }
201
202
203 static int read_code(void)
204 {
205 int i, code;
206
207 code = 0;
208 i = bits_per_code;
209 do {
210 if (bits_left <= 0) {
211 byte_read = fgetc(graphics_fp);
212 bits_left = 8;
213 }
214
215 code |= (byte_read >> (8 - bits_left)) << (bits_per_code - i);
216
217 i -= bits_left;
218 bits_left = -i;
219 } while (i > 0);
220
221 return code & (0xfff >> (12 - bits_per_code));
222 }
223
224
225 static int decompress(void)
226 {
227 int code, val;
228
229 if (bufpos == 0) {
230 while ((code = read_code()) == 256) {
231 bits_per_code = 9;
232 current_code = 257;
233 }
234
235 if (code == 257)
236 return -1;
237
238 if (current_code < 4096)
239 prev_seq[current_code - 256] = prev_code;
240 for (val = code; val > 256; val = prev_seq[val - 256])
241 buf[bufpos++] = last[val - 256];
242 buf[bufpos++] = val;
243 if (code == current_code)
244 buf[0] = val;
245
246 if (current_code < 4096)
247 last[current_code - 256] = val;
248 prev_code = code;
249
250 if (++current_code == 1 << bits_per_code && bits_per_code < 12)
251 bits_per_code++;
252 }
253
254 return buf[--bufpos];
255 }
256
257
258 /*
259 * os_draw_picture
260 *
261 * Display a picture at the given coordinates. Top left is (1,1).
262 *
263 */
264 void os_draw_picture(int picture, int y, int x)
265 {
266 struct picture_data *data;
267 XImage *contents_image, *mask_image;
268 char *contents, *mask;
269 int transparent = -1;
270 int xpos, ypos, im_x, im_y;
271 int image_value;
272 unsigned long pixel_value;
273
274 if (graphics_fp == NULL)
275 if (!open_graphics_file())
276 return;
277
278 if ((data = find_picture(picture)) == NULL)
279 return;
280
281 load_colourmap(data->colour);
282 contents_image =
283 XCreateImage(dpy, DefaultVisual(dpy, DefaultScreen(dpy)),
284 DefaultDepth(dpy, DefaultScreen(dpy)), ZPixmap, 0,
285 NULL, data->width * 5 / 2, data->height * 3, 32, 0);
286 contents =
287 malloc(contents_image->height * contents_image->bytes_per_line);
288 contents_image->data = contents;
289 if (data->flags & 1) {
290 transparent = data->flags >> 12;
291 mask_image =
292 XCreateImage(dpy, DefaultVisual(dpy, DefaultScreen(dpy)),
293 /* DefaultDepth(dpy, DefaultScreen(dpy)), */ 1,
294 XYBitmap, 0, NULL,
295 data->width * 5 / 2, data->height * 3, 8, 0);
296 mask =
297 calloc(mask_image->height * mask_image->bytes_per_line, 1);
298 mask_image->data = mask;
299 }
300
301 fseek(graphics_fp, data->data, SEEK_SET);
302 init_decompress();
303 for (ypos = 0; ypos < data->height; ypos++)
304 for (xpos = 0; xpos < data->width; xpos++) {
305 image_value = decompress();
306 pixel_value = colourmap[image_value];
307 if (image_value == transparent)
308 pixel_value = 0;
309 for (im_y = ypos * 3; im_y < ypos * 3 + 3; im_y++)
310 for (im_x = xpos * 5 / 2;
311 im_x < (xpos + 1) * 5 / 2; im_x++)
312 XPutPixel(contents_image, im_x, im_y,
313 pixel_value);
314 if (image_value == transparent)
315 for (im_y = ypos * 3; im_y < ypos * 3 + 3;
316 im_y++)
317 for (im_x = xpos * 5 / 2;
318 im_x < (xpos + 1) * 5 / 2; im_x++)
319 XPutPixel(mask_image, im_x,
320 im_y, 1);
321 }
322
323 if (data->flags & 1) {
324 XSetFunction(dpy, bw_gc, GXand);
325 XPutImage(dpy, main_window, bw_gc, mask_image, 0, 0,
326 x - 1, y - 1, data->width * 5 / 2, data->height * 3);
327 }
328 XSetFunction(dpy, bw_gc, (data->flags & 1 ? GXor : GXcopy));
329 XPutImage(dpy, main_window, bw_gc, contents_image, 0, 0,
330 x - 1, y - 1, data->width * 5 / 2, data->height * 3);
331
332 XSetFunction(dpy, normal_gc, GXcopy);
333 XDestroyImage(contents_image);
334 if (data->flags & 1)
335 XDestroyImage(mask_image);
336 } /* os_draw_picture */
337
338
339 /*
340 * os_peek_colour
341 *
342 * Return the colour of the pixel below the cursor. This is used
343 * by V6 games to print text on top of pictures. The coulor need
344 * not be in the standard set of Z-machine colours. To handle
345 * this situation, Frotz extends the colour scheme: Values above
346 * 15 (and below 256) may be used by the interface to refer to
347 * non-standard colours. Of course, os_set_colour must be able to
348 * deal with these colours. Interfaces which refer to characters
349 * instead of pixels might return the current background colour
350 * instead.
351 *
352 */
353 extern long pixel_values[17];
354
355 int os_peek_colour(void)
356 {
357 XImage *point;
358
359 point = XGetImage(dpy, main_window, curr_x, curr_y, 1, 1,
360 AllPlanes, ZPixmap);
361
362 pixel_values[16] = XGetPixel(point, 0, 0);
363 return 16;
364 } /* os_peek_colour */
365
366
367 /*
368 * os_picture_data
369 *
370 * Return true if the given picture is available. If so, write the
371 * width and height of the picture into the appropriate variables.
372 * Only when picture 0 is asked for, write the number of available
373 * pictures and the release number instead.
374 *
375 */
376 int os_picture_data(int picture, int *height, int *width)
377 {
378 struct picture_data *entry;
379
380 if (graphics_fp == NULL)
381 if (!open_graphics_file())
382 return 0;
383
384 if (picture == 0) {
385 *height = gheader.images;
386 *width = gheader.version;
387 return 1;
388 }
389
390 entry = find_picture(picture);
391 if (entry == NULL)
392 return 0;
393 *height = entry->height * 3; /* 600 / 200 */
394 *width = entry->width * 5 / 2; /* 800 / 320 */
395 return 1;
396
397 } /* os_picture_data */
0 /*
1 * x_sample.c
2 *
3 * X interface, sound support
4 *
5 * This file is part of Frotz.
6 *
7 * Frotz is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * Frotz is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 * Or visit http://www.fsf.org/
21 *
22 * Copyright (c) 1998-2000 Daniel Schepler
23 *
24 */
25
26 #include "x_frotz.h"
27
28 void os_init_sound(void)
29 {
30 }
31
32
33 /*
34 * os_beep
35 *
36 * Play a beep sound. Ideally, the sound should be high- (number == 1)
37 * or low-pitched (number == 2).
38 *
39 */
40 void os_beep(int number)
41 {
42 XKeyboardState old_values;
43 XKeyboardControl new_values;
44
45 XGetKeyboardControl(dpy, &old_values);
46 new_values.bell_pitch = (number == 2 ? 400 : 800);
47 new_values.bell_duration = 100;
48 XChangeKeyboardControl(dpy, KBBellPitch | KBBellDuration, &new_values);
49 XBell(dpy, 100);
50 new_values.bell_pitch = old_values.bell_pitch;
51 new_values.bell_duration = old_values.bell_duration;
52 XChangeKeyboardControl(dpy, KBBellPitch | KBBellDuration, &new_values);
53 } /* os_beep */
54
55
56 #ifdef NO_SOUND
57 /*
58 * os_prepare_sample
59 *
60 * Load the sample from the disk.
61 *
62 */
63 void os_prepare_sample(int number)
64 {
65
66 /* Not implemented */
67
68 } /* os_prepare_sample */
69
70
71 /*
72 * os_start_sample
73 *
74 * Play the given sample at the given volume (ranging from 1 to 8 and
75 * 255 meaning a default volume). The sound is played once or several
76 * times in the background (255 meaning forever). In Z-code 3 the
77 * repeats value is always 0 and the number of repeats is taken from
78 * the sound file itself. The end_of_sound function is called as soon
79 * as the sound finishes.
80 *
81 */
82 void os_start_sample(int number, int volume, int repeats, zword eos)
83 {
84
85 /* Not implemented */
86
87 } /* os_start_sample */
88
89
90 /*
91 * os_stop_sample
92 *
93 * Turn off the current sample.
94 *
95 */
96 void os_stop_sample(int number)
97 {
98
99 /* Not implemented */
100
101 } /* os_stop_sample */
102
103
104 /*
105 * os_finish_with_sample
106 *
107 * Remove the current sample from memory (if any).
108 *
109 */
110 void os_finish_with_sample(int number)
111 {
112
113 /* Not implemented */
114
115 } /* os_finish_with_sample */
116
117
118 /*
119 * os_wait_sample
120 *
121 * Stop repeating the current sample and wait until it finishes.
122 *
123 */
124 void os_wait_sample(void)
125 {
126
127 /* Not implemented */
128
129 } /* os_wait_sample */
130
131 #endif /* NO_SOUND */
132
133 #ifdef OSS_SOUND
134
135 #include <signal.h>
136 #include <stdio.h>
137 #include <stdlib.h>
138 #include <string.h>
139 #include <errno.h>
140 #include <fcntl.h>
141 #include <unistd.h>
142 #include <sys/soundcard.h>
143 #include <sys/types.h>
144 #include <sys/ioctl.h>
145 #include <sys/wait.h>
146
147 extern void end_of_sound(void);
148
149 /* Buffer used to store sample data */
150 static char *sound_buffer = NULL;
151 static int sound_length;
152 static int sample_rate;
153 static int current_num;
154
155 /* Implementation of the separate process which plays the sounds.
156 The signals used to communicate with the process are:
157 SIGINT - complete current repeat of the sound, then quit
158 SIGTERM - stop sound immediately
159 */
160
161 static pid_t child_pid;
162
163 /* Number of repeats left */
164 static int num_repeats;
165
166 /* File handles for mixer and PCM devices */
167 static int mixer_fd, dsp_fd;
168
169 static int old_volume;
170
171
172 static void sigterm_handler(int signal)
173 {
174 ioctl(dsp_fd, SNDCTL_DSP_RESET, 0);
175 if (mixer_fd >= 0)
176 ioctl(mixer_fd, SOUND_MIXER_WRITE_VOLUME, &old_volume);
177 _exit(0);
178 }
179
180
181 static void sigint_handler(int signal)
182 {
183 num_repeats = 1;
184 }
185
186
187 static void play_sound(int volume, int repeats)
188 {
189 struct sigaction sa;
190
191 dsp_fd = open("/dev/dsp", O_WRONLY);
192 if (dsp_fd < 0) {
193 perror("/dev/dsp");
194 _exit(1);
195 }
196 ioctl(dsp_fd, SNDCTL_DSP_SPEED, &sample_rate);
197
198 if (volume != 255) {
199 mixer_fd = open("/dev/mixer", O_RDWR);
200 if (mixer_fd < 0)
201 perror("/dev/mixer");
202 else {
203 int new_vol;
204 ioctl(mixer_fd, SOUND_MIXER_READ_VOLUME, &old_volume);
205 new_vol = volume * 100 / 8;
206 ioctl(mixer_fd, SOUND_MIXER_WRITE_VOLUME, &new_vol);
207 }
208 } else
209 mixer_fd = -1;
210
211 sa.sa_handler = sigterm_handler;
212 sigemptyset(&sa.sa_mask);
213 sigaddset(&sa.sa_mask, SIGINT);
214 sigaddset(&sa.sa_mask, SIGTERM);
215 sa.sa_flags = 0;
216 sigaction(SIGTERM, &sa, NULL);
217 sa.sa_handler = sigint_handler;
218 sigaction(SIGINT, &sa, NULL);
219
220 for (num_repeats = repeats; num_repeats > 0;
221 num_repeats < 255 ? num_repeats-- : 0) {
222 char *curr_pos = sound_buffer;
223 int len_left = sound_length;
224 int write_result;
225
226 while (len_left > 0) {
227 write_result = write(dsp_fd, curr_pos, len_left);
228 if (write_result <= 0) {
229 perror("write on /dev/dsp");
230 goto finish;
231 }
232 curr_pos += write_result;
233 len_left -= write_result;
234 }
235 }
236
237 finish:
238 ioctl(dsp_fd, SNDCTL_DSP_SYNC, 0);
239 if (mixer_fd >= 0)
240 ioctl(mixer_fd, SOUND_MIXER_WRITE_VOLUME, &old_volume);
241 _exit(0);
242 }
243
244
245 /*
246 * os_prepare_sample
247 *
248 * Load the sample from the disk.
249 *
250 */
251 void os_prepare_sample(int number)
252 {
253 FILE *samples;
254 char *filename;
255 const char *basename, *dotpos;
256 int namelen;
257
258 if (sound_buffer != NULL && current_num == number)
259 return;
260
261 free(sound_buffer);
262 sound_buffer = NULL;
263 filename = malloc(strlen(story_name) + 10);
264 if (!filename)
265 return;
266 basename = strrchr(story_name, '/');
267 if (basename)
268 basename++;
269 else
270 basename = story_name;
271 dotpos = strrchr(basename, '.');
272 namelen = (dotpos ? dotpos - basename : strlen(basename));
273 if (namelen > 6)
274 namelen = 6;
275 sprintf(filename, "%.*ssound/%.*s%02d.snd",
276 basename - story_name, story_name, namelen, basename, number);
277
278 samples = fopen(filename, "r");
279 if (samples == NULL) {
280 perror(filename);
281 return;
282 }
283
284 fgetc(samples);
285 fgetc(samples);
286 fgetc(samples);
287 fgetc(samples);
288 sample_rate = fgetc(samples) << 8;
289 sample_rate |= fgetc(samples);
290 fgetc(samples);
291 fgetc(samples);
292 sound_length = fgetc(samples) << 8;
293 sound_length |= fgetc(samples);
294
295 sound_buffer = malloc(sound_length);
296 if (!sound_buffer) {
297 perror("malloc");
298 return;
299 }
300
301 if (sound_length < 0 ||
302 fread(sound_buffer, 1, sound_length, samples) < sound_length) {
303 if (feof(samples))
304 fprintf(stderr, "%s: premature EOF\n", filename);
305 else {
306 errno = ferror(samples);
307 perror(filename);
308 }
309 free(sound_buffer);
310 sound_buffer = NULL;
311 }
312
313 current_num = number;
314 } /* os_prepare_sample */
315
316
317 static void sigchld_handler(int signal)
318 {
319 int status;
320 struct sigaction sa;
321
322 waitpid(child_pid, &status, WNOHANG);
323 child_pid = 0;
324 sa.sa_handler = SIG_IGN;
325 sigemptyset(&sa.sa_mask);
326 sa.sa_flags = 0;
327 sigaction(SIGCHLD, &sa, NULL);
328 end_of_sound();
329 }
330
331
332 /*
333 * os_start_sample
334 *
335 * Play the given sample at the given volume (ranging from 1 to 8 and
336 * 255 meaning a default volume). The sound is played once or several
337 * times in the background (255 meaning forever). In Z-code 3 the
338 * repeats value is always 0 and the number of repeats is taken from
339 * the sound file itself. The end_of_sound function is called as soon
340 * as the sound finishes.
341 *
342 */
343 void os_start_sample(int number, int volume, int repeats)
344 {
345 sigset_t sigchld_mask;
346 struct sigaction sa;
347
348 os_prepare_sample(number);
349 if (!sound_buffer)
350 return;
351 os_stop_sample();
352
353 sigemptyset(&sigchld_mask);
354 sigaddset(&sigchld_mask, SIGCHLD);
355 sigprocmask(SIG_BLOCK, &sigchld_mask, NULL);
356
357 child_pid = fork();
358
359 if (child_pid < 0) { /* error in fork */
360 perror("fork");
361 return;
362 } else if (child_pid == 0) { /* child */
363 sigprocmask(SIG_UNBLOCK, &sigchld_mask, NULL);
364 play_sound(volume, repeats);
365 } else { /* parent */
366 sa.sa_handler = sigchld_handler;
367 sigemptyset(&sa.sa_mask);
368 sa.sa_flags = 0;
369 sigaction(SIGCHLD, &sa, NULL);
370
371 sigprocmask(SIG_UNBLOCK, &sigchld_mask, NULL);
372 }
373 } /* os_start_sample */
374
375
376 /* Send the specified signal to the player program, then wait for
377 it to exit. */
378 static void stop_player(int signal)
379 {
380 sigset_t sigchld_mask;
381 struct sigaction sa;
382 int status;
383
384 sigemptyset(&sigchld_mask);
385 sigaddset(&sigchld_mask, SIGCHLD);
386 sigprocmask(SIG_BLOCK, &sigchld_mask, NULL);
387
388 if (child_pid == 0) {
389 sigprocmask(SIG_UNBLOCK, &sigchld_mask, NULL);
390 return;
391 }
392 kill(child_pid, signal);
393 waitpid(child_pid, &status, 0);
394 child_pid = 0;
395
396 sa.sa_handler = SIG_IGN;
397 sigemptyset(&sa.sa_mask);
398 sa.sa_flags = 0;
399 sigaction(SIGCHLD, &sa, NULL);
400
401 sigprocmask(SIG_UNBLOCK, &sigchld_mask, NULL);
402 }
403
404
405 /*
406 * os_stop_sample
407 *
408 * Turn off the current sample.
409 *
410 */
411 void os_stop_sample(void)
412 {
413 stop_player(SIGTERM);
414 } /* os_stop_sample */
415
416
417 /*
418 * os_finish_with_sample
419 *
420 * Remove the current sample from memory (if any).
421 *
422 */
423 void os_finish_with_sample(void)
424 {
425 free(sound_buffer);
426 sound_buffer = NULL;
427 } /* os_finish_with_sample */
428
429
430 /*
431 * os_wait_sample
432 *
433 * Stop repeating the current sample and wait until it finishes.
434 *
435 */
436 void os_wait_sample(void)
437 {
438 stop_player(SIGINT);
439 } /* os_wait_sample */
440
441 #endif /* OSS_SOUND */
0 /*
1 * x_screen.c
2 *
3 * X interface, screen manipulation
4 *
5 * This file is part of Frotz.
6 *
7 * Frotz is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * Frotz is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 * Or visit http://www.fsf.org/
21 *
22 * Copyright (c) 1998-2000 Daniel Schepler
23 *
24 */
25
26 #include "x_frotz.h"
27 #include <stdio.h>
28
29
30 /*
31 * os_erase_area
32 *
33 * Fill a rectangular area of the screen with the current background
34 * colour. Top left coordinates are (1,1). The cursor does not move.
35 *
36 */
37 void os_erase_area(int top, int left, int bottom, int right, int UNUSED(win))
38 {
39 XFillRectangle(dpy, main_window, reversed_gc,
40 left - 1, top - 1, right - left + 1, bottom - top + 1);
41 } /* os_erase_area */
42
43
44 /*
45 * os_scroll_area
46 *
47 * Scroll a rectangular area of the screen up (units > 0) or down
48 * (units < 0) and fill the empty space with the current background
49 * colour. Top left coordinates are (1,1). The cursor stays put.
50 *
51 */
52 void os_scroll_area(int top, int left, int bottom, int right, int units)
53 {
54 if (units == 0)
55 return;
56 else if (units > bottom - top || units < top - bottom)
57 XFillRectangle(dpy, main_window, reversed_gc,
58 left - 1, top - 1, right - left + 1,
59 bottom - top + 1);
60 else if (units > 0) {
61 XCopyArea(dpy, main_window, main_window, current_gc,
62 left - 1, top - 1 + units,
63 right - left + 1, bottom - top - units + 1,
64 left - 1, top - 1);
65 XFillRectangle(dpy, main_window, reversed_gc,
66 left - 1, bottom - units, right - left + 1,
67 units);
68 } else {
69 XCopyArea(dpy, main_window, main_window, current_gc,
70 left - 1, top - 1, right - left + 1,
71 bottom - top + units + 1, left - 1, top - 1 + units);
72 XFillRectangle(dpy, main_window, reversed_gc, left - 1, top - 1,
73 right - left + 1, -units);
74 }
75 } /* os_scroll_area */
76
77
78 bool os_repaint_window(int win, int ypos_old, int ypos_new, int xpos,
79 int ysize, int xsize)
80 {
81 return TRUE;
82 }
83
84
85 /*
86 * os_from_true_colour
87 *
88 * Given a true colour, return an appropriate colour index.
89 *
90 * This is pretty brain-dead, and just makes it 3-bit true-color first.
91 * Eventually this will be changed to how sfrotz does it.
92 *
93 */
94 int os_from_true_colour(zword colour)
95 {
96 if (colour == 0xfffe)
97 return 0;
98 else if (colour == 0xffff)
99 return 1;
100 else {
101 int r = colour & 0x001F;
102 int g = colour & 0x03E0;
103 int b = colour & 0x7C00;
104 int index = (r ? 4 : 0) | (g ? 2 : 0) | (b ? 1 : 0);
105
106 switch (index) {
107 case 0: return 2;
108 case 1: return 6;
109 case 2: return 4;
110 case 3: return 8;
111 case 4: return 3;
112 case 5: return 7;
113 case 6: return 5;
114 case 7: return 9;
115 default: return 1; /* Can't happen */
116 }
117 }
118 }
119
120
121 /*
122 * os_to_true_colour
123 *
124 * Given a colour index, return the appropriate true colour.
125 *
126 * Eventually this will be changed to how sfrotz does it.
127 *
128 */
129 zword os_to_true_colour(int index)
130 {
131 switch (index) {
132 case 0: return -2;
133 case 1: return -1;
134 case 2: return 0x0000;
135 case 3: return 0x001D;
136 case 4: return 0x0340;
137 case 5: return 0x03BD;
138 case 6: return 0x59A0;
139 case 7: return 0x7C1F;
140 case 8: return 0x77A0;
141 case 9: return 0x7FFF;
142 case 10: return 0x5AD6;
143 case 11: return 0x4631;
144 case 12: return 0x2D6B;
145 default: return 0x0000;
146 }
147 }
0 #ifndef X_SETUP_H
1 #define X_SETUP_H
2
3 typedef struct x_setup_struct {
4 int background_color;
5 int foreground_color;
6 int random_seed;
7 int tandy_bit;
8 } x_setup_t;
9
10 extern x_setup_t x_setup;
11
12 #endif
0 /*
1 * x_text.c
2 *
3 * X interface, text functions
4 *
5 * This file is part of Frotz.
6 *
7 * Frotz is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * Frotz is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 * Or visit http://www.fsf.org/
21 *
22 * Copyright (c) 1998-2000 Daniel Schepler
23 *
24 */
25
26 #include <stdio.h>
27 #include <stdlib.h>
28 #include <X11/Intrinsic.h>
29 #include "x_frotz.h"
30
31 int curr_x = 0;
32 int curr_y = 0;
33
34 unsigned long bg_pixel = 0, fg_pixel = 0, def_bg_pixel = 0, def_fg_pixel = 0;
35
36 static int char_width(const XFontStruct *, zchar);
37
38
39 /* Try to allocate the specified standard colour. */
40 static int x_alloc_colour(int index, unsigned long *result)
41 {
42 char *str_type_return;
43 char *class_buf, *name_buf, *colour_name;
44 static char *fallback_names[] = {
45 "black", "red3", "green3", "yellow3", "blue3", "magenta3",
46 "cyan3",
47 "gray80", "gray50"
48 };
49 XColor screen, exact;
50 int retval;
51 XrmValue value;
52
53 class_buf = (char *)malloc(strlen(x_class) + 9);
54 name_buf = (char *)malloc(strlen(x_name) + 9);
55 sprintf(class_buf, "%s.Color%d", x_class, index);
56 sprintf(name_buf, "%s.color%d", x_name, index);
57 if (XrmGetResource(XtDatabase(dpy), name_buf, class_buf,
58 &str_type_return, &value))
59 colour_name = (char *)value.addr;
60 else
61 colour_name = fallback_names[index - 2];
62 retval = XAllocNamedColor(dpy, DefaultColormap(dpy, DefaultScreen(dpy)),
63 colour_name, &screen, &exact);
64 if (retval)
65 *result = screen.pixel;
66 free(class_buf);
67 free(name_buf);
68 return retval;
69 }
70
71
72 unsigned long pixel_values[17];
73
74 /* Process the given color name, and return an index corresponding to
75 it */
76 static int x_bg_fg_color(unsigned long *pixel, int index, char *color_name,
77 int def_index)
78 {
79 char extra;
80 int z_num;
81 XColor screen, exact;
82
83 if (color_name == NULL) {
84 *pixel = pixel_values[index] = pixel_values[def_index];
85 return def_index;
86 }
87 if (sscanf(color_name, "z:%d%c", &z_num, &extra) == 1) {
88 if (z_num < BLACK_COLOUR || z_num > GREY_COLOUR) {
89 fprintf(stderr, "Invalid Z-machine color %d\n", z_num);
90 os_quit(EXIT_FAILURE);
91 }
92 *pixel = pixel_values[index] = pixel_values[z_num];
93 return z_num;
94 }
95 if (XAllocNamedColor(dpy, DefaultColormap(dpy, DefaultScreen(dpy)),
96 color_name, &screen, &exact)) {
97 pixel_values[index] = screen.pixel;
98 for (z_num = BLACK_COLOUR; z_num <= GREY_COLOUR; z_num++)
99 if (pixel_values[z_num] == pixel_values[index])
100 return z_num;
101 return index;
102 } else {
103 fprintf(stderr, "Warning: could not allocate user color %s\n",
104 color_name);
105 *pixel = pixel_values[index] = pixel_values[def_index];
106 return def_index;
107 }
108 }
109
110
111 /* Try to allocate the standard Z machine colours, and in any case try
112 to allocate the default background and foreground colours. */
113 void x_init_colour(char *bg_name, char *fg_name)
114 {
115 int use_color, i;
116
117 for (i = 0; i < 17; i++)
118 pixel_values[i] = BlackPixel(dpy, DefaultScreen(dpy));
119 if (DefaultDepth(dpy, DefaultScreen(dpy)) == 1)
120 use_color = 0;
121 else {
122 for (i = BLACK_COLOUR; i <= GREY_COLOUR; i++) {
123 use_color = x_alloc_colour(i, &pixel_values[i]);
124 if (!use_color)
125 break;
126 }
127 if (!use_color) {
128 fprintf(stderr,
129 "Warning: could not allocate standard colors\n");
130 XFreeColors(dpy,
131 DefaultColormap(dpy, DefaultScreen(dpy)),
132 &pixel_values[BLACK_COLOUR],
133 i - BLACK_COLOUR, AllPlanes);
134 for (i--; i >= BLACK_COLOUR; i--)
135 pixel_values[i] =
136 BlackPixel(dpy, DefaultScreen(dpy));
137 }
138 }
139 if (use_color) {
140 z_header.config |= CONFIG_COLOUR;
141 z_header.flags |= COLOUR_FLAG;
142 } else {
143 z_header.flags &= ~COLOUR_FLAG;
144 pixel_values[WHITE_COLOUR] =
145 WhitePixel(dpy, DefaultScreen(dpy));
146 }
147
148 z_header.default_background =
149 x_bg_fg_color(&def_bg_pixel, 14, bg_name, 9);
150 z_header.default_foreground =
151 x_bg_fg_color(&def_fg_pixel, 15, fg_name, 2);
152 }
153
154
155 char *font_names[9] = {
156 "-adobe-times-medium-r-normal--14-*-*-*-*-*-iso8859-1",
157 "-adobe-times-bold-r-normal--14-*-*-*-*-*-iso8859-1",
158 "-adobe-times-medium-i-normal--14-*-*-*-*-*-iso8859-1",
159 "-adobe-times-bold-i-normal--14-*-*-*-*-*-iso8859-1",
160 "-adobe-courier-medium-r-normal--12-*-*-*-*-*-iso8859-1",
161 "-adobe-courier-bold-r-normal--12-*-*-*-*-*-iso8859-1",
162 "-adobe-courier-medium-o-normal--12-*-*-*-*-*-iso8859-1",
163 "-adobe-courier-bold-o-normal--12-*-*-*-*-*-iso8859-1",
164 "-*-Zork-*-*-*--13-*-*-*-*-*-*-*"
165 };
166
167
168 /*
169 * os_font_data
170 *
171 * Return true if the given font is available. The font can be
172 *
173 * TEXT_FONT
174 * PICTURE_FONT
175 * GRAPHICS_FONT
176 * FIXED_WIDTH_FONT
177 *
178 * The font size should be stored in "height" and "width". If
179 * the given font is unavailable then these values must _not_
180 * be changed.
181 *
182 */
183 int os_font_data(int font, int *height, int *width)
184 {
185 const XFontStruct *font_info;
186
187 if (font != TEXT_FONT && font != GRAPHICS_FONT
188 && font != FIXED_WIDTH_FONT)
189 return 0;
190 font_info = get_font(font, 0);
191 if (!font_info)
192 return 0;
193 *height = font_info->ascent + font_info->descent;
194 *width = char_width(font_info, '0');
195 return 1;
196 } /* os_font_data */
197
198
199 /*
200 * os_set_colour
201 *
202 * Set the foreground and background colours which can be:
203 *
204 * DEFAULT_COLOUR
205 * BLACK_COLOUR
206 * RED_COLOUR
207 * GREEN_COLOUR
208 * YELLOW_COLOUR
209 * BLUE_COLOUR
210 * MAGENTA_COLOUR
211 * CYAN_COLOUR
212 * WHITE_COLOUR
213 *
214 * MS-DOS 320 columns MCGA mode only:
215 *
216 * GREY_COLOUR
217 *
218 * Amiga only:
219 *
220 * LIGHTGREY_COLOUR
221 * MEDIUMGREY_COLOUR
222 * DARKGREY_COLOUR
223 *
224 * There may be more colours in the range from 16 to 255; see the
225 * remarks on os_peek_colour.
226 *
227 */
228 void os_set_colour(int new_foreground, int new_background)
229 {
230 if (new_foreground == 1)
231 new_foreground = z_header.default_foreground;
232 if (new_background == 1)
233 new_background = z_header.default_background;
234
235 fg_pixel = pixel_values[new_foreground];
236 bg_pixel = pixel_values[new_background];
237
238 XSetForeground(dpy, normal_gc, fg_pixel);
239 XSetBackground(dpy, normal_gc, bg_pixel);
240 XSetForeground(dpy, reversed_gc, bg_pixel);
241 XSetBackground(dpy, reversed_gc, fg_pixel);
242 XSetForeground(dpy, cursor_gc, bg_pixel ^ fg_pixel);
243 } /* os_set_colour */
244
245
246 static XFontStruct *font_info_cache[9];
247
248 const XFontStruct *get_font(int font, int style)
249 {
250 style = (style >> 1) & 7; /* Ignore REVERSE_STYLE bit (= 1) */
251 if (font == FIXED_WIDTH_FONT)
252 style |= (FIXED_WIDTH_STYLE >> 1);
253 if (font == GRAPHICS_FONT)
254 style = 8;
255 if (!font_info_cache[style])
256 font_info_cache[style] = XLoadQueryFont(dpy, font_names[style]);
257 return font_info_cache[style];
258 }
259
260
261 /*
262 * os_set_text_style
263 *
264 * Set the current text style. Following flags can be set:
265 *
266 * REVERSE_STYLE
267 * BOLDFACE_STYLE
268 * EMPHASIS_STYLE (aka underline aka italics)
269 * FIXED_WIDTH_STYLE
270 *
271 */
272 static int current_zfont = TEXT_FONT;
273 static int current_style = 0;
274
275 void os_set_text_style(int new_style)
276 {
277 if (new_style & REVERSE_STYLE)
278 current_gc = reversed_gc;
279 else
280 current_gc = normal_gc;
281
282 current_font_info = get_font(current_zfont, new_style);
283 if (current_font_info == NULL) {
284 fprintf(stderr, "Could not find font for style %d\n",
285 new_style);
286 current_font_info = get_font(current_zfont, 0);
287 }
288 XSetFont(dpy, current_gc, current_font_info->fid);
289
290 current_style = new_style;
291 } /* os_set_text_style */
292
293
294 /*
295 * os_set_font
296 *
297 * Set the font for text output. The interpreter takes care not to
298 * choose fonts which aren't supported by the interface.
299 *
300 */
301 void os_set_font(int new_font)
302 {
303 current_zfont = new_font;
304 os_set_text_style(current_style);
305 } /* os_set_font */
306
307
308 /*
309 * os_display_char
310 *
311 * Display a character of the current font using the current colours and
312 * text style. The cursor moves to the next position. Printable codes are
313 * all ASCII values from 32 to 126, ISO Latin-1 characters from 160 to
314 * 255, ZC_GAP (gap between two sentences) and ZC_INDENT (paragraph
315 * indentation). The screen should not be scrolled after printing to the
316 * bottom right corner.
317 *
318 */
319 void os_display_char(zchar c)
320 {
321 switch (c) {
322 case ZC_GAP:
323 os_display_char(' ');
324 c = ' ';
325 break;
326 case ZC_INDENT:
327 os_display_char(' ');
328 os_display_char(' ');
329 c = ' ';
330 break;
331 }
332 XDrawImageString(dpy, main_window, current_gc,
333 curr_x, curr_y + current_font_info->ascent, (char *)&c,
334 1);
335 curr_x += os_char_width(c);
336 } /* os_display_char */
337
338
339 /* Delete the given character backwards from the current position --
340 used to implement backspace in os_read_line */
341 void x_del_char(zchar c)
342 {
343 int char_width = os_char_width(c);
344
345 curr_x -= char_width;
346 os_erase_area(curr_y + 1, curr_x + 1,
347 curr_y + current_font_info->ascent +
348 current_font_info->descent, curr_x + char_width, 0);
349 }
350
351
352 /*
353 * os_display_string
354 *
355 * Pass a string of characters to os_display_char.
356 *
357 */
358 void os_display_string(const zchar * s)
359 {
360 while (*s) {
361 if (*s == ZC_NEW_FONT || *s == ZC_NEW_STYLE) {
362 s++;
363 if (s[-1] == ZC_NEW_FONT)
364 os_set_font(*s++);
365 else
366 os_set_text_style(*s++);
367 } else
368 os_display_char(*s++);
369 }
370 } /* os_display_string */
371
372
373 /*
374 * os_check_unicode
375 *
376 * Return with bit 0 set if the Unicode character can be
377 * displayed, and bit 1 if it can be input.
378 *
379 */
380 int os_check_unicode(int UNUSED(font), zchar UNUSED(c))
381 {
382 /* Assume full input and output. */
383 return 3;
384 }
385
386
387 /*
388 * os_char_width
389 *
390 * Return the width of the character in screen units.
391 *
392 */
393 static int char_width(const XFontStruct * font_info, zchar c)
394 {
395 int direction, font_ascent, font_descent;
396 XCharStruct size;
397
398 XTextExtents((XFontStruct *) font_info, (char *)&c, 1, &direction,
399 &font_ascent, &font_descent, &size);
400 return size.width;
401 }
402
403 int os_char_width(zchar c)
404 {
405 return char_width(current_font_info, c);
406 } /* os_char_width */
407
408
409 /*
410 * os_string_width
411 *
412 * Calculate the length of a word in screen units. Apart from letters,
413 * the word may contain special codes:
414 *
415 * NEW_STYLE - next character is a new text style
416 * NEW_FONT - next character is a new font
417 *
418 */
419 int os_string_width(const zchar * s)
420 {
421 int width = 0;
422
423 while (*s) {
424 if (*s == ZC_NEW_STYLE || *s == ZC_NEW_FONT)
425 s += 2;
426 else
427 width += os_char_width(*s++);
428 }
429 return width;
430 } /* os_string_width */
431
432
433 /*
434 * os_set_cursor
435 *
436 * Place the text cursor at the given coordinates. Top left is (1,1).
437 *
438 */
439 void os_set_cursor(int y, int x)
440 {
441 curr_y = y - 1;
442 curr_x = x - 1;
443 } /* os_set_cursor */
444
445
446 /*
447 * os_more_prompt
448 *
449 * Display a MORE prompt, wait for a keypress and remove the MORE
450 * prompt from the screen.
451 *
452 */
453 void os_more_prompt(void)
454 {
455 int saved_x, new_x;
456 const char *p = "[MORE]";
457
458 /* Save some useful information */
459 saved_x = curr_x;
460
461 /* os_set_text_style(0); */
462 while (*p)
463 os_display_char((zchar) (*p++));
464 os_read_key(0, TRUE);
465
466 new_x = curr_x;
467 curr_x = saved_x;
468 os_erase_area(curr_y + 1, saved_x + 1,
469 curr_y + current_font_info->ascent +
470 current_font_info->descent, new_x + 1, 0);
471 /* os_set_text_style(saved_style); */
472 } /* os_more_prompt */